@zero-dependency/dom 1.0.0 → 1.0.1

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 CHANGED
@@ -19,3 +19,23 @@ pnpm add @zero-dependency/dom
19
19
  ```
20
20
 
21
21
  ## Usage
22
+
23
+ ```js
24
+ import { el, observeElement, waitElement } from '@zero-dependency/dom'
25
+
26
+ // createElement
27
+ const element = el('div', { class: 'foo' }, 'Hello World')
28
+ document.body.appendChild(element)
29
+
30
+ // observeElement
31
+ observeElement(element, (mutation, observer) => {
32
+ console.log(mutation.target.textContent) // 'hello world'
33
+ observer.disconnect()
34
+ })
35
+
36
+ element.textContent = element.textContent.toLowerCase() // 'hello world'
37
+
38
+ // waitElement
39
+ const el = await waitElement('div.card')
40
+ console.log(el) // <div class="card">...</div>
41
+ ```
package/dist/html.d.ts CHANGED
@@ -7,5 +7,4 @@ export declare function text(str: string): Text;
7
7
  export declare function nbsp(): Text;
8
8
  export declare function domReady(): Promise<void>;
9
9
  export declare function isDisabled(element: HTMLElement): boolean;
10
- export declare function addEventListener(target: EventTarget, eventName: string, handler: EventListener, options?: AddEventListenerOptions): () => void;
11
10
  export {};
package/dist/index.cjs.js CHANGED
@@ -1,160 +1,2 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
-
5
- function el(tag, attributes, ...children) {
6
- const el2 = document.createElement(tag);
7
- if (typeof attributes === "string") {
8
- el2.append(text(attributes));
9
- } else if (Array.isArray(attributes)) {
10
- el2.append(...attributes);
11
- } else {
12
- Object.assign(el2, attributes);
13
- Object.assign(el2.style, attributes?.style);
14
- }
15
- if (children.length) {
16
- el2.append(...children);
17
- }
18
- return el2;
19
- }
20
- function text(str) {
21
- return document.createTextNode(str);
22
- }
23
- function nbsp() {
24
- return text(" ");
25
- }
26
- async function domReady() {
27
- return new Promise((resolve) => {
28
- if (document.readyState == "loading") {
29
- document.addEventListener("DOMContentLoaded", () => resolve(), {
30
- once: true
31
- });
32
- } else {
33
- resolve();
34
- }
35
- });
36
- }
37
- function isDisabled(element) {
38
- return Boolean(element.getAttribute("disabled")) === true || Boolean(element.getAttribute("aria-disabled")) === true;
39
- }
40
- function addEventListener(target, eventName, handler, options) {
41
- target.addEventListener(eventName, handler, options);
42
- return () => {
43
- target.removeEventListener(eventName, handler, options);
44
- };
45
- }
46
-
47
- class Emitter {
48
- #events = {};
49
- on(event, listener) {
50
- const listeners = this.#events[event];
51
- if (listeners) {
52
- listeners.push(listener);
53
- } else {
54
- this.#events[event] = [listener];
55
- }
56
- return this;
57
- }
58
- addListener(event, listener) {
59
- return this.on(event, listener);
60
- }
61
- once(event, listener) {
62
- const onceListener = (...args) => {
63
- this.off(event, onceListener);
64
- listener(...args);
65
- };
66
- this.on(event, onceListener);
67
- return this;
68
- }
69
- emit(event, ...args) {
70
- const listeners = this.#events[event] || [];
71
- for (let i = 0; i < listeners.length; i++) {
72
- listeners[i](...args);
73
- }
74
- return Boolean(listeners.length);
75
- }
76
- off(event, listener) {
77
- if (this.#events[event]) {
78
- this.#events[event] = this.#events[event].filter((v) => v !== listener);
79
- }
80
- return this;
81
- }
82
- removeListener(event, listener) {
83
- return this.off(event, listener);
84
- }
85
- removeAllListeners(event) {
86
- if (event) {
87
- delete this.#events[event];
88
- } else {
89
- this.#events = {};
90
- }
91
- return this;
92
- }
93
- eventNames() {
94
- return Reflect.ownKeys(this.#events);
95
- }
96
- listeners(event) {
97
- return this.#events[event];
98
- }
99
- listenerCount(event) {
100
- return this.#events[event]?.length ?? 0;
101
- }
102
- }
103
-
104
- class LocationObserver extends Emitter {
105
- constructor() {
106
- super();
107
- const { history, location } = window;
108
- const { pushState, replaceState } = history;
109
- history.pushState = (...args) => {
110
- pushState.apply(history, args);
111
- this.emit("pushState", location, args[0]);
112
- };
113
- history.replaceState = (...args) => {
114
- replaceState.apply(history, args);
115
- this.emit("replaceState", location, args[0]);
116
- };
117
- window.addEventListener("popstate", (event) => {
118
- this.emit("popState", location, event);
119
- });
120
- }
121
- }
122
-
123
- function observeElement(el, callback, options) {
124
- const observe = new MutationObserver((mutations, observer) => {
125
- for (const mutation of mutations) {
126
- callback(mutation, observer);
127
- }
128
- });
129
- observe.observe(el, {
130
- childList: true,
131
- subtree: true,
132
- ...options
133
- });
134
- return () => observe.disconnect();
135
- }
136
- function waitElement(selector, target = document.documentElement) {
137
- return new Promise((resolve) => {
138
- function resolveElement() {
139
- const el = target.querySelector(selector);
140
- if (el) {
141
- resolve(el);
142
- }
143
- }
144
- observeElement(target, (_, observer) => {
145
- resolveElement();
146
- observer.disconnect();
147
- });
148
- });
149
- }
150
-
151
- exports.LocationObserver = LocationObserver;
152
- exports.addEventListener = addEventListener;
153
- exports.domReady = domReady;
154
- exports.el = el;
155
- exports.isDisabled = isDisabled;
156
- exports.nbsp = nbsp;
157
- exports.observeElement = observeElement;
158
- exports.text = text;
159
- exports.waitElement = waitElement;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function l(s,e,...n){const t=document.createElement(s);return typeof e=="string"?t.append(i(e)):Array.isArray(e)?t.append(...e):(Object.assign(t,e),Object.assign(t.style,e?.style)),n.length&&t.append(...n),t}function i(s){return document.createTextNode(s)}function a(){return i(" ")}async function d(){return new Promise(s=>{document.readyState=="loading"?document.addEventListener("DOMContentLoaded",()=>s(),{once:!0}):s()})}function h(s){return!!s.getAttribute("disabled")||!!s.getAttribute("aria-disabled")}class f{#e={};on(e,n){const t=this.#e[e];return t?t.push(n):this.#e[e]=[n],this}addListener(e,n){return this.on(e,n)}once(e,n){const t=(...r)=>{this.off(e,t),n(...r)};return this.on(e,t),this}emit(e,...n){const t=this.#e[e]||[];for(let r=0;r<t.length;r++)t[r](...n);return!!t.length}off(e,n){return this.#e[e]&&(this.#e[e]=this.#e[e].filter(t=>t!==n)),this}removeListener(e,n){return this.off(e,n)}removeAllListeners(e){return e?delete this.#e[e]:this.#e={},this}eventNames(){return Reflect.ownKeys(this.#e)}listeners(e){return this.#e[e]}listenerCount(e){return this.#e[e]?.length??0}}class p extends f{constructor(){super();const{history:e,location:n}=window,{pushState:t,replaceState:r}=e;e.pushState=(...o)=>{t.apply(e,o),this.emit("pushState",n,o[0])},e.replaceState=(...o)=>{r.apply(e,o),this.emit("replaceState",n,o[0])},window.addEventListener("popstate",o=>{this.emit("popState",n,o)})}}function c(s,e,n){const t=new MutationObserver((r,o)=>{for(const u of r)e(u,o)});return t.observe(s,{childList:!0,subtree:!0,...n}),()=>t.disconnect()}function m(s,e=document.documentElement){return new Promise(n=>{function t(){const r=e.querySelector(s);r&&n(r)}c(e,(r,o)=>{t(),o.disconnect()})})}exports.LocationObserver=p;exports.domReady=d;exports.el=l;exports.isDisabled=h;exports.nbsp=a;exports.observeElement=c;exports.text=i;exports.waitElement=m;
160
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/html.ts","../../emitter/dist/index.es.js","../src/location-observer.ts","../src/mutation-observers.ts"],"sourcesContent":["// prettier-ignore\ntype Attributes<T extends keyof HTMLElementTagNameMap> = Partial<{\n style: Partial<CSSStyleDeclaration>\n} & Omit<HTMLElementTagNameMap[T], 'style'>>\n\ntype Children = (string | Node | HTMLElement)[]\n\nexport function el<T extends keyof HTMLElementTagNameMap>(\n tag: T,\n attributes?: Children | Attributes<T>,\n ...children: Children\n): HTMLElementTagNameMap[T] {\n const el = document.createElement(tag)\n\n if (typeof attributes === 'string') {\n el.append(text(attributes))\n } else if (Array.isArray(attributes)) {\n el.append(...attributes)\n } else {\n Object.assign(el, attributes)\n Object.assign(el.style, attributes?.style)\n }\n\n if (children.length) {\n el.append(...children)\n }\n\n return el\n}\n\nexport function text(str: string): Text {\n return document.createTextNode(str)\n}\n\nexport function nbsp(): Text {\n return text('\\u00a0')\n}\n\nexport async function domReady(): Promise<void> {\n return new Promise((resolve) => {\n if (document.readyState == 'loading') {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true\n })\n } else {\n resolve()\n }\n })\n}\n\nexport function isDisabled(element: HTMLElement): boolean {\n return (\n Boolean(element.getAttribute('disabled')) === true ||\n Boolean(element.getAttribute('aria-disabled')) === true\n )\n}\n\nexport function addEventListener(\n target: EventTarget,\n eventName: string,\n handler: EventListener,\n options?: AddEventListenerOptions\n) {\n target.addEventListener(eventName, handler, options)\n return () => {\n target.removeEventListener(eventName, handler, options)\n }\n}\n","class Emitter {\n #events = {};\n on(event, listener) {\n const listeners = this.#events[event];\n if (listeners) {\n listeners.push(listener);\n } else {\n this.#events[event] = [listener];\n }\n return this;\n }\n addListener(event, listener) {\n return this.on(event, listener);\n }\n once(event, listener) {\n const onceListener = (...args) => {\n this.off(event, onceListener);\n listener(...args);\n };\n this.on(event, onceListener);\n return this;\n }\n emit(event, ...args) {\n const listeners = this.#events[event] || [];\n for (let i = 0; i < listeners.length; i++) {\n listeners[i](...args);\n }\n return Boolean(listeners.length);\n }\n off(event, listener) {\n if (this.#events[event]) {\n this.#events[event] = this.#events[event].filter((v) => v !== listener);\n }\n return this;\n }\n removeListener(event, listener) {\n return this.off(event, listener);\n }\n removeAllListeners(event) {\n if (event) {\n delete this.#events[event];\n } else {\n this.#events = {};\n }\n return this;\n }\n eventNames() {\n return Reflect.ownKeys(this.#events);\n }\n listeners(event) {\n return this.#events[event];\n }\n listenerCount(event) {\n return this.#events[event]?.length ?? 0;\n }\n}\n\nexport { Emitter };\n//# sourceMappingURL=index.es.js.map\n","import { Emitter } from '@zero-dependency/emitter'\n\ntype LocationCallback<T = any> = (location: Location, args: T) => void\n\ntype Events<T> = {\n pushState: LocationCallback<T>\n replaceState: LocationCallback<T>\n popState: LocationCallback<\n Omit<PopStateEvent, 'state'> & { readonly state: T }\n >\n}\n\nexport class LocationObserver<T> extends Emitter<Events<T>> {\n constructor() {\n super()\n\n const { history, location } = window\n const { pushState, replaceState } = history\n\n history.pushState = (...args) => {\n pushState.apply(history, args)\n this.emit('pushState', location, args[0])\n }\n\n history.replaceState = (...args) => {\n replaceState.apply(history, args)\n this.emit('replaceState', location, args[0])\n }\n\n window.addEventListener('popstate', (event) => {\n this.emit('popState', location, event)\n })\n }\n}\n","type Disconnect = () => void\n\nexport function observeElement<T extends Element = Element>(\n el: T,\n callback: (mutation: MutationRecord, observer: MutationObserver) => void,\n options?: MutationObserverInit\n): Disconnect {\n const observe = new MutationObserver((mutations, observer) => {\n for (const mutation of mutations) {\n callback(mutation, observer)\n }\n })\n\n observe.observe(el, {\n childList: true,\n subtree: true,\n ...options\n })\n\n return () => observe.disconnect()\n}\n\nexport function waitElement<T extends Element = Element>(\n selector: string,\n target = document.documentElement\n): Promise<T> {\n return new Promise((resolve) => {\n function resolveElement() {\n const el = target.querySelector<T>(selector)\n if (el) {\n resolve(el)\n }\n }\n\n observeElement(target, (_, observer) => {\n resolveElement()\n observer.disconnect()\n })\n })\n}\n"],"names":["el"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/html.ts","../../emitter/dist/index.es.js","../src/location-observer.ts","../src/mutation-observers.ts"],"sourcesContent":["// prettier-ignore\ntype Attributes<T extends keyof HTMLElementTagNameMap> = Partial<{\n style: Partial<CSSStyleDeclaration>\n} & Omit<HTMLElementTagNameMap[T], 'style'>>\n\ntype Children = (string | Node | HTMLElement)[]\n\nexport function el<T extends keyof HTMLElementTagNameMap>(\n tag: T,\n attributes?: Children | Attributes<T>,\n ...children: Children\n): HTMLElementTagNameMap[T] {\n const el = document.createElement(tag)\n\n if (typeof attributes === 'string') {\n el.append(text(attributes))\n } else if (Array.isArray(attributes)) {\n el.append(...attributes)\n } else {\n Object.assign(el, attributes)\n Object.assign(el.style, attributes?.style)\n }\n\n if (children.length) {\n el.append(...children)\n }\n\n return el\n}\n\nexport function text(str: string): Text {\n return document.createTextNode(str)\n}\n\nexport function nbsp(): Text {\n return text('\\u00a0')\n}\n\nexport async function domReady(): Promise<void> {\n return new Promise((resolve) => {\n if (document.readyState == 'loading') {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true\n })\n } else {\n resolve()\n }\n })\n}\n\nexport function isDisabled(element: HTMLElement): boolean {\n return (\n Boolean(element.getAttribute('disabled')) === true ||\n Boolean(element.getAttribute('aria-disabled')) === true\n )\n}\n","class n {\n #t = {};\n on(t, e) {\n const s = this.#t[t];\n return s ? s.push(e) : this.#t[t] = [e], this;\n }\n addListener(t, e) {\n return this.on(t, e);\n }\n once(t, e) {\n const s = (...i) => {\n this.off(t, s), e(...i);\n };\n return this.on(t, s), this;\n }\n emit(t, ...e) {\n const s = this.#t[t] || [];\n for (let i = 0; i < s.length; i++)\n s[i](...e);\n return !!s.length;\n }\n off(t, e) {\n return this.#t[t] && (this.#t[t] = this.#t[t].filter((s) => s !== e)), this;\n }\n removeListener(t, e) {\n return this.off(t, e);\n }\n removeAllListeners(t) {\n return t ? delete this.#t[t] : this.#t = {}, this;\n }\n eventNames() {\n return Reflect.ownKeys(this.#t);\n }\n listeners(t) {\n return this.#t[t];\n }\n listenerCount(t) {\n return this.#t[t]?.length ?? 0;\n }\n}\nexport {\n n as Emitter\n};\n//# sourceMappingURL=index.es.js.map\n","import { Emitter } from '@zero-dependency/emitter'\n\ntype LocationCallback<T = any> = (location: Location, args: T) => void\n\ntype Events<T> = {\n pushState: LocationCallback<T>\n replaceState: LocationCallback<T>\n popState: LocationCallback<\n Omit<PopStateEvent, 'state'> & { readonly state: T }\n >\n}\n\nexport class LocationObserver<T> extends Emitter<Events<T>> {\n constructor() {\n super()\n\n const { history, location } = window\n const { pushState, replaceState } = history\n\n history.pushState = (...args) => {\n pushState.apply(history, args)\n this.emit('pushState', location, args[0])\n }\n\n history.replaceState = (...args) => {\n replaceState.apply(history, args)\n this.emit('replaceState', location, args[0])\n }\n\n window.addEventListener('popstate', (event) => {\n this.emit('popState', location, event)\n })\n }\n}\n","type Disconnect = () => void\n\nexport function observeElement<T extends Element = Element>(\n el: T,\n callback: (mutation: MutationRecord, observer: MutationObserver) => void,\n options?: MutationObserverInit\n): Disconnect {\n const observe = new MutationObserver((mutations, observer) => {\n for (const mutation of mutations) {\n callback(mutation, observer)\n }\n })\n\n observe.observe(el, {\n childList: true,\n subtree: true,\n ...options\n })\n\n return () => observe.disconnect()\n}\n\nexport function waitElement<T extends Element = Element>(\n selector: string,\n target = document.documentElement\n): Promise<T> {\n return new Promise((resolve) => {\n function resolveElement() {\n const el = target.querySelector<T>(selector)\n if (el) {\n resolve(el)\n }\n }\n\n observeElement(target, (_, observer) => {\n resolveElement()\n observer.disconnect()\n })\n })\n}\n"],"names":["el","tag","attributes","children","text","str","nbsp","domReady","resolve","isDisabled","element","n","#t","t","e","s","i","LocationObserver","Emitter","history","location","pushState","replaceState","args","event","observeElement","callback","options","observe","mutations","observer","mutation","waitElement","selector","target","resolveElement","_"],"mappings":"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"}
package/dist/index.es.js CHANGED
@@ -1,148 +1,106 @@
1
- function el(tag, attributes, ...children) {
2
- const el2 = document.createElement(tag);
3
- if (typeof attributes === "string") {
4
- el2.append(text(attributes));
5
- } else if (Array.isArray(attributes)) {
6
- el2.append(...attributes);
7
- } else {
8
- Object.assign(el2, attributes);
9
- Object.assign(el2.style, attributes?.style);
10
- }
11
- if (children.length) {
12
- el2.append(...children);
13
- }
14
- return el2;
1
+ function a(s, e, ...n) {
2
+ const t = document.createElement(s);
3
+ return typeof e == "string" ? t.append(i(e)) : Array.isArray(e) ? t.append(...e) : (Object.assign(t, e), Object.assign(t.style, e?.style)), n.length && t.append(...n), t;
15
4
  }
16
- function text(str) {
17
- return document.createTextNode(str);
5
+ function i(s) {
6
+ return document.createTextNode(s);
18
7
  }
19
- function nbsp() {
20
- return text(" ");
8
+ function d() {
9
+ return i(" ");
21
10
  }
22
- async function domReady() {
23
- return new Promise((resolve) => {
24
- if (document.readyState == "loading") {
25
- document.addEventListener("DOMContentLoaded", () => resolve(), {
26
- once: true
27
- });
28
- } else {
29
- resolve();
30
- }
11
+ async function h() {
12
+ return new Promise((s) => {
13
+ document.readyState == "loading" ? document.addEventListener("DOMContentLoaded", () => s(), {
14
+ once: !0
15
+ }) : s();
31
16
  });
32
17
  }
33
- function isDisabled(element) {
34
- return Boolean(element.getAttribute("disabled")) === true || Boolean(element.getAttribute("aria-disabled")) === true;
18
+ function f(s) {
19
+ return !!s.getAttribute("disabled") || !!s.getAttribute("aria-disabled");
35
20
  }
36
- function addEventListener(target, eventName, handler, options) {
37
- target.addEventListener(eventName, handler, options);
38
- return () => {
39
- target.removeEventListener(eventName, handler, options);
40
- };
41
- }
42
-
43
- class Emitter {
44
- #events = {};
45
- on(event, listener) {
46
- const listeners = this.#events[event];
47
- if (listeners) {
48
- listeners.push(listener);
49
- } else {
50
- this.#events[event] = [listener];
51
- }
52
- return this;
21
+ class u {
22
+ #e = {};
23
+ on(e, n) {
24
+ const t = this.#e[e];
25
+ return t ? t.push(n) : this.#e[e] = [n], this;
53
26
  }
54
- addListener(event, listener) {
55
- return this.on(event, listener);
27
+ addListener(e, n) {
28
+ return this.on(e, n);
56
29
  }
57
- once(event, listener) {
58
- const onceListener = (...args) => {
59
- this.off(event, onceListener);
60
- listener(...args);
30
+ once(e, n) {
31
+ const t = (...r) => {
32
+ this.off(e, t), n(...r);
61
33
  };
62
- this.on(event, onceListener);
63
- return this;
34
+ return this.on(e, t), this;
64
35
  }
65
- emit(event, ...args) {
66
- const listeners = this.#events[event] || [];
67
- for (let i = 0; i < listeners.length; i++) {
68
- listeners[i](...args);
69
- }
70
- return Boolean(listeners.length);
36
+ emit(e, ...n) {
37
+ const t = this.#e[e] || [];
38
+ for (let r = 0; r < t.length; r++)
39
+ t[r](...n);
40
+ return !!t.length;
71
41
  }
72
- off(event, listener) {
73
- if (this.#events[event]) {
74
- this.#events[event] = this.#events[event].filter((v) => v !== listener);
75
- }
76
- return this;
42
+ off(e, n) {
43
+ return this.#e[e] && (this.#e[e] = this.#e[e].filter((t) => t !== n)), this;
77
44
  }
78
- removeListener(event, listener) {
79
- return this.off(event, listener);
45
+ removeListener(e, n) {
46
+ return this.off(e, n);
80
47
  }
81
- removeAllListeners(event) {
82
- if (event) {
83
- delete this.#events[event];
84
- } else {
85
- this.#events = {};
86
- }
87
- return this;
48
+ removeAllListeners(e) {
49
+ return e ? delete this.#e[e] : this.#e = {}, this;
88
50
  }
89
51
  eventNames() {
90
- return Reflect.ownKeys(this.#events);
52
+ return Reflect.ownKeys(this.#e);
91
53
  }
92
- listeners(event) {
93
- return this.#events[event];
54
+ listeners(e) {
55
+ return this.#e[e];
94
56
  }
95
- listenerCount(event) {
96
- return this.#events[event]?.length ?? 0;
57
+ listenerCount(e) {
58
+ return this.#e[e]?.length ?? 0;
97
59
  }
98
60
  }
99
-
100
- class LocationObserver extends Emitter {
61
+ class p extends u {
101
62
  constructor() {
102
63
  super();
103
- const { history, location } = window;
104
- const { pushState, replaceState } = history;
105
- history.pushState = (...args) => {
106
- pushState.apply(history, args);
107
- this.emit("pushState", location, args[0]);
108
- };
109
- history.replaceState = (...args) => {
110
- replaceState.apply(history, args);
111
- this.emit("replaceState", location, args[0]);
112
- };
113
- window.addEventListener("popstate", (event) => {
114
- this.emit("popState", location, event);
64
+ const { history: e, location: n } = window, { pushState: t, replaceState: r } = e;
65
+ e.pushState = (...o) => {
66
+ t.apply(e, o), this.emit("pushState", n, o[0]);
67
+ }, e.replaceState = (...o) => {
68
+ r.apply(e, o), this.emit("replaceState", n, o[0]);
69
+ }, window.addEventListener("popstate", (o) => {
70
+ this.emit("popState", n, o);
115
71
  });
116
72
  }
117
73
  }
118
-
119
- function observeElement(el, callback, options) {
120
- const observe = new MutationObserver((mutations, observer) => {
121
- for (const mutation of mutations) {
122
- callback(mutation, observer);
123
- }
124
- });
125
- observe.observe(el, {
126
- childList: true,
127
- subtree: true,
128
- ...options
74
+ function l(s, e, n) {
75
+ const t = new MutationObserver((r, o) => {
76
+ for (const c of r)
77
+ e(c, o);
129
78
  });
130
- return () => observe.disconnect();
79
+ return t.observe(s, {
80
+ childList: !0,
81
+ subtree: !0,
82
+ ...n
83
+ }), () => t.disconnect();
131
84
  }
132
- function waitElement(selector, target = document.documentElement) {
133
- return new Promise((resolve) => {
134
- function resolveElement() {
135
- const el = target.querySelector(selector);
136
- if (el) {
137
- resolve(el);
138
- }
85
+ function m(s, e = document.documentElement) {
86
+ return new Promise((n) => {
87
+ function t() {
88
+ const r = e.querySelector(s);
89
+ r && n(r);
139
90
  }
140
- observeElement(target, (_, observer) => {
141
- resolveElement();
142
- observer.disconnect();
91
+ l(e, (r, o) => {
92
+ t(), o.disconnect();
143
93
  });
144
94
  });
145
95
  }
146
-
147
- export { LocationObserver, addEventListener, domReady, el, isDisabled, nbsp, observeElement, text, waitElement };
96
+ export {
97
+ p as LocationObserver,
98
+ h as domReady,
99
+ a as el,
100
+ f as isDisabled,
101
+ d as nbsp,
102
+ l as observeElement,
103
+ i as text,
104
+ m as waitElement
105
+ };
148
106
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/html.ts","../../emitter/dist/index.es.js","../src/location-observer.ts","../src/mutation-observers.ts"],"sourcesContent":["// prettier-ignore\ntype Attributes<T extends keyof HTMLElementTagNameMap> = Partial<{\n style: Partial<CSSStyleDeclaration>\n} & Omit<HTMLElementTagNameMap[T], 'style'>>\n\ntype Children = (string | Node | HTMLElement)[]\n\nexport function el<T extends keyof HTMLElementTagNameMap>(\n tag: T,\n attributes?: Children | Attributes<T>,\n ...children: Children\n): HTMLElementTagNameMap[T] {\n const el = document.createElement(tag)\n\n if (typeof attributes === 'string') {\n el.append(text(attributes))\n } else if (Array.isArray(attributes)) {\n el.append(...attributes)\n } else {\n Object.assign(el, attributes)\n Object.assign(el.style, attributes?.style)\n }\n\n if (children.length) {\n el.append(...children)\n }\n\n return el\n}\n\nexport function text(str: string): Text {\n return document.createTextNode(str)\n}\n\nexport function nbsp(): Text {\n return text('\\u00a0')\n}\n\nexport async function domReady(): Promise<void> {\n return new Promise((resolve) => {\n if (document.readyState == 'loading') {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true\n })\n } else {\n resolve()\n }\n })\n}\n\nexport function isDisabled(element: HTMLElement): boolean {\n return (\n Boolean(element.getAttribute('disabled')) === true ||\n Boolean(element.getAttribute('aria-disabled')) === true\n )\n}\n\nexport function addEventListener(\n target: EventTarget,\n eventName: string,\n handler: EventListener,\n options?: AddEventListenerOptions\n) {\n target.addEventListener(eventName, handler, options)\n return () => {\n target.removeEventListener(eventName, handler, options)\n }\n}\n","class Emitter {\n #events = {};\n on(event, listener) {\n const listeners = this.#events[event];\n if (listeners) {\n listeners.push(listener);\n } else {\n this.#events[event] = [listener];\n }\n return this;\n }\n addListener(event, listener) {\n return this.on(event, listener);\n }\n once(event, listener) {\n const onceListener = (...args) => {\n this.off(event, onceListener);\n listener(...args);\n };\n this.on(event, onceListener);\n return this;\n }\n emit(event, ...args) {\n const listeners = this.#events[event] || [];\n for (let i = 0; i < listeners.length; i++) {\n listeners[i](...args);\n }\n return Boolean(listeners.length);\n }\n off(event, listener) {\n if (this.#events[event]) {\n this.#events[event] = this.#events[event].filter((v) => v !== listener);\n }\n return this;\n }\n removeListener(event, listener) {\n return this.off(event, listener);\n }\n removeAllListeners(event) {\n if (event) {\n delete this.#events[event];\n } else {\n this.#events = {};\n }\n return this;\n }\n eventNames() {\n return Reflect.ownKeys(this.#events);\n }\n listeners(event) {\n return this.#events[event];\n }\n listenerCount(event) {\n return this.#events[event]?.length ?? 0;\n }\n}\n\nexport { Emitter };\n//# sourceMappingURL=index.es.js.map\n","import { Emitter } from '@zero-dependency/emitter'\n\ntype LocationCallback<T = any> = (location: Location, args: T) => void\n\ntype Events<T> = {\n pushState: LocationCallback<T>\n replaceState: LocationCallback<T>\n popState: LocationCallback<\n Omit<PopStateEvent, 'state'> & { readonly state: T }\n >\n}\n\nexport class LocationObserver<T> extends Emitter<Events<T>> {\n constructor() {\n super()\n\n const { history, location } = window\n const { pushState, replaceState } = history\n\n history.pushState = (...args) => {\n pushState.apply(history, args)\n this.emit('pushState', location, args[0])\n }\n\n history.replaceState = (...args) => {\n replaceState.apply(history, args)\n this.emit('replaceState', location, args[0])\n }\n\n window.addEventListener('popstate', (event) => {\n this.emit('popState', location, event)\n })\n }\n}\n","type Disconnect = () => void\n\nexport function observeElement<T extends Element = Element>(\n el: T,\n callback: (mutation: MutationRecord, observer: MutationObserver) => void,\n options?: MutationObserverInit\n): Disconnect {\n const observe = new MutationObserver((mutations, observer) => {\n for (const mutation of mutations) {\n callback(mutation, observer)\n }\n })\n\n observe.observe(el, {\n childList: true,\n subtree: true,\n ...options\n })\n\n return () => observe.disconnect()\n}\n\nexport function waitElement<T extends Element = Element>(\n selector: string,\n target = document.documentElement\n): Promise<T> {\n return new Promise((resolve) => {\n function resolveElement() {\n const el = target.querySelector<T>(selector)\n if (el) {\n resolve(el)\n }\n }\n\n observeElement(target, (_, observer) => {\n resolveElement()\n observer.disconnect()\n })\n })\n}\n"],"names":["el"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/html.ts","../../emitter/dist/index.es.js","../src/location-observer.ts","../src/mutation-observers.ts"],"sourcesContent":["// prettier-ignore\ntype Attributes<T extends keyof HTMLElementTagNameMap> = Partial<{\n style: Partial<CSSStyleDeclaration>\n} & Omit<HTMLElementTagNameMap[T], 'style'>>\n\ntype Children = (string | Node | HTMLElement)[]\n\nexport function el<T extends keyof HTMLElementTagNameMap>(\n tag: T,\n attributes?: Children | Attributes<T>,\n ...children: Children\n): HTMLElementTagNameMap[T] {\n const el = document.createElement(tag)\n\n if (typeof attributes === 'string') {\n el.append(text(attributes))\n } else if (Array.isArray(attributes)) {\n el.append(...attributes)\n } else {\n Object.assign(el, attributes)\n Object.assign(el.style, attributes?.style)\n }\n\n if (children.length) {\n el.append(...children)\n }\n\n return el\n}\n\nexport function text(str: string): Text {\n return document.createTextNode(str)\n}\n\nexport function nbsp(): Text {\n return text('\\u00a0')\n}\n\nexport async function domReady(): Promise<void> {\n return new Promise((resolve) => {\n if (document.readyState == 'loading') {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true\n })\n } else {\n resolve()\n }\n })\n}\n\nexport function isDisabled(element: HTMLElement): boolean {\n return (\n Boolean(element.getAttribute('disabled')) === true ||\n Boolean(element.getAttribute('aria-disabled')) === true\n )\n}\n","class n {\n #t = {};\n on(t, e) {\n const s = this.#t[t];\n return s ? s.push(e) : this.#t[t] = [e], this;\n }\n addListener(t, e) {\n return this.on(t, e);\n }\n once(t, e) {\n const s = (...i) => {\n this.off(t, s), e(...i);\n };\n return this.on(t, s), this;\n }\n emit(t, ...e) {\n const s = this.#t[t] || [];\n for (let i = 0; i < s.length; i++)\n s[i](...e);\n return !!s.length;\n }\n off(t, e) {\n return this.#t[t] && (this.#t[t] = this.#t[t].filter((s) => s !== e)), this;\n }\n removeListener(t, e) {\n return this.off(t, e);\n }\n removeAllListeners(t) {\n return t ? delete this.#t[t] : this.#t = {}, this;\n }\n eventNames() {\n return Reflect.ownKeys(this.#t);\n }\n listeners(t) {\n return this.#t[t];\n }\n listenerCount(t) {\n return this.#t[t]?.length ?? 0;\n }\n}\nexport {\n n as Emitter\n};\n//# sourceMappingURL=index.es.js.map\n","import { Emitter } from '@zero-dependency/emitter'\n\ntype LocationCallback<T = any> = (location: Location, args: T) => void\n\ntype Events<T> = {\n pushState: LocationCallback<T>\n replaceState: LocationCallback<T>\n popState: LocationCallback<\n Omit<PopStateEvent, 'state'> & { readonly state: T }\n >\n}\n\nexport class LocationObserver<T> extends Emitter<Events<T>> {\n constructor() {\n super()\n\n const { history, location } = window\n const { pushState, replaceState } = history\n\n history.pushState = (...args) => {\n pushState.apply(history, args)\n this.emit('pushState', location, args[0])\n }\n\n history.replaceState = (...args) => {\n replaceState.apply(history, args)\n this.emit('replaceState', location, args[0])\n }\n\n window.addEventListener('popstate', (event) => {\n this.emit('popState', location, event)\n })\n }\n}\n","type Disconnect = () => void\n\nexport function observeElement<T extends Element = Element>(\n el: T,\n callback: (mutation: MutationRecord, observer: MutationObserver) => void,\n options?: MutationObserverInit\n): Disconnect {\n const observe = new MutationObserver((mutations, observer) => {\n for (const mutation of mutations) {\n callback(mutation, observer)\n }\n })\n\n observe.observe(el, {\n childList: true,\n subtree: true,\n ...options\n })\n\n return () => observe.disconnect()\n}\n\nexport function waitElement<T extends Element = Element>(\n selector: string,\n target = document.documentElement\n): Promise<T> {\n return new Promise((resolve) => {\n function resolveElement() {\n const el = target.querySelector<T>(selector)\n if (el) {\n resolve(el)\n }\n }\n\n observeElement(target, (_, observer) => {\n resolveElement()\n observer.disconnect()\n })\n })\n}\n"],"names":["el","tag","attributes","children","text","str","nbsp","domReady","resolve","isDisabled","element","n","#t","t","e","s","i","LocationObserver","Emitter","history","location","pushState","replaceState","args","event","observeElement","callback","options","observe","mutations","observer","mutation","waitElement","selector","target","resolveElement","_"],"mappings":"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"}
package/dist/index.umd.js CHANGED
@@ -1,166 +1,2 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@zero-dependency/dom"] = {}));
5
- })(this, (function (exports) { 'use strict';
6
-
7
- function el(tag, attributes, ...children) {
8
- const el2 = document.createElement(tag);
9
- if (typeof attributes === "string") {
10
- el2.append(text(attributes));
11
- } else if (Array.isArray(attributes)) {
12
- el2.append(...attributes);
13
- } else {
14
- Object.assign(el2, attributes);
15
- Object.assign(el2.style, attributes?.style);
16
- }
17
- if (children.length) {
18
- el2.append(...children);
19
- }
20
- return el2;
21
- }
22
- function text(str) {
23
- return document.createTextNode(str);
24
- }
25
- function nbsp() {
26
- return text(" ");
27
- }
28
- async function domReady() {
29
- return new Promise((resolve) => {
30
- if (document.readyState == "loading") {
31
- document.addEventListener("DOMContentLoaded", () => resolve(), {
32
- once: true
33
- });
34
- } else {
35
- resolve();
36
- }
37
- });
38
- }
39
- function isDisabled(element) {
40
- return Boolean(element.getAttribute("disabled")) === true || Boolean(element.getAttribute("aria-disabled")) === true;
41
- }
42
- function addEventListener(target, eventName, handler, options) {
43
- target.addEventListener(eventName, handler, options);
44
- return () => {
45
- target.removeEventListener(eventName, handler, options);
46
- };
47
- }
48
-
49
- class Emitter {
50
- #events = {};
51
- on(event, listener) {
52
- const listeners = this.#events[event];
53
- if (listeners) {
54
- listeners.push(listener);
55
- } else {
56
- this.#events[event] = [listener];
57
- }
58
- return this;
59
- }
60
- addListener(event, listener) {
61
- return this.on(event, listener);
62
- }
63
- once(event, listener) {
64
- const onceListener = (...args) => {
65
- this.off(event, onceListener);
66
- listener(...args);
67
- };
68
- this.on(event, onceListener);
69
- return this;
70
- }
71
- emit(event, ...args) {
72
- const listeners = this.#events[event] || [];
73
- for (let i = 0; i < listeners.length; i++) {
74
- listeners[i](...args);
75
- }
76
- return Boolean(listeners.length);
77
- }
78
- off(event, listener) {
79
- if (this.#events[event]) {
80
- this.#events[event] = this.#events[event].filter((v) => v !== listener);
81
- }
82
- return this;
83
- }
84
- removeListener(event, listener) {
85
- return this.off(event, listener);
86
- }
87
- removeAllListeners(event) {
88
- if (event) {
89
- delete this.#events[event];
90
- } else {
91
- this.#events = {};
92
- }
93
- return this;
94
- }
95
- eventNames() {
96
- return Reflect.ownKeys(this.#events);
97
- }
98
- listeners(event) {
99
- return this.#events[event];
100
- }
101
- listenerCount(event) {
102
- return this.#events[event]?.length ?? 0;
103
- }
104
- }
105
-
106
- class LocationObserver extends Emitter {
107
- constructor() {
108
- super();
109
- const { history, location } = window;
110
- const { pushState, replaceState } = history;
111
- history.pushState = (...args) => {
112
- pushState.apply(history, args);
113
- this.emit("pushState", location, args[0]);
114
- };
115
- history.replaceState = (...args) => {
116
- replaceState.apply(history, args);
117
- this.emit("replaceState", location, args[0]);
118
- };
119
- window.addEventListener("popstate", (event) => {
120
- this.emit("popState", location, event);
121
- });
122
- }
123
- }
124
-
125
- function observeElement(el, callback, options) {
126
- const observe = new MutationObserver((mutations, observer) => {
127
- for (const mutation of mutations) {
128
- callback(mutation, observer);
129
- }
130
- });
131
- observe.observe(el, {
132
- childList: true,
133
- subtree: true,
134
- ...options
135
- });
136
- return () => observe.disconnect();
137
- }
138
- function waitElement(selector, target = document.documentElement) {
139
- return new Promise((resolve) => {
140
- function resolveElement() {
141
- const el = target.querySelector(selector);
142
- if (el) {
143
- resolve(el);
144
- }
145
- }
146
- observeElement(target, (_, observer) => {
147
- resolveElement();
148
- observer.disconnect();
149
- });
150
- });
151
- }
152
-
153
- exports.LocationObserver = LocationObserver;
154
- exports.addEventListener = addEventListener;
155
- exports.domReady = domReady;
156
- exports.el = el;
157
- exports.isDisabled = isDisabled;
158
- exports.nbsp = nbsp;
159
- exports.observeElement = observeElement;
160
- exports.text = text;
161
- exports.waitElement = waitElement;
162
-
163
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
164
-
165
- }));
1
+ (function(s,u){typeof exports=="object"&&typeof module<"u"?u(exports):typeof define=="function"&&define.amd?define(["exports"],u):(s=typeof globalThis<"u"?globalThis:s||self,u(s["@zero-dependency/dom"]={}))})(this,function(s){"use strict";function u(i,e,...n){const t=document.createElement(i);return typeof e=="string"?t.append(c(e)):Array.isArray(e)?t.append(...e):(Object.assign(t,e),Object.assign(t.style,e?.style)),n.length&&t.append(...n),t}function c(i){return document.createTextNode(i)}function l(){return c(" ")}async function a(){return new Promise(i=>{document.readyState=="loading"?document.addEventListener("DOMContentLoaded",()=>i(),{once:!0}):i()})}function f(i){return!!i.getAttribute("disabled")||!!i.getAttribute("aria-disabled")}class h{#e={};on(e,n){const t=this.#e[e];return t?t.push(n):this.#e[e]=[n],this}addListener(e,n){return this.on(e,n)}once(e,n){const t=(...o)=>{this.off(e,t),n(...o)};return this.on(e,t),this}emit(e,...n){const t=this.#e[e]||[];for(let o=0;o<t.length;o++)t[o](...n);return!!t.length}off(e,n){return this.#e[e]&&(this.#e[e]=this.#e[e].filter(t=>t!==n)),this}removeListener(e,n){return this.off(e,n)}removeAllListeners(e){return e?delete this.#e[e]:this.#e={},this}eventNames(){return Reflect.ownKeys(this.#e)}listeners(e){return this.#e[e]}listenerCount(e){return this.#e[e]?.length??0}}class m extends h{constructor(){super();const{history:e,location:n}=window,{pushState:t,replaceState:o}=e;e.pushState=(...r)=>{t.apply(e,r),this.emit("pushState",n,r[0])},e.replaceState=(...r)=>{o.apply(e,r),this.emit("replaceState",n,r[0])},window.addEventListener("popstate",r=>{this.emit("popState",n,r)})}}function d(i,e,n){const t=new MutationObserver((o,r)=>{for(const y of o)e(y,r)});return t.observe(i,{childList:!0,subtree:!0,...n}),()=>t.disconnect()}function p(i,e=document.documentElement){return new Promise(n=>{function t(){const o=e.querySelector(i);o&&n(o)}d(e,(o,r)=>{t(),r.disconnect()})})}s.LocationObserver=m,s.domReady=a,s.el=u,s.isDisabled=f,s.nbsp=l,s.observeElement=d,s.text=c,s.waitElement=p,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
166
2
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/html.ts","../../emitter/dist/index.es.js","../src/location-observer.ts","../src/mutation-observers.ts"],"sourcesContent":["// prettier-ignore\ntype Attributes<T extends keyof HTMLElementTagNameMap> = Partial<{\n style: Partial<CSSStyleDeclaration>\n} & Omit<HTMLElementTagNameMap[T], 'style'>>\n\ntype Children = (string | Node | HTMLElement)[]\n\nexport function el<T extends keyof HTMLElementTagNameMap>(\n tag: T,\n attributes?: Children | Attributes<T>,\n ...children: Children\n): HTMLElementTagNameMap[T] {\n const el = document.createElement(tag)\n\n if (typeof attributes === 'string') {\n el.append(text(attributes))\n } else if (Array.isArray(attributes)) {\n el.append(...attributes)\n } else {\n Object.assign(el, attributes)\n Object.assign(el.style, attributes?.style)\n }\n\n if (children.length) {\n el.append(...children)\n }\n\n return el\n}\n\nexport function text(str: string): Text {\n return document.createTextNode(str)\n}\n\nexport function nbsp(): Text {\n return text('\\u00a0')\n}\n\nexport async function domReady(): Promise<void> {\n return new Promise((resolve) => {\n if (document.readyState == 'loading') {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true\n })\n } else {\n resolve()\n }\n })\n}\n\nexport function isDisabled(element: HTMLElement): boolean {\n return (\n Boolean(element.getAttribute('disabled')) === true ||\n Boolean(element.getAttribute('aria-disabled')) === true\n )\n}\n\nexport function addEventListener(\n target: EventTarget,\n eventName: string,\n handler: EventListener,\n options?: AddEventListenerOptions\n) {\n target.addEventListener(eventName, handler, options)\n return () => {\n target.removeEventListener(eventName, handler, options)\n }\n}\n","class Emitter {\n #events = {};\n on(event, listener) {\n const listeners = this.#events[event];\n if (listeners) {\n listeners.push(listener);\n } else {\n this.#events[event] = [listener];\n }\n return this;\n }\n addListener(event, listener) {\n return this.on(event, listener);\n }\n once(event, listener) {\n const onceListener = (...args) => {\n this.off(event, onceListener);\n listener(...args);\n };\n this.on(event, onceListener);\n return this;\n }\n emit(event, ...args) {\n const listeners = this.#events[event] || [];\n for (let i = 0; i < listeners.length; i++) {\n listeners[i](...args);\n }\n return Boolean(listeners.length);\n }\n off(event, listener) {\n if (this.#events[event]) {\n this.#events[event] = this.#events[event].filter((v) => v !== listener);\n }\n return this;\n }\n removeListener(event, listener) {\n return this.off(event, listener);\n }\n removeAllListeners(event) {\n if (event) {\n delete this.#events[event];\n } else {\n this.#events = {};\n }\n return this;\n }\n eventNames() {\n return Reflect.ownKeys(this.#events);\n }\n listeners(event) {\n return this.#events[event];\n }\n listenerCount(event) {\n return this.#events[event]?.length ?? 0;\n }\n}\n\nexport { Emitter };\n//# sourceMappingURL=index.es.js.map\n","import { Emitter } from '@zero-dependency/emitter'\n\ntype LocationCallback<T = any> = (location: Location, args: T) => void\n\ntype Events<T> = {\n pushState: LocationCallback<T>\n replaceState: LocationCallback<T>\n popState: LocationCallback<\n Omit<PopStateEvent, 'state'> & { readonly state: T }\n >\n}\n\nexport class LocationObserver<T> extends Emitter<Events<T>> {\n constructor() {\n super()\n\n const { history, location } = window\n const { pushState, replaceState } = history\n\n history.pushState = (...args) => {\n pushState.apply(history, args)\n this.emit('pushState', location, args[0])\n }\n\n history.replaceState = (...args) => {\n replaceState.apply(history, args)\n this.emit('replaceState', location, args[0])\n }\n\n window.addEventListener('popstate', (event) => {\n this.emit('popState', location, event)\n })\n }\n}\n","type Disconnect = () => void\n\nexport function observeElement<T extends Element = Element>(\n el: T,\n callback: (mutation: MutationRecord, observer: MutationObserver) => void,\n options?: MutationObserverInit\n): Disconnect {\n const observe = new MutationObserver((mutations, observer) => {\n for (const mutation of mutations) {\n callback(mutation, observer)\n }\n })\n\n observe.observe(el, {\n childList: true,\n subtree: true,\n ...options\n })\n\n return () => observe.disconnect()\n}\n\nexport function waitElement<T extends Element = Element>(\n selector: string,\n target = document.documentElement\n): Promise<T> {\n return new Promise((resolve) => {\n function resolveElement() {\n const el = target.querySelector<T>(selector)\n if (el) {\n resolve(el)\n }\n }\n\n observeElement(target, (_, observer) => {\n resolveElement()\n observer.disconnect()\n })\n })\n}\n"],"names":["el"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/html.ts","../../emitter/dist/index.es.js","../src/location-observer.ts","../src/mutation-observers.ts"],"sourcesContent":["// prettier-ignore\ntype Attributes<T extends keyof HTMLElementTagNameMap> = Partial<{\n style: Partial<CSSStyleDeclaration>\n} & Omit<HTMLElementTagNameMap[T], 'style'>>\n\ntype Children = (string | Node | HTMLElement)[]\n\nexport function el<T extends keyof HTMLElementTagNameMap>(\n tag: T,\n attributes?: Children | Attributes<T>,\n ...children: Children\n): HTMLElementTagNameMap[T] {\n const el = document.createElement(tag)\n\n if (typeof attributes === 'string') {\n el.append(text(attributes))\n } else if (Array.isArray(attributes)) {\n el.append(...attributes)\n } else {\n Object.assign(el, attributes)\n Object.assign(el.style, attributes?.style)\n }\n\n if (children.length) {\n el.append(...children)\n }\n\n return el\n}\n\nexport function text(str: string): Text {\n return document.createTextNode(str)\n}\n\nexport function nbsp(): Text {\n return text('\\u00a0')\n}\n\nexport async function domReady(): Promise<void> {\n return new Promise((resolve) => {\n if (document.readyState == 'loading') {\n document.addEventListener('DOMContentLoaded', () => resolve(), {\n once: true\n })\n } else {\n resolve()\n }\n })\n}\n\nexport function isDisabled(element: HTMLElement): boolean {\n return (\n Boolean(element.getAttribute('disabled')) === true ||\n Boolean(element.getAttribute('aria-disabled')) === true\n )\n}\n","class n {\n #t = {};\n on(t, e) {\n const s = this.#t[t];\n return s ? s.push(e) : this.#t[t] = [e], this;\n }\n addListener(t, e) {\n return this.on(t, e);\n }\n once(t, e) {\n const s = (...i) => {\n this.off(t, s), e(...i);\n };\n return this.on(t, s), this;\n }\n emit(t, ...e) {\n const s = this.#t[t] || [];\n for (let i = 0; i < s.length; i++)\n s[i](...e);\n return !!s.length;\n }\n off(t, e) {\n return this.#t[t] && (this.#t[t] = this.#t[t].filter((s) => s !== e)), this;\n }\n removeListener(t, e) {\n return this.off(t, e);\n }\n removeAllListeners(t) {\n return t ? delete this.#t[t] : this.#t = {}, this;\n }\n eventNames() {\n return Reflect.ownKeys(this.#t);\n }\n listeners(t) {\n return this.#t[t];\n }\n listenerCount(t) {\n return this.#t[t]?.length ?? 0;\n }\n}\nexport {\n n as Emitter\n};\n//# sourceMappingURL=index.es.js.map\n","import { Emitter } from '@zero-dependency/emitter'\n\ntype LocationCallback<T = any> = (location: Location, args: T) => void\n\ntype Events<T> = {\n pushState: LocationCallback<T>\n replaceState: LocationCallback<T>\n popState: LocationCallback<\n Omit<PopStateEvent, 'state'> & { readonly state: T }\n >\n}\n\nexport class LocationObserver<T> extends Emitter<Events<T>> {\n constructor() {\n super()\n\n const { history, location } = window\n const { pushState, replaceState } = history\n\n history.pushState = (...args) => {\n pushState.apply(history, args)\n this.emit('pushState', location, args[0])\n }\n\n history.replaceState = (...args) => {\n replaceState.apply(history, args)\n this.emit('replaceState', location, args[0])\n }\n\n window.addEventListener('popstate', (event) => {\n this.emit('popState', location, event)\n })\n }\n}\n","type Disconnect = () => void\n\nexport function observeElement<T extends Element = Element>(\n el: T,\n callback: (mutation: MutationRecord, observer: MutationObserver) => void,\n options?: MutationObserverInit\n): Disconnect {\n const observe = new MutationObserver((mutations, observer) => {\n for (const mutation of mutations) {\n callback(mutation, observer)\n }\n })\n\n observe.observe(el, {\n childList: true,\n subtree: true,\n ...options\n })\n\n return () => observe.disconnect()\n}\n\nexport function waitElement<T extends Element = Element>(\n selector: string,\n target = document.documentElement\n): Promise<T> {\n return new Promise((resolve) => {\n function resolveElement() {\n const el = target.querySelector<T>(selector)\n if (el) {\n resolve(el)\n }\n }\n\n observeElement(target, (_, observer) => {\n resolveElement()\n observer.disconnect()\n })\n })\n}\n"],"names":["el","tag","attributes","children","text","str","nbsp","domReady","resolve","isDisabled","element","n","#t","t","e","s","i","LocationObserver","Emitter","history","location","pushState","replaceState","args","event","observeElement","callback","options","observe","mutations","observer","mutation","waitElement","selector","target","resolveElement","_"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zero-dependency/dom",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.umd.js",