UNPKG

watch-selector

Version:

Runs a function when a selector is added to dom

153 lines (152 loc) โ€ข 39.1 kB
var oe=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var at=Object.getOwnPropertyNames;var it=Object.prototype.hasOwnProperty;var J=(e,t)=>()=>(e&&(t=e(e=0)),t);var st=(e,t)=>{for(var n in t)oe(e,n,{get:t[n],enumerable:!0})},ct=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of at(t))!it.call(e,r)&&r!==n&&oe(e,r,{get:()=>t[r],enumerable:!(o=lt(t,r))||o.enumerable});return e};var ut=e=>ct(oe({},"__esModule",{value:!0}),e);function T(){return Q[Q.length-1]||null}function le(e){Q.push(e)}function ae(){return Q.pop()||null}function Et(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 mt(e){return()=>e}function ie(e){return t=>{V.has(e)||V.set(e,new Set),V.get(e).add(t)}}function xe(e){let t=V.get(e);t&&(t.forEach(n=>{try{n()}catch(o){console.error("Error during cleanup:",o)}}),V.delete(e))}function dt(e,t,n,o){let r=new Set;return{element:e,selector:t,index:n,array:o,state:{},observers:r,el:Et(e),self:mt(e),cleanup:ie(e),addObserver:l=>{r.add(l)}}}async function C(e,t,n,o,r){dt(e,t,n,o),le({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 re(i,e)}catch(i){console.error("Error in generator execution:",i)}finally{ae()}return a}async function re(e,t){let n=await e.next();for(;!n.done;){let o=n.value;try{await ye(o,t)}catch(r){console.error("Error executing yielded value:",r)}n=await e.next()}return n.value}async function ye(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 re(e,t);return}if(e&&typeof e[Symbol.asyncIterator]=="function"){await re(e,t);return}if(Array.isArray(e)){for(let n of e)await ye(n,t);return}console.warn("Unsupported yield type:",typeof e,e)}function pt(){let e=T();return(e==null?void 0:e.element)||null}function ft(e){let t=T();if(!t)throw new Error("el() can only be called within a generator context");return t.element.querySelector(e)}function Te(e,t){Y.set(e,t)}function He(e){Y.delete(e)}var Q,Y,V,w=J(()=>{"use strict";U();Q=[],Y=new WeakMap;V=new WeakMap;ft.all=function(e){let t=T();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=T();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 ht(e,t){let n=F(),o=n[e];n[e]=t(o)}function Me(e){let t=F();return e in t}function xt(e){let t=F();delete t[e]}function ge(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 Le(e,t){let n=ge(e);return Me(e)||n.set(t),n}function Tt(e,t=[]){let n=++yt,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 Ht(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 Mt(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 gt(e){let t=new Map(O);O.clear();try{e()}finally{for(let[n,o]of t)O.set(n,o)}}function Lt(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=Le(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 vt(){let e=T();if(!e)throw new Error("clearAllState can only be called within a generator context");B.delete(e.element)}function ve(){return{...F()}}function Ct(e="State:"){console.log(e,ve())}function Ce(e){return Object.freeze({...B.get(e)||{}})}var B,yt,O,X=J(()=>{"use strict";w();B=new WeakMap;yt=0;O=new Map});var Ke={};st(Ke,{change:()=>Oe,click:()=>We,composeEventHandlers:()=>Pe,createCustomEvent:()=>De,createEventBehavior:()=>Ge,delegate:()=>Ie,emit:()=>Ne,input:()=>ke,on:()=>b,onAttr:()=>Re,onMount:()=>ze,onResize:()=>qe,onText:()=>_e,onUnmount:()=>Ve,onVisible:()=>$e,submit:()=>Ae,triggerUnmountHandlers:()=>kt});function b(...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 bt(n,o,r,l)}else{let[n,o,r={}]=e;return St(n,o,r)}}function bt(e,t,n,o){let r=we(t),l=be(e,n,!1,o),a=Se(l,o);return Fe(e,r,a,o)}function St(e,t,n){return o=>{let r=we(e),l=be(o,t,!0,n),a=Se(l,n),i=Fe(o,r,a,n);return T()&&ie(o)(i),i}}async function Ft(e,t,n,o){Z.has(e)||Z.set(e,{current:null,latest:null});let r=Z.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 be(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)T()?i=t(r):i=t(r,a);else{le({element:a,selector:"event",index:0,array:[a]});try{i=t(r,a)}finally{ae()}}if(i&&typeof i.next=="function"){let s=o.queue||"all";s==="none"?C(a,"event",0,[a],()=>i).catch(c=>{console.error("Error in concurrent generator execution:",c)}):await Ft(a,s,r,()=>C(a,"event",0,[a],()=>i))}else i&&typeof i.then=="function"&&await i}catch(a){console.error("Error in event handler:",a)}}}function Se(e,t){return t.debounce?wt(e,t.debounce):t.throttle?Wt(e,t.throttle):n=>{e(n).catch(o=>{console.error("Error in async event handler:",o)})}}function Fe(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),Z.delete(e))}}function we(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 wt(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 Wt(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 We(...e){if(e.length>=2&&e[0]&&"nodeType"in e[0]){let[t,n,o]=e;return b(t,"click",n,o)}else{let[t,n]=e;return b("click",t,n)}}function ke(...e){if(e.length>=2&&e[0]&&"nodeType"in e[0]){let[t,n,o]=e;return b(t,"input",n,o)}else{let[t,n]=e;return b("input",t,n)}}function Oe(...e){if(e.length>=2&&e[0]&&"nodeType"in e[0]){let[t,n,o]=e;return b(t,"change",n,o)}else{let[t,n]=e;return b("change",t,n)}}function Ae(...e){if(e.length>=2&&e[0]&&"nodeType"in e[0]){let[t,n,o]=e;return b(t,"submit",n,o)}else{let[t,n]=e;return b("submit",t,n)}}function Ge(e,t,n){return function*(){yield b(e,t,n)}}function Pe(...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 Ie(e,t,n,o){return b(t,n,{...o,delegate:e})}function De(e,t,n){return new CustomEvent(e,{detail:t,bubbles:!0,cancelable:!0,...n})}function Ne(...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 Re(...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 _e(...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 $e(...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 qe(...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 ze(...e){if(e.length===2){let[t,n]=e;return n(t),()=>{}}else{let[t]=e;return n=>(t(n),()=>{})}}function kt(e){xe(e);let t=k.get(e);t&&(t.forEach(n=>n(e)),k.delete(e))}function Ve(...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 Z,k,se=J(()=>{"use strict";w();Z=new WeakMap;k=new WeakMap});function Je(){A||(A=new MutationObserver(Ot),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Ue):Ue())}function Ue(){j||!A||(A.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeOldValue:!0}),j=!0)}function Ot(e){let t=new Set,n=new Set;e.forEach(o=>{o.type==="childList"&&(o.addedNodes.forEach(r=>{r instanceof HTMLElement&&Be(r,t)}),o.removedNodes.forEach(r=>{r instanceof HTMLElement&&Be(r,n)})),o.type==="attributes"&&o.target instanceof HTMLElement&&t.add(o.target)}),t.size>0&&At(t),n.size>0&&Gt(n)}function Be(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 At(e){if(g.size===0)return;let t=new Map;g.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=g.get(o);r&&n.forEach(l=>{r.forEach(a=>{try{a(l)}catch(i){console.error(`Error in handler for selector "${o}":`,i)}})})})}function Gt(e){e.forEach(t=>{try{let{triggerUnmountHandlers:n}=(se(),ut(Ke));n(t)}catch(n){let o=D.get(t);o&&(o.forEach(r=>{try{r(t)}catch(l){console.error("Error in unmount handler:",l)}}),D.delete(t))}N.forEach(n=>{let o=n.getInstances();o.has(t)&&o.delete(t)})})}function Pt(e,t){Je(),g.has(e)||g.set(e,new Set);let n=g.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&&g.delete(e)}}function K(e,t){D.has(e)||D.set(e,new Set);let n=D.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&D.delete(e)}}function It(){return{isInitialized:A!==null,isObserving:j,selectorCount:g.size,unmountCount:0}}function R(e){let t=Dt(e);if(N.has(t))return N.get(t);let n=new Map,o=new Set,r=Object.assign(function(){r.destroy()},{subject:e,getInstances:()=>n,layer:l=>{let a=Nt(e,l,n);o.add(a)},destroy:()=>{o.forEach(l=>l()),o.clear(),n.clear(),N.delete(t)}});return N.set(t,r),r}function Dt(e){if(typeof e=="string")return e;if(e instanceof HTMLElement)return y.has(e)||y.set(e,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),`element:${y.get(e)}`;if(Array.isArray(e))return`array:${e.map(n=>n instanceof HTMLElement?(y.has(n)||y.set(n,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),y.get(n)):"unknown").join(",")}`;if(e instanceof NodeList)return`nodelist:${Array.from(e).map(n=>n instanceof HTMLElement?(y.has(n)||y.set(n,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),y.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 y.has(t.parent)||y.set(t.parent,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),`delegation:${y.get(t.parent)}:${t.childSelector}`}if(typeof e=="object"&&e!==null&&"parent"in e&&"selector"in e){let t=e;return y.has(t.parent)||y.set(t.parent,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),`scoped:${y.get(t.parent)}:${t.selector}`}if(typeof e=="object"&&e!==null&&"parent"in e&&"matcher"in e){let t=e;return y.has(t.parent)||y.set(t.parent,`watch-${Date.now()}-${Math.random().toString(36).substr(2,9)}`),`scoped:${y.get(t.parent)}:matcher`}return e}function Nt(e,t,n){Je();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:()=>Ce(c)}),C(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:"*";g.has(i)||g.set(i,new Set);let s=g.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&&g.delete(i)}}function Rt(){A&&(A.disconnect(),A=null),j=!1,g.clear(),N.clear(),y=new WeakMap}var A,j,g,D,N,y,U=J(()=>{"use strict";X();w();A=null,j=!1,g=new Map,D=new WeakMap,N=new Map,y=new WeakMap});U();w();function _(e,t={}){return{selector:e,elementType:{},options:t,__brand:"PreDefinedWatchContext"}}function _t(e,t,n={}){return{selector:e,elementType:{},options:n,__brand:"PreDefinedWatchContext"}}var $t=(e,t={})=>_(e,t),qt=(e,t={})=>_(e,t),zt=(e,t={})=>_(e,t),Vt=(e,t={})=>_(e,t),Kt=(e,t={})=>_(e,t);function Ut(e,t){return{...e,options:{...e.options,data:{...e.options.data||{},...t}}}}function Bt(e,t){return{...e,options:{...e.options,debounce:t}}}function Jt(e,t){return{...e,options:{...e.options,throttle:t}}}function Qt(e){return{...e,options:{...e.options,once:!0}}}function Yt(e,t){return{...e,options:{...e.options,filter:t}}}function Qe(e){return typeof e=="object"&&e!==null&&"__brand"in e&&e.__brand==="PreDefinedWatchContext"}function ce(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 ue(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 Ee(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 Xt(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 Zt(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 me(){let e=T();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=jt();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 $=new WeakMap,Ye=new WeakMap;function jt(){return $}function en(e){return Ye.get(e)}function de(e,t){Ye.set(e,t)}function tn(){let e=ee(),t=Y.get(e);if(!t)return null;let n=en(t);return{element:t,api:n}}function ee(){let e=T();if(!e)throw new Error("self() can only be called within a generator context");return e.element}function Xe(e){let t=T();if(!t)throw new Error("el() can only be called within a generator context");return t.element.querySelector(e)}function nn(e){let t=T();if(!t)throw new Error("all() can only be called within a generator context");return Array.from(t.element.querySelectorAll(e))}function pe(e){let t=T();if(!t)throw new Error("cleanup() can only be called within a generator context");let n=t.element;$.has(n)||$.set(n,new Set),$.get(n).add(e)}function on(){return me()}function rn(e){return function*(){let t=me();yield*e(t)}}function ln(e){return e}function an(e,t){return function*(){let n=me();yield*t(n)}}function Ze(e){let t=$.get(e);t&&(t.forEach(n=>{try{n()}catch(o){console.error("Error during cleanup:",o)}}),$.delete(e))}function je(e,t,n){if(Qe(e)){let l=e,a=t,i=a;l.options.debounce&&(i=ce(a,l.options.debounce)),l.options.throttle&&(i=ue(a,l.options.throttle)),l.options.once&&(i=Ee(a));let s=R(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=R({parent:l,childSelector:a});return c.layer(i),c}let o=t,r=R(e);return r.layer(o),r}function sn(e,t){let n=Array.from(document.querySelectorAll(e));n.forEach((o,r)=>{o instanceof HTMLElement&&C(o,e,r,n,t).then(l=>{l!==void 0&&de(o,l)}).catch(l=>{console.error("Error in run generator:",l)})})}function fe(e,t){let n=[e];return C(e,`element-${e.tagName.toLowerCase()}`,0,n,t).then(o=>(o!==void 0&&de(e,o),o))}function cn(e,t){e.layer(t)}function un(e){return e.getInstances()}function En(e){e.destroy()}w();function mn(e){return e instanceof HTMLElement}function L(e){return typeof e=="string"||e instanceof HTMLElement}function m(e){return typeof e=="string"?document.querySelector(e):e instanceof HTMLElement?e:null}function dn(...e){if(e.length===2){let[t,n]=e,o=m(t);o&&(o.textContent=n)}else if(e.length===1&&L(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 pn(...e){if(e.length===2){let[t,n]=e,o=m(t);o&&(o.innerHTML=n)}else if(e.length===1&&L(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 fn(...e){if(e.length>=1&&L(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 hn(...e){if(e.length>=1&&L(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 xn(...e){if(e.length>=2&&L(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 yn(...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 Tn(...e){if(e.length===2&&L(e[0])){let[t,n]=e,o=m(t);o&&typeof n=="object"&&Object.assign(o.style,n)}else if(e.length===3&&L(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 Hn(...e){if(e.length===3){let[t,n,o]=e,r=m(t);r&&r.setAttribute(n,o)}else if(e.length===2&&L(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 Mn(...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 gn(...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 Ln(...e){if(e.length===3){let[t,n,o]=e,r=m(t);r&&(r[n]=o)}else if(e.length===2&&L(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 vn(...e){if(e.length===3){let[t,n,o]=e,r=m(t);r&&(r.dataset[n]=o)}else if(e.length===2&&L(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 Cn(...e){if(e.length===2){let[t,n]=e,o=m(t);o&&"value"in o&&(o.value=n)}else if(e.length===1&&L(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 bn(...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&&L(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 Sn(...e){if(e.length===1){let[t]=e,n=m(t);n&&n.focus()}else return t=>{t.focus()}}function Fn(...e){if(e.length===1){let[t]=e,n=m(t);n&&n.blur()}else return t=>{t.blur()}}function wn(...e){if(e.length===1){let[t]=e,n=m(t);n&&(n.style.display="")}else return t=>{t.style.display=""}}function Wn(...e){if(e.length===1){let[t]=e,n=m(t);n&&(n.style.display="none")}else return t=>{t.style.display="none"}}function et(...e){if(e.length===2){let[t,n]=e;return t.querySelector(n)}else{let[t]=e;return n=>n.querySelector(t)}}function tt(...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 kn(e){return t=>e?t.closest(e):t.parentElement}function On(){return e=>Array.from(e.children)}function An(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 Gn(e,...t){e.forEach(n=>{let o=m(n);o&&t.forEach(r=>r(o))})}var Pn=et,In=tt;function nt(e,t){let n=ee(),o=new Map,r=s=>{Te(s,n),fe(s,t).then(c=>{c&&o.set(s,c)}).catch(c=>{console.error("Error in child generator:",c)})},l=s=>{He(s),Ze(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}),pe(()=>{i.disconnect();for(let s of o.keys())l(s);o.clear()}),o}var Dn=nt;se();X();X();w();var G=0;function Nn(e){let n=`__once_${++G}`;return o=>{if(!W(n))return H(n,!0),e(o)}}function Rn(e,t){return n=>{let o=setTimeout(()=>t(n),e);if(T()){let l=`__cleanup_${++G}`;H(l,()=>clearTimeout(o))}return o}}function _n(e,t){let o=`__throttle_${++G}`;return r=>{let l=Date.now(),a=W(o)||0;if(l-a>=e)return H(o,l),t(r)}}function $n(e,t){let o=`__debounce_${++G}`;return r=>{let l=W(o);l&&clearTimeout(l);let a=setTimeout(()=>{t(r),H(o,null)},e);H(o,a)}}function ot(e,t,n){return o=>{if(e(o))return t(o);if(n)return n(o)}}function qn(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 zn(...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 rt(e,t=3,n=1e3){let r=`__retry_${++G}_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))),rt(e,t,n)(l)}}}function Vn(e,t,n){let o=++G,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 Kn(e,t){let o=`__memoize_${++G}`;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 Un(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 Bn(...e){return t=>e.reduceRight((n,o)=>o(n),t)}function Jn(e,t){return ot(n=>!e(n),t)}function Qn(e){return t=>{e(t).catch(n=>{console.error("Async element function error:",n)})}}w();U();w();U();var S=new WeakMap;function q(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 M=!1;try{if(i&&s?M=E.matches(s):c&&(M=c(E)),M){if(a.has(E))return;a.add(E);let v=[E],x=i?s:"matcher function";C(E,x,p,v,n).catch(z=>{console.error(`Error in scoped generator for "${x}":`,z)})}}catch(v){console.warn(`Invalid ${i?s:"matcher function"} in scoped watcher:`,v)}if(u.subtree)try{if(i&&s)E.querySelectorAll(s).forEach((x,z)=>{if(!(x instanceof HTMLElement)||a.has(x))return;a.add(x),C(x,s,z,[x],n).catch(ne=>{console.error(`Error in scoped generator for descendant "${s}":`,ne)})});else if(c){let v=document.createTreeWalker(E,NodeFilter.SHOW_ELEMENT,I=>I!==I&&c(I)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP),x=v.nextNode(),z=0;for(;x;){if(a.has(x)){x=v.nextNode();continue}a.add(x);let I=[x];C(x,"matcher function",z++,I,n).catch(ne=>{console.error("Error in scoped generator for matched descendant:",ne)}),x=v.nextNode()}}}catch(v){console.warn(`Error processing descendants for ${i?s:"matcher function"}:`,v)}})},te=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(te),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 P={disconnect(){r&&(r.disconnect(),r=null),l=!1;let h=S.get(e);h&&(h.delete(P),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(P),K(e,()=>{P.disconnect()}),P}function Yn(e){let t=S.get(e);t&&t.forEach(n=>n.disconnect())}function Xn(e){let t=S.get(e);return t?Array.from(t):[]}function he(e,t,n,o={}){let r=null,l=!1,a=new WeakSet,i=typeof t=="string",s=i?t:"",c=i?null:t,d=R(i?{parent:e,selector:s}:{parent:e,matcher:c||(f=>!1)});d.layer(n);let te={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},P=f=>{let E=new Set;f.forEach(p=>{if(p.type==="childList")p.addedNodes.forEach(M=>{M instanceof HTMLElement&&E.add(M)});else if(p.type==="attributes")p.target instanceof HTMLElement&&E.add(p.target);else if(p.type==="characterData"){let M=p.target.parentElement;M instanceof HTMLElement&&E.add(M)}}),E.forEach(p=>{if(p.parentElement===e||e.contains(p)){let M=!1;try{i&&s?M=p.matches(s):c&&(M=c(p)),M&&!a.has(p)&&a.add(p)}catch(v){console.warn(`Invalid ${i?s:"matcher function"} in scoped controller watcher:`,v)}}})};r=new MutationObserver(P),r.observe(e,te),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 Zn(e,t,n,o={}){return q(e,t,n,o)}function jn(e,t){return t.map(({selector:n,generator:o,options:r})=>q(e,n,o,r))}function eo(e,t,n,o,r){let l=q(e,t,n,r);return setTimeout(()=>{l.isActive()&&l.disconnect()},o),l}function to(e,t,n,o=1,r){let l=0,i=q(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 no(e,t,n,o){return he(e,t,n,o)}function oo(e,t){return t.map(({selector:n,generator:o,options:r})=>he(e,n,o,r))}export{Xe as $,fn as addClass,nn as all,In as allDOM,Qn as async,Hn as attr,zn as batch,Gn as batchAll,Zt as batchGenerator,gt as batchStateUpdates,Fn as blur,$t as button,Oe as change,bn as checked,Dn as child,On as children,pe as cleanup,Rt as cleanupObserver,vt as clearAllState,We as click,Bn as compose,Pe as composeEventHandlers,_ as context,_t as contextFor,nt as createChildWatcher,Tt as createComputed,De as createCustomEvent,Ge as createEventBehavior,rn as createGenerator,Lt as createPersistedState,q as createScopedWatcher,Le as createState,ge as createTypedState,on as ctx,vn as data,$n as debounce,ce as debounceGenerator,ve as debugState,je as default,Rn as delay,Xt as delayGenerator,Ie as delegate,xt as deleteState,En as destroy,Yn as disconnectScopedWatchers,Vt as div,Xe as el,Pn as elDOM,Ne as emit,Sn as focus,zt as form,ln as gen,T as getCurrentContext,pt as getCurrentElement,un as getInstances,It as getObserverStatus,tn as getParentContext,Xn as getScopedWatchers,W as getState,gn as hasAttr,yn as hasClass,Me as hasState,Wn as hide,pn as html,ke as input,qt as inputFactory,mn as isElement,L as isElementLike,cn as layer,Ct as logState,Kn as memoize,b as on,Re as onAttr,ze as onMount,qe as onResize,_e as onText,Ve as onUnmount,$e as onVisible,Qt as onceFactory,Ee as onceGenerator,Nn as onceHelper,kn as parent,Ln as prop,et as query,tt as queryAll,Vn as rateLimit,Pt as register,Mn as removeAttr,hn as removeClass,m as resolveElement,rt as retry,sn as run,fe as runOn,qn as safely,Zn as scopedWatch,jn as scopedWatchBatch,oo as scopedWatchBatchWithController,to as scopedWatchOnce,eo as scopedWatchTimeout,no as scopedWatchWithController,ee as self,H as setState,Mt as setStateReactive,wn as show,An as siblings,Kt as span,Tn as style,Ae as submit,dn as text,_n as throttle,ue as throttleGenerator,Un as timeout,xn as toggleClass,Jn as unless,ht as updateState,Cn as value,je as watch,an as watchGenerator,Ht as watchState,ot as when,Ut as withData,Bt as withDebounce,Yt as withFilter,Jt as withThrottle}; /** * @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 */