UNPKG

watch-selector

Version:

Runs a function when a selector is added to dom

153 lines (152 loc) โ€ข 39.2 kB
"use strict";var se=Object.defineProperty;var In=Object.getOwnPropertyDescriptor;var Dn=Object.getOwnPropertyNames;var Nn=Object.prototype.hasOwnProperty;var Q=(e,t)=>()=>(e&&(t=e(e=0)),t);var ze=(e,t)=>{for(var n in t)se(e,n,{get:t[n],enumerable:!0})},Rn=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Dn(t))!Nn.call(e,r)&&r!==n&&se(e,r,{get:()=>t[r],enumerable:!(o=In(t,r))||o.enumerable});return e};var Ve=e=>Rn(se({},"__esModule",{value:!0}),e);function y(){return Y[Y.length-1]||null}function ue(e){Y.push(e)}function Ee(){return Y.pop()||null}function _n(e){let t=new Proxy(e,{get(l,a,i){if(typeof a=="string"&&a==="apply")return;let s=Reflect.get(l,a,i);return typeof s=="function"?s.bind(l):s}});return Object.assign(l=>e.querySelector(l),t,{all:l=>Array.from(e.querySelectorAll(l))})}function $n(e){return()=>e}function me(e){return t=>{V.has(e)||V.set(e,new Set),V.get(e).add(t)}}function Ke(e){let t=V.get(e);t&&(t.forEach(n=>{try{n()}catch(o){console.error("Error during cleanup:",o)}}),V.delete(e))}function qn(e,t,n,o){let r=new Set;return{element:e,selector:t,index:n,array:o,state:{},observers:r,el:_n(e),self:$n(e),cleanup:me(e),addObserver:l=>{r.add(l)}}}async function b(e,t,n,o,r){qn(e,t,n,o),ue({element:e,selector:t,index:n,array:o}),K(e,()=>{let i=new CustomEvent("cleanup",{detail:{element:e}});e.dispatchEvent(i)});let a;try{let i=r();a=await ce(i,e)}catch(i){console.error("Error in generator execution:",i)}finally{Ee()}return a}async function ce(e,t){let n=await e.next();for(;!n.done;){let o=n.value;try{await Ue(o,t)}catch(r){console.error("Error executing yielded value:",r)}n=await e.next()}return n.value}async function Ue(e,t){if(typeof e=="function"){let n=e(t);n&&typeof n.then=="function"&&await n;return}if(e&&typeof e.then=="function"){let n=await e;typeof n=="function"&&n(t);return}if(e&&typeof e[Symbol.iterator]=="function"){await ce(e,t);return}if(e&&typeof e[Symbol.asyncIterator]=="function"){await ce(e,t);return}if(Array.isArray(e)){for(let n of e)await Ue(n,t);return}console.warn("Unsupported yield type:",typeof e,e)}function Be(){let e=y();return(e==null?void 0:e.element)||null}function zn(e){let t=y();if(!t)throw new Error("el() can only be called within a generator context");return t.element.querySelector(e)}function Je(e,t){X.set(e,t)}function Qe(e){X.delete(e)}var Y,X,V,W=Q(()=>{"use strict";U();Y=[],X=new WeakMap;V=new WeakMap;zn.all=function(e){let t=y();if(!t)throw new Error("el.all() can only be called within a generator context");return Array.from(t.element.querySelectorAll(e))}});function F(){let e=y();if(!e)throw new Error("State functions can only be called within a generator context");let t=e.element;return B.has(t)||B.set(t,{}),B.get(t)}function w(e){return F()[e]}function H(e,t){let n=F();n[e]=t}function Ye(e,t){let n=F(),o=n[e];n[e]=t(o)}function de(e){let t=F();return e in t}function Xe(e){let t=F();delete t[e]}function pe(e,t){return{get(){return F()[e]},set(n){let o=F();o[e]=n},update(n){let o=F(),r=o[e];o[e]=n(r)},init(n){let o=F();e in o||(o[e]=n)}}}function fe(e,t){let n=pe(e);return de(e)||n.set(t),n}function Ze(e,t=[]){let n=++Vn,o=`__computed_${n}`,r=`__computed_deps_${n}`;return function(){let l=F(),a=t.map(c=>l[c]),i=l[r];if(!i||a.length!==i.length||!a.every((c,u)=>c===i[u])){let c=e();return l[o]=c,l[r]=a,c}return l[o]}}function je(e,t){O.has(e)||O.set(e,new Set);let n=O.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&O.delete(e)}}function et(e,t){let n=w(e);H(e,t);let o=O.get(e);o&&o.forEach(r=>{try{r(t,n)}catch(l){console.error("Error in state watcher:",l)}})}function tt(e){let t=new Map(O);O.clear();try{e()}finally{for(let[n,o]of t)O.set(n,o)}}function nt(e,t,n){let o=n||`watch_state_${e}`,r=t;try{let i=localStorage.getItem(o);i!==null&&(r=JSON.parse(i))}catch(i){console.warn("Failed to load persisted state:",i)}let l=fe(e,r),a=l.set;return l.set=function(i){a.call(this,i);try{localStorage.setItem(o,JSON.stringify(i))}catch(s){console.warn("Failed to persist state:",s)}},l}function ot(){let e=y();if(!e)throw new Error("clearAllState can only be called within a generator context");B.delete(e.element)}function he(){return{...F()}}function rt(e="State:"){console.log(e,he())}function lt(e){return Object.freeze({...B.get(e)||{}})}var B,Vn,O,Z=Q(()=>{"use strict";W();B=new WeakMap;Vn=0;O=new Map});var ut={};ze(ut,{change:()=>Te,click:()=>xe,composeEventHandlers:()=>ge,createCustomEvent:()=>ve,createEventBehavior:()=>Me,delegate:()=>Le,emit:()=>Ce,input:()=>ye,on:()=>L,onAttr:()=>be,onMount:()=>We,onResize:()=>we,onText:()=>Se,onUnmount:()=>ke,onVisible:()=>Fe,submit:()=>He,triggerUnmountHandlers:()=>Yn});function L(...e){if(e.length>=3&&e[0]&&(e[0]instanceof Element||typeof e[0]=="object"&&"nodeType"in e[0]&&e[0].nodeType===1)){let[n,o,r,l={}]=e;return Kn(n,o,r,l)}else{let[n,o,r={}]=e;return Un(n,o,r)}}function Kn(e,t,n,o){let r=ct(t),l=at(e,n,!1,o),a=it(l,o);return st(e,r,a,o)}function Un(e,t,n){return o=>{let r=ct(e),l=at(o,t,!0,n),a=it(l,n),i=st(o,r,a,n);return y()&&me(o)(i),i}}async function Bn(e,t,n,o){j.has(e)||j.set(e,{current:null,latest:null});let r=j.get(e);if(t==="latest")r.latest=n,r.current||(r.current=(async()=>{for(;r.latest;){r.latest=null;try{await o()}catch(l){console.error("Error in queued generator execution:",l)}}r.current=null})()),await r.current;else{let l=r.current||Promise.resolve();r.current=l.then(async()=>{try{await o()}catch(a){console.error("Error in sequential generator execution:",a)}}),await r.current}}function at(e,t,n,o){return async r=>{var l;try{let a=e;if(o.delegate){let s=r.target,c=(l=s==null?void 0:s.closest)==null?void 0:l.call(s,o.delegate);if(!c||!e.contains(c))return;a=c}if(o.filter&&!o.filter(r,a))return;let i;if(n)y()?i=t(r):i=t(r,a);else{ue({element:a,selector:"event",index:0,array:[a]});try{i=t(r,a)}finally{Ee()}}if(i&&typeof i.next=="function"){let s=o.queue||"all";s==="none"?b(a,"event",0,[a],()=>i).catch(c=>{console.error("Error in concurrent generator execution:",c)}):await Bn(a,s,r,()=>b(a,"event",0,[a],()=>i))}else i&&typeof i.then=="function"&&await i}catch(a){console.error("Error in event handler:",a)}}}function it(e,t){return t.debounce?Jn(e,t.debounce):t.throttle?Qn(e,t.throttle):n=>{e(n).catch(o=>{console.error("Error in async event handler:",o)})}}function st(e,t,n,o){let r={capture:o.delegate?o.delegatePhase==="capture":o.capture,once:o.once,passive:o.passive,signal:o.signal};return e.addEventListener(t,n,r),()=>{o.signal&&o.signal.aborted||(e.removeEventListener(t,n,r),j.delete(e))}}function ct(e){if(typeof e=="string")return e;if(e instanceof CustomEvent)return e.type;if(e&&typeof e=="object"&&"type"in e)return e.type;throw new Error("Invalid event type")}function Jn(e,t){let n=typeof t=="number"?{wait:t,trailing:!0}:{trailing:!0,...t},o,r=null,l=!1;return a=>{r=a;let i=n.leading&&!l;clearTimeout(o),i&&(l=!0,e(a).catch(s=>{console.error("Error in debounced event handler (leading):",s)})),o=setTimeout(()=>{l=!1,n.trailing&&r&&e(r).catch(s=>{console.error("Error in debounced event handler (trailing):",s)})},n.wait)}}function Qn(e,t){let n=typeof t=="number"?{limit:t,leading:!0}:{leading:!0,...t},o=null,r,l=0;return a=>{o=a;let i=Date.now(),s=i-l>n.limit;n.leading&&s?(l=i,e(a).catch(c=>{console.error("Error in throttled event handler (leading):",c)})):n.trailing&&(clearTimeout(r),r=setTimeout(()=>{o&&Date.now()-l>=n.limit&&(l=Date.now(),e(o).catch(c=>{console.error("Error in throttled event handler (trailing):",c)}))},n.limit-(i-l)))}}function xe(...e){if(e.length>=2&&e[0]&&"nodeType"in e[0]){let[t,n,o]=e;return L(t,"click",n,o)}else{let[t,n]=e;return L("click",t,n)}}function ye(...e){if(e.length>=2&&e[0]&&"nodeType"in e[0]){let[t,n,o]=e;return L(t,"input",n,o)}else{let[t,n]=e;return L("input",t,n)}}function Te(...e){if(e.length>=2&&e[0]&&"nodeType"in e[0]){let[t,n,o]=e;return L(t,"change",n,o)}else{let[t,n]=e;return L("change",t,n)}}function He(...e){if(e.length>=2&&e[0]&&"nodeType"in e[0]){let[t,n,o]=e;return L(t,"submit",n,o)}else{let[t,n]=e;return L("submit",t,n)}}function Me(e,t,n){return function*(){yield L(e,t,n)}}function ge(...e){return async function*(t,n){for(let o of e){let r=o.length>=2?o(t,n):o(t);if(r&&typeof r=="object"&&"next"in r){let l=r,a=l.next();for(;!a.done;)yield a.value,a=l.next()}else r&&typeof r=="object"&&"then"in r&&await r}}}function Le(e,t,n,o){return L(t,n,{...o,delegate:e})}function ve(e,t,n){return new CustomEvent(e,{detail:t,bubbles:!0,cancelable:!0,...n})}function Ce(...e){if(e.length>=2&&typeof e[0]=="object"&&"nodeType"in e[0]){let[t,n,o,r]=e,l=new CustomEvent(n,{detail:o,bubbles:!0,cancelable:!0,...r});t.dispatchEvent(l)}else{let[t,n,o]=e;return r=>{let l=new CustomEvent(t,{detail:n,bubbles:!0,cancelable:!0,...o});r.dispatchEvent(l)}}}function be(...e){if(e.length===3){let[t,n,o]=e,r=new MutationObserver(l=>{l.forEach(a=>{if(a.type==="attributes"&&a.target===t){let i=a.attributeName,s=!1;typeof n=="string"?s=i===n:s=n.test(i),s&&o({attributeName:i,oldValue:a.oldValue,newValue:t.getAttribute(i),element:t})}})});return r.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:typeof n=="string"?[n]:void 0}),()=>r.disconnect()}else{let[t,n]=e;return o=>{let r=new MutationObserver(l=>{l.forEach(a=>{if(a.type==="attributes"&&a.target===o){let i=a.attributeName,s=!1;typeof t=="string"?s=i===t:s=t.test(i),s&&n({attributeName:i,oldValue:a.oldValue,newValue:o.getAttribute(i),element:o})}})});return r.observe(o,{attributes:!0,attributeOldValue:!0,attributeFilter:typeof t=="string"?[t]:void 0}),()=>r.disconnect()}}}function Se(...e){if(e.length===2){let[t,n]=e,o=t.textContent||"",r=new MutationObserver(l=>{l.forEach(a=>{if(a.type==="childList"||a.type==="characterData"){let i=t.textContent||"";i!==o&&(n({oldText:o,newText:i,element:t}),o=i)}})});return r.observe(t,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0}),()=>r.disconnect()}else{let[t]=e;return n=>{let o=n.textContent||"",r=new MutationObserver(l=>{l.forEach(a=>{if(a.type==="childList"||a.type==="characterData"){let i=n.textContent||"";i!==o&&(t({oldText:o,newText:i,element:n}),o=i)}})});return r.observe(n,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0}),()=>r.disconnect()}}}function Fe(...e){if(e.length>=2&&typeof e[0]=="object"&&"nodeType"in e[0]){let[t,n,o]=e,r=new IntersectionObserver(l=>{l.forEach(a=>{a.target===t&&n({isVisible:a.isIntersecting,intersectionRatio:a.intersectionRatio,boundingClientRect:a.boundingClientRect,element:t})})},o);return r.observe(t),()=>r.disconnect()}else{let[t,n]=e;return o=>{let r=new IntersectionObserver(l=>{l.forEach(a=>{a.target===o&&t({isVisible:a.isIntersecting,intersectionRatio:a.intersectionRatio,boundingClientRect:a.boundingClientRect,element:o})})},n);return r.observe(o),()=>r.disconnect()}}}function we(...e){if(e.length===2){let[t,n]=e,o=new ResizeObserver(r=>{r.forEach(l=>{l.target===t&&n({contentRect:l.contentRect,borderBoxSize:Array.from(l.borderBoxSize),contentBoxSize:Array.from(l.contentBoxSize),element:t})})});return o.observe(t),()=>o.disconnect()}else{let[t]=e;return n=>{let o=new ResizeObserver(r=>{r.forEach(l=>{l.target===n&&t({contentRect:l.contentRect,borderBoxSize:Array.from(l.borderBoxSize),contentBoxSize:Array.from(l.contentBoxSize),element:n})})});return o.observe(n),()=>o.disconnect()}}}function We(...e){if(e.length===2){let[t,n]=e;return n(t),()=>{}}else{let[t]=e;return n=>(t(n),()=>{})}}function Yn(e){Ke(e);let t=k.get(e);t&&(t.forEach(n=>n(e)),k.delete(e))}function ke(...e){if(e.length===2){let[t,n]=e;return k.has(t)||k.set(t,new Set),k.get(t).add(n),()=>{var o;(o=k.get(t))==null||o.delete(n)}}else{let[t]=e;return n=>(k.has(n)||k.set(n,new Set),k.get(n).add(t),()=>{var o;(o=k.get(n))==null||o.delete(t)})}}var j,k,Oe=Q(()=>{"use strict";W();j=new WeakMap;k=new WeakMap});function dt(){A||(A=new MutationObserver(Xn),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Et):Et())}function Et(){ee||!A||(A.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeOldValue:!0}),ee=!0)}function Xn(e){let t=new Set,n=new Set;e.forEach(o=>{o.type==="childList"&&(o.addedNodes.forEach(r=>{r instanceof HTMLElement&&mt(r,t)}),o.removedNodes.forEach(r=>{r instanceof HTMLElement&&mt(r,n)})),o.type==="attributes"&&o.target instanceof HTMLElement&&t.add(o.target)}),t.size>0&&Zn(t),n.size>0&&jn(n)}function mt(e,t){t.add(e);let n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,null),o;for(;o=n.nextNode();)o instanceof HTMLElement&&t.add(o)}function Zn(e){if(v.size===0)return;let t=new Map;v.forEach((n,o)=>{let r=new Set;e.forEach(l=>{try{l.matches(o)&&r.add(l)}catch(a){console.warn(`Invalid selector: ${o}`,a)}}),r.size>0&&t.set(o,r)}),t.forEach((n,o)=>{let r=v.get(o);r&&n.forEach(l=>{r.forEach(a=>{try{a(l)}catch(i){console.error(`Error in handler for selector "${o}":`,i)}})})})}function jn(e){e.forEach(t=>{try{let{triggerUnmountHandlers:n}=(Oe(),Ve(ut));n(t)}catch(n){let o=R.get(t);o&&(o.forEach(r=>{try{r(t)}catch(l){console.error("Error in unmount handler:",l)}}),R.delete(t))}_.forEach(n=>{let o=n.getInstances();o.has(t)&&o.delete(t)})})}function pt(e,t){dt(),v.has(e)||v.set(e,new Set);let n=v.get(e);n.add(t);try{document.querySelectorAll(e).forEach(r=>{if(r instanceof HTMLElement)try{t(r)}catch(l){console.error("Error applying handler to existing element:",l)}})}catch(o){console.warn(`Invalid selector during registration: ${e}`,o)}return()=>{n.delete(t),n.size===0&&v.delete(e)}}function K(e,t){R.has(e)||R.set(e,new Set);let n=R.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&R.delete(e)}}function ft(){return{isInitialized:A!==null,isObserving:ee,selectorCount:v.size,unmountCount:0}}function $(e){let t=eo(e);if(_.has(t))return _.get(t);let n=new Map,o=new Set,r=Object.assign(function(){r.destroy()},{subject:e,getInstances:()=>n,layer:l=>{let a=to(e,l,n);o.add(a)},destroy:()=>{o.forEach(l=>l()),o.clear(),n.clear(),_.delete(t)}});return _.set(t,r),r}function eo(e){if(typeof e=="string")return e;if(e instanceof HTMLElement)return T.has(e)||T.set(e,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),`element:${T.get(e)}`;if(Array.isArray(e))return`array:${e.map(n=>n instanceof HTMLElement?(T.has(n)||T.set(n,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),T.get(n)):"unknown").join(",")}`;if(e instanceof NodeList)return`nodelist:${Array.from(e).map(n=>n instanceof HTMLElement?(T.has(n)||T.set(n,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),T.get(n)):"unknown").join(",")}`;if(typeof e=="function")return e;if(typeof e=="object"&&e!==null&&"parent"in e&&"childSelector"in e){let t=e;return T.has(t.parent)||T.set(t.parent,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),`delegation:${T.get(t.parent)}:${t.childSelector}`}if(typeof e=="object"&&e!==null&&"parent"in e&&"selector"in e){let t=e;return T.has(t.parent)||T.set(t.parent,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),`scoped:${T.get(t.parent)}:${t.selector}`}if(typeof e=="object"&&e!==null&&"parent"in e&&"matcher"in e){let t=e;return T.has(t.parent)||T.set(t.parent,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),`scoped:${T.get(t.parent)}:matcher`}return e}function to(e,t,n){dt();let o=new WeakMap,r=c=>{let u=o.get(c)||new Set;u.has(t)||(u.add(t),o.set(c,u),n.has(c)||n.set(c,{element:c,getState:()=>lt(c)}),b(c,typeof e=="string"?e:"matcher",Array.from(n.keys()).indexOf(c),Array.from(n.keys()),t).catch(d=>{console.error("Error in behavior generator:",d),u.delete(t),u.size===0&&o.delete(c)}))},l=(c,u)=>{if(typeof u=="string")return c.matches(u);if(u instanceof HTMLElement)return c===u;if(Array.isArray(u))return u.includes(c);if(u instanceof NodeList)return Array.from(u).includes(c);if(typeof u=="function")return u(c);if(typeof u=="object"&&u!==null&&"parent"in u&&"childSelector"in u){let d=u;return(d.parent.contains(c)||d.parent===c)&&c.matches(d.childSelector)}if(typeof u=="object"&&u!==null&&"parent"in u&&"selector"in u){let d=u;return(d.parent.contains(c)||d.parent===c)&&c.matches(d.selector)}if(typeof u=="object"&&u!==null&&"parent"in u&&"matcher"in u){let d=u;return(d.parent.contains(c)||d.parent===c)&&d.matcher(c)}return!1},a=c=>{l(c,e)&&r(c)},i=typeof e=="string"?e:"*";v.has(i)||v.set(i,new Set);let s=v.get(i);return s.add(a),typeof e=="string"?document.querySelectorAll(i).forEach(c=>{c instanceof HTMLElement&&a(c)}):document.querySelectorAll("*").forEach(c=>{c instanceof HTMLElement&&a(c)}),()=>{s.delete(a),s.size===0&&v.delete(i)}}function ht(){A&&(A.disconnect(),A=null),ee=!1,v.clear(),_.clear(),T=new WeakMap}var A,ee,v,R,_,T,U=Q(()=>{"use strict";Z();W();A=null,ee=!1,v=new Map,R=new WeakMap,_=new Map,T=new WeakMap});var ro={};ze(ro,{$:()=>Pe,addClass:()=>Ut,all:()=>At,allDOM:()=>pn,async:()=>Sn,attr:()=>Xt,batch:()=>Mn,batchAll:()=>mn,batchGenerator:()=>Wt,batchStateUpdates:()=>tt,blur:()=>ln,button:()=>yt,change:()=>Te,checked:()=>on,child:()=>fn,children:()=>un,cleanup:()=>re,cleanupObserver:()=>ht,clearAllState:()=>ot,click:()=>xe,compose:()=>Cn,composeEventHandlers:()=>ge,context:()=>G,contextFor:()=>xt,createChildWatcher:()=>Re,createComputed:()=>Ze,createCustomEvent:()=>ve,createEventBehavior:()=>Me,createGenerator:()=>Pt,createPersistedState:()=>nt,createScopedWatcher:()=>I,createState:()=>fe,createTypedState:()=>pe,ctx:()=>Gt,data:()=>tn,debounce:()=>Tn,debounceGenerator:()=>te,debugState:()=>he,default:()=>Ie,delay:()=>xn,delayGenerator:()=>wt,delegate:()=>Le,deleteState:()=>Xe,destroy:()=>qt,disconnectScopedWatchers:()=>Fn,div:()=>Mt,el:()=>Pe,elDOM:()=>dn,emit:()=>Ce,focus:()=>rn,form:()=>Ht,gen:()=>It,getCurrentContext:()=>y,getCurrentElement:()=>Be,getInstances:()=>$t,getObserverStatus:()=>ft,getParentContext:()=>Ot,getScopedWatchers:()=>wn,getState:()=>w,hasAttr:()=>jt,hasClass:()=>Qt,hasState:()=>de,hide:()=>sn,html:()=>Kt,input:()=>ye,inputFactory:()=>Tt,isElement:()=>zt,isElementLike:()=>M,layer:()=>_t,logState:()=>rt,memoize:()=>Ln,on:()=>L,onAttr:()=>be,onMount:()=>We,onResize:()=>we,onText:()=>Se,onUnmount:()=>ke,onVisible:()=>Fe,onceFactory:()=>bt,onceGenerator:()=>oe,onceHelper:()=>hn,parent:()=>cn,prop:()=>en,query:()=>De,queryAll:()=>Ne,rateLimit:()=>gn,register:()=>pt,removeAttr:()=>Zt,removeClass:()=>Bt,resolveElement:()=>m,retry:()=>$e,run:()=>Rt,runOn:()=>le,safely:()=>Hn,scopedWatch:()=>Wn,scopedWatchBatch:()=>kn,scopedWatchBatchWithController:()=>Pn,scopedWatchOnce:()=>An,scopedWatchTimeout:()=>On,scopedWatchWithController:()=>Gn,self:()=>J,setState:()=>H,setStateReactive:()=>et,show:()=>an,siblings:()=>En,span:()=>gt,style:()=>Yt,submit:()=>He,text:()=>Vt,throttle:()=>yn,throttleGenerator:()=>ne,timeout:()=>vn,toggleClass:()=>Jt,unless:()=>bn,updateState:()=>Ye,value:()=>nn,watch:()=>Ie,watchGenerator:()=>Dt,watchState:()=>je,when:()=>_e,withData:()=>Lt,withDebounce:()=>vt,withFilter:()=>St,withThrottle:()=>Ct});module.exports=Ve(ro);U();W();function G(e,t={}){return{selector:e,elementType:{},options:t,__brand:"PreDefinedWatchContext"}}function xt(e,t,n={}){return{selector:e,elementType:{},options:n,__brand:"PreDefinedWatchContext"}}var yt=(e,t={})=>G(e,t),Tt=(e,t={})=>G(e,t),Ht=(e,t={})=>G(e,t),Mt=(e,t={})=>G(e,t),gt=(e,t={})=>G(e,t);function Lt(e,t){return{...e,options:{...e.options,data:{...e.options.data||{},...t}}}}function vt(e,t){return{...e,options:{...e.options,debounce:t}}}function Ct(e,t){return{...e,options:{...e.options,throttle:t}}}function bt(e){return{...e,options:{...e.options,once:!0}}}function St(e,t){return{...e,options:{...e.options,filter:t}}}function Ft(e){return typeof e=="object"&&e!==null&&"__brand"in e&&e.__brand==="PreDefinedWatchContext"}function te(e,t){let n=new WeakMap;return function*(){let o=e(),r=o.next();for(;!r.done;){let l=r.value;yield i=>{let s=n.get(i);s&&clearTimeout(s);let c=setTimeout(()=>{l(i),n.delete(i)},t);n.set(i,c)},r=o.next()}}}function ne(e,t){let n=new WeakMap;return function*(){let o=e(),r=o.next();for(;!r.done;){let l=r.value;yield i=>{let s=Date.now(),c=n.get(i)||0;s-c>=t&&(l(i),n.set(i,s))},r=o.next()}}}function oe(e){let t=new WeakSet;return function*(){let n=e(),o=n.next();for(;!o.done;){let r=o.value;yield a=>{t.has(a)||(r(a),t.add(a))},o=n.next()}}}function wt(e,t){return function*(){let n=e(),o=n.next();for(;!o.done;){let r=o.value;yield a=>{setTimeout(()=>r(a),t)},o=n.next()}}}function Wt(e,t=10){return function*(){let n=e(),o=n.next();for(;!o.done;){let r=o.value,l=[];yield i=>{if(l.push(i),l.length>=t){let s=l.splice(0,t);requestAnimationFrame(()=>{s.forEach(c=>r(c))})}},o=n.next()}}}W();function Ae(){let e=y();if(!e)throw new Error("Generator context functions can only be called within a generator");let t=e.element;return{self(){return t},el(n){return t.querySelector(n)},all(n){return Array.from(t.querySelectorAll(n))},cleanup(n){let o=no();o.has(t)||o.set(t,new Set),o.get(t).add(n)},ctx(){return{element:t,selector:e.selector,index:e.index,array:e.array,el:this.el,self:this.self,cleanup:this.cleanup}},get element(){return t},get selector(){return e.selector},get index(){return e.index},get array(){return e.array}}}var q=new WeakMap,kt=new WeakMap;function no(){return q}function oo(e){return kt.get(e)}function Ge(e,t){kt.set(e,t)}function Ot(){let e=J(),t=X.get(e);if(!t)return null;let n=oo(t);return{element:t,api:n}}function J(){let e=y();if(!e)throw new Error("self() can only be called within a generator context");return e.element}function Pe(e){let t=y();if(!t)throw new Error("el() can only be called within a generator context");return t.element.querySelector(e)}function At(e){let t=y();if(!t)throw new Error("all() can only be called within a generator context");return Array.from(t.element.querySelectorAll(e))}function re(e){let t=y();if(!t)throw new Error("cleanup() can only be called within a generator context");let n=t.element;q.has(n)||q.set(n,new Set),q.get(n).add(e)}function Gt(){return Ae()}function Pt(e){return function*(){let t=Ae();yield*e(t)}}function It(e){return e}function Dt(e,t){return function*(){let n=Ae();yield*t(n)}}function Nt(e){let t=q.get(e);t&&(t.forEach(n=>{try{n()}catch(o){console.error("Error during cleanup:",o)}}),q.delete(e))}function Ie(e,t,n){if(Ft(e)){let l=e,a=t,i=a;l.options.debounce&&(i=te(a,l.options.debounce)),l.options.throttle&&(i=ne(a,l.options.throttle)),l.options.once&&(i=oe(a));let s=$(l.selector);return s.layer(i),s}if(arguments.length===3&&e instanceof HTMLElement&&typeof t=="string"){let l=e,a=t,i=n,c=$({parent:l,childSelector:a});return c.layer(i),c}let o=t,r=$(e);return r.layer(o),r}function Rt(e,t){let n=Array.from(document.querySelectorAll(e));n.forEach((o,r)=>{o instanceof HTMLElement&&b(o,e,r,n,t).then(l=>{l!==void 0&&Ge(o,l)}).catch(l=>{console.error("Error in run generator:",l)})})}function le(e,t){let n=[e];return b(e,`element-${e.tagName.toLowerCase()}`,0,n,t).then(o=>(o!==void 0&&Ge(e,o),o))}function _t(e,t){e.layer(t)}function $t(e){return e.getInstances()}function qt(e){e.destroy()}W();function zt(e){return e instanceof HTMLElement}function M(e){return typeof e=="string"||e instanceof HTMLElement}function m(e){return typeof e=="string"?document.querySelector(e):e instanceof HTMLElement?e:null}function Vt(...e){if(e.length===2){let[t,n]=e,o=m(t);o&&(o.textContent=n)}else if(e.length===1&&M(e[0])){let[t]=e,n=m(t);return(n==null?void 0:n.textContent)||null}else if(e.length===1){let[t]=e;return n=>{n.textContent=t}}else return t=>t.textContent||""}function Kt(...e){if(e.length===2){let[t,n]=e,o=m(t);o&&(o.innerHTML=n)}else if(e.length===1&&M(e[0])){let[t]=e,n=m(t);return(n==null?void 0:n.innerHTML)||null}else if(e.length===1){let[t]=e;return n=>{n.innerHTML=t}}else return t=>t.innerHTML}function Ut(...e){if(e.length>=1&&M(e[0])){let[t,...n]=e,o=m(t);o&&o.classList.add(...n)}else{let t=e;return n=>{n.classList.add(...t)}}}function Bt(...e){if(e.length>=1&&M(e[0])){let[t,...n]=e,o=m(t);o&&o.classList.remove(...n)}else{let t=e;return n=>{n.classList.remove(...t)}}}function Jt(...e){if(e.length>=2&&M(e[0])){let[t,n,o]=e,r=m(t);return r?r.classList.toggle(n,o):!1}else{let[t,n]=e;return o=>o.classList.toggle(t,n)}}function Qt(...e){if(e.length===2){let[t,n]=e,o=m(t);return o?o.classList.contains(n):!1}else{let[t]=e;return n=>n.classList.contains(t)}}function Yt(...e){if(e.length===2&&M(e[0])){let[t,n]=e,o=m(t);o&&typeof n=="object"&&Object.assign(o.style,n)}else if(e.length===3&&M(e[0])){let[t,n,o]=e,r=m(t);r&&(r.style[n]=o)}else if(e.length===1){let[t]=e;if(typeof t=="object")return n=>{Object.assign(n.style,t)}}else if(e.length===2){let[t,n]=e;return o=>{o.style[t]=n}}}function Xt(...e){if(e.length===3){let[t,n,o]=e,r=m(t);r&&r.setAttribute(n,o)}else if(e.length===2&&M(e[0])){let[t,n]=e,o=m(t);return(o==null?void 0:o.getAttribute(n))||null}else if(e.length===2){let[t,n]=e;return o=>{o.setAttribute(t,n)}}else{let[t]=e;return n=>n.getAttribute(t)}}function Zt(...e){if(e.length===2){let[t,n]=e,o=m(t);o&&o.removeAttribute(n)}else{let[t]=e;return n=>{n.removeAttribute(t)}}}function jt(...e){if(e.length===2){let[t,n]=e,o=m(t);return o?o.hasAttribute(n):!1}else{let[t]=e;return n=>n.hasAttribute(t)}}function en(...e){if(e.length===3){let[t,n,o]=e,r=m(t);r&&(r[n]=o)}else if(e.length===2&&M(e[0])){let[t,n]=e,o=m(t);return o?o[n]:void 0}else if(e.length===2){let[t,n]=e;return o=>{o[t]=n}}else{let[t]=e;return n=>n[t]}}function tn(...e){if(e.length===3){let[t,n,o]=e,r=m(t);r&&(r.dataset[n]=o)}else if(e.length===2&&M(e[0])){let[t,n]=e,o=m(t);return o==null?void 0:o.dataset[n]}else if(e.length===2){let[t,n]=e;return o=>{o.dataset[t]=n}}else{let[t]=e;return n=>n.dataset[t]}}function nn(...e){if(e.length===2){let[t,n]=e,o=m(t);o&&"value"in o&&(o.value=n)}else if(e.length===1&&M(e[0])){let[t]=e,n=m(t);return(n==null?void 0:n.value)||""}else if(e.length===1){let[t]=e;return n=>{n.value=t}}else return t=>t.value||""}function on(...e){if(e.length===2){let[t,n]=e,o=m(t);(o&&o.type==="checkbox"||o.type==="radio")&&(o.checked=n)}else if(e.length===1&&M(e[0])){let[t]=e,n=m(t);return(n==null?void 0:n.checked)||!1}else if(e.length===1){let[t]=e;return n=>{n.checked=t}}else return t=>t.checked}function rn(...e){if(e.length===1){let[t]=e,n=m(t);n&&n.focus()}else return t=>{t.focus()}}function ln(...e){if(e.length===1){let[t]=e,n=m(t);n&&n.blur()}else return t=>{t.blur()}}function an(...e){if(e.length===1){let[t]=e,n=m(t);n&&(n.style.display="")}else return t=>{t.style.display=""}}function sn(...e){if(e.length===1){let[t]=e,n=m(t);n&&(n.style.display="none")}else return t=>{t.style.display="none"}}function De(...e){if(e.length===2){let[t,n]=e;return t.querySelector(n)}else{let[t]=e;return n=>n.querySelector(t)}}function Ne(...e){if(e.length===2){let[t,n]=e;return Array.from(t.querySelectorAll(n))}else{let[t]=e;return n=>Array.from(n.querySelectorAll(t))}}function cn(e){return t=>e?t.closest(e):t.parentElement}function un(){return e=>Array.from(e.children)}function En(e){return t=>{let n=t.parentElement;if(!n)return[];let r=Array.from(n.children).filter(l=>l!==t);return e?r.filter(l=>l.matches(e)):r}}function mn(e,...t){e.forEach(n=>{let o=m(n);o&&t.forEach(r=>r(o))})}var dn=De,pn=Ne;function Re(e,t){let n=J(),o=new Map,r=s=>{Je(s,n),le(s,t).then(c=>{c&&o.set(s,c)}).catch(c=>{console.error("Error in child generator:",c)})},l=s=>{Qe(s),Nt(s),o.delete(s)};Array.from(n.querySelectorAll(e)).forEach(r);let i=new MutationObserver(s=>{for(let c of s){for(let u of Array.from(c.addedNodes))u instanceof HTMLElement&&(u.matches(e)&&r(u),Array.from(u.querySelectorAll(e)).forEach(d=>r(d)));for(let u of Array.from(c.removedNodes))u instanceof HTMLElement&&(u.matches(e)&&l(u),Array.from(u.querySelectorAll(e)).forEach(d=>l(d)))}});return i.observe(n,{childList:!0,subtree:!0}),re(()=>{i.disconnect();for(let s of o.keys())l(s);o.clear()}),o}var fn=Re;Oe();Z();Z();W();var P=0;function hn(e){let n=`__once_${++P}`;return o=>{if(!w(n))return H(n,!0),e(o)}}function xn(e,t){return n=>{let o=setTimeout(()=>t(n),e);if(y()){let l=`__cleanup_${++P}`;H(l,()=>clearTimeout(o))}return o}}function yn(e,t){let o=`__throttle_${++P}`;return r=>{let l=Date.now(),a=w(o)||0;if(l-a>=e)return H(o,l),t(r)}}function Tn(e,t){let o=`__debounce_${++P}`;return r=>{let l=w(o);l&&clearTimeout(l);let a=setTimeout(()=>{t(r),H(o,null)},e);H(o,a)}}function _e(e,t,n){return o=>{if(e(o))return t(o);if(n)return n(o)}}function Hn(e,t,n){return o=>{try{return e(o)}catch(r){let l=r instanceof Error?r:new Error(String(r));return n?n(l,o):console.warn("Watch function error:",l),t}}}function Mn(...e){return t=>{let n=[];return e.forEach(o=>{try{n.push(o(t))}catch(r){console.error("Error in batch operation:",r)}}),n}}function $e(e,t=3,n=1e3){let r=`__retry_${++P}_attempts`;return async l=>{let a=w(r)||0;try{let i=await Promise.resolve(e(l));return H(r,0),i}catch(i){let s=a+1;if(H(r,s),s>=t)throw H(r,0),i;return await new Promise(c=>setTimeout(c,n*Math.pow(2,a))),$e(e,t,n)(l)}}}function gn(e,t,n){let o=++P,r=`__rateLimit_${o}_calls`,l=`__rateLimit_${o}_window`;return a=>{let i=Date.now(),s=w(l)||i,c=w(r)||[];if(i-s>=t)return H(l,i),H(r,[]),n(a);if(c.length<e)return c.push(i),H(r,c),n(a);console.warn("Rate limit exceeded for function")}}function Ln(e,t){let o=`__memoize_${++P}`;return r=>{let l=w(o)||new Map,a=t?t(r):r.tagName+r.className;if(l.has(a))return l.get(a);let i=e(r);return l.set(a,i),H(o,l),i}}function vn(e,t,n){return async o=>{let r=new Promise((a,i)=>{setTimeout(()=>{i(n!==void 0?n:new Error(`Function timed out after ${e}ms`))},e)}),l=Promise.resolve(t(o));return Promise.race([l,r])}}function Cn(...e){return t=>e.reduceRight((n,o)=>o(n),t)}function bn(e,t){return _e(n=>!e(n),t)}function Sn(e){return t=>{e(t).catch(n=>{console.error("Async element function error:",n)})}}W();U();W();U();var S=new WeakMap;function I(e,t,n,o={}){let r=null,l=!1,a=new WeakSet,i=typeof t=="string",s=i?t:"",c=i?null:t,u={childList:!0,subtree:o.subtree!==!1,attributes:o.attributes||!1,attributeOldValue:o.attributeOldValue||!1,attributeFilter:o.attributeFilter,characterData:o.characterData||!1,characterDataOldValue:o.characterDataOldValue||!1},d=h=>{Array.from(h).forEach((E,p)=>{if(!(E instanceof HTMLElement))return;let g=!1;try{if(i&&s?g=E.matches(s):c&&(g=c(E)),g){if(a.has(E))return;a.add(E);let C=[E],x=i?s:"matcher function";b(E,x,p,C,n).catch(z=>{console.error(`Error in scoped generator for "${x}":`,z)})}}catch(C){console.warn(`Invalid ${i?s:"matcher function"} in scoped watcher:`,C)}if(u.subtree)try{if(i&&s)E.querySelectorAll(s).forEach((x,z)=>{if(!(x instanceof HTMLElement)||a.has(x))return;a.add(x),b(x,s,z,[x],n).catch(ie=>{console.error(`Error in scoped generator for descendant "${s}":`,ie)})});else if(c){let C=document.createTreeWalker(E,NodeFilter.SHOW_ELEMENT,N=>N!==N&&c(N)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP),x=C.nextNode(),z=0;for(;x;){if(a.has(x)){x=C.nextNode();continue}a.add(x);let N=[x];b(x,"matcher function",z++,N,n).catch(ie=>{console.error("Error in scoped generator for matched descendant:",ie)}),x=C.nextNode()}}}catch(C){console.warn(`Error processing descendants for ${i?s:"matcher function"}:`,C)}})},ae=h=>{let f=new Set;h.forEach(E=>{if(E.type==="childList")E.addedNodes.forEach(p=>{p instanceof HTMLElement&&f.add(p)});else if(E.type==="attributes")E.target instanceof HTMLElement&&f.add(E.target);else if(E.type==="characterData"){let p=E.target.parentElement;p instanceof HTMLElement&&f.add(p)}}),f.size>0&&d(Array.from(f))};r=new MutationObserver(ae),r.observe(e,u),l=!0;try{if(i&&s){let h=e.querySelectorAll(s);d(h)}else if(c){let h=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,p=>c(p)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP),f=[],E=h.nextNode();for(;E;)f.push(E),E=h.nextNode();d(f)}}catch(h){console.warn(`Error processing existing elements for ${i?s:"matcher function"}:`,h)}let D={disconnect(){r&&(r.disconnect(),r=null),l=!1;let h=S.get(e);h&&(h.delete(D),h.size===0&&S.delete(e))},isActive(){return l},getParent(){return e},getSelector(){return i?s:"[matcher function]"},getController(){return null}};return S.has(e)||S.set(e,new Set),S.get(e).add(D),K(e,()=>{D.disconnect()}),D}function Fn(e){let t=S.get(e);t&&t.forEach(n=>n.disconnect())}function wn(e){let t=S.get(e);return t?Array.from(t):[]}function qe(e,t,n,o={}){let r=null,l=!1,a=new WeakSet,i=typeof t=="string",s=i?t:"",c=i?null:t,d=$(i?{parent:e,selector:s}:{parent:e,matcher:c||(f=>!1)});d.layer(n);let ae={childList:!0,subtree:o.subtree!==!1,attributes:o.attributes||!1,attributeOldValue:o.attributeOldValue||!1,attributeFilter:o.attributeFilter,characterData:o.characterData||!1,characterDataOldValue:o.characterDataOldValue||!1},D=f=>{let E=new Set;f.forEach(p=>{if(p.type==="childList")p.addedNodes.forEach(g=>{g instanceof HTMLElement&&E.add(g)});else if(p.type==="attributes")p.target instanceof HTMLElement&&E.add(p.target);else if(p.type==="characterData"){let g=p.target.parentElement;g instanceof HTMLElement&&E.add(g)}}),E.forEach(p=>{if(p.parentElement===e||e.contains(p)){let g=!1;try{i&&s?g=p.matches(s):c&&(g=c(p)),g&&!a.has(p)&&a.add(p)}catch(C){console.warn(`Invalid ${i?s:"matcher function"} in scoped controller watcher:`,C)}}})};r=new MutationObserver(D),r.observe(e,ae),l=!0;try{if(i&&s)e.querySelectorAll(s).forEach(E=>{E instanceof HTMLElement&&a.add(E)});else if(c){let f=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,p=>c(p)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP),E=f.nextNode();for(;E;)a.add(E),E=f.nextNode()}}catch(f){console.warn(`Error processing existing elements for scoped controller ${i?s:"matcher function"}:`,f)}let h={controller:d,disconnect(){r&&(r.disconnect(),r=null),l=!1,d.destroy();let f=S.get(e);f&&(f.delete(h),f.size===0&&S.delete(e))},isActive(){return l},getParent(){return e},getSelector(){return i?s:"[matcher function]"},getController(){return d}};return S.has(e)||S.set(e,new Set),S.get(e).add(h),K(e,()=>{h.disconnect()}),h}function Wn(e,t,n,o={}){return I(e,t,n,o)}function kn(e,t){return t.map(({selector:n,generator:o,options:r})=>I(e,n,o,r))}function On(e,t,n,o,r){let l=I(e,t,n,r);return setTimeout(()=>{l.isActive()&&l.disconnect()},o),l}function An(e,t,n,o=1,r){let l=0,i=I(e,t,()=>{let s=n();return Symbol.iterator in s?function*(){yield*s,l++,l>=o&&setTimeout(()=>i.disconnect(),0)}():async function*(){yield*s,l++,l>=o&&setTimeout(()=>i.disconnect(),0)}()},r);return i}function Gn(e,t,n,o){return qe(e,t,n,o)}function Pn(e,t){return t.map(({selector:n,generator:o,options:r})=>qe(e,n,o,r))} /** * @module watch-selector * * A powerful, type-safe DOM observation library with generator-based composition. * Watch is a lightweight alternative to web components and frameworks, perfect for * server-driven websites, user scripts, Chrome extensions, and anywhere you need * reactive DOM interactions without controlling the markup. * * ## Key Features * * - ๐ŸŽฏ **Selector-Based**: Watch for elements matching CSS selectors * - ๐Ÿ”„ **Generator Composition**: Yield functions for elegant async flows * - ๐Ÿง  **Smart State Management**: Per-element state with reactivity * - โšก **Advanced Events**: Debouncing, throttling, delegation, queuing * - ๐ŸŽจ **DOM Manipulation**: Comprehensive dual API (direct + generator) * - ๐Ÿ›ก๏ธ **Type-Safe**: Full TypeScript support with inference * - ๐Ÿงน **Memory Safe**: Automatic cleanup and lifecycle management * - ๐ŸŽ›๏ธ **Controller System**: Layer behaviors and manage instances * * @example Basic Usage * ```typescript * import { watch, click, addClass, text } from 'watch-selector'; * * // Watch buttons and make them interactive * watch('button', function* () { * yield addClass('interactive'); * yield click((event, button) => { * text(button, 'Clicked!'); * }); * }); * ``` * * @example Generator Event Handlers * ```typescript * import { watch, click, addClass, removeClass, delay, getState, setState } from 'watch-selector'; * * watch('.counter', function* () { * yield click(function* (event) { * // Full access to Watch context! * const button = self(); * const count = getState('clicks') || 0; * * // Yield Watch functions for elegant composition * yield addClass('clicked'); * yield delay(150); * yield removeClass('clicked'); * * // Update state and DOM * setState('clicks', count + 1); * yield text(`Clicked ${count + 1} times`); * }); * }); * ``` * * @example Advanced Event Handling * ```typescript * import { watch, on, input, setState, getState } from 'watch-selector'; * * watch('.search-form', function* () { * // Real-time search with advanced options * yield input(function* (event) { * const query = (event.target as HTMLInputElement).value; * setState('query', query); * * // Perform search * const results = await searchAPI(query); * yield updateResults(results); * }, { * // Advanced debouncing with leading/trailing edge control * debounce: { wait: 300, leading: false, trailing: true }, * delegate: 'input[type="search"]', * queue: 'latest' // Cancel previous searches * }); * }); * ``` * * @example Component Composition * ```typescript * import { watch, createEventBehavior, composeEventHandlers } from 'watch-selector'; * * // Create reusable behaviors * const rippleEffect = createEventBehavior('click', function* (event) { * yield addClass('ripple'); * yield delay(600); * yield removeClass('ripple'); * }); * * const clickCounter = createEventBehavior('click', function* (event) { * const count = getState('clicks') || 0; * setState('clicks', count + 1); * yield text(`${count + 1} clicks`); * }); * * // Compose multiple behaviors * const materialButton = composeEventHandlers(rippleEffect, clickCounter); * * watch('.material-btn', function* () { * yield click(materialButton); * }); * ``` * * @example Controller System * ```typescript * import { watch } from 'watch-selector'; * * // Create a controller for behavior management * const buttonController = watch('button', function* () { * yield addClass('base-button'); * yield click(() => console.log('Base click')); * }); * * // Layer additional behaviors * buttonController.layer(function* () { * yield addClass('enhanced'); * yield click(() => console.log('Enhanced click')); * }); * * // Inspect managed instances * console.log(buttonController.getInstances()); * * // Clean up when done * buttonController.destroy(); * ``` * * @example State Management * ```typescript * import { watch, createState, setState, getState, watchState } from 'watch-selector'; * * watch('.todo-app', function* () { * // Create reactive state * const todos = createState('todos', []); * * // Watch state changes * watchState('todos', (newTodos, oldTodos) => { * console.log('Todos updated:', newTodos); * updateTodoList(newTodos); * }); * * yield click('.add-todo', function* () { * const input = el('input') as HTMLInputElement; * const currentTodos = getState('todos') || []; * setState('todos', [...currentTodos, input.value]); * input.value = ''; * }); * }); * ``` * * @version 1.0.0 * @author Patrick Glenn * @license MIT */