@aegisjsproject/callback-registry 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [v2.0.2] - 2026-03-11
11
+
12
+ ### Added
13
+ - Add support for objects with a `handleEvent` property to be callbacks
14
+
10
15
  ## [v2.0.1] - 2026-03-06
11
16
 
12
17
  ### Changed
@@ -213,9 +213,9 @@ const eventAttrs = new signals.Signal.State([
213
213
  onError,
214
214
  ]);
215
215
 
216
- const selector = new signals.Signal.Computed(() => eventAttrs.get().map(attr => `[${CSS.escape(attr)}]`).join(', '));
217
216
 
218
217
  const attrToProp = attr => `on${attr[EVENT_PREFIX_LENGTH].toUpperCase()}${attr.substring(EVENT_PREFIX_LENGTH + 1)}`;
218
+ const selector = new signals.Signal.Computed(() => eventAttrs.get().map(attr => `[${CSS.escape(attr)}]`).join(','));
219
219
 
220
220
  const eventToProp = event => EVENT_PREFIX + event;
221
221
 
@@ -646,6 +646,8 @@ const FUNCS = {
646
646
  prevent: 'aegis:ui:prevent',
647
647
  revokeObjectURL: 'aegis:ui:revokeObjectURL',
648
648
  cancelAnimationFrame: 'aegis:ui:cancelAnimationFrame',
649
+ clearInterval: 'aegis:clearInterval',
650
+ clearTimeout: 'aegis:clearTimeout',
649
651
  requestFullscreen: 'aegis:ui:requestFullscreen',
650
652
  toggleFullscreen: 'aegis:ui:toggleFullsceen',
651
653
  exitFullsceen: 'aegis:ui:exitFullscreen',
@@ -834,7 +836,7 @@ const clearRegistry = () => registry.clear();
834
836
  * @param {Function} callback Callback function to register
835
837
  * @param {object} [config]
836
838
  * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering.
837
- * @returns {string} The automatically generated key/name of the registered callback
839
+ * @returns {CallbackRegistryKey} The automatically generated key/name of the registered callback
838
840
  */
839
841
  const createCallback = (callback, { stack } = {}) => registerCallback('aegis:callback:' + crypto.randomUUID(), callback, { stack });
840
842
 
@@ -861,14 +863,16 @@ function callCallback(name, ...args) {
861
863
  * @param {Function} callback The callback value to register
862
864
  * @param {object} config
863
865
  * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering.
864
- * @returns {string} The registered name/key
866
+ * @returns {CallbackRegistryKey} The registered name/key
865
867
  */
866
868
  function registerCallback(name, callback, { stack } = {}) {
867
869
  if (typeof name === 'string') {
868
870
  return registerCallback(new CallbackRegistryKey(name), callback, { stack });
869
- }else if (! (name instanceof CallbackRegistryKey)) {
871
+ } else if (! (name instanceof CallbackRegistryKey)) {
870
872
  throw new TypeError('Callback name must be a disposable string/CallbackRegistryKey.');
871
- } if (! (callback instanceof Function)) {
873
+ } else if (typeof callback === 'object' && typeof callback.handleEvent === 'function') {
874
+ return registerCallback(name, callback.handleEvent.bind(callback), { stack });
875
+ } else if (! (typeof callback === 'function' || typeof callback?.handleEvent === 'function')) {
872
876
  throw new TypeError('Callback must be a function.');
873
877
  } else if (! _isRegistrationOpen) {
874
878
  throw new TypeError('Cannot register new callbacks because registry is closed.');
@@ -943,6 +947,8 @@ function on(event, callback, { capture: capture$1 = false, passive: passive$1 =
943
947
  }
944
948
  }
945
949
 
950
+ globalThis.registry = registry;
951
+
946
952
  exports.CallbackRegistryKey = CallbackRegistryKey;
947
953
  exports.EVENTS = EVENTS;
948
954
  exports.FUNCS = FUNCS;
@@ -1,2 +1,2 @@
1
- import{Signal as e}from"@shgysk8zer0/signals";const t="data-aegis-event-",n=t+"on-",o="aegisEventOn",r=Symbol("aegis:signal"),a=Symbol("aegis:controller"),i=new Map,s=new Map,l=t+"once",c=t+"passive",u=t+"capture",g=t+"signal",d=t+"controller",p=n+"abort",b=n+"blur",m=n+"focus",f=n+"cancel",h=n+"auxclick",v=n+"beforeinput",y=n+"beforetoggle",w=n+"canplay",S=n+"canplaythrough",T=n+"change",E=n+"click",k=n+"close",A=n+"command",P=n+"contextmenu",C=n+"copy",F=n+"cuechange",M=n+"cut",L=n+"dblclick",D=n+"drag",O=n+"dragend",q=n+"dragenter",I=n+"dragexit",x=n+"dragleave",N=n+"dragover",R=n+"dragstart",U=n+"drop",j=n+"durationchange",z=n+"emptied",$=n+"ended",W=n+"formdata",H=n+"input",V=n+"invalid",B=n+"keydown",K=n+"keypress",G=n+"keyup",_=n+"load",J=n+"loadeddata",Q=n+"loadedmetadata",X=n+"loadstart",Y=n+"mousedown",Z=n+"mouseenter",ee=n+"mouseleave",te=n+"mousemove",ne=n+"mouseout",oe=n+"mouseover",re=n+"mouseup",ae=n+"wheel",ie=n+"paste",se=n+"pause",le=n+"play",ce=n+"playing",ue=n+"progress",ge=n+"ratechange",de=n+"reset",pe=n+"resize",be=n+"scroll",me=n+"scrollend",fe=n+"securitypolicyviolation",he=n+"seeked",ve=n+"seeking",ye=n+"select",we=n+"slotchange",Se=n+"stalled",Te=n+"submit",Ee=n+"suspend",ke=n+"timeupdate",Ae=n+"volumechange",Pe=n+"waiting",Ce=n+"selectstart",Fe=n+"selectionchange",Me=n+"toggle",Le=n+"pointercancel",De=n+"pointerdown",Oe=n+"pointerup",qe=n+"pointermove",Ie=n+"pointerout",xe=n+"pointerover",Ne=n+"pointerenter",Re=n+"pointerleave",Ue=n+"gotpointercapture",je=n+"lostpointercapture",ze=n+"mozfullscreenchange",$e=n+"mozfullscreenerror",We=n+"animationcancel",He=n+"animationend",Ve=n+"animationiteration",Be=n+"animationstart",Ke=n+"transitioncancel",Ge=n+"transitionend",_e=n+"transitionrun",Je=n+"transitionstart",Qe=n+"webkitanimationend",Xe=n+"webkitanimationiteration",Ye=n+"webkitanimationstart",Ze=n+"webkittransitionend",et=n+"error",tt=new e.State([p,b,m,f,h,v,y,w,S,T,E,k,A,P,C,F,M,L,D,O,q,I,x,N,R,U,j,z,$,W,H,V,B,K,G,_,J,Q,X,Y,Z,ee,te,ne,oe,re,ae,ie,se,le,ce,ue,ge,de,pe,be,me,fe,he,ve,ye,we,Se,Te,Ee,ke,Ae,Pe,Ce,Fe,Me,Le,De,Oe,qe,Ie,xe,Ne,Re,Ue,je,ze,$e,We,He,Ve,Be,Ke,Ge,_e,Je,Qe,Xe,Ye,Ze,et]),nt=new e.Computed(()=>tt.get().map(e=>`[${CSS.escape(e)}]`).join(", ")),ot=e=>n+e,rt=e=>tt.get().includes(n+e),at=([e])=>e.startsWith(o);function it(e,{signal:t,attrFilter:n=lt}={}){const o=e.dataset;for(const[r,a]of Object.entries(o).filter(at))try{const i="on"+r.substring(12);n.hasOwnProperty(i)&&qt(a)&&e.addEventListener(i.substring(2).toLowerCase(),It(a),{passive:o.hasOwnProperty("aegisEventPassive"),capture:o.hasOwnProperty("aegisEventCapture"),once:o.hasOwnProperty("aegisEventOnce"),signal:o.hasOwnProperty("aegisEventSignal")?ft(o.aegisEventSignal):t})}catch(e){reportError(e)}}const st=new MutationObserver(e=>{e.forEach(e=>{switch(e.type){case"childList":[...e.addedNodes].filter(e=>e.nodeType===Node.ELEMENT_NODE).forEach(e=>vt(e));break;case"attributes":"string"==typeof e.oldValue&&qt(e.oldValue)&&e.target.removeEventListener(e.attributeName.substring(20),It(e.oldValue),{once:e.target.hasAttribute(l),capture:e.target.hasAttribute(u),passive:e.target.hasAttribute(c)}),e.target.hasAttribute(e.attributeName)&&qt(e.target.getAttribute(e.attributeName))&&e.target.addEventListener(e.attributeName.substring(20),It(e.target.getAttribute(e.attributeName)),{once:e.target.hasAttribute(l),capture:e.target.hasAttribute(u),passive:e.target.hasAttribute(c),signal:e.target.hasAttribute(g)?ft(e.target.getAttribute(g)):void 0})}})}),lt={onAbort:p,onBlur:b,onFocus:m,onCancel:f,onAuxclick:h,onBeforeinput:v,onBeforetoggle:y,onCanplay:w,onCanplaythrough:S,onChange:T,onClick:E,onClose:k,onCommand:A,onContextmenu:P,onCopy:C,onCuechange:F,onCut:M,onDblclick:L,onDrag:D,onDragend:O,onDragenter:q,onDragexit:I,onDragleave:x,onDragover:N,onDragstart:R,onDrop:U,onDurationchange:j,onEmptied:z,onEnded:$,onFormdata:W,onInput:H,onInvalid:V,onKeydown:B,onKeypress:K,onKeyup:G,onLoad:_,onLoadeddata:J,onLoadedmetadata:Q,onLoadstart:X,onMousedown:Y,onMouseenter:Z,onMouseleave:ee,onMousemove:te,onMouseout:ne,onMouseover:oe,onMouseup:re,onWheel:ae,onPaste:ie,onPause:se,onPlay:le,onPlaying:ce,onProgress:ue,onRatechange:ge,onReset:de,onResize:pe,onScroll:be,onScrollend:me,onSecuritypolicyviolation:fe,onSeeked:he,onSeeking:ve,onSelect:ye,onSlotchange:we,onStalled:Se,onSubmit:Te,onSuspend:Ee,onTimeupdate:ke,onVolumechange:Ae,onWaiting:Pe,onSelectstart:Ce,onSelectionchange:Fe,onToggle:Me,onPointercancel:Le,onPointerdown:De,onPointerup:Oe,onPointermove:qe,onPointerout:Ie,onPointerover:xe,onPointerenter:Ne,onPointerleave:Re,onGotpointercapture:Ue,onLostpointercapture:je,onMozfullscreenchange:ze,onMozfullscreenerror:$e,onAnimationcancel:We,onAnimationend:He,onAnimationiteration:Ve,onAnimationstart:Be,onTransitioncancel:Ke,onTransitionend:Ge,onTransitionrun:_e,onTransitionstart:Je,onWebkitanimationend:Qe,onWebkitanimationiteration:Xe,onWebkitanimationstart:Ye,onWebkittransitionend:Ze,onError:et,once:l,passive:c,capture:u};function ct(e,{addListeners:t=!1,base:o=document.body,signal:r}={}){const a=n+e.toLowerCase(),i=tt.get();if(!i.includes(a)){const e=`[${CSS.escape(a)}]`,n=(e=>`on${e[20].toUpperCase()}${e.substring(21)}`)(a);tt.set([...i,a]),lt[n]=a,t&&requestAnimationFrame(()=>{const t={attrFilter:{[n]:e},signal:r};[o,...o.querySelectorAll(e)].forEach(e=>it(e,t))})}return a}function ut(e){if(e instanceof AbortController){if(e.signal.aborted)throw e.signal.reason;if("string"==typeof e.signal[a])return e.signal[a];{const t="aegis:event:controller:"+crypto.randomUUID();return Object.defineProperty(e.signal,a,{value:t,writable:!1,enumerable:!1}),s.set(t,e),e.signal.addEventListener("abort",gt,{once:!0}),t}}throw new TypeError("Controller is not an `AbortSignal.")}function gt(e){return e instanceof AbortController?s.delete(e.signal[a]):e instanceof AbortSignal?s.delete(e[a]):s.delete(e)}function dt({signal:e}={}){const t=new AbortController;return e instanceof AbortSignal&&e.addEventListener("abort",({target:e})=>t.abort(e.reason),{signal:t.signal}),ut(t)}const pt=e=>s.get(e);function bt(e,t){const n=pt(e);return n instanceof AbortController&&("string"==typeof t?(n.abort(new Error(t)),!0):(n.abort(t),!0))}function mt(e){if(e instanceof AbortSignal){if("string"==typeof e[r])return e[r];{const t="aegis:event:signal:"+crypto.randomUUID();return Object.defineProperty(e,r,{value:t,writable:!1,enumerable:!1}),i.set(t,e),e.addEventListener("abort",({target:e})=>ht(e[r]),{once:!0}),t}}throw new TypeError("Signal must be an `AbortSignal`.")}const ft=e=>i.get(e);function ht(e){if(e instanceof AbortSignal)return i.delete(e[r]);if("string"==typeof e)return i.delete(e);throw new TypeError("Signal must be an `AbortSignal` or registered key/attribute.")}function vt(e,{signal:t}={}){return(e instanceof Element&&e.matches(nt.get())?[e,...e.querySelectorAll(nt.get())]:e.querySelectorAll(nt.get())).forEach(e=>it(e,{signal:t})),e}function yt(e=document){vt(e),st.observe(e,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:tt.get()})}const wt=()=>st.disconnect();function St(e,{capture:t,once:n,passive:o,signal:r}={}){if(!(e instanceof Function))throw new TypeError("Callback is not a function.");globalThis.addEventListener("error",e,{capture:t,once:n,passive:o,signal:r})}let Tt=!0;const Et=(e,t=document)=>t.querySelectorAll(e),kt=(e,t=document)=>t.querySelector(e),At={attr:"data-request-fullscreen-selector",data:"requestFullscreenSelector"},Pt={attr:"data-toggle-fullscreen-selector",data:"toggleFullscreenSelector"},Ct={debug:{log:"aegis:debug:log",info:"aegis:debug:info",warn:"aegis:debug:warn",error:"aegis:debug:error"},navigate:{back:"aegis:navigate:back",forward:"aegis:navigate:forward",reload:"aegis:navigate:reload",close:"aegis:navigate:close",link:"aegis:navigate:go",popup:"aegis:navigate:popup"},ui:{command:"aegis:ui:command",print:"aegis:ui:print",remove:"aegis:ui:remove",hide:"aegis:ui:hide",unhide:"aegis:ui:unhide",showModal:"aegis:ui:showModal",closeModal:"aegis:ui:closeModal",showPopover:"aegis:ui:showPopover",hidePopover:"aegis:ui:hidePopover",togglePopover:"aegis:ui:togglePopover",enable:"aegis:ui:enable",disable:"aegis:ui:disable",scrollTo:"aegis:ui:scrollTo",prevent:"aegis:ui:prevent",revokeObjectURL:"aegis:ui:revokeObjectURL",cancelAnimationFrame:"aegis:ui:cancelAnimationFrame",requestFullscreen:"aegis:ui:requestFullscreen",toggleFullscreen:"aegis:ui:toggleFullsceen",exitFullsceen:"aegis:ui:exitFullscreen",open:"aegis:ui:open",close:"aegis:ui:close",abortController:"aegis:ui:controller:abort"}},Ft=new Map([[Ct.debug.log,console.log],[Ct.debug.warn,console.warn],[Ct.debug.error,console.error],[Ct.debug.info,console.info],[Ct.navigate.back,()=>history.back()],[Ct.navigate.forward,()=>history.forward()],[Ct.navigate.reload,()=>history.go(0)],[Ct.navigate.close,()=>globalThis.close()],[Ct.navigate.link,e=>{e.isTrusted&&(e.preventDefault(),location.href=e.currentTarget.dataset.url)}],[Ct.navigate.popup,e=>{e.isTrusted&&(e.preventDefault(),globalThis.open(e.currentTarget.dataset.url))}],[Ct.ui.hide,({currentTarget:e})=>{Et(e.dataset.hideSelector).forEach(e=>e.hidden=!0)}],[Ct.ui.unhide,({currentTarget:e})=>{Et(e.dataset.unhideSelector).forEach(e=>e.hidden=!1)}],[Ct.ui.disable,({currentTarget:e})=>{Et(e.dataset.disableSelector).forEach(e=>e.disabled=!0)}],[Ct.ui.enable,({currentTarget:e})=>{Et(e.dataset.enableSelector).forEach(e=>e.disabled=!1)}],[Ct.ui.remove,({currentTarget:e})=>{Et(e.dataset.removeSelector).forEach(e=>e.remove())}],[Ct.ui.scrollTo,({currentTarget:e})=>{const t=kt(e.dataset.scrollToSelector);t instanceof Element&&t.scrollIntoView({behavior:matchMedia("(prefers-reduced-motion: reduce)").matches?"instant":"smooth"})}],[Ct.ui.revokeObjectURL,({currentTarget:e})=>URL.revokeObjectURL(e.src)],[Ct.ui.cancelAnimationFrame,({currentTarget:e})=>cancelAnimationFrame(parseInt(e.dataset.animationFrame))],[Ct.ui.clearInterval,({currentTarget:e})=>clearInterval(parseInt(e.dataset.clearInterval))],[Ct.ui.clearTimeout,({currentTarget:e})=>clearTimeout(parseInt(e.dataset.timeout))],[Ct.ui.abortController,({currentTarget:e})=>bt(e.dataset.aegisEventController,e.dataset.aegisControllerReason)],[Ct.ui.open,({currentTarget:e})=>document.querySelector(e.dataset.openSelector).open=!0],[Ct.ui.close,({currentTarget:e})=>document.querySelector(e.dataset.closeSelector).open=!1],[Ct.ui.showModal,({currentTarget:e})=>{const t=kt(e.dataset.showModalSelector);t instanceof HTMLDialogElement&&t.showModal()}],[Ct.ui.closeModal,({currentTarget:e})=>{const t=kt(e.dataset.closeModalSelector);t instanceof HTMLDialogElement&&t.close()}],[Ct.ui.showPopover,({currentTarget:e})=>{const t=kt(e.dataset.showPopoverSelector);t instanceof HTMLElement&&t.showPopover()}],[Ct.ui.hidePopover,({currentTarget:e})=>{const t=kt(e.dataset.hidePopoverSelector);t instanceof HTMLElement&&t.hidePopover()}],[Ct.ui.togglePopover,({currentTarget:e})=>{const t=kt(e.dataset.togglePopoverSelector);t instanceof HTMLElement&&t.togglePopover()}],[Ct.ui.print,()=>globalThis.print()],[Ct.ui.prevent,e=>e.preventDefault()],[Ct.ui.requestFullscreen,({currentTarget:e})=>{e.dataset.hasOwnProperty(At.data)?document.getElementById(e.dataset[At.data]).requestFullscreen():e.requestFullscreen()}],[Ct.ui.toggleFullscreen,({currentTarget:e})=>{const t=e.dataset.hasOwnProperty(Pt.data)?document.getElementById(e.dataset[Pt.data]):e;t.isSameNode(document.fullscreenElement)?document.exitFullscreen():t.requestFullscreen()}],[Ct.ui.exitFullsceen,()=>document.exitFullscreen()]]);class Mt extends String{[Symbol.dispose](){Ft.delete(this.toString())}}const Lt=()=>Tt,Dt=()=>Tt=!1,Ot=()=>Object.freeze(Array.from(Ft.keys())),qt=e=>Ft.has(e?.toString()),It=e=>Ft.get(e?.toString()),xt=e=>Tt&&Ft.delete(e?.toString()),Nt=()=>Ft.clear(),Rt=(e,{stack:t}={})=>jt("aegis:callback:"+crypto.randomUUID(),e,{stack:t});function Ut(e,...t){if(Ft.has(e?.toString()))return Ft.get(e?.toString()).apply(this||globalThis,t);throw new Error(`No ${e} function registered.`)}function jt(e,t,{stack:n}={}){if("string"==typeof e)return jt(new Mt(e),t,{stack:n});if(!(e instanceof Mt))throw new TypeError("Callback name must be a disposable string/CallbackRegistryKey.");if(t instanceof Function){if(Tt){if(Ft.has(e?.toString()))throw new Error(`Handler "${e}" is already registered.`);if(n instanceof DisposableStack||n instanceof AsyncDisposableStack){const o=n.use(new Mt(e));return Ft.set(o.toString(),t),o}{const n=new Mt(e);return Ft.set(n.toString(),t),n}}throw new TypeError("Cannot register new callbacks because registry is closed.")}throw new TypeError("Callback must be a function.")}function zt(e){return e instanceof Event?zt(e.currentTarget):e instanceof Document?e:e instanceof Element?zt(e.getRootNode()):e instanceof ShadowRoot?e.host:null}function $t(e,t,{capture:n=!1,passive:o=!1,once:r=!1,signal:a,stack:i}={}){if(t instanceof Function)return $t(e,Rt(t,{stack:i}),{capture:n,passive:o,once:r,signal:a});if((t instanceof String||"string"==typeof t)&&0!==t.length){if("string"!=typeof e||0===e.length)throw new TypeError("Event must be a non-empty string.");{rt(e)||ct(e);const i=[[ot(e),t]];return n&&i.push([u,""]),o&&i.push([c,""]),r&&i.push([l,""]),a instanceof AbortSignal?i.push([g,mt(a)]):"string"==typeof a&&i.push([g,a]),i.map(([e,t])=>`${e}="${t}"`).join(" ")}}throw new TypeError("Callback must be a function or a registered callback string.")}export{Mt as CallbackRegistryKey,lt as EVENTS,Ct as FUNCS,bt as abortController,vt as attachListeners,Ut as callCallback,u as capture,Nt as clearRegistry,Dt as closeRegistration,d as controller,Rt as createCallback,dt as createController,wt as disconnectEventsObserver,ot as eventToProp,It as getCallback,pt as getController,zt as getHost,ft as getSignal,qt as hasCallback,rt as hasEventAttribute,Lt as isRegistrationOpen,Ot as listCallbacks,yt as observeEvents,$t as on,p as onAbort,We as onAnimationcancel,He as onAnimationend,Ve as onAnimationiteration,Be as onAnimationstart,h as onAuxclick,v as onBeforeinput,y as onBeforetoggle,b as onBlur,f as onCancel,w as onCanplay,S as onCanplaythrough,T as onChange,E as onClick,k as onClose,A as onCommand,P as onContextmenu,C as onCopy,F as onCuechange,M as onCut,L as onDblclick,D as onDrag,O as onDragend,q as onDragenter,I as onDragexit,x as onDragleave,N as onDragover,R as onDragstart,U as onDrop,j as onDurationchange,z as onEmptied,$ as onEnded,et as onError,m as onFocus,W as onFormdata,Ue as onGotpointercapture,H as onInput,V as onInvalid,B as onKeydown,K as onKeypress,G as onKeyup,_ as onLoad,J as onLoadeddata,Q as onLoadedmetadata,X as onLoadstart,je as onLostpointercapture,Y as onMousedown,Z as onMouseenter,ee as onMouseleave,te as onMousemove,ne as onMouseout,oe as onMouseover,re as onMouseup,ze as onMozfullscreenchange,$e as onMozfullscreenerror,ie as onPaste,se as onPause,le as onPlay,ce as onPlaying,Le as onPointercancel,De as onPointerdown,Ne as onPointerenter,Re as onPointerleave,qe as onPointermove,Ie as onPointerout,xe as onPointerover,Oe as onPointerup,ue as onProgress,ge as onRatechange,de as onReset,pe as onResize,be as onScroll,me as onScrollend,fe as onSecuritypolicyviolation,he as onSeeked,ve as onSeeking,ye as onSelect,Fe as onSelectionchange,Ce as onSelectstart,we as onSlotchange,Se as onStalled,Te as onSubmit,Ee as onSuspend,ke as onTimeupdate,Me as onToggle,Ke as onTransitioncancel,Ge as onTransitionend,_e as onTransitionrun,Je as onTransitionstart,Ae as onVolumechange,Pe as onWaiting,Qe as onWebkitanimationend,Xe as onWebkitanimationiteration,Ye as onWebkitanimationstart,Ze as onWebkittransitionend,ae as onWheel,l as once,c as passive,jt as registerCallback,ut as registerController,ct as registerEventAttribute,mt as registerSignal,At as requestFullscreen,St as setGlobalErrorHandler,g as signal,Pt as toggleFullsceen,xt as unregisterCallback,gt as unregisterController,ht as unregisterSignal};
1
+ import{Signal as e}from"@shgysk8zer0/signals";const t="data-aegis-event-",n=t+"on-",o="aegisEventOn",r=Symbol("aegis:signal"),a=Symbol("aegis:controller"),i=new Map,s=new Map,l=t+"once",c=t+"passive",u=t+"capture",g=t+"signal",d=t+"controller",p=n+"abort",b=n+"blur",m=n+"focus",f=n+"cancel",h=n+"auxclick",v=n+"beforeinput",y=n+"beforetoggle",w=n+"canplay",S=n+"canplaythrough",T=n+"change",E=n+"click",k=n+"close",A=n+"command",P=n+"contextmenu",C=n+"copy",F=n+"cuechange",M=n+"cut",L=n+"dblclick",D=n+"drag",O=n+"dragend",q=n+"dragenter",I=n+"dragexit",x=n+"dragleave",N=n+"dragover",R=n+"dragstart",U=n+"drop",j=n+"durationchange",z=n+"emptied",$=n+"ended",W=n+"formdata",H=n+"input",V=n+"invalid",B=n+"keydown",K=n+"keypress",G=n+"keyup",_=n+"load",J=n+"loadeddata",Q=n+"loadedmetadata",X=n+"loadstart",Y=n+"mousedown",Z=n+"mouseenter",ee=n+"mouseleave",te=n+"mousemove",ne=n+"mouseout",oe=n+"mouseover",re=n+"mouseup",ae=n+"wheel",ie=n+"paste",se=n+"pause",le=n+"play",ce=n+"playing",ue=n+"progress",ge=n+"ratechange",de=n+"reset",pe=n+"resize",be=n+"scroll",me=n+"scrollend",fe=n+"securitypolicyviolation",he=n+"seeked",ve=n+"seeking",ye=n+"select",we=n+"slotchange",Se=n+"stalled",Te=n+"submit",Ee=n+"suspend",ke=n+"timeupdate",Ae=n+"volumechange",Pe=n+"waiting",Ce=n+"selectstart",Fe=n+"selectionchange",Me=n+"toggle",Le=n+"pointercancel",De=n+"pointerdown",Oe=n+"pointerup",qe=n+"pointermove",Ie=n+"pointerout",xe=n+"pointerover",Ne=n+"pointerenter",Re=n+"pointerleave",Ue=n+"gotpointercapture",je=n+"lostpointercapture",ze=n+"mozfullscreenchange",$e=n+"mozfullscreenerror",We=n+"animationcancel",He=n+"animationend",Ve=n+"animationiteration",Be=n+"animationstart",Ke=n+"transitioncancel",Ge=n+"transitionend",_e=n+"transitionrun",Je=n+"transitionstart",Qe=n+"webkitanimationend",Xe=n+"webkitanimationiteration",Ye=n+"webkitanimationstart",Ze=n+"webkittransitionend",et=n+"error",tt=new e.State([p,b,m,f,h,v,y,w,S,T,E,k,A,P,C,F,M,L,D,O,q,I,x,N,R,U,j,z,$,W,H,V,B,K,G,_,J,Q,X,Y,Z,ee,te,ne,oe,re,ae,ie,se,le,ce,ue,ge,de,pe,be,me,fe,he,ve,ye,we,Se,Te,Ee,ke,Ae,Pe,Ce,Fe,Me,Le,De,Oe,qe,Ie,xe,Ne,Re,Ue,je,ze,$e,We,He,Ve,Be,Ke,Ge,_e,Je,Qe,Xe,Ye,Ze,et]),nt=new e.Computed(()=>tt.get().map(e=>`[${CSS.escape(e)}]`).join(",")),ot=e=>n+e,rt=e=>tt.get().includes(n+e),at=([e])=>e.startsWith(o);function it(e,{signal:t,attrFilter:n=lt}={}){const o=e.dataset;for(const[r,a]of Object.entries(o).filter(at))try{const i="on"+r.substring(12);n.hasOwnProperty(i)&&qt(a)&&e.addEventListener(i.substring(2).toLowerCase(),It(a),{passive:o.hasOwnProperty("aegisEventPassive"),capture:o.hasOwnProperty("aegisEventCapture"),once:o.hasOwnProperty("aegisEventOnce"),signal:o.hasOwnProperty("aegisEventSignal")?ft(o.aegisEventSignal):t})}catch(e){reportError(e)}}const st=new MutationObserver(e=>{e.forEach(e=>{switch(e.type){case"childList":[...e.addedNodes].filter(e=>e.nodeType===Node.ELEMENT_NODE).forEach(e=>vt(e));break;case"attributes":"string"==typeof e.oldValue&&qt(e.oldValue)&&e.target.removeEventListener(e.attributeName.substring(20),It(e.oldValue),{once:e.target.hasAttribute(l),capture:e.target.hasAttribute(u),passive:e.target.hasAttribute(c)}),e.target.hasAttribute(e.attributeName)&&qt(e.target.getAttribute(e.attributeName))&&e.target.addEventListener(e.attributeName.substring(20),It(e.target.getAttribute(e.attributeName)),{once:e.target.hasAttribute(l),capture:e.target.hasAttribute(u),passive:e.target.hasAttribute(c),signal:e.target.hasAttribute(g)?ft(e.target.getAttribute(g)):void 0})}})}),lt={onAbort:p,onBlur:b,onFocus:m,onCancel:f,onAuxclick:h,onBeforeinput:v,onBeforetoggle:y,onCanplay:w,onCanplaythrough:S,onChange:T,onClick:E,onClose:k,onCommand:A,onContextmenu:P,onCopy:C,onCuechange:F,onCut:M,onDblclick:L,onDrag:D,onDragend:O,onDragenter:q,onDragexit:I,onDragleave:x,onDragover:N,onDragstart:R,onDrop:U,onDurationchange:j,onEmptied:z,onEnded:$,onFormdata:W,onInput:H,onInvalid:V,onKeydown:B,onKeypress:K,onKeyup:G,onLoad:_,onLoadeddata:J,onLoadedmetadata:Q,onLoadstart:X,onMousedown:Y,onMouseenter:Z,onMouseleave:ee,onMousemove:te,onMouseout:ne,onMouseover:oe,onMouseup:re,onWheel:ae,onPaste:ie,onPause:se,onPlay:le,onPlaying:ce,onProgress:ue,onRatechange:ge,onReset:de,onResize:pe,onScroll:be,onScrollend:me,onSecuritypolicyviolation:fe,onSeeked:he,onSeeking:ve,onSelect:ye,onSlotchange:we,onStalled:Se,onSubmit:Te,onSuspend:Ee,onTimeupdate:ke,onVolumechange:Ae,onWaiting:Pe,onSelectstart:Ce,onSelectionchange:Fe,onToggle:Me,onPointercancel:Le,onPointerdown:De,onPointerup:Oe,onPointermove:qe,onPointerout:Ie,onPointerover:xe,onPointerenter:Ne,onPointerleave:Re,onGotpointercapture:Ue,onLostpointercapture:je,onMozfullscreenchange:ze,onMozfullscreenerror:$e,onAnimationcancel:We,onAnimationend:He,onAnimationiteration:Ve,onAnimationstart:Be,onTransitioncancel:Ke,onTransitionend:Ge,onTransitionrun:_e,onTransitionstart:Je,onWebkitanimationend:Qe,onWebkitanimationiteration:Xe,onWebkitanimationstart:Ye,onWebkittransitionend:Ze,onError:et,once:l,passive:c,capture:u};function ct(e,{addListeners:t=!1,base:o=document.body,signal:r}={}){const a=n+e.toLowerCase(),i=tt.get();if(!i.includes(a)){const e=`[${CSS.escape(a)}]`,n=(e=>`on${e[20].toUpperCase()}${e.substring(21)}`)(a);tt.set([...i,a]),lt[n]=a,t&&requestAnimationFrame(()=>{const t={attrFilter:{[n]:e},signal:r};[o,...o.querySelectorAll(e)].forEach(e=>it(e,t))})}return a}function ut(e){if(e instanceof AbortController){if(e.signal.aborted)throw e.signal.reason;if("string"==typeof e.signal[a])return e.signal[a];{const t="aegis:event:controller:"+crypto.randomUUID();return Object.defineProperty(e.signal,a,{value:t,writable:!1,enumerable:!1}),s.set(t,e),e.signal.addEventListener("abort",gt,{once:!0}),t}}throw new TypeError("Controller is not an `AbortSignal.")}function gt(e){return e instanceof AbortController?s.delete(e.signal[a]):e instanceof AbortSignal?s.delete(e[a]):s.delete(e)}function dt({signal:e}={}){const t=new AbortController;return e instanceof AbortSignal&&e.addEventListener("abort",({target:e})=>t.abort(e.reason),{signal:t.signal}),ut(t)}const pt=e=>s.get(e);function bt(e,t){const n=pt(e);return n instanceof AbortController&&("string"==typeof t?(n.abort(new Error(t)),!0):(n.abort(t),!0))}function mt(e){if(e instanceof AbortSignal){if("string"==typeof e[r])return e[r];{const t="aegis:event:signal:"+crypto.randomUUID();return Object.defineProperty(e,r,{value:t,writable:!1,enumerable:!1}),i.set(t,e),e.addEventListener("abort",({target:e})=>ht(e[r]),{once:!0}),t}}throw new TypeError("Signal must be an `AbortSignal`.")}const ft=e=>i.get(e);function ht(e){if(e instanceof AbortSignal)return i.delete(e[r]);if("string"==typeof e)return i.delete(e);throw new TypeError("Signal must be an `AbortSignal` or registered key/attribute.")}function vt(e,{signal:t}={}){return(e instanceof Element&&e.matches(nt.get())?[e,...e.querySelectorAll(nt.get())]:e.querySelectorAll(nt.get())).forEach(e=>it(e,{signal:t})),e}function yt(e=document){vt(e),st.observe(e,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:tt.get()})}const wt=()=>st.disconnect();function St(e,{capture:t,once:n,passive:o,signal:r}={}){if(!(e instanceof Function))throw new TypeError("Callback is not a function.");globalThis.addEventListener("error",e,{capture:t,once:n,passive:o,signal:r})}let Tt=!0;const Et=(e,t=document)=>t.querySelectorAll(e),kt=(e,t=document)=>t.querySelector(e),At={attr:"data-request-fullscreen-selector",data:"requestFullscreenSelector"},Pt={attr:"data-toggle-fullscreen-selector",data:"toggleFullscreenSelector"},Ct={debug:{log:"aegis:debug:log",info:"aegis:debug:info",warn:"aegis:debug:warn",error:"aegis:debug:error"},navigate:{back:"aegis:navigate:back",forward:"aegis:navigate:forward",reload:"aegis:navigate:reload",close:"aegis:navigate:close",link:"aegis:navigate:go",popup:"aegis:navigate:popup"},ui:{command:"aegis:ui:command",print:"aegis:ui:print",remove:"aegis:ui:remove",hide:"aegis:ui:hide",unhide:"aegis:ui:unhide",showModal:"aegis:ui:showModal",closeModal:"aegis:ui:closeModal",showPopover:"aegis:ui:showPopover",hidePopover:"aegis:ui:hidePopover",togglePopover:"aegis:ui:togglePopover",enable:"aegis:ui:enable",disable:"aegis:ui:disable",scrollTo:"aegis:ui:scrollTo",prevent:"aegis:ui:prevent",revokeObjectURL:"aegis:ui:revokeObjectURL",cancelAnimationFrame:"aegis:ui:cancelAnimationFrame",clearInterval:"aegis:clearInterval",clearTimeout:"aegis:clearTimeout",requestFullscreen:"aegis:ui:requestFullscreen",toggleFullscreen:"aegis:ui:toggleFullsceen",exitFullsceen:"aegis:ui:exitFullscreen",open:"aegis:ui:open",close:"aegis:ui:close",abortController:"aegis:ui:controller:abort"}},Ft=new Map([[Ct.debug.log,console.log],[Ct.debug.warn,console.warn],[Ct.debug.error,console.error],[Ct.debug.info,console.info],[Ct.navigate.back,()=>history.back()],[Ct.navigate.forward,()=>history.forward()],[Ct.navigate.reload,()=>history.go(0)],[Ct.navigate.close,()=>globalThis.close()],[Ct.navigate.link,e=>{e.isTrusted&&(e.preventDefault(),location.href=e.currentTarget.dataset.url)}],[Ct.navigate.popup,e=>{e.isTrusted&&(e.preventDefault(),globalThis.open(e.currentTarget.dataset.url))}],[Ct.ui.hide,({currentTarget:e})=>{Et(e.dataset.hideSelector).forEach(e=>e.hidden=!0)}],[Ct.ui.unhide,({currentTarget:e})=>{Et(e.dataset.unhideSelector).forEach(e=>e.hidden=!1)}],[Ct.ui.disable,({currentTarget:e})=>{Et(e.dataset.disableSelector).forEach(e=>e.disabled=!0)}],[Ct.ui.enable,({currentTarget:e})=>{Et(e.dataset.enableSelector).forEach(e=>e.disabled=!1)}],[Ct.ui.remove,({currentTarget:e})=>{Et(e.dataset.removeSelector).forEach(e=>e.remove())}],[Ct.ui.scrollTo,({currentTarget:e})=>{const t=kt(e.dataset.scrollToSelector);t instanceof Element&&t.scrollIntoView({behavior:matchMedia("(prefers-reduced-motion: reduce)").matches?"instant":"smooth"})}],[Ct.ui.revokeObjectURL,({currentTarget:e})=>URL.revokeObjectURL(e.src)],[Ct.ui.cancelAnimationFrame,({currentTarget:e})=>cancelAnimationFrame(parseInt(e.dataset.animationFrame))],[Ct.ui.clearInterval,({currentTarget:e})=>clearInterval(parseInt(e.dataset.clearInterval))],[Ct.ui.clearTimeout,({currentTarget:e})=>clearTimeout(parseInt(e.dataset.timeout))],[Ct.ui.abortController,({currentTarget:e})=>bt(e.dataset.aegisEventController,e.dataset.aegisControllerReason)],[Ct.ui.open,({currentTarget:e})=>document.querySelector(e.dataset.openSelector).open=!0],[Ct.ui.close,({currentTarget:e})=>document.querySelector(e.dataset.closeSelector).open=!1],[Ct.ui.showModal,({currentTarget:e})=>{const t=kt(e.dataset.showModalSelector);t instanceof HTMLDialogElement&&t.showModal()}],[Ct.ui.closeModal,({currentTarget:e})=>{const t=kt(e.dataset.closeModalSelector);t instanceof HTMLDialogElement&&t.close()}],[Ct.ui.showPopover,({currentTarget:e})=>{const t=kt(e.dataset.showPopoverSelector);t instanceof HTMLElement&&t.showPopover()}],[Ct.ui.hidePopover,({currentTarget:e})=>{const t=kt(e.dataset.hidePopoverSelector);t instanceof HTMLElement&&t.hidePopover()}],[Ct.ui.togglePopover,({currentTarget:e})=>{const t=kt(e.dataset.togglePopoverSelector);t instanceof HTMLElement&&t.togglePopover()}],[Ct.ui.print,()=>globalThis.print()],[Ct.ui.prevent,e=>e.preventDefault()],[Ct.ui.requestFullscreen,({currentTarget:e})=>{e.dataset.hasOwnProperty(At.data)?document.getElementById(e.dataset[At.data]).requestFullscreen():e.requestFullscreen()}],[Ct.ui.toggleFullscreen,({currentTarget:e})=>{const t=e.dataset.hasOwnProperty(Pt.data)?document.getElementById(e.dataset[Pt.data]):e;t.isSameNode(document.fullscreenElement)?document.exitFullscreen():t.requestFullscreen()}],[Ct.ui.exitFullsceen,()=>document.exitFullscreen()]]);class Mt extends String{[Symbol.dispose](){Ft.delete(this.toString())}}const Lt=()=>Tt,Dt=()=>Tt=!1,Ot=()=>Object.freeze(Array.from(Ft.keys())),qt=e=>Ft.has(e?.toString()),It=e=>Ft.get(e?.toString()),xt=e=>Tt&&Ft.delete(e?.toString()),Nt=()=>Ft.clear(),Rt=(e,{stack:t}={})=>jt("aegis:callback:"+crypto.randomUUID(),e,{stack:t});function Ut(e,...t){if(Ft.has(e?.toString()))return Ft.get(e?.toString()).apply(this||globalThis,t);throw new Error(`No ${e} function registered.`)}function jt(e,t,{stack:n}={}){if("string"==typeof e)return jt(new Mt(e),t,{stack:n});if(e instanceof Mt){if("object"==typeof t&&"function"==typeof t.handleEvent)return jt(e,t.handleEvent.bind(t),{stack:n});if("function"!=typeof t&&"function"!=typeof t?.handleEvent)throw new TypeError("Callback must be a function.");if(Tt){if(Ft.has(e?.toString()))throw new Error(`Handler "${e}" is already registered.`);if(n instanceof DisposableStack||n instanceof AsyncDisposableStack){const o=n.use(new Mt(e));return Ft.set(o.toString(),t),o}{const n=new Mt(e);return Ft.set(n.toString(),t),n}}throw new TypeError("Cannot register new callbacks because registry is closed.")}throw new TypeError("Callback name must be a disposable string/CallbackRegistryKey.")}function zt(e){return e instanceof Event?zt(e.currentTarget):e instanceof Document?e:e instanceof Element?zt(e.getRootNode()):e instanceof ShadowRoot?e.host:null}function $t(e,t,{capture:n=!1,passive:o=!1,once:r=!1,signal:a,stack:i}={}){if(t instanceof Function)return $t(e,Rt(t,{stack:i}),{capture:n,passive:o,once:r,signal:a});if((t instanceof String||"string"==typeof t)&&0!==t.length){if("string"!=typeof e||0===e.length)throw new TypeError("Event must be a non-empty string.");{rt(e)||ct(e);const i=[[ot(e),t]];return n&&i.push([u,""]),o&&i.push([c,""]),r&&i.push([l,""]),a instanceof AbortSignal?i.push([g,mt(a)]):"string"==typeof a&&i.push([g,a]),i.map(([e,t])=>`${e}="${t}"`).join(" ")}}throw new TypeError("Callback must be a function or a registered callback string.")}globalThis.registry=Ft;export{Mt as CallbackRegistryKey,lt as EVENTS,Ct as FUNCS,bt as abortController,vt as attachListeners,Ut as callCallback,u as capture,Nt as clearRegistry,Dt as closeRegistration,d as controller,Rt as createCallback,dt as createController,wt as disconnectEventsObserver,ot as eventToProp,It as getCallback,pt as getController,zt as getHost,ft as getSignal,qt as hasCallback,rt as hasEventAttribute,Lt as isRegistrationOpen,Ot as listCallbacks,yt as observeEvents,$t as on,p as onAbort,We as onAnimationcancel,He as onAnimationend,Ve as onAnimationiteration,Be as onAnimationstart,h as onAuxclick,v as onBeforeinput,y as onBeforetoggle,b as onBlur,f as onCancel,w as onCanplay,S as onCanplaythrough,T as onChange,E as onClick,k as onClose,A as onCommand,P as onContextmenu,C as onCopy,F as onCuechange,M as onCut,L as onDblclick,D as onDrag,O as onDragend,q as onDragenter,I as onDragexit,x as onDragleave,N as onDragover,R as onDragstart,U as onDrop,j as onDurationchange,z as onEmptied,$ as onEnded,et as onError,m as onFocus,W as onFormdata,Ue as onGotpointercapture,H as onInput,V as onInvalid,B as onKeydown,K as onKeypress,G as onKeyup,_ as onLoad,J as onLoadeddata,Q as onLoadedmetadata,X as onLoadstart,je as onLostpointercapture,Y as onMousedown,Z as onMouseenter,ee as onMouseleave,te as onMousemove,ne as onMouseout,oe as onMouseover,re as onMouseup,ze as onMozfullscreenchange,$e as onMozfullscreenerror,ie as onPaste,se as onPause,le as onPlay,ce as onPlaying,Le as onPointercancel,De as onPointerdown,Ne as onPointerenter,Re as onPointerleave,qe as onPointermove,Ie as onPointerout,xe as onPointerover,Oe as onPointerup,ue as onProgress,ge as onRatechange,de as onReset,pe as onResize,be as onScroll,me as onScrollend,fe as onSecuritypolicyviolation,he as onSeeked,ve as onSeeking,ye as onSelect,Fe as onSelectionchange,Ce as onSelectstart,we as onSlotchange,Se as onStalled,Te as onSubmit,Ee as onSuspend,ke as onTimeupdate,Me as onToggle,Ke as onTransitioncancel,Ge as onTransitionend,_e as onTransitionrun,Je as onTransitionstart,Ae as onVolumechange,Pe as onWaiting,Qe as onWebkitanimationend,Xe as onWebkitanimationiteration,Ye as onWebkitanimationstart,Ze as onWebkittransitionend,ae as onWheel,l as once,c as passive,jt as registerCallback,ut as registerController,ct as registerEventAttribute,mt as registerSignal,At as requestFullscreen,St as setGlobalErrorHandler,g as signal,Pt as toggleFullsceen,xt as unregisterCallback,gt as unregisterController,ht as unregisterSignal};
2
2
  //# sourceMappingURL=callbackRegistry.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"callbackRegistry.mjs","sources":["events.js","callbacks.js"],"sourcesContent":["import { hasCallback, getCallback } from './callbacks.js';\nimport { Signal } from '@shgysk8zer0/signals';\n\nconst PREFIX = 'data-aegis-event-';\nconst EVENT_PREFIX = PREFIX + 'on-';\nconst EVENT_PREFIX_LENGTH = EVENT_PREFIX.length;\nconst DATA_PREFIX = 'aegisEventOn';\nconst DATA_PREFIX_LENGTH = DATA_PREFIX.length;\nconst signalSymbol = Symbol('aegis:signal');\nconst controllerSymbol = Symbol('aegis:controller');\nconst signalRegistry = new Map();\nconst controllerRegistry = new Map();\n\nexport const once = PREFIX + 'once';\nexport const passive = PREFIX + 'passive';\nexport const capture = PREFIX + 'capture';\nexport const signal = PREFIX + 'signal';\nexport const controller = PREFIX + 'controller';\nexport const onAbort = EVENT_PREFIX + 'abort';\nexport const onBlur = EVENT_PREFIX + 'blur';\nexport const onFocus = EVENT_PREFIX + 'focus';\nexport const onCancel = EVENT_PREFIX + 'cancel';\nexport const onAuxclick = EVENT_PREFIX + 'auxclick';\nexport const onBeforeinput = EVENT_PREFIX + 'beforeinput';\nexport const onBeforetoggle = EVENT_PREFIX + 'beforetoggle';\nexport const onCanplay = EVENT_PREFIX + 'canplay';\nexport const onCanplaythrough = EVENT_PREFIX + 'canplaythrough';\nexport const onChange = EVENT_PREFIX + 'change';\nexport const onClick = EVENT_PREFIX + 'click';\nexport const onClose = EVENT_PREFIX + 'close';\nexport const onCommand = EVENT_PREFIX + 'command';\nexport const onContextmenu = EVENT_PREFIX + 'contextmenu';\nexport const onCopy = EVENT_PREFIX + 'copy';\nexport const onCuechange = EVENT_PREFIX + 'cuechange';\nexport const onCut = EVENT_PREFIX + 'cut';\nexport const onDblclick = EVENT_PREFIX + 'dblclick';\nexport const onDrag = EVENT_PREFIX + 'drag';\nexport const onDragend = EVENT_PREFIX + 'dragend';\nexport const onDragenter = EVENT_PREFIX + 'dragenter';\nexport const onDragexit = EVENT_PREFIX + 'dragexit';\nexport const onDragleave = EVENT_PREFIX + 'dragleave';\nexport const onDragover = EVENT_PREFIX + 'dragover';\nexport const onDragstart = EVENT_PREFIX + 'dragstart';\nexport const onDrop = EVENT_PREFIX + 'drop';\nexport const onDurationchange = EVENT_PREFIX + 'durationchange';\nexport const onEmptied = EVENT_PREFIX + 'emptied';\nexport const onEnded = EVENT_PREFIX + 'ended';\nexport const onFormdata = EVENT_PREFIX + 'formdata';\nexport const onInput = EVENT_PREFIX + 'input';\nexport const onInvalid = EVENT_PREFIX + 'invalid';\nexport const onKeydown = EVENT_PREFIX + 'keydown';\nexport const onKeypress = EVENT_PREFIX + 'keypress';\nexport const onKeyup = EVENT_PREFIX + 'keyup';\nexport const onLoad = EVENT_PREFIX + 'load';\nexport const onLoadeddata = EVENT_PREFIX + 'loadeddata';\nexport const onLoadedmetadata = EVENT_PREFIX + 'loadedmetadata';\nexport const onLoadstart = EVENT_PREFIX + 'loadstart';\nexport const onMousedown = EVENT_PREFIX + 'mousedown';\nexport const onMouseenter = EVENT_PREFIX + 'mouseenter';\nexport const onMouseleave = EVENT_PREFIX + 'mouseleave';\nexport const onMousemove = EVENT_PREFIX + 'mousemove';\nexport const onMouseout = EVENT_PREFIX + 'mouseout';\nexport const onMouseover = EVENT_PREFIX + 'mouseover';\nexport const onMouseup = EVENT_PREFIX + 'mouseup';\nexport const onWheel = EVENT_PREFIX + 'wheel';\nexport const onPaste = EVENT_PREFIX + 'paste';\nexport const onPause = EVENT_PREFIX + 'pause';\nexport const onPlay = EVENT_PREFIX + 'play';\nexport const onPlaying = EVENT_PREFIX + 'playing';\nexport const onProgress = EVENT_PREFIX + 'progress';\nexport const onRatechange = EVENT_PREFIX + 'ratechange';\nexport const onReset = EVENT_PREFIX + 'reset';\nexport const onResize = EVENT_PREFIX + 'resize';\nexport const onScroll = EVENT_PREFIX + 'scroll';\nexport const onScrollend = EVENT_PREFIX + 'scrollend';\nexport const onSecuritypolicyviolation = EVENT_PREFIX + 'securitypolicyviolation';\nexport const onSeeked = EVENT_PREFIX + 'seeked';\nexport const onSeeking = EVENT_PREFIX + 'seeking';\nexport const onSelect = EVENT_PREFIX + 'select';\nexport const onSlotchange = EVENT_PREFIX + 'slotchange';\nexport const onStalled = EVENT_PREFIX + 'stalled';\nexport const onSubmit = EVENT_PREFIX + 'submit';\nexport const onSuspend = EVENT_PREFIX + 'suspend';\nexport const onTimeupdate = EVENT_PREFIX + 'timeupdate';\nexport const onVolumechange = EVENT_PREFIX + 'volumechange';\nexport const onWaiting = EVENT_PREFIX + 'waiting';\nexport const onSelectstart = EVENT_PREFIX + 'selectstart';\nexport const onSelectionchange = EVENT_PREFIX + 'selectionchange';\nexport const onToggle = EVENT_PREFIX + 'toggle';\nexport const onPointercancel = EVENT_PREFIX + 'pointercancel';\nexport const onPointerdown = EVENT_PREFIX + 'pointerdown';\nexport const onPointerup = EVENT_PREFIX + 'pointerup';\nexport const onPointermove = EVENT_PREFIX + 'pointermove';\nexport const onPointerout = EVENT_PREFIX + 'pointerout';\nexport const onPointerover = EVENT_PREFIX + 'pointerover';\nexport const onPointerenter = EVENT_PREFIX + 'pointerenter';\nexport const onPointerleave = EVENT_PREFIX + 'pointerleave';\nexport const onGotpointercapture = EVENT_PREFIX + 'gotpointercapture';\nexport const onLostpointercapture = EVENT_PREFIX + 'lostpointercapture';\nexport const onMozfullscreenchange = EVENT_PREFIX + 'mozfullscreenchange';\nexport const onMozfullscreenerror = EVENT_PREFIX + 'mozfullscreenerror';\nexport const onAnimationcancel = EVENT_PREFIX + 'animationcancel';\nexport const onAnimationend = EVENT_PREFIX + 'animationend';\nexport const onAnimationiteration = EVENT_PREFIX + 'animationiteration';\nexport const onAnimationstart = EVENT_PREFIX + 'animationstart';\nexport const onTransitioncancel = EVENT_PREFIX + 'transitioncancel';\nexport const onTransitionend = EVENT_PREFIX + 'transitionend';\nexport const onTransitionrun = EVENT_PREFIX + 'transitionrun';\nexport const onTransitionstart = EVENT_PREFIX + 'transitionstart';\nexport const onWebkitanimationend = EVENT_PREFIX + 'webkitanimationend';\nexport const onWebkitanimationiteration = EVENT_PREFIX + 'webkitanimationiteration';\nexport const onWebkitanimationstart = EVENT_PREFIX + 'webkitanimationstart';\nexport const onWebkittransitionend = EVENT_PREFIX + 'webkittransitionend';\nexport const onError = EVENT_PREFIX + 'error';\n\nconst eventAttrs = new Signal.State([\n\tonAbort,\n\tonBlur,\n\tonFocus,\n\tonCancel,\n\tonAuxclick,\n\tonBeforeinput,\n\tonBeforetoggle,\n\tonCanplay,\n\tonCanplaythrough,\n\tonChange,\n\tonClick,\n\tonClose,\n\tonCommand,\n\tonContextmenu,\n\tonCopy,\n\tonCuechange,\n\tonCut,\n\tonDblclick,\n\tonDrag,\n\tonDragend,\n\tonDragenter,\n\tonDragexit,\n\tonDragleave,\n\tonDragover,\n\tonDragstart,\n\tonDrop,\n\tonDurationchange,\n\tonEmptied,\n\tonEnded,\n\tonFormdata,\n\tonInput,\n\tonInvalid,\n\tonKeydown,\n\tonKeypress,\n\tonKeyup,\n\tonLoad,\n\tonLoadeddata,\n\tonLoadedmetadata,\n\tonLoadstart,\n\tonMousedown,\n\tonMouseenter,\n\tonMouseleave,\n\tonMousemove,\n\tonMouseout,\n\tonMouseover,\n\tonMouseup,\n\tonWheel,\n\tonPaste,\n\tonPause,\n\tonPlay,\n\tonPlaying,\n\tonProgress,\n\tonRatechange,\n\tonReset,\n\tonResize,\n\tonScroll,\n\tonScrollend,\n\tonSecuritypolicyviolation,\n\tonSeeked,\n\tonSeeking,\n\tonSelect,\n\tonSlotchange,\n\tonStalled,\n\tonSubmit,\n\tonSuspend,\n\tonTimeupdate,\n\tonVolumechange,\n\tonWaiting,\n\tonSelectstart,\n\tonSelectionchange,\n\tonToggle,\n\tonPointercancel,\n\tonPointerdown,\n\tonPointerup,\n\tonPointermove,\n\tonPointerout,\n\tonPointerover,\n\tonPointerenter,\n\tonPointerleave,\n\tonGotpointercapture,\n\tonLostpointercapture,\n\tonMozfullscreenchange,\n\tonMozfullscreenerror,\n\tonAnimationcancel,\n\tonAnimationend,\n\tonAnimationiteration,\n\tonAnimationstart,\n\tonTransitioncancel,\n\tonTransitionend,\n\tonTransitionrun,\n\tonTransitionstart,\n\tonWebkitanimationend,\n\tonWebkitanimationiteration,\n\tonWebkitanimationstart,\n\tonWebkittransitionend,\n\tonError,\n]);\n\nconst selector = new Signal.Computed(() => eventAttrs.get().map(attr => `[${CSS.escape(attr)}]`).join(', '));\n\nconst attrToProp = attr => `on${attr[EVENT_PREFIX_LENGTH].toUpperCase()}${attr.substring(EVENT_PREFIX_LENGTH + 1)}`;\n\nexport const eventToProp = event => EVENT_PREFIX + event;\n\nexport const hasEventAttribute = event => eventAttrs.get().includes(EVENT_PREFIX + event);\n\nconst isEventDataAttr = ([name]) => name.startsWith(DATA_PREFIX);\n\nfunction _addListeners(el, { signal, attrFilter = EVENTS } = {}) {\n\tconst dataset = el.dataset;\n\n\tfor (const [attr, val] of Object.entries(dataset).filter(isEventDataAttr)) {\n\t\ttry {\n\t\t\tconst event = 'on' + attr.substring(DATA_PREFIX_LENGTH);\n\n\t\t\tif (attrFilter.hasOwnProperty(event) && hasCallback(val)) {\n\t\t\t\tel.addEventListener(event.substring(2).toLowerCase(), getCallback(val), {\n\t\t\t\t\tpassive: dataset.hasOwnProperty('aegisEventPassive'),\n\t\t\t\t\tcapture: dataset.hasOwnProperty('aegisEventCapture'),\n\t\t\t\t\tonce: dataset.hasOwnProperty('aegisEventOnce'),\n\t\t\t\t\tsignal: dataset.hasOwnProperty('aegisEventSignal') ? getSignal(dataset.aegisEventSignal) : signal,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch(err) {\n\t\t\treportError(err);\n\t\t}\n\t}\n}\n\nconst observer = new MutationObserver(records => {\n\trecords.forEach(record => {\n\t\tswitch(record.type) {\n\t\t\tcase 'childList':\n\t\t\t\t[...record.addedNodes]\n\t\t\t\t\t.filter(node => node.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t.forEach(node => attachListeners(node));\n\t\t\t\tbreak;\n\n\t\t\tcase 'attributes':\n\t\t\t\tif (typeof record.oldValue === 'string' && hasCallback(record.oldValue)) {\n\t\t\t\t\trecord.target.removeEventListener(\n\t\t\t\t\t\trecord.attributeName.substring(EVENT_PREFIX_LENGTH),\n\t\t\t\t\t\tgetCallback(record.oldValue), {\n\t\t\t\t\t\t\tonce: record.target.hasAttribute(once),\n\t\t\t\t\t\t\tcapture: record.target.hasAttribute(capture),\n\t\t\t\t\t\t\tpassive: record.target.hasAttribute(passive),\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trecord.target.hasAttribute(record.attributeName)\n\t\t\t\t\t&& hasCallback(record.target.getAttribute(record.attributeName))\n\t\t\t\t) {\n\t\t\t\t\trecord.target.addEventListener(\n\t\t\t\t\t\trecord.attributeName.substring(EVENT_PREFIX_LENGTH),\n\t\t\t\t\t\tgetCallback(record.target.getAttribute(record.attributeName)), {\n\t\t\t\t\t\t\tonce: record.target.hasAttribute(once),\n\t\t\t\t\t\t\tcapture: record.target.hasAttribute(capture),\n\t\t\t\t\t\t\tpassive: record.target.hasAttribute(passive),\n\t\t\t\t\t\t\tsignal: record.target.hasAttribute(signal) ? getSignal(record.target.getAttribute(signal)) : undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n});\n\nexport const EVENTS = {\n\tonAbort,\n\tonBlur,\n\tonFocus,\n\tonCancel,\n\tonAuxclick,\n\tonBeforeinput,\n\tonBeforetoggle,\n\tonCanplay,\n\tonCanplaythrough,\n\tonChange,\n\tonClick,\n\tonClose,\n\tonCommand,\n\tonContextmenu,\n\tonCopy,\n\tonCuechange,\n\tonCut,\n\tonDblclick,\n\tonDrag,\n\tonDragend,\n\tonDragenter,\n\tonDragexit,\n\tonDragleave,\n\tonDragover,\n\tonDragstart,\n\tonDrop,\n\tonDurationchange,\n\tonEmptied,\n\tonEnded,\n\tonFormdata,\n\tonInput,\n\tonInvalid,\n\tonKeydown,\n\tonKeypress,\n\tonKeyup,\n\tonLoad,\n\tonLoadeddata,\n\tonLoadedmetadata,\n\tonLoadstart,\n\tonMousedown,\n\tonMouseenter,\n\tonMouseleave,\n\tonMousemove,\n\tonMouseout,\n\tonMouseover,\n\tonMouseup,\n\tonWheel,\n\tonPaste,\n\tonPause,\n\tonPlay,\n\tonPlaying,\n\tonProgress,\n\tonRatechange,\n\tonReset,\n\tonResize,\n\tonScroll,\n\tonScrollend,\n\tonSecuritypolicyviolation,\n\tonSeeked,\n\tonSeeking,\n\tonSelect,\n\tonSlotchange,\n\tonStalled,\n\tonSubmit,\n\tonSuspend,\n\tonTimeupdate,\n\tonVolumechange,\n\tonWaiting,\n\tonSelectstart,\n\tonSelectionchange,\n\tonToggle,\n\tonPointercancel,\n\tonPointerdown,\n\tonPointerup,\n\tonPointermove,\n\tonPointerout,\n\tonPointerover,\n\tonPointerenter,\n\tonPointerleave,\n\tonGotpointercapture,\n\tonLostpointercapture,\n\tonMozfullscreenchange,\n\tonMozfullscreenerror,\n\tonAnimationcancel,\n\tonAnimationend,\n\tonAnimationiteration,\n\tonAnimationstart,\n\tonTransitioncancel,\n\tonTransitionend,\n\tonTransitionrun,\n\tonTransitionstart,\n\tonWebkitanimationend,\n\tonWebkitanimationiteration,\n\tonWebkitanimationstart,\n\tonWebkittransitionend,\n\tonError,\n\tonce,\n\tpassive,\n\tcapture,\n};\n\n/**\n * Register an attribute to observe for adding/removing event listeners\n *\n * @param {string} attr Name of the attribute to observe\n * @param {object} options\n * @param {boolean} [options.addListeners=false] Whether or not to automatically add listeners\n * @param {Document|Element} [options.base=document.body] Root node to observe\n * @param {AbortSignal} [options.signal] An abort signal to remove any listeners when aborted\n * @returns {string} The resulting `data-*` attribute name\n */\nexport function registerEventAttribute(attr, {\n\taddListeners = false,\n\tbase = document.body,\n\tsignal,\n} = {}) {\n\tconst fullAttr = EVENT_PREFIX + attr.toLowerCase();\n\tconst attrs = eventAttrs.get();\n\n\tif (! attrs.includes(fullAttr)) {\n\t\tconst sel = `[${CSS.escape(fullAttr)}]`;\n\t\tconst prop = attrToProp(fullAttr);\n\t\teventAttrs.set([...attrs, fullAttr]);\n\t\tEVENTS[prop] = fullAttr;\n\n\t\tif (addListeners) {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tconst config = { attrFilter: { [prop]: sel }, signal };\n\t\t\t\t[base, ...base.querySelectorAll(sel)].forEach(el => _addListeners(el, config));\n\t\t\t});\n\t\t}\n\t}\n\n\treturn fullAttr;\n}\n\n/**\n * Registers an `AbortController` in the controller registry and returns the key for it\n *\n * @param {AbortController} controller\n * @returns {string} The randomly generated key with which the controller is registered\n * @throws {TypeError} If controller is not an `AbortController`\n * @throws {Error} Any `reason` if controller is already aborted\n */\nexport function registerController(controller) {\n\tif (! (controller instanceof AbortController)) {\n\t\tthrow new TypeError('Controller is not an `AbortSignal.');\n\t} else if (controller.signal.aborted) {\n\t\tthrow controller.signal.reason;\n\t} else if (typeof controller.signal[controllerSymbol] === 'string') {\n\t\treturn controller.signal[controllerSymbol];\n\t} else {\n\t\tconst key = 'aegis:event:controller:' + crypto.randomUUID();\n\t\tObject.defineProperty(controller.signal, controllerSymbol, { value: key, writable: false, enumerable: false });\n\t\tcontrollerRegistry.set(key, controller);\n\n\t\tcontroller.signal.addEventListener('abort', unregisterController, { once: true });\n\n\t\treturn key;\n\t}\n}\n\n/**\n * Removes a controller from the registry\n *\n * @param {AbortController|AbortSignal|string} key The registed key or the controller or signal it corresponds to\n * @returns {boolean} Whether or not the controller was successfully unregistered\n */\nexport function unregisterController(key) {\n\tif (key instanceof AbortController) {\n\t\treturn controllerRegistry.delete(key.signal[controllerSymbol]);\n\t} else if (key instanceof AbortSignal) {\n\t\treturn controllerRegistry.delete(key[controllerSymbol]);\n\t} else {\n\t\treturn controllerRegistry.delete(key);\n\t}\n}\n\n/**\n * Creates and registers an `AbortController` in the controller registry and returns the key for it\n *\n * @param {object} options\n * @param {AbortSignal} [options.signal] An optional `AbortSignal` to externally abort the controller with\n * @returns {string} The randomly generated key with which the controller is registered\n */\nexport function createController({ signal } = {}) {\n\tconst controller = new AbortController();\n\n\tif (signal instanceof AbortSignal) {\n\t\tsignal.addEventListener('abort', ({ target }) => controller.abort(target.reason), { signal: controller.signal});\n\t}\n\n\treturn registerController(controller);\n}\n\n/**\n * Get a registetd controller from the registry\n *\n * @param {string} key Generated key with which the controller was registered\n * @returns {AbortController|void} Any registered controller, if any\n */\nexport const getController = key => controllerRegistry.get(key);\n\nexport function abortController(key, reason) {\n\tconst controller = getController(key);\n\n\tif (! (controller instanceof AbortController)) {\n\t\treturn false;\n\t} else if (typeof reason === 'string') {\n\t\tcontroller.abort(new Error(reason));\n\t\treturn true;\n\t} else {\n\t\tcontroller.abort(reason);\n\t\treturn true;\n\t}\n}\n\n/**\n * Register an `AbortSignal` to be used in declarative HTML as a value for `data-aegis-event-signal`\n *\n * @param {AbortSignal} signal The signal to register\n * @returns {string} The registered key\n * @throws {TypeError} Thrown if not an `AbortSignal`\n */\nexport function registerSignal(signal) {\n\tif (! (signal instanceof AbortSignal)) {\n\t\tthrow new TypeError('Signal must be an `AbortSignal`.');\n\t} else if (typeof signal[signalSymbol] === 'string') {\n\t\treturn signal[signalSymbol];\n\t} else {\n\t\tconst key = 'aegis:event:signal:' + crypto.randomUUID();\n\t\tObject.defineProperty(signal, signalSymbol, { value: key, writable: false, enumerable: false });\n\t\tsignalRegistry.set(key, signal);\n\t\tsignal.addEventListener('abort', ({ target }) => unregisterSignal(target[signalSymbol]), { once: true });\n\n\t\treturn key;\n\t}\n}\n\n/**\n * Gets and `AbortSignal` from the registry\n *\n * @param {string} key The registered key for the signal\n * @returns {AbortSignal|void} The corresponding `AbortSignal`, if any\n */\nexport const getSignal = key => signalRegistry.get(key);\n\n/**\n * Removes an `AbortSignal` from the registry\n *\n * @param {AbortSignal|string} signal An `AbortSignal` or the registered key for one\n * @returns {boolean} Whether or not the signal was sucessfully unregistered\n * @throws {TypeError} Throws if `signal` is not an `AbortSignal` or the key for a registered signal\n */\nexport function unregisterSignal(signal) {\n\tif (signal instanceof AbortSignal) {\n\t\treturn signalRegistry.delete(signal[signalSymbol]);\n\t} else if (typeof signal === 'string') {\n\t\treturn signalRegistry.delete(signal);\n\t} else {\n\t\tthrow new TypeError('Signal must be an `AbortSignal` or registered key/attribute.');\n\t}\n}\n\n/**\n * Add listeners to an element and its children, matching a generated query based on registered attributes\n *\n * @param {Element|Document} target Root node to add listeners from\n * @param {object} options\n * @param {AbortSignal} [options.signal] Optional signal to remove event listeners\n * @returns {Element|Document} Returns the passed target node\n */\nexport function attachListeners(target, { signal } = {}) {\n\tconst nodes = target instanceof Element && target.matches(selector.get())\n\t\t? [target, ...target.querySelectorAll(selector.get())]\n\t\t: target.querySelectorAll(selector.get());\n\n\tnodes.forEach(el => _addListeners(el, { signal }));\n\n\treturn target;\n}\n\n/**\n * Add a node to the `MutationObserver` to observe attributes and add/remove event listeners\n *\n * @param {Document|Element} root Element to observe attributes on\n */\nexport function observeEvents(root = document) {\n\tattachListeners(root);\n\n\tobserver.observe(root, {\n\t\tsubtree: true,\n\t\tchildList:true,\n\t\tattributes: true,\n\t\tattributeOldValue: true,\n\t\tattributeFilter: eventAttrs.get(),\n\t});\n}\n\n/**\n * Disconnects the `MutationObserver`, disabling observing of all attribute changes\n *\n * @returns {void}\n */\nexport const disconnectEventsObserver = () => observer.disconnect();\n\n/**\n * Register a global error handler callback\n *\n * @param {Function} callback Callback to register as a global error handler\n * @param {EventInit} config Typical event listener config object\n */\nexport function setGlobalErrorHandler(callback, { capture, once, passive, signal } = {}) {\n\tif (callback instanceof Function) {\n\t\tglobalThis.addEventListener('error', callback, { capture, once, passive, signal });\n\t} else {\n\t\tthrow new TypeError('Callback is not a function.');\n\t}\n}\n","import {\n\teventToProp, capture as captureAttr, once as onceAttr, passive as passiveAttr, signal as signalAttr,\n\tregisterEventAttribute, hasEventAttribute, registerSignal, abortController,\n} from './events.js';\n\nlet _isRegistrationOpen = true;\n\nconst $$ = (selector, base = document) => base.querySelectorAll(selector);\n\nconst $ = (selector, base = document) => base.querySelector(selector);\n\nexport const requestFullscreen = { attr: 'data-request-fullscreen-selector', data: 'requestFullscreenSelector' };\nexport const toggleFullsceen = { attr: 'data-toggle-fullscreen-selector', data: 'toggleFullscreenSelector' };\n\nexport const FUNCS = {\n\tdebug: {\n\t\tlog: 'aegis:debug:log',\n\t\tinfo: 'aegis:debug:info',\n\t\twarn: 'aegis:debug:warn',\n\t\terror: 'aegis:debug:error',\n\t},\n\tnavigate: {\n\t\tback: 'aegis:navigate:back',\n\t\tforward: 'aegis:navigate:forward',\n\t\treload: 'aegis:navigate:reload',\n\t\tclose: 'aegis:navigate:close',\n\t\tlink: 'aegis:navigate:go',\n\t\tpopup: 'aegis:navigate:popup',\n\t},\n\tui: {\n\t\tcommand: 'aegis:ui:command',\n\t\tprint: 'aegis:ui:print',\n\t\tremove: 'aegis:ui:remove',\n\t\thide: 'aegis:ui:hide',\n\t\tunhide: 'aegis:ui:unhide',\n\t\tshowModal: 'aegis:ui:showModal',\n\t\tcloseModal: 'aegis:ui:closeModal',\n\t\tshowPopover: 'aegis:ui:showPopover',\n\t\thidePopover: 'aegis:ui:hidePopover',\n\t\ttogglePopover: 'aegis:ui:togglePopover',\n\t\tenable: 'aegis:ui:enable',\n\t\tdisable: 'aegis:ui:disable',\n\t\tscrollTo: 'aegis:ui:scrollTo',\n\t\tprevent: 'aegis:ui:prevent',\n\t\trevokeObjectURL: 'aegis:ui:revokeObjectURL',\n\t\tcancelAnimationFrame: 'aegis:ui:cancelAnimationFrame',\n\t\trequestFullscreen: 'aegis:ui:requestFullscreen',\n\t\ttoggleFullscreen: 'aegis:ui:toggleFullsceen',\n\t\texitFullsceen: 'aegis:ui:exitFullscreen',\n\t\topen: 'aegis:ui:open',\n\t\tclose: 'aegis:ui:close',\n\t\tabortController: 'aegis:ui:controller:abort',\n\t},\n};\n\n/**\n * @type {Map<string, function>}\n */\nconst registry = new Map([\n\t[FUNCS.debug.log, console.log],\n\t[FUNCS.debug.warn, console.warn],\n\t[FUNCS.debug.error, console.error],\n\t[FUNCS.debug.info, console.info],\n\t[FUNCS.navigate.back, () => history.back()],\n\t[FUNCS.navigate.forward, () => history.forward()],\n\t[FUNCS.navigate.reload, () => history.go(0)],\n\t[FUNCS.navigate.close, () => globalThis.close()],\n\t[FUNCS.navigate.link, event => {\n\t\tif (event.isTrusted) {\n\t\t\tevent.preventDefault();\n\t\t\tlocation.href = event.currentTarget.dataset.url;\n\t\t}\n\t}],\n\t[FUNCS.navigate.popup, event => {\n\t\tif (event.isTrusted) {\n\t\t\tevent.preventDefault();\n\t\t\tglobalThis.open(event.currentTarget.dataset.url);\n\t\t}\n\t}],\n\t[FUNCS.ui.hide, ({ currentTarget }) => {\n\t\t$$(currentTarget.dataset.hideSelector).forEach(el => el.hidden = true);\n\t}],\n\t[FUNCS.ui.unhide, ({ currentTarget }) => {\n\t\t$$(currentTarget.dataset.unhideSelector).forEach(el => el.hidden = false);\n\t}],\n\t[FUNCS.ui.disable, ({ currentTarget }) => {\n\t\t$$(currentTarget.dataset.disableSelector).forEach(el => el.disabled = true);\n\t}],\n\t[FUNCS.ui.enable, ({ currentTarget }) => {\n\t\t$$(currentTarget.dataset.enableSelector).forEach(el => el.disabled = false);\n\t}],\n\t[FUNCS.ui.remove, ({ currentTarget }) => {\n\t\t$$(currentTarget.dataset.removeSelector).forEach(el => el.remove());\n\t}],\n\t[FUNCS.ui.scrollTo, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.scrollToSelector);\n\n\t\tif (target instanceof Element) {\n\t\t\ttarget.scrollIntoView({\n\t\t\t\tbehavior: matchMedia('(prefers-reduced-motion: reduce)').matches\n\t\t\t\t\t? 'instant'\n\t\t\t\t\t: 'smooth',\n\t\t\t});\n\t\t}\n\t}],\n\t[FUNCS.ui.revokeObjectURL, ({ currentTarget }) => URL.revokeObjectURL(currentTarget.src)],\n\t[FUNCS.ui.cancelAnimationFrame, ({ currentTarget }) => cancelAnimationFrame(parseInt(currentTarget.dataset.animationFrame))],\n\t[FUNCS.ui.clearInterval, ({ currentTarget }) => clearInterval(parseInt(currentTarget.dataset.clearInterval))],\n\t[FUNCS.ui.clearTimeout, ({ currentTarget }) => clearTimeout(parseInt(currentTarget.dataset.timeout))],\n\t[FUNCS.ui.abortController, ({ currentTarget }) => abortController(currentTarget.dataset.aegisEventController, currentTarget.dataset.aegisControllerReason)],\n\t[FUNCS.ui.open, ({ currentTarget }) => document.querySelector(currentTarget.dataset.openSelector).open = true],\n\t[FUNCS.ui.close, ({ currentTarget }) => document.querySelector(currentTarget.dataset.closeSelector).open = false],\n\t[FUNCS.ui.showModal, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.showModalSelector);\n\n\t\tif (target instanceof HTMLDialogElement) {\n\t\t\ttarget.showModal();\n\t\t}\n\t}],\n\t[FUNCS.ui.closeModal, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.closeModalSelector);\n\n\t\tif (target instanceof HTMLDialogElement) {\n\t\t\ttarget.close();\n\t\t}\n\t}],\n\t[FUNCS.ui.showPopover, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.showPopoverSelector);\n\n\t\tif (target instanceof HTMLElement) {\n\t\t\ttarget.showPopover();\n\t\t}\n\t}],\n\t[FUNCS.ui.hidePopover, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.hidePopoverSelector);\n\n\t\tif (target instanceof HTMLElement) {\n\t\t\ttarget.hidePopover();\n\t\t}\n\t}],\n\t[FUNCS.ui.togglePopover, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.togglePopoverSelector);\n\n\t\tif (target instanceof HTMLElement) {\n\t\t\ttarget.togglePopover();\n\t\t}\n\t}],\n\t[FUNCS.ui.print, () => globalThis.print()],\n\t[FUNCS.ui.prevent, event => event.preventDefault()],\n\t[FUNCS.ui.requestFullscreen, ({ currentTarget}) => {\n\t\tif (currentTarget.dataset.hasOwnProperty(requestFullscreen.data)) {\n\t\t\tdocument.getElementById(currentTarget.dataset[requestFullscreen.data]).requestFullscreen();\n\t\t} else {\n\t\t\tcurrentTarget.requestFullscreen();\n\t\t}\n\t}],\n\t[FUNCS.ui.toggleFullscreen, ({ currentTarget }) => {\n\t\tconst target = currentTarget.dataset.hasOwnProperty(toggleFullsceen.data)\n\t\t\t? document.getElementById(currentTarget.dataset[toggleFullsceen.data])\n\t\t\t: currentTarget;\n\n\t\tif (target.isSameNode(document.fullscreenElement)) {\n\t\t\tdocument.exitFullscreen();\n\t\t} else {\n\t\t\ttarget.requestFullscreen();\n\t\t}\n\t}],\n\t[FUNCS.ui.exitFullsceen, () => document.exitFullscreen()],\n]);\n\nexport class CallbackRegistryKey extends String {\n\t[Symbol.dispose]() {\n\t\tregistry.delete(this.toString());\n\t}\n}\n\n/**\n * Check if callback registry is open\n *\n * @returns {boolean} Whether or not callback registry is open\n */\nexport const isRegistrationOpen = () => _isRegistrationOpen;\n\n/**\n * Close callback registry\n *\n * @returns {boolean} Whether or not the callback was succesfully removed\n */\nexport const closeRegistration = () => _isRegistrationOpen = false;\n\n/**\n * Get an array of registered callbacks\n *\n * @returns {Array} A frozen array listing keys to all registered callbacks\n */\nexport const listCallbacks = () => Object.freeze(Array.from(registry.keys()));\n\n/**\n * Check if a callback is registered\n *\n * @param {CallbackRegistryKey|string} name The name/key to check for in callback registry\n * @returns {boolean} Whether or not a callback is registered\n */\nexport const hasCallback = name => registry.has(name?.toString());\n\n/**\n * Get a callback from the registry by name/key\n *\n * @param {CallbackRegistryKey|string} name The name/key of the callback to get\n * @returns {Function|undefined} The corresponding function registered under that name/key\n */\nexport const getCallback = name => registry.get(name?.toString());\n\n/**\n *\t Remove a callback from the registry\n *\n * @param {CallbackRegistryKey|string} name The name/key of the callback to get\n * @returns {boolean} Whether or not the callback was successfully unregisterd\n */\nexport const unregisterCallback = name => _isRegistrationOpen && registry.delete(name?.toString());\n\n/**\n * Remove all callbacks from the registry\n *\n * @returns {void}\n */\nexport const clearRegistry = () => registry.clear();\n\n/**\n * Create a registered callback with a randomly generated name\n *\n * @param {Function} callback Callback function to register\n * @param {object} [config]\n * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering.\n * @returns {string} The automatically generated key/name of the registered callback\n */\nexport const createCallback = (callback, { stack } = {}) => registerCallback('aegis:callback:' + crypto.randomUUID(), callback, { stack });\n\n/**\n * Call a callback fromt the registry by name/key\n *\n * @param {CallbackRegistryKey|string} name The name/key of the registered function\n * @param {...any} args Any arguments to pass along to the function\n * @returns {any} Whatever the return value of the function is\n * @throws {Error} Throws if callback is not found or any error resulting from calling the function\n */\nexport function callCallback(name, ...args) {\n\tif (registry.has(name?.toString())) {\n\t\treturn registry.get(name?.toString()).apply(this || globalThis, args);\n\t} else {\n\t\tthrow new Error(`No ${name} function registered.`);\n\t}\n}\n\n/**\n * Register a named callback in registry\n *\n * @param {CallbackRegistryKey|string} name The name/key to register the callback under\n * @param {Function} callback The callback value to register\n * @param {object} config\n * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering.\n * @returns {string} The registered name/key\n */\nexport function registerCallback(name, callback, { stack } = {}) {\n\tif (typeof name === 'string') {\n\t\treturn registerCallback(new CallbackRegistryKey(name), callback, { stack });\n\t}else if (! (name instanceof CallbackRegistryKey)) {\n\t\tthrow new TypeError('Callback name must be a disposable string/CallbackRegistryKey.');\n\t} if (! (callback instanceof Function)) {\n\t\tthrow new TypeError('Callback must be a function.');\n\t} else if (! _isRegistrationOpen) {\n\t\tthrow new TypeError('Cannot register new callbacks because registry is closed.');\n\t} else if (registry.has(name?.toString())) {\n\t\tthrow new Error(`Handler \"${name}\" is already registered.`);\n\t} else if (stack instanceof DisposableStack || stack instanceof AsyncDisposableStack) {\n\t\tconst key = stack.use(new CallbackRegistryKey(name));\n\t\tregistry.set(key.toString(), callback);\n\n\t\treturn key;\n\t} else {\n\t\tconst key = new CallbackRegistryKey(name);\n\t\tregistry.set(key.toString(), callback);\n\n\t\treturn key;\n\t}\n}\n\n/**\n * Get the host/root node of a given thing.\n *\n * @param {Event|Document|Element|ShadowRoot} target Source thing to search for host of\n * @returns {Document|Element|null} The host/root node, or null\n */\nexport function getHost(target) {\n\tif (target instanceof Event) {\n\t\treturn getHost(target.currentTarget);\n\t} else if (target instanceof Document) {\n\t\treturn target;\n\t} else if (target instanceof Element) {\n\t\treturn getHost(target.getRootNode());\n\t} else if (target instanceof ShadowRoot) {\n\t\treturn target.host;\n\t} else {\n\t\treturn null;\n\t}\n}\n\nexport function on(event, callback, { capture = false, passive = false, once = false, signal, stack } = {}) {\n\tif (callback instanceof Function) {\n\t\treturn on(event, createCallback(callback, { stack }), { capture, passive, once, signal });\n\t} else if (! (callback instanceof String || typeof callback === 'string') || callback.length === 0) {\n\t\tthrow new TypeError('Callback must be a function or a registered callback string.');\n\t} else if (typeof event !== 'string' || event.length === 0) {\n\t\tthrow new TypeError('Event must be a non-empty string.');\n\t} else {\n\t\tif (! hasEventAttribute(event)) {\n\t\t\tregisterEventAttribute(event);\n\t\t}\n\n\t\tconst parts = [[eventToProp(event), callback]];\n\n\t\tif (capture) {\n\t\t\tparts.push([captureAttr, '']);\n\t\t}\n\n\t\tif (passive) {\n\t\t\tparts.push([passiveAttr, '']);\n\t\t}\n\n\t\tif (once) {\n\t\t\tparts.push([onceAttr, '']);\n\t\t}\n\n\t\tif (signal instanceof AbortSignal) {\n\t\t\tparts.push([signalAttr, registerSignal(signal)]);\n\t\t} else if (typeof signal === 'string') {\n\t\t\tparts.push([signalAttr, signal]);\n\t\t}\n\n\t\treturn parts.map(([prop, val]) => `${prop}=\"${val}\"`).join(' ');\n\t}\n}\n"],"names":["PREFIX","EVENT_PREFIX","DATA_PREFIX","signalSymbol","Symbol","controllerSymbol","signalRegistry","Map","controllerRegistry","once","passive","capture","signal","controller","onAbort","onBlur","onFocus","onCancel","onAuxclick","onBeforeinput","onBeforetoggle","onCanplay","onCanplaythrough","onChange","onClick","onClose","onCommand","onContextmenu","onCopy","onCuechange","onCut","onDblclick","onDrag","onDragend","onDragenter","onDragexit","onDragleave","onDragover","onDragstart","onDrop","onDurationchange","onEmptied","onEnded","onFormdata","onInput","onInvalid","onKeydown","onKeypress","onKeyup","onLoad","onLoadeddata","onLoadedmetadata","onLoadstart","onMousedown","onMouseenter","onMouseleave","onMousemove","onMouseout","onMouseover","onMouseup","onWheel","onPaste","onPause","onPlay","onPlaying","onProgress","onRatechange","onReset","onResize","onScroll","onScrollend","onSecuritypolicyviolation","onSeeked","onSeeking","onSelect","onSlotchange","onStalled","onSubmit","onSuspend","onTimeupdate","onVolumechange","onWaiting","onSelectstart","onSelectionchange","onToggle","onPointercancel","onPointerdown","onPointerup","onPointermove","onPointerout","onPointerover","onPointerenter","onPointerleave","onGotpointercapture","onLostpointercapture","onMozfullscreenchange","onMozfullscreenerror","onAnimationcancel","onAnimationend","onAnimationiteration","onAnimationstart","onTransitioncancel","onTransitionend","onTransitionrun","onTransitionstart","onWebkitanimationend","onWebkitanimationiteration","onWebkitanimationstart","onWebkittransitionend","onError","eventAttrs","Signal","State","selector","Computed","get","map","attr","CSS","escape","join","eventToProp","event","hasEventAttribute","includes","isEventDataAttr","name","startsWith","_addListeners","el","attrFilter","EVENTS","dataset","val","Object","entries","filter","substring","hasOwnProperty","hasCallback","addEventListener","toLowerCase","getCallback","getSignal","aegisEventSignal","err","reportError","observer","MutationObserver","records","forEach","record","type","addedNodes","node","nodeType","Node","ELEMENT_NODE","attachListeners","oldValue","target","removeEventListener","attributeName","hasAttribute","getAttribute","undefined","registerEventAttribute","addListeners","base","document","body","fullAttr","attrs","sel","prop","toUpperCase","EVENT_PREFIX_LENGTH","attrToProp","set","requestAnimationFrame","config","querySelectorAll","registerController","AbortController","aborted","reason","key","crypto","randomUUID","defineProperty","value","writable","enumerable","unregisterController","TypeError","delete","AbortSignal","createController","abort","getController","abortController","Error","registerSignal","unregisterSignal","Element","matches","observeEvents","root","observe","subtree","childList","attributes","attributeOldValue","attributeFilter","disconnectEventsObserver","disconnect","setGlobalErrorHandler","callback","Function","globalThis","_isRegistrationOpen","$$","$","querySelector","requestFullscreen","data","toggleFullsceen","FUNCS","debug","log","info","warn","error","navigate","back","forward","reload","close","link","popup","ui","command","print","remove","hide","unhide","showModal","closeModal","showPopover","hidePopover","togglePopover","enable","disable","scrollTo","prevent","revokeObjectURL","cancelAnimationFrame","toggleFullscreen","exitFullsceen","open","registry","console","history","go","isTrusted","preventDefault","location","href","currentTarget","url","hideSelector","hidden","unhideSelector","disableSelector","disabled","enableSelector","removeSelector","scrollToSelector","scrollIntoView","behavior","matchMedia","URL","src","parseInt","animationFrame","clearInterval","clearTimeout","timeout","aegisEventController","aegisControllerReason","openSelector","closeSelector","showModalSelector","HTMLDialogElement","closeModalSelector","showPopoverSelector","HTMLElement","hidePopoverSelector","togglePopoverSelector","getElementById","isSameNode","fullscreenElement","exitFullscreen","CallbackRegistryKey","String","dispose","this","toString","isRegistrationOpen","closeRegistration","listCallbacks","freeze","Array","from","keys","has","unregisterCallback","clearRegistry","clear","createCallback","stack","registerCallback","callCallback","args","apply","DisposableStack","AsyncDisposableStack","use","getHost","Event","Document","getRootNode","ShadowRoot","host","on","length","parts","push","captureAttr","passiveAttr","onceAttr","signalAttr"],"mappings":"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"}
1
+ {"version":3,"file":"callbackRegistry.mjs","sources":["events.js","callbacks.js"],"sourcesContent":["import { hasCallback, getCallback } from './callbacks.js';\nimport { Signal } from '@shgysk8zer0/signals';\n\nconst PREFIX = 'data-aegis-event-';\nconst EVENT_PREFIX = PREFIX + 'on-';\nconst EVENT_PREFIX_LENGTH = EVENT_PREFIX.length;\nconst DATA_PREFIX = 'aegisEventOn';\nconst DATA_PREFIX_LENGTH = DATA_PREFIX.length;\nconst signalSymbol = Symbol('aegis:signal');\nconst controllerSymbol = Symbol('aegis:controller');\nconst signalRegistry = new Map();\nconst controllerRegistry = new Map();\n\nexport const once = PREFIX + 'once';\nexport const passive = PREFIX + 'passive';\nexport const capture = PREFIX + 'capture';\nexport const signal = PREFIX + 'signal';\nexport const controller = PREFIX + 'controller';\nexport const onAbort = EVENT_PREFIX + 'abort';\nexport const onBlur = EVENT_PREFIX + 'blur';\nexport const onFocus = EVENT_PREFIX + 'focus';\nexport const onCancel = EVENT_PREFIX + 'cancel';\nexport const onAuxclick = EVENT_PREFIX + 'auxclick';\nexport const onBeforeinput = EVENT_PREFIX + 'beforeinput';\nexport const onBeforetoggle = EVENT_PREFIX + 'beforetoggle';\nexport const onCanplay = EVENT_PREFIX + 'canplay';\nexport const onCanplaythrough = EVENT_PREFIX + 'canplaythrough';\nexport const onChange = EVENT_PREFIX + 'change';\nexport const onClick = EVENT_PREFIX + 'click';\nexport const onClose = EVENT_PREFIX + 'close';\nexport const onCommand = EVENT_PREFIX + 'command';\nexport const onContextmenu = EVENT_PREFIX + 'contextmenu';\nexport const onCopy = EVENT_PREFIX + 'copy';\nexport const onCuechange = EVENT_PREFIX + 'cuechange';\nexport const onCut = EVENT_PREFIX + 'cut';\nexport const onDblclick = EVENT_PREFIX + 'dblclick';\nexport const onDrag = EVENT_PREFIX + 'drag';\nexport const onDragend = EVENT_PREFIX + 'dragend';\nexport const onDragenter = EVENT_PREFIX + 'dragenter';\nexport const onDragexit = EVENT_PREFIX + 'dragexit';\nexport const onDragleave = EVENT_PREFIX + 'dragleave';\nexport const onDragover = EVENT_PREFIX + 'dragover';\nexport const onDragstart = EVENT_PREFIX + 'dragstart';\nexport const onDrop = EVENT_PREFIX + 'drop';\nexport const onDurationchange = EVENT_PREFIX + 'durationchange';\nexport const onEmptied = EVENT_PREFIX + 'emptied';\nexport const onEnded = EVENT_PREFIX + 'ended';\nexport const onFormdata = EVENT_PREFIX + 'formdata';\nexport const onInput = EVENT_PREFIX + 'input';\nexport const onInvalid = EVENT_PREFIX + 'invalid';\nexport const onKeydown = EVENT_PREFIX + 'keydown';\nexport const onKeypress = EVENT_PREFIX + 'keypress';\nexport const onKeyup = EVENT_PREFIX + 'keyup';\nexport const onLoad = EVENT_PREFIX + 'load';\nexport const onLoadeddata = EVENT_PREFIX + 'loadeddata';\nexport const onLoadedmetadata = EVENT_PREFIX + 'loadedmetadata';\nexport const onLoadstart = EVENT_PREFIX + 'loadstart';\nexport const onMousedown = EVENT_PREFIX + 'mousedown';\nexport const onMouseenter = EVENT_PREFIX + 'mouseenter';\nexport const onMouseleave = EVENT_PREFIX + 'mouseleave';\nexport const onMousemove = EVENT_PREFIX + 'mousemove';\nexport const onMouseout = EVENT_PREFIX + 'mouseout';\nexport const onMouseover = EVENT_PREFIX + 'mouseover';\nexport const onMouseup = EVENT_PREFIX + 'mouseup';\nexport const onWheel = EVENT_PREFIX + 'wheel';\nexport const onPaste = EVENT_PREFIX + 'paste';\nexport const onPause = EVENT_PREFIX + 'pause';\nexport const onPlay = EVENT_PREFIX + 'play';\nexport const onPlaying = EVENT_PREFIX + 'playing';\nexport const onProgress = EVENT_PREFIX + 'progress';\nexport const onRatechange = EVENT_PREFIX + 'ratechange';\nexport const onReset = EVENT_PREFIX + 'reset';\nexport const onResize = EVENT_PREFIX + 'resize';\nexport const onScroll = EVENT_PREFIX + 'scroll';\nexport const onScrollend = EVENT_PREFIX + 'scrollend';\nexport const onSecuritypolicyviolation = EVENT_PREFIX + 'securitypolicyviolation';\nexport const onSeeked = EVENT_PREFIX + 'seeked';\nexport const onSeeking = EVENT_PREFIX + 'seeking';\nexport const onSelect = EVENT_PREFIX + 'select';\nexport const onSlotchange = EVENT_PREFIX + 'slotchange';\nexport const onStalled = EVENT_PREFIX + 'stalled';\nexport const onSubmit = EVENT_PREFIX + 'submit';\nexport const onSuspend = EVENT_PREFIX + 'suspend';\nexport const onTimeupdate = EVENT_PREFIX + 'timeupdate';\nexport const onVolumechange = EVENT_PREFIX + 'volumechange';\nexport const onWaiting = EVENT_PREFIX + 'waiting';\nexport const onSelectstart = EVENT_PREFIX + 'selectstart';\nexport const onSelectionchange = EVENT_PREFIX + 'selectionchange';\nexport const onToggle = EVENT_PREFIX + 'toggle';\nexport const onPointercancel = EVENT_PREFIX + 'pointercancel';\nexport const onPointerdown = EVENT_PREFIX + 'pointerdown';\nexport const onPointerup = EVENT_PREFIX + 'pointerup';\nexport const onPointermove = EVENT_PREFIX + 'pointermove';\nexport const onPointerout = EVENT_PREFIX + 'pointerout';\nexport const onPointerover = EVENT_PREFIX + 'pointerover';\nexport const onPointerenter = EVENT_PREFIX + 'pointerenter';\nexport const onPointerleave = EVENT_PREFIX + 'pointerleave';\nexport const onGotpointercapture = EVENT_PREFIX + 'gotpointercapture';\nexport const onLostpointercapture = EVENT_PREFIX + 'lostpointercapture';\nexport const onMozfullscreenchange = EVENT_PREFIX + 'mozfullscreenchange';\nexport const onMozfullscreenerror = EVENT_PREFIX + 'mozfullscreenerror';\nexport const onAnimationcancel = EVENT_PREFIX + 'animationcancel';\nexport const onAnimationend = EVENT_PREFIX + 'animationend';\nexport const onAnimationiteration = EVENT_PREFIX + 'animationiteration';\nexport const onAnimationstart = EVENT_PREFIX + 'animationstart';\nexport const onTransitioncancel = EVENT_PREFIX + 'transitioncancel';\nexport const onTransitionend = EVENT_PREFIX + 'transitionend';\nexport const onTransitionrun = EVENT_PREFIX + 'transitionrun';\nexport const onTransitionstart = EVENT_PREFIX + 'transitionstart';\nexport const onWebkitanimationend = EVENT_PREFIX + 'webkitanimationend';\nexport const onWebkitanimationiteration = EVENT_PREFIX + 'webkitanimationiteration';\nexport const onWebkitanimationstart = EVENT_PREFIX + 'webkitanimationstart';\nexport const onWebkittransitionend = EVENT_PREFIX + 'webkittransitionend';\nexport const onError = EVENT_PREFIX + 'error';\n\nconst eventAttrs = new Signal.State([\n\tonAbort,\n\tonBlur,\n\tonFocus,\n\tonCancel,\n\tonAuxclick,\n\tonBeforeinput,\n\tonBeforetoggle,\n\tonCanplay,\n\tonCanplaythrough,\n\tonChange,\n\tonClick,\n\tonClose,\n\tonCommand,\n\tonContextmenu,\n\tonCopy,\n\tonCuechange,\n\tonCut,\n\tonDblclick,\n\tonDrag,\n\tonDragend,\n\tonDragenter,\n\tonDragexit,\n\tonDragleave,\n\tonDragover,\n\tonDragstart,\n\tonDrop,\n\tonDurationchange,\n\tonEmptied,\n\tonEnded,\n\tonFormdata,\n\tonInput,\n\tonInvalid,\n\tonKeydown,\n\tonKeypress,\n\tonKeyup,\n\tonLoad,\n\tonLoadeddata,\n\tonLoadedmetadata,\n\tonLoadstart,\n\tonMousedown,\n\tonMouseenter,\n\tonMouseleave,\n\tonMousemove,\n\tonMouseout,\n\tonMouseover,\n\tonMouseup,\n\tonWheel,\n\tonPaste,\n\tonPause,\n\tonPlay,\n\tonPlaying,\n\tonProgress,\n\tonRatechange,\n\tonReset,\n\tonResize,\n\tonScroll,\n\tonScrollend,\n\tonSecuritypolicyviolation,\n\tonSeeked,\n\tonSeeking,\n\tonSelect,\n\tonSlotchange,\n\tonStalled,\n\tonSubmit,\n\tonSuspend,\n\tonTimeupdate,\n\tonVolumechange,\n\tonWaiting,\n\tonSelectstart,\n\tonSelectionchange,\n\tonToggle,\n\tonPointercancel,\n\tonPointerdown,\n\tonPointerup,\n\tonPointermove,\n\tonPointerout,\n\tonPointerover,\n\tonPointerenter,\n\tonPointerleave,\n\tonGotpointercapture,\n\tonLostpointercapture,\n\tonMozfullscreenchange,\n\tonMozfullscreenerror,\n\tonAnimationcancel,\n\tonAnimationend,\n\tonAnimationiteration,\n\tonAnimationstart,\n\tonTransitioncancel,\n\tonTransitionend,\n\tonTransitionrun,\n\tonTransitionstart,\n\tonWebkitanimationend,\n\tonWebkitanimationiteration,\n\tonWebkitanimationstart,\n\tonWebkittransitionend,\n\tonError,\n]);\n\n\nconst attrToProp = attr => `on${attr[EVENT_PREFIX_LENGTH].toUpperCase()}${attr.substring(EVENT_PREFIX_LENGTH + 1)}`;\nconst selector = new Signal.Computed(() => eventAttrs.get().map(attr => `[${CSS.escape(attr)}]`).join(','));\n\nexport const eventToProp = event => EVENT_PREFIX + event;\n\nexport const hasEventAttribute = event => eventAttrs.get().includes(EVENT_PREFIX + event);\n\nconst isEventDataAttr = ([name]) => name.startsWith(DATA_PREFIX);\n\nfunction _addListeners(el, { signal, attrFilter = EVENTS } = {}) {\n\tconst dataset = el.dataset;\n\n\tfor (const [attr, val] of Object.entries(dataset).filter(isEventDataAttr)) {\n\t\ttry {\n\t\t\tconst event = 'on' + attr.substring(DATA_PREFIX_LENGTH);\n\n\t\t\tif (attrFilter.hasOwnProperty(event) && hasCallback(val)) {\n\t\t\t\tel.addEventListener(event.substring(2).toLowerCase(), getCallback(val), {\n\t\t\t\t\tpassive: dataset.hasOwnProperty('aegisEventPassive'),\n\t\t\t\t\tcapture: dataset.hasOwnProperty('aegisEventCapture'),\n\t\t\t\t\tonce: dataset.hasOwnProperty('aegisEventOnce'),\n\t\t\t\t\tsignal: dataset.hasOwnProperty('aegisEventSignal') ? getSignal(dataset.aegisEventSignal) : signal,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch(err) {\n\t\t\treportError(err);\n\t\t}\n\t}\n}\n\nconst observer = new MutationObserver(records => {\n\trecords.forEach(record => {\n\t\tswitch(record.type) {\n\t\t\tcase 'childList':\n\t\t\t\t[...record.addedNodes]\n\t\t\t\t\t.filter(node => node.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t.forEach(node => attachListeners(node));\n\t\t\t\tbreak;\n\n\t\t\tcase 'attributes':\n\t\t\t\tif (typeof record.oldValue === 'string' && hasCallback(record.oldValue)) {\n\t\t\t\t\trecord.target.removeEventListener(\n\t\t\t\t\t\trecord.attributeName.substring(EVENT_PREFIX_LENGTH),\n\t\t\t\t\t\tgetCallback(record.oldValue), {\n\t\t\t\t\t\t\tonce: record.target.hasAttribute(once),\n\t\t\t\t\t\t\tcapture: record.target.hasAttribute(capture),\n\t\t\t\t\t\t\tpassive: record.target.hasAttribute(passive),\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trecord.target.hasAttribute(record.attributeName)\n\t\t\t\t\t&& hasCallback(record.target.getAttribute(record.attributeName))\n\t\t\t\t) {\n\t\t\t\t\trecord.target.addEventListener(\n\t\t\t\t\t\trecord.attributeName.substring(EVENT_PREFIX_LENGTH),\n\t\t\t\t\t\tgetCallback(record.target.getAttribute(record.attributeName)), {\n\t\t\t\t\t\t\tonce: record.target.hasAttribute(once),\n\t\t\t\t\t\t\tcapture: record.target.hasAttribute(capture),\n\t\t\t\t\t\t\tpassive: record.target.hasAttribute(passive),\n\t\t\t\t\t\t\tsignal: record.target.hasAttribute(signal) ? getSignal(record.target.getAttribute(signal)) : undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n});\n\nexport const EVENTS = {\n\tonAbort,\n\tonBlur,\n\tonFocus,\n\tonCancel,\n\tonAuxclick,\n\tonBeforeinput,\n\tonBeforetoggle,\n\tonCanplay,\n\tonCanplaythrough,\n\tonChange,\n\tonClick,\n\tonClose,\n\tonCommand,\n\tonContextmenu,\n\tonCopy,\n\tonCuechange,\n\tonCut,\n\tonDblclick,\n\tonDrag,\n\tonDragend,\n\tonDragenter,\n\tonDragexit,\n\tonDragleave,\n\tonDragover,\n\tonDragstart,\n\tonDrop,\n\tonDurationchange,\n\tonEmptied,\n\tonEnded,\n\tonFormdata,\n\tonInput,\n\tonInvalid,\n\tonKeydown,\n\tonKeypress,\n\tonKeyup,\n\tonLoad,\n\tonLoadeddata,\n\tonLoadedmetadata,\n\tonLoadstart,\n\tonMousedown,\n\tonMouseenter,\n\tonMouseleave,\n\tonMousemove,\n\tonMouseout,\n\tonMouseover,\n\tonMouseup,\n\tonWheel,\n\tonPaste,\n\tonPause,\n\tonPlay,\n\tonPlaying,\n\tonProgress,\n\tonRatechange,\n\tonReset,\n\tonResize,\n\tonScroll,\n\tonScrollend,\n\tonSecuritypolicyviolation,\n\tonSeeked,\n\tonSeeking,\n\tonSelect,\n\tonSlotchange,\n\tonStalled,\n\tonSubmit,\n\tonSuspend,\n\tonTimeupdate,\n\tonVolumechange,\n\tonWaiting,\n\tonSelectstart,\n\tonSelectionchange,\n\tonToggle,\n\tonPointercancel,\n\tonPointerdown,\n\tonPointerup,\n\tonPointermove,\n\tonPointerout,\n\tonPointerover,\n\tonPointerenter,\n\tonPointerleave,\n\tonGotpointercapture,\n\tonLostpointercapture,\n\tonMozfullscreenchange,\n\tonMozfullscreenerror,\n\tonAnimationcancel,\n\tonAnimationend,\n\tonAnimationiteration,\n\tonAnimationstart,\n\tonTransitioncancel,\n\tonTransitionend,\n\tonTransitionrun,\n\tonTransitionstart,\n\tonWebkitanimationend,\n\tonWebkitanimationiteration,\n\tonWebkitanimationstart,\n\tonWebkittransitionend,\n\tonError,\n\tonce,\n\tpassive,\n\tcapture,\n};\n\n/**\n * Register an attribute to observe for adding/removing event listeners\n *\n * @param {string} attr Name of the attribute to observe\n * @param {object} options\n * @param {boolean} [options.addListeners=false] Whether or not to automatically add listeners\n * @param {Document|Element} [options.base=document.body] Root node to observe\n * @param {AbortSignal} [options.signal] An abort signal to remove any listeners when aborted\n * @returns {string} The resulting `data-*` attribute name\n */\nexport function registerEventAttribute(attr, {\n\taddListeners = false,\n\tbase = document.body,\n\tsignal,\n} = {}) {\n\tconst fullAttr = EVENT_PREFIX + attr.toLowerCase();\n\tconst attrs = eventAttrs.get();\n\n\tif (! attrs.includes(fullAttr)) {\n\t\tconst sel = `[${CSS.escape(fullAttr)}]`;\n\t\tconst prop = attrToProp(fullAttr);\n\t\teventAttrs.set([...attrs, fullAttr]);\n\t\tEVENTS[prop] = fullAttr;\n\n\t\tif (addListeners) {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tconst config = { attrFilter: { [prop]: sel }, signal };\n\t\t\t\t[base, ...base.querySelectorAll(sel)].forEach(el => _addListeners(el, config));\n\t\t\t});\n\t\t}\n\t}\n\n\treturn fullAttr;\n}\n\n/**\n * Registers an `AbortController` in the controller registry and returns the key for it\n *\n * @param {AbortController} controller\n * @returns {string} The randomly generated key with which the controller is registered\n * @throws {TypeError} If controller is not an `AbortController`\n * @throws {Error} Any `reason` if controller is already aborted\n */\nexport function registerController(controller) {\n\tif (! (controller instanceof AbortController)) {\n\t\tthrow new TypeError('Controller is not an `AbortSignal.');\n\t} else if (controller.signal.aborted) {\n\t\tthrow controller.signal.reason;\n\t} else if (typeof controller.signal[controllerSymbol] === 'string') {\n\t\treturn controller.signal[controllerSymbol];\n\t} else {\n\t\tconst key = 'aegis:event:controller:' + crypto.randomUUID();\n\t\tObject.defineProperty(controller.signal, controllerSymbol, { value: key, writable: false, enumerable: false });\n\t\tcontrollerRegistry.set(key, controller);\n\n\t\tcontroller.signal.addEventListener('abort', unregisterController, { once: true });\n\n\t\treturn key;\n\t}\n}\n\n/**\n * Removes a controller from the registry\n *\n * @param {AbortController|AbortSignal|string} key The registed key or the controller or signal it corresponds to\n * @returns {boolean} Whether or not the controller was successfully unregistered\n */\nexport function unregisterController(key) {\n\tif (key instanceof AbortController) {\n\t\treturn controllerRegistry.delete(key.signal[controllerSymbol]);\n\t} else if (key instanceof AbortSignal) {\n\t\treturn controllerRegistry.delete(key[controllerSymbol]);\n\t} else {\n\t\treturn controllerRegistry.delete(key);\n\t}\n}\n\n/**\n * Creates and registers an `AbortController` in the controller registry and returns the key for it\n *\n * @param {object} options\n * @param {AbortSignal} [options.signal] An optional `AbortSignal` to externally abort the controller with\n * @returns {string} The randomly generated key with which the controller is registered\n */\nexport function createController({ signal } = {}) {\n\tconst controller = new AbortController();\n\n\tif (signal instanceof AbortSignal) {\n\t\tsignal.addEventListener('abort', ({ target }) => controller.abort(target.reason), { signal: controller.signal});\n\t}\n\n\treturn registerController(controller);\n}\n\n/**\n * Get a registetd controller from the registry\n *\n * @param {string} key Generated key with which the controller was registered\n * @returns {AbortController|void} Any registered controller, if any\n */\nexport const getController = key => controllerRegistry.get(key);\n\nexport function abortController(key, reason) {\n\tconst controller = getController(key);\n\n\tif (! (controller instanceof AbortController)) {\n\t\treturn false;\n\t} else if (typeof reason === 'string') {\n\t\tcontroller.abort(new Error(reason));\n\t\treturn true;\n\t} else {\n\t\tcontroller.abort(reason);\n\t\treturn true;\n\t}\n}\n\n/**\n * Register an `AbortSignal` to be used in declarative HTML as a value for `data-aegis-event-signal`\n *\n * @param {AbortSignal} signal The signal to register\n * @returns {string} The registered key\n * @throws {TypeError} Thrown if not an `AbortSignal`\n */\nexport function registerSignal(signal) {\n\tif (! (signal instanceof AbortSignal)) {\n\t\tthrow new TypeError('Signal must be an `AbortSignal`.');\n\t} else if (typeof signal[signalSymbol] === 'string') {\n\t\treturn signal[signalSymbol];\n\t} else {\n\t\tconst key = 'aegis:event:signal:' + crypto.randomUUID();\n\t\tObject.defineProperty(signal, signalSymbol, { value: key, writable: false, enumerable: false });\n\t\tsignalRegistry.set(key, signal);\n\t\tsignal.addEventListener('abort', ({ target }) => unregisterSignal(target[signalSymbol]), { once: true });\n\n\t\treturn key;\n\t}\n}\n\n/**\n * Gets and `AbortSignal` from the registry\n *\n * @param {string} key The registered key for the signal\n * @returns {AbortSignal|void} The corresponding `AbortSignal`, if any\n */\nexport const getSignal = key => signalRegistry.get(key);\n\n/**\n * Removes an `AbortSignal` from the registry\n *\n * @param {AbortSignal|string} signal An `AbortSignal` or the registered key for one\n * @returns {boolean} Whether or not the signal was sucessfully unregistered\n * @throws {TypeError} Throws if `signal` is not an `AbortSignal` or the key for a registered signal\n */\nexport function unregisterSignal(signal) {\n\tif (signal instanceof AbortSignal) {\n\t\treturn signalRegistry.delete(signal[signalSymbol]);\n\t} else if (typeof signal === 'string') {\n\t\treturn signalRegistry.delete(signal);\n\t} else {\n\t\tthrow new TypeError('Signal must be an `AbortSignal` or registered key/attribute.');\n\t}\n}\n\n/**\n * Add listeners to an element and its children, matching a generated query based on registered attributes\n *\n * @param {Element|Document} target Root node to add listeners from\n * @param {object} options\n * @param {AbortSignal} [options.signal] Optional signal to remove event listeners\n * @returns {Element|Document} Returns the passed target node\n */\nexport function attachListeners(target, { signal } = {}) {\n\tconst nodes = target instanceof Element && target.matches(selector.get())\n\t\t? [target, ...target.querySelectorAll(selector.get())]\n\t\t: target.querySelectorAll(selector.get());\n\n\tnodes.forEach(el => _addListeners(el, { signal }));\n\n\treturn target;\n}\n\n/**\n * Add a node to the `MutationObserver` to observe attributes and add/remove event listeners\n *\n * @param {Document|Element} root Element to observe attributes on\n */\nexport function observeEvents(root = document) {\n\tattachListeners(root);\n\n\tobserver.observe(root, {\n\t\tsubtree: true,\n\t\tchildList:true,\n\t\tattributes: true,\n\t\tattributeOldValue: true,\n\t\tattributeFilter: eventAttrs.get(),\n\t});\n}\n\n/**\n * Disconnects the `MutationObserver`, disabling observing of all attribute changes\n *\n * @returns {void}\n */\nexport const disconnectEventsObserver = () => observer.disconnect();\n\n/**\n * Register a global error handler callback\n *\n * @param {Function} callback Callback to register as a global error handler\n * @param {EventInit} config Typical event listener config object\n */\nexport function setGlobalErrorHandler(callback, { capture, once, passive, signal } = {}) {\n\tif (callback instanceof Function) {\n\t\tglobalThis.addEventListener('error', callback, { capture, once, passive, signal });\n\t} else {\n\t\tthrow new TypeError('Callback is not a function.');\n\t}\n}\n","import {\n\teventToProp, capture as captureAttr, once as onceAttr, passive as passiveAttr, signal as signalAttr,\n\tregisterEventAttribute, hasEventAttribute, registerSignal, abortController,\n} from './events.js';\n\nlet _isRegistrationOpen = true;\n\nconst $$ = (selector, base = document) => base.querySelectorAll(selector);\n\nconst $ = (selector, base = document) => base.querySelector(selector);\n\nexport const requestFullscreen = { attr: 'data-request-fullscreen-selector', data: 'requestFullscreenSelector' };\nexport const toggleFullsceen = { attr: 'data-toggle-fullscreen-selector', data: 'toggleFullscreenSelector' };\n\nexport const FUNCS = {\n\tdebug: {\n\t\tlog: 'aegis:debug:log',\n\t\tinfo: 'aegis:debug:info',\n\t\twarn: 'aegis:debug:warn',\n\t\terror: 'aegis:debug:error',\n\t},\n\tnavigate: {\n\t\tback: 'aegis:navigate:back',\n\t\tforward: 'aegis:navigate:forward',\n\t\treload: 'aegis:navigate:reload',\n\t\tclose: 'aegis:navigate:close',\n\t\tlink: 'aegis:navigate:go',\n\t\tpopup: 'aegis:navigate:popup',\n\t},\n\tui: {\n\t\tcommand: 'aegis:ui:command',\n\t\tprint: 'aegis:ui:print',\n\t\tremove: 'aegis:ui:remove',\n\t\thide: 'aegis:ui:hide',\n\t\tunhide: 'aegis:ui:unhide',\n\t\tshowModal: 'aegis:ui:showModal',\n\t\tcloseModal: 'aegis:ui:closeModal',\n\t\tshowPopover: 'aegis:ui:showPopover',\n\t\thidePopover: 'aegis:ui:hidePopover',\n\t\ttogglePopover: 'aegis:ui:togglePopover',\n\t\tenable: 'aegis:ui:enable',\n\t\tdisable: 'aegis:ui:disable',\n\t\tscrollTo: 'aegis:ui:scrollTo',\n\t\tprevent: 'aegis:ui:prevent',\n\t\trevokeObjectURL: 'aegis:ui:revokeObjectURL',\n\t\tcancelAnimationFrame: 'aegis:ui:cancelAnimationFrame',\n\t\tclearInterval: 'aegis:clearInterval',\n\t\tclearTimeout: 'aegis:clearTimeout',\n\t\trequestFullscreen: 'aegis:ui:requestFullscreen',\n\t\ttoggleFullscreen: 'aegis:ui:toggleFullsceen',\n\t\texitFullsceen: 'aegis:ui:exitFullscreen',\n\t\topen: 'aegis:ui:open',\n\t\tclose: 'aegis:ui:close',\n\t\tabortController: 'aegis:ui:controller:abort',\n\t},\n};\n\n/**\n * @type {Map<string, function>}\n */\nconst registry = new Map([\n\t[FUNCS.debug.log, console.log],\n\t[FUNCS.debug.warn, console.warn],\n\t[FUNCS.debug.error, console.error],\n\t[FUNCS.debug.info, console.info],\n\t[FUNCS.navigate.back, () => history.back()],\n\t[FUNCS.navigate.forward, () => history.forward()],\n\t[FUNCS.navigate.reload, () => history.go(0)],\n\t[FUNCS.navigate.close, () => globalThis.close()],\n\t[FUNCS.navigate.link, event => {\n\t\tif (event.isTrusted) {\n\t\t\tevent.preventDefault();\n\t\t\tlocation.href = event.currentTarget.dataset.url;\n\t\t}\n\t}],\n\t[FUNCS.navigate.popup, event => {\n\t\tif (event.isTrusted) {\n\t\t\tevent.preventDefault();\n\t\t\tglobalThis.open(event.currentTarget.dataset.url);\n\t\t}\n\t}],\n\t[FUNCS.ui.hide, ({ currentTarget }) => {\n\t\t$$(currentTarget.dataset.hideSelector).forEach(el => el.hidden = true);\n\t}],\n\t[FUNCS.ui.unhide, ({ currentTarget }) => {\n\t\t$$(currentTarget.dataset.unhideSelector).forEach(el => el.hidden = false);\n\t}],\n\t[FUNCS.ui.disable, ({ currentTarget }) => {\n\t\t$$(currentTarget.dataset.disableSelector).forEach(el => el.disabled = true);\n\t}],\n\t[FUNCS.ui.enable, ({ currentTarget }) => {\n\t\t$$(currentTarget.dataset.enableSelector).forEach(el => el.disabled = false);\n\t}],\n\t[FUNCS.ui.remove, ({ currentTarget }) => {\n\t\t$$(currentTarget.dataset.removeSelector).forEach(el => el.remove());\n\t}],\n\t[FUNCS.ui.scrollTo, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.scrollToSelector);\n\n\t\tif (target instanceof Element) {\n\t\t\ttarget.scrollIntoView({\n\t\t\t\tbehavior: matchMedia('(prefers-reduced-motion: reduce)').matches\n\t\t\t\t\t? 'instant'\n\t\t\t\t\t: 'smooth',\n\t\t\t});\n\t\t}\n\t}],\n\t[FUNCS.ui.revokeObjectURL, ({ currentTarget }) => URL.revokeObjectURL(currentTarget.src)],\n\t[FUNCS.ui.cancelAnimationFrame, ({ currentTarget }) => cancelAnimationFrame(parseInt(currentTarget.dataset.animationFrame))],\n\t[FUNCS.ui.clearInterval, ({ currentTarget }) => clearInterval(parseInt(currentTarget.dataset.clearInterval))],\n\t[FUNCS.ui.clearTimeout, ({ currentTarget }) => clearTimeout(parseInt(currentTarget.dataset.timeout))],\n\t[FUNCS.ui.abortController, ({ currentTarget }) => abortController(currentTarget.dataset.aegisEventController, currentTarget.dataset.aegisControllerReason)],\n\t[FUNCS.ui.open, ({ currentTarget }) => document.querySelector(currentTarget.dataset.openSelector).open = true],\n\t[FUNCS.ui.close, ({ currentTarget }) => document.querySelector(currentTarget.dataset.closeSelector).open = false],\n\t[FUNCS.ui.showModal, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.showModalSelector);\n\n\t\tif (target instanceof HTMLDialogElement) {\n\t\t\ttarget.showModal();\n\t\t}\n\t}],\n\t[FUNCS.ui.closeModal, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.closeModalSelector);\n\n\t\tif (target instanceof HTMLDialogElement) {\n\t\t\ttarget.close();\n\t\t}\n\t}],\n\t[FUNCS.ui.showPopover, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.showPopoverSelector);\n\n\t\tif (target instanceof HTMLElement) {\n\t\t\ttarget.showPopover();\n\t\t}\n\t}],\n\t[FUNCS.ui.hidePopover, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.hidePopoverSelector);\n\n\t\tif (target instanceof HTMLElement) {\n\t\t\ttarget.hidePopover();\n\t\t}\n\t}],\n\t[FUNCS.ui.togglePopover, ({ currentTarget }) => {\n\t\tconst target = $(currentTarget.dataset.togglePopoverSelector);\n\n\t\tif (target instanceof HTMLElement) {\n\t\t\ttarget.togglePopover();\n\t\t}\n\t}],\n\t[FUNCS.ui.print, () => globalThis.print()],\n\t[FUNCS.ui.prevent, event => event.preventDefault()],\n\t[FUNCS.ui.requestFullscreen, ({ currentTarget}) => {\n\t\tif (currentTarget.dataset.hasOwnProperty(requestFullscreen.data)) {\n\t\t\tdocument.getElementById(currentTarget.dataset[requestFullscreen.data]).requestFullscreen();\n\t\t} else {\n\t\t\tcurrentTarget.requestFullscreen();\n\t\t}\n\t}],\n\t[FUNCS.ui.toggleFullscreen, ({ currentTarget }) => {\n\t\tconst target = currentTarget.dataset.hasOwnProperty(toggleFullsceen.data)\n\t\t\t? document.getElementById(currentTarget.dataset[toggleFullsceen.data])\n\t\t\t: currentTarget;\n\n\t\tif (target.isSameNode(document.fullscreenElement)) {\n\t\t\tdocument.exitFullscreen();\n\t\t} else {\n\t\t\ttarget.requestFullscreen();\n\t\t}\n\t}],\n\t[FUNCS.ui.exitFullsceen, () => document.exitFullscreen()],\n]);\n\nexport class CallbackRegistryKey extends String {\n\t[Symbol.dispose]() {\n\t\tregistry.delete(this.toString());\n\t}\n}\n\n/**\n * Check if callback registry is open\n *\n * @returns {boolean} Whether or not callback registry is open\n */\nexport const isRegistrationOpen = () => _isRegistrationOpen;\n\n/**\n * Close callback registry\n *\n * @returns {boolean} Whether or not the callback was succesfully removed\n */\nexport const closeRegistration = () => _isRegistrationOpen = false;\n\n/**\n * Get an array of registered callbacks\n *\n * @returns {Array} A frozen array listing keys to all registered callbacks\n */\nexport const listCallbacks = () => Object.freeze(Array.from(registry.keys()));\n\n/**\n * Check if a callback is registered\n *\n * @param {CallbackRegistryKey|string} name The name/key to check for in callback registry\n * @returns {boolean} Whether or not a callback is registered\n */\nexport const hasCallback = name => registry.has(name?.toString());\n\n/**\n * Get a callback from the registry by name/key\n *\n * @param {CallbackRegistryKey|string} name The name/key of the callback to get\n * @returns {Function|undefined} The corresponding function registered under that name/key\n */\nexport const getCallback = name => registry.get(name?.toString());\n\n/**\n *\t Remove a callback from the registry\n *\n * @param {CallbackRegistryKey|string} name The name/key of the callback to get\n * @returns {boolean} Whether or not the callback was successfully unregisterd\n */\nexport const unregisterCallback = name => _isRegistrationOpen && registry.delete(name?.toString());\n\n/**\n * Remove all callbacks from the registry\n *\n * @returns {void}\n */\nexport const clearRegistry = () => registry.clear();\n\n/**\n * Create a registered callback with a randomly generated name\n *\n * @param {Function} callback Callback function to register\n * @param {object} [config]\n * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering.\n * @returns {CallbackRegistryKey} The automatically generated key/name of the registered callback\n */\nexport const createCallback = (callback, { stack } = {}) => registerCallback('aegis:callback:' + crypto.randomUUID(), callback, { stack });\n\n/**\n * Call a callback fromt the registry by name/key\n *\n * @param {CallbackRegistryKey|string} name The name/key of the registered function\n * @param {...any} args Any arguments to pass along to the function\n * @returns {any} Whatever the return value of the function is\n * @throws {Error} Throws if callback is not found or any error resulting from calling the function\n */\nexport function callCallback(name, ...args) {\n\tif (registry.has(name?.toString())) {\n\t\treturn registry.get(name?.toString()).apply(this || globalThis, args);\n\t} else {\n\t\tthrow new Error(`No ${name} function registered.`);\n\t}\n}\n\n/**\n * Register a named callback in registry\n *\n * @param {CallbackRegistryKey|string} name The name/key to register the callback under\n * @param {Function} callback The callback value to register\n * @param {object} config\n * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering.\n * @returns {CallbackRegistryKey} The registered name/key\n */\nexport function registerCallback(name, callback, { stack } = {}) {\n\tif (typeof name === 'string') {\n\t\treturn registerCallback(new CallbackRegistryKey(name), callback, { stack });\n\t} else if (! (name instanceof CallbackRegistryKey)) {\n\t\tthrow new TypeError('Callback name must be a disposable string/CallbackRegistryKey.');\n\t} else if (typeof callback === 'object' && typeof callback.handleEvent === 'function') {\n\t\treturn registerCallback(name, callback.handleEvent.bind(callback), { stack });\n\t} else if (! (typeof callback === 'function' || typeof callback?.handleEvent === 'function')) {\n\t\tthrow new TypeError('Callback must be a function.');\n\t} else if (! _isRegistrationOpen) {\n\t\tthrow new TypeError('Cannot register new callbacks because registry is closed.');\n\t} else if (registry.has(name?.toString())) {\n\t\tthrow new Error(`Handler \"${name}\" is already registered.`);\n\t} else if (stack instanceof DisposableStack || stack instanceof AsyncDisposableStack) {\n\t\tconst key = stack.use(new CallbackRegistryKey(name));\n\t\tregistry.set(key.toString(), callback);\n\n\t\treturn key;\n\t} else {\n\t\tconst key = new CallbackRegistryKey(name);\n\t\tregistry.set(key.toString(), callback);\n\n\t\treturn key;\n\t}\n}\n\n/**\n * Get the host/root node of a given thing.\n *\n * @param {Event|Document|Element|ShadowRoot} target Source thing to search for host of\n * @returns {Document|Element|null} The host/root node, or null\n */\nexport function getHost(target) {\n\tif (target instanceof Event) {\n\t\treturn getHost(target.currentTarget);\n\t} else if (target instanceof Document) {\n\t\treturn target;\n\t} else if (target instanceof Element) {\n\t\treturn getHost(target.getRootNode());\n\t} else if (target instanceof ShadowRoot) {\n\t\treturn target.host;\n\t} else {\n\t\treturn null;\n\t}\n}\n\nexport function on(event, callback, { capture = false, passive = false, once = false, signal, stack } = {}) {\n\tif (callback instanceof Function) {\n\t\treturn on(event, createCallback(callback, { stack }), { capture, passive, once, signal });\n\t} else if (! (callback instanceof String || typeof callback === 'string') || callback.length === 0) {\n\t\tthrow new TypeError('Callback must be a function or a registered callback string.');\n\t} else if (typeof event !== 'string' || event.length === 0) {\n\t\tthrow new TypeError('Event must be a non-empty string.');\n\t} else {\n\t\tif (! hasEventAttribute(event)) {\n\t\t\tregisterEventAttribute(event);\n\t\t}\n\n\t\tconst parts = [[eventToProp(event), callback]];\n\n\t\tif (capture) {\n\t\t\tparts.push([captureAttr, '']);\n\t\t}\n\n\t\tif (passive) {\n\t\t\tparts.push([passiveAttr, '']);\n\t\t}\n\n\t\tif (once) {\n\t\t\tparts.push([onceAttr, '']);\n\t\t}\n\n\t\tif (signal instanceof AbortSignal) {\n\t\t\tparts.push([signalAttr, registerSignal(signal)]);\n\t\t} else if (typeof signal === 'string') {\n\t\t\tparts.push([signalAttr, signal]);\n\t\t}\n\n\t\treturn parts.map(([prop, val]) => `${prop}=\"${val}\"`).join(' ');\n\t}\n}\n\nglobalThis.registry = registry;\n"],"names":["PREFIX","EVENT_PREFIX","DATA_PREFIX","signalSymbol","Symbol","controllerSymbol","signalRegistry","Map","controllerRegistry","once","passive","capture","signal","controller","onAbort","onBlur","onFocus","onCancel","onAuxclick","onBeforeinput","onBeforetoggle","onCanplay","onCanplaythrough","onChange","onClick","onClose","onCommand","onContextmenu","onCopy","onCuechange","onCut","onDblclick","onDrag","onDragend","onDragenter","onDragexit","onDragleave","onDragover","onDragstart","onDrop","onDurationchange","onEmptied","onEnded","onFormdata","onInput","onInvalid","onKeydown","onKeypress","onKeyup","onLoad","onLoadeddata","onLoadedmetadata","onLoadstart","onMousedown","onMouseenter","onMouseleave","onMousemove","onMouseout","onMouseover","onMouseup","onWheel","onPaste","onPause","onPlay","onPlaying","onProgress","onRatechange","onReset","onResize","onScroll","onScrollend","onSecuritypolicyviolation","onSeeked","onSeeking","onSelect","onSlotchange","onStalled","onSubmit","onSuspend","onTimeupdate","onVolumechange","onWaiting","onSelectstart","onSelectionchange","onToggle","onPointercancel","onPointerdown","onPointerup","onPointermove","onPointerout","onPointerover","onPointerenter","onPointerleave","onGotpointercapture","onLostpointercapture","onMozfullscreenchange","onMozfullscreenerror","onAnimationcancel","onAnimationend","onAnimationiteration","onAnimationstart","onTransitioncancel","onTransitionend","onTransitionrun","onTransitionstart","onWebkitanimationend","onWebkitanimationiteration","onWebkitanimationstart","onWebkittransitionend","onError","eventAttrs","Signal","State","selector","Computed","get","map","attr","CSS","escape","join","eventToProp","event","hasEventAttribute","includes","isEventDataAttr","name","startsWith","_addListeners","el","attrFilter","EVENTS","dataset","val","Object","entries","filter","substring","hasOwnProperty","hasCallback","addEventListener","toLowerCase","getCallback","getSignal","aegisEventSignal","err","reportError","observer","MutationObserver","records","forEach","record","type","addedNodes","node","nodeType","Node","ELEMENT_NODE","attachListeners","oldValue","target","removeEventListener","attributeName","hasAttribute","getAttribute","undefined","registerEventAttribute","addListeners","base","document","body","fullAttr","attrs","sel","prop","toUpperCase","EVENT_PREFIX_LENGTH","attrToProp","set","requestAnimationFrame","config","querySelectorAll","registerController","AbortController","aborted","reason","key","crypto","randomUUID","defineProperty","value","writable","enumerable","unregisterController","TypeError","delete","AbortSignal","createController","abort","getController","abortController","Error","registerSignal","unregisterSignal","Element","matches","observeEvents","root","observe","subtree","childList","attributes","attributeOldValue","attributeFilter","disconnectEventsObserver","disconnect","setGlobalErrorHandler","callback","Function","globalThis","_isRegistrationOpen","$$","$","querySelector","requestFullscreen","data","toggleFullsceen","FUNCS","debug","log","info","warn","error","navigate","back","forward","reload","close","link","popup","ui","command","print","remove","hide","unhide","showModal","closeModal","showPopover","hidePopover","togglePopover","enable","disable","scrollTo","prevent","revokeObjectURL","cancelAnimationFrame","clearInterval","clearTimeout","toggleFullscreen","exitFullsceen","open","registry","console","history","go","isTrusted","preventDefault","location","href","currentTarget","url","hideSelector","hidden","unhideSelector","disableSelector","disabled","enableSelector","removeSelector","scrollToSelector","scrollIntoView","behavior","matchMedia","URL","src","parseInt","animationFrame","timeout","aegisEventController","aegisControllerReason","openSelector","closeSelector","showModalSelector","HTMLDialogElement","closeModalSelector","showPopoverSelector","HTMLElement","hidePopoverSelector","togglePopoverSelector","getElementById","isSameNode","fullscreenElement","exitFullscreen","CallbackRegistryKey","String","dispose","this","toString","isRegistrationOpen","closeRegistration","listCallbacks","freeze","Array","from","keys","has","unregisterCallback","clearRegistry","clear","createCallback","stack","registerCallback","callCallback","args","apply","handleEvent","bind","DisposableStack","AsyncDisposableStack","use","getHost","Event","Document","getRootNode","ShadowRoot","host","on","length","parts","push","captureAttr","passiveAttr","onceAttr","signalAttr"],"mappings":"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"}
package/callbacks.cjs CHANGED
@@ -211,9 +211,9 @@ const eventAttrs = new signals.Signal.State([
211
211
  onError,
212
212
  ]);
213
213
 
214
- const selector = new signals.Signal.Computed(() => eventAttrs.get().map(attr => `[${CSS.escape(attr)}]`).join(', '));
215
214
 
216
215
  const attrToProp = attr => `on${attr[EVENT_PREFIX_LENGTH].toUpperCase()}${attr.substring(EVENT_PREFIX_LENGTH + 1)}`;
216
+ const selector = new signals.Signal.Computed(() => eventAttrs.get().map(attr => `[${CSS.escape(attr)}]`).join(','));
217
217
 
218
218
  const eventToProp = event => EVENT_PREFIX + event;
219
219
 
@@ -547,6 +547,8 @@ const FUNCS = {
547
547
  prevent: 'aegis:ui:prevent',
548
548
  revokeObjectURL: 'aegis:ui:revokeObjectURL',
549
549
  cancelAnimationFrame: 'aegis:ui:cancelAnimationFrame',
550
+ clearInterval: 'aegis:clearInterval',
551
+ clearTimeout: 'aegis:clearTimeout',
550
552
  requestFullscreen: 'aegis:ui:requestFullscreen',
551
553
  toggleFullscreen: 'aegis:ui:toggleFullsceen',
552
554
  exitFullsceen: 'aegis:ui:exitFullscreen',
@@ -735,7 +737,7 @@ const clearRegistry = () => registry.clear();
735
737
  * @param {Function} callback Callback function to register
736
738
  * @param {object} [config]
737
739
  * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering.
738
- * @returns {string} The automatically generated key/name of the registered callback
740
+ * @returns {CallbackRegistryKey} The automatically generated key/name of the registered callback
739
741
  */
740
742
  const createCallback = (callback, { stack } = {}) => registerCallback('aegis:callback:' + crypto.randomUUID(), callback, { stack });
741
743
 
@@ -762,14 +764,16 @@ function callCallback(name, ...args) {
762
764
  * @param {Function} callback The callback value to register
763
765
  * @param {object} config
764
766
  * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering.
765
- * @returns {string} The registered name/key
767
+ * @returns {CallbackRegistryKey} The registered name/key
766
768
  */
767
769
  function registerCallback(name, callback, { stack } = {}) {
768
770
  if (typeof name === 'string') {
769
771
  return registerCallback(new CallbackRegistryKey(name), callback, { stack });
770
- }else if (! (name instanceof CallbackRegistryKey)) {
772
+ } else if (! (name instanceof CallbackRegistryKey)) {
771
773
  throw new TypeError('Callback name must be a disposable string/CallbackRegistryKey.');
772
- } if (! (callback instanceof Function)) {
774
+ } else if (typeof callback === 'object' && typeof callback.handleEvent === 'function') {
775
+ return registerCallback(name, callback.handleEvent.bind(callback), { stack });
776
+ } else if (! (typeof callback === 'function' || typeof callback?.handleEvent === 'function')) {
773
777
  throw new TypeError('Callback must be a function.');
774
778
  } else if (! _isRegistrationOpen) {
775
779
  throw new TypeError('Cannot register new callbacks because registry is closed.');
@@ -844,6 +848,8 @@ function on(event, callback, { capture: capture$1 = false, passive: passive$1 =
844
848
  }
845
849
  }
846
850
 
851
+ globalThis.registry = registry;
852
+
847
853
  exports.CallbackRegistryKey = CallbackRegistryKey;
848
854
  exports.FUNCS = FUNCS;
849
855
  exports.callCallback = callCallback;
package/callbacks.js CHANGED
@@ -44,6 +44,8 @@ export const FUNCS = {
44
44
  prevent: 'aegis:ui:prevent',
45
45
  revokeObjectURL: 'aegis:ui:revokeObjectURL',
46
46
  cancelAnimationFrame: 'aegis:ui:cancelAnimationFrame',
47
+ clearInterval: 'aegis:clearInterval',
48
+ clearTimeout: 'aegis:clearTimeout',
47
49
  requestFullscreen: 'aegis:ui:requestFullscreen',
48
50
  toggleFullscreen: 'aegis:ui:toggleFullsceen',
49
51
  exitFullsceen: 'aegis:ui:exitFullscreen',
@@ -232,7 +234,7 @@ export const clearRegistry = () => registry.clear();
232
234
  * @param {Function} callback Callback function to register
233
235
  * @param {object} [config]
234
236
  * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering.
235
- * @returns {string} The automatically generated key/name of the registered callback
237
+ * @returns {CallbackRegistryKey} The automatically generated key/name of the registered callback
236
238
  */
237
239
  export const createCallback = (callback, { stack } = {}) => registerCallback('aegis:callback:' + crypto.randomUUID(), callback, { stack });
238
240
 
@@ -259,14 +261,16 @@ export function callCallback(name, ...args) {
259
261
  * @param {Function} callback The callback value to register
260
262
  * @param {object} config
261
263
  * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering.
262
- * @returns {string} The registered name/key
264
+ * @returns {CallbackRegistryKey} The registered name/key
263
265
  */
264
266
  export function registerCallback(name, callback, { stack } = {}) {
265
267
  if (typeof name === 'string') {
266
268
  return registerCallback(new CallbackRegistryKey(name), callback, { stack });
267
- }else if (! (name instanceof CallbackRegistryKey)) {
269
+ } else if (! (name instanceof CallbackRegistryKey)) {
268
270
  throw new TypeError('Callback name must be a disposable string/CallbackRegistryKey.');
269
- } if (! (callback instanceof Function)) {
271
+ } else if (typeof callback === 'object' && typeof callback.handleEvent === 'function') {
272
+ return registerCallback(name, callback.handleEvent.bind(callback), { stack });
273
+ } else if (! (typeof callback === 'function' || typeof callback?.handleEvent === 'function')) {
270
274
  throw new TypeError('Callback must be a function.');
271
275
  } else if (! _isRegistrationOpen) {
272
276
  throw new TypeError('Cannot register new callbacks because registry is closed.');
@@ -340,3 +344,5 @@ export function on(event, callback, { capture = false, passive = false, once = f
340
344
  return parts.map(([prop, val]) => `${prop}="${val}"`).join(' ');
341
345
  }
342
346
  }
347
+
348
+ globalThis.registry = registry;
package/events.js CHANGED
@@ -212,9 +212,9 @@ const eventAttrs = new Signal.State([
212
212
  onError,
213
213
  ]);
214
214
 
215
- const selector = new Signal.Computed(() => eventAttrs.get().map(attr => `[${CSS.escape(attr)}]`).join(', '));
216
215
 
217
216
  const attrToProp = attr => `on${attr[EVENT_PREFIX_LENGTH].toUpperCase()}${attr.substring(EVENT_PREFIX_LENGTH + 1)}`;
217
+ const selector = new Signal.Computed(() => eventAttrs.get().map(attr => `[${CSS.escape(attr)}]`).join(','));
218
218
 
219
219
  export const eventToProp = event => EVENT_PREFIX + event;
220
220
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aegisjsproject/callback-registry",
3
- "version": "2.0.1",
3
+ "version": "2.0.2",
4
4
  "description": " A callback registry for AegisJSProject",
5
5
  "keywords": [
6
6
  "aegis",
@@ -78,10 +78,10 @@
78
78
  "homepage": "https://github.com/AegisJSProject/callback-registry#readme",
79
79
  "devDependencies": {
80
80
  "@rollup/plugin-terser": "^1.0.0",
81
- "@shgysk8zer0/eslint-config": "^1.0.5",
81
+ "@shgysk8zer0/eslint-config": "^1.0.7",
82
82
  "@shgysk8zer0/polyfills": "^0.6.2",
83
- "@shgysk8zer0/rollup-import": "^2.0.2",
84
- "eslint": "^10.0.2",
83
+ "@shgysk8zer0/rollup-import": "^2.0.3",
84
+ "eslint": "^10.0.3",
85
85
  "http-server": "^14.1.1",
86
86
  "rollup": "^4.59.0"
87
87
  },