@wiggindev/utils 0.1.0

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/README.md ADDED
@@ -0,0 +1 @@
1
+ # utils
@@ -0,0 +1,8 @@
1
+ import { EventListener, EventName } from './events';
2
+ declare type DocumentEventName = EventName<DocumentEventMap>;
3
+ declare type DocumentEventListener<E extends DocumentEventName> = EventListener<DocumentEventMap, E>;
4
+ export declare const on: <E extends string>(event: E, listener: DocumentEventListener<E>) => void;
5
+ export declare const off: <E extends string>(event: E, listener: DocumentEventListener<E>) => void;
6
+ export declare const once: <E extends string>(event: E, listener: DocumentEventListener<E>) => void;
7
+ export declare const trigger: (event: string) => void;
8
+ export {};
@@ -0,0 +1,8 @@
1
+ import { EventListener, EventName } from './events';
2
+ declare type ElementEventName = EventName<HTMLElementEventMap>;
3
+ declare type ElementEventListener<E extends ElementEventName> = EventListener<HTMLElementEventMap, E>;
4
+ export declare const on: <E extends string>(element: HTMLElement, event: E, listener: ElementEventListener<E>) => void;
5
+ export declare const off: <E extends string>(element: HTMLElement, event: E, listener: ElementEventListener<E>) => void;
6
+ export declare const once: <E extends string>(element: HTMLElement, event: E, listener: ElementEventListener<E>) => void;
7
+ export declare const trigger: (element: HTMLElement, event: string) => void;
8
+ export {};
@@ -0,0 +1,5 @@
1
+ declare type EventMap = WindowEventMap | DocumentEventMap | HTMLElementEventMap;
2
+ export declare type EventName<M extends EventMap> = keyof M | (string & unknown);
3
+ export declare type EventListener<M extends EventMap, N extends EventName<M>> = (event: N extends keyof M ? M[N] : Event) => void;
4
+ export declare type DomEventListener = (event: Event) => void;
5
+ export {};
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ var n=function(n,t){document.addEventListener(n,t)},t=function(n,t){document.removeEventListener(n,t)},e=function(n,t){window.addEventListener(n,t)},o=function(n,t){window.removeEventListener(n,t)},i=function(n,t,e){n.addEventListener(t,e)},c=function(n,t,e){n.removeEventListener(t,e)};exports.events={document:{__proto__:null,on:n,off:t,once:function(e,o){n(e,function n(i){o(i),t(e,n)})},trigger:function(n){var t=new CustomEvent(n);document.dispatchEvent(t)}},window:{__proto__:null,on:e,off:o,once:function(n,t){e(n,function e(i){t(i),o(n,e)})},trigger:function(n){var t=new CustomEvent(n);window.dispatchEvent(t)}},element:{__proto__:null,on:i,off:c,once:function(n,t,e){i(n,t,function o(i){e(i),c(n,t,o)})},trigger:function(n,t){var e=new CustomEvent(t);n.dispatchEvent(e)}}};
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/document.ts","../src/window.ts","../src/element.ts","../src/index.ts"],"sourcesContent":["import { EventListener, EventName, DomEventListener } from './events';\n\ntype DocumentEventName = EventName<DocumentEventMap>;\ntype DocumentEventListener<E extends DocumentEventName> = EventListener<\n DocumentEventMap,\n E\n>;\n\nexport const on = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n document.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n document.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n const wrappedListener: DocumentEventListener<E> = e => {\n listener(e);\n off(event, wrappedListener);\n };\n on(event, wrappedListener);\n};\n\nexport const trigger = (event: string) => {\n const customEvent = new CustomEvent(event);\n document.dispatchEvent(customEvent);\n};\n","import { EventListener, EventName, DomEventListener } from './events';\n\ntype WindowEventName = EventName<WindowEventMap>;\ntype WindowEventListener<E extends WindowEventName> = EventListener<\n WindowEventMap,\n E\n>;\n\nexport const on = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n window.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n window.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n const wrappedListener: WindowEventListener<E> = e => {\n listener(e);\n off(event, wrappedListener);\n };\n on(event, wrappedListener);\n};\n\nexport const trigger = (event: string) => {\n const customEvent = new CustomEvent(event);\n window.dispatchEvent(customEvent);\n};\n","import { EventListener, EventName, DomEventListener } from './events';\n\ntype ElementEventName = EventName<HTMLElementEventMap>;\ntype ElementEventListener<E extends ElementEventName> = EventListener<\n HTMLElementEventMap,\n E\n>;\n\nexport const on = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n element.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n element.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n const wrappedListener: ElementEventListener<E> = e => {\n listener(e);\n off(element, event, wrappedListener);\n };\n on(element, event, wrappedListener);\n};\n\nexport const trigger = (element: HTMLElement, event: string) => {\n const customEvent = new CustomEvent(event);\n element.dispatchEvent(customEvent);\n};\n","import * as documentEvents from './document';\nimport * as windowEvents from './window';\nimport * as elementEvents from './element';\n\nexport const events = {\n document: documentEvents,\n window: windowEvents,\n element: elementEvents,\n};\n"],"names":["on","event","listener","document","addEventListener","off","removeEventListener","window","element","wrappedListener","e","customEvent","CustomEvent","dispatchEvent"],"mappings":"AAQO,IAAMA,EAAK,SACdC,EACAC,GAEAC,SAASC,iBAAiBH,EAAOC,IAGxBG,EAAM,SACfJ,EACAC,GAEAC,SAASG,oBAAoBL,EAAOC,ICX3BF,EAAK,SACdC,EACAC,GAEAK,OAAOH,iBAAiBH,EAAOC,IAGtBG,EAAM,SACfJ,EACAC,GAEAK,OAAOD,oBAAoBL,EAAOC,ICXzBF,EAAK,SACdQ,EACAP,EACAC,GAEAM,EAAQJ,iBAAiBH,EAAOC,IAGvBG,EAAM,SACfG,EACAP,EACAC,GAEAM,EAAQF,oBAAoBL,EAAOC,mBCjBjB,CAClBC,yCHiBgB,SAChBF,EACAC,GAMAF,EAAGC,EAJ+C,SAA5CQ,EAA4CC,GAC9CR,EAASQ,GACTL,EAAIJ,EAAOQ,cAKI,SAACR,GACpB,IAAMU,EAAc,IAAIC,YAAYX,GACpCE,SAASU,cAAcF,KG7BvBJ,uCFgBgB,SAChBN,EACAC,GAMAF,EAAGC,EAJ6C,SAA1CQ,EAA0CC,GAC5CR,EAASQ,GACTL,EAAIJ,EAAOQ,cAKI,SAACR,GACpB,IAAMU,EAAc,IAAIC,YAAYX,GACpCM,OAAOM,cAAcF,KE5BrBH,wCDiBgB,SAChBA,EACAP,EACAC,GAMAF,EAAGQ,EAASP,EAJqC,SAA3CQ,EAA2CC,GAC7CR,EAASQ,GACTL,EAAIG,EAASP,EAAOQ,cAKL,SAACD,EAAsBP,GAC1C,IAAMU,EAAc,IAAIC,YAAYX,GACpCO,EAAQK,cAAcF"}
@@ -0,0 +1,8 @@
1
+ import * as documentEvents from './document';
2
+ import * as windowEvents from './window';
3
+ import * as elementEvents from './element';
4
+ export declare const events: {
5
+ document: typeof documentEvents;
6
+ window: typeof windowEvents;
7
+ element: typeof elementEvents;
8
+ };
@@ -0,0 +1,2 @@
1
+ const e=(e,n)=>{document.addEventListener(e,n)},n=(e,n)=>{document.removeEventListener(e,n)},t=(e,n)=>{window.addEventListener(e,n)},o=(e,n)=>{window.removeEventListener(e,n)},r=(e,n,t)=>{e.addEventListener(n,t)},s=(e,n,t)=>{e.removeEventListener(n,t)},c={document:{__proto__:null,on:e,off:n,once:(t,o)=>{const r=e=>{o(e),n(t,r)};e(t,r)},trigger:e=>{const n=new CustomEvent(e);document.dispatchEvent(n)}},window:{__proto__:null,on:t,off:o,once:(e,n)=>{const r=t=>{n(t),o(e,r)};t(e,r)},trigger:e=>{const n=new CustomEvent(e);window.dispatchEvent(n)}},element:{__proto__:null,on:r,off:s,once:(e,n,t)=>{const o=r=>{t(r),s(e,n,o)};r(e,n,o)},trigger:(e,n)=>{const t=new CustomEvent(n);e.dispatchEvent(t)}}};export{c as events};
2
+ //# sourceMappingURL=index.modern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.modern.js","sources":["../src/document.ts","../src/window.ts","../src/element.ts","../src/index.ts"],"sourcesContent":["import { EventListener, EventName, DomEventListener } from './events';\n\ntype DocumentEventName = EventName<DocumentEventMap>;\ntype DocumentEventListener<E extends DocumentEventName> = EventListener<\n DocumentEventMap,\n E\n>;\n\nexport const on = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n document.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n document.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n const wrappedListener: DocumentEventListener<E> = e => {\n listener(e);\n off(event, wrappedListener);\n };\n on(event, wrappedListener);\n};\n\nexport const trigger = (event: string) => {\n const customEvent = new CustomEvent(event);\n document.dispatchEvent(customEvent);\n};\n","import { EventListener, EventName, DomEventListener } from './events';\n\ntype WindowEventName = EventName<WindowEventMap>;\ntype WindowEventListener<E extends WindowEventName> = EventListener<\n WindowEventMap,\n E\n>;\n\nexport const on = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n window.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n window.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n const wrappedListener: WindowEventListener<E> = e => {\n listener(e);\n off(event, wrappedListener);\n };\n on(event, wrappedListener);\n};\n\nexport const trigger = (event: string) => {\n const customEvent = new CustomEvent(event);\n window.dispatchEvent(customEvent);\n};\n","import { EventListener, EventName, DomEventListener } from './events';\n\ntype ElementEventName = EventName<HTMLElementEventMap>;\ntype ElementEventListener<E extends ElementEventName> = EventListener<\n HTMLElementEventMap,\n E\n>;\n\nexport const on = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n element.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n element.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n const wrappedListener: ElementEventListener<E> = e => {\n listener(e);\n off(element, event, wrappedListener);\n };\n on(element, event, wrappedListener);\n};\n\nexport const trigger = (element: HTMLElement, event: string) => {\n const customEvent = new CustomEvent(event);\n element.dispatchEvent(customEvent);\n};\n","import * as documentEvents from './document';\nimport * as windowEvents from './window';\nimport * as elementEvents from './element';\n\nexport const events = {\n document: documentEvents,\n window: windowEvents,\n element: elementEvents,\n};\n"],"names":["on","event","listener","document","addEventListener","off","removeEventListener","window","element","events","wrappedListener","e","customEvent","CustomEvent","dispatchEvent"],"mappings":"AAQO,MAAMA,EAAK,CACdC,EACAC,KAEAC,SAASC,iBAAiBH,EAAOC,IAGxBG,EAAM,CACfJ,EACAC,KAEAC,SAASG,oBAAoBL,EAAOC,ICX3BF,EAAK,CACdC,EACAC,KAEAK,OAAOH,iBAAiBH,EAAOC,IAGtBG,EAAM,CACfJ,EACAC,KAEAK,OAAOD,oBAAoBL,EAAOC,ICXzBF,EAAK,CACdQ,EACAP,EACAC,KAEAM,EAAQJ,iBAAiBH,EAAOC,IAGvBG,EAAM,CACfG,EACAP,EACAC,KAEAM,EAAQF,oBAAoBL,EAAOC,ICjB1BO,EAAS,CAClBN,yCHiBgB,CAChBF,EACAC,KAEA,MAAMQ,EAA4CC,IAC9CT,EAASS,GACTN,EAAIJ,EAAOS,IAEfV,EAAGC,EAAOS,YAGUT,IACpB,MAAMW,EAAc,IAAIC,YAAYZ,GACpCE,SAASW,cAAcF,KG7BvBL,uCFgBgB,CAChBN,EACAC,KAEA,MAAMQ,EAA0CC,IAC5CT,EAASS,GACTN,EAAIJ,EAAOS,IAEfV,EAAGC,EAAOS,YAGUT,IACpB,MAAMW,EAAc,IAAIC,YAAYZ,GACpCM,OAAOO,cAAcF,KE5BrBJ,wCDiBgB,CAChBA,EACAP,EACAC,KAEA,MAAMQ,EAA2CC,IAC7CT,EAASS,GACTN,EAAIG,EAASP,EAAOS,IAExBV,EAAGQ,EAASP,EAAOS,YAGA,CAACF,EAAsBP,KAC1C,MAAMW,EAAc,IAAIC,YAAYZ,GACpCO,EAAQM,cAAcF"}
@@ -0,0 +1,2 @@
1
+ var n=function(n,t){document.addEventListener(n,t)},t=function(n,t){document.removeEventListener(n,t)},e=function(n,t){window.addEventListener(n,t)},o=function(n,t){window.removeEventListener(n,t)},i=function(n,t,e){n.addEventListener(t,e)},c=function(n,t,e){n.removeEventListener(t,e)},u={document:{__proto__:null,on:n,off:t,once:function(e,o){n(e,function n(i){o(i),t(e,n)})},trigger:function(n){var t=new CustomEvent(n);document.dispatchEvent(t)}},window:{__proto__:null,on:e,off:o,once:function(n,t){e(n,function e(i){t(i),o(n,e)})},trigger:function(n){var t=new CustomEvent(n);window.dispatchEvent(t)}},element:{__proto__:null,on:i,off:c,once:function(n,t,e){i(n,t,function o(i){e(i),c(n,t,o)})},trigger:function(n,t){var e=new CustomEvent(t);n.dispatchEvent(e)}}};export{u as events};
2
+ //# sourceMappingURL=index.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.module.js","sources":["../src/document.ts","../src/window.ts","../src/element.ts","../src/index.ts"],"sourcesContent":["import { EventListener, EventName, DomEventListener } from './events';\n\ntype DocumentEventName = EventName<DocumentEventMap>;\ntype DocumentEventListener<E extends DocumentEventName> = EventListener<\n DocumentEventMap,\n E\n>;\n\nexport const on = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n document.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n document.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n const wrappedListener: DocumentEventListener<E> = e => {\n listener(e);\n off(event, wrappedListener);\n };\n on(event, wrappedListener);\n};\n\nexport const trigger = (event: string) => {\n const customEvent = new CustomEvent(event);\n document.dispatchEvent(customEvent);\n};\n","import { EventListener, EventName, DomEventListener } from './events';\n\ntype WindowEventName = EventName<WindowEventMap>;\ntype WindowEventListener<E extends WindowEventName> = EventListener<\n WindowEventMap,\n E\n>;\n\nexport const on = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n window.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n window.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n const wrappedListener: WindowEventListener<E> = e => {\n listener(e);\n off(event, wrappedListener);\n };\n on(event, wrappedListener);\n};\n\nexport const trigger = (event: string) => {\n const customEvent = new CustomEvent(event);\n window.dispatchEvent(customEvent);\n};\n","import { EventListener, EventName, DomEventListener } from './events';\n\ntype ElementEventName = EventName<HTMLElementEventMap>;\ntype ElementEventListener<E extends ElementEventName> = EventListener<\n HTMLElementEventMap,\n E\n>;\n\nexport const on = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n element.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n element.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n const wrappedListener: ElementEventListener<E> = e => {\n listener(e);\n off(element, event, wrappedListener);\n };\n on(element, event, wrappedListener);\n};\n\nexport const trigger = (element: HTMLElement, event: string) => {\n const customEvent = new CustomEvent(event);\n element.dispatchEvent(customEvent);\n};\n","import * as documentEvents from './document';\nimport * as windowEvents from './window';\nimport * as elementEvents from './element';\n\nexport const events = {\n document: documentEvents,\n window: windowEvents,\n element: elementEvents,\n};\n"],"names":["on","event","listener","document","addEventListener","off","removeEventListener","window","element","events","wrappedListener","e","customEvent","CustomEvent","dispatchEvent"],"mappings":"AAQO,IAAMA,EAAK,SACdC,EACAC,GAEAC,SAASC,iBAAiBH,EAAOC,IAGxBG,EAAM,SACfJ,EACAC,GAEAC,SAASG,oBAAoBL,EAAOC,ICX3BF,EAAK,SACdC,EACAC,GAEAK,OAAOH,iBAAiBH,EAAOC,IAGtBG,EAAM,SACfJ,EACAC,GAEAK,OAAOD,oBAAoBL,EAAOC,ICXzBF,EAAK,SACdQ,EACAP,EACAC,GAEAM,EAAQJ,iBAAiBH,EAAOC,IAGvBG,EAAM,SACfG,EACAP,EACAC,GAEAM,EAAQF,oBAAoBL,EAAOC,ICjB1BO,EAAS,CAClBN,yCHiBgB,SAChBF,EACAC,GAMAF,EAAGC,EAJ+C,SAA5CS,EAA4CC,GAC9CT,EAASS,GACTN,EAAIJ,EAAOS,cAKI,SAACT,GACpB,IAAMW,EAAc,IAAIC,YAAYZ,GACpCE,SAASW,cAAcF,KG7BvBL,uCFgBgB,SAChBN,EACAC,GAMAF,EAAGC,EAJ6C,SAA1CS,EAA0CC,GAC5CT,EAASS,GACTN,EAAIJ,EAAOS,cAKI,SAACT,GACpB,IAAMW,EAAc,IAAIC,YAAYZ,GACpCM,OAAOO,cAAcF,KE5BrBJ,wCDiBgB,SAChBA,EACAP,EACAC,GAMAF,EAAGQ,EAASP,EAJqC,SAA3CS,EAA2CC,GAC7CT,EAASS,GACTN,EAAIG,EAASP,EAAOS,cAKL,SAACF,EAAsBP,GAC1C,IAAMW,EAAc,IAAIC,YAAYZ,GACpCO,EAAQM,cAAcF"}
@@ -0,0 +1,2 @@
1
+ !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n||self).utils={})}(this,function(n){var e=function(n,e){document.addEventListener(n,e)},t=function(n,e){document.removeEventListener(n,e)},o=function(n,e){window.addEventListener(n,e)},i=function(n,e){window.removeEventListener(n,e)},f=function(n,e,t){n.addEventListener(e,t)},u=function(n,e,t){n.removeEventListener(e,t)};n.events={document:{__proto__:null,on:e,off:t,once:function(n,o){e(n,function e(i){o(i),t(n,e)})},trigger:function(n){var e=new CustomEvent(n);document.dispatchEvent(e)}},window:{__proto__:null,on:o,off:i,once:function(n,e){o(n,function t(o){e(o),i(n,t)})},trigger:function(n){var e=new CustomEvent(n);window.dispatchEvent(e)}},element:{__proto__:null,on:f,off:u,once:function(n,e,t){f(n,e,function o(i){t(i),u(n,e,o)})},trigger:function(n,e){var t=new CustomEvent(e);n.dispatchEvent(t)}}}});
2
+ //# sourceMappingURL=index.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.js","sources":["../src/document.ts","../src/window.ts","../src/element.ts","../src/index.ts"],"sourcesContent":["import { EventListener, EventName, DomEventListener } from './events';\n\ntype DocumentEventName = EventName<DocumentEventMap>;\ntype DocumentEventListener<E extends DocumentEventName> = EventListener<\n DocumentEventMap,\n E\n>;\n\nexport const on = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n document.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n document.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends DocumentEventName>(\n event: E,\n listener: DocumentEventListener<E>\n) => {\n const wrappedListener: DocumentEventListener<E> = e => {\n listener(e);\n off(event, wrappedListener);\n };\n on(event, wrappedListener);\n};\n\nexport const trigger = (event: string) => {\n const customEvent = new CustomEvent(event);\n document.dispatchEvent(customEvent);\n};\n","import { EventListener, EventName, DomEventListener } from './events';\n\ntype WindowEventName = EventName<WindowEventMap>;\ntype WindowEventListener<E extends WindowEventName> = EventListener<\n WindowEventMap,\n E\n>;\n\nexport const on = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n window.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n window.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends WindowEventName>(\n event: E,\n listener: WindowEventListener<E>\n) => {\n const wrappedListener: WindowEventListener<E> = e => {\n listener(e);\n off(event, wrappedListener);\n };\n on(event, wrappedListener);\n};\n\nexport const trigger = (event: string) => {\n const customEvent = new CustomEvent(event);\n window.dispatchEvent(customEvent);\n};\n","import { EventListener, EventName, DomEventListener } from './events';\n\ntype ElementEventName = EventName<HTMLElementEventMap>;\ntype ElementEventListener<E extends ElementEventName> = EventListener<\n HTMLElementEventMap,\n E\n>;\n\nexport const on = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n element.addEventListener(event, listener as DomEventListener);\n};\n\nexport const off = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n element.removeEventListener(event, listener as DomEventListener);\n};\n\nexport const once = <E extends ElementEventName>(\n element: HTMLElement,\n event: E,\n listener: ElementEventListener<E>\n) => {\n const wrappedListener: ElementEventListener<E> = e => {\n listener(e);\n off(element, event, wrappedListener);\n };\n on(element, event, wrappedListener);\n};\n\nexport const trigger = (element: HTMLElement, event: string) => {\n const customEvent = new CustomEvent(event);\n element.dispatchEvent(customEvent);\n};\n","import * as documentEvents from './document';\nimport * as windowEvents from './window';\nimport * as elementEvents from './element';\n\nexport const events = {\n document: documentEvents,\n window: windowEvents,\n element: elementEvents,\n};\n"],"names":["on","event","listener","document","addEventListener","off","removeEventListener","window","element","wrappedListener","e","customEvent","CustomEvent","dispatchEvent"],"mappings":"+NAQO,IAAMA,EAAK,SACdC,EACAC,GAEAC,SAASC,iBAAiBH,EAAOC,IAGxBG,EAAM,SACfJ,EACAC,GAEAC,SAASG,oBAAoBL,EAAOC,ICX3BF,EAAK,SACdC,EACAC,GAEAK,OAAOH,iBAAiBH,EAAOC,IAGtBG,EAAM,SACfJ,EACAC,GAEAK,OAAOD,oBAAoBL,EAAOC,ICXzBF,EAAK,SACdQ,EACAP,EACAC,GAEAM,EAAQJ,iBAAiBH,EAAOC,IAGvBG,EAAM,SACfG,EACAP,EACAC,GAEAM,EAAQF,oBAAoBL,EAAOC,aCjBjB,CAClBC,yCHiBgB,SAChBF,EACAC,GAMAF,EAAGC,EAJ+C,SAA5CQ,EAA4CC,GAC9CR,EAASQ,GACTL,EAAIJ,EAAOQ,cAKI,SAACR,GACpB,IAAMU,EAAc,IAAIC,YAAYX,GACpCE,SAASU,cAAcF,KG7BvBJ,uCFgBgB,SAChBN,EACAC,GAMAF,EAAGC,EAJ6C,SAA1CQ,EAA0CC,GAC5CR,EAASQ,GACTL,EAAIJ,EAAOQ,cAKI,SAACR,GACpB,IAAMU,EAAc,IAAIC,YAAYX,GACpCM,OAAOM,cAAcF,KE5BrBH,wCDiBgB,SAChBA,EACAP,EACAC,GAMAF,EAAGQ,EAASP,EAJqC,SAA3CQ,EAA2CC,GAC7CR,EAASQ,GACTL,EAAIG,EAASP,EAAOQ,cAKL,SAACD,EAAsBP,GAC1C,IAAMU,EAAc,IAAIC,YAAYX,GACpCO,EAAQK,cAAcF"}
@@ -0,0 +1 @@
1
+ {"program":{"fileNames":["../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es5.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2016.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2019.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2021.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2022.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.esnext.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.dom.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.dom.iterable.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.core.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.collection.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.generator.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.promise.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.object.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.string.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.intl.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.intl.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.promise.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2019.array.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2019.object.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2019.string.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.promise.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.string.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.intl.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2021.promise.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2021.string.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2021.intl.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2022.array.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2022.error.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2022.object.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2022.string.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.esnext.intl.d.ts","../src/events.ts","../src/document.ts","../src/element.ts","../src/window.ts","../src/index.ts","../.yarn/cache/@types-react-npm-18.0.9-4dccadcd56-162364dad7.zip/node_modules/@types/react/global.d.ts","../.yarn/cache/csstype-npm-3.0.11-b49897178d-95e56abfe9.zip/node_modules/csstype/index.d.ts","../.yarn/cache/@types-prop-types-npm-15.7.5-2aa48aa177-5b43b8b154.zip/node_modules/@types/prop-types/index.d.ts","../.yarn/cache/@types-scheduler-npm-0.16.2-ba3a7d8c68-b6b4dcfeae.zip/node_modules/@types/scheduler/tracing.d.ts","../.yarn/cache/@types-react-npm-18.0.9-4dccadcd56-162364dad7.zip/node_modules/@types/react/index.d.ts"],"fileInfos":[{"version":"3ac1b83264055b28c0165688fda6dfcc39001e9e7828f649299101c23ad0a0c3","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940","746d62152361558ea6d6115cf0da4dd10ede041d14882ede3568bce5dc4b4f1f","2f93dda35dafec68ec217c9ce67f0f4fbbbb030c055ac312641565ad60dd7e26","aea179452def8a6152f98f63b191b84e7cbd69b0e248c91e61fb2e52328abe8c",{"version":"72704b10d97777e15f1a581b73f88273037ef752d2e50b72287bd0a90af64fe6","affectsGlobalScope":true},{"version":"dbb73d4d99be496175cb432c74c2615f78c76f4272f1d83cba11ee0ed6dbddf0","affectsGlobalScope":true},{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"5075b36ab861c8c0c45377cb8c96270d7c65f0eeaf105d53fac6850da61f1027","affectsGlobalScope":true},{"version":"6c55633c733c8378db65ac3da7a767c3cf2cf3057f0565a9124a16a3a2019e87","affectsGlobalScope":true},{"version":"fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe","affectsGlobalScope":true},{"version":"5b0ca94ec819d68d33da516306c15297acec88efeb0ae9e2b39f71dbd9685ef7","affectsGlobalScope":true},{"version":"e8c9f4e445a489991ca1a4232667de3ac36b07ba75ea335971fbeacf2d26fe67","affectsGlobalScope":true},{"version":"34478567f8a80171f88f2f30808beb7da15eac0538ae91282dd33dce928d98ed","affectsGlobalScope":true},{"version":"6ea9ab679ea030cf46c16a711a316078e9e02619ebaf07a7fcd16964aba88f2d","affectsGlobalScope":true},{"version":"aedb8de1abb2ff1095c153854a6df7deae4a5709c37297f9d6e9948b6806fa66","affectsGlobalScope":true},{"version":"11ffe3c281f375fff9ffdde8bbec7669b4dd671905509079f866f2354a788064","affectsGlobalScope":true},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true},"cacef686def2afe3d0574d13cc559825fc5a3a7fb3127b0dc3c6e7d4d8bd60a4","c6da09702cfb2e451273c3608cb08e93b8c0ab484695377623b4eeae20fe33fc","06a69f24aa03481ab0afb585bfbd8396dfde2c7d253eb59b9a8ba7d825bea9bf","12f591cf69cd145c3d017126ce20c11c156c46367be44e03106b41f65c23ae2c","d1a029a20dc94f22fc6a82c165de484b8bcb720abb6b92eca5160d3ceb7ac0dd",{"version":"bbdf156fea2fabed31a569445835aeedcc33643d404fcbaa54541f06c109df3f","affectsGlobalScope":true},"ea0aa24a32c073b8639aa1f3130ba0add0f0f2f76b314d9ba988a5cb91d7e3c4","6a386ff939f180ae8ef064699d8b7b6e62bc2731a62d7fbf5e02589383838dea","f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",{"version":"4c4229a7fe27b87aba0b8bab7f7338bc63e74b814156ba6925b552f9bec83154","affectsGlobalScope":true}],"options":{"esModuleInterop":true,"module":99,"outDir":"./","strict":true,"target":99},"fileIdsList":[[57,58,59,60],[52],[53,54,55]],"referencedMap":[[61,1],[53,2],[54,2],[56,3],[55,2]],"exportedModulesMap":[[61,1],[53,2],[54,2],[56,3],[55,2]],"semanticDiagnosticsPerFile":[59,57,61,60,58,11,12,14,13,2,15,16,17,18,19,20,21,22,3,4,26,23,24,25,27,28,29,5,30,31,32,33,6,34,35,36,37,7,42,38,39,40,41,8,46,43,44,45,47,9,48,49,50,1,10,51,53,54,52,56,55],"affectedFilesPendingEmit":[[59,1],[57,1],[61,1],[60,1],[58,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1],[9,1],[10,1],[53,1],[54,1],[52,1],[56,1],[55,1]]},"version":"4.6.4"}
@@ -0,0 +1,8 @@
1
+ import { EventListener, EventName } from './events';
2
+ declare type WindowEventName = EventName<WindowEventMap>;
3
+ declare type WindowEventListener<E extends WindowEventName> = EventListener<WindowEventMap, E>;
4
+ export declare const on: <E extends string>(event: E, listener: WindowEventListener<E>) => void;
5
+ export declare const off: <E extends string>(event: E, listener: WindowEventListener<E>) => void;
6
+ export declare const once: <E extends string>(event: E, listener: WindowEventListener<E>) => void;
7
+ export declare const trigger: (event: string) => void;
8
+ export {};
@@ -0,0 +1,9 @@
1
+ module.exports = {
2
+ '**/*.ts': () => 'yarn tsc --noEmit',
3
+ '**/*.{ts,js}': filenames => [
4
+ `yarn eslint --fix ${filenames.join(' ')}`,
5
+ `yarn prettier --write ${filenames.join(' ')}`,
6
+ ],
7
+ '**/*.{md,json}': filenames =>
8
+ `yarn prettier --write ${filenames.join(' ')}`,
9
+ };
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@wiggindev/utils",
3
+ "description": "Various utilities that I use in my projects",
4
+ "version": "0.1.0",
5
+ "author": {
6
+ "name": "Andrew Wiggin",
7
+ "email": "andrew@wiggin.dev",
8
+ "url": "https://wiggin.dev"
9
+ },
10
+ "type": "module",
11
+ "source": "src/index.ts",
12
+ "exports": {
13
+ "require": "./dist/index.cjs",
14
+ "default": "./dist/index.modern.js"
15
+ },
16
+ "main": "dist/index.cjs",
17
+ "module": "dist/index.module.js",
18
+ "unpkg": "dist/index.umd.js",
19
+ "types": "dist/index.d.ts",
20
+ "scripts": {
21
+ "prebuild": "rimraf dist",
22
+ "build": "microbundle",
23
+ "dev": "microbundle watch",
24
+ "_postinstall": "husky install",
25
+ "prepack": "pinst --disable",
26
+ "postpack": "pinst --enable",
27
+ "lint": "tsc --noEmit && yarn eslint",
28
+ "format": "yarn eslint --fix && yarn prettier --write ."
29
+ },
30
+ "peerDependencies": {
31
+ "react": ">= 18"
32
+ },
33
+ "devDependencies": {
34
+ "@types/react": "^18.0.9",
35
+ "@typescript-eslint/eslint-plugin": "^5.23.0",
36
+ "@typescript-eslint/parser": "^5.23.0",
37
+ "eslint": "^8.15.0",
38
+ "eslint-config-prettier": "^8.5.0",
39
+ "eslint-plugin-prettier": "^4.0.0",
40
+ "eslint-plugin-react": "^7.29.4",
41
+ "husky": "^8.0.1",
42
+ "lint-staged": "^12.4.1",
43
+ "microbundle": "^0.15.0",
44
+ "pinst": "^3.0.0",
45
+ "prettier": "^2.6.2",
46
+ "rimraf": "^3.0.2",
47
+ "typescript": "^4.6.4"
48
+ },
49
+ "packageManager": "yarn@3.2.1",
50
+ "publishConfig": {
51
+ "access": "public",
52
+ "registry": "https://registry.npmjs.org/"
53
+ }
54
+ }
@@ -0,0 +1,37 @@
1
+ import { EventListener, EventName, DomEventListener } from './events';
2
+
3
+ type DocumentEventName = EventName<DocumentEventMap>;
4
+ type DocumentEventListener<E extends DocumentEventName> = EventListener<
5
+ DocumentEventMap,
6
+ E
7
+ >;
8
+
9
+ export const on = <E extends DocumentEventName>(
10
+ event: E,
11
+ listener: DocumentEventListener<E>
12
+ ) => {
13
+ document.addEventListener(event, listener as DomEventListener);
14
+ };
15
+
16
+ export const off = <E extends DocumentEventName>(
17
+ event: E,
18
+ listener: DocumentEventListener<E>
19
+ ) => {
20
+ document.removeEventListener(event, listener as DomEventListener);
21
+ };
22
+
23
+ export const once = <E extends DocumentEventName>(
24
+ event: E,
25
+ listener: DocumentEventListener<E>
26
+ ) => {
27
+ const wrappedListener: DocumentEventListener<E> = e => {
28
+ listener(e);
29
+ off(event, wrappedListener);
30
+ };
31
+ on(event, wrappedListener);
32
+ };
33
+
34
+ export const trigger = (event: string) => {
35
+ const customEvent = new CustomEvent(event);
36
+ document.dispatchEvent(customEvent);
37
+ };
package/src/element.ts ADDED
@@ -0,0 +1,40 @@
1
+ import { EventListener, EventName, DomEventListener } from './events';
2
+
3
+ type ElementEventName = EventName<HTMLElementEventMap>;
4
+ type ElementEventListener<E extends ElementEventName> = EventListener<
5
+ HTMLElementEventMap,
6
+ E
7
+ >;
8
+
9
+ export const on = <E extends ElementEventName>(
10
+ element: HTMLElement,
11
+ event: E,
12
+ listener: ElementEventListener<E>
13
+ ) => {
14
+ element.addEventListener(event, listener as DomEventListener);
15
+ };
16
+
17
+ export const off = <E extends ElementEventName>(
18
+ element: HTMLElement,
19
+ event: E,
20
+ listener: ElementEventListener<E>
21
+ ) => {
22
+ element.removeEventListener(event, listener as DomEventListener);
23
+ };
24
+
25
+ export const once = <E extends ElementEventName>(
26
+ element: HTMLElement,
27
+ event: E,
28
+ listener: ElementEventListener<E>
29
+ ) => {
30
+ const wrappedListener: ElementEventListener<E> = e => {
31
+ listener(e);
32
+ off(element, event, wrappedListener);
33
+ };
34
+ on(element, event, wrappedListener);
35
+ };
36
+
37
+ export const trigger = (element: HTMLElement, event: string) => {
38
+ const customEvent = new CustomEvent(event);
39
+ element.dispatchEvent(customEvent);
40
+ };
package/src/events.ts ADDED
@@ -0,0 +1,7 @@
1
+ type EventMap = WindowEventMap | DocumentEventMap | HTMLElementEventMap;
2
+
3
+ export type EventName<M extends EventMap> = keyof M | (string & unknown);
4
+ export type EventListener<M extends EventMap, N extends EventName<M>> = (
5
+ event: N extends keyof M ? M[N] : Event
6
+ ) => void;
7
+ export type DomEventListener = (event: Event) => void;
package/src/index.ts ADDED
@@ -0,0 +1,9 @@
1
+ import * as documentEvents from './document';
2
+ import * as windowEvents from './window';
3
+ import * as elementEvents from './element';
4
+
5
+ export const events = {
6
+ document: documentEvents,
7
+ window: windowEvents,
8
+ element: elementEvents,
9
+ };
package/src/window.ts ADDED
@@ -0,0 +1,37 @@
1
+ import { EventListener, EventName, DomEventListener } from './events';
2
+
3
+ type WindowEventName = EventName<WindowEventMap>;
4
+ type WindowEventListener<E extends WindowEventName> = EventListener<
5
+ WindowEventMap,
6
+ E
7
+ >;
8
+
9
+ export const on = <E extends WindowEventName>(
10
+ event: E,
11
+ listener: WindowEventListener<E>
12
+ ) => {
13
+ window.addEventListener(event, listener as DomEventListener);
14
+ };
15
+
16
+ export const off = <E extends WindowEventName>(
17
+ event: E,
18
+ listener: WindowEventListener<E>
19
+ ) => {
20
+ window.removeEventListener(event, listener as DomEventListener);
21
+ };
22
+
23
+ export const once = <E extends WindowEventName>(
24
+ event: E,
25
+ listener: WindowEventListener<E>
26
+ ) => {
27
+ const wrappedListener: WindowEventListener<E> = e => {
28
+ listener(e);
29
+ off(event, wrappedListener);
30
+ };
31
+ on(event, wrappedListener);
32
+ };
33
+
34
+ export const trigger = (event: string) => {
35
+ const customEvent = new CustomEvent(event);
36
+ window.dispatchEvent(customEvent);
37
+ };
package/tsconfig.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "compilerOptions": {
3
+ "outDir": "dist",
4
+ "module": "esnext",
5
+ "target": "esnext",
6
+ "lib": ["dom", "dom.iterable", "esnext"],
7
+ "allowJs": true,
8
+ "strict": true,
9
+ "forceConsistentCasingInFileNames": true,
10
+ "noEmit": true,
11
+ "esModuleInterop": true,
12
+ "moduleResolution": "node",
13
+ "resolveJsonModule": true,
14
+ "isolatedModules": true,
15
+ "incremental": true
16
+ },
17
+ "include": ["src/**/*"],
18
+ "exclude": [
19
+ "node_modules",
20
+ ".fleet",
21
+ ".yarn",
22
+ ".idea",
23
+ ".next",
24
+ ".vercel",
25
+ "dist"
26
+ ]
27
+ }