sprae 12.4.0 → 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,11 +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)))(),
109
-
110
- /** @deprecated Use .delay instead */
111
- tick: (fn) => (console.warn('Deprecated'), (e) => (queueMicrotask(() => fn(e)))),
112
- /** @deprecated Use .throttle-raf instead */
113
- raf: (fn) => (console.warn('Deprecated'), (e) => requestAnimationFrame(() => 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)),
114
112
 
115
113
  /** Calls handler only once. */
116
114
  once: (fn, _done, _fn) => (_fn = (e) => !_done && (_done = 1, fn(e)), _fn.once = true, _fn),
@@ -134,8 +132,6 @@ Object.assign(modifier, {
134
132
  prevent: (fn) => (e) => (e?.preventDefault(), fn(e)),
135
133
  /** Calls stopPropagation() or stopImmediatePropagation() (with -immediate). */
136
134
  stop: (fn, _how) => (e) => (_how?.[0] === 'i' ? e?.stopImmediatePropagation() : e?.stopPropagation(), fn(e)),
137
- /** @deprecated Use .stop-immediate instead */
138
- immediate: (fn) => (console.warn('Deprecated'), (e) => (e?.stopImmediatePropagation(), fn(e))),
139
135
  /** Sets passive option for event listener. */
140
136
  passive: fn => (fn.passive = true, fn),
141
137
  /** Sets capture option for event listener. */
@@ -218,47 +214,10 @@ sprae.modifier = modifier
218
214
  * Disposes a spraed element, cleaning up all effects and state.
219
215
  * @param {Element} el - Element to dispose
220
216
  */
221
- sprae.dispose = (el) => el[_dispose]?.()
222
-
223
-
224
- /**
225
- * Auto-initializes sprae on dynamically added elements.
226
- * Uses MutationObserver to detect new DOM nodes and apply directives.
227
- *
228
- * @param {Element} [root=document.body] - Root element to observe
229
- * @param {Object} [values] - Initial state values
230
- * @returns {Object} The reactive state object
231
- *
232
- * @example
233
- * ```js
234
- * // Auto-init on page load
235
- * sprae.start(document.body, { count: 0 })
236
- * ```
237
- */
238
- const start = sprae.start = (root = document.body, values) => {
239
- const state = store(values)
240
- sprae(root, state);
241
- const mo = new MutationObserver(mutations => {
242
- for (const m of mutations) {
243
- for (const el of m.addedNodes) {
244
- // el can be spraed or removed by subsprae (like within :each/:if)
245
- if (el.nodeType === 1 && el[_state] === undefined && root.contains(el)) {
246
- // even if element has no spraeable attrs, some of its children can have
247
- root[_add](el)
248
- }
249
- }
250
- for (const el of m.removedNodes) el.nodeType === 1 && el[_dispose]?.()
251
- }
252
- });
253
- mo.observe(root, { childList: true, subtree: true });
254
- return state
255
- }
256
-
217
+ const dispose = sprae.dispose = (el) => el[_dispose]?.()
257
218
 
258
- /** Package version (injected by bundler) */
259
- sprae.version = "[VI]{{inject}}[/VI]"
260
219
 
261
- const dispose = sprae.dispose
220
+ sprae.start = start
262
221
 
263
222
  export default sprae
264
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;AAuOxD,6BAVH,OAAO,qBA2BjB;oBAtPuH,WAAW;yBAAX,WAAW;yBAAX,WAAW;AA4PnI,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"}