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