sprae 8.1.3 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/sprae.js CHANGED
@@ -1,774 +1,617 @@
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;
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 });
101
5
  };
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;
6
+
7
+ // node_modules/swapdom/swap-inflate.js
8
+ var swap = (parent, a, b, end = null) => {
9
+ let i = 0, cur2, next2, 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++], next2 = cur2 ? cur2.nextSibling : end;
21
+ if (same(cur2, bi))
22
+ cur2 = next2;
23
+ else if (i < n && same(b[i], next2))
24
+ replace(cur2, bi, parent), cur2 = next2;
25
+ else
26
+ insert(cur2, bi, parent);
120
27
  }
121
- if (i2 === this.t)
122
- this.t = r2;
28
+ while (!same(cur2, end))
29
+ next2 = cur2.nextSibling, remove(cur2, parent), cur2 = next2;
123
30
  }
31
+ return b;
124
32
  };
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;
145
- };
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;
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;
236
64
  }
237
- var i2 = o;
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;
238
69
  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++;
70
+ teardown = fn();
71
+ } finally {
72
+ current = prev;
251
73
  }
252
- o = i2;
253
- w(this);
254
- this.f &= -2;
255
- return true;
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}\u2503${after}\``, "font-weight: bold");
127
+ };
128
+ var next = (is, from = idx, l) => {
129
+ while (l = is(cur.charCodeAt(idx)))
130
+ idx += l;
131
+ return cur.slice(from, idx);
132
+ };
133
+ var skip = (n = 1, from = idx) => (idx += n, cur.slice(from, idx));
134
+ var expr = (prec = 0, end, cc, token2, newNode, fn) => {
135
+ while ((cc = parse.space()) && (newNode = ((fn = lookup[cc]) && fn(token2, prec)) ?? (!token2 && next(parse.id))))
136
+ token2 = newNode;
137
+ if (end)
138
+ cc == end ? idx++ : err2();
139
+ return token2;
140
+ };
141
+ var id = parse.id = (c) => c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || c == 36 || c == 95 || c >= 192 && c != 215 && c != 247;
142
+ var space = parse.space = (cc) => {
143
+ while ((cc = cur.charCodeAt(idx)) <= SPACE)
144
+ idx++;
145
+ return cc;
146
+ };
147
+ var lookup = [];
148
+ 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 || !parse.id(cur.charCodeAt(idx + l))) && (idx += l, map(a, curPrec)) || (idx = from, prev?.(a, curPrec));
149
+ var binary = (op, prec, right = false) => token(op, prec, (a, b) => a && (b = expr(prec - (right ? 0.5 : 0))) && [op, a, b]);
150
+ var unary = (op, prec, post) => token(op, prec, (a) => post ? a && [op, a] : !a && (a = expr(prec - 0.5)) && [op, a]);
151
+ var nary = (op, prec) => {
152
+ token(
153
+ op,
154
+ prec,
155
+ (a, b) => (b = expr(prec), (!a || a[0] !== op) && (a = [op, a]), a.push(b), a)
156
+ );
256
157
  };
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);
158
+ var group = (op, prec) => token(op[0], prec, (a) => !a && [op, expr(0, op.charCodeAt(1))]);
159
+ var access = (op, prec) => token(op[0], prec, (a) => a && [op[0], a, expr(0, op.charCodeAt(1))]);
160
+ var parse_default = parse;
161
+
162
+ // node_modules/subscript/src/compile.js
163
+ var compile = (node) => !Array.isArray(node) ? compile.id(node) : !node[0] ? () => node[1] : operators[node[0]](...node.slice(1));
164
+ var id2 = compile.id = (name) => (ctx) => ctx?.[name];
165
+ var operators = {};
166
+ var operator = (op, fn, prev = operators[op]) => operators[op] = (...args) => fn(...args) || prev && prev(...args);
167
+ 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");
168
+ var compile_default = compile;
169
+
170
+ // node_modules/subscript/feature/number.js
171
+ var num = (a, _) => [, (a = +next((c) => c === PERIOD || c >= _0 && c <= _9 || (c === _E || c === _e ? 2 : 0))) != a ? err2() : a];
172
+ lookup[PERIOD] = (a) => !a && num();
173
+ for (let i = _0; i <= _9; i++)
174
+ lookup[i] = (a) => a ? err2() : num();
175
+
176
+ // node_modules/subscript/feature/string.js
177
+ var escape = { n: "\n", r: "\r", t: " ", b: "\b", f: "\f", v: "\v" };
178
+ var string = (q) => (qc, c, str = "") => {
179
+ qc && err2("Unexpected string");
180
+ skip();
181
+ while (c = cur.charCodeAt(idx), c - q) {
182
+ if (c === BSLASH)
183
+ skip(), c = skip(), str += escape[c] || c;
184
+ else
185
+ str += skip();
262
186
  }
263
- d.prototype.S.call(this, i2);
187
+ skip() || err2("Bad string");
188
+ return [, str];
264
189
  };
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);
190
+ lookup[DQUOTE] = string(DQUOTE);
191
+ lookup[QUOTE] = string(QUOTE);
192
+
193
+ // node_modules/subscript/feature/call.js
194
+ access("()", PREC_ACCESS);
195
+ operator(
196
+ "(",
197
+ (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))
198
+ );
199
+
200
+ // node_modules/subscript/feature/access.js
201
+ access("[]", PREC_ACCESS);
202
+ operator("[", (a, b) => !b ? err() : (a = compile(a), b = compile(b), (ctx) => a(ctx)[b(ctx)]));
203
+ binary(".", PREC_ACCESS);
204
+ operator(".", (a, b) => (a = compile(a), b = !b[0] ? b[1] : b, (ctx) => a(ctx)[b]));
205
+
206
+ // node_modules/subscript/feature/group.js
207
+ group("()", PREC_ACCESS);
208
+ operator("()", (a) => (!a && err2("Empty ()"), compile(a)));
209
+ var last = (...args) => (args = args.map(compile), (ctx) => args.map((arg) => arg(ctx)).pop());
210
+ nary(",", PREC_SEQ), operator(",", last);
211
+ nary(";", PREC_SEQ, true), operator(";", last);
212
+
213
+ // node_modules/subscript/feature/mult.js
214
+ binary("*", PREC_MULT), operator("*", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) * b(ctx)));
215
+ binary("/", PREC_MULT), operator("/", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) / b(ctx)));
216
+ binary("%", PREC_MULT), operator("%", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) % b(ctx)));
217
+ binary("*=", PREC_ASSIGN, true);
218
+ operator("*=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] *= b(ctx))));
219
+ binary("/=", PREC_ASSIGN, true);
220
+ operator("/=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] /= b(ctx))));
221
+ binary("%=", PREC_ASSIGN, true);
222
+ operator("%=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] %= b(ctx))));
223
+
224
+ // node_modules/subscript/feature/add.js
225
+ unary("+", PREC_PREFIX), operator("+", (a, b) => !b && (a = compile(a), (ctx) => +a(ctx)));
226
+ unary("-", PREC_PREFIX), operator("-", (a, b) => !b && (a = compile(a), (ctx) => -a(ctx)));
227
+ binary("+", PREC_ADD), operator("+", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) + b(ctx)));
228
+ binary("-", PREC_ADD), operator("-", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) - b(ctx)));
229
+ binary("+=", PREC_ASSIGN, true);
230
+ operator("+=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] += b(ctx))));
231
+ binary("-=", PREC_ASSIGN, true);
232
+ operator("-=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] -= b(ctx))));
233
+
234
+ // node_modules/subscript/feature/increment.js
235
+ var inc;
236
+ var dec;
237
+ token("++", PREC_POSTFIX, (a) => a ? ["++-", a] : ["++", expr(PREC_POSTFIX - 1)]);
238
+ operator("++", inc = (a) => prop(a, (obj, path, ctx) => ++obj[path]));
239
+ operator("++-", inc = (a) => prop(a, (obj, path, ctx) => obj[path]++));
240
+ token("--", PREC_POSTFIX, (a) => a ? ["--+", a] : ["--", expr(PREC_POSTFIX - 1)]);
241
+ operator("--", dec = (a) => prop(a, (obj, path, ctx) => --obj[path]));
242
+ operator("--+", dec = (a) => prop(a, (obj, path, ctx) => obj[path]--));
243
+
244
+ // node_modules/subscript/feature/bitwise.js
245
+ unary("~", PREC_PREFIX), operator("~", (a, b) => !b && (a = compile(a), (ctx) => ~a(ctx)));
246
+ binary("|", PREC_OR), operator("|", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) | b(ctx)));
247
+ binary("&", PREC_AND), operator("&", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) & b(ctx)));
248
+ binary("^", PREC_XOR), operator("^", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) ^ b(ctx)));
249
+ binary(">>", PREC_SHIFT), operator(">>", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) >> b(ctx)));
250
+ binary("<<", PREC_SHIFT), operator("<<", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) << b(ctx)));
251
+
252
+ // node_modules/subscript/feature/compare.js
253
+ binary("==", PREC_EQ), operator("==", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) == b(ctx)));
254
+ binary("!=", PREC_EQ), operator("!=", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) != b(ctx)));
255
+ binary(">", PREC_COMP), operator(">", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) > b(ctx)));
256
+ binary("<", PREC_COMP), operator("<", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) < b(ctx)));
257
+ binary(">=", PREC_COMP), 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
+
260
+ // node_modules/subscript/feature/logic.js
261
+ unary("!", PREC_PREFIX), operator("!", (a, b) => !b && (a = compile(a), (ctx) => !a(ctx)));
262
+ binary("||", PREC_LOR);
263
+ operator("||", (a, b) => (a = compile(a), b = compile(b), (ctx) => a(ctx) || b(ctx)));
264
+ binary("&&", PREC_LAND);
265
+ operator("&&", (a, b) => (a = compile(a), b = compile(b), (ctx) => a(ctx) && b(ctx)));
266
+
267
+ // node_modules/subscript/feature/assign.js
268
+ binary("=", PREC_ASSIGN, true);
269
+ operator("=", (a, b) => (b = compile(b), prop(a, (container, path, ctx) => container[path] = b(ctx))));
270
+
271
+ // node_modules/subscript/subscript.js
272
+ var subscript_default = (s) => compile_default(parse_default(s));
273
+
274
+ // node_modules/subscript/feature/comment.js
275
+ token("/*", PREC_TOKEN, (a, prec) => (next((c) => c !== STAR && cur.charCodeAt(idx + 1) !== 47), skip(2), a || expr(prec) || []));
276
+ token("//", PREC_TOKEN, (a, prec) => (next((c) => c >= SPACE), a || expr(prec) || [""]));
277
+
278
+ // node_modules/subscript/feature/pow.js
279
+ binary("**", PREC_EXP, true), operator("**", (a, b) => b && (a = compile(a), b = compile(b), (ctx) => a(ctx) ** b(ctx)));
280
+
281
+ // node_modules/subscript/feature/ternary.js
282
+ token("?", PREC_ASSIGN, (a, b, c) => a && (b = expr(PREC_ASSIGN - 0.5, COLON)) && (c = expr(PREC_ASSIGN - 0.5), ["?", a, b, c]));
283
+ operator("?", (a, b, c) => (a = compile(a), b = compile(b), c = compile(c), (ctx) => a(ctx) ? b(ctx) : c(ctx)));
284
+
285
+ // node_modules/subscript/feature/bool.js
286
+ token("true", PREC_TOKEN, (a) => a ? err() : [, true]);
287
+ token("false", PREC_TOKEN, (a) => a ? err() : [, false]);
288
+
289
+ // node_modules/subscript/feature/array.js
290
+ group("[]", PREC_TOKEN);
291
+ operator(
292
+ "[]",
293
+ (a, b) => (a = !a ? [] : a[0] === "," ? a.slice(1) : [a], a = a.map((a2) => a2[0] === "..." ? (a2 = compile(a2[1]), (ctx) => a2(ctx)) : (a2 = compile(a2), (ctx) => [a2(ctx)])), (ctx) => a.flatMap((a2) => a2(ctx)))
294
+ );
295
+
296
+ // node_modules/subscript/feature/object.js
297
+ group("{}", PREC_TOKEN);
298
+ operator("{}", (a, b) => (a = !a ? [] : a[0] !== "," ? [a] : a.slice(1), a = a.map((p) => compile(typeof p === "string" ? [":", p, p] : p)), (ctx) => Object.fromEntries(a.flatMap((frag) => frag(ctx)))));
299
+ binary(":", PREC_ASSIGN - 0.5, true);
300
+ operator(":", (a, b) => (b = compile(b), Array.isArray(a) ? (a = compile(a), (ctx) => [[a(ctx), b(ctx)]]) : (ctx) => [[a, 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/feature/spread.js
319
+ unary("...", PREC_PREFIX);
320
+ operator("...", (a) => (a = compile(a), (ctx) => Object.entries(a(ctx))));
321
+
322
+ // node_modules/subscript/justin.js
323
+ binary("in", PREC_COMP), operator("in", (a, b) => b && (a = compile_default(a), b = compile_default(b), (ctx) => a(ctx) in b(ctx)));
324
+ binary("===", PREC_EQ), binary("!==", 9);
325
+ operator("===", (a, b) => (a = compile_default(a), b = compile_default(b), (ctx) => a(ctx) === b(ctx)));
326
+ operator("!==", (a, b) => (a = compile_default(a), b = compile_default(b), (ctx) => a(ctx) !== b(ctx)));
327
+ binary("??", PREC_LOR);
328
+ operator("??", (a, b) => b && (a = compile_default(a), b = compile_default(b), (ctx) => a(ctx) ?? 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
+ binary("||=", PREC_ASSIGN, true);
332
+ operator("||=", (a, b) => (b = compile_default(b), prop(a, (obj, path, ctx) => obj[path] ||= b(ctx))));
333
+ binary("&&=", PREC_ASSIGN, true);
334
+ operator("&&=", (a, b) => (b = compile_default(b), prop(a, (obj, path, ctx) => obj[path] &&= b(ctx))));
335
+ token("undefined", 20, (a) => a ? err2() : [, void 0]);
336
+ token("NaN", 20, (a) => a ? err2() : [, NaN]);
337
+ token("null", 20, (a) => a ? err2() : [, null]);
338
+ var justin_default = subscript_default;
339
+
340
+ // core.js
341
+ var _dispose = Symbol.dispose ||= Symbol("dispose");
342
+ var SPRAE = `\u2234`;
343
+ var { signal: signal2, effect: effect2, batch: batch2, computed: computed2, untracked: untracked2 } = ulive_es_exports;
344
+ var directive = {};
345
+ var memo = /* @__PURE__ */ new WeakMap();
346
+ function sprae(container, values) {
347
+ if (!container.children)
348
+ return;
349
+ if (memo.has(container)) {
350
+ const [state2, effects2] = memo.get(container);
351
+ for (let k in values) {
352
+ state2[k] = values[k];
272
353
  }
354
+ untracked2(() => {
355
+ for (let fx of effects2)
356
+ fx();
357
+ });
273
358
  }
274
- };
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();
359
+ const state = values || {};
360
+ const effects = [];
361
+ const init = (el, parent = el.parentNode) => {
362
+ if (el.attributes) {
363
+ for (let i = 0; i < el.attributes.length; ) {
364
+ let attr2 = el.attributes[i];
365
+ if (attr2.name[0] === ":") {
366
+ el.removeAttribute(attr2.name);
367
+ let names = attr2.name.slice(1).split(":");
368
+ for (let name of names) {
369
+ let update = (directive[name] || directive.default)(el, attr2.value, state, name);
370
+ if (update) {
371
+ update[_dispose] = effect2(update);
372
+ effects.push(update);
373
+ }
374
+ }
375
+ if (memo.has(el))
376
+ return;
377
+ if (el.parentNode !== parent)
378
+ return false;
379
+ } else
380
+ i++;
381
+ }
320
382
  }
321
- }
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;
383
+ for (let i = 0, child; child = el.children[i]; i++) {
384
+ if (init(child, el) === false)
385
+ i--;
386
+ }
387
+ };
388
+ init(container);
389
+ if (memo.has(container))
390
+ return state;
391
+ memo.set(container, [state, effects]);
392
+ container.classList?.add(SPRAE);
393
+ container[_dispose] = () => {
394
+ while (effects.length)
395
+ effects.pop()[_dispose]();
396
+ container.classList.remove(SPRAE);
397
+ memo.delete(container);
398
+ let els = container.getElementsByClassName(SPRAE);
399
+ while (els.length)
400
+ els[0][_dispose]?.();
401
+ };
402
+ return state;
346
403
  }
347
- E.prototype.c = function() {
348
- var i2 = this.S();
404
+ var evalMemo = {};
405
+ var compile2 = (expr2, dir, evaluate) => {
406
+ if (evaluate = evalMemo[expr2 = expr2.trim()])
407
+ return evaluate;
349
408
  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;
357
- } finally {
358
- i2();
409
+ evaluate = justin_default(expr2);
410
+ } catch (e) {
411
+ throw Object.assign(e, { message: `${SPRAE} ${e.message}
412
+
413
+ ${dir}${expr2 ? `="${expr2}"
414
+
415
+ ` : ""}`, expr: expr2 });
359
416
  }
417
+ return evalMemo[expr2] = evaluate;
360
418
  };
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);
419
+ var swap2 = swap_inflate_default;
420
+ var ipol = (v, state) => {
421
+ return v?.replace ? v.replace(/\$<([^>]+)>/g, (match, field) => state[field]?.valueOf?.() ?? "") : v;
372
422
  };
373
- E.prototype.N = function() {
374
- if (!(2 & this.f)) {
375
- this.f |= 2;
376
- this.o = f;
377
- f = this;
378
- }
379
- };
380
- E.prototype.d = function() {
381
- this.f |= 8;
382
- if (!(1 & this.f))
383
- b(this);
423
+ sprae.use = (s) => {
424
+ s.signal && (signal2 = s.signal, effect2 = s.effect, computed2 = s.computed, batch2 = s.batch || ((fn) => fn()), untracked2 = s.untracked || batch2);
425
+ s.swap && (swap2 = s.swap);
384
426
  };
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
- }
395
427
 
396
- // src/state.signals-proxy.js
397
- 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;
428
+ // directive/each.js
429
+ var _each = Symbol(":each");
430
+ var keys = {};
431
+ directive.each = (tpl, expr2, state, name) => {
432
+ let [leftSide, itemsExpr] = expr2.split(/\s+in\s+/);
433
+ let [itemVar, idxVar = "_$"] = leftSide.split(/\s*,\s*/);
434
+ const holder = tpl[_each] = document.createTextNode("");
435
+ tpl.replaceWith(holder);
436
+ const evaluate = compile2(itemsExpr, name);
437
+ const memo2 = /* @__PURE__ */ new WeakMap();
438
+ tpl.removeAttribute(":key");
439
+ let cur2 = [];
440
+ return () => {
441
+ let items = evaluate(state)?.valueOf(), els = [];
442
+ if (typeof items === "number")
443
+ items = Array.from({ length: items }, (_, i) => i);
444
+ const count = /* @__PURE__ */ new WeakSet();
445
+ for (let idx2 in items) {
446
+ let item = items[idx2];
447
+ let substate = Object.create(state, { [idxVar]: { value: idx2 } });
448
+ substate[itemVar] = item;
449
+ let el, key = item.key ?? item.id ?? item;
450
+ if (key == null)
451
+ el = tpl.cloneNode(true);
452
+ else {
453
+ if (Object(key) !== key)
454
+ key = keys[key] ||= Object(key);
455
+ if (count.has(key)) {
456
+ console.warn("Duplicate key", key), el = tpl.cloneNode(true);
457
+ } else {
458
+ count.add(key);
459
+ el = memo2.get(key) || memo2.set(key, tpl.cloneNode(true)).get(key);
467
460
  }
468
461
  }
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?.();
501
- }
502
- delete values2[key];
503
- if (!isArr)
504
- _len.value--;
505
- return true;
506
- }
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));
518
- }
519
- }
520
- return state;
521
- }
522
-
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;
545
- }
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);
462
+ if (el.content)
463
+ el = el.content.cloneNode(true);
464
+ sprae(el, substate);
465
+ if (el.nodeType === 11)
466
+ els.push(...el.childNodes);
467
+ else
468
+ els.push(el);
553
469
  }
