marwajs-dom 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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Mohammad Emran
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,311 @@
1
+ # marwajs-dom
2
+
3
+ [![npm version](https://img.shields.io/npm/v/marwajs-dom?color=blue&logo=npm)](https://www.npmjs.com/package/marwajs-dom)
4
+ [![bundle size](https://img.shields.io/bundlephobia/minzip/marwajs-dom?color=purple)](https://bundlephobia.com/package/marwajs-dom)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-3178c6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
7
+
8
+ Fluent, **single-word**, chainable DOM utilities — plus optional add-ons for animations, storage, and networking.
9
+
10
+ ESM-only, TypeScript, zero deps, tree-shake friendly.
11
+
12
+ ---
13
+
14
+ ## Install
15
+
16
+ ```bash
17
+ npm i marwajs-dom
18
+ ```
19
+
20
+ ## Core API — `import dom, { make } from "marwajs-dom"`
21
+
22
+ ### Selection
23
+
24
+ ```js
25
+ dom("#app"); // select by id
26
+ dom(".card"); // select by class
27
+ dom("button"); // select by tag
28
+ dom("ul > li"); // select with CSS selector
29
+ dom(null); // empty Dom (no elements)
30
+ dom(element); // wrap a DOM element
31
+ dom(document); // wrap document
32
+ dom([el1, el2]); // wrap element array
33
+ dom(NodeList); // wrap NodeList
34
+ make("<p>hello</p>"); // create from HTML string
35
+ make("div", { id: "x" }); // create tag with attributes
36
+ ```
37
+
38
+ ### Properties
39
+
40
+ ```js
41
+ dom("li").length; // number of elements
42
+ dom("li").first; // first Element | Document | Window | undefined
43
+ for (const el of dom("li")) {
44
+ /* iterate */
45
+ }
46
+ ```
47
+
48
+ ### Collection helpers
49
+
50
+ ```js
51
+ dom("li").at(0); // Dom at index (returns new Dom)
52
+ dom("li").at(-1); // last element
53
+ dom("li").each((el, i) => console.log(i, el)); // iterate
54
+ dom("li").map((el) => el.textContent); // transform → string[]
55
+ ```
56
+
57
+ ### Query
58
+
59
+ ```js
60
+ dom("#app").find("p"); // descendants matching selector
61
+ dom("li").up("ul"); // closest ancestor matching selector
62
+ dom("#item").near(".sibling"); // siblings matching selector
63
+ dom.root(); // returns document
64
+ dom.root("article"); // query document for selector
65
+ ```
66
+
67
+ ### Content
68
+
69
+ ```js
70
+ dom("p").text(); // read textContent
71
+ dom("p").text("hello"); // set textContent (returns this)
72
+ dom("p").html(); // read innerHTML
73
+ dom("p").html("<b>hi</b>"); // set innerHTML (script/on* stripped)
74
+ dom("input").val(); // read input value
75
+ dom("input").val("abc"); // set input value (returns this)
76
+ ```
77
+
78
+ ### Attributes & Data
79
+
80
+ ```js
81
+ dom("a").attr("href"); // read href attribute
82
+ dom("a").attr("href", "/page"); // set href attribute
83
+ dom("a").attr("href", null); // remove href attribute
84
+ dom("a").attr({ title: "tip", rel: "nofollow" }); // set multiple
85
+ dom("div").data("userId"); // read data-user-id
86
+ dom("div").data("userId", "42"); // set data-user-id
87
+ dom("div").data("userId", null); // remove data-user-id attribute
88
+ dom("div").data({ id: "1", name: "x" }); // set multiple data attrs
89
+ ```
90
+
91
+ ### Class
92
+
93
+ ```js
94
+ dom("div").class("active"); // add class "active"
95
+ dom("div").class("!active"); // remove class "active"
96
+ dom("div").class("?active"); // toggle class "active"
97
+ ```
98
+
99
+ ### Styles
100
+
101
+ ```js
102
+ dom("div").css("color"); // read computed style
103
+ dom("div").css("fontSize", 14); // set style (numbers → px)
104
+ dom("div").css("margin", "8px"); // set style with string
105
+ dom("div").css({ padding: 12, color: "red" }); // set multiple
106
+ dom("div").css("color", null); // remove style
107
+ dom("div").show(); // remove display:none
108
+ dom("div").hide(); // set display:none
109
+ dom("div").flip(); // toggle hidden attribute
110
+ dom("div").flip(true); // show (remove hidden)
111
+ dom("div").flip(false); // hide (set display:none)
112
+ ```
113
+
114
+ ### Tree operations
115
+
116
+ ```js
117
+ dom("#parent").add(child); // append child Dom/Element/Node
118
+ dom("#parent").pre(child); // prepend child at start
119
+ dom("#middle").before("<hr>"); // insert before each element
120
+ dom("#middle").after(el); // insert after each element
121
+ dom("span").wrap("div"); // wrap each element (single tag only)
122
+ dom(".inner").unwrap(); // remove parent of each element
123
+ dom("ul").empty(); // clear innerHTML
124
+ dom(".card").rm(); // remove each element from DOM
125
+ dom("p").clone(); // deep clone each element
126
+ dom("p").clone(false); // shallow clone
127
+ ```
128
+
129
+ ### Geometry
130
+
131
+ ```js
132
+ dom("#box").box(); // getBoundingClientRect() → DOMRect | null
133
+ dom("#box").pos(); // { x, y } — current offset position
134
+ dom("#box").pos(100, 200); // set left/top (sets position:relative)
135
+ ```
136
+
137
+ ### Events
138
+
139
+ ```js
140
+ dom("button").on("click", handler); // attach event listener
141
+ dom("button").on("keydown", handler, { passive: true });
142
+ dom("button").off(); // remove all listeners
143
+ dom("button").off("click"); // remove all click listeners
144
+ dom("button").off("click", handler); // remove specific listener
145
+ dom("button").once("click", handler); // fire once then remove
146
+ dom("#list").onD("click", "li", (e, el) => {
147
+ /* delegated */
148
+ });
149
+ ```
150
+
151
+ ### Scroll
152
+
153
+ ```js
154
+ dom("#scroller").top(); // read scrollTop (falls back to window.scrollY)
155
+ dom("#scroller").top(100); // set scrollTop
156
+ dom(window).top(0); // scroll window to top
157
+ dom("#scroller").left(); // read scrollLeft
158
+ dom("#scroller").left(50); // set scrollLeft
159
+ ```
160
+
161
+ ### Utilities
162
+
163
+ ```js
164
+ dom("li").pipe((d) => d.class("active")); // run fn, return this
165
+ dom("li").pipe((d) => console.log(d.length));
166
+ ```
167
+
168
+ ---
169
+
170
+ ## Add-on: `fx` — Micro animations
171
+
172
+ **Install:** `import { enableFx } from "marwajs-dom/fx"` — call once before use.
173
+
174
+ ```js
175
+ enableFx(); // patches Dom.prototype — call once
176
+
177
+ dom("#box").fade(300); // fade in/out (auto-detects)
178
+ dom("#box").fade(300, true); // fade in
179
+ dom("#box").fade(300, false); // fade out
180
+
181
+ dom("#box").move(50, 100); // translate to x, y (px)
182
+ dom("#box").move(50, 100, 500); // with duration (ms)
183
+ dom("#box").move(50, 100, 500, ease.out);
184
+
185
+ dom("#box").scale(1.2); // scale (default: 1)
186
+ dom("#box").scale(1.2, 300); // with duration
187
+ dom("#box").scale(0); // scale to 0
188
+
189
+ dom("#box").rotate(45); // rotate degrees
190
+ dom("#box").rotate(360, 600, ease.inout);
191
+
192
+ dom("#box").stop(); // cancel active animation
193
+
194
+ dom("#box").to({ opacity: 0.5, scale: 1.1 }, 400);
195
+ dom("#box").to({ x: 20, y: -10, opacity: 0.8 }, 300);
196
+ dom("#box").to({ "--my-var": 50 }, 200); // CSS custom properties
197
+ ```
198
+
199
+ **Easing:**
200
+
201
+ ```js
202
+ ease.linear;
203
+ ease.in; // ease-in
204
+ ease.out; // ease-out
205
+ ease.inout; // ease-in-out
206
+ ```
207
+
208
+ ---
209
+
210
+ ## Add-on: `store` — local/session storage
211
+
212
+ **Install:** `import { store } from "marwajs-dom/store"`
213
+
214
+ ```js
215
+ const s = store(); // localStorage, no namespace
216
+ const s = store("local", "app:"); // localStorage with namespace
217
+ const s = store("session"); // sessionStorage, no namespace
218
+ const s = store("session", "app:"); // sessionStorage with namespace
219
+
220
+ s.set("name", "Alice"); // store string
221
+ s.set("user", { id: 1 }); // store object (auto JSON.stringify)
222
+ s.set("count", 42); // store number
223
+ s.set("enabled", true); // store boolean
224
+
225
+ s.get("name"); // "Alice" (T = string by default)
226
+ s.get("name", "fallback"); // with fallback
227
+ s.get("user"); // { id: 1 }
228
+ s.get("missing"); // null
229
+ s.get("missing", "default"); // "default"
230
+
231
+ s.has("name"); // true
232
+ s.has("missing"); // false
233
+
234
+ s.all(); // { name: "Alice", user: { id: 1 }, ... }
235
+ s.all(); // typed: s.all<User>()
236
+
237
+ s.rm("name"); // remove key
238
+ s.clear(); // clear all namespaced keys (or all if no ns)
239
+ ```
240
+
241
+ All methods return `this` for chaining.
242
+
243
+ ---
244
+
245
+ ## Add-on: `net` — fetch wrapper
246
+
247
+ **Install:** `import { net } from "marwajs-dom/net"`
248
+
249
+ ```js
250
+ const api = net("https://api.example.com", { timeout: 8000 })
251
+
252
+ // HTTP methods
253
+ const { data } = await api.get("/users/1").json()
254
+ const { data } = await api.post("/users", { name: "Alice" }).json()
255
+ const { data } = await api.put("/users/1", { name: "Bob" }).json()
256
+ const { data } = await api.patch("/users/1", { name: "Carol" }).json()
257
+ await api.del("/users/1")
258
+ const { data } = await api.head("/users").json()
259
+
260
+ // Query string
261
+ api.get("/users", { page: 1, limit: 10, active: true })
262
+ // → GET /users?page=1&limit=10&active=true
263
+ // null/undefined values are omitted
264
+
265
+ // Response readers
266
+ const { data } = await api.get("/users").json<User[]>()
267
+ const { data } = await api.get("/raw").text()
268
+ const { data } = await api.get("/file").blob()
269
+ const { data } = await api.get("/bytes").bytes()
270
+
271
+ // ok() — throws if non-2xx
272
+ await api.get("/posts/1").ok() // throws on 404
273
+
274
+ // Interceptors
275
+ api.use(({ url, init }) => { // before fetch — modify req
276
+ (init.headers as any)["Authorization"] = "Bearer token"
277
+ })
278
+ api.after((res) => { // after fetch — inspect res
279
+ if (res.status === 401) redirect("/login")
280
+ })
281
+ api.trap((err) => { // on error — handle/filter
282
+ console.error("net error:", err)
283
+ })
284
+
285
+ // Client utilities
286
+ api.header("X-Request-ID", crypto.randomUUID())
287
+ api.base("https://other.com") // change base URL
288
+ api.timeout(5000) // change timeout (ms)
289
+ api.abort() // abort all pending requests
290
+ ```
291
+
292
+ ---
293
+
294
+ ## Tests
295
+
296
+ ```bash
297
+ npm test # run tests (vitest + happy-dom)
298
+ npm run test:watch # watch mode
299
+ ```
300
+
301
+ ---
302
+
303
+ ## Build
304
+
305
+ ```bash
306
+ npm run build # TypeScript → dist/ (ESM + .d.ts)
307
+ ```
308
+
309
+ ---
310
+
311
+ MIT © Mohammad Emran
package/dist/fx.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ type Easing = (t: number) => number;
2
+ declare const ease: {
3
+ readonly linear: (t: number) => number;
4
+ readonly in: (t: number) => number;
5
+ readonly out: (t: number) => number;
6
+ readonly inout: (t: number) => number;
7
+ };
8
+ export { ease };
9
+ type Tweenable = {
10
+ opacity?: number;
11
+ x?: number;
12
+ y?: number;
13
+ scale?: number;
14
+ rotate?: number;
15
+ [cssProp: `--${string}` | string]: number | undefined;
16
+ };
17
+ export declare function enableFx(): Promise<void> | void;
18
+ declare global {
19
+ interface HTMLElement {
20
+ }
21
+ interface DomFX {
22
+ }
23
+ }
24
+ export type { Tweenable, Easing };
25
+ //# sourceMappingURL=fx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fx.d.ts","sourceRoot":"","sources":["../src/fx.ts"],"names":[],"mappings":"AAQA,KAAK,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAEpC,QAAA,MAAM,IAAI;yBACI,MAAM;qBACV,MAAM;sBACL,MAAM;wBACJ,MAAM;CACT,CAAC;AACX,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB,KAAK,SAAS,GAAG;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACvD,CAAC;AAoLF,wBAAgB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CA4B/C;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW;KAEpB;IACD,UAAU,KAAK;KAAG;CACnB;AAED,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC"}
package/dist/fx.js ADDED
@@ -0,0 +1,196 @@
1
+ // @marwajs/dom/fx
2
+ // Adds single-word animation helpers to Dom via a one-time enableFx() call.
3
+ // Usage:
4
+ // import dom, { Dom } from "@marwajs/dom";
5
+ // import { enableFx, ease } from "@marwajs/dom/fx";
6
+ // enableFx(); // patches Dom.prototype
7
+ // dom("#box").fade(300).move(20, 0, 300).scale(1.2, 300);
8
+ const ease = {
9
+ linear: (t) => t,
10
+ in: (t) => t * t,
11
+ out: (t) => 1 - (1 - t) * (1 - t),
12
+ inout: (t) => (t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2),
13
+ };
14
+ export { ease };
15
+ const FX = new WeakMap();
16
+ function now() {
17
+ return performance.now();
18
+ }
19
+ function readStyle(el, k) {
20
+ const cs = getComputedStyle(el);
21
+ if (k === "opacity")
22
+ return parseFloat(cs.opacity || "1") || 0;
23
+ if (k === "x")
24
+ return 0; // we manage transforms ourselves
25
+ if (k === "y")
26
+ return 0;
27
+ if (k === "scale")
28
+ return 1;
29
+ if (k === "rotate")
30
+ return 0;
31
+ const raw = cs.getPropertyValue(k.startsWith("--")
32
+ ? k
33
+ : k.replace(/[A-Z]/g, (m) => "-" + m.toLowerCase())) || "0";
34
+ const num = parseFloat(raw);
35
+ return isNaN(num) ? 0 : num;
36
+ }
37
+ function write(el, k, v) {
38
+ if (k === "opacity") {
39
+ el.style.opacity = String(v);
40
+ return;
41
+ }
42
+ if (k === "x" || k === "y" || k === "scale" || k === "rotate") {
43
+ const st = FX.get(el);
44
+ const f = st?.to || {};
45
+ const x = k === "x" ? v : (f.x ?? st?.from?.x ?? 0);
46
+ const y = k === "y" ? v : (f.y ?? st?.from?.y ?? 0);
47
+ const s = k === "scale" ? v : (f.scale ?? st?.from?.scale ?? 1);
48
+ const r = k === "rotate" ? v : (f.rotate ?? st?.from?.rotate ?? 0);
49
+ const existing = el.style.transform || "";
50
+ const preserved = existing
51
+ .replace(/translate\([^)]*\)\s*scale\([^)]*\)\s*rotate\([^)]*\)/g, "")
52
+ .trim();
53
+ el.style.transform = preserved
54
+ ? `${preserved} translate(${x}px, ${y}px) scale(${s}) rotate(${r}deg)`
55
+ : `translate(${x}px, ${y}px) scale(${s}) rotate(${r}deg)`;
56
+ return;
57
+ }
58
+ if (k.startsWith("--"))
59
+ el.style.setProperty(k, String(v));
60
+ else
61
+ el.style[k] = `${v}px`;
62
+ }
63
+ function cancel(el) {
64
+ const st = FX.get(el);
65
+ if (!st)
66
+ return;
67
+ st.stop = true;
68
+ if (st.raf)
69
+ cancelAnimationFrame(st.raf);
70
+ FX.delete(el);
71
+ }
72
+ function tweenElement(el, to, ms, easing, onDone) {
73
+ cancel(el);
74
+ const from = {};
75
+ const dst = {};
76
+ for (const k of Object.keys(to)) {
77
+ const t = to[k];
78
+ const cur = readStyle(el, k);
79
+ from[k] = cur;
80
+ dst[k] = t;
81
+ }
82
+ const st = { from, to: dst, stop: false };
83
+ FX.set(el, st);
84
+ const start = now();
85
+ st.start = start;
86
+ const step = () => {
87
+ if (st.stop)
88
+ return;
89
+ const t = Math.min(1, (now() - start) / Math.max(1, ms));
90
+ const e = easing(t);
91
+ for (const k of Object.keys(dst)) {
92
+ const a = from[k];
93
+ const b = dst[k];
94
+ const v = a + (b - a) * e;
95
+ write(el, k, v);
96
+ }
97
+ if (t < 1) {
98
+ st.raf = requestAnimationFrame(step);
99
+ }
100
+ else {
101
+ FX.delete(el);
102
+ onDone && onDone();
103
+ }
104
+ };
105
+ st.raf = requestAnimationFrame(step);
106
+ }
107
+ // Public helpers (operate on first element in the Dom set)
108
+ function fxTo(d, to, ms = 300, easing = ease.inout) {
109
+ const el = d.first;
110
+ if (el)
111
+ tweenElement(el, to, ms, easing);
112
+ return d;
113
+ }
114
+ function fxFade(d, ms = 300, show, easing = ease.inout) {
115
+ const el = d.first;
116
+ if (!el)
117
+ return d;
118
+ const target = show === undefined
119
+ ? parseFloat(getComputedStyle(el).opacity || "1") < 0.5
120
+ : show;
121
+ el.style.willChange = "opacity";
122
+ if (target && el.style.display === "none")
123
+ el.style.display = "";
124
+ tweenElement(el, { opacity: target ? 1 : 0 }, ms, easing, () => {
125
+ el.style.willChange = "";
126
+ if (!target)
127
+ el.style.display = "none";
128
+ });
129
+ return d;
130
+ }
131
+ function fxMove(d, x = 0, y = 0, ms = 300, easing = ease.inout) {
132
+ const el = d.first;
133
+ if (el)
134
+ tweenElement(el, { x, y }, ms, easing);
135
+ return d;
136
+ }
137
+ function fxScale(d, s = 1, ms = 300, easing = ease.inout) {
138
+ const el = d.first;
139
+ if (el)
140
+ tweenElement(el, { scale: s }, ms, easing);
141
+ return d;
142
+ }
143
+ function fxRotate(d, deg = 0, ms = 300, easing = ease.inout) {
144
+ const el = d.first;
145
+ if (el)
146
+ tweenElement(el, { rotate: deg }, ms, easing);
147
+ return d;
148
+ }
149
+ function fxStop(d) {
150
+ const el = d.first;
151
+ if (el)
152
+ cancel(el);
153
+ return d;
154
+ }
155
+ let _patched = false;
156
+ let _domProto = null;
157
+ async function getDomPrototype() {
158
+ if (_domProto)
159
+ return _domProto;
160
+ const { Dom } = await import("./index.js");
161
+ _domProto = Dom.prototype;
162
+ return _domProto;
163
+ }
164
+ let _patchPromise = null;
165
+ export function enableFx() {
166
+ if (_patched)
167
+ return;
168
+ if (!_patchPromise) {
169
+ _patchPromise = getDomPrototype().then((P) => {
170
+ if (P.__fxPatched)
171
+ return;
172
+ P.to = function (to, ms, easing) {
173
+ return fxTo(this, to, ms, easing);
174
+ };
175
+ P.fade = function (ms, show, easing) {
176
+ return fxFade(this, ms, show, easing);
177
+ };
178
+ P.move = function (x, y, ms, easing) {
179
+ return fxMove(this, x, y, ms, easing);
180
+ };
181
+ P.scale = function (s, ms, easing) {
182
+ return fxScale(this, s, ms, easing);
183
+ };
184
+ P.rotate = function (deg, ms, easing) {
185
+ return fxRotate(this, deg, ms, easing);
186
+ };
187
+ P.stop = function () {
188
+ return fxStop(this);
189
+ };
190
+ P.__fxPatched = true;
191
+ _patched = true;
192
+ });
193
+ }
194
+ return _patchPromise;
195
+ }
196
+ //# sourceMappingURL=fx.js.map
package/dist/fx.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fx.js","sourceRoot":"","sources":["../src/fx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ export type DomInput = string | Element | Document | Window | NodeListOf<Element> | Element[] | Dom;
2
+ type Maybe<T> = T | null | undefined;
3
+ type StyleValue = string | number;
4
+ type OnOptions = boolean | AddEventListenerOptions;
5
+ type EventMap = HTMLElementEventMap & DocumentEventMap & WindowEventMap;
6
+ /** Core collection */
7
+ export declare class Dom {
8
+ readonly list: (Element | Document | Window)[];
9
+ constructor(input?: DomInput, root?: Document | Element);
10
+ /** Make from anything */
11
+ static of(input?: DomInput, root?: Document | Element): Dom;
12
+ /** Create element(s) from HTML string or tag name */
13
+ static make(htmlOrTag: string, attrs?: Record<string, any>): Dom;
14
+ get first(): Element | Document | Window | undefined;
15
+ get length(): number;
16
+ at(i: number): Dom;
17
+ each(fn: (el: Element, i: number) => void): this;
18
+ map<T>(fn: (el: Element, i: number) => T): T[];
19
+ find(sel: string): Dom;
20
+ near(sel: string): Dom;
21
+ root(sel?: string): Dom;
22
+ up(sel: string): Dom;
23
+ text(v?: Maybe<string>): this | string;
24
+ html(v?: Maybe<string>): this | string;
25
+ val(v?: Maybe<string>): this | string | null;
26
+ attr(name: string, value?: Maybe<string>): this | string | null;
27
+ attr(map: Record<string, Maybe<string>>): this;
28
+ data(name: string, value?: Maybe<string>): this;
29
+ data(map: Record<string, Maybe<string>>): this;
30
+ /** class("active") → add; class("!active") → remove; class("?active") → toggle */
31
+ class(token: string): this;
32
+ css(name: string, value?: Maybe<StyleValue>): this;
33
+ css(map: Record<string, Maybe<StyleValue>>): this;
34
+ show(): this;
35
+ hide(): this;
36
+ flip(show?: boolean): this;
37
+ add(child: DomInput | Node): this;
38
+ pre(child: DomInput | Node): this;
39
+ before(node: DomInput | Node): this;
40
+ after(node: DomInput | Node): this;
41
+ wrap(tagName: string): this;
42
+ unwrap(): this;
43
+ empty(): this;
44
+ rm(): this;
45
+ clone(deep?: boolean): Dom;
46
+ box(): DOMRect | null;
47
+ pos(x?: number, y?: number): this | {
48
+ x: number;
49
+ y: number;
50
+ };
51
+ on<K extends keyof EventMap>(type: K, handler: (ev: EventMap[K]) => void, opts?: OnOptions): this;
52
+ off<K extends keyof EventMap>(type?: K, handler?: (ev: EventMap[K]) => void): this;
53
+ once<K extends keyof EventMap>(type: K, handler: (ev: EventMap[K]) => void, opts?: OnOptions): this;
54
+ /** Delegated listener: onD("click", "button", h) */
55
+ onD<K extends keyof EventMap>(type: K, sel: string, handler: (ev: EventMap[K], match: Element) => void, opts?: OnOptions): this;
56
+ top(v?: number): this | number;
57
+ left(v?: number): this | number;
58
+ pipe(fn: (d: Dom) => void): this;
59
+ [Symbol.iterator](): ArrayIterator<Element | Document | Window>;
60
+ }
61
+ export declare function dom(input?: DomInput, root?: Document | Element): Dom;
62
+ export declare function make(htmlOrTag: string, attrs?: Record<string, any>): Dom;
63
+ export default dom;
64
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}