sprae 9.1.1 → 10.0.1

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/dist/sprae.js CHANGED
@@ -4,75 +4,189 @@ var __export = (target, all) => {
4
4
  __defProp(target, name, { get: all[name], enumerable: true });
5
5
  };
6
6
 
7
- // core.js
8
- var _dispose = Symbol.dispose ||= Symbol("dispose");
9
- var SPRAE = `\u2234`;
7
+ // signal.js
10
8
  var signal;
11
9
  var effect;
10
+ var untracked;
12
11
  var batch;
13
12
  var computed;
14
- var untracked;
15
- var directive = {};
16
- var memo = /* @__PURE__ */ new WeakMap();
17
- function sprae(container, values) {
18
- if (!container.children)
19
- return;
20
- if (memo.has(container)) {
21
- const [state2, effects2] = memo.get(container);
22
- for (let k in values) {
23
- state2[k] = values[k];
13
+ function use(s) {
14
+ signal = s.signal;
15
+ effect = s.effect;
16
+ computed = s.computed;
17
+ batch = s.batch || ((fn) => fn());
18
+ untracked = s.untracked || batch;
19
+ }
20
+
21
+ // store.js
22
+ var _signals = Symbol("signals");
23
+ var _change = Symbol("length");
24
+ function store(values, signals) {
25
+ if (!values)
26
+ return values;
27
+ if (values[_signals] && !signals)
28
+ return values;
29
+ if (Array.isArray(values))
30
+ return list(values);
31
+ if (values.constructor !== Object)
32
+ return values;
33
+ let _len = signal(Object.values(values).length);
34
+ signals ||= {};
35
+ const state = new Proxy(signals, {
36
+ get: (_, key) => key === _change ? _len : key === _signals ? signals : signals[key]?.valueOf(),
37
+ set: (_, key, v, s) => (s = signals[key], set(signals, key, v), s || ++_len.value),
38
+ deleteProperty: (_, key) => del(signals, key) && _len.value--,
39
+ ownKeys() {
40
+ _len.value;
41
+ return Reflect.ownKeys(signals);
24
42
  }
25
- untracked(() => {
26
- for (let fx of effects2)
27
- fx();
28
- });
43
+ });
44
+ if (values[_signals])
45
+ for (let key in values)
46
+ signals[key] = values[_signals][key];
47
+ else
48
+ for (let key in values) {
49
+ const desc = Object.getOwnPropertyDescriptor(values, key);
50
+ if (desc?.get) {
51
+ (signals[key] = computed(desc.get.bind(state)))._set = desc.set?.bind(state);
52
+ } else {
53
+ signals[key] = null;
54
+ set(signals, key, values[key]);
55
+ }
56
+ }
57
+ return state;
58
+ }
59
+ function list(values) {
60
+ let lastProp;
61
+ if (values[_signals])
62
+ return values;
63
+ let _len = signal(values.length), signals = Array(values.length).fill(null);
64
+ const state = new Proxy(signals, {
65
+ get(_, key) {
66
+ if (key === _change)
67
+ return _len;
68
+ if (key === _signals)
69
+ return signals;
70
+ if (key === "length")
71
+ return Array.prototype[lastProp] ? _len.peek() : _len.value;
72
+ lastProp = key;
73
+ if (signals[key])
74
+ return signals[key].valueOf();
75
+ if (key < signals.length)
76
+ return (signals[key] = signal(store(values[key]))).value;
77
+ },
78
+ set(_, key, v) {
79
+ if (key === "length") {
80
+ for (let i = v, l = signals.length; i < l; i++)
81
+ delete state[i];
82
+ _len.value = signals.length = v;
83
+ return true;
84
+ }
85
+ set(signals, key, v);
86
+ if (key >= _len.peek())
87
+ _len.value = signals.length = Number(key) + 1;
88
+ return true;
89
+ },
90
+ deleteProperty: (_, key) => (del(signals, key), true)
91
+ });
92
+ return state;
93
+ }
94
+ function set(signals, key, v) {
95
+ let s = signals[key];
96
+ if (!s) {
97
+ signals[key] = s = v?.peek ? v : signal(store(v));
98
+ } else if (v === s.peek())
99
+ ;
100
+ else if (s._set)
101
+ s._set(v);
102
+ else if (Array.isArray(v) && Array.isArray(s.peek())) {
103
+ const cur = s.peek();
104
+ if (cur[_change])
105
+ untracked(() => {
106
+ batch(() => {
107
+ let i = 0, l = v.length;
108
+ for (; i < l; i++)
109
+ cur[i] = v[i];
110
+ cur.length = l;
111
+ });
112
+ });
113
+ else {
114
+ s.value = v;
115
+ }
116
+ } else {
117
+ s.value = store(v);
29
118
  }
30
- const state = values || {};
31
- const effects = [];
32
- const init = (el, parent = el.parentNode) => {
33
- if (el.attributes) {
34
- for (let i = 0; i < el.attributes.length; ) {
35
- let attr2 = el.attributes[i];
36
- if (attr2.name[0] === ":") {
37
- el.removeAttribute(attr2.name);
38
- let names = attr2.name.slice(1).split(":");
39
- for (let name of names) {
40
- let dir = directive[name] || directive.default;
41
- let evaluate = (dir.parse || parse)(attr2.value, parse);
42
- let update = dir(el, evaluate, state, name);
43
- if (update) {
44
- update[_dispose] = effect(update);
45
- effects.push(update);
46
- }
47
- }
48
- if (memo.has(el))
49
- return;
50
- if (el.parentNode !== parent)
51
- return false;
52
- } else
53
- i++;
119
+ }
120
+ function del(signals, key) {
121
+ const s = signals[key];
122
+ if (s) {
123
+ const del2 = s[Symbol.dispose];
124
+ if (del2)
125
+ delete s[Symbol.dispose];
126
+ delete signals[key];
127
+ del2?.();
128
+ return true;
129
+ }
130
+ }
131
+
132
+ // core.js
133
+ var _dispose = Symbol.dispose ||= Symbol("dispose");
134
+ var SPRAE = `\u2234`;
135
+ var directive = {};
136
+ var memo = /* @__PURE__ */ new WeakMap();
137
+ function sprae(els, values) {
138
+ let state;
139
+ if (!els?.[Symbol.iterator])
140
+ els = [els];
141
+ for (let el of els) {
142
+ if (el?.children) {
143
+ if (memo.has(el)) {
144
+ Object.assign(memo.get(el), values);
145
+ } else {
146
+ state ||= store(values || {});
147
+ init(el, state);
148
+ if (!memo.has(el))
149
+ memo.set(el, state);
54
150
  }
55
151
  }
56
- for (let i = 0, child; child = el.children[i]; i++) {
57
- if (init(child, el) === false)
58
- i--;
152
+ }
153
+ ;
154
+ return state;
155
+ }
156
+ function init(el, state, parent = el.parentNode, effects = []) {
157
+ if (el.attributes) {
158
+ for (let i = 0; i < el.attributes.length; ) {
159
+ let attr2 = el.attributes[i];
160
+ if (attr2.name[0] === ":") {
161
+ el.removeAttribute(attr2.name);
162
+ let names = attr2.name.slice(1).split(":");
163
+ for (let name of names) {
164
+ let dir = directive[name] || directive.default;
165
+ let evaluate = (dir.parse || parse)(attr2.value, parse);
166
+ let dispose = dir(el, evaluate, state, name);
167
+ if (dispose)
168
+ effects.push(dispose);
169
+ }
170
+ if (memo.has(el))
171
+ return;
172
+ if (el.parentNode !== parent)
173
+ return;
174
+ } else
175
+ i++;
59
176
  }
60
- };
61
- init(container);
62
- if (memo.has(container))
63
- return state;
64
- memo.set(container, [state, effects]);
65
- container.classList?.add(SPRAE);
66
- container[_dispose] = () => {
177
+ }
178
+ for (let child of [...el.children])
179
+ init(child, state, el);
180
+ el.classList?.add(SPRAE);
181
+ el[_dispose] = () => {
67
182
  while (effects.length)
68
- effects.pop()[_dispose]();
69
- container.classList.remove(SPRAE);
70
- memo.delete(container);
71
- let els = container.getElementsByClassName(SPRAE);
183
+ effects.pop()();
184
+ el.classList.remove(SPRAE);
185
+ memo.delete(el);
186
+ let els = el.getElementsByClassName(SPRAE);
72
187
  while (els.length)
73
188
  els[0][_dispose]?.();
74
189
  };
75
- return state;
76
190
  }
77
191
  var evalMemo = {};
78
192
  var parse = (expr, dir, fn) => {
@@ -87,20 +201,17 @@ ${dir}${expr ? `="${expr}"
87
201
 
88
202
  ` : ""}`, expr });
89
203
  }
90
- fn.expr = expr;
91
204
  return evalMemo[expr] = fn;
92
205
  };
93
206
  var compile;
94
- var swap;
95
207
  sprae.use = (s) => {
96
- s.signal && (signal = s.signal, effect = s.effect, computed = s.computed, batch = s.batch || ((fn) => fn()), untracked = s.untracked || batch);
97
- s.swap && (swap = s.swap);
208
+ s.signal && use(s);
98
209
  s.compile && (compile = s.compile);
99
210
  };
100
211
 
101
- // signal.js
102
- var signal_exports = {};
103
- __export(signal_exports, {
212
+ // node_modules/ulive/dist/ulive.es.js
213
+ var ulive_es_exports = {};
214
+ __export(ulive_es_exports, {
104
215
  batch: () => batch2,
105
216
  computed: () => computed2,
106
217
  effect: () => effect2,
@@ -108,6 +219,7 @@ __export(signal_exports, {
108
219
  untracked: () => untracked2
109
220
  });
110
221
  var current;
222
+ var batched;
111
223
  var signal2 = (v, s, obs = /* @__PURE__ */ new Set()) => (s = {
112
224
  get value() {
113
225
  current?.deps.push(obs.add(current));
@@ -118,24 +230,24 @@ var signal2 = (v, s, obs = /* @__PURE__ */ new Set()) => (s = {
118
230
  return;
119
231
  v = val;
120
232
  for (let sub of obs)
121
- sub(val);
233
+ batched ? batched.add(sub) : sub();
122
234
  },
123
235
  peek() {
124
236
  return v;
125
237
  }
126
238
  }, s.toJSON = s.then = s.toString = s.valueOf = () => s.value, s);
127
- var effect2 = (fn, teardown, run, deps) => (run = (prev) => {
239
+ var effect2 = (fn, teardown, fx, deps) => (fx = (prev) => {
128
240
  teardown?.call?.();
129
- prev = current, current = run;
241
+ prev = current, current = fx;
130
242
  try {
131
243
  teardown = fn();
132
244
  } finally {
133
245
  current = prev;
134
246
  }
135
- }, deps = run.deps = [], run(), (dep) => {
247
+ }, deps = fx.deps = [], fx(), (dep) => {
136
248
  teardown?.call?.();
137
249
  while (dep = deps.pop())
138
- dep.delete(run);
250
+ dep.delete(fx);
139
251
  });
140
252
  var computed2 = (fn, s = signal2(), c, e) => (c = {
141
253
  get value() {
@@ -144,11 +256,25 @@ var computed2 = (fn, s = signal2(), c, e) => (c = {
144
256
  },
145
257
  peek: s.peek
146
258
  }, c.toJSON = c.then = c.toString = c.valueOf = () => c.value, c);
147
- var batch2 = (fn) => fn();
259
+ var batch2 = (fn) => {
260
+ let fxs = batched;
261
+ if (!fxs)
262
+ batched = /* @__PURE__ */ new Set();
263
+ try {
264
+ fn();
265
+ } finally {
266
+ if (!fxs) {
267
+ fxs = batched;
268
+ batched = null;
269
+ for (const fx of fxs)
270
+ fx();
271
+ }
272
+ }
273
+ };
148
274
  var untracked2 = (fn, prev, v) => (prev = current, current = null, v = fn(), current = prev, v);
149
275
 
150
276
  // node_modules/swapdom/deflate.js
151
- var swap2 = (parent, a, b, end = null, { remove, insert } = swap2) => {
277
+ var swap = (parent, a, b, end = null, { remove, insert } = swap) => {
152
278
  let i = 0, cur, next, bi, bidx = new Set(b);
153
279
  while (bi = a[i++])
154
280
  !bidx.has(bi) ? remove(bi, parent) : cur = cur || bi;
@@ -165,51 +291,75 @@ var swap2 = (parent, a, b, end = null, { remove, insert } = swap2) => {
165
291
  }
166
292
  return b;
167
293
  };
168
- swap2.insert = (a, b, parent) => parent.insertBefore(a, b);
169
- swap2.remove = (a, parent) => parent.removeChild(a);
170
- var deflate_default = swap2;
294
+ swap.insert = (a, b, parent) => parent.insertBefore(a, b);
295
+ swap.remove = (a, parent) => parent.removeChild(a);
296
+ var deflate_default = swap;
171
297
 
172
298
  // directive/each.js
173
299
  var _each = Symbol(":each");
174
- var keys = {};
175
- var _key = Symbol("key");
176
- (directive.each = (tpl, [itemVar, idxVar, evaluate], state) => {
177
- const holder = tpl[_each] = document.createTextNode(""), parent = tpl.parentNode;
300
+ directive.each = (tpl, [itemVar, idxVar, evaluate], state) => {
301
+ const holder = tpl[_each] = document.createTextNode("");
178
302
  tpl.replaceWith(holder);
179
- const elCache = /* @__PURE__ */ new WeakMap(), stateCache = /* @__PURE__ */ new WeakMap();
180
- let cur = [];
181
- const remove = (el) => {
182
- el.remove();
183
- el[Symbol.dispose]?.();
184
- if (el[_key]) {
185
- elCache.delete(el[_key]);
186
- stateCache.delete(el[_key]);
187
- }
188
- }, { insert, replace } = swap;
189
- const options = { remove, insert, replace };
190
- return () => {
191
- let items = evaluate(state)?.valueOf(), els = [];
192
- if (typeof items === "number")
193
- items = Array.from({ length: items }, (_, i) => i);
194
- const count = /* @__PURE__ */ new WeakMap();
195
- for (let idx in items) {
196
- let el, item = items[idx], key = item?.key ?? item?.id ?? item ?? idx;
197
- key = Object(key) !== key ? keys[key] ||= Object(key) : item;
198
- if (key == null || count.has(key) || tpl.content)
199
- el = (tpl.content || tpl).cloneNode(true);
200
- else
201
- count.set(key, 1), (el = elCache.get(key) || (elCache.set(key, tpl.cloneNode(true)), elCache.get(key)))[_key] = key;
202
- let substate = stateCache.get(key) || (stateCache.set(key, Object.create(state, { [idxVar]: { value: idx } })), stateCache.get(key));
203
- substate[itemVar] = item;
204
- sprae(el, substate);
205
- if (el.nodeType === 11)
206
- els.push(...el.childNodes);
207
- else
208
- els.push(el);
209
- }
210
- swap(parent, cur, cur = els, holder, options);
303
+ let cur, keys2, prevl = 0;
304
+ const items = computed(() => {
305
+ keys2 = null;
306
+ let items2 = evaluate(state);
307
+ if (typeof items2 === "number")
308
+ items2 = Array.from({ length: items2 }, (_, i) => i + 1);
309
+ if (items2?.constructor === Object)
310
+ keys2 = Object.keys(items2), items2 = Object.values(items2);
311
+ return items2 || [];
312
+ });
313
+ const update = () => {
314
+ untracked(() => {
315
+ let i = 0, newItems = items.value, newl = newItems.length;
316
+ if (cur && !cur[_change]) {
317
+ for (let s of cur[_signals] || []) {
318
+ s[Symbol.dispose]();
319
+ }
320
+ cur = null, prevl = 0;
321
+ }
322
+ if (newl < prevl) {
323
+ cur.length = newl;
324
+ } else {
325
+ if (!cur) {
326
+ cur = newItems;
327
+ } else {
328
+ for (; i < prevl; i++) {
329
+ cur[i] = newItems[i];
330
+ }
331
+ }
332
+ for (; i < newl; i++) {
333
+ cur[i] = newItems[i];
334
+ let idx = i, scope = Object.create(state, {
335
+ [itemVar]: { get() {
336
+ return cur[idx];
337
+ } },
338
+ [idxVar]: { value: keys2 ? keys2[idx] : idx }
339
+ }), el = (tpl.content || tpl).cloneNode(true), els = tpl.content ? [...el.childNodes] : [el];
340
+ holder.before(el);
341
+ sprae(els, scope);
342
+ ((cur[_signals] ||= [])[i] ||= {})[Symbol.dispose] = () => {
343
+ for (let el2 of els)
344
+ el2[Symbol.dispose](), el2.remove();
345
+ };
346
+ }
347
+ }
348
+ prevl = newl;
349
+ });
211
350
  };
212
- }).parse = (expr, parse2) => {
351
+ let planned = 0;
352
+ return effect(() => {
353
+ if (!cur)
354
+ items.value[_change]?.value;
355
+ if (!planned) {
356
+ update();
357
+ queueMicrotask(() => (planned && update(), planned = 0));
358
+ } else
359
+ planned++;
360
+ });
361
+ };
362
+ directive.each.parse = (expr, parse2) => {
213
363
  let [leftSide, itemsExpr] = expr.split(/\s+in\s+/);
214
364
  let [itemVar, idxVar = "$"] = leftSide.split(/\s*,\s*/);
215
365
  return [itemVar, idxVar, parse2(itemsExpr)];
@@ -232,35 +382,35 @@ directive.if = (ifEl, evaluate, state) => {
232
382
  next.remove(), elses = next.content ? [...next.content.childNodes] : [next];
233
383
  } else
234
384
  elses = none;
235
- return () => {
236
- const newEls = evaluate(state)?.valueOf() ? ifs : ifEl[_prevIf] ? none : elses;
385
+ return effect(() => {
386
+ const newEls = evaluate(state) ? ifs : ifEl[_prevIf] ? none : elses;
237
387
  if (next)
238
388
  next[_prevIf] = newEls === ifs;
239
389
  if (cur != newEls) {
240
390
  if (cur[0]?.[_each])
241
391
  cur = [cur[0][_each]];
242
- swap(parent, cur, cur = newEls, holder);
243
392
  for (let el of cur)
244
- sprae(el, state);
393
+ el.remove();
394
+ cur = newEls;
395
+ for (let el of cur)
396
+ parent.insertBefore(el, holder), sprae(el, state);
245
397
  }
246
- };
398
+ });
247
399
  };
248
400
 
249
401
  // directive/default.js
250
402
  directive.default = (el, evaluate, state, name) => {
251
- let evt = name.startsWith("on") && name.slice(2);
252
- if (evt) {
253
- let off;
254
- return () => (off?.(), off = on(el, evt, evaluate(state)?.valueOf()));
255
- }
256
- return () => {
257
- let value = evaluate(state)?.valueOf();
258
- if (name)
259
- attr(el, name, ipol(value, state));
260
- else
261
- for (let key in value)
262
- attr(el, dashcase(key), ipol(value[key], state));
263
- };
403
+ let evt = name.startsWith("on") && name.slice(2), off;
404
+ return effect(
405
+ evt ? () => (off?.(), off = on(el, evt, evaluate(state))) : () => {
406
+ let value = evaluate(state);
407
+ if (name)
408
+ attr(el, name, ipol(value, state));
409
+ else
410
+ for (let key in value)
411
+ attr(el, dashcase(key), ipol(value[key], state));
412
+ }
413
+ );
264
414
  };
265
415
  var on = (el, e, fn = () => {
266
416
  }) => {
@@ -315,22 +465,22 @@ var mods = {
315
465
  return true;
316
466
  },
317
467
  self: (ctx) => (e) => e.target === ctx.target,
318
- ctrl: (_, ...param) => (e) => keys2.ctrl(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
319
- shift: (_, ...param) => (e) => keys2.shift(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
320
- alt: (_, ...param) => (e) => keys2.alt(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
321
- meta: (_, ...param) => (e) => keys2.meta(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
322
- arrow: () => keys2.arrow,
323
- enter: () => keys2.enter,
324
- escape: () => keys2.escape,
325
- tab: () => keys2.tab,
326
- space: () => keys2.space,
327
- backspace: () => keys2.backspace,
328
- delete: () => keys2.delete,
329
- digit: () => keys2.digit,
330
- letter: () => keys2.letter,
331
- character: () => keys2.character
468
+ ctrl: (_, ...param) => (e) => keys.ctrl(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
469
+ shift: (_, ...param) => (e) => keys.shift(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
470
+ alt: (_, ...param) => (e) => keys.alt(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
471
+ meta: (_, ...param) => (e) => keys.meta(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
472
+ arrow: () => keys.arrow,
473
+ enter: () => keys.enter,
474
+ escape: () => keys.escape,
475
+ tab: () => keys.tab,
476
+ space: () => keys.space,
477
+ backspace: () => keys.backspace,
478
+ delete: () => keys.delete,
479
+ digit: () => keys.digit,
480
+ letter: () => keys.letter,
481
+ character: () => keys.character
332
482
  };
333
- var keys2 = {
483
+ var keys = {
334
484
  ctrl: (e) => e.ctrlKey || e.key === "Control" || e.key === "Ctrl",
335
485
  shift: (e) => e.shiftKey || e.key === "Shift",
336
486
  alt: (e) => e.altKey || e.key === "Alt",
@@ -382,24 +532,28 @@ var dashcase = (str) => {
382
532
  return str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, (match) => "-" + match.toLowerCase());
383
533
  };
384
534
  var ipol = (v, state) => {
385
- return v?.replace ? v.replace(/\$<([^>]+)>/g, (match, field) => state[field]?.valueOf?.() ?? "") : v;
535
+ return v?.replace ? v.replace(/\$<([^>]+)>/g, (match, field) => state[field] ?? "") : v;
386
536
  };
387
537
 
388
538
  // directive/ref.js
389
- (directive.ref = (el, expr, state) => {
390
- let prev;
391
- return () => {
392
- if (prev)
393
- delete state[prev];
394
- state[prev = ipol(expr, state)] = el;
395
- };
396
- }).parse = (expr) => expr;
539
+ directive.ref = (el, expr, state) => {
540
+ Object.defineProperty(state, ipol(expr, state), { value: el });
541
+ };
542
+ directive.ref.parse = (expr) => expr;
397
543
 
398
- // directive/scope.js
399
- directive.scope = (el, evaluate, rootState) => {
400
- return () => {
401
- sprae(el, { ...rootState, ...evaluate(rootState)?.valueOf?.() || {} });
402
- };
544
+ // directive/with.js
545
+ directive.with = (el, evaluate, rootState) => {
546
+ let state, values;
547
+ return effect(() => {
548
+ values = evaluate(rootState);
549
+ Object.assign(state ||= sprae(
550
+ el,
551
+ store(
552
+ values,
553
+ Object.create(rootState[_signals])
554
+ )
555
+ ), values);
556
+ });
403
557
  };
404
558
 
405
559
  // directive/html.js
@@ -416,25 +570,25 @@ directive.html = (el, evaluate, state) => {
416
570
  directive.text = (el, evaluate, state) => {
417
571
  if (el.content)
418
572
  el.replaceWith(el = document.createTextNode(""));
419
- return () => {
420
- let value = evaluate(state)?.valueOf();
573
+ return effect(() => {
574
+ let value = evaluate(state);
421
575
  el.textContent = value == null ? "" : value;
422
- };
576
+ });
423
577
  };
424
578
 
425
579
  // directive/class.js
426
580
  directive.class = (el, evaluate, state) => {
427
581
  let cur = /* @__PURE__ */ new Set();
428
- return () => {
582
+ return effect(() => {
429
583
  let v = evaluate(state);
430
584
  let clsx = /* @__PURE__ */ new Set();
431
585
  if (v) {
432
586
  if (typeof v === "string")
433
- ipol(v?.valueOf?.(), state).split(" ").map((cls) => clsx.add(cls));
587
+ ipol(v, state).split(" ").map((cls) => clsx.add(cls));
434
588
  else if (Array.isArray(v))
435
- v.map((v2) => (v2 = ipol(v2?.valueOf?.(), state)) && clsx.add(v2));
589
+ v.map((v2) => (v2 = ipol(v2, state)) && clsx.add(v2));
436
590
  else
437
- Object.entries(v).map(([k, v2]) => v2?.valueOf?.() && clsx.add(k));
591
+ Object.entries(v).map(([k, v2]) => v2 && clsx.add(k));
438
592
  }
439
593
  for (let cls of cur)
440
594
  if (clsx.has(cls))
@@ -443,7 +597,7 @@ directive.class = (el, evaluate, state) => {
443
597
  el.classList.remove(cls);
444
598
  for (let cls of cur = clsx)
445
599
  el.classList.add(cls);
446
- };
600
+ });
447
601
  };
448
602
 
449
603
  // directive/style.js
@@ -451,8 +605,8 @@ directive.style = (el, evaluate, state) => {
451
605
  let initStyle = el.getAttribute("style") || "";
452
606
  if (!initStyle.endsWith(";"))
453
607
  initStyle += "; ";
454
- return () => {
455
- let v = evaluate(state)?.valueOf();
608
+ return effect(() => {
609
+ let v = evaluate(state);
456
610
  if (typeof v === "string")
457
611
  el.setAttribute("style", initStyle + ipol(v, state));
458
612
  else {
@@ -460,7 +614,7 @@ directive.style = (el, evaluate, state) => {
460
614
  for (let k in v)
461
615
  el.style.setProperty(k, ipol(v[k], state));
462
616
  }
463
- };
617
+ });
464
618
  };
465
619
 
466
620
  // directive/value.js
@@ -472,27 +626,19 @@ directive.value = (el, evaluate, state) => {
472
626
  el.value = value;
473
627
  el.selectedOptions[0]?.setAttribute("selected", "");
474
628
  } : (value) => el.value = value;
475
- return () => update(evaluate(state)?.valueOf?.());
629
+ return effect(() => update(evaluate(state)));
476
630
  };
477
631
 
478
632
  // directive/fx.js
479
633
  directive.fx = (el, evaluate, state) => {
480
- return () => evaluate(state);
634
+ return effect(() => evaluate(state));
481
635
  };
482
636
 
483
637
  // sprae.js
484
- sprae.use(signal_exports);
638
+ sprae.use(ulive_es_exports);
485
639
  sprae.use({ compile: (expr) => sprae.constructor(`__scope`, `with (__scope) { return ${expr} };`) });
486
640
  sprae.use({ swap: deflate_default });
487
641
  var sprae_default = sprae;
488
642
  export {
489
- batch,
490
- compile,
491
- computed,
492
- sprae_default as default,
493
- directive,
494
- effect,
495
- signal,
496
- swap,
497
- untracked
643
+ sprae_default as default
498
644
  };