554
- });
555
- return () => {
556
- for (const el2 of els)
557
- el2[_dispose]?.();
558
- dispose();
470
+ swap2(holder.parentNode, cur2, cur2 = els, holder);
559
471
  };
560
472
  };
561
- 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;
567
- const holder = tpl[_each] = document.createTextNode("");
568
- 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);
473
+
474
+ // directive/if.js
475
+ var _prevIf = Symbol("if");
476
+ directive.if = (ifEl, expr2, state, name) => {
477
+ let parent = ifEl.parentNode, next2 = ifEl.nextElementSibling, holder = document.createTextNode(""), evaluate = compile2(expr2, name), cur2, ifs, elses, none = [];
478
+ ifEl.after(holder);
479
+ if (ifEl.content)
480
+ cur2 = none, ifEl.remove(), ifs = [...ifEl.content.childNodes];
481
+ else
482
+ ifs = cur2 = [ifEl];
483
+ if (next2?.hasAttribute(":else")) {
484
+ next2.removeAttribute(":else");
485
+ if (next2.hasAttribute(":if"))
486
+ elses = none;
487
+ else
488
+ next2.remove(), elses = next2.content ? [...next2.content.childNodes] : [next2];
489
+ } else
490
+ elses = none;
491
+ return () => {
492
+ const newEls = evaluate(state)?.valueOf() ? ifs : ifEl[_prevIf] ? none : elses;
493
+ if (next2)
494
+ next2[_prevIf] = newEls === ifs;
495
+ if (cur2 != newEls) {
496
+ if (cur2[0]?.[_each])
497
+ cur2 = [cur2[0][_each]];
498
+ swap2(parent, cur2, cur2 = newEls, holder);
499
+ for (let el of cur2)
500
+ sprae(el, state);
586
501
  }
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;
599
- }
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
- });
502
+ };
630
503
  };
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];
504
+
505
+ // directive/ref.js
506
+ directive.ref = (el, expr2, state) => {
507
+ let prev;
508
+ return () => {
509
+ if (prev)
510
+ delete state[prev];
511
+ state[prev = ipol(expr2, state)] = el;
512
+ };
637
513
  };
