sprae 12.4.1 → 12.4.2
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/core.js +50 -0
- package/directive/each.js +12 -12
- package/directive/else.js +1 -0
- package/directive/if.js +12 -9
- package/dist/sprae.js +3 -3
- package/dist/sprae.js.map +3 -3
- package/dist/sprae.umd.js +3 -3
- package/dist/sprae.umd.js.map +3 -3
- package/package.json +1 -2
- package/readme.md +21 -18
- package/sprae.js +11 -45
- package/store.js +7 -2
- package/types/core.d.ts +7 -0
- package/types/core.d.ts.map +1 -1
- package/types/directive/else.d.ts.map +1 -1
- package/types/directive/if.d.ts.map +1 -1
- package/types/sprae.d.ts +3 -3
- package/types/sprae.d.ts.map +1 -1
- package/types/store.d.ts.map +1 -1
package/sprae.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import store from "./store.js";
|
|
7
7
|
import { batch, computed, effect, signal, untracked } from './core.js';
|
|
8
8
|
import * as signals from './signal.js';
|
|
9
|
-
import sprae, { use, decorate, directive, modifier, parse, throttle, debounce, _off, _state, _on, _dispose, _add } from './core.js';
|
|
9
|
+
import sprae, { use, decorate, directive, modifier, parse, throttle, debounce, _off, _state, _on, _dispose, _add, start } from './core.js';
|
|
10
10
|
|
|
11
11
|
import _if from "./directive/if.js";
|
|
12
12
|
import _else from "./directive/else.js";
|
|
@@ -71,11 +71,10 @@ const dir = (target, name, expr, state) => {
|
|
|
71
71
|
|
|
72
72
|
state = target[_state] ?? state
|
|
73
73
|
|
|
74
|
-
return effect(() =>
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
))
|
|
74
|
+
return effect(() => {
|
|
75
|
+
const result = change.value == count ? (trigger()) : (count = change.value, _out = evaluate(state, update))
|
|
76
|
+
return out
|
|
77
|
+
})
|
|
79
78
|
}
|
|
80
79
|
}
|
|
81
80
|
|
|
@@ -106,6 +105,10 @@ Object.assign(modifier, {
|
|
|
106
105
|
throttle: (fn, a) => throttle(fn, scheduler(a)),
|
|
107
106
|
/** Runs callback after delay. Supports: tick (default), raf, idle, N, Nms, Ns, Nm. */
|
|
108
107
|
delay: (fn, a) => ((sched = scheduler(a)) => (e) => sched(() => fn(e)))(),
|
|
108
|
+
/** Shortcut for delay-tick (next microtask). */
|
|
109
|
+
tick: (fn) => (e) => queueMicrotask(() => fn(e)),
|
|
110
|
+
/** Shortcut for delay-raf (next animation frame). */
|
|
111
|
+
raf: (fn) => (e) => requestAnimationFrame(() => fn(e)),
|
|
109
112
|
|
|
110
113
|
/** Calls handler only once. */
|
|
111
114
|
once: (fn, _done, _fn) => (_fn = (e) => !_done && (_done = 1, fn(e)), _fn.once = true, _fn),
|
|
@@ -211,47 +214,10 @@ sprae.modifier = modifier
|
|
|
211
214
|
* Disposes a spraed element, cleaning up all effects and state.
|
|
212
215
|
* @param {Element} el - Element to dispose
|
|
213
216
|
*/
|
|
214
|
-
sprae.dispose = (el) => el[_dispose]?.()
|
|
217
|
+
const dispose = sprae.dispose = (el) => el[_dispose]?.()
|
|
215
218
|
|
|
216
219
|
|
|
217
|
-
|
|
218
|
-
* Auto-initializes sprae on dynamically added elements.
|
|
219
|
-
* Uses MutationObserver to detect new DOM nodes and apply directives.
|
|
220
|
-
*
|
|
221
|
-
* @param {Element} [root=document.body] - Root element to observe
|
|
222
|
-
* @param {Object} [values] - Initial state values
|
|
223
|
-
* @returns {Object} The reactive state object
|
|
224
|
-
*
|
|
225
|
-
* @example
|
|
226
|
-
* ```js
|
|
227
|
-
* // Auto-init on page load
|
|
228
|
-
* sprae.start(document.body, { count: 0 })
|
|
229
|
-
* ```
|
|
230
|
-
*/
|
|
231
|
-
const start = sprae.start = (root = document.body, values) => {
|
|
232
|
-
const state = store(values)
|
|
233
|
-
sprae(root, state);
|
|
234
|
-
const mo = new MutationObserver(mutations => {
|
|
235
|
-
for (const m of mutations) {
|
|
236
|
-
for (const el of m.addedNodes) {
|
|
237
|
-
// el can be spraed or removed by subsprae (like within :each/:if)
|
|
238
|
-
if (el.nodeType === 1 && el[_state] === undefined && root.contains(el)) {
|
|
239
|
-
// even if element has no spraeable attrs, some of its children can have
|
|
240
|
-
root[_add](el)
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
for (const el of m.removedNodes) el.nodeType === 1 && el[_dispose]?.()
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
mo.observe(root, { childList: true, subtree: true });
|
|
247
|
-
return state
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
/** Package version (injected by bundler) */
|
|
252
|
-
sprae.version = "[VI]{{inject}}[/VI]"
|
|
253
|
-
|
|
254
|
-
const dispose = sprae.dispose
|
|
220
|
+
sprae.start = start
|
|
255
221
|
|
|
256
222
|
export default sprae
|
|
257
223
|
export { sprae, store, signal, effect, computed, batch, untracked, start, use, throttle, debounce, dispose }
|
package/store.js
CHANGED
|
@@ -61,8 +61,13 @@ export const store = (values, parent) => {
|
|
|
61
61
|
[_signals]: signals
|
|
62
62
|
}), {
|
|
63
63
|
get: (_, k) => {
|
|
64
|
-
if (k in signals)
|
|
65
|
-
|
|
64
|
+
if (k in signals) {
|
|
65
|
+
return (signals[k] ? signals[k].valueOf() : signals[k])
|
|
66
|
+
}
|
|
67
|
+
if (parent) {
|
|
68
|
+
return parent[k]
|
|
69
|
+
}
|
|
70
|
+
return (typeof globalThis[k] === 'function' && !globalThis[k].prototype ? globalThis[k].bind(globalThis) : globalThis[k])
|
|
66
71
|
},
|
|
67
72
|
|
|
68
73
|
set: (_, k, v) => {
|
package/types/core.d.ts
CHANGED
|
@@ -77,6 +77,10 @@ export function use(config: SpraeConfig): void;
|
|
|
77
77
|
export function decorate(fn: Function & {
|
|
78
78
|
target?: Element;
|
|
79
79
|
}, mods: string[]): Function;
|
|
80
|
+
/** MutationObserver reference, set by sprae.start() */
|
|
81
|
+
export let mo: any;
|
|
82
|
+
export function mutate(fn: any): void;
|
|
83
|
+
export function start(root?: Element, values?: any): any;
|
|
80
84
|
export function frag(tpl: HTMLTemplateElement | FragmentLike): FragmentLike;
|
|
81
85
|
export function dashcase(str: string): string;
|
|
82
86
|
export function attr(el: Element, name: string, v: string | boolean | null | undefined): void;
|
|
@@ -219,4 +223,7 @@ export type FragmentLike = {
|
|
|
219
223
|
* @returns {SpraeState & Object} The reactive state object associated with the element.
|
|
220
224
|
*/
|
|
221
225
|
declare function sprae(el?: Element, state?: any): SpraeState & any;
|
|
226
|
+
declare namespace sprae {
|
|
227
|
+
let version: any;
|
|
228
|
+
}
|
|
222
229
|
//# sourceMappingURL=core.d.ts.map
|
package/types/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../core.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../core.js"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"else.d.ts","sourceRoot":"","sources":["../../directive/else.js"],"names":[],"mappings":"AAQe,8BAHJ,OAAO,GAAG,mBAAmB,GAC3B,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"else.d.ts","sourceRoot":"","sources":["../../directive/else.js"],"names":[],"mappings":"AAQe,8BAHJ,OAAO,GAAG,mBAAmB,GAC3B,MAAM,IAAI,CAiBtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"if.d.ts","sourceRoot":"","sources":["../../directive/if.js"],"names":[],"mappings":"AASe,8BAJJ,OAAO,GAAG,mBAAmB,eAE3B,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"if.d.ts","sourceRoot":"","sources":["../../directive/if.js"],"names":[],"mappings":"AASe,8BAJJ,OAAO,GAAG,mBAAmB,eAE3B,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CA4ChC"}
|
package/types/sprae.d.ts
CHANGED
|
@@ -6,10 +6,10 @@ import { effect } from './core.js';
|
|
|
6
6
|
import { computed } from './core.js';
|
|
7
7
|
import { batch } from './core.js';
|
|
8
8
|
import { untracked } from './core.js';
|
|
9
|
-
|
|
9
|
+
import { start } from './core.js';
|
|
10
10
|
import { use } from './core.js';
|
|
11
11
|
import { throttle } from './core.js';
|
|
12
12
|
import { debounce } from './core.js';
|
|
13
|
-
export
|
|
14
|
-
export { sprae, store, signal, effect, computed, batch, untracked, use, throttle, debounce };
|
|
13
|
+
export function dispose(el: Element): any;
|
|
14
|
+
export { sprae, store, signal, effect, computed, batch, untracked, start, use, throttle, debounce };
|
|
15
15
|
//# sourceMappingURL=sprae.d.ts.map
|
package/types/sprae.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sprae.d.ts","sourceRoot":"","sources":["../sprae.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"sprae.d.ts","sourceRoot":"","sources":["../sprae.js"],"names":[],"mappings":";kBAQ+H,WAAW;kBAHxH,YAAY;uBAC6B,WAAW;uBAAX,WAAW;yBAAX,WAAW;sBAAX,WAAW;0BAAX,WAAW;sBAEyD,WAAW;oBAAX,WAAW;yBAAX,WAAW;yBAAX,WAAW;AAgN1H,4BAFL,OAAO,OAEsC"}
|
package/types/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../store.js"],"names":[],"mappings":"AAOA,oDAAoD;AACpD,qCAAyC;AAEzC,2EAA2E;AAC3E,oCAAuC;AAEvC,mDAAmD;AACnD,iCAAiC;AA0B1B,sBAVe,CAAC,0BACZ,CAAC,iBAEC,aAAa,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../store.js"],"names":[],"mappings":"AAOA,oDAAoD;AACpD,qCAAyC;AAEzC,2EAA2E;AAC3E,oCAAuC;AAEvC,mDAAmD;AACnD,iCAAiC;AA0B1B,sBAVe,CAAC,0BACZ,CAAC,iBAEC,aAAa,CAAC,CAAC,CAAC,CA+F5B;;;;;0BA3GY,CAAC,IACD,CAAC,GAAG;IAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;CAAE"}
|