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/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
- // if planned count is same as actual count - plan new update, else update right away
76
- change.value == count ? (trigger()) : (count = change.value, _out = evaluate(state, update)),
77
- out
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) return (signals[k] ? signals[k].valueOf() : signals[k])
65
- return parent ? parent[k] : (typeof globalThis[k] === 'function' && !globalThis[k].prototype ? globalThis[k].bind(globalThis) : globalThis[k])
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
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../core.js"],"names":[],"mappings":"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"}
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,CAgBtB"}
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,CAyChC"}
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
- export function start(root?: Element, values?: any): any;
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 const dispose: any;
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
@@ -1 +1 @@
1
- {"version":3,"file":"sprae.d.ts","sourceRoot":"","sources":["../sprae.js"],"names":[],"mappings":";kBAQwH,WAAW;kBAHjH,YAAY;uBAC6B,WAAW;uBAAX,WAAW;yBAAX,WAAW;sBAAX,WAAW;0BAAX,WAAW;AAgOxD,6BAVH,OAAO,qBA2BjB;oBA/OuH,WAAW;yBAAX,WAAW;yBAAX,WAAW;AAqPnI,0BAA6B"}
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"}
@@ -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,CA0F5B;;;;;0BAtGY,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"}
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"}