638
- primary["ref"] = (el, expr, state) => {
639
- state[expr] = el;
514
+
515
+ // directive/scope.js
516
+ directive.scope = (el, expr2, rootState, name) => {
517
+ let evaluate = compile2(expr2, name);
518
+ return () => {
519
+ sprae(el, { ...rootState, ...evaluate(rootState)?.valueOf?.() || {} });
520
+ };
640
521
  };
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);
522
+
523
+ // directive/html.js
524
+ directive.html = (el, expr2, state, name) => {
525
+ let evaluate = compile2(expr2, name), tpl = evaluate(state);
661
526
  if (!tpl)
662
- exprError(new Error("Template not found"), el, expr, ":render");
663
- let content = tpl.content.cloneNode(true);
527
+ return;
528
+ let content = (tpl.content || tpl).cloneNode(true);
664
529
  el.replaceChildren(content);
665
530
  sprae(el, state);
666
- return el[_dispose];
667
531
  };
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)));
532
+
533
+ // directive/text.js
534
+ directive.text = (el, expr2, state) => {
535
+ let evaluate = compile2(expr2, "text");
536
+ if (el.content)
537
+ el.replaceWith(el = document.createTextNode(""));
538
+ return () => {
539
+ let value = evaluate(state)?.valueOf();
540
+ el.textContent = value == null ? "" : value;
541
+ };
672
542
  };
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);
543
+
544
+ // directive/class.js
545
+ directive.class = (el, expr2, state) => {
546
+ let evaluate = compile2(expr2, "class");
547
+ let cur2 = /* @__PURE__ */ new Set();
548
+ return () => {
549
+ let v = evaluate(state);
550
+ let clsx = /* @__PURE__ */ new Set();
551
+ if (v) {
552
+ if (typeof v === "string")
553
+ ipol(v?.valueOf?.(), state).split(" ").map((cls) => clsx.add(cls));
554
+ else if (Array.isArray(v))
555
+ v.map((v2) => (v2 = ipol(v2?.valueOf?.(), state)) && clsx.add(v2));
684
556
  else
685
- className.push(...Object.entries(v2).map(([k, v3]) => v3 ? k : ""));
557
+ Object.entries(v).map(([k, v2]) => v2?.valueOf?.() && clsx.add(k));
686
558
  }
687
- if (className = className.filter(Boolean).join(" "))
688
- el.setAttribute("class", className);
689
- else
690
- el.removeAttribute("class");
691
- });
559
+ for (let cls of cur2)
560
+ if (clsx.has(cls))
561
+ clsx.delete(cls);
562
+ else
563
+ el.classList.remove(cls);
564
+ for (let cls of cur2 = clsx)
565
+ el.classList.add(cls);
566
+ };
692
567
  };
