@aegisjsproject/callback-registry 1.0.2 → 1.0.3

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,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [v1.0.3] - 2025-09-29
11
+
12
+ ### Added
13
+ - Add `onCommand` to handle `CommandEvent`s
14
+ - Add `FUNCS.ui.open` and `FUNCS.ui.close` for `<details>` elements
15
+ - Add `FUNCS.ui.reques*tFullscreen` for requesting, exiting, and toggling fullscreen
16
+
10
17
  ## [v1.0.2] - 2024-11-22
11
18
 
12
19
  ### Added
@@ -27,6 +27,7 @@ const onCanplaythrough = EVENT_PREFIX + 'canplaythrough';
27
27
  const onChange = EVENT_PREFIX + 'change';
28
28
  const onClick = EVENT_PREFIX + 'click';
29
29
  const onClose = EVENT_PREFIX + 'close';
30
+ const onCommand = EVENT_PREFIX + 'command';
30
31
  const onContextmenu = EVENT_PREFIX + 'contextmenu';
31
32
  const onCopy = EVENT_PREFIX + 'copy';
32
33
  const onCuechange = EVENT_PREFIX + 'cuechange';
@@ -124,6 +125,7 @@ const eventAttrs = [
124
125
  onChange,
125
126
  onClick,
126
127
  onClose,
128
+ onCommand,
127
129
  onContextmenu,
128
130
  onCopy,
129
131
  onCuechange,
@@ -293,6 +295,7 @@ const EVENTS = {
293
295
  onChange,
294
296
  onClick,
295
297
  onClose,
298
+ onCommand,
296
299
  onContextmenu,
297
300
  onCopy,
298
301
  onCuechange,
@@ -606,6 +609,9 @@ const $$ = (selector, base = document) => base.querySelectorAll(selector);
606
609
 
607
610
  const $ = (selector, base = document) => base.querySelector(selector);
608
611
 
612
+ const requestFullscreen = { attr: 'data-request-fullscreen-selector', data: 'requestFullscreenSelector' };
613
+ const toggleFullsceen = { attr: 'data-toggle-fullscreen-selector', data: 'toggleFullscreenSelector' };
614
+
609
615
  const FUNCS = {
610
616
  debug: {
611
617
  log: 'aegis:debug:log',
@@ -622,6 +628,7 @@ const FUNCS = {
622
628
  popup: 'aegis:navigate:popup',
623
629
  },
624
630
  ui: {
631
+ command: 'aegis:ui:command',
625
632
  print: 'aegis:ui:print',
626
633
  remove: 'aegis:ui:remove',
627
634
  hide: 'aegis:ui:hide',
@@ -637,6 +644,11 @@ const FUNCS = {
637
644
  prevent: 'aegis:ui:prevent',
638
645
  revokeObjectURL: 'aegis:ui:revokeObjectURL',
639
646
  cancelAnimationFrame: 'aegis:ui:cancelAnimationFrame',
647
+ requestFullscreen: 'aegis:ui:requestFullscreen',
648
+ toggleFullscreen: 'aegis:ui:toggleFullsceen',
649
+ exitFullsceen: 'aegis:ui:exitFullscreen',
650
+ open: 'aegis:ui:open',
651
+ close: 'aegis:ui:close',
640
652
  abortController: 'aegis:ui:controller:abort',
641
653
  },
642
654
  };
@@ -693,6 +705,8 @@ const registry = new Map([
693
705
  [FUNCS.ui.clearInterval, ({ currentTarget }) => clearInterval(parseInt(currentTarget.dataset.clearInterval))],
694
706
  [FUNCS.ui.clearTimeout, ({ currentTarget }) => clearTimeout(parseInt(currentTarget.dataset.timeout))],
695
707
  [FUNCS.ui.abortController, ({ currentTarget }) => abortController(currentTarget.dataset.aegisEventController, currentTarget.dataset.aegisControllerReason)],
708
+ [FUNCS.ui.open, ({ currentTarget }) => document.querySelector(currentTarget.dataset.openSelector).open = true],
709
+ [FUNCS.ui.close, ({ currentTarget }) => document.querySelector(currentTarget.dataset.closeSelector).open = false],
696
710
  [FUNCS.ui.showModal, ({ currentTarget }) => {
697
711
  const target = $(currentTarget.dataset.showModalSelector);
698
712
 
@@ -730,6 +744,25 @@ const registry = new Map([
730
744
  }],
731
745
  [FUNCS.ui.print, () => globalThis.print()],
732
746
  [FUNCS.ui.prevent, event => event.preventDefault()],
747
+ [FUNCS.ui.requestFullscreen, ({ currentTarget}) => {
748
+ if (currentTarget.dataset.hasOwnProperty(requestFullscreen.data)) {
749
+ document.getElementById(currentTarget.dataset[requestFullscreen.data]).requestFullscreen();
750
+ } else {
751
+ currentTarget.requestFullscreen();
752
+ }
753
+ }],
754
+ [FUNCS.ui.toggleFullscreen, ({ currentTarget }) => {
755
+ const target = currentTarget.dataset.hasOwnProperty(toggleFullsceen.data)
756
+ ? document.getElementById(currentTarget.dataset[toggleFullsceen.data])
757
+ : currentTarget;
758
+
759
+ if (target.isSameNode(document.fullscreenElement)) {
760
+ document.exitFullscreen();
761
+ } else {
762
+ target.requestFullscreen();
763
+ }
764
+ }],
765
+ [FUNCS.ui.exitFullsceen, () => document.exitFullscreen()],
733
766
  ]);
734
767
 
735
768
  /**
@@ -925,6 +958,7 @@ exports.onCanplaythrough = onCanplaythrough;
925
958
  exports.onChange = onChange;
926
959
  exports.onClick = onClick;
927
960
  exports.onClose = onClose;
961
+ exports.onCommand = onCommand;
928
962
  exports.onContextmenu = onContextmenu;
929
963
  exports.onCopy = onCopy;
930
964
  exports.onCuechange = onCuechange;
@@ -1011,8 +1045,10 @@ exports.registerCallback = registerCallback;
1011
1045
  exports.registerController = registerController;
1012
1046
  exports.registerEventAttribute = registerEventAttribute;
1013
1047
  exports.registerSignal = registerSignal;
1048
+ exports.requestFullscreen = requestFullscreen;
1014
1049
  exports.setGlobalErrorHandler = setGlobalErrorHandler;
1015
1050
  exports.signal = signal;
1051
+ exports.toggleFullsceen = toggleFullsceen;
1016
1052
  exports.unregisterCallback = unregisterCallback;
1017
1053
  exports.unregisterController = unregisterController;
1018
1054
  exports.unregisterSignal = unregisterSignal;
@@ -1,2 +1,2 @@
1
- const e="data-aegis-event-",t=e+"on-",n="aegisEventOn",o=Symbol("aegis:signal"),r=Symbol("aegis:controller"),a=new Map,i=new Map,s=e+"once",l=e+"passive",c=e+"capture",u=e+"signal",g=e+"controller",d=t+"abort",p=t+"blur",b=t+"focus",h=t+"cancel",f=t+"auxclick",m=t+"beforeinput",v=t+"beforetoggle",w=t+"canplay",y=t+"canplaythrough",T=t+"change",E=t+"click",S=t+"close",k=t+"contextmenu",A=t+"copy",P=t+"cuechange",C=t+"cut",M=t+"dblclick",L=t+"drag",D=t+"dragend",O=t+"dragenter",F=t+"dragexit",I=t+"dragleave",U=t+"dragover",N=t+"dragstart",R=t+"drop",j=t+"durationchange",$=t+"emptied",x=t+"ended",z=t+"formdata",W=t+"input",q=t+"invalid",H=t+"keydown",V=t+"keypress",B=t+"keyup",K=t+"load",G=t+"loadeddata",_=t+"loadedmetadata",J=t+"loadstart",Q=t+"mousedown",X=t+"mouseenter",Y=t+"mouseleave",Z=t+"mousemove",ee=t+"mouseout",te=t+"mouseover",ne=t+"mouseup",oe=t+"wheel",re=t+"paste",ae=t+"pause",ie=t+"play",se=t+"playing",le=t+"progress",ce=t+"ratechange",ue=t+"reset",ge=t+"resize",de=t+"scroll",pe=t+"scrollend",be=t+"securitypolicyviolation",he=t+"seeked",fe=t+"seeking",me=t+"select",ve=t+"slotchange",we=t+"stalled",ye=t+"submit",Te=t+"suspend",Ee=t+"timeupdate",Se=t+"volumechange",ke=t+"waiting",Ae=t+"selectstart",Pe=t+"selectionchange",Ce=t+"toggle",Me=t+"pointercancel",Le=t+"pointerdown",De=t+"pointerup",Oe=t+"pointermove",Fe=t+"pointerout",Ie=t+"pointerover",Ue=t+"pointerenter",Ne=t+"pointerleave",Re=t+"gotpointercapture",je=t+"lostpointercapture",$e=t+"mozfullscreenchange",xe=t+"mozfullscreenerror",ze=t+"animationcancel",We=t+"animationend",qe=t+"animationiteration",He=t+"animationstart",Ve=t+"transitioncancel",Be=t+"transitionend",Ke=t+"transitionrun",Ge=t+"transitionstart",_e=t+"webkitanimationend",Je=t+"webkitanimationiteration",Qe=t+"webkitanimationstart",Xe=t+"webkittransitionend",Ye=t+"error",Ze=[d,p,b,h,f,m,v,w,y,T,E,S,k,A,P,C,M,L,D,O,F,I,U,N,R,j,$,x,z,W,q,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,he,fe,me,ve,we,ye,Te,Ee,Se,ke,Ae,Pe,Ce,Me,Le,De,Oe,Fe,Ie,Ue,Ne,Re,je,$e,xe,ze,We,qe,He,Ve,Be,Ke,Ge,_e,Je,Qe,Xe,Ye];let et=Ze.map((e=>`[${CSS.escape(e)}]`)).join(", ");const tt=e=>t+e,nt=e=>Ze.includes(t+e),ot=([e])=>e.startsWith(n);function rt(e,{signal:t,attrFilter:n=it}={}){const o=e.dataset;for(const[r,a]of Object.entries(o).filter(ot))try{const i="on"+r.substring(12);n.hasOwnProperty(i)&&Mt(a)&&e.addEventListener(i.substring(2).toLowerCase(),Lt(a),{passive:o.hasOwnProperty("aegisEventPassive"),capture:o.hasOwnProperty("aegisEventCapture"),once:o.hasOwnProperty("aegisEventOnce"),signal:o.hasOwnProperty("aegisEventSignal")?bt(o.aegisEventSignal):t})}catch(e){reportError(e)}}const at=new MutationObserver((e=>{e.forEach((e=>{switch(e.type){case"childList":[...e.addedNodes].filter((e=>e.nodeType===Node.ELEMENT_NODE)).forEach((e=>ft(e)));break;case"attributes":"string"==typeof e.oldValue&&Mt(e.oldValue)&&e.target.removeEventListener(e.attributeName.substring(20),Lt(e.oldValue),{once:e.target.hasAttribute(s),capture:e.target.hasAttribute(c),passive:e.target.hasAttribute(l)}),e.target.hasAttribute(e.attributeName)&&Mt(e.target.getAttribute(e.attributeName))&&e.target.addEventListener(e.attributeName.substring(20),Lt(e.target.getAttribute(e.attributeName)),{once:e.target.hasAttribute(s),capture:e.target.hasAttribute(c),passive:e.target.hasAttribute(l),signal:e.target.hasAttribute(u)?bt(e.target.getAttribute(u)):void 0})}}))})),it={onAbort:d,onBlur:p,onFocus:b,onCancel:h,onAuxclick:f,onBeforeinput:m,onBeforetoggle:v,onCanplay:w,onCanplaythrough:y,onChange:T,onClick:E,onClose:S,onContextmenu:k,onCopy:A,onCuechange:P,onCut:C,onDblclick:M,onDrag:L,onDragend:D,onDragenter:O,onDragexit:F,onDragleave:I,onDragover:U,onDragstart:N,onDrop:R,onDurationchange:j,onEmptied:$,onEnded:x,onFormdata:z,onInput:W,onInvalid:q,onKeydown:H,onKeypress:V,onKeyup:B,onLoad:K,onLoadeddata:G,onLoadedmetadata:_,onLoadstart:J,onMousedown:Q,onMouseenter:X,onMouseleave:Y,onMousemove:Z,onMouseout:ee,onMouseover:te,onMouseup:ne,onWheel:oe,onPaste:re,onPause:ae,onPlay:ie,onPlaying:se,onProgress:le,onRatechange:ce,onReset:ue,onResize:ge,onScroll:de,onScrollend:pe,onSecuritypolicyviolation:be,onSeeked:he,onSeeking:fe,onSelect:me,onSlotchange:ve,onStalled:we,onSubmit:ye,onSuspend:Te,onTimeupdate:Ee,onVolumechange:Se,onWaiting:ke,onSelectstart:Ae,onSelectionchange:Pe,onToggle:Ce,onPointercancel:Me,onPointerdown:Le,onPointerup:De,onPointermove:Oe,onPointerout:Fe,onPointerover:Ie,onPointerenter:Ue,onPointerleave:Ne,onGotpointercapture:Re,onLostpointercapture:je,onMozfullscreenchange:$e,onMozfullscreenerror:xe,onAnimationcancel:ze,onAnimationend:We,onAnimationiteration:qe,onAnimationstart:He,onTransitioncancel:Ve,onTransitionend:Be,onTransitionrun:Ke,onTransitionstart:Ge,onWebkitanimationend:_e,onWebkitanimationiteration:Je,onWebkitanimationstart:Qe,onWebkittransitionend:Xe,onError:Ye,once:s,passive:l,capture:c};function st(e,{addListeners:n=!1,base:o=document.body,signal:r}={}){const a=t+e.toLowerCase();if(!Ze.includes(a)){const e=`[${CSS.escape(a)}]`,t=(e=>`on${e[20].toUpperCase()}${e.substring(21)}`)(a);Ze.push(a),it[t]=a,et+=`, ${e}`,n&&requestAnimationFrame((()=>{const n={attrFilter:{[t]:e},signal:r};[o,...o.querySelectorAll(e)].forEach((e=>rt(e,n)))}))}return a}function lt(e){if(e instanceof AbortController){if(e.signal.aborted)throw e.signal.reason;if("string"==typeof e.signal[r])return e.signal[r];{const t="aegis:event:controller:"+crypto.randomUUID();return Object.defineProperty(e.signal,r,{value:t,writable:!1,enumerable:!1}),i.set(t,e),e.signal.addEventListener("abort",ct,{once:!0}),t}}throw new TypeError("Controller is not an `AbortSignal.")}function ct(e){return e instanceof AbortController?i.delete(e.signal[r]):e instanceof AbortSignal?i.delete(e[r]):i.delete(e)}function ut({signal:e}={}){const t=new AbortController;return e instanceof AbortSignal&&e.addEventListener("abort",(({target:e})=>t.abort(e.reason)),{signal:t.signal}),lt(t)}const gt=e=>i.get(e);function dt(e,t){const n=gt(e);return n instanceof AbortController&&("string"==typeof t?(n.abort(new Error(t)),!0):(n.abort(t),!0))}function pt(e){if(e instanceof AbortSignal){if("string"==typeof e[o])return e[o];{const t="aegis:event:signal:"+crypto.randomUUID();return Object.defineProperty(e,o,{value:t,writable:!1,enumerable:!1}),a.set(t,e),e.addEventListener("abort",(({target:e})=>ht(e[o])),{once:!0}),t}}throw new TypeError("Signal must be an `AbortSignal`.")}const bt=e=>a.get(e);function ht(e){if(e instanceof AbortSignal)return a.delete(e[o]);if("string"==typeof e)return a.delete(e);throw new TypeError("Signal must be an `AbortSignal` or registered key/attribute.")}function ft(e,{signal:t}={}){return(e instanceof Element&&e.matches(et)?[e,...e.querySelectorAll(et)]:e.querySelectorAll(et)).forEach((e=>rt(e,{signal:t}))),e}function mt(e=document){ft(e),at.observe(e,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:Ze})}const vt=()=>at.disconnect();function wt(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 yt=!0;const Tt=(e,t=document)=>t.querySelectorAll(e),Et=(e,t=document)=>t.querySelector(e),St={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:{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",abortController:"aegis:ui:controller:abort"}},kt=new Map([[St.debug.log,console.log],[St.debug.warn,console.warn],[St.debug.error,console.error],[St.debug.info,console.info],[St.navigate.back,()=>history.back()],[St.navigate.forward,()=>history.forward()],[St.navigate.reload,()=>history.go(0)],[St.navigate.close,()=>globalThis.close()],[St.navigate.link,e=>{e.isTrusted&&(e.preventDefault(),location.href=e.currentTarget.dataset.url)}],[St.navigate.popup,e=>{e.isTrusted&&(e.preventDefault(),globalThis.open(e.currentTarget.dataset.url))}],[St.ui.hide,({currentTarget:e})=>{Tt(e.dataset.hideSelector).forEach((e=>e.hidden=!0))}],[St.ui.unhide,({currentTarget:e})=>{Tt(e.dataset.unhideSelector).forEach((e=>e.hidden=!1))}],[St.ui.disable,({currentTarget:e})=>{Tt(e.dataset.disableSelector).forEach((e=>e.disabled=!0))}],[St.ui.enable,({currentTarget:e})=>{Tt(e.dataset.enableSelector).forEach((e=>e.disabled=!1))}],[St.ui.remove,({currentTarget:e})=>{Tt(e.dataset.removeSelector).forEach((e=>e.remove()))}],[St.ui.scrollTo,({currentTarget:e})=>{const t=Et(e.dataset.scrollToSelector);t instanceof Element&&t.scrollIntoView({behavior:matchMedia("(prefers-reduced-motion: reduce)").matches?"instant":"smooth"})}],[St.ui.revokeObjectURL,({currentTarget:e})=>URL.revokeObjectURL(e.src)],[St.ui.cancelAnimationFrame,({currentTarget:e})=>cancelAnimationFrame(parseInt(e.dataset.animationFrame))],[St.ui.clearInterval,({currentTarget:e})=>clearInterval(parseInt(e.dataset.clearInterval))],[St.ui.clearTimeout,({currentTarget:e})=>clearTimeout(parseInt(e.dataset.timeout))],[St.ui.abortController,({currentTarget:e})=>dt(e.dataset.aegisEventController,e.dataset.aegisControllerReason)],[St.ui.showModal,({currentTarget:e})=>{const t=Et(e.dataset.showModalSelector);t instanceof HTMLDialogElement&&t.showModal()}],[St.ui.closeModal,({currentTarget:e})=>{const t=Et(e.dataset.closeModalSelector);t instanceof HTMLDialogElement&&t.close()}],[St.ui.showPopover,({currentTarget:e})=>{const t=Et(e.dataset.showPopoverSelector);t instanceof HTMLElement&&t.showPopover()}],[St.ui.hidePopover,({currentTarget:e})=>{const t=Et(e.dataset.hidePopoverSelector);t instanceof HTMLElement&&t.hidePopover()}],[St.ui.togglePopover,({currentTarget:e})=>{const t=Et(e.dataset.togglePopoverSelector);t instanceof HTMLElement&&t.togglePopover()}],[St.ui.print,()=>globalThis.print()],[St.ui.prevent,e=>e.preventDefault()]]),At=()=>yt,Pt=()=>yt=!1,Ct=()=>Object.freeze(Array.from(kt.keys())),Mt=e=>kt.has(e),Lt=e=>kt.get(e),Dt=e=>yt&&kt.delete(e),Ot=()=>kt.clear(),Ft=e=>Ut("aegis:callback:"+crypto.randomUUID(),e);function It(e,...t){if(kt.has(e))return kt.get(e).apply(this||globalThis,t);throw new Error(`No ${e} function registered.`)}function Ut(e,t){if("string"!=typeof e||0===e.length)throw new TypeError("Callback name must be a string.");if(t instanceof Function){if(yt){if(kt.has(e))throw new Error(`Handler "${e}" is already registered.`);return kt.set(e,t),e}throw new TypeError("Cannot register new callbacks because registry is closed.")}throw new TypeError("Callback must be a function.")}function Nt(e){return e instanceof Event?Nt(e.currentTarget):e instanceof Document?e:e instanceof Element?Nt(e.getRootNode()):e instanceof ShadowRoot?e.host:null}function Rt(e,t,{capture:n=!1,passive:o=!1,once:r=!1,signal:a}={}){if(t instanceof Function)return Rt(e,Ft(t),{capture:n,passive:o,once:r,signal:a});if("string"!=typeof t||0===t.length)throw new TypeError("Callback must be a function or a registered callback string.");if("string"!=typeof e||0===e.length)throw new TypeError("Event must be a non-empty string.");{nt(e)||st(e);const i=[[tt(e),t]];return n&&i.push([c,""]),o&&i.push([l,""]),r&&i.push([s,""]),a instanceof AbortSignal?i.push([u,pt(a)]):"string"==typeof a&&i.push([u,a]),i.map((([e,t])=>`${e}="${t}"`)).join(" ")}}export{it as EVENTS,St as FUNCS,dt as abortController,ft as attachListeners,It as callCallback,c as capture,Ot as clearRegistry,Pt as closeRegistration,g as controller,Ft as createCallback,ut as createController,vt as disconnectEventsObserver,Ze as eventAttrs,tt as eventToProp,Lt as getCallback,gt as getController,Nt as getHost,bt as getSignal,Mt as hasCallback,nt as hasEventAttribute,At as isRegistrationOpen,Ct as listCallbacks,mt as observeEvents,Rt as on,d as onAbort,ze as onAnimationcancel,We as onAnimationend,qe as onAnimationiteration,He as onAnimationstart,f as onAuxclick,m as onBeforeinput,v as onBeforetoggle,p as onBlur,h as onCancel,w as onCanplay,y as onCanplaythrough,T as onChange,E as onClick,S as onClose,k as onContextmenu,A as onCopy,P as onCuechange,C as onCut,M as onDblclick,L as onDrag,D as onDragend,O as onDragenter,F as onDragexit,I as onDragleave,U as onDragover,N as onDragstart,R as onDrop,j as onDurationchange,$ as onEmptied,x as onEnded,Ye as onError,b as onFocus,z as onFormdata,Re as onGotpointercapture,W as onInput,q as onInvalid,H as onKeydown,V as onKeypress,B as onKeyup,K as onLoad,G as onLoadeddata,_ as onLoadedmetadata,J as onLoadstart,je as onLostpointercapture,Q as onMousedown,X as onMouseenter,Y as onMouseleave,Z as onMousemove,ee as onMouseout,te as onMouseover,ne as onMouseup,$e as onMozfullscreenchange,xe as onMozfullscreenerror,re as onPaste,ae as onPause,ie as onPlay,se as onPlaying,Me as onPointercancel,Le as onPointerdown,Ue as onPointerenter,Ne as onPointerleave,Oe as onPointermove,Fe as onPointerout,Ie as onPointerover,De as onPointerup,le as onProgress,ce as onRatechange,ue as onReset,ge as onResize,de as onScroll,pe as onScrollend,be as onSecuritypolicyviolation,he as onSeeked,fe as onSeeking,me as onSelect,Pe as onSelectionchange,Ae as onSelectstart,ve as onSlotchange,we as onStalled,ye as onSubmit,Te as onSuspend,Ee as onTimeupdate,Ce as onToggle,Ve as onTransitioncancel,Be as onTransitionend,Ke as onTransitionrun,Ge as onTransitionstart,Se as onVolumechange,ke as onWaiting,_e as onWebkitanimationend,Je as onWebkitanimationiteration,Qe as onWebkitanimationstart,Xe as onWebkittransitionend,oe as onWheel,s as once,l as passive,Ut as registerCallback,lt as registerController,st as registerEventAttribute,pt as registerSignal,wt as setGlobalErrorHandler,u as signal,Dt as unregisterCallback,ct as unregisterController,ht as unregisterSignal};
1
+ const e="data-aegis-event-",t=e+"on-",n="aegisEventOn",o=Symbol("aegis:signal"),r=Symbol("aegis:controller"),a=new Map,i=new Map,s=e+"once",l=e+"passive",c=e+"capture",u=e+"signal",g=e+"controller",d=t+"abort",p=t+"blur",b=t+"focus",m=t+"cancel",h=t+"auxclick",f=t+"beforeinput",v=t+"beforetoggle",y=t+"canplay",w=t+"canplaythrough",T=t+"change",E=t+"click",S=t+"close",k=t+"command",A=t+"contextmenu",P=t+"copy",C=t+"cuechange",F=t+"cut",M=t+"dblclick",L=t+"drag",D=t+"dragend",O=t+"dragenter",q=t+"dragexit",I=t+"dragleave",x=t+"dragover",N=t+"dragstart",U=t+"drop",R=t+"durationchange",j=t+"emptied",$=t+"ended",z=t+"formdata",W=t+"input",H=t+"invalid",V=t+"keydown",B=t+"keypress",K=t+"keyup",G=t+"load",_=t+"loadeddata",J=t+"loadedmetadata",Q=t+"loadstart",X=t+"mousedown",Y=t+"mouseenter",Z=t+"mouseleave",ee=t+"mousemove",te=t+"mouseout",ne=t+"mouseover",oe=t+"mouseup",re=t+"wheel",ae=t+"paste",ie=t+"pause",se=t+"play",le=t+"playing",ce=t+"progress",ue=t+"ratechange",ge=t+"reset",de=t+"resize",pe=t+"scroll",be=t+"scrollend",me=t+"securitypolicyviolation",he=t+"seeked",fe=t+"seeking",ve=t+"select",ye=t+"slotchange",we=t+"stalled",Te=t+"submit",Ee=t+"suspend",Se=t+"timeupdate",ke=t+"volumechange",Ae=t+"waiting",Pe=t+"selectstart",Ce=t+"selectionchange",Fe=t+"toggle",Me=t+"pointercancel",Le=t+"pointerdown",De=t+"pointerup",Oe=t+"pointermove",qe=t+"pointerout",Ie=t+"pointerover",xe=t+"pointerenter",Ne=t+"pointerleave",Ue=t+"gotpointercapture",Re=t+"lostpointercapture",je=t+"mozfullscreenchange",$e=t+"mozfullscreenerror",ze=t+"animationcancel",We=t+"animationend",He=t+"animationiteration",Ve=t+"animationstart",Be=t+"transitioncancel",Ke=t+"transitionend",Ge=t+"transitionrun",_e=t+"transitionstart",Je=t+"webkitanimationend",Qe=t+"webkitanimationiteration",Xe=t+"webkitanimationstart",Ye=t+"webkittransitionend",Ze=t+"error",et=[d,p,b,m,h,f,v,y,w,T,E,S,k,A,P,C,F,M,L,D,O,q,I,x,N,U,R,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,he,fe,ve,ye,we,Te,Ee,Se,ke,Ae,Pe,Ce,Fe,Me,Le,De,Oe,qe,Ie,xe,Ne,Ue,Re,je,$e,ze,We,He,Ve,Be,Ke,Ge,_e,Je,Qe,Xe,Ye,Ze];let tt=et.map((e=>`[${CSS.escape(e)}]`)).join(", ");const nt=e=>t+e,ot=e=>et.includes(t+e),rt=([e])=>e.startsWith(n);function at(e,{signal:t,attrFilter:n=st}={}){const o=e.dataset;for(const[r,a]of Object.entries(o).filter(rt))try{const i="on"+r.substring(12);n.hasOwnProperty(i)&&Dt(a)&&e.addEventListener(i.substring(2).toLowerCase(),Ot(a),{passive:o.hasOwnProperty("aegisEventPassive"),capture:o.hasOwnProperty("aegisEventCapture"),once:o.hasOwnProperty("aegisEventOnce"),signal:o.hasOwnProperty("aegisEventSignal")?mt(o.aegisEventSignal):t})}catch(e){reportError(e)}}const it=new MutationObserver((e=>{e.forEach((e=>{switch(e.type){case"childList":[...e.addedNodes].filter((e=>e.nodeType===Node.ELEMENT_NODE)).forEach((e=>ft(e)));break;case"attributes":"string"==typeof e.oldValue&&Dt(e.oldValue)&&e.target.removeEventListener(e.attributeName.substring(20),Ot(e.oldValue),{once:e.target.hasAttribute(s),capture:e.target.hasAttribute(c),passive:e.target.hasAttribute(l)}),e.target.hasAttribute(e.attributeName)&&Dt(e.target.getAttribute(e.attributeName))&&e.target.addEventListener(e.attributeName.substring(20),Ot(e.target.getAttribute(e.attributeName)),{once:e.target.hasAttribute(s),capture:e.target.hasAttribute(c),passive:e.target.hasAttribute(l),signal:e.target.hasAttribute(u)?mt(e.target.getAttribute(u)):void 0})}}))})),st={onAbort:d,onBlur:p,onFocus:b,onCancel:m,onAuxclick:h,onBeforeinput:f,onBeforetoggle:v,onCanplay:y,onCanplaythrough:w,onChange:T,onClick:E,onClose:S,onCommand:k,onContextmenu:A,onCopy:P,onCuechange:C,onCut:F,onDblclick:M,onDrag:L,onDragend:D,onDragenter:O,onDragexit:q,onDragleave:I,onDragover:x,onDragstart:N,onDrop:U,onDurationchange:R,onEmptied:j,onEnded:$,onFormdata:z,onInput:W,onInvalid:H,onKeydown:V,onKeypress:B,onKeyup:K,onLoad:G,onLoadeddata:_,onLoadedmetadata:J,onLoadstart:Q,onMousedown:X,onMouseenter:Y,onMouseleave:Z,onMousemove:ee,onMouseout:te,onMouseover:ne,onMouseup:oe,onWheel:re,onPaste:ae,onPause:ie,onPlay:se,onPlaying:le,onProgress:ce,onRatechange:ue,onReset:ge,onResize:de,onScroll:pe,onScrollend:be,onSecuritypolicyviolation:me,onSeeked:he,onSeeking:fe,onSelect:ve,onSlotchange:ye,onStalled:we,onSubmit:Te,onSuspend:Ee,onTimeupdate:Se,onVolumechange:ke,onWaiting:Ae,onSelectstart:Pe,onSelectionchange:Ce,onToggle:Fe,onPointercancel:Me,onPointerdown:Le,onPointerup:De,onPointermove:Oe,onPointerout:qe,onPointerover:Ie,onPointerenter:xe,onPointerleave:Ne,onGotpointercapture:Ue,onLostpointercapture:Re,onMozfullscreenchange:je,onMozfullscreenerror:$e,onAnimationcancel:ze,onAnimationend:We,onAnimationiteration:He,onAnimationstart:Ve,onTransitioncancel:Be,onTransitionend:Ke,onTransitionrun:Ge,onTransitionstart:_e,onWebkitanimationend:Je,onWebkitanimationiteration:Qe,onWebkitanimationstart:Xe,onWebkittransitionend:Ye,onError:Ze,once:s,passive:l,capture:c};function lt(e,{addListeners:n=!1,base:o=document.body,signal:r}={}){const a=t+e.toLowerCase();if(!et.includes(a)){const e=`[${CSS.escape(a)}]`,t=(e=>`on${e[20].toUpperCase()}${e.substring(21)}`)(a);et.push(a),st[t]=a,tt+=`, ${e}`,n&&requestAnimationFrame((()=>{const n={attrFilter:{[t]:e},signal:r};[o,...o.querySelectorAll(e)].forEach((e=>at(e,n)))}))}return a}function ct(e){if(e instanceof AbortController){if(e.signal.aborted)throw e.signal.reason;if("string"==typeof e.signal[r])return e.signal[r];{const t="aegis:event:controller:"+crypto.randomUUID();return Object.defineProperty(e.signal,r,{value:t,writable:!1,enumerable:!1}),i.set(t,e),e.signal.addEventListener("abort",ut,{once:!0}),t}}throw new TypeError("Controller is not an `AbortSignal.")}function ut(e){return e instanceof AbortController?i.delete(e.signal[r]):e instanceof AbortSignal?i.delete(e[r]):i.delete(e)}function gt({signal:e}={}){const t=new AbortController;return e instanceof AbortSignal&&e.addEventListener("abort",(({target:e})=>t.abort(e.reason)),{signal:t.signal}),ct(t)}const dt=e=>i.get(e);function pt(e,t){const n=dt(e);return n instanceof AbortController&&("string"==typeof t?(n.abort(new Error(t)),!0):(n.abort(t),!0))}function bt(e){if(e instanceof AbortSignal){if("string"==typeof e[o])return e[o];{const t="aegis:event:signal:"+crypto.randomUUID();return Object.defineProperty(e,o,{value:t,writable:!1,enumerable:!1}),a.set(t,e),e.addEventListener("abort",(({target:e})=>ht(e[o])),{once:!0}),t}}throw new TypeError("Signal must be an `AbortSignal`.")}const mt=e=>a.get(e);function ht(e){if(e instanceof AbortSignal)return a.delete(e[o]);if("string"==typeof e)return a.delete(e);throw new TypeError("Signal must be an `AbortSignal` or registered key/attribute.")}function ft(e,{signal:t}={}){return(e instanceof Element&&e.matches(tt)?[e,...e.querySelectorAll(tt)]:e.querySelectorAll(tt)).forEach((e=>at(e,{signal:t}))),e}function vt(e=document){ft(e),it.observe(e,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:et})}const yt=()=>it.disconnect();function wt(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),St=(e,t=document)=>t.querySelector(e),kt={attr:"data-request-fullscreen-selector",data:"requestFullscreenSelector"},At={attr:"data-toggle-fullscreen-selector",data:"toggleFullscreenSelector"},Pt={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"}},Ct=new Map([[Pt.debug.log,console.log],[Pt.debug.warn,console.warn],[Pt.debug.error,console.error],[Pt.debug.info,console.info],[Pt.navigate.back,()=>history.back()],[Pt.navigate.forward,()=>history.forward()],[Pt.navigate.reload,()=>history.go(0)],[Pt.navigate.close,()=>globalThis.close()],[Pt.navigate.link,e=>{e.isTrusted&&(e.preventDefault(),location.href=e.currentTarget.dataset.url)}],[Pt.navigate.popup,e=>{e.isTrusted&&(e.preventDefault(),globalThis.open(e.currentTarget.dataset.url))}],[Pt.ui.hide,({currentTarget:e})=>{Et(e.dataset.hideSelector).forEach((e=>e.hidden=!0))}],[Pt.ui.unhide,({currentTarget:e})=>{Et(e.dataset.unhideSelector).forEach((e=>e.hidden=!1))}],[Pt.ui.disable,({currentTarget:e})=>{Et(e.dataset.disableSelector).forEach((e=>e.disabled=!0))}],[Pt.ui.enable,({currentTarget:e})=>{Et(e.dataset.enableSelector).forEach((e=>e.disabled=!1))}],[Pt.ui.remove,({currentTarget:e})=>{Et(e.dataset.removeSelector).forEach((e=>e.remove()))}],[Pt.ui.scrollTo,({currentTarget:e})=>{const t=St(e.dataset.scrollToSelector);t instanceof Element&&t.scrollIntoView({behavior:matchMedia("(prefers-reduced-motion: reduce)").matches?"instant":"smooth"})}],[Pt.ui.revokeObjectURL,({currentTarget:e})=>URL.revokeObjectURL(e.src)],[Pt.ui.cancelAnimationFrame,({currentTarget:e})=>cancelAnimationFrame(parseInt(e.dataset.animationFrame))],[Pt.ui.clearInterval,({currentTarget:e})=>clearInterval(parseInt(e.dataset.clearInterval))],[Pt.ui.clearTimeout,({currentTarget:e})=>clearTimeout(parseInt(e.dataset.timeout))],[Pt.ui.abortController,({currentTarget:e})=>pt(e.dataset.aegisEventController,e.dataset.aegisControllerReason)],[Pt.ui.open,({currentTarget:e})=>document.querySelector(e.dataset.openSelector).open=!0],[Pt.ui.close,({currentTarget:e})=>document.querySelector(e.dataset.closeSelector).open=!1],[Pt.ui.showModal,({currentTarget:e})=>{const t=St(e.dataset.showModalSelector);t instanceof HTMLDialogElement&&t.showModal()}],[Pt.ui.closeModal,({currentTarget:e})=>{const t=St(e.dataset.closeModalSelector);t instanceof HTMLDialogElement&&t.close()}],[Pt.ui.showPopover,({currentTarget:e})=>{const t=St(e.dataset.showPopoverSelector);t instanceof HTMLElement&&t.showPopover()}],[Pt.ui.hidePopover,({currentTarget:e})=>{const t=St(e.dataset.hidePopoverSelector);t instanceof HTMLElement&&t.hidePopover()}],[Pt.ui.togglePopover,({currentTarget:e})=>{const t=St(e.dataset.togglePopoverSelector);t instanceof HTMLElement&&t.togglePopover()}],[Pt.ui.print,()=>globalThis.print()],[Pt.ui.prevent,e=>e.preventDefault()],[Pt.ui.requestFullscreen,({currentTarget:e})=>{e.dataset.hasOwnProperty(kt.data)?document.getElementById(e.dataset[kt.data]).requestFullscreen():e.requestFullscreen()}],[Pt.ui.toggleFullscreen,({currentTarget:e})=>{const t=e.dataset.hasOwnProperty(At.data)?document.getElementById(e.dataset[At.data]):e;t.isSameNode(document.fullscreenElement)?document.exitFullscreen():t.requestFullscreen()}],[Pt.ui.exitFullsceen,()=>document.exitFullscreen()]]),Ft=()=>Tt,Mt=()=>Tt=!1,Lt=()=>Object.freeze(Array.from(Ct.keys())),Dt=e=>Ct.has(e),Ot=e=>Ct.get(e),qt=e=>Tt&&Ct.delete(e),It=()=>Ct.clear(),xt=e=>Ut("aegis:callback:"+crypto.randomUUID(),e);function Nt(e,...t){if(Ct.has(e))return Ct.get(e).apply(this||globalThis,t);throw new Error(`No ${e} function registered.`)}function Ut(e,t){if("string"!=typeof e||0===e.length)throw new TypeError("Callback name must be a string.");if(t instanceof Function){if(Tt){if(Ct.has(e))throw new Error(`Handler "${e}" is already registered.`);return Ct.set(e,t),e}throw new TypeError("Cannot register new callbacks because registry is closed.")}throw new TypeError("Callback must be a function.")}function Rt(e){return e instanceof Event?Rt(e.currentTarget):e instanceof Document?e:e instanceof Element?Rt(e.getRootNode()):e instanceof ShadowRoot?e.host:null}function jt(e,t,{capture:n=!1,passive:o=!1,once:r=!1,signal:a}={}){if(t instanceof Function)return jt(e,xt(t),{capture:n,passive:o,once:r,signal:a});if("string"!=typeof t||0===t.length)throw new TypeError("Callback must be a function or a registered callback string.");if("string"!=typeof e||0===e.length)throw new TypeError("Event must be a non-empty string.");{ot(e)||lt(e);const i=[[nt(e),t]];return n&&i.push([c,""]),o&&i.push([l,""]),r&&i.push([s,""]),a instanceof AbortSignal?i.push([u,bt(a)]):"string"==typeof a&&i.push([u,a]),i.map((([e,t])=>`${e}="${t}"`)).join(" ")}}export{st as EVENTS,Pt as FUNCS,pt as abortController,ft as attachListeners,Nt as callCallback,c as capture,It as clearRegistry,Mt as closeRegistration,g as controller,xt as createCallback,gt as createController,yt as disconnectEventsObserver,et as eventAttrs,nt as eventToProp,Ot as getCallback,dt as getController,Rt as getHost,mt as getSignal,Dt as hasCallback,ot as hasEventAttribute,Ft as isRegistrationOpen,Lt as listCallbacks,vt as observeEvents,jt as on,d as onAbort,ze as onAnimationcancel,We as onAnimationend,He as onAnimationiteration,Ve as onAnimationstart,h as onAuxclick,f as onBeforeinput,v as onBeforetoggle,p as onBlur,m as onCancel,y as onCanplay,w as onCanplaythrough,T as onChange,E as onClick,S as onClose,k as onCommand,A as onContextmenu,P as onCopy,C as onCuechange,F as onCut,M as onDblclick,L as onDrag,D as onDragend,O as onDragenter,q as onDragexit,I as onDragleave,x as onDragover,N as onDragstart,U as onDrop,R as onDurationchange,j as onEmptied,$ as onEnded,Ze as onError,b as onFocus,z as onFormdata,Ue as onGotpointercapture,W as onInput,H as onInvalid,V as onKeydown,B as onKeypress,K as onKeyup,G as onLoad,_ as onLoadeddata,J as onLoadedmetadata,Q as onLoadstart,Re as onLostpointercapture,X as onMousedown,Y as onMouseenter,Z as onMouseleave,ee as onMousemove,te as onMouseout,ne as onMouseover,oe as onMouseup,je as onMozfullscreenchange,$e as onMozfullscreenerror,ae as onPaste,ie as onPause,se as onPlay,le as onPlaying,Me as onPointercancel,Le as onPointerdown,xe as onPointerenter,Ne as onPointerleave,Oe as onPointermove,qe as onPointerout,Ie as onPointerover,De as onPointerup,ce as onProgress,ue as onRatechange,ge as onReset,de as onResize,pe as onScroll,be as onScrollend,me as onSecuritypolicyviolation,he as onSeeked,fe as onSeeking,ve as onSelect,Ce as onSelectionchange,Pe as onSelectstart,ye as onSlotchange,we as onStalled,Te as onSubmit,Ee as onSuspend,Se as onTimeupdate,Fe as onToggle,Be as onTransitioncancel,Ke as onTransitionend,Ge as onTransitionrun,_e as onTransitionstart,ke as onVolumechange,Ae as onWaiting,Je as onWebkitanimationend,Qe as onWebkitanimationiteration,Xe as onWebkitanimationstart,Ye as onWebkittransitionend,re as onWheel,s as once,l as passive,Ut as registerCallback,ct as registerController,lt as registerEventAttribute,bt as registerSignal,kt as requestFullscreen,wt as setGlobalErrorHandler,u as signal,At as toggleFullsceen,qt as unregisterCallback,ut 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';\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 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\nexport const eventAttrs = [\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\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\nlet selector = eventAttrs.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.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\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\n\tif (! eventAttrs.includes(fullAttr)) {\n\t\tconst sel = `[${CSS.escape(fullAttr)}]`;\n\t\tconst prop = attrToProp(fullAttr);\n\t\teventAttrs.push(fullAttr);\n\t\tEVENTS[prop] = fullAttr;\n\t\tselector += `, ${sel}`;\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)\n\t\t? [target, ...target.querySelectorAll(selector)]\n\t\t: target.querySelectorAll(selector);\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,\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 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\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\tabortController: 'aegis:ui:controller:abort',\n\t},\n};\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.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]);\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 {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);\n\n/**\n * Get a callback from the registry by name/key\n *\n * @param {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);\n\n/**\n *\t Remove a callback from the registry\n *\n * @param {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);\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 * @returns {string} The automatically generated key/name of the registered callback\n */\nexport const createCallback = (callback) => registerCallback('aegis:callback:' + crypto.randomUUID(), callback);\n\n/**\n * Call a callback fromt the registry by name/key\n *\n * @param {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)) {\n\t\treturn registry.get(name).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 {string} name The name/key to register the callback under\n * @param {Function} callback The callback value to register\n * @returns {string} The registered name/key\n */\nexport function registerCallback(name, callback) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new TypeError('Callback name must be a string.');\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)) {\n\t\tthrow new Error(`Handler \"${name}\" is already registered.`);\n\t} else {\n\t\tregistry.set(name, callback);\n\t\treturn name;\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 } = {}) {\n\tif (callback instanceof Function) {\n\t\treturn on(event, createCallback(callback), { capture, passive, once, signal });\n\t} else if (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","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","selector","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","sel","prop","toUpperCase","EVENT_PREFIX_LENGTH","attrToProp","push","requestAnimationFrame","config","querySelectorAll","registerController","AbortController","aborted","reason","key","crypto","randomUUID","defineProperty","value","writable","enumerable","set","unregisterController","TypeError","delete","AbortSignal","createController","abort","getController","get","abortController","Error","registerSignal","unregisterSignal","Element","matches","observeEvents","root","observe","subtree","childList","attributes","attributeOldValue","attributeFilter","disconnectEventsObserver","disconnect","setGlobalErrorHandler","callback","Function","globalThis","_isRegistrationOpen","$$","$","querySelector","FUNCS","debug","log","info","warn","error","navigate","back","forward","reload","close","link","popup","ui","print","remove","hide","unhide","showModal","closeModal","showPopover","hidePopover","togglePopover","enable","disable","scrollTo","prevent","revokeObjectURL","cancelAnimationFrame","registry","console","history","go","isTrusted","preventDefault","location","href","currentTarget","url","open","hideSelector","hidden","unhideSelector","disableSelector","disabled","enableSelector","removeSelector","scrollToSelector","scrollIntoView","behavior","matchMedia","URL","src","parseInt","animationFrame","clearInterval","clearTimeout","timeout","aegisEventController","aegisControllerReason","showModalSelector","HTMLDialogElement","closeModalSelector","showPopoverSelector","HTMLElement","hidePopoverSelector","togglePopoverSelector","isRegistrationOpen","closeRegistration","listCallbacks","freeze","Array","from","keys","has","unregisterCallback","clearRegistry","clear","createCallback","registerCallback","callCallback","args","apply","this","length","getHost","Event","Document","getRootNode","ShadowRoot","host","on","parts","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';\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\nexport const eventAttrs = [\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\nlet selector = eventAttrs.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.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\n\tif (! eventAttrs.includes(fullAttr)) {\n\t\tconst sel = `[${CSS.escape(fullAttr)}]`;\n\t\tconst prop = attrToProp(fullAttr);\n\t\teventAttrs.push(fullAttr);\n\t\tEVENTS[prop] = fullAttr;\n\t\tselector += `, ${sel}`;\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)\n\t\t? [target, ...target.querySelectorAll(selector)]\n\t\t: target.querySelectorAll(selector);\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,\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\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\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 {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);\n\n/**\n * Get a callback from the registry by name/key\n *\n * @param {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);\n\n/**\n *\t Remove a callback from the registry\n *\n * @param {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);\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 * @returns {string} The automatically generated key/name of the registered callback\n */\nexport const createCallback = (callback) => registerCallback('aegis:callback:' + crypto.randomUUID(), callback);\n\n/**\n * Call a callback fromt the registry by name/key\n *\n * @param {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)) {\n\t\treturn registry.get(name).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 {string} name The name/key to register the callback under\n * @param {Function} callback The callback value to register\n * @returns {string} The registered name/key\n */\nexport function registerCallback(name, callback) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new TypeError('Callback name must be a string.');\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)) {\n\t\tthrow new Error(`Handler \"${name}\" is already registered.`);\n\t} else {\n\t\tregistry.set(name, callback);\n\t\treturn name;\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 } = {}) {\n\tif (callback instanceof Function) {\n\t\treturn on(event, createCallback(callback), { capture, passive, once, signal });\n\t} else if (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","selector","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","sel","prop","toUpperCase","EVENT_PREFIX_LENGTH","attrToProp","push","requestAnimationFrame","config","querySelectorAll","registerController","AbortController","aborted","reason","key","crypto","randomUUID","defineProperty","value","writable","enumerable","set","unregisterController","TypeError","delete","AbortSignal","createController","abort","getController","get","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","isRegistrationOpen","closeRegistration","listCallbacks","freeze","Array","from","keys","has","unregisterCallback","clearRegistry","clear","createCallback","registerCallback","callCallback","args","apply","this","length","getHost","Event","Document","getRootNode","ShadowRoot","host","on","parts","captureAttr","passiveAttr","onceAttr","signalAttr"],"mappings":"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WAC7DR,EAAOS,OAAOC,oBACbV,EAAOW,cAAczB,UA5PCpI,IA6PtByI,GAAYS,EAAOQ,UAAW,CAC7BlJ,KAAM0I,EAAOS,OAAOG,aAAatJ,GACjCE,QAASwI,EAAOS,OAAOG,aAAapJ,GACpCD,QAASyI,EAAOS,OAAOG,aAAarJ,KAMtCyI,EAAOS,OAAOG,aAAaZ,EAAOW,gBAC/BvB,GAAYY,EAAOS,OAAOI,aAAab,EAAOW,iBAEjDX,EAAOS,OAAOpB,iBACbW,EAAOW,cAAczB,UA1QCpI,IA2QtByI,GAAYS,EAAOS,OAAOI,aAAab,EAAOW,gBAAiB,CAC9DrJ,KAAM0I,EAAOS,OAAOG,aAAatJ,GACjCE,QAASwI,EAAOS,OAAOG,aAAapJ,GACpCD,QAASyI,EAAOS,OAAOG,aAAarJ,GACpCE,OAAQuI,EAAOS,OAAOG,aAAanJ,GAAU+H,GAAUQ,EAAOS,OAAOI,aAAapJ,SAAWqJ,IAKpG,GACG,IAGUlC,GAAS,CACrBjH,UACAC,SACAC,UACAC,WACAC,aACAC,gBACAC,iBACAC,YACAC,mBACAC,WACAC,UACAC,UACAC,YACAC,gBACAC,SACAC,cACAC,QACAC,aACAC,SACAC,YACAC,cACAC,aACAC,cACAC,aACAC,cACAC,SACAC,mBACAC,YACAC,UACAC,aACAC,UACAC,YACAC,YACAC,aACAC,UACAC,SACAC,eACAC,mBACAC,cACAC,cACAC,eACAC,eACAC,eACAC,cACAC,eACAC,aACAC,WACAC,WACAC,WACAC,UACAC,aACAC,cACAC,gBACAC,WACAC,YACAC,YACAC,eACAC,6BACAC,YACAC,aACAC,YACAC,gBACAC,aACAC,YACAC,aACAC,gBACAC,kBACAC,aACAC,iBACAC,qBACAC,YACAC,mBACAC,iBACAC,eACAC,iBACAC,gBACAC,iBACAC,kBACAC,kBACAC,uBACAC,wBACAC,yBACAC,wBACAC,qBACAC,kBACAC,wBACAC,oBACAC,sBACAC,mBACAC,mBACAC,qBACAC,wBACAC,8BACAC,0BACAC,yBACAC,WACApG,OACAC,UACAC,WAaM,SAASuJ,GAAuBjD,GAAMkD,aAC5CA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"}
package/callbacks.cjs CHANGED
@@ -25,6 +25,7 @@ const onCanplaythrough = EVENT_PREFIX + 'canplaythrough';
25
25
  const onChange = EVENT_PREFIX + 'change';
26
26
  const onClick = EVENT_PREFIX + 'click';
27
27
  const onClose = EVENT_PREFIX + 'close';
28
+ const onCommand = EVENT_PREFIX + 'command';
28
29
  const onContextmenu = EVENT_PREFIX + 'contextmenu';
29
30
  const onCopy = EVENT_PREFIX + 'copy';
30
31
  const onCuechange = EVENT_PREFIX + 'cuechange';
@@ -122,6 +123,7 @@ const eventAttrs = [
122
123
  onChange,
123
124
  onClick,
124
125
  onClose,
126
+ onCommand,
125
127
  onContextmenu,
126
128
  onCopy,
127
129
  onCuechange,
@@ -291,6 +293,7 @@ const EVENTS = {
291
293
  onChange,
292
294
  onClick,
293
295
  onClose,
296
+ onCommand,
294
297
  onContextmenu,
295
298
  onCopy,
296
299
  onCuechange,
@@ -507,6 +510,9 @@ const $$ = (selector, base = document) => base.querySelectorAll(selector);
507
510
 
508
511
  const $ = (selector, base = document) => base.querySelector(selector);
509
512
 
513
+ const requestFullscreen = { attr: 'data-request-fullscreen-selector', data: 'requestFullscreenSelector' };
514
+ const toggleFullsceen = { attr: 'data-toggle-fullscreen-selector', data: 'toggleFullscreenSelector' };
515
+
510
516
  const FUNCS = {
511
517
  debug: {
512
518
  log: 'aegis:debug:log',
@@ -523,6 +529,7 @@ const FUNCS = {
523
529
  popup: 'aegis:navigate:popup',
524
530
  },
525
531
  ui: {
532
+ command: 'aegis:ui:command',
526
533
  print: 'aegis:ui:print',
527
534
  remove: 'aegis:ui:remove',
528
535
  hide: 'aegis:ui:hide',
@@ -538,6 +545,11 @@ const FUNCS = {
538
545
  prevent: 'aegis:ui:prevent',
539
546
  revokeObjectURL: 'aegis:ui:revokeObjectURL',
540
547
  cancelAnimationFrame: 'aegis:ui:cancelAnimationFrame',
548
+ requestFullscreen: 'aegis:ui:requestFullscreen',
549
+ toggleFullscreen: 'aegis:ui:toggleFullsceen',
550
+ exitFullsceen: 'aegis:ui:exitFullscreen',
551
+ open: 'aegis:ui:open',
552
+ close: 'aegis:ui:close',
541
553
  abortController: 'aegis:ui:controller:abort',
542
554
  },
543
555
  };
@@ -594,6 +606,8 @@ const registry = new Map([
594
606
  [FUNCS.ui.clearInterval, ({ currentTarget }) => clearInterval(parseInt(currentTarget.dataset.clearInterval))],
595
607
  [FUNCS.ui.clearTimeout, ({ currentTarget }) => clearTimeout(parseInt(currentTarget.dataset.timeout))],
596
608
  [FUNCS.ui.abortController, ({ currentTarget }) => abortController(currentTarget.dataset.aegisEventController, currentTarget.dataset.aegisControllerReason)],
609
+ [FUNCS.ui.open, ({ currentTarget }) => document.querySelector(currentTarget.dataset.openSelector).open = true],
610
+ [FUNCS.ui.close, ({ currentTarget }) => document.querySelector(currentTarget.dataset.closeSelector).open = false],
597
611
  [FUNCS.ui.showModal, ({ currentTarget }) => {
598
612
  const target = $(currentTarget.dataset.showModalSelector);
599
613
 
@@ -631,6 +645,25 @@ const registry = new Map([
631
645
  }],
632
646
  [FUNCS.ui.print, () => globalThis.print()],
633
647
  [FUNCS.ui.prevent, event => event.preventDefault()],
648
+ [FUNCS.ui.requestFullscreen, ({ currentTarget}) => {
649
+ if (currentTarget.dataset.hasOwnProperty(requestFullscreen.data)) {
650
+ document.getElementById(currentTarget.dataset[requestFullscreen.data]).requestFullscreen();
651
+ } else {
652
+ currentTarget.requestFullscreen();
653
+ }
654
+ }],
655
+ [FUNCS.ui.toggleFullscreen, ({ currentTarget }) => {
656
+ const target = currentTarget.dataset.hasOwnProperty(toggleFullsceen.data)
657
+ ? document.getElementById(currentTarget.dataset[toggleFullsceen.data])
658
+ : currentTarget;
659
+
660
+ if (target.isSameNode(document.fullscreenElement)) {
661
+ document.exitFullscreen();
662
+ } else {
663
+ target.requestFullscreen();
664
+ }
665
+ }],
666
+ [FUNCS.ui.exitFullsceen, () => document.exitFullscreen()],
634
667
  ]);
635
668
 
636
669
  /**
@@ -799,4 +832,6 @@ exports.isRegistrationOpen = isRegistrationOpen;
799
832
  exports.listCallbacks = listCallbacks;
800
833
  exports.on = on;
801
834
  exports.registerCallback = registerCallback;
835
+ exports.requestFullscreen = requestFullscreen;
836
+ exports.toggleFullsceen = toggleFullsceen;
802
837
  exports.unregisterCallback = unregisterCallback;
package/callbacks.js CHANGED
@@ -9,6 +9,9 @@ const $$ = (selector, base = document) => base.querySelectorAll(selector);
9
9
 
10
10
  const $ = (selector, base = document) => base.querySelector(selector);
11
11
 
12
+ export const requestFullscreen = { attr: 'data-request-fullscreen-selector', data: 'requestFullscreenSelector' };
13
+ export const toggleFullsceen = { attr: 'data-toggle-fullscreen-selector', data: 'toggleFullscreenSelector' };
14
+
12
15
  export const FUNCS = {
13
16
  debug: {
14
17
  log: 'aegis:debug:log',
@@ -25,6 +28,7 @@ export const FUNCS = {
25
28
  popup: 'aegis:navigate:popup',
26
29
  },
27
30
  ui: {
31
+ command: 'aegis:ui:command',
28
32
  print: 'aegis:ui:print',
29
33
  remove: 'aegis:ui:remove',
30
34
  hide: 'aegis:ui:hide',
@@ -40,6 +44,11 @@ export const FUNCS = {
40
44
  prevent: 'aegis:ui:prevent',
41
45
  revokeObjectURL: 'aegis:ui:revokeObjectURL',
42
46
  cancelAnimationFrame: 'aegis:ui:cancelAnimationFrame',
47
+ requestFullscreen: 'aegis:ui:requestFullscreen',
48
+ toggleFullscreen: 'aegis:ui:toggleFullsceen',
49
+ exitFullsceen: 'aegis:ui:exitFullscreen',
50
+ open: 'aegis:ui:open',
51
+ close: 'aegis:ui:close',
43
52
  abortController: 'aegis:ui:controller:abort',
44
53
  },
45
54
  };
@@ -96,6 +105,8 @@ const registry = new Map([
96
105
  [FUNCS.ui.clearInterval, ({ currentTarget }) => clearInterval(parseInt(currentTarget.dataset.clearInterval))],
97
106
  [FUNCS.ui.clearTimeout, ({ currentTarget }) => clearTimeout(parseInt(currentTarget.dataset.timeout))],
98
107
  [FUNCS.ui.abortController, ({ currentTarget }) => abortController(currentTarget.dataset.aegisEventController, currentTarget.dataset.aegisControllerReason)],
108
+ [FUNCS.ui.open, ({ currentTarget }) => document.querySelector(currentTarget.dataset.openSelector).open = true],
109
+ [FUNCS.ui.close, ({ currentTarget }) => document.querySelector(currentTarget.dataset.closeSelector).open = false],
99
110
  [FUNCS.ui.showModal, ({ currentTarget }) => {
100
111
  const target = $(currentTarget.dataset.showModalSelector);
101
112
 
@@ -133,6 +144,25 @@ const registry = new Map([
133
144
  }],
134
145
  [FUNCS.ui.print, () => globalThis.print()],
135
146
  [FUNCS.ui.prevent, event => event.preventDefault()],
147
+ [FUNCS.ui.requestFullscreen, ({ currentTarget}) => {
148
+ if (currentTarget.dataset.hasOwnProperty(requestFullscreen.data)) {
149
+ document.getElementById(currentTarget.dataset[requestFullscreen.data]).requestFullscreen();
150
+ } else {
151
+ currentTarget.requestFullscreen();
152
+ }
153
+ }],
154
+ [FUNCS.ui.toggleFullscreen, ({ currentTarget }) => {
155
+ const target = currentTarget.dataset.hasOwnProperty(toggleFullsceen.data)
156
+ ? document.getElementById(currentTarget.dataset[toggleFullsceen.data])
157
+ : currentTarget;
158
+
159
+ if (target.isSameNode(document.fullscreenElement)) {
160
+ document.exitFullscreen();
161
+ } else {
162
+ target.requestFullscreen();
163
+ }
164
+ }],
165
+ [FUNCS.ui.exitFullsceen, () => document.exitFullscreen()],
136
166
  ]);
137
167
 
138
168
  /**
package/events.js CHANGED
@@ -27,6 +27,7 @@ export const onCanplaythrough = EVENT_PREFIX + 'canplaythrough';
27
27
  export const onChange = EVENT_PREFIX + 'change';
28
28
  export const onClick = EVENT_PREFIX + 'click';
29
29
  export const onClose = EVENT_PREFIX + 'close';
30
+ export const onCommand = EVENT_PREFIX + 'command';
30
31
  export const onContextmenu = EVENT_PREFIX + 'contextmenu';
31
32
  export const onCopy = EVENT_PREFIX + 'copy';
32
33
  export const onCuechange = EVENT_PREFIX + 'cuechange';
@@ -124,6 +125,7 @@ export const eventAttrs = [
124
125
  onChange,
125
126
  onClick,
126
127
  onClose,
128
+ onCommand,
127
129
  onContextmenu,
128
130
  onCopy,
129
131
  onCuechange,
@@ -293,6 +295,7 @@ export const EVENTS = {
293
295
  onChange,
294
296
  onClick,
295
297
  onClose,
298
+ onCommand,
296
299
  onContextmenu,
297
300
  onCopy,
298
301
  onCuechange,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aegisjsproject/callback-registry",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": " A callback registry for AegisJSProject",
5
5
  "keywords": [
6
6
  "aegis",
@@ -78,6 +78,7 @@
78
78
  "devDependencies": {
79
79
  "@rollup/plugin-terser": "^0.4.4",
80
80
  "@shgysk8zer0/eslint-config": "^1.0.1",
81
+ "@shgysk8zer0/polyfills": "^0.4.13",
81
82
  "eslint": "^9.15.0",
82
83
  "http-server": "^14.1.1",
83
84
  "rollup": "^4.27.2"