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 +21 -0
- package/README.md +311 -0
- package/dist/fx.d.ts +25 -0
- package/dist/fx.d.ts.map +1 -0
- package/dist/fx.js +196 -0
- package/dist/fx.js.map +1 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +435 -0
- package/dist/index.js.map +1 -0
- package/dist/net.d.ts +54 -0
- package/dist/net.d.ts.map +1 -0
- package/dist/net.js +188 -0
- package/dist/net.js.map +1 -0
- package/dist/store.d.ts +13 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +94 -0
- package/dist/store.js.map +1 -0
- package/package.json +72 -0
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
|
+
[](https://www.npmjs.com/package/marwajs-dom)
|
|
4
|
+
[](https://bundlephobia.com/package/marwajs-dom)
|
|
5
|
+
[](https://www.typescriptlang.org/)
|
|
6
|
+
[](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
|
package/dist/fx.d.ts.map
ADDED
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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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"}
|