693
- secondary["style"] = (el, expr, state) => {
694
- let evaluate = parseExpr(el, expr, ":style");
568
+
569
+ // directive/style.js
570
+ directive.style = (el, expr2, state) => {
571
+ let evaluate = compile2(expr2, "style");
695
572
  let initStyle = el.getAttribute("style") || "";
696
573
  if (!initStyle.endsWith(";"))
697
574
  initStyle += "; ";
698
- return O(() => {
699
- let v2 = evaluate(state);
700
- if (typeof v2 === "string")
701
- el.setAttribute("style", initStyle + v2);
575
+ return () => {
576
+ let v = evaluate(state)?.valueOf();
577
+ if (typeof v === "string")
578
+ el.setAttribute("style", initStyle + ipol(v, state));
702
579
  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
- });
580
+ el.setAttribute("style", initStyle);
581
+ for (let k in v)
582
+ el.style.setProperty(k, ipol(v[k], state));
709
583
  }
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
- });
584
+ };
740
585
  };
741
- var directives_default = (el, expr, state, name) => {
586
+
587
+ // directive/default.js
588
+ directive.default = (el, expr2, state, name) => {
742
589
  let evt = name.startsWith("on") && name.slice(2);
743
- let evaluate = parseExpr(el, expr, ":" + name);
744
- if (!evaluate)
745
- return;
590
+ let evaluate = compile2(expr2, name);
746
591
  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());
592
+ let off;
593
+ return () => (off?.(), off = on(el, evt, evaluate(state)));
755
594
  }
