sprae 8.1.3 → 9.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/dist/sprae.js CHANGED
@@ -1,774 +1,613 @@
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 h = 0;
48
- function s(i2) {
49
- if (h > 0)
50
- return i2();
51
- var t2 = o;
52
- o = void 0;
53
- h++;
54
- try {
55
- return i2();
56
- } finally {
57
- h--;
58
- o = t2;
59
- }
60
- }
61
- var f = void 0;
62
- var v = 0;
63
- var e = 0;
64
- var u = 0;
65
- function c(i2) {
66
- if (void 0 !== o) {
67
- var t2 = i2.n;
68
- if (void 0 === t2 || t2.t !== o) {
69
- t2 = { i: 0, S: i2, p: o.s, n: void 0, t: o, e: void 0, x: void 0, r: t2 };
70
- if (void 0 !== o.s)
71
- o.s.n = t2;
72
- o.s = t2;
73
- i2.n = t2;
74
- if (32 & o.f)
75
- i2.S(t2);
76
- return t2;
77
- } else if (-1 === t2.i) {
78
- t2.i = 0;
79
- if (void 0 !== t2.n) {
80
- t2.n.p = t2.p;
81
- if (void 0 !== t2.p)
82
- t2.p.n = t2.n;
83
- t2.p = o.s;
84
- t2.n = void 0;
85
- o.s.n = t2;
86
- o.s = t2;
87
- }
88
- return t2;
89
- }
90
- }
91
- }
92
- function d(i2) {
93
- this.v = i2;
94
- this.i = 0;
95
- this.n = void 0;
96
- this.t = void 0;
97
- }
98
- d.prototype.brand = t;
99
- d.prototype.h = function() {
100
- return true;
101
- };
102
- d.prototype.S = function(i2) {
103
- if (this.t !== i2 && void 0 === i2.e) {
104
- i2.x = this.t;
105
- if (void 0 !== this.t)
106
- this.t.e = i2;
107
- this.t = i2;
108
- }
109
- };
110
- d.prototype.U = function(i2) {
111
- if (void 0 !== this.t) {
112
- var t2 = i2.e, r2 = i2.x;
113
- if (void 0 !== t2) {
114
- t2.x = r2;
115
- i2.e = void 0;
116
- }
117
- if (void 0 !== r2) {
118
- r2.e = t2;
119
- i2.x = void 0;
120
- }
121
- if (i2 === this.t)
122
- this.t = r2;
123
- }
124
- };
125
- d.prototype.subscribe = function(i2) {
126
- var t2 = this;
127
- return O(function() {
128
- var r2 = t2.value, n2 = 32 & this.f;
129
- this.f &= -33;
130
- try {
131
- i2(r2);
132
- } finally {
133
- this.f |= n2;
134
- }
135
- });
136
- };
137
- d.prototype.valueOf = function() {
138
- return this.value;
139
- };
140
- d.prototype.toString = function() {
141
- return this.value + "";
142
- };
143
- d.prototype.toJSON = function() {
144
- return this.value;
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
145
5
  };
146
- d.prototype.peek = function() {
147
- return this.v;
148
- };
149
- Object.defineProperty(d.prototype, "value", { get: function() {
150
- var i2 = c(this);
151
- if (void 0 !== i2)
152
- i2.i = this.i;
153
- return this.v;
154
- }, set: function(t2) {
155
- if (o instanceof _)
156
- !function() {
157
- throw new Error("Computed cannot have side-effects");
158
- }();
159
- if (t2 !== this.v) {
160
- if (e > 100)
161
- i();
162
- this.v = t2;
163
- this.i++;
164
- u++;
165
- v++;
166
- try {
167
- for (var n2 = this.t; void 0 !== n2; n2 = n2.x)
168
- n2.t.N();
169
- } finally {
170
- r();
171
- }
172
- }
173
- } });
174
- function a(i2) {
175
- return new d(i2);
176
- }
177
- function l(i2) {
178
- for (var t2 = i2.s; void 0 !== t2; t2 = t2.n)
179
- if (t2.S.i !== t2.i || !t2.S.h() || t2.S.i !== t2.i)
180
- return true;
181
- return false;
182
- }
183
- function y(i2) {
184
- for (var t2 = i2.s; void 0 !== t2; t2 = t2.n) {
185
- var r2 = t2.S.n;
186
- if (void 0 !== r2)
187
- t2.r = r2;
188
- t2.S.n = t2;
189
- t2.i = -1;
190
- if (void 0 === t2.n) {
191
- i2.s = t2;
192
- break;
193
- }
194
- }
195
- }
196
- function w(i2) {
197
- var t2 = i2.s, r2 = void 0;
198
- while (void 0 !== t2) {
199
- var n2 = t2.p;
200
- if (-1 === t2.i) {
201
- t2.S.U(t2);
202
- if (void 0 !== n2)
203
- n2.n = t2.n;
204
- if (void 0 !== t2.n)
205
- t2.n.p = n2;
206
- } else
207
- r2 = t2;
208
- t2.S.n = t2.r;
209
- if (void 0 !== t2.r)
210
- t2.r = void 0;
211
- t2 = n2;
212
- }
213
- i2.s = r2;
214
- }
215
- function _(i2) {
216
- d.call(this, void 0);
217
- this.x = i2;
218
- this.s = void 0;
219
- this.g = u - 1;
220
- this.f = 4;
221
- }
222
- (_.prototype = new d()).h = function() {
223
- this.f &= -3;
224
- if (1 & this.f)
225
- return false;
226
- if (32 == (36 & this.f))
227
- return true;
228
- this.f &= -5;
229
- if (this.g === u)
230
- return true;
231
- this.g = u;
232
- this.f |= 1;
233
- if (this.i > 0 && !l(this)) {
234
- this.f &= -2;
235
- return true;
236
- }
237
- var i2 = o;
238
- try {
239
- y(this);
240
- o = this;
241
- var t2 = this.x();
242
- if (16 & this.f || this.v !== t2 || 0 === this.i) {
243
- this.v = t2;
244
- this.f &= -17;
245
- this.i++;
246
- }
247
- } catch (i3) {
248
- this.v = i3;
249
- this.f |= 16;
250
- this.i++;
251
- }
252
- o = i2;
253
- w(this);
254
- this.f &= -2;
255
- return true;
256
- };
257
- _.prototype.S = function(i2) {
258
- if (void 0 === this.t) {
259
- this.f |= 36;
260
- for (var t2 = this.s; void 0 !== t2; t2 = t2.n)
261
- t2.S.S(t2);
262
- }
263
- d.prototype.S.call(this, i2);
264
- };
265
- _.prototype.U = function(i2) {
266
- if (void 0 !== this.t) {
267
- d.prototype.U.call(this, i2);
268
- if (void 0 === this.t) {
269
- this.f &= -33;
270
- for (var t2 = this.s; void 0 !== t2; t2 = t2.n)
271
- t2.S.U(t2);
6
+
7
+ // node_modules/swapdom/swap-inflate.js
8
+ var swap = (parent, a, b, end = null) => {
9
+ let i = 0, cur2, next, bi, n = b.length, m = a.length, { remove, same, insert, replace } = swap;
10
+ while (i < n && i < m && same(a[i], b[i]))
11
+ i++;
12
+ while (i < n && i < m && same(b[n - 1], a[m - 1]))
13
+ end = b[--m, --n];
14
+ if (i == m)
15
+ while (i < n)
16
+ insert(end, b[i++], parent);
17
+ else {
18
+ cur2 = a[i];
19
+ while (i < n) {
20
+ bi = b[i++], next = cur2 ? cur2.nextSibling : end;
21
+ if (same(cur2, bi))
22
+ cur2 = next;
23
+ else if (i < n && same(b[i], next))
24
+ replace(cur2, bi, parent), cur2 = next;
25
+ else
26
+ insert(cur2, bi, parent);
272
27
  }
28
+ while (!same(cur2, end))
29
+ next = cur2.nextSibling, remove(cur2, parent), cur2 = next;
273
30
  }
31
+ return b;
274
32
  };
275
- _.prototype.N = function() {
276
- if (!(2 & this.f)) {
277
- this.f |= 6;
278
- for (var i2 = this.t; void 0 !== i2; i2 = i2.x)
279
- i2.t.N();
280
- }
281
- };
282
- _.prototype.peek = function() {
283
- if (!this.h())
284
- i();
285
- if (16 & this.f)
286
- throw this.v;
287
- return this.v;
288
- };
289
- Object.defineProperty(_.prototype, "value", { get: function() {
290
- if (1 & this.f)
291
- i();
292
- var t2 = c(this);
293
- this.h();
294
- if (void 0 !== t2)
295
- t2.i = this.i;
296
- if (16 & this.f)
297
- throw this.v;
298
- return this.v;
299
- } });
300
- function p(i2) {
301
- return new _(i2);
302
- }
303
- function g(i2) {
304
- var t2 = i2.u;
305
- i2.u = void 0;
306
- if ("function" == typeof t2) {
307
- v++;
308
- var n2 = o;
309
- o = void 0;
310
- try {
311
- t2();
312
- } catch (t3) {
313
- i2.f &= -2;
314
- i2.f |= 8;
315
- b(i2);
316
- throw t3;
317
- } finally {
318
- o = n2;
319
- r();
320
- }
33
+ swap.same = (a, b) => a == b;
34
+ swap.replace = (a, b, parent) => parent.replaceChild(b, a);
35
+ swap.insert = (a, b, parent) => parent.insertBefore(b, a);
36
+ swap.remove = (a, parent) => parent.removeChild(a);
37
+ var swap_inflate_default = swap;
38
+
39
+ // node_modules/ulive/dist/ulive.es.js
40
+ var ulive_es_exports = {};
41
+ __export(ulive_es_exports, {
42
+ batch: () => batch,
43
+ computed: () => computed,
44
+ current: () => current,
45
+ effect: () => effect,
46
+ signal: () => signal,
47
+ untracked: () => untracked
48
+ });
49
+ var current;
50
+ var signal = (v, s, obs = /* @__PURE__ */ new Set()) => (s = {
51
+ get value() {
52
+ current?.deps.push(obs.add(current));
53
+ return v;
54
+ },
55
+ set value(val) {
56
+ if (val === v)
57
+ return;
58
+ v = val;
59
+ for (let sub of obs)
60
+ sub(val);
61
+ },
62
+ peek() {
63
+ return v;
321
64
  }
322
- }
323
- function b(i2) {
324
- for (var t2 = i2.s; void 0 !== t2; t2 = t2.n)
325
- t2.S.U(t2);
326
- i2.x = void 0;
327
- i2.s = void 0;
328
- g(i2);
329
- }
330
- function x(i2) {
331
- if (o !== this)
332
- throw new Error("Out-of-order effect");
333
- w(this);
334
- o = i2;
335
- this.f &= -2;
336
- if (8 & this.f)
337
- b(this);
338
- r();
339
- }
340
- function E(i2) {
341
- this.x = i2;
342
- this.u = void 0;
343
- this.s = void 0;
344
- this.o = void 0;
345
- this.f = 32;
346
- }
347
- E.prototype.c = function() {
348
- var i2 = this.S();
65
+ }, s.toJSON = s.then = s.toString = s.valueOf = () => s.value, s);
66
+ var effect = (fn, teardown, run, deps) => (run = (prev) => {
67
+ teardown?.call?.();
68
+ prev = current, current = run;
349
69
  try {
350
- if (8 & this.f)
351
- return;
352
- if (void 0 === this.x)
353
- return;
354
- var t2 = this.x();
355
- if ("function" == typeof t2)
356
- this.u = t2;
70
+ teardown = fn();
357
71
  } finally {
358
- i2();
72
+ current = prev;
359
73
  }
74
+ }, deps = run.deps = [], run(), (dep) => {
75
+ teardown?.call?.();
76
+ while (dep = deps.pop())
77
+ dep.delete(run);
78
+ });
79
+ var computed = (fn, s = signal(), c, e) => (c = {
80
+ get value() {
81
+ e ||= effect(() => s.value = fn());
82
+ return s.value;
83
+ },
84
+ peek: s.peek
85
+ }, c.toJSON = c.then = c.toString = c.valueOf = () => c.value, c);
86
+ var batch = (fn) => fn();
87
+ var untracked = (fn, prev, v) => (prev = current, current = null, v = fn(), current = prev, v);
88
+
89
+ // node_modules/subscript/src/const.js
90
+ var PERIOD = 46;
91
+ var SPACE = 32;
92
+ var COLON = 58;
93
+ var DQUOTE = 34;
94
+ var QUOTE = 39;
95
+ var _0 = 48;
96
+ var _9 = 57;
97
+ var _E = 69;
98
+ var _e = 101;
99
+ var BSLASH = 92;
100
+ var STAR = 42;
101
+ var PREC_SEQ = 1;
102
+ var PREC_ASSIGN = 2;
103
+ var PREC_LOR = 3;
104
+ var PREC_LAND = 4;
105
+ var PREC_OR = 5;
106
+ var PREC_XOR = 6;
107
+ var PREC_AND = 7;
108
+ var PREC_EQ = 8;
109
+ var PREC_COMP = 9;
110
+ var PREC_SHIFT = 10;
111
+ var PREC_ADD = 11;
112
+ var PREC_MULT = 12;
113
+ var PREC_EXP = 13;
114
+ var PREC_PREFIX = 14;
115
+ var PREC_POSTFIX = 15;
116
+ var PREC_ACCESS = 17;
117
+ var PREC_TOKEN = 20;
118
+
119
+ // node_modules/subscript/src/parse.js
120
+ var idx;
121
+ var cur;
122
+ var parse = (s) => (idx = 0, cur = s, s = expr(), cur[idx] ? err2() : s || "");
123
+ var err2 = (msg = "Bad syntax", lines = cur.slice(0, idx).split("\n"), last2 = lines.pop()) => {
124
+ let before = cur.slice(idx - 108, idx).split("\n").pop();
125
+ let after = cur.slice(idx, idx + 108).split("\n").shift();
126
+ throw EvalError(`${msg} at ${lines.length}:${last2.length} \`${idx >= 108 ? "\u2026" : ""}${before}\u25B6${after}\``, "font-weight: bold");
127
+ };
128
+ var skip = (is = 1, from = idx, l) => {
129
+ if (typeof is == "number")
130
+ idx += is;
131
+ else
132
+ while (l = is(cur.charCodeAt(idx)))
133
+ idx += l;
134
+ return cur.slice(from, idx);
135
+ };
136
+ var expr = (prec = 0, end, cc, token2, newNode, fn) => {
137
+ while ((cc = parse.space()) && (newNode = ((fn = lookup[cc]) && fn(token2, prec)) ?? (!token2 && parse.id())))
138
+ token2 = newNode;
139
+ if (end)
140
+ cc == end ? idx++ : err2();
141
+ return token2;
142
+ };
143
+ var isId = (c) => c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || c == 36 || c == 95 || c >= 192 && c != 215 && c != 247;
144
+ var id = parse.id = () => skip(isId);
145
+ var space = parse.space = (cc) => {
146
+ while ((cc = cur.charCodeAt(idx)) <= SPACE)
147
+ idx++;
148
+ return cc;
149
+ };
150
+ var lookup = [];
151
+ var token = (op, prec = SPACE, map, c = op.charCodeAt(0), l = op.length, prev = lookup[c], word = op.toUpperCase() !== op) => lookup[c] = (a, curPrec, from = idx) => curPrec < prec && (l < 2 || cur.substr(idx, l) == op) && (!word || !isId(cur.charCodeAt(idx + l))) && (idx += l, map(a, curPrec)) || (idx = from, prev?.(a, curPrec));
152
+ var binary = (op, prec, right = false) => token(op, prec, (a, b) => a && (b = expr(prec - (right ? 0.5 : 0))) && [op, a, b]);
153
+ var unary = (op, prec, post) => token(op, prec, (a) => post ? a && [op, a] : !a && (a = expr(prec - 0.5)) && [op, a]);
154
+ var nary = (op, prec) => {
155
+ token(
156
+ op,
157
+ prec,
158
+ (a, b) => (b = expr(prec), (!a || a[0] !== op) && (a = [op, a]), a.push(b), a)
159
+ );
360
160
  };
361
- E.prototype.S = function() {
362
- if (1 & this.f)
363
- i();
364
- this.f |= 1;
365
- this.f &= -9;
366
- g(this);
367
- y(this);
368
- v++;
369
- var t2 = o;
370
- o = this;
371
- return x.bind(this, t2);
372
- };
373
- E.prototype.N = function() {
374
- if (!(2 & this.f)) {
375
- this.f |= 2;
376
- this.o = f;
377
- f = this;
161
+ var group = (op, prec) => token(op[0], prec, (a) => !a && [op, expr(0, op.charCodeAt(1))]);
162
+ var access = (op, prec) => token(op[0], prec, (a) => a && [op[0], a, expr(0, op.charCodeAt(1))]);
163
+ var parse_default = parse;
164
+
165
+ // node_modules/subscript/src/compile.js
166
+ var compile = (node) => !Array.isArray(node) ? compile.id(node) : !node[0] ? () => node[1] : operators[node[0]](...node.slice(1));
167
+ var id2 = compile.id = (name) => (ctx) => ctx?.[name];
168
+ var operators = {};
169
+ var operator = (op, fn, prev = operators[op]) => operators[op] = (...args) => fn(...args) || prev && prev(...args);
170
+ var prop = (a, fn, generic, obj, path) => a[0] === "()" ? prop(a[1], fn, generic) : typeof a === "string" ? (ctx) => fn(ctx, a, ctx) : a[0] === "." ? (obj = compile(a[1]), path = a[2], (ctx) => fn(obj(ctx), path, ctx)) : a[0] === "[" ? (obj = compile(a[1]), path = compile(a[2]), (ctx) => fn(obj(ctx), path(ctx), ctx)) : generic ? (a = compile(a), (ctx) => fn([a(ctx)], 0, ctx)) : () => err2("Bad left value");
171
+ var compile_default = compile;
172
+
173
+ // node_modules/subscript/feature/number.js
174
+ var num = (a) => a ? err2() : [, (a = +skip((c) => c === PERIOD || c >= _0 && c <= _9 || (c === _E || c === _e ? 2 : 0))) != a ? err2() : a];
175
+ lookup[PERIOD] = (a) => !a && num();
176
+ for (let i = _0; i <= _9; i++)
177
+ lookup[i] = num;
178
+
179
+ // node_modules/subscript/feature/string.js
180
+ var escape = { n: "\n", r: "\r", t: " ", b: "\b", f: "\f", v: "\v" };
181
+ var string = (q) => (qc, c, str = "") => {
182
+ qc && err2("Unexpected string");
183
+ skip();
184
+ while (c = cur.charCodeAt(idx), c - q) {
185
+ if (c === BSLASH)
186
+ skip(), c = skip(), str += escape[c] || c;
187
+ else
188
+ str += skip();
378
189
  }
190
+ skip() || err2("Bad string");
191
+ return [, str];
379
192
  };
380
- E.prototype.d = function() {
381
- this.f |= 8;
382
- if (!(1 & this.f))
383
- b(this);
384
- };
385
- function O(i2) {
386
- var t2 = new E(i2);
387
- try {
388
- t2.c();
389
- } catch (i3) {
390
- t2.d();
391
- throw i3;
392
- }
393
- return t2.d.bind(t2);
394
- }
193
+ lookup[DQUOTE] = string(DQUOTE);
194
+ lookup[QUOTE] = string(QUOTE);
195
+
196
+ // node_modules/subscript/feature/call.js
197
+ access("()", PREC_ACCESS);
198
+ operator(
199
+ "(",
200
+ (a, b, args) => (args = !b ? () => [] : b[0] === "," ? (b = b.slice(1).map((b2) => !b2 ? err() : compile(b2)), (ctx) => b.map((arg) => arg(ctx))) : (b = compile(b), (ctx) => [b(ctx)]), prop(a, (obj, path, ctx) => obj[path](...args(ctx)), true))
201
+ );
202
+
203
+ // node_modules/subscript/feature/access.js
204
+ access("[]", PREC_ACCESS);
205
+ operator("[", (a, b) => !b ? err() : (a = compile(a), b = compile(b), (ctx) => a(ctx)[b(ctx)]));
206
+ binary(".", PREC_ACCESS);
207
+ operator(".", (a, b) => (a = compile(a), b = !b[0] ? b[1] : b, (ctx) => a(ctx)[b]));
208
+
209
+ // node_modules/subscript/feature/group.js
210
+ group("()", PREC_ACCESS);
211
+ operator("()", (a) => (!a && err2("Empty ()"), compile(a)));
212
+ var last = (...args) => (args = args.map(compile), (ctx) => args.map((arg) => arg(ctx)).pop());
213
+ nary(",", PREC_SEQ), operator(",", last);
214
+ nary(";", PREC_SEQ, true), operator(";", last);
215
+
216
+ // node_modules/subscript/feature/mult.js
217
+ binary("*", PREC_MULT), operator("*", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) * b(ctx)));
218
+ binary("/", PREC_MULT), operator("/", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) / b(ctx)));
219
+ binary("%", PREC_MULT), operator("%", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) % b(ctx)));
220
+ binary("*=", PREC_ASSIGN, true);
221
+ operator("*=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] *= b(ctx))));
222
+ binary("/=", PREC_ASSIGN, true);
223
+ operator("/=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] /= b(ctx))));
224
+ binary("%=", PREC_ASSIGN, true);
225
+ operator("%=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] %= b(ctx))));
226
+
227
+ // node_modules/subscript/feature/add.js
228
+ unary("+", PREC_PREFIX), operator("+", (a, b) => !b && (a = compile(a), (ctx) => +a(ctx)));
229
+ unary("-", PREC_PREFIX), operator("-", (a, b) => !b && (a = compile(a), (ctx) => -a(ctx)));
230
+ binary("+", PREC_ADD), operator("+", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) + b(ctx)));
231
+ binary("-", PREC_ADD), operator("-", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) - b(ctx)));
232
+ binary("+=", PREC_ASSIGN, true);
233
+ operator("+=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] += b(ctx))));
234
+ binary("-=", PREC_ASSIGN, true);
235
+ operator("-=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] -= b(ctx))));
236
+
237
+ // node_modules/subscript/feature/increment.js
238
+ var inc;
239
+ var dec;
240
+ token("++", PREC_POSTFIX, (a) => a ? ["++-", a] : ["++", expr(PREC_POSTFIX - 1)]);
241
+ operator("++", inc = (a) => prop(a, (obj, path, ctx) => ++obj[path]));
242
+ operator("++-", inc = (a) => prop(a, (obj, path, ctx) => obj[path]++));
243
+ token("--", PREC_POSTFIX, (a) => a ? ["--+", a] : ["--", expr(PREC_POSTFIX - 1)]);
244
+ operator("--", dec = (a) => prop(a, (obj, path, ctx) => --obj[path]));
245
+ operator("--+", dec = (a) => prop(a, (obj, path, ctx) => obj[path]--));
246
+
247
+ // node_modules/subscript/feature/bitwise.js
248
+ unary("~", PREC_PREFIX), operator("~", (a, b) => !b && (a = compile(a), (ctx) => ~a(ctx)));
249
+ binary("|", PREC_OR), operator("|", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) | b(ctx)));
250
+ binary("&", PREC_AND), operator("&", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) & b(ctx)));
251
+ binary("^", PREC_XOR), operator("^", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) ^ b(ctx)));
252
+ binary(">>", PREC_SHIFT), operator(">>", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) >> b(ctx)));
253
+ binary("<<", PREC_SHIFT), operator("<<", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) << b(ctx)));
254
+
255
+ // node_modules/subscript/feature/compare.js
256
+ binary("==", PREC_EQ), operator("==", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) == b(ctx)));
257
+ binary("!=", PREC_EQ), operator("!=", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) != b(ctx)));
258
+ binary(">", PREC_COMP), operator(">", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) > b(ctx)));
259
+ binary("<", PREC_COMP), operator("<", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) < b(ctx)));
260
+ binary(">=", PREC_COMP), operator(">=", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) >= b(ctx)));
261
+ binary("<=", PREC_COMP), operator("<=", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) <= b(ctx)));
395
262
 
396
- // src/state.signals-proxy.js
263
+ // node_modules/subscript/feature/logic.js
264
+ unary("!", PREC_PREFIX), operator("!", (a, b) => !b && (a = compile(a), (ctx) => !a(ctx)));
265
+ binary("||", PREC_LOR);
266
+ operator("||", (a, b) => (a = compile(a), b = compile(b), (ctx) => a(ctx) || b(ctx)));
267
+ binary("&&", PREC_LAND);
268
+ operator("&&", (a, b) => (a = compile(a), b = compile(b), (ctx) => a(ctx) && b(ctx)));
269
+
270
+ // node_modules/subscript/feature/assign.js
271
+ binary("=", PREC_ASSIGN, true);
272
+ operator("=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] = b(ctx))));
273
+
274
+ // node_modules/subscript/subscript.js
275
+ var subscript_default = (s) => compile_default(parse_default(s));
276
+
277
+ // node_modules/subscript/feature/comment.js
278
+ token("/*", PREC_TOKEN, (a, prec) => (skip((c) => c !== STAR && cur.charCodeAt(idx + 1) !== 47), skip(2), a || expr(prec) || []));
279
+ token("//", PREC_TOKEN, (a, prec) => (skip((c) => c >= SPACE), a || expr(prec) || [""]));
280
+
281
+ // node_modules/subscript/feature/pow.js
282
+ binary("**", PREC_EXP, true), operator("**", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) ** b(ctx)));
283
+
284
+ // node_modules/subscript/feature/ternary.js
285
+ token("?", PREC_ASSIGN, (a, b, c) => a && (b = expr(PREC_ASSIGN, COLON)) && (c = expr(PREC_ASSIGN + 1), ["?", a, b, c]));
286
+ operator("?", (a, b, c) => (a = compile(a), b = compile(b), c = compile(c), (ctx) => a(ctx) ? b(ctx) : c(ctx)));
287
+
288
+ // node_modules/subscript/feature/bool.js
289
+ token("true", PREC_TOKEN, (a) => a ? err() : [, true]);
290
+ token("false", PREC_TOKEN, (a) => a ? err() : [, false]);
291
+
292
+ // node_modules/subscript/feature/array.js
293
+ group("[]", PREC_TOKEN);
294
+ operator("[]", (a, b) => !a ? () => [] : a[0] === "," ? (a = a.slice(1).map(compile), (ctx) => a.map((a2) => a2(ctx))) : (a = compile(a), (ctx) => [a(ctx)]));
295
+
296
+ // node_modules/subscript/feature/object.js
297
+ group("{}", PREC_TOKEN);
298
+ operator("{}", (a, b) => !a ? () => ({}) : a[0] === "," ? (a = a.slice(1).map(compile), (ctx) => Object.fromEntries(a.map((a2) => a2(ctx)))) : a[0] === ":" ? (a = compile(a), (ctx) => Object.fromEntries([a(ctx)])) : (b = compile(a), (ctx) => ({ [a]: b(ctx) })));
299
+ binary(":", PREC_ASSIGN, true);
300
+ operator(":", (a, b) => (b = compile(b), a = Array.isArray(a) ? compile(a) : ((a2) => a2).bind(0, a), (ctx) => [a(ctx), b(ctx)]));
301
+
302
+ // node_modules/subscript/feature/arrow.js
303
+ binary("=>", PREC_ASSIGN, true);
304
+ operator(
305
+ "=>",
306
+ (a, b) => (a = a[0] === "()" ? a[1] : a, a = !a ? [] : a[0] === "," ? a = a.slice(1) : a = [a], b = compile(b[0] === "{}" ? b[1] : b), (ctx = null) => (ctx = Object.create(ctx), (...args) => (a.map((a2, i) => ctx[a2] = args[i]), b(ctx))))
307
+ );
308
+ binary("");
309
+
310
+ // node_modules/subscript/feature/optional.js
311
+ token("?.", PREC_ACCESS, (a) => a && ["?.", a]);
312
+ operator("?.", (a) => (a = compile(a), (ctx) => a(ctx) || (() => {
313
+ })));
314
+ token("?.", PREC_ACCESS, (a, b) => a && (b = expr(PREC_ACCESS), !b?.map) && ["?.", a, b]);
315
+ operator("?.", (a, b) => b && (a = compile(a), (ctx) => a(ctx)?.[b]));
316
+ operator("(", (a, b, container, args, path, optional) => a[0] === "?." && (a[2] || Array.isArray(a[1])) && (args = !b ? () => [] : b[0] === "," ? (b = b.slice(1).map(compile), (ctx) => b.map((a2) => a2(ctx))) : (b = compile(b), (ctx) => [b(ctx)]), !a[2] && (optional = true, a = a[1]), a[0] === "[" ? path = compile(a[2]) : path = () => a[2], container = compile(a[1]), optional ? (ctx) => container(ctx)?.[path(ctx)]?.(...args(ctx)) : (ctx) => container(ctx)?.[path(ctx)](...args(ctx))));
317
+
318
+ // node_modules/subscript/justin.js
319
+ binary("in", PREC_COMP), operator("in", (a, b) => b && (a = compile_default(a), b = compile_default(b), (ctx) => a(ctx) in b(ctx)));
320
+ binary("===", PREC_EQ), binary("!==", 9);
321
+ operator("===", (a, b) => (a = compile_default(a), b = compile_default(b), (ctx) => a(ctx) === b(ctx)));
322
+ operator("===", (a, b) => (a = compile_default(a), b = compile_default(b), (ctx) => a(ctx) !== b(ctx)));
323
+ binary("??", PREC_LOR);
324
+ operator("??", (a, b) => b && (a = compile_default(a), b = compile_default(b), (ctx) => a(ctx) ?? b(ctx)));
325
+ binary("??=", PREC_ASSIGN, true);
326
+ operator("??=", (a, b) => (b = compile_default(b), prop(a, (obj, path, ctx) => obj[path] ??= b(ctx))));
327
+ binary("||=", PREC_ASSIGN, true);
328
+ operator("||=", (a, b) => (b = compile_default(b), prop(a, (obj, path, ctx) => obj[path] ||= b(ctx))));
329
+ binary("&&=", PREC_ASSIGN, true);
330
+ operator("&&=", (a, b) => (b = compile_default(b), prop(a, (obj, path, ctx) => obj[path] &&= b(ctx))));
331
+ token("undefined", 20, (a) => a ? err2() : [, void 0]);
332
+ token("NaN", 20, (a) => a ? err2() : [, NaN]);
333
+ token("null", 20, (a) => a ? err2() : [, null]);
334
+ var justin_default = subscript_default;
335
+
336
+ // core.js
397
337
  var _dispose = Symbol.dispose ||= Symbol("dispose");
398
- var _signals = Symbol("signals");
399
- var _change = Symbol("length");
400
- var sandbox = {
401
- Array,
402
- Object,
403
- Number,
404
- String,
405
- Boolean,
406
- Date,
407
- console,
408
- window,
409
- document,
410
- history,
411
- navigator,
412
- location,
413
- screen,
414
- localStorage,
415
- sessionStorage,
416
- alert,
417
- prompt,
418
- confirm,
419
- fetch,
420
- performance,
421
- setTimeout,
422
- setInterval,
423
- requestAnimationFrame
424
- };
425
- var isObject = (v2) => v2?.constructor === Object;
426
- var lastProp;
427
- function createState(values, parent) {
428
- if (!isObject(values) && !Array.isArray(values))
429
- return values;
430
- if (values[_signals] && !parent)
431
- return values;
432
- const initSignals = values[_signals];
433
- const isArr = Array.isArray(values), _len = a(isArr ? values.length : Object.values(values).length), signals = parent ? Object.create((parent = createState(parent))[_signals]) : Array.isArray(values) ? [] : {}, proto = signals.constructor.prototype;
434
- if (parent)
435
- for (let key in parent)
436
- parent[key];
437
- const state = new Proxy(values, {
438
- has() {
439
- return true;
440
- },
441
- get(values2, key) {
442
- if (isArr)
443
- if (key === "length")
444
- return proto[lastProp] ? _len.peek() : _len.value;
445
- else
446
- lastProp = key;
447
- if (proto[key])
448
- return proto[key];
449
- if (key === _signals)
450
- return signals;
451
- if (key === _change)
452
- return _len.value;
453
- const s2 = signals[key] || initSignal(key);
454
- if (s2)
455
- return s2.value;
456
- return sandbox[key];
457
- },
458
- set(values2, key, v2) {
459
- if (isArr) {
460
- if (key === "length") {
461
- n(() => {
462
- for (let i2 = v2, l2 = signals.length; i2 < l2; i2++)
463
- delete state[i2];
464
- _len.value = signals.length = values2.length = v2;
465
- });
466
- return true;
467
- }
468
- }
469
- let newProp = false;
470
- const s2 = signals[key] || initSignal(key, v2) || (newProp = true, a());
471
- const cur = s2.peek();
472
- if (v2 === cur)
473
- ;
474
- else if (s2._set)
475
- s2._set(v2);
476
- else if (Array.isArray(v2) && Array.isArray(cur)) {
477
- s(() => n(() => {
478
- let i2 = 0, l2 = v2.length, vals = values2[key];
479
- for (; i2 < l2; i2++)
480
- cur[i2] = vals[i2] = v2[i2];
481
- cur.length = l2;
482
- }));
483
- } else {
484
- s2.value = createState(values2[key] = v2);
485
- }
486
- if (isArr) {
487
- if (key >= _len.peek())
488
- _len.value = signals.length = values2.length = Number(key) + 1;
489
- } else if (newProp) {
490
- _len.value++;
491
- }
492
- return true;
493
- },
494
- deleteProperty(values2, key) {
495
- const s2 = signals[key];
496
- if (s2) {
497
- const { _del } = s2;
498
- delete s2._del;
499
- delete signals[key];
500
- _del?.();
338
+ var SPRAE = `\u2234`;
339
+ var { signal: signal2, effect: effect2, batch: batch2, computed: computed2, untracked: untracked2 } = ulive_es_exports;
340
+ var directive = {};
341
+ var memo = /* @__PURE__ */ new WeakMap();
342
+ function sprae(container, values) {
343
+ if (!container.children)
344
+ return;
345
+ if (memo.has(container)) {
346
+ const [state2, effects2] = memo.get(container);
347
+ for (let k in values)
348
+ state2[k] = values[k];
349
+ for (let fx of effects2)
350
+ fx();
351
+ }
352
+ const state = values || {};
353
+ const effects = [];
354
+ const init = (el, parent = el.parentNode) => {
355
+ if (el.attributes) {
356
+ for (let i = 0; i < el.attributes.length; ) {
357
+ let attr2 = el.attributes[i];
358
+ if (attr2.name[0] === ":") {
359
+ el.removeAttribute(attr2.name);
360
+ let names = attr2.name.slice(1).split(":");
361
+ for (let name of names) {
362
+ let update = (directive[name] || directive.default)(el, attr2.value, state, name);
363
+ if (update) {
364
+ update[_dispose] = effect2(update);
365
+ effects.push(update);
366
+ }
367
+ }
368
+ if (memo.has(el))
369
+ return;
370
+ if (el.parentNode !== parent)
371
+ return false;
372
+ } else
373
+ i++;
501
374
  }
502
- delete values2[key];
503
- if (!isArr)
504
- _len.value--;
505
- return true;
506
375
  }
507
- });
508
- for (let key in values)
509
- signals[key] = initSignals?.[key] ?? initSignal(key);
510
- function initSignal(key) {
511
- if (values.hasOwnProperty(key)) {
512
- const desc = Object.getOwnPropertyDescriptor(values, key);
513
- if (desc?.get) {
514
- (signals[key] = p(desc.get.bind(state)))._set = desc.set?.bind(state);
515
- return signals[key];
516
- }
517
- return signals[key] = desc.value?.peek ? desc.value : a(createState(desc.value));
376
+ for (let i = 0, child; child = el.children[i]; i++) {
377
+ if (init(child, el) === false)
378
+ i--;
518
379
  }
519
- }
380
+ };
381
+ init(container);
382
+ if (memo.has(container))
383
+ return state;
384
+ memo.set(container, [state, effects]);
385
+ container.classList?.add(SPRAE);
386
+ container[_dispose] = () => {
387
+ while (effects.length)
388
+ effects.pop()[_dispose]();
389
+ container.classList.remove(SPRAE);
390
+ memo.delete(container);
391
+ let els = container.getElementsByClassName(SPRAE);
392
+ while (els.length)
393
+ els[0][_dispose]?.();
394
+ };
520
395
  return state;
521
396
  }
397
+ var evalMemo = {};
398
+ var compile2 = (expr2, dir, evaluate) => {
399
+ if (evaluate = evalMemo[expr2 = expr2.trim()])
400
+ return evaluate;
401
+ try {
402
+ evaluate = justin_default(expr2);
403
+ } catch (e) {
404
+ throw Object.assign(e, { message: `${SPRAE} ${e.message}
522
405
 
523
- // src/util.js
524
- var queueMicrotask = Promise.prototype.then.bind(Promise.resolve());
525
-
526
- // src/directives.js
527
- var primary = {};
528
- var secondary = {};
529
- primary["if"] = (el, expr, state) => {
530
- let holder = document.createTextNode(""), clauses = [parseExpr(el, expr, ":if")], els = [el], cur = el;
531
- while (cur = el.nextElementSibling) {
532
- if (cur.hasAttribute(":else")) {
533
- cur.removeAttribute(":else");
534
- if (expr = cur.getAttribute(":if")) {
535
- cur.removeAttribute(":if"), cur.remove();
536
- els.push(cur);
537
- clauses.push(parseExpr(el, expr, ":else :if"));
538
- } else {
539
- cur.remove();
540
- els.push(cur);
541
- clauses.push(() => 1);
542
- }
543
- } else
544
- break;
406
+ ${dir}${expr2 ? `="${expr2}"
407
+
408
+ ` : ""}`, expr: expr2 });
545
409
  }
546
- el.replaceWith(cur = holder);
547
- const dispose = O(() => {
548
- let i2 = clauses.findIndex((f2) => f2(state));
549
- if (els[i2] != cur) {
550
- ;
551
- (cur[_each] || cur).replaceWith(cur = els[i2] || holder);
552
- sprae(cur, state);
553
- }
554
- });
555
- return () => {
556
- for (const el2 of els)
557
- el2[_dispose]?.();
558
- dispose();
559
- };
410
+ return evalMemo[expr2] = evaluate;
411
+ };
412
+ var swap2 = swap_inflate_default;
413
+ var ipol = (v, state) => {
414
+ return v?.replace ? v.replace(/\$<([^>]+)>/g, (match, field) => state[field]?.valueOf?.() ?? "") : v;
415
+ };
416
+ sprae.use = (s) => {
417
+ s.signal && (signal2 = s.signal, effect2 = s.effect, computed2 = s.computed, batch2 = s.batch || ((fn) => fn()), untracked2 = s.untracked || batch2);
418
+ s.swap && (swap2 = s.swap);
560
419
  };
420
+
421
+ // directive/each.js
561
422
  var _each = Symbol(":each");
562
- primary["each"] = (tpl, expr, state) => {
563
- const each = parseForExpression(expr);
564
- if (!each)
565
- return exprError(new Error(), tpl, expr, ":each");
566
- const [itemVar, idxVar, itemsExpr] = each;
423
+ var keys = {};
424
+ directive.each = (tpl, expr2, state, name) => {
425
+ let [leftSide, itemsExpr] = expr2.split(/\s+in\s+/);
426
+ let [itemVar, idxVar = "_$"] = leftSide.split(/\s*,\s*/);
567
427
  const holder = tpl[_each] = document.createTextNode("");
568
428
  tpl.replaceWith(holder);
569
- const evaluate = parseExpr(tpl, itemsExpr, ":each");
570
- let curItems, signals;
571
- O(() => {
572
- let srcItems = evaluate(state), newItems, keys2;
573
- let prevl = curItems?.length || 0;
574
- if (!srcItems)
575
- newItems = [];
576
- else if (typeof srcItems === "number")
577
- newItems = Array.from({ length: srcItems }, (_2, i2) => i2);
578
- else if (Array.isArray(srcItems))
579
- newItems = srcItems;
580
- else if (typeof srcItems === "object") {
581
- keys2 = Object.keys(srcItems);
582
- newItems = Object.values(srcItems);
583
- srcItems[_change];
584
- } else {
585
- exprError(Error("Bad items value"), tpl, expr, ":each", srcItems);
586
- }
587
- s(() => n(() => {
588
- if (!curItems || !curItems[_signals]) {
589
- for (let i2 = 0; i2 < prevl; i2++)
590
- signals[i2]?._del();
591
- curItems = newItems, signals = curItems[_signals] || [];
592
- if (keys2)
593
- prevl = 0;
594
- } else {
595
- let newl = newItems.length, i2 = 0;
596
- for (; i2 < newl; i2++)
597
- curItems[i2] = newItems[i2];
598
- curItems.length = newl;
429
+ const evaluate = compile2(itemsExpr, name);
430
+ const memo2 = /* @__PURE__ */ new WeakMap();
431
+ tpl.removeAttribute(":key");
432
+ let cur2 = [];
433
+ return () => {
434
+ let items = evaluate(state)?.valueOf(), els = [];
435
+ if (typeof items === "number")
436
+ items = Array.from({ length: items }, (_, i) => i);
437
+ const count = /* @__PURE__ */ new WeakSet();
438
+ for (let idx2 in items) {
439
+ let item = items[idx2];
440
+ let substate = Object.create(state, { [idxVar]: { value: idx2 } });
441
+ substate[itemVar] = item;
442
+ item = item.peek?.() ?? item;
443
+ let key = item.key ?? item.id ?? item;
444
+ let el;
445
+ if (key == null)
446
+ el = tpl.cloneNode(true);
447
+ else {
448
+ if (Object(key) !== key)
449
+ key = keys[key] ||= Object(key);
450
+ if (count.has(key)) {
451
+ console.warn("Duplicate key", key), el = tpl.cloneNode(true);
452
+ } else {
453
+ console.log(key, count.has(key));
454
+ count.add(key);
455
+ el = memo2.get(key) || memo2.set(key, tpl.cloneNode(true)).get(key);
456
+ }
599
457
  }
600
- }));
601
- return O(() => {
602
- let newl = newItems.length;
603
- if (prevl !== newl)
604
- s(() => n(() => {
605
- for (let i2 = prevl; i2 < newl; i2++) {
606
- const idx = keys2?.[i2] ?? i2;
607
- const el = tpl.cloneNode(true), scope = createState({
608
- [itemVar]: signals[i2] ?? curItems[i2],
609
- [idxVar]: idx
610
- }, state);
611
- holder.before(el);
612
- sprae(el, scope);
613
- const { _del } = signals[i2] ||= {};
614
- signals[i2]._del = () => {
615
- delete curItems[i2];
616
- _del?.();
617
- el[_dispose](), el.remove();
618
- };
619
- }
620
- prevl = newl;
621
- }));
622
- });
623
- });
624
- return () => n(() => {
625
- for (let _i of signals)
626
- _i?._del();
627
- signals.length = 0;
628
- curItems.length = 0;
629
- });
458
+ if (el.content)
459
+ el = el.content.cloneNode(true);
460
+ sprae(el, substate);
461
+ if (el.nodeType === 11)
462
+ els.push(...el.childNodes);
463
+ else
464
+ els.push(el);
465
+ }
466
+ swap2(holder.parentNode, cur2, cur2 = els, holder);
467
+ };
630
468
  };
631
- primary["with"] = (el, expr, rootState) => {
632
- let evaluate = parseExpr(el, expr, ":with");
633
- const localState = evaluate(rootState);
634
- let state = createState(localState, rootState);
635
- sprae(el, state);
636
- return el[_dispose];
469
+
470
+ // directive/if.js
471
+ var _prevIf = Symbol("if");
472
+ directive.if = (ifEl, expr2, state, name) => {
473
+ let parent = ifEl.parentNode, next = ifEl.nextElementSibling, holder = document.createTextNode(""), evaluate = compile2(expr2, name), cur2, ifs, elses, none = [];
474
+ ifEl.after(holder);
475
+ if (ifEl.content)
476
+ cur2 = none, ifEl.remove(), ifs = [...ifEl.content.childNodes];
477
+ else
478
+ ifs = cur2 = [ifEl];
479
+ if (next?.hasAttribute(":else")) {
480
+ next.removeAttribute(":else");
481
+ if (next.hasAttribute(":if"))
482
+ elses = none;
483
+ else
484
+ next.remove(), elses = next.content ? [...next.content.childNodes] : [next];
485
+ } else
486
+ elses = none;
487
+ return () => {
488
+ const newEls = evaluate(state)?.valueOf() ? ifs : ifEl[_prevIf] ? none : elses;
489
+ if (next)
490
+ next[_prevIf] = newEls === ifs;
491
+ if (cur2 != newEls) {
492
+ if (cur2[0]?.[_each])
493
+ cur2 = [cur2[0][_each]];
494
+ swap2(parent, cur2, cur2 = newEls, holder);
495
+ for (let el of cur2)
496
+ sprae(el, state);
497
+ }
498
+ };
637
499
  };
638
- primary["ref"] = (el, expr, state) => {
639
- state[expr] = el;
500
+
501
+ // directive/ref.js
502
+ directive.ref = (el, expr2, state) => {
503
+ let prev;
504
+ return () => {
505
+ if (prev)
506
+ delete state[prev];
507
+ state[prev = ipol(expr2, state)] = el;
508
+ };
640
509
  };
641
- function parseForExpression(expression) {
642
- let forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
643
- let stripParensRE = /^\s*\(|\)\s*$/g;
644
- let forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
645
- let inMatch = expression.match(forAliasRE);
646
- if (!inMatch)
647
- return;
648
- let items = inMatch[2].trim();
649
- let item = inMatch[1].replace(stripParensRE, "").trim();
650
- let iteratorMatch = item.match(forIteratorRE);
651
- if (iteratorMatch)
652
- return [
653
- item.replace(forIteratorRE, "").trim(),
654
- iteratorMatch[1].trim(),
655
- items
656
- ];
657
- return [item, "", items];
658
- }
659
- secondary["render"] = (el, expr, state) => {
660
- let evaluate = parseExpr(el, expr, ":render"), tpl = evaluate(state);
510
+
511
+ // directive/scope.js
512
+ directive.scope = (el, expr2, rootState, name) => {
513
+ let evaluate = compile2(expr2, name);
514
+ return () => {
515
+ sprae(el, { ...rootState, ...evaluate(rootState)?.valueOf?.() || {} });
516
+ };
517
+ };
518
+
519
+ // directive/html.js
520
+ directive.html = (el, expr2, state, name) => {
521
+ let evaluate = compile2(expr2, name), tpl = evaluate(state);
661
522
  if (!tpl)
662
- exprError(new Error("Template not found"), el, expr, ":render");
663
- let content = tpl.content.cloneNode(true);
523
+ return;
524
+ let content = (tpl.content || tpl).cloneNode(true);
664
525
  el.replaceChildren(content);
665
526
  sprae(el, state);
666
- return el[_dispose];
667
527
  };
668
- secondary["id"] = (el, expr, state) => {
669
- let evaluate = parseExpr(el, expr, ":id");
670
- const update = (v2) => el.id = v2 || v2 === 0 ? v2 : "";
671
- return O(() => update(evaluate(state)));
528
+
529
+ // directive/text.js
530
+ directive.text = (el, expr2, state) => {
531
+ let evaluate = compile2(expr2, "text");
532
+ if (el.content)
533
+ el.replaceWith(el = document.createTextNode(""));
534
+ return () => {
535
+ let value = evaluate(state)?.valueOf();
536
+ el.textContent = value == null ? "" : value;
537
+ };
672
538
  };
673
- secondary["class"] = (el, expr, state) => {
674
- let evaluate = parseExpr(el, expr, ":class");
675
- let initClassName = el.getAttribute("class");
676
- return O(() => {
677
- let v2 = evaluate(state);
678
- let className = [initClassName];
679
- if (v2) {
680
- if (typeof v2 === "string")
681
- className.push(v2);
682
- else if (Array.isArray(v2))
683
- className.push(...v2);
539
+
540
+ // directive/class.js
541
+ directive.class = (el, expr2, state) => {
542
+ let evaluate = compile2(expr2, "class");
543
+ let cur2 = /* @__PURE__ */ new Set();
544
+ return () => {
545
+ let v = evaluate(state);
546
+ let clsx = /* @__PURE__ */ new Set();
547
+ if (v) {
548
+ if (typeof v === "string")
549
+ ipol(v?.valueOf?.(), state).split(" ").map((cls) => clsx.add(cls));
550
+ else if (Array.isArray(v))
551
+ v.map((v2) => (v2 = ipol(v2?.valueOf?.(), state)) && clsx.add(v2));
684
552
  else
685
- className.push(...Object.entries(v2).map(([k, v3]) => v3 ? k : ""));
553
+ Object.entries(v).map(([k, v2]) => v2?.valueOf?.() && clsx.add(k));
686
554
  }
687
- if (className = className.filter(Boolean).join(" "))
688
- el.setAttribute("class", className);
689
- else
690
- el.removeAttribute("class");
691
- });
555
+ for (let cls of cur2)
556
+ if (clsx.has(cls))
557
+ clsx.delete(cls);
558
+ else
559
+ el.classList.remove(cls);
560
+ for (let cls of cur2 = clsx)
561
+ el.classList.add(cls);
562
+ };
692
563
  };
693
- secondary["style"] = (el, expr, state) => {
694
- let evaluate = parseExpr(el, expr, ":style");
564
+
565
+ // directive/style.js
566
+ directive.style = (el, expr2, state) => {
567
+ let evaluate = compile2(expr2, "style");
695
568
  let initStyle = el.getAttribute("style") || "";
696
569
  if (!initStyle.endsWith(";"))
697
570
  initStyle += "; ";
698
- return O(() => {
699
- let v2 = evaluate(state);
700
- if (typeof v2 === "string")
701
- el.setAttribute("style", initStyle + v2);
571
+ return () => {
572
+ let v = evaluate(state)?.valueOf();
573
+ if (typeof v === "string")
574
+ el.setAttribute("style", initStyle + ipol(v, state));
702
575
  else {
703
- s(() => {
704
- el.setAttribute("style", initStyle);
705
- for (let k in v2)
706
- if (typeof v2[k] !== "symbol")
707
- el.style.setProperty(k, v2[k]);
708
- });
576
+ el.setAttribute("style", initStyle);
577
+ for (let k in v)
578
+ el.style.setProperty(k, ipol(v[k], state));
709
579
  }
710
- });
711
- };
712
- secondary["text"] = (el, expr, state) => {
713
- let evaluate = parseExpr(el, expr, ":text");
714
- return O(() => {
715
- let value = evaluate(state);
716
- el.textContent = value == null ? "" : value;
717
- });
718
- };
719
- secondary[""] = (el, expr, state) => {
720
- let evaluate = parseExpr(el, expr, ":");
721
- if (evaluate)
722
- return O(() => {
723
- let value = evaluate(state);
724
- for (let key in value)
725
- attr(el, dashcase(key), value[key]);
726
- });
727
- };
728
- secondary["value"] = (el, expr, state) => {
729
- let evaluate = parseExpr(el, expr, ":value");
730
- let from, to;
731
- let update = el.type === "text" || el.type === "" ? (value) => el.setAttribute("value", el.value = value == null ? "" : value) : el.tagName === "TEXTAREA" || el.type === "text" || el.type === "" ? (value) => (from = el.selectionStart, to = el.selectionEnd, el.setAttribute("value", el.value = value == null ? "" : value), from && el.setSelectionRange(from, to)) : el.type === "checkbox" ? (value) => (el.value = value ? "on" : "", attr(el, "checked", value)) : el.type === "select-one" ? (value) => {
732
- for (let option in el.options)
733
- option.removeAttribute("selected");
734
- el.value = value;
735
- el.selectedOptions[0]?.setAttribute("selected", "");
736
- } : (value) => el.value = value;
737
- return O(() => {
738
- update(evaluate(state));
739
- });
580
+ };
740
581
  };
741
- var directives_default = (el, expr, state, name) => {
582
+
583
+ // directive/default.js
584
+ directive.default = (el, expr2, state, name) => {
742
585
  let evt = name.startsWith("on") && name.slice(2);
743
- let evaluate = parseExpr(el, expr, ":" + name);
744
- if (!evaluate)
745
- return;
586
+ let evaluate = compile2(expr2, name);
746
587
  if (evt) {
747
- let off, dispose = O(() => {
748
- if (off)
749
- off(), off = null;
750
- let value = evaluate(state);
751
- if (value)
752
- off = on(el, evt, value);
753
- });
754
- return () => (off?.(), dispose());
588
+ let off;
589
+ return () => (off?.(), off = on(el, evt, evaluate(state)));
755
590
  }
756
- return O(() => {
757
- attr(el, name, evaluate(state));
758
- });
591
+ return () => {
592
+ let value = evaluate(state)?.valueOf();
593
+ if (name)
594
+ attr(el, name, ipol(value, state));
595
+ else
596
+ for (let key in value)
597
+ attr(el, dashcase(key), ipol(value[key], state));
598
+ };
759
599
  };
760
- var on = (el, e2, fn) => {
761
- if (!fn)
762
- return;
600
+ var on = (el, e, fn = () => {
601
+ }) => {
763
602
  const ctx = { evt: "", target: el, test: () => true };
764
- ctx.evt = (e2.startsWith("on") ? e2.slice(2) : e2).replace(
603
+ ctx.evt = e.replace(
765
604
  /\.(\w+)?-?([-\w]+)?/g,
766
605
  (match, mod, param = "") => (ctx.test = mods[mod]?.(ctx, ...param.split("-")) || ctx.test, "")
767
606
  );
768
607
  const { evt, target, test, defer, stop, prevent, ...opts } = ctx;
769
608
  if (defer)
770
609
  fn = defer(fn);
771
- const cb = (e3) => test(e3) && (stop && e3.stopPropagation(), prevent && e3.preventDefault(), fn.call(target, e3));
610
+ const cb = (e2) => test(e2) && (stop && e2.stopPropagation(), prevent && e2.preventDefault(), fn.call(target, e2));
772
611
  target.addEventListener(evt, cb, opts);
773
612
  return () => target.removeEventListener(evt, cb, opts);
774
613
  };
@@ -800,178 +639,111 @@ var mods = {
800
639
  debounce(ctx, wait) {
801
640
  ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108);
802
641
  },
803
- outside: (ctx) => (e2) => {
642
+ outside: (ctx) => (e) => {
804
643
  let target = ctx.target;
805
- if (target.contains(e2.target))
644
+ if (target.contains(e.target))
806
645
  return false;
807
- if (e2.target.isConnected === false)
646
+ if (e.target.isConnected === false)
808
647
  return false;
809
648
  if (target.offsetWidth < 1 && target.offsetHeight < 1)
810
649
  return false;
811
650
  return true;
812
651
  },
813
- self: (ctx) => (e2) => e2.target === ctx.target,
814
- ctrl: (ctx, ...param) => (e2) => keys.ctrl(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
815
- shift: (ctx, ...param) => (e2) => keys.shift(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
816
- alt: (ctx, ...param) => (e2) => keys.alt(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
817
- meta: (ctx, ...param) => (e2) => keys.meta(e2) && param.every((p2) => keys[p2] ? keys[p2](e2) : e2.key === p2),
818
- arrow: (ctx) => keys.arrow,
819
- enter: (ctx) => keys.enter,
820
- escape: (ctx) => keys.escape,
821
- tab: (ctx) => keys.tab,
822
- space: (ctx) => keys.space,
823
- backspace: (ctx) => keys.backspace,
824
- delete: (ctx) => keys.delete,
825
- digit: (ctx) => keys.digit,
826
- letter: (ctx) => keys.letter,
827
- character: (ctx) => keys.character
828
- };
829
- var keys = {
830
- ctrl: (e2) => e2.ctrlKey || e2.key === "Control" || e2.key === "Ctrl",
831
- shift: (e2) => e2.shiftKey || e2.key === "Shift",
832
- alt: (e2) => e2.altKey || e2.key === "Alt",
833
- meta: (e2) => e2.metaKey || e2.key === "Meta" || e2.key === "Command",
834
- arrow: (e2) => e2.key.startsWith("Arrow"),
835
- enter: (e2) => e2.key === "Enter",
836
- escape: (e2) => e2.key.startsWith("Esc"),
837
- tab: (e2) => e2.key === "Tab",
838
- space: (e2) => e2.key === "\xA0" || e2.key === "Space" || e2.key === " ",
839
- backspace: (e2) => e2.key === "Backspace",
840
- delete: (e2) => e2.key === "Delete",
841
- digit: (e2) => /^\d$/.test(e2.key),
842
- letter: (e2) => /^[a-zA-Z]$/.test(e2.key),
843
- character: (e2) => /^\S$/.test(e2.key)
652
+ self: (ctx) => (e) => e.target === ctx.target,
653
+ ctrl: (_, ...param) => (e) => keys2.ctrl(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
654
+ shift: (_, ...param) => (e) => keys2.shift(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
655
+ alt: (_, ...param) => (e) => keys2.alt(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
656
+ meta: (_, ...param) => (e) => keys2.meta(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
657
+ arrow: () => keys2.arrow,
658
+ enter: () => keys2.enter,
659
+ escape: () => keys2.escape,
660
+ tab: () => keys2.tab,
661
+ space: () => keys2.space,
662
+ backspace: () => keys2.backspace,
663
+ delete: () => keys2.delete,
664
+ digit: () => keys2.digit,
665
+ letter: () => keys2.letter,
666
+ character: () => keys2.character
667
+ };
668
+ var keys2 = {
669
+ ctrl: (e) => e.ctrlKey || e.key === "Control" || e.key === "Ctrl",
670
+ shift: (e) => e.shiftKey || e.key === "Shift",
671
+ alt: (e) => e.altKey || e.key === "Alt",
672
+ meta: (e) => e.metaKey || e.key === "Meta" || e.key === "Command",
673
+ arrow: (e) => e.key.startsWith("Arrow"),
674
+ enter: (e) => e.key === "Enter",
675
+ escape: (e) => e.key.startsWith("Esc"),
676
+ tab: (e) => e.key === "Tab",
677
+ space: (e) => e.key === "\xA0" || e.key === "Space" || e.key === " ",
678
+ backspace: (e) => e.key === "Backspace",
679
+ delete: (e) => e.key === "Delete",
680
+ digit: (e) => /^\d$/.test(e.key),
681
+ letter: (e) => /^[a-zA-Z]$/.test(e.key),
682
+ character: (e) => /^\S$/.test(e.key)
683
+ };
684
+ var attr = (el, name, v) => {
685
+ if (v == null || v === false)
686
+ el.removeAttribute(name);
687
+ else
688
+ el.setAttribute(name, v === true ? "" : typeof v === "number" || typeof v === "string" ? v : "");
844
689
  };
845
690
  var throttle = (fn, limit) => {
846
- let pause, planned, block = (e2) => {
691
+ let pause, planned, block = (e) => {
847
692
  pause = true;
848
693
  setTimeout(() => {
849
694
  pause = false;
850
695
  if (planned)
851
- return planned = false, block(e2), fn(e2);
696
+ return planned = false, block(e), fn(e);
852
697
  }, limit);
853
698
  };
854
- return (e2) => {
699
+ return (e) => {
855
700
  if (pause)
856
701
  return planned = true;
857
- block(e2);
858
- return fn(e2);
702
+ block(e);
703
+ return fn(e);
859
704
  };
860
705
  };
861
706
  var debounce = (fn, wait) => {
862
707
  let timeout;
863
- return (e2) => {
708
+ return (e) => {
864
709
  clearTimeout(timeout);
865
710
  timeout = setTimeout(() => {
866
711
  timeout = null;
867
- fn(e2);
712
+ fn(e);
868
713
  }, wait);
869
714
  };
870
715
  };
871
- var attr = (el, name, v2) => {
872
- if (v2 == null || v2 === false)
873
- el.removeAttribute(name);
874
- else
875
- el.setAttribute(name, v2 === true ? "" : typeof v2 === "number" || typeof v2 === "string" ? v2 : "");
876
- };
877
- var evaluatorMemo = {};
878
- function parseExpr(el, expression, dir) {
879
- let evaluate = evaluatorMemo[expression];
880
- if (!evaluate) {
881
- try {
882
- evaluate = evaluatorMemo[expression] = new Function(`__scope`, `with (__scope) { let __; return ${expression.trim()} };`);
883
- } catch (e2) {
884
- return exprError(e2, el, expression, dir);
885
- }
886
- }
887
- return (state) => {
888
- let result;
889
- try {
890
- result = evaluate.call(el, state);
891
- } catch (e2) {
892
- return exprError(e2, el, expression, dir);
893
- }
894
- return result;
895
- };
896
- }
897
- function exprError(error, element, expression, directive) {
898
- Object.assign(error, { element, expression });
899
- console.warn(`\u2234 ${error.message}
900
-
901
- ${directive}=${expression ? `"${expression}"
902
-
903
- ` : ""}`, element);
904
- queueMicrotask(() => {
905
- throw error;
906
- }, 0);
907
- }
908
- function dashcase(str) {
716
+ var dashcase = (str) => {
909
717
  return str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, (match) => "-" + match.toLowerCase());
910
- }
718
+ };
911
719
 
912
- // src/core.js
913
- sprae.globals = sandbox;
914
- var memo = /* @__PURE__ */ new WeakMap();
915
- function sprae(container, values) {
916
- if (!container.children)
917
- return;
918
- if (memo.has(container))
919
- return n(() => Object.assign(memo.get(container), values));
920
- const state = createState(values || {});
921
- const disposes = [];
922
- const init = (el, parent = el.parentNode) => {
923
- for (let name in primary) {
924
- let attrName = ":" + name;
925
- if (el.hasAttribute?.(attrName)) {
926
- let expr = el.getAttribute(attrName);
927
- el.removeAttribute(attrName);
928
- disposes.push(primary[name](el, expr, state, name));
929
- if (memo.has(el))
930
- return;
931
- if (el.parentNode !== parent)
932
- return false;
933
- }
934
- }
935
- if (el.attributes) {
936
- for (let i2 = 0; i2 < el.attributes.length; ) {
937
- let attr2 = el.attributes[i2], prefix = attr2.name[0];
938
- if (prefix === ":" || prefix === "@") {
939
- el.removeAttribute(attr2.name);
940
- let expr = prefix === "@" ? `${attr2.value.includes("await") ? "async" : ""} event=>{${attr2.value}}` : attr2.value, names = attr2.name.slice(1).split(prefix);
941
- for (let name of names) {
942
- if (prefix === "@")
943
- name = `on` + name;
944
- let dir = secondary[name] || directives_default;
945
- disposes.push(dir(el, expr, state, name));
946
- }
947
- } else
948
- i2++;
949
- }
950
- }
951
- for (let i2 = 0, child; child = el.children[i2]; i2++) {
952
- if (init(child, el) === false)
953
- i2--;
954
- }
955
- };
956
- init(container);
957
- if (memo.has(container))
958
- return state;
959
- memo.set(container, state);
960
- if (disposes.length)
961
- Object.defineProperty(container, _dispose, {
962
- value: () => {
963
- while (disposes.length)
964
- disposes.shift()?.();
965
- memo.delete(container);
966
- }
967
- });
968
- return state;
969
- }
720
+ // directive/value.js
721
+ directive.value = (el, expr2, state) => {
722
+ let evaluate = compile2(expr2, "value");
723
+ let from, to;
724
+ let update = el.type === "text" || el.type === "" ? (value) => el.setAttribute("value", el.value = value == null ? "" : value) : el.tagName === "TEXTAREA" || el.type === "text" || el.type === "" ? (value) => (from = el.selectionStart, to = el.selectionEnd, el.setAttribute("value", el.value = value == null ? "" : value), from && el.setSelectionRange(from, to)) : el.type === "checkbox" ? (value) => (el.checked = value, attr(el, "checked", value)) : el.type === "select-one" ? (value) => {
725
+ for (let option in el.options)
726
+ option.removeAttribute("selected");
727
+ el.value = value;
728
+ el.selectedOptions[0]?.setAttribute("selected", "");
729
+ } : (value) => el.value = value;
730
+ return () => update(evaluate(state)?.valueOf?.());
731
+ };
970
732
 
971
- // src/index.js
972
- var src_default = sprae;
973
- if (document.currentScript)
974
- sprae(document.documentElement);
733
+ // directive/fx.js
734
+ directive.fx = (el, expr2, state, name) => {
735
+ let evaluate = compile2(expr2, name);
736
+ return () => evaluate(state);
737
+ };
975
738
  export {
976
- src_default as default
739
+ batch2 as batch,
740
+ compile2 as compile,
741
+ computed2 as computed,
742
+ sprae as default,
743
+ directive,
744
+ effect2 as effect,
745
+ ipol,
746
+ signal2 as signal,
747
+ swap2 as swap,
748
+ untracked2 as untracked
977
749
  };