sprae 6.1.1 → 7.0.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/sprae.js CHANGED
@@ -1,43 +1,385 @@
1
- // src/util.js
2
- var queueMicrotask = Promise.prototype.then.bind(Promise.resolve());
3
- var refs = /* @__PURE__ */ new WeakMap();
4
- var set = (value) => {
5
- const ref = new WeakRef(value);
6
- refs.set(value, ref);
7
- return ref;
1
+ // node_modules/@preact/signals-core/dist/signals-core.module.js
2
+ function i() {
3
+ throw new Error("Cycle detected");
4
+ }
5
+ var t = Symbol.for("preact-signals");
6
+ function r() {
7
+ if (!(v > 1)) {
8
+ var i2, t2 = false;
9
+ while (void 0 !== f) {
10
+ var r2 = f;
11
+ f = void 0;
12
+ e++;
13
+ while (void 0 !== r2) {
14
+ var n2 = r2.o;
15
+ r2.o = void 0;
16
+ r2.f &= -3;
17
+ if (!(8 & r2.f) && l(r2))
18
+ try {
19
+ r2.c();
20
+ } catch (r3) {
21
+ if (!t2) {
22
+ i2 = r3;
23
+ t2 = true;
24
+ }
25
+ }
26
+ r2 = n2;
27
+ }
28
+ }
29
+ e = 0;
30
+ v--;
31
+ if (t2)
32
+ throw i2;
33
+ } else
34
+ v--;
35
+ }
36
+ function n(i2) {
37
+ if (v > 0)
38
+ return i2();
39
+ v++;
40
+ try {
41
+ return i2();
42
+ } finally {
43
+ r();
44
+ }
45
+ }
46
+ var o = void 0;
47
+ var f = void 0;
48
+ var v = 0;
49
+ var e = 0;
50
+ var u = 0;
51
+ function c(i2) {
52
+ if (void 0 !== o) {
53
+ var t2 = i2.n;
54
+ if (void 0 === t2 || t2.t !== o) {
55
+ t2 = { i: 0, S: i2, p: o.s, n: void 0, t: o, e: void 0, x: void 0, r: t2 };
56
+ if (void 0 !== o.s)
57
+ o.s.n = t2;
58
+ o.s = t2;
59
+ i2.n = t2;
60
+ if (32 & o.f)
61
+ i2.S(t2);
62
+ return t2;
63
+ } else if (-1 === t2.i) {
64
+ t2.i = 0;
65
+ if (void 0 !== t2.n) {
66
+ t2.n.p = t2.p;
67
+ if (void 0 !== t2.p)
68
+ t2.p.n = t2.n;
69
+ t2.p = o.s;
70
+ t2.n = void 0;
71
+ o.s.n = t2;
72
+ o.s = t2;
73
+ }
74
+ return t2;
75
+ }
76
+ }
77
+ }
78
+ function d(i2) {
79
+ this.v = i2;
80
+ this.i = 0;
81
+ this.n = void 0;
82
+ this.t = void 0;
83
+ }
84
+ d.prototype.brand = t;
85
+ d.prototype.h = function() {
86
+ return true;
8
87
  };
9
- var get = (value) => refs.get(value) || set(value);
10
- var WeakishMap = class extends Map {
11
- #registry = new FinalizationRegistry((key) => super.delete(key));
12
- get size() {
13
- return [...this].length;
88
+ d.prototype.S = function(i2) {
89
+ if (this.t !== i2 && void 0 === i2.e) {
90
+ i2.x = this.t;
91
+ if (void 0 !== this.t)
92
+ this.t.e = i2;
93
+ this.t = i2;
14
94
  }
15
- constructor(entries = []) {
16
- super();
17
- for (const [key, value] of entries)
18
- this.set(key, value);
95
+ };
96
+ d.prototype.U = function(i2) {
97
+ if (void 0 !== this.t) {
98
+ var t2 = i2.e, r2 = i2.x;
99
+ if (void 0 !== t2) {
100
+ t2.x = r2;
101
+ i2.e = void 0;
102
+ }
103
+ if (void 0 !== r2) {
104
+ r2.e = t2;
105
+ i2.x = void 0;
106
+ }
107
+ if (i2 === this.t)
108
+ this.t = r2;
19
109
  }
20
- get(key) {
21
- return super.get(key)?.deref();
110
+ };
111
+ d.prototype.subscribe = function(i2) {
112
+ var t2 = this;
113
+ return O(function() {
114
+ var r2 = t2.value, n2 = 32 & this.f;
115
+ this.f &= -33;
116
+ try {
117
+ i2(r2);
118
+ } finally {
119
+ this.f |= n2;
120
+ }
121
+ });
122
+ };
123
+ d.prototype.valueOf = function() {
124
+ return this.value;
125
+ };
126
+ d.prototype.toString = function() {
127
+ return this.value + "";
128
+ };
129
+ d.prototype.toJSON = function() {
130
+ return this.value;
131
+ };
132
+ d.prototype.peek = function() {
133
+ return this.v;
134
+ };
135
+ Object.defineProperty(d.prototype, "value", { get: function() {
136
+ var i2 = c(this);
137
+ if (void 0 !== i2)
138
+ i2.i = this.i;
139
+ return this.v;
140
+ }, set: function(t2) {
141
+ if (o instanceof _)
142
+ !function() {
143
+ throw new Error("Computed cannot have side-effects");
144
+ }();
145
+ if (t2 !== this.v) {
146
+ if (e > 100)
147
+ i();
148
+ this.v = t2;
149
+ this.i++;
150
+ u++;
151
+ v++;
152
+ try {
153
+ for (var n2 = this.t; void 0 !== n2; n2 = n2.x)
154
+ n2.t.N();
155
+ } finally {
156
+ r();
157
+ }
22
158
  }
23
- set(key, value) {
24
- let ref = super.get(key);
25
- if (ref)
26
- this.#registry.unregister(ref);
27
- ref = get(value);
28
- this.#registry.register(value, key, ref);
29
- return super.set(key, ref);
159
+ } });
160
+ function a(i2) {
161
+ return new d(i2);
162
+ }
163
+ function l(i2) {
164
+ for (var t2 = i2.s; void 0 !== t2; t2 = t2.n)
165
+ if (t2.S.i !== t2.i || !t2.S.h() || t2.S.i !== t2.i)
166
+ return true;
167
+ return false;
168
+ }
169
+ function y(i2) {
170
+ for (var t2 = i2.s; void 0 !== t2; t2 = t2.n) {
171
+ var r2 = t2.S.n;
172
+ if (void 0 !== r2)
173
+ t2.r = r2;
174
+ t2.S.n = t2;
175
+ t2.i = -1;
176
+ if (void 0 === t2.n) {
177
+ i2.s = t2;
178
+ break;
179
+ }
180
+ }
181
+ }
182
+ function w(i2) {
183
+ var t2 = i2.s, r2 = void 0;
184
+ while (void 0 !== t2) {
185
+ var n2 = t2.p;
186
+ if (-1 === t2.i) {
187
+ t2.S.U(t2);
188
+ if (void 0 !== n2)
189
+ n2.n = t2.n;
190
+ if (void 0 !== t2.n)
191
+ t2.n.p = n2;
192
+ } else
193
+ r2 = t2;
194
+ t2.S.n = t2.r;
195
+ if (void 0 !== t2.r)
196
+ t2.r = void 0;
197
+ t2 = n2;
198
+ }
199
+ i2.s = r2;
200
+ }
201
+ function _(i2) {
202
+ d.call(this, void 0);
203
+ this.x = i2;
204
+ this.s = void 0;
205
+ this.g = u - 1;
206
+ this.f = 4;
207
+ }
208
+ (_.prototype = new d()).h = function() {
209
+ this.f &= -3;
210
+ if (1 & this.f)
211
+ return false;
212
+ if (32 == (36 & this.f))
213
+ return true;
214
+ this.f &= -5;
215
+ if (this.g === u)
216
+ return true;
217
+ this.g = u;
218
+ this.f |= 1;
219
+ if (this.i > 0 && !l(this)) {
220
+ this.f &= -2;
221
+ return true;
222
+ }
223
+ var i2 = o;
224
+ try {
225
+ y(this);
226
+ o = this;
227
+ var t2 = this.x();
228
+ if (16 & this.f || this.v !== t2 || 0 === this.i) {
229
+ this.v = t2;
230
+ this.f &= -17;
231
+ this.i++;
232
+ }
233
+ } catch (i3) {
234
+ this.v = i3;
235
+ this.f |= 16;
236
+ this.i++;
237
+ }
238
+ o = i2;
239
+ w(this);
240
+ this.f &= -2;
241
+ return true;
242
+ };
243
+ _.prototype.S = function(i2) {
244
+ if (void 0 === this.t) {
245
+ this.f |= 36;
246
+ for (var t2 = this.s; void 0 !== t2; t2 = t2.n)
247
+ t2.S.S(t2);
248
+ }
249
+ d.prototype.S.call(this, i2);
250
+ };
251
+ _.prototype.U = function(i2) {
252
+ if (void 0 !== this.t) {
253
+ d.prototype.U.call(this, i2);
254
+ if (void 0 === this.t) {
255
+ this.f &= -33;
256
+ for (var t2 = this.s; void 0 !== t2; t2 = t2.n)
257
+ t2.S.U(t2);
258
+ }
259
+ }
260
+ };
261
+ _.prototype.N = function() {
262
+ if (!(2 & this.f)) {
263
+ this.f |= 6;
264
+ for (var i2 = this.t; void 0 !== i2; i2 = i2.x)
265
+ i2.t.N();
266
+ }
267
+ };
268
+ _.prototype.peek = function() {
269
+ if (!this.h())
270
+ i();
271
+ if (16 & this.f)
272
+ throw this.v;
273
+ return this.v;
274
+ };
275
+ Object.defineProperty(_.prototype, "value", { get: function() {
276
+ if (1 & this.f)
277
+ i();
278
+ var t2 = c(this);
279
+ this.h();
280
+ if (void 0 !== t2)
281
+ t2.i = this.i;
282
+ if (16 & this.f)
283
+ throw this.v;
284
+ return this.v;
285
+ } });
286
+ function p(i2) {
287
+ return new _(i2);
288
+ }
289
+ function g(i2) {
290
+ var t2 = i2.u;
291
+ i2.u = void 0;
292
+ if ("function" == typeof t2) {
293
+ v++;
294
+ var n2 = o;
295
+ o = void 0;
296
+ try {
297
+ t2();
298
+ } catch (t3) {
299
+ i2.f &= -2;
300
+ i2.f |= 8;
301
+ b(i2);
302
+ throw t3;
303
+ } finally {
304
+ o = n2;
305
+ r();
306
+ }
307
+ }
308
+ }
309
+ function b(i2) {
310
+ for (var t2 = i2.s; void 0 !== t2; t2 = t2.n)
311
+ t2.S.U(t2);
312
+ i2.x = void 0;
313
+ i2.s = void 0;
314
+ g(i2);
315
+ }
316
+ function x(i2) {
317
+ if (o !== this)
318
+ throw new Error("Out-of-order effect");
319
+ w(this);
320
+ o = i2;
321
+ this.f &= -2;
322
+ if (8 & this.f)
323
+ b(this);
324
+ r();
325
+ }
326
+ function E(i2) {
327
+ this.x = i2;
328
+ this.u = void 0;
329
+ this.s = void 0;
330
+ this.o = void 0;
331
+ this.f = 32;
332
+ }
333
+ E.prototype.c = function() {
334
+ var i2 = this.S();
335
+ try {
336
+ if (8 & this.f)
337
+ return;
338
+ if (void 0 === this.x)
339
+ return;
340
+ var t2 = this.x();
341
+ if ("function" == typeof t2)
342
+ this.u = t2;
343
+ } finally {
344
+ i2();
30
345
  }
31
346
  };
347
+ E.prototype.S = function() {
348
+ if (1 & this.f)
349
+ i();
350
+ this.f |= 1;
351
+ this.f &= -9;
352
+ g(this);
353
+ y(this);
354
+ v++;
355
+ var t2 = o;
356
+ o = this;
357
+ return x.bind(this, t2);
358
+ };
359
+ E.prototype.N = function() {
360
+ if (!(2 & this.f)) {
361
+ this.f |= 2;
362
+ this.o = f;
363
+ f = this;
364
+ }
365
+ };
366
+ E.prototype.d = function() {
367
+ this.f |= 8;
368
+ if (!(1 & this.f))
369
+ b(this);
370
+ };
371
+ function O(i2) {
372
+ var t2 = new E(i2);
373
+ try {
374
+ t2.c();
375
+ } catch (i3) {
376
+ t2.d();
377
+ throw i3;
378
+ }
379
+ return t2.d.bind(t2);
380
+ }
32
381
 
33
- // src/state.js
34
- var currentFx;
35
- var batch = /* @__PURE__ */ new Set();
36
- var pendingUpdate;
37
- var targetFxs = /* @__PURE__ */ new WeakMap();
38
- var targetProxy = /* @__PURE__ */ new WeakMap();
39
- var proxyTarget = /* @__PURE__ */ new WeakMap();
40
- var _parent = Symbol("parent");
382
+ // src/state.signals-proxy.js
41
383
  var sandbox = {
42
384
  Array,
43
385
  Object,
@@ -49,149 +391,164 @@ var sandbox = {
49
391
  window,
50
392
  document,
51
393
  history,
52
- location
394
+ navigator,
395
+ location,
396
+ screen,
397
+ localStorage,
398
+ sessionStorage,
399
+ alert,
400
+ prompt,
401
+ confirm,
402
+ fetch,
403
+ performance,
404
+ setTimeout,
405
+ setInterval,
406
+ requestAnimationFrame
53
407
  };
54
- var handler = {
55
- has() {
56
- return true;
57
- },
58
- get(target, prop) {
59
- if (typeof prop === "symbol")
60
- return target[prop];
61
- if (!(prop in target))
62
- return target[_parent]?.[prop];
63
- if (prop in Object.prototype || Array.isArray(target) && prop in Array.prototype && prop !== "length")
64
- return target[prop];
65
- let value = target[prop];
66
- if (currentFx) {
67
- let propFxs = targetFxs.get(target);
68
- if (!propFxs)
69
- targetFxs.set(target, propFxs = {});
70
- if (!propFxs[prop])
71
- propFxs[prop] = [currentFx];
72
- else if (!propFxs[prop].includes(currentFx))
73
- propFxs[prop].push(currentFx);
74
- }
75
- if (value && value.constructor === Object || Array.isArray(value)) {
76
- let proxy = targetProxy.get(value);
77
- if (!proxy)
78
- targetProxy.set(value, proxy = new Proxy(value, handler));
79
- return proxy;
80
- }
81
- return value;
82
- },
83
- set(target, prop, value) {
84
- if (!(prop in target) && (target[_parent] && prop in target[_parent]))
85
- return target[_parent][prop] = value;
86
- if (!Array.isArray(target) && Object.is(target[prop], value))
408
+ var isObject = (v2) => v2?.constructor === Object;
409
+ var memo = /* @__PURE__ */ new WeakMap();
410
+ var lastProp;
411
+ function createState(values, parent) {
412
+ if (!isObject(values) && !Array.isArray(values))
413
+ return values;
414
+ if (memo.has(values) && !parent)
415
+ return values;
416
+ const _len = Array.isArray(values) && a(values.length), signals = parent ? Object.create(memo.get(parent = createState(parent))) : Array.isArray(values) ? [] : {}, state = new Proxy(signals, {
417
+ has() {
418
+ return true;
419
+ },
420
+ get(signals2, key) {
421
+ let v2;
422
+ if (_len && key === "length")
423
+ v2 = Array.prototype[lastProp] ? _len.peek() : _len.value;
424
+ else
425
+ v2 = (signals2[key] || initSignal(key))?.valueOf();
426
+ if (_len)
427
+ lastProp = key;
428
+ return v2;
429
+ },
430
+ set(signals2, key, v2) {
431
+ if (_len && key === "length")
432
+ _len.value = signals2.length = v2;
433
+ else {
434
+ const s = signals2[key] || initSignal(key);
435
+ if (!s)
436
+ signals2[key] = a(createState(v2?.valueOf()));
437
+ else if (s._set)
438
+ s._set(v2);
439
+ else
440
+ s.value = createState(v2?.valueOf());
441
+ }
442
+ if (_len)
443
+ lastProp = null;
87
444
  return true;
88
- target[prop] = value;
89
- let propFxs = targetFxs.get(target)?.[prop];
90
- if (propFxs)
91
- for (let fx2 of propFxs)
92
- batch.add(fx2);
93
- planUpdate();
94
- return true;
95
- },
96
- deleteProperty(target, prop) {
97
- target[prop] = void 0;
98
- delete target[prop];
99
- return true;
100
- }
101
- };
102
- var state = (obj, parent) => {
103
- if (targetProxy.has(obj))
104
- return targetProxy.get(obj);
105
- if (proxyTarget.has(obj))
106
- return obj;
107
- let proxy = new Proxy(obj, handler);
108
- targetProxy.set(obj, proxy);
109
- proxyTarget.set(proxy, obj);
110
- let descriptors = Object.getOwnPropertyDescriptors(obj);
111
- for (let name in descriptors) {
112
- let desc = descriptors[name];
113
- if (desc.get) {
114
- if (desc.get)
115
- desc.get = desc.get.bind(proxy), Object.defineProperty(obj, name, desc);
116
445
  }
446
+ });
447
+ for (let key in values) {
448
+ signals[key] = initSignal(key);
117
449
  }
118
- obj[_parent] = parent ? state(parent) : sandbox;
119
- return proxy;
120
- };
121
- var fx = (fn) => {
122
- const call = () => {
123
- let prev = currentFx;
124
- currentFx = call;
125
- fn();
126
- currentFx = prev;
127
- };
128
- call();
129
- return call;
130
- };
131
- var planUpdate = () => {
132
- if (!pendingUpdate) {
133
- pendingUpdate = true;
134
- queueMicrotask(() => {
135
- for (let fx2 of batch)
136
- fx2.call();
137
- batch.clear();
138
- pendingUpdate = false;
139
- });
450
+ function initSignal(key) {
451
+ if (values.hasOwnProperty(key)) {
452
+ const desc = Object.getOwnPropertyDescriptor(values, key);
453
+ if (desc?.get) {
454
+ (signals[key] = p(desc.get.bind(state)))._set = desc.set?.bind(state);
455
+ return signals[key];
456
+ }
457
+ return signals[key] = desc.value?.peek ? desc.value : a(createState(desc.value));
458
+ }
459
+ if (parent)
460
+ return parent[key];
461
+ if (sandbox.hasOwnProperty(key))
462
+ return sandbox[key];
140
463
  }
141
- };
464
+ memo.set(state, signals);
465
+ return state;
466
+ }
142
467
 
143
468
  // src/domdiff.js
144
- function domdiff_default(parent, a, b, before) {
469
+ function domdiff_default(parent, a2, b2, before) {
145
470
  const aIdx = /* @__PURE__ */ new Map();
146
471
  const bIdx = /* @__PURE__ */ new Map();
147
- let i;
472
+ let i2;
148
473
  let j;
149
- for (i = 0; i < a.length; i++) {
150
- aIdx.set(a[i], i);
474
+ for (i2 = 0; i2 < a2.length; i2++) {
475
+ aIdx.set(a2[i2], i2);
151
476
  }
152
- for (i = 0; i < b.length; i++) {
153
- bIdx.set(b[i], i);
477
+ for (i2 = 0; i2 < b2.length; i2++) {
478
+ bIdx.set(b2[i2], i2);
154
479
  }
155
- for (i = j = 0; i !== a.length || j !== b.length; ) {
156
- var aElm = a[i], bElm = b[j];
480
+ for (i2 = j = 0; i2 !== a2.length || j !== b2.length; ) {
481
+ var aElm = a2[i2], bElm = b2[j];
157
482
  if (aElm === null) {
158
- i++;
159
- } else if (b.length <= j) {
160
- parent.removeChild(a[i]);
161
- i++;
162
- } else if (a.length <= i) {
163
- parent.insertBefore(bElm, a[i] || before);
483
+ i2++;
484
+ } else if (b2.length <= j) {
485
+ parent.removeChild(a2[i2]);
486
+ i2++;
487
+ } else if (a2.length <= i2) {
488
+ parent.insertBefore(bElm, a2[i2] || before);
164
489
  j++;
165
490
  } else if (aElm === bElm) {
166
- i++;
491
+ i2++;
167
492
  j++;
168
493
  } else {
169
494
  var curElmInNew = bIdx.get(aElm);
170
495
  var wantedElmInOld = aIdx.get(bElm);
171
496
  if (curElmInNew === void 0) {
172
- parent.removeChild(a[i]);
173
- i++;
497
+ parent.removeChild(a2[i2]);
498
+ i2++;
174
499
  } else if (wantedElmInOld === void 0) {
175
500
  parent.insertBefore(
176
501
  bElm,
177
- a[i] || before
502
+ a2[i2] || before
178
503
  );
179
504
  j++;
180
505
  } else {
181
506
  parent.insertBefore(
182
- a[wantedElmInOld],
183
- a[i] || before
507
+ a2[wantedElmInOld],
508
+ a2[i2] || before
184
509
  );
185
- a[wantedElmInOld] = null;
186
- if (wantedElmInOld > i + 1)
187
- i++;
510
+ a2[wantedElmInOld] = null;
511
+ if (wantedElmInOld > i2 + 1)
512
+ i2++;
188
513
  j++;
189
514
  }
190
515
  }
191
516
  }
192
- return b;
517
+ return b2;
193
518
  }
194
519
 
520
+ // src/util.js
521
+ var queueMicrotask = Promise.prototype.then.bind(Promise.resolve());
522
+ var refs = /* @__PURE__ */ new WeakMap();
523
+ var set = (value) => {
524
+ const ref = new WeakRef(value);
525
+ refs.set(value, ref);
526
+ return ref;
527
+ };
528
+ var get = (value) => refs.get(value) || set(value);
529
+ var WeakishMap = class extends Map {
530
+ #registry = new FinalizationRegistry((key) => super.delete(key));
531
+ get size() {
532
+ return [...this].length;
533
+ }
534
+ constructor(entries = []) {
535
+ super();
536
+ for (const [key, value] of entries)
537
+ this.set(key, value);
538
+ }
539
+ get(key) {
540
+ return super.get(key)?.deref();
541
+ }
542
+ set(key, value) {
543
+ let ref = super.get(key);
544
+ if (ref)
545
+ this.#registry.unregister(ref);
546
+ ref = get(value);
547
+ this.#registry.register(value, key, ref);
548
+ return super.set(key, ref);
549
+ }
550
+ };
551
+
195
552
  // src/directives.js
196
553
  var primary = {};
197
554
  var secondary = {};
@@ -213,12 +570,12 @@ primary["if"] = (el, expr) => {
213
570
  break;
214
571
  }
215
572
  el.replaceWith(cur = holder);
216
- return (state2) => {
217
- let i = clauses.findIndex((f) => f(state2));
218
- if (els[i] != cur) {
573
+ return (state) => {
574
+ let i2 = clauses.findIndex((f2) => f2(state));
575
+ if (els[i2] != cur) {
219
576
  ;
220
- (cur[_each] || cur).replaceWith(cur = els[i] || holder);
221
- sprae(cur, state2);
577
+ (cur[_each] || cur).replaceWith(cur = els[i2] || holder);
578
+ sprae(cur, state);
222
579
  }
223
580
  };
224
581
  };
@@ -237,14 +594,14 @@ primary["each"] = (tpl, expr) => {
237
594
  const scopes = new WeakishMap();
238
595
  const itemEls = new WeakishMap();
239
596
  let curEls = [];
240
- return (state2) => {
241
- let list = evaluate(state2);
597
+ return (state) => {
598
+ let list = evaluate(state);
242
599
  if (!list)
243
600
  list = [];
244
601
  else if (typeof list === "number")
245
- list = Array.from({ length: list }, (_, i) => [i + 1, i]);
602
+ list = Array.from({ length: list }, (_2, i2) => [i2 + 1, i2]);
246
603
  else if (Array.isArray(list))
247
- list = list.map((item, i) => [i + 1, item]);
604
+ list = list.map((item, i2) => [i2 + 1, item]);
248
605
  else if (typeof list === "object")
249
606
  list = Object.entries(list);
250
607
  else
@@ -258,7 +615,7 @@ primary["each"] = (tpl, expr) => {
258
615
  (el = itemEls.get(key)) || itemEls.set(key, el = tpl.cloneNode(true));
259
616
  newEls.push(el);
260
617
  if (key == null || !(scope = scopes.get(key))) {
261
- scope = state({ [each[0]]: item, [refExpr || ""]: null, [each[1]]: idx }, state2);
618
+ scope = createState({ [each[0]]: item, [refExpr || ""]: null, [each[1]]: idx }, state);
262
619
  if (key != null)
263
620
  scopes.set(key, scope);
264
621
  } else
@@ -267,19 +624,19 @@ primary["each"] = (tpl, expr) => {
267
624
  }
268
625
  domdiff_default(holder.parentNode, curEls, newEls, holder);
269
626
  curEls = newEls;
270
- for (let i = 0; i < newEls.length; i++) {
271
- sprae(newEls[i], elScopes[i]);
627
+ for (let i2 = 0; i2 < newEls.length; i2++) {
628
+ sprae(newEls[i2], elScopes[i2]);
272
629
  }
273
630
  };
274
631
  };
275
632
  primary["with"] = (el, expr, rootState) => {
276
633
  let evaluate = parseExpr(el, expr, ":with");
277
634
  const localState = evaluate(rootState);
278
- let state2 = state(localState, rootState);
279
- sprae(el, state2);
635
+ let state = createState(localState, rootState);
636
+ sprae(el, state);
280
637
  };
281
- primary["ref"] = (el, expr, state2) => {
282
- state2[expr] = el;
638
+ primary["ref"] = (el, expr, state) => {
639
+ state[expr] = el;
283
640
  };
284
641
  function parseForExpression(expression) {
285
642
  let forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
@@ -299,32 +656,32 @@ function parseForExpression(expression) {
299
656
  ];
300
657
  return [item, "", items];
301
658
  }
302
- secondary["render"] = (el, expr, state2) => {
303
- let evaluate = parseExpr(el, expr, ":render"), tpl = evaluate(state2);
659
+ secondary["render"] = (el, expr, state) => {
660
+ let evaluate = parseExpr(el, expr, ":render"), tpl = evaluate(state);
304
661
  if (!tpl)
305
662
  exprError(new Error("Template not found"), el, expr, ":render");
306
663
  let content = tpl.content.cloneNode(true);
307
664
  el.replaceChildren(content);
308
- sprae(el, state2);
665
+ sprae(el, state);
309
666
  };
310
667
  secondary["id"] = (el, expr) => {
311
668
  let evaluate = parseExpr(el, expr, ":id");
312
- const update = (v) => el.id = v || v === 0 ? v : "";
313
- return (state2) => update(evaluate(state2));
669
+ const update = (v2) => el.id = v2 || v2 === 0 ? v2 : "";
670
+ return (state) => update(evaluate(state));
314
671
  };
315
672
  secondary["class"] = (el, expr) => {
316
673
  let evaluate = parseExpr(el, expr, ":class");
317
674
  let initClassName = el.getAttribute("class");
318
- return (state2) => {
319
- let v = evaluate(state2);
675
+ return (state) => {
676
+ let v2 = evaluate(state);
320
677
  let className = [initClassName];
321
- if (v) {
322
- if (typeof v === "string")
323
- className.push(v);
324
- else if (Array.isArray(v))
325
- className.push(...v);
678
+ if (v2) {
679
+ if (typeof v2 === "string")
680
+ className.push(v2);
681
+ else if (Array.isArray(v2))
682
+ className.push(...v2);
326
683
  else
327
- className.push(...Object.entries(v).map(([k, v2]) => v2 ? k : ""));
684
+ className.push(...Object.entries(v2).map(([k, v3]) => v3 ? k : ""));
328
685
  }
329
686
  if (className = className.filter(Boolean).join(" "))
330
687
  el.setAttribute("class", className);
@@ -337,29 +694,29 @@ secondary["style"] = (el, expr) => {
337
694
  let initStyle = el.getAttribute("style") || "";
338
695
  if (!initStyle.endsWith(";"))
339
696
  initStyle += "; ";
340
- return (state2) => {
341
- let v = evaluate(state2);
342
- if (typeof v === "string")
343
- el.setAttribute("style", initStyle + v);
697
+ return (state) => {
698
+ let v2 = evaluate(state);
699
+ if (typeof v2 === "string")
700
+ el.setAttribute("style", initStyle + v2);
344
701
  else {
345
702
  el.setAttribute("style", initStyle);
346
- for (let k in v)
347
- el.style.setProperty(k, v[k]);
703
+ for (let k in v2)
704
+ el.style.setProperty(k, v2[k]);
348
705
  }
349
706
  };
350
707
  };
351
708
  secondary["text"] = (el, expr) => {
352
709
  let evaluate = parseExpr(el, expr, ":text");
353
- return (state2) => {
354
- let value = evaluate(state2);
710
+ return (state) => {
711
+ let value = evaluate(state);
355
712
  el.textContent = value == null ? "" : value;
356
713
  };
357
714
  };
358
715
  secondary[""] = (el, expr) => {
359
716
  let evaluate = parseExpr(el, expr, ":");
360
717
  if (evaluate)
361
- return (state2) => {
362
- let value = evaluate(state2);
718
+ return (state) => {
719
+ let value = evaluate(state);
363
720
  for (let key in value)
364
721
  attr(el, dashcase(key), value[key]);
365
722
  };
@@ -373,33 +730,33 @@ secondary["value"] = (el, expr) => {
373
730
  el.value = value;
374
731
  el.selectedOptions[0]?.setAttribute("selected", "");
375
732
  } : (value) => el.value = value;
376
- return (state2) => update(evaluate(state2));
733
+ return (state) => update(evaluate(state));
377
734
  };
378
- var directives_default = (el, expr, state2, name) => {
735
+ var directives_default = (el, expr, state, name) => {
379
736
  let evt = name.startsWith("on") && name.slice(2);
380
737
  let evaluate = parseExpr(el, expr, ":" + name);
381
738
  if (!evaluate)
382
739
  return;
383
740
  if (evt)
384
- return (state3) => {
385
- let value = evaluate(state3) || (() => {
741
+ return (state2) => {
742
+ let value = evaluate(state2) || (() => {
386
743
  });
387
744
  return on(el, evt, value);
388
745
  };
389
- return (state3) => attr(el, name, evaluate(state3));
746
+ return (state2) => attr(el, name, evaluate(state2));
390
747
  };
391
- var on = (el, e, fn) => {
748
+ var on = (el, e2, fn) => {
392
749
  if (!fn)
393
750
  return;
394
751
  const ctx = { evt: "", target: el, test: () => true };
395
- ctx.evt = (e.startsWith("on") ? e.slice(2) : e).replace(
752
+ ctx.evt = (e2.startsWith("on") ? e2.slice(2) : e2).replace(
396
753
  /\.(\w+)?-?([-\w]+)?/g,
397
754
  (match, mod, param = "") => (ctx.test = mods[mod]?.(ctx, ...param.split("-")) || ctx.test, "")
398
755
  );
399
756
  const { evt, target, test, defer, stop, prevent, ...opts } = ctx;
400
757
  if (defer)
401
758
  fn = defer(fn);
402
- const cb = (e2) => test(e2) && (stop && e2.stopPropagation(), prevent && e2.preventDefault(), fn.call(target, e2));
759
+ const cb = (e3) => test(e3) && (stop && e3.stopPropagation(), prevent && e3.preventDefault(), fn.call(target, e3));
403
760
  target.addEventListener(evt, cb, opts);
404
761
  return () => target.removeEventListener(evt, cb, opts);
405
762
  };
@@ -431,21 +788,21 @@ var mods = {
431
788
  debounce(ctx, wait) {
432
789
  ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108);
433
790
  },
434
- outside: (ctx) => (e) => {
791
+ outside: (ctx) => (e2) => {
435
792
  let target = ctx.target;
436
- if (target.contains(e.target))
793
+ if (target.contains(e2.target))
437
794
  return false;
438
- if (e.target.isConnected === false)
795
+ if (e2.target.isConnected === false)
439
796
  return false;
440
797
  if (target.offsetWidth < 1 && target.offsetHeight < 1)
441
798
  return false;
442
799
  return true;
443
800
  },
444
- self: (ctx) => (e) => e.target === ctx.target,
445
- ctrl: (ctx, ...param) => (e) => keys.ctrl(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
446
- shift: (ctx, ...param) => (e) => keys.shift(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
447
- alt: (ctx, ...param) => (e) => keys.alt(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
448
- meta: (ctx, ...param) => (e) => keys.meta(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
801
+ self: (ctx) => (e2) => e2.target === ctx.target,
802
+ ctrl: (ctx, ...param) => (e2) => keys.ctrl(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
803
+ shift: (ctx, ...param) => (e2) => keys.shift(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
804
+ alt: (ctx, ...param) => (e2) => keys.alt(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
805
+ meta: (ctx, ...param) => (e2) => keys.meta(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
449
806
  arrow: (ctx) => keys.arrow,
450
807
  enter: (ctx) => keys.enter,
451
808
  escape: (ctx) => keys.escape,
@@ -458,52 +815,52 @@ var mods = {
458
815
  character: (ctx) => keys.character
459
816
  };
460
817
  var keys = {
461
- ctrl: (e) => e.ctrlKey || e.key === "Control" || e.key === "Ctrl",
462
- shift: (e) => e.shiftKey || e.key === "Shift",
463
- alt: (e) => e.altKey || e.key === "Alt",
464
- meta: (e) => e.metaKey || e.key === "Meta" || e.key === "Command",
465
- arrow: (e) => e.key.startsWith("Arrow"),
466
- enter: (e) => e.key === "Enter",
467
- escape: (e) => e.key.startsWith("Esc"),
468
- tab: (e) => e.key === "Tab",
469
- space: (e) => e.key === "\xA0" || e.key === "Space" || e.key === " ",
470
- backspace: (e) => e.key === "Backspace",
471
- delete: (e) => e.key === "Delete",
472
- digit: (e) => /^\d$/.test(e.key),
473
- letter: (e) => /^[a-zA-Z]$/.test(e.key),
474
- character: (e) => /^\S$/.test(e.key)
818
+ ctrl: (e2) => e2.ctrlKey || e2.key === "Control" || e2.key === "Ctrl",
819
+ shift: (e2) => e2.shiftKey || e2.key === "Shift",
820
+ alt: (e2) => e2.altKey || e2.key === "Alt",
821
+ meta: (e2) => e2.metaKey || e2.key === "Meta" || e2.key === "Command",
822
+ arrow: (e2) => e2.key.startsWith("Arrow"),
823
+ enter: (e2) => e2.key === "Enter",
824
+ escape: (e2) => e2.key.startsWith("Esc"),
825
+ tab: (e2) => e2.key === "Tab",
826
+ space: (e2) => e2.key === "\xA0" || e2.key === "Space" || e2.key === " ",
827
+ backspace: (e2) => e2.key === "Backspace",
828
+ delete: (e2) => e2.key === "Delete",
829
+ digit: (e2) => /^\d$/.test(e2.key),
830
+ letter: (e2) => /^[a-zA-Z]$/.test(e2.key),
831
+ character: (e2) => /^\S$/.test(e2.key)
475
832
  };
476
833
  var throttle = (fn, limit) => {
477
- let pause, planned, block = (e) => {
834
+ let pause, planned, block = (e2) => {
478
835
  pause = true;
479
836
  setTimeout(() => {
480
837
  pause = false;
481
838
  if (planned)
482
- return planned = false, block(e), fn(e);
839
+ return planned = false, block(e2), fn(e2);
483
840
  }, limit);
484
841
  };
485
- return (e) => {
842
+ return (e2) => {
486
843
  if (pause)
487
844
  return planned = true;
488
- block(e);
489
- return fn(e);
845
+ block(e2);
846
+ return fn(e2);
490
847
  };
491
848
  };
492
849
  var debounce = (fn, wait) => {
493
850
  let timeout;
494
- return (e) => {
851
+ return (e2) => {
495
852
  clearTimeout(timeout);
496
853
  timeout = setTimeout(() => {
497
854
  timeout = null;
498
- fn(e);
855
+ fn(e2);
499
856
  }, wait);
500
857
  };
501
858
  };
502
- var attr = (el, name, v) => {
503
- if (v == null || v === false)
859
+ var attr = (el, name, v2) => {
860
+ if (v2 == null || v2 === false)
504
861
  el.removeAttribute(name);
505
862
  else
506
- el.setAttribute(name, v === true ? "" : typeof v === "number" || typeof v === "string" ? v : "");
863
+ el.setAttribute(name, v2 === true ? "" : typeof v2 === "number" || typeof v2 === "string" ? v2 : "");
507
864
  };
508
865
  var evaluatorMemo = {};
509
866
  function parseExpr(el, expression, dir) {
@@ -511,16 +868,16 @@ function parseExpr(el, expression, dir) {
511
868
  if (!evaluate) {
512
869
  try {
513
870
  evaluate = evaluatorMemo[expression] = new Function(`__scope`, `with (__scope) { return ${expression.trim()} };`);
514
- } catch (e) {
515
- return exprError(e, el, expression, dir);
871
+ } catch (e2) {
872
+ return exprError(e2, el, expression, dir);
516
873
  }
517
874
  }
518
- return (state2) => {
875
+ return (state) => {
519
876
  let result;
520
877
  try {
521
- result = evaluate.call(el, state2);
522
- } catch (e) {
523
- return exprError(e, el, expression, dir);
878
+ result = evaluate.call(el, state);
879
+ } catch (e2) {
880
+ return exprError(e2, el, expression, dir);
524
881
  }
525
882
  return result;
526
883
  };
@@ -542,13 +899,13 @@ function dashcase(str) {
542
899
 
543
900
  // src/core.js
544
901
  sprae.globals = sandbox;
545
- var memo = /* @__PURE__ */ new WeakMap();
902
+ var memo2 = /* @__PURE__ */ new WeakMap();
546
903
  function sprae(container, values) {
547
904
  if (!container.children)
548
905
  return;
549
- if (memo.has(container))
550
- return Object.assign(memo.get(container), values);
551
- const state2 = state(values || {});
906
+ if (memo2.has(container))
907
+ return n(() => Object.assign(memo2.get(container), values));
908
+ const state = createState(values || {});
552
909
  const updates = [];
553
910
  const init = (el, parent = el.parentNode) => {
554
911
  for (let name in primary) {
@@ -556,46 +913,46 @@ function sprae(container, values) {
556
913
  if (el.hasAttribute?.(attrName)) {
557
914
  let expr = el.getAttribute(attrName);
558
915
  el.removeAttribute(attrName);
559
- updates.push(primary[name](el, expr, state2, name));
560
- if (memo.has(el))
916
+ updates.push(primary[name](el, expr, state, name));
917
+ if (memo2.has(el))
561
918
  return;
562
919
  if (el.parentNode !== parent)
563
920
  return false;
564
921
  }
565
922
  }
566
923
  if (el.attributes) {
567
- for (let i = 0; i < el.attributes.length; ) {
568
- let attr2 = el.attributes[i], prefix = attr2.name[0];
924
+ for (let i2 = 0; i2 < el.attributes.length; ) {
925
+ let attr2 = el.attributes[i2], prefix = attr2.name[0];
569
926
  if (prefix === ":" || prefix === "@") {
570
927
  el.removeAttribute(attr2.name);
571
- let expr = prefix === "@" ? `event=>{${attr2.value}}` : attr2.value, names = attr2.name.slice(1).split(prefix);
928
+ let expr = prefix === "@" ? `${attr2.value.includes("await") ? "async" : ""} event=>{${attr2.value}}` : attr2.value, names = attr2.name.slice(1).split(prefix);
572
929
  for (let name of names) {
573
930
  if (prefix === "@")
574
931
  name = `on` + name;
575
932
  let dir = secondary[name] || directives_default;
576
- updates.push(dir(el, expr, state2, name));
933
+ updates.push(dir(el, expr, state, name));
577
934
  }
578
935
  } else
579
- i++;
936
+ i2++;
580
937
  }
581
938
  }
582
- for (let i = 0, child; child = el.children[i]; i++) {
939
+ for (let i2 = 0, child; child = el.children[i2]; i2++) {
583
940
  if (init(child, el) === false)
584
- i--;
941
+ i2--;
585
942
  }
586
943
  };
587
944
  init(container);
588
945
  for (let update of updates)
589
946
  if (update) {
590
947
  let teardown;
591
- fx(() => {
948
+ O(() => {
592
949
  if (typeof teardown === "function")
593
950
  teardown();
594
- teardown = update(state2);
951
+ teardown = update(state);
595
952
  });
596
953
  }
597
- memo.set(container, state2);
598
- return state2;
954
+ memo2.set(container, state);
955
+ return state;
599
956
  }
600
957
 
601
958
  // src/index.js