756
- return O(() => {
757
- attr(el, name, evaluate(state));
758
- });
595
+ return () => {
596
+ let value = evaluate(state)?.valueOf();
597
+ if (name)
598
+ attr(el, name, ipol(value, state));
599
+ else
600
+ for (let key in value)
601
+ attr(el, dashcase(key), ipol(value[key], state));
602
+ };
759
603
  };
760
- var on = (el, e2, fn) => {
761
- if (!fn)
762
- return;
604
+ var on = (el, e, fn = () => {
605
+ }) => {
763
606
  const ctx = { evt: "", target: el, test: () => true };
764
- ctx.evt = (e2.startsWith("on") ? e2.slice(2) : e2).replace(
607
+ ctx.evt = e.replace(
765
608
  /\.(\w+)?-?([-\w]+)?/g,
766
609
  (match, mod, param = "") => (ctx.test = mods[mod]?.(ctx, ...param.split("-")) || ctx.test, "")
767
610
  );
768
611
  const { evt, target, test, defer, stop, prevent, ...opts } = ctx;
769
612
  if (defer)
770
613
  fn = defer(fn);
771
- const cb = (e3) => test(e3) && (stop && e3.stopPropagation(), prevent && e3.preventDefault(), fn.call(target, e3));
614
+ const cb = (e2) => test(e2) && (stop && e2.stopPropagation(), prevent && e2.preventDefault(), fn.call(target, e2));
772
615
  target.addEventListener(evt, cb, opts);
773
616
  return () => target.removeEventListener(evt, cb, opts);
774
617
  };
@@ -800,178 +643,111 @@ var mods = {
800
643
  debounce(ctx, wait) {
801
644
  ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108);
802
645
  },
803
- outside: (ctx) => (e2) => {
646
+ outside: (ctx) => (e) => {
804
647
  let target = ctx.target;
805
- if (target.contains(e2.target))
648
+ if (target.contains(e.target))
806
649
  return false;
807
- if (e2.target.isConnected === false)
650
+ if (e.target.isConnected === false)
808
651
  return false;
809
652
  if (target.offsetWidth < 1 && target.offsetHeight < 1)
810
653
  return false;
811
654
  return true;
812
655
  },
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)
656
+ self: (ctx) => (e) => e.target === ctx.target,
657
+ ctrl: (_, ...param) => (e) => keys2.ctrl(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
658
+ shift: (_, ...param) => (e) => keys2.shift(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
659
+ alt: (_, ...param) => (e) => keys2.alt(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
660
+ meta: (_, ...param) => (e) => keys2.meta(e) && param.every((p) => keys2[p] ? keys2[p](e) : e.key === p),
661
+ arrow: () => keys2.arrow,
662
+ enter: () => keys2.enter,
663
+ escape: () => keys2.escape,
664
+ tab: () => keys2.tab,
665
+ space: () => keys2.space,
666
+ backspace: () => keys2.backspace,
667
+ delete: () => keys2.delete,
668
+ digit: () => keys2.digit,
669
+ letter: () => keys2.letter,
670
+ character: () => keys2.character
671
+ };
672
+ var keys2 = {
673
+ ctrl: (e) => e.ctrlKey || e.key === "Control" || e.key === "Ctrl",
674
+ shift: (e) => e.shiftKey || e.key === "Shift",
675
+ alt: (e) => e.altKey || e.key === "Alt",
676
+ meta: (e) => e.metaKey || e.key === "Meta" || e.key === "Command",
677
+ arrow: (e) => e.key.startsWith("Arrow"),
678
+ enter: (e) => e.key === "Enter",
679
+ escape: (e) => e.key.startsWith("Esc"),
680
+ tab: (e) => e.key === "Tab",
681
+ space: (e) => e.key === "\xA0" || e.key === "Space" || e.key === " ",
682
+ backspace: (e) => e.key === "Backspace",
683
+ delete: (e) => e.key === "Delete",
684
+ digit: (e) => /^\d$/.test(e.key),
685
+ letter: (e) => /^[a-zA-Z]$/.test(e.key),
686
+ character: (e) => /^\S$/.test(e.key)
687
+ };
688
+ var attr = (el, name, v) => {
689
+ if (v == null || v === false)
690
+ el.removeAttribute(name);
691
+ else
692
+ el.setAttribute(name, v === true ? "" : typeof v === "number" || typeof v === "string" ? v : "");
844
693
  };
845
694
  var throttle = (fn, limit) => {
846
- let pause, planned, block = (e2) => {
695
+ let pause, planned, block = (e) => {
847
696
  pause = true;
848
697
  setTimeout(() => {
849
698
  pause = false;
850
699
  if (planned)
851
- return planned = false, block(e2), fn(e2);
700
+ return planned = false, block(e), fn(e);
852
701
  }, limit);
853
702
  };
854
- return (e2) => {
703
+ return (e) => {
855
704
  if (pause)
856
705
  return planned = true;
857
- block(e2);
858
- return fn(e2);
706
+ block(e);
707
+ return fn(e);
859
708
  };
860
709
  };
861
710
  var debounce = (fn, wait) => {
862
711
  let timeout;
863
- return (e2) => {
712
+ return (e) => {
864
713
  clearTimeout(timeout);
865
714
  timeout = setTimeout(() => {
866
715
  timeout = null;
867
- fn(e2);
716
+ fn(e);
868
717
  }, wait);
869
718
  };
870
719
  };
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) {
720
+ var dashcase = (str) => {
909
721
  return str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, (match) => "-" + match.toLowerCase());
910
- }
722
+ };
911
723
 
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
- }
724
+ // directive/value.js
725
+ directive.value = (el, expr2, state) => {
726
+ let evaluate = compile2(expr2, "value");
727
+ let from, to;
728
+ 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) => {
729
+ for (let option in el.options)
730
+ option.removeAttribute("selected");
731
+ el.value = value;
732
+ el.selectedOptions[0]?.setAttribute("selected", "");
733
+ } : (value) => el.value = value;
734
+ return () => update(evaluate(state)?.valueOf?.());
735
+ };
970
736
 
971
- // src/index.js
972
- var src_default = sprae;
973
- if (document.currentScript)
974
- sprae(document.documentElement);
737
+ // directive/fx.js
738
+ directive.fx = (el, expr2, state, name) => {
739
+ let evaluate = compile2(expr2, name);
740
+ return () => evaluate(state);
741
+ };
975
742
  export {
976
- src_default as default
743
+ batch2 as batch,
744
+ compile2 as compile,
745
+ computed2 as computed,
746
+ sprae as default,
747
+ directive,
748
+ effect2 as effect,
749
+ ipol,
750
+ signal2 as signal,
751
+ swap2 as swap,
752
+ untracked2 as untracked
977
753
  };