sprae 10.9.3 → 10.9.4

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.umd.js CHANGED
@@ -1,702 +1,632 @@
1
- (function (g, f) {
2
- if ("object" == typeof exports && "object" == typeof module) {
3
- module.exports = f();
4
- } else if ("function" == typeof define && define.amd) {
5
- define("sprae", [], f);
6
- } else if ("object" == typeof exports) {
7
- exports["sprae"] = f();
8
- } else {
9
- g["sprae"] = f();
10
- }
11
- }(this, () => {
12
- var exports = {};
13
- var module = { exports };(function (g, f) {
14
- if ("object" == typeof exports && "object" == typeof module) {
15
- module.exports = f();
16
- } else if ("function" == typeof define && define.amd) {
17
- define("sprae", [], f);
18
- } else if ("object" == typeof exports) {
19
- exports["sprae"] = f();
20
- } else {
21
- g["sprae"] = f();
22
- }
23
- }(this, () => {
24
- var exports = {};
25
- var module = { exports };
26
- var __defProp = Object.defineProperty;
27
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
28
- var __getOwnPropNames = Object.getOwnPropertyNames;
29
- var __hasOwnProp = Object.prototype.hasOwnProperty;
30
- var __export = (target, all) => {
31
- for (var name in all)
32
- __defProp(target, name, { get: all[name], enumerable: true });
33
- };
34
- var __copyProps = (to, from, except, desc) => {
35
- if (from && typeof from === "object" || typeof from === "function") {
36
- for (let key of __getOwnPropNames(from))
37
- if (!__hasOwnProp.call(to, key) && key !== except)
38
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
39
- }
40
- return to;
41
- };
42
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
43
-
44
- // sprae.js
45
- var sprae_exports = {};
46
- __export(sprae_exports, {
47
- default: () => sprae_default
48
- });
49
- module.exports = __toCommonJS(sprae_exports);
1
+ (() => {
2
+ var __defProp = Object.defineProperty;
3
+ var __export = (target, all) => {
4
+ for (var name in all)
5
+ __defProp(target, name, { get: all[name], enumerable: true });
6
+ };
50
7
 
51
- // signal.js
52
- var signal;
53
- var effect;
54
- var untracked;
55
- var batch;
56
- var computed;
57
- function use(s) {
58
- signal = s.signal;
59
- effect = s.effect;
60
- computed = s.computed;
61
- batch = s.batch || ((fn) => fn());
62
- untracked = s.untracked || batch;
63
- }
8
+ // signal.js
9
+ var signal;
10
+ var effect;
11
+ var untracked;
12
+ var batch;
13
+ var computed;
14
+ function use(s) {
15
+ signal = s.signal;
16
+ effect = s.effect;
17
+ computed = s.computed;
18
+ batch = s.batch || ((fn) => fn());
19
+ untracked = s.untracked || batch;
20
+ }
64
21
 
65
- // store.js
66
- var _signals = Symbol("signals");
67
- var _change = Symbol("length");
68
- function store(values, parent) {
69
- if (!values)
70
- return values;
71
- if (values[_signals])
72
- return values;
73
- if (Array.isArray(values))
74
- return list(values);
75
- if (values.constructor !== Object)
76
- return values;
77
- let signals = { ...parent?.[_signals] }, _len = signal(Object.values(values).length);
78
- const state = new Proxy(signals, {
79
- get: (_, key) => key === _change ? _len : key === _signals ? signals : signals[key]?.valueOf(),
80
- set: (_, key, v, s) => (s = signals[key], set(signals, key, v), s ?? ++_len.value, 1),
81
- deleteProperty: (_, key) => (signals[key] && (del(signals, key), _len.value--), 1),
82
- ownKeys() {
83
- _len.value;
84
- return Reflect.ownKeys(signals);
85
- }
86
- });
87
- for (let key in values) {
88
- const desc = Object.getOwnPropertyDescriptor(values, key);
89
- if (desc?.get) {
90
- (signals[key] = computed(desc.get.bind(state)))._set = desc.set?.bind(state);
91
- } else {
92
- signals[key] = void 0;
93
- set(signals, key, values[key]);
22
+ // store.js
23
+ var _signals = Symbol("signals");
24
+ var _change = Symbol("length");
25
+ function store(values, parent) {
26
+ if (!values)
27
+ return values;
28
+ if (values[_signals])
29
+ return values;
30
+ if (Array.isArray(values))
31
+ return list(values);
32
+ if (values.constructor !== Object)
33
+ return values;
34
+ let signals = { ...parent?.[_signals] }, _len = signal(Object.values(values).length);
35
+ const state = new Proxy(signals, {
36
+ get: (_, key) => key === _change ? _len : key === _signals ? signals : signals[key]?.valueOf(),
37
+ set: (_, key, v, s) => (s = signals[key], set(signals, key, v), s ?? ++_len.value, 1),
38
+ deleteProperty: (_, key) => (signals[key] && (del(signals, key), _len.value--), 1),
39
+ ownKeys() {
40
+ _len.value;
41
+ return Reflect.ownKeys(signals);
42
+ }
43
+ });
44
+ for (let key in values) {
45
+ const desc = Object.getOwnPropertyDescriptor(values, key);
46
+ if (desc?.get) {
47
+ (signals[key] = computed(desc.get.bind(state)))._set = desc.set?.bind(state);
48
+ } else {
49
+ signals[key] = void 0;
50
+ set(signals, key, values[key]);
51
+ }
94
52
  }
53
+ return state;
95
54
  }
96
- return state;
97
- }
98
- var mut = { push: 1, pop: 1, shift: 1, unshift: 1, splice: 1 };
99
- function list(values) {
100
- let lastProp;
101
- if (values[_signals])
102
- return values;
103
- let _len = signal(values.length), signals = Array(values.length).fill();
104
- const state = new Proxy(signals, {
105
- get(_, key) {
106
- if (typeof key === "symbol")
107
- return key === _change ? _len : key === _signals ? signals : signals[key];
108
- if (key === "length")
109
- return mut[lastProp] ? _len.peek() : _len.value;
110
- lastProp = key;
111
- if (signals[key])
112
- return signals[key].valueOf();
113
- if (key < signals.length)
114
- return (signals[key] = signal(store(values[key]))).value;
115
- },
116
- set(_, key, v) {
117
- if (key === "length") {
118
- for (let i = v, l = signals.length; i < l; i++)
119
- delete state[i];
120
- _len.value = signals.length = v;
55
+ var mut = { push: 1, pop: 1, shift: 1, unshift: 1, splice: 1 };
56
+ function list(values) {
57
+ let lastProp;
58
+ if (values[_signals])
59
+ return values;
60
+ let _len = signal(values.length), signals = Array(values.length).fill();
61
+ const state = new Proxy(signals, {
62
+ get(_, key) {
63
+ if (typeof key === "symbol")
64
+ return key === _change ? _len : key === _signals ? signals : signals[key];
65
+ if (key === "length")
66
+ return mut[lastProp] ? _len.peek() : _len.value;
67
+ lastProp = key;
68
+ if (signals[key])
69
+ return signals[key].valueOf();
70
+ if (key < signals.length)
71
+ return (signals[key] = signal(store(values[key]))).value;
72
+ },
73
+ set(_, key, v) {
74
+ if (key === "length") {
75
+ for (let i = v, l = signals.length; i < l; i++)
76
+ delete state[i];
77
+ _len.value = signals.length = v;
78
+ return true;
79
+ }
80
+ set(signals, key, v);
81
+ if (key >= _len.peek())
82
+ _len.value = signals.length = Number(key) + 1;
121
83
  return true;
122
- }
123
- set(signals, key, v);
124
- if (key >= _len.peek())
125
- _len.value = signals.length = Number(key) + 1;
126
- return true;
127
- },
128
- deleteProperty: (_, key) => (signals[key] && del(signals, key), 1)
129
- });
130
- return state;
131
- }
132
- function set(signals, key, v) {
133
- let s = signals[key];
134
- if (key[0] === "_")
135
- signals[key] = v;
136
- else if (!s) {
137
- signals[key] = s = v?.peek ? v : signal(store(v));
138
- } else if (v === s.peek())
139
- ;
140
- else if (s._set)
141
- s._set(v);
142
- else if (Array.isArray(v) && Array.isArray(s.peek())) {
143
- const cur = s.peek();
144
- if (cur[_change])
145
- untracked(() => {
146
- batch(() => {
147
- let i = 0, l = v.length;
148
- for (; i < l; i++)
149
- cur[i] = v[i];
150
- cur.length = l;
84
+ },
85
+ deleteProperty: (_, key) => (signals[key] && del(signals, key), 1)
86
+ });
87
+ return state;
88
+ }
89
+ function set(signals, key, v) {
90
+ let s = signals[key];
91
+ if (key[0] === "_")
92
+ signals[key] = v;
93
+ else if (!s) {
94
+ signals[key] = s = v?.peek ? v : signal(store(v));
95
+ } else if (v === s.peek())
96
+ ;
97
+ else if (s._set)
98
+ s._set(v);
99
+ else if (Array.isArray(v) && Array.isArray(s.peek())) {
100
+ const cur = s.peek();
101
+ if (cur[_change])
102
+ untracked(() => {
103
+ batch(() => {
104
+ let i = 0, l = v.length;
105
+ for (; i < l; i++)
106
+ cur[i] = v[i];
107
+ cur.length = l;
108
+ });
151
109
  });
152
- });
153
- else {
154
- s.value = v;
110
+ else {
111
+ s.value = v;
112
+ }
113
+ } else {
114
+ s.value = store(v);
155
115
  }
156
- } else {
157
- s.value = store(v);
158
116
  }
159
- }
160
- function del(signals, key) {
161
- const s = signals[key], del2 = s[Symbol.dispose];
162
- if (del2)
163
- delete s[Symbol.dispose];
164
- delete signals[key];
165
- del2?.();
166
- }
167
-
168
- // core.js
169
- var _dispose = Symbol.dispose || (Symbol.dispose = Symbol("dispose"));
170
- var directive = {};
171
- var memo = /* @__PURE__ */ new WeakMap();
172
- function sprae(el, values) {
173
- if (!el?.childNodes)
174
- return;
175
- if (memo.has(el)) {
176
- return Object.assign(memo.get(el), values);
117
+ function del(signals, key) {
118
+ const s = signals[key], del2 = s[Symbol.dispose];
119
+ if (del2)
120
+ delete s[Symbol.dispose];
121
+ delete signals[key];
122
+ del2?.();
177
123
  }
178
- const state = store(values || {}), disposes = [];
179
- init(el);
180
- if (!memo.has(el))
181
- memo.set(el, state);
182
- el[_dispose] = () => {
183
- while (disposes.length)
184
- disposes.pop()();
185
- memo.delete(el);
186
- };
187
- return state;
188
- function init(el2, parent = el2.parentNode) {
189
- if (!el2.childNodes)
124
+
125
+ // core.js
126
+ var _dispose = Symbol.dispose || (Symbol.dispose = Symbol("dispose"));
127
+ var directive = {};
128
+ var memo = /* @__PURE__ */ new WeakMap();
129
+ function sprae(el, values) {
130
+ if (!el?.childNodes)
190
131
  return;
191
- for (let i = 0; i < el2.attributes?.length; ) {
192
- let attr2 = el2.attributes[i];
193
- if (attr2.name[0] === ":") {
194
- el2.removeAttribute(attr2.name);
195
- let names = attr2.name.slice(1).split(":");
196
- for (let name of names) {
197
- let dir = directive[name] || directive.default;
198
- let evaluate = (dir.parse || parse)(attr2.value);
199
- let dispose = dir(el2, evaluate, state, name);
200
- if (dispose)
201
- disposes.push(dispose);
202
- }
203
- if (memo.has(el2))
204
- return el2[_dispose] && disposes.push(el2[_dispose]);
205
- if (el2.parentNode !== parent)
206
- return;
207
- } else
208
- i++;
132
+ if (memo.has(el)) {
133
+ return Object.assign(memo.get(el), values);
209
134
  }
210
- for (let child of [...el2.childNodes])
211
- init(child, el2);
212
- }
213
- ;
214
- }
215
- var evalMemo = {};
216
- var parse = (expr, dir, fn) => {
217
- if (fn = evalMemo[expr = expr.trim()])
218
- return fn;
219
- try {
220
- fn = compile(expr);
221
- } catch (e) {
222
- err(e, dir, expr);
135
+ const state = store(values || {}), disposes = [];
136
+ init(el);
137
+ if (!memo.has(el))
138
+ memo.set(el, state);
139
+ el[_dispose] = () => {
140
+ while (disposes.length)
141
+ disposes.pop()();
142
+ memo.delete(el);
143
+ };
144
+ return state;
145
+ function init(el2, parent = el2.parentNode) {
146
+ if (!el2.childNodes)
147
+ return;
148
+ for (let i = 0; i < el2.attributes?.length; ) {
149
+ let attr2 = el2.attributes[i];
150
+ if (attr2.name[0] === ":") {
151
+ el2.removeAttribute(attr2.name);
152
+ let names = attr2.name.slice(1).split(":");
153
+ for (let name of names) {
154
+ let dir = directive[name] || directive.default;
155
+ let evaluate = (dir.parse || parse)(attr2.value);
156
+ let dispose = dir(el2, evaluate, state, name);
157
+ if (dispose)
158
+ disposes.push(dispose);
159
+ }
160
+ if (memo.has(el2))
161
+ return el2[_dispose] && disposes.push(el2[_dispose]);
162
+ if (el2.parentNode !== parent)
163
+ return;
164
+ } else
165
+ i++;
166
+ }
167
+ for (let child of [...el2.childNodes])
168
+ init(child, el2);
169
+ }
170
+ ;
223
171
  }
224
- return evalMemo[expr] = fn;
225
- };
226
- var err = (e, dir, expr = "") => {
227
- throw Object.assign(e, { message: `\u2234 ${e.message}
172
+ var evalMemo = {};
173
+ var parse = (expr, dir, fn) => {
174
+ if (fn = evalMemo[expr = expr.trim()])
175
+ return fn;
176
+ try {
177
+ fn = compile(expr);
178
+ } catch (e) {
179
+ err(e, dir, expr);
180
+ }
181
+ return evalMemo[expr] = fn;
182
+ };
183
+ var err = (e, dir, expr = "") => {
184
+ throw Object.assign(e, { message: `\u2234 ${e.message}
228
185
 
229
186
  ${dir}${expr ? `="${expr}"
230
187
 
231
188
  ` : ""}`, expr });
232
- };
233
- var compile;
234
- sprae.use = (s) => {
235
- s.signal && use(s);
236
- s.compile && (compile = s.compile);
237
- };
238
- var frag = (tpl) => {
239
- if (!tpl.nodeType)
240
- return tpl;
241
- let content = tpl.content.cloneNode(true), attributes = [...tpl.attributes], ref = document.createTextNode(""), childNodes = (content.append(ref), [...content.childNodes]);
242
- return {
243
- childNodes,
244
- content,
245
- remove: () => content.append(...childNodes),
246
- replaceWith(el) {
247
- if (el === ref)
189
+ };
190
+ var compile;
191
+ sprae.use = (s) => {
192
+ s.signal && use(s);
193
+ s.compile && (compile = s.compile);
194
+ };
195
+ var frag = (tpl) => {
196
+ if (!tpl.nodeType)
197
+ return tpl;
198
+ let content = tpl.content.cloneNode(true), attributes = [...tpl.attributes], ref = document.createTextNode(""), childNodes = (content.append(ref), [...content.childNodes]);
199
+ return {
200
+ childNodes,
201
+ content,
202
+ remove: () => content.append(...childNodes),
203
+ replaceWith(el) {
204
+ if (el === ref)
205
+ return;
206
+ ref.before(el);
207
+ content.append(...childNodes);
208
+ },
209
+ attributes,
210
+ removeAttribute(name) {
211
+ attributes.splice(attributes.findIndex((a) => a.name === name), 1);
212
+ }
213
+ };
214
+ };
215
+
216
+ // node_modules/ulive/dist/ulive.es.js
217
+ var ulive_es_exports = {};
218
+ __export(ulive_es_exports, {
219
+ batch: () => batch2,
220
+ computed: () => computed2,
221
+ effect: () => effect2,
222
+ signal: () => signal2,
223
+ untracked: () => untracked2
224
+ });
225
+ var current;
226
+ var batched;
227
+ var signal2 = (v, s, obs = /* @__PURE__ */ new Set()) => (s = {
228
+ get value() {
229
+ current?.deps.push(obs.add(current));
230
+ return v;
231
+ },
232
+ set value(val) {
233
+ if (val === v)
248
234
  return;
249
- ref.before(el);
250
- content.append(...childNodes);
235
+ v = val;
236
+ for (let sub of obs)
237
+ batched ? batched.add(sub) : sub();
251
238
  },
252
- attributes,
253
- removeAttribute(name) {
254
- attributes.splice(attributes.findIndex((a) => a.name === name), 1);
239
+ peek() {
240
+ return v;
255
241
  }
256
- };
257
- };
258
-
259
- // node_modules/ulive/dist/ulive.es.js
260
- var ulive_es_exports = {};
261
- __export(ulive_es_exports, {
262
- batch: () => batch2,
263
- computed: () => computed2,
264
- effect: () => effect2,
265
- signal: () => signal2,
266
- untracked: () => untracked2
267
- });
268
- var current;
269
- var batched;
270
- var signal2 = (v, s, obs = /* @__PURE__ */ new Set()) => (s = {
271
- get value() {
272
- current?.deps.push(obs.add(current));
273
- return v;
274
- },
275
- set value(val) {
276
- if (val === v)
277
- return;
278
- v = val;
279
- for (let sub of obs)
280
- batched ? batched.add(sub) : sub();
281
- },
282
- peek() {
283
- return v;
284
- }
285
- }, s.toJSON = s.then = s.toString = s.valueOf = () => s.value, s);
286
- var effect2 = (fn, teardown, fx, deps) => (fx = (prev) => {
287
- teardown?.call?.();
288
- prev = current, current = fx;
289
- try {
290
- teardown = fn();
291
- } finally {
292
- current = prev;
293
- }
294
- }, deps = fx.deps = [], fx(), (dep) => {
295
- teardown?.call?.();
296
- while (dep = deps.pop())
297
- dep.delete(fx);
298
- });
299
- var computed2 = (fn, s = signal2(), c, e) => (c = {
300
- get value() {
301
- e || (e = effect2(() => s.value = fn()));
302
- return s.value;
303
- },
304
- peek: s.peek
305
- }, c.toJSON = c.then = c.toString = c.valueOf = () => c.value, c);
306
- var batch2 = (fn) => {
307
- let fxs = batched;
308
- if (!fxs)
309
- batched = /* @__PURE__ */ new Set();
310
- try {
311
- fn();
312
- } finally {
313
- if (!fxs) {
314
- fxs = batched;
315
- batched = null;
316
- for (const fx of fxs)
317
- fx();
242
+ }, s.toJSON = s.then = s.toString = s.valueOf = () => s.value, s);
243
+ var effect2 = (fn, teardown, fx, deps) => (fx = (prev) => {
244
+ teardown?.call?.();
245
+ prev = current, current = fx;
246
+ try {
247
+ teardown = fn();
248
+ } finally {
249
+ current = prev;
318
250
  }
319
- }
320
- };
321
- var untracked2 = (fn, prev, v) => (prev = current, current = null, v = fn(), current = prev, v);
322
-
323
- // directive/if.js
324
- var _prevIf = Symbol("if");
325
- directive.if = (el, evaluate, state) => {
326
- let next = el.nextElementSibling, holder = document.createTextNode(""), curEl, ifEl, elseEl;
327
- el.replaceWith(holder);
328
- ifEl = el.content ? frag(el) : el;
329
- memo.set(ifEl, null);
330
- if (next?.hasAttribute(":else")) {
331
- next.removeAttribute(":else");
332
- if (!next.hasAttribute(":if"))
333
- next.remove(), elseEl = next.content ? frag(next) : next, memo.set(elseEl, null);
334
- }
335
- return effect(() => {
336
- const newEl = evaluate(state) ? ifEl : el[_prevIf] ? null : elseEl;
337
- if (next)
338
- next[_prevIf] = newEl === ifEl;
339
- if (curEl != newEl) {
340
- curEl?.remove();
341
- if (curEl = newEl) {
342
- holder.before(curEl.content || curEl);
343
- memo.get(curEl) === null && memo.delete(curEl);
344
- sprae(curEl, state);
251
+ }, deps = fx.deps = [], fx(), (dep) => {
252
+ teardown?.call?.();
253
+ while (dep = deps.pop())
254
+ dep.delete(fx);
255
+ });
256
+ var computed2 = (fn, s = signal2(), c, e) => (c = {
257
+ get value() {
258
+ e || (e = effect2(() => s.value = fn()));
259
+ return s.value;
260
+ },
261
+ peek: s.peek
262
+ }, c.toJSON = c.then = c.toString = c.valueOf = () => c.value, c);
263
+ var batch2 = (fn) => {
264
+ let fxs = batched;
265
+ if (!fxs)
266
+ batched = /* @__PURE__ */ new Set();
267
+ try {
268
+ fn();
269
+ } finally {
270
+ if (!fxs) {
271
+ fxs = batched;
272
+ batched = null;
273
+ for (const fx of fxs)
274
+ fx();
345
275
  }
346
276
  }
347
- });
348
- };
277
+ };
278
+ var untracked2 = (fn, prev, v) => (prev = current, current = null, v = fn(), current = prev, v);
349
279
 
350
- // directive/each.js
351
- directive.each = (tpl, [itemVar, idxVar, evaluate], state) => {
352
- const holder = document.createTextNode("");
353
- tpl.replaceWith(holder);
354
- let cur, keys2, prevl = 0;
355
- const items = computed(() => {
356
- keys2 = null;
357
- let items2 = evaluate(state);
358
- if (typeof items2 === "number")
359
- items2 = Array.from({ length: items2 }, (_, i) => i + 1);
360
- if (items2?.constructor === Object)
361
- keys2 = Object.keys(items2), items2 = Object.values(items2);
362
- return items2 || [];
363
- });
364
- const update = () => {
365
- untracked(() => {
366
- var _a, _b;
367
- let i = 0, newItems = items.value, newl = newItems.length;
368
- if (cur && !cur[_change]) {
369
- for (let s of cur[_signals] || []) {
370
- s[Symbol.dispose]();
280
+ // directive/if.js
281
+ var _prevIf = Symbol("if");
282
+ directive.if = (el, evaluate, state) => {
283
+ let next = el.nextElementSibling, holder = document.createTextNode(""), curEl, ifEl, elseEl;
284
+ el.replaceWith(holder);
285
+ ifEl = el.content ? frag(el) : el;
286
+ memo.set(ifEl, null);
287
+ if (next?.hasAttribute(":else")) {
288
+ next.removeAttribute(":else");
289
+ if (!next.hasAttribute(":if"))
290
+ next.remove(), elseEl = next.content ? frag(next) : next, memo.set(elseEl, null);
291
+ }
292
+ return effect(() => {
293
+ const newEl = evaluate(state) ? ifEl : el[_prevIf] ? null : elseEl;
294
+ if (next)
295
+ next[_prevIf] = newEl === ifEl;
296
+ if (curEl != newEl) {
297
+ curEl?.remove();
298
+ if (curEl = newEl) {
299
+ holder.before(curEl.content || curEl);
300
+ memo.get(curEl) === null && memo.delete(curEl);
301
+ sprae(curEl, state);
371
302
  }
372
- cur = null, prevl = 0;
373
303
  }
374
- if (newl < prevl) {
375
- cur.length = newl;
376
- } else {
377
- if (!cur) {
378
- cur = newItems;
304
+ });
305
+ };
306
+
307
+ // directive/each.js
308
+ directive.each = (tpl, [itemVar, idxVar, evaluate], state) => {
309
+ const holder = document.createTextNode("");
310
+ tpl.replaceWith(holder);
311
+ let cur, keys2, prevl = 0;
312
+ const items = computed(() => {
313
+ keys2 = null;
314
+ let items2 = evaluate(state);
315
+ if (typeof items2 === "number")
316
+ items2 = Array.from({ length: items2 }, (_, i) => i + 1);
317
+ if (items2?.constructor === Object)
318
+ keys2 = Object.keys(items2), items2 = Object.values(items2);
319
+ return items2 || [];
320
+ });
321
+ const update = () => {
322
+ untracked(() => {
323
+ var _a, _b;
324
+ let i = 0, newItems = items.value, newl = newItems.length;
325
+ if (cur && !cur[_change]) {
326
+ for (let s of cur[_signals] || []) {
327
+ s[Symbol.dispose]();
328
+ }
329
+ cur = null, prevl = 0;
330
+ }
331
+ if (newl < prevl) {
332
+ cur.length = newl;
379
333
  } else {
380
- for (; i < prevl; i++) {
334
+ if (!cur) {
335
+ cur = newItems;
336
+ } else {
337
+ for (; i < prevl; i++) {
338
+ cur[i] = newItems[i];
339
+ }
340
+ }
341
+ for (; i < newl; i++) {
381
342
  cur[i] = newItems[i];
343
+ let idx = i, scope = store({
344
+ [itemVar]: cur[_signals]?.[idx] || cur[idx],
345
+ [idxVar]: keys2 ? keys2[idx] : idx
346
+ }, state), el = tpl.content ? frag(tpl) : tpl.cloneNode(true);
347
+ holder.before(el.content || el);
348
+ sprae(el, scope);
349
+ ((_b = cur[_a = _signals] || (cur[_a] = []))[i] || (_b[i] = {}))[Symbol.dispose] = () => {
350
+ el[Symbol.dispose](), el.remove();
351
+ };
382
352
  }
383
353
  }
384
- for (; i < newl; i++) {
385
- cur[i] = newItems[i];
386
- let idx = i, scope = store({
387
- [itemVar]: cur[_signals]?.[idx] || cur[idx],
388
- [idxVar]: keys2 ? keys2[idx] : idx
389
- }, state), el = tpl.content ? frag(tpl) : tpl.cloneNode(true);
390
- holder.before(el.content || el);
391
- sprae(el, scope);
392
- ((_b = cur[_a = _signals] || (cur[_a] = []))[i] || (_b[i] = {}))[Symbol.dispose] = () => {
393
- el[Symbol.dispose](), el.remove();
394
- };
395
- }
396
- }
397
- prevl = newl;
354
+ prevl = newl;
355
+ });
356
+ };
357
+ let planned = 0;
358
+ return effect(() => {
359
+ items.value[_change]?.value;
360
+ if (!planned) {
361
+ update();
362
+ queueMicrotask(() => (planned && update(), planned = 0));
363
+ } else
364
+ planned++;
398
365
  });
399
366
  };
400
- let planned = 0;
401
- return effect(() => {
402
- items.value[_change]?.value;
403
- if (!planned) {
404
- update();
405
- queueMicrotask(() => (planned && update(), planned = 0));
406
- } else
407
- planned++;
408
- });
409
- };
410
- directive.each.parse = (expr) => {
411
- let [leftSide, itemsExpr] = expr.split(/\s+in\s+/);
412
- let [itemVar, idxVar = "$"] = leftSide.split(/\s*,\s*/);
413
- return [itemVar, idxVar, parse(itemsExpr)];
414
- };
415
-
416
- // directive/ref.js
417
- directive.ref = (el, expr, state) => {
418
- state[expr] = el;
419
- };
420
- directive.ref.parse = (expr) => expr;
421
-
422
- // directive/with.js
423
- directive.with = (el, evaluate, rootState) => {
424
- let state;
425
- return effect(() => {
426
- let values = evaluate(rootState);
427
- sprae(el, state ? values : state = store(values, rootState));
428
- });
429
- };
430
-
431
- // directive/html.js
432
- directive.html = (el, evaluate, state) => {
433
- let tpl = evaluate(state);
434
- if (!tpl)
435
- return;
436
- let content = (tpl.content || tpl).cloneNode(true);
437
- el.replaceChildren(content);
438
- sprae(el, state);
439
- };
367
+ directive.each.parse = (expr) => {
368
+ let [leftSide, itemsExpr] = expr.split(/\s+in\s+/);
369
+ let [itemVar, idxVar = "$"] = leftSide.split(/\s*,\s*/);
370
+ return [itemVar, idxVar, parse(itemsExpr)];
371
+ };
440
372
 
441
- // directive/text.js
442
- directive.text = (el, evaluate, state) => {
443
- if (el.content)
444
- el.replaceWith(el = frag(el).childNodes[0]);
445
- return effect(() => {
446
- let value = evaluate(state);
447
- el.textContent = value == null ? "" : value;
448
- });
449
- };
373
+ // directive/ref.js
374
+ directive.ref = (el, expr, state) => {
375
+ state[expr] = el;
376
+ };
377
+ directive.ref.parse = (expr) => expr;
450
378
 
451
- // directive/class.js
452
- directive.class = (el, evaluate, state) => {
453
- let cur = /* @__PURE__ */ new Set();
454
- return effect(() => {
455
- let v = evaluate(state);
456
- let clsx = /* @__PURE__ */ new Set();
457
- if (v) {
458
- if (typeof v === "string")
459
- v.split(" ").map((cls) => clsx.add(cls));
460
- else if (Array.isArray(v))
461
- v.map((v2) => v2 && clsx.add(v2));
462
- else
463
- Object.entries(v).map(([k, v2]) => v2 && clsx.add(k));
464
- }
465
- for (let cls of cur)
466
- if (clsx.has(cls))
467
- clsx.delete(cls);
468
- else
469
- el.classList.remove(cls);
470
- for (let cls of cur = clsx)
471
- el.classList.add(cls);
472
- });
473
- };
379
+ // directive/with.js
380
+ directive.with = (el, evaluate, rootState) => {
381
+ let state;
382
+ return effect(() => {
383
+ let values = evaluate(rootState);
384
+ sprae(el, state ? values : state = store(values, rootState));
385
+ });
386
+ };
474
387
 
475
- // directive/style.js
476
- directive.style = (el, evaluate, state) => {
477
- let initStyle = el.getAttribute("style");
478
- return effect(() => {
479
- let v = evaluate(state);
480
- if (typeof v === "string")
481
- el.setAttribute("style", initStyle + (initStyle.endsWith(";") ? "" : "; ") + v);
482
- else {
483
- if (initStyle)
484
- el.setAttribute("style", initStyle);
485
- for (let k in v)
486
- k[0] == "-" ? el.style.setProperty(k, v[k]) : el.style[k] = v[k];
487
- }
488
- });
489
- };
388
+ // directive/html.js
389
+ directive.html = (el, evaluate, state) => {
390
+ let tpl = evaluate(state);
391
+ if (!tpl)
392
+ return;
393
+ let content = (tpl.content || tpl).cloneNode(true);
394
+ el.replaceChildren(content);
395
+ sprae(el, state);
396
+ };
490
397
 
491
- // directive/default.js
492
- directive.default = (target, evaluate, state, name) => {
493
- if (!name.startsWith("on"))
398
+ // directive/text.js
399
+ directive.text = (el, evaluate, state) => {
400
+ if (el.content)
401
+ el.replaceWith(el = frag(el).childNodes[0]);
494
402
  return effect(() => {
495
403
  let value = evaluate(state);
496
- if (name)
497
- attr(target, name, value);
498
- else
499
- for (let key in value)
500
- attr(target, dashcase(key), value[key]);
404
+ el.textContent = value == null ? "" : value;
405
+ });
406
+ };
407
+
408
+ // directive/class.js
409
+ directive.class = (el, evaluate, state) => {
410
+ let cur = /* @__PURE__ */ new Set();
411
+ return effect(() => {
412
+ let v = evaluate(state);
413
+ let clsx = /* @__PURE__ */ new Set();
414
+ if (v) {
415
+ if (typeof v === "string")
416
+ v.split(" ").map((cls) => clsx.add(cls));
417
+ else if (Array.isArray(v))
418
+ v.map((v2) => v2 && clsx.add(v2));
419
+ else
420
+ Object.entries(v).map(([k, v2]) => v2 && clsx.add(k));
421
+ }
422
+ for (let cls of cur)
423
+ if (clsx.has(cls))
424
+ clsx.delete(cls);
425
+ else
426
+ el.classList.remove(cls);
427
+ for (let cls of cur = clsx)
428
+ el.classList.add(cls);
501
429
  });
502
- const ctxs = name.split("..").map((e) => {
503
- let ctx = { evt: "", target, test: () => true };
504
- ctx.evt = (e.startsWith("on") ? e.slice(2) : e).replace(
505
- /\.(\w+)?-?([-\w]+)?/g,
506
- (match, mod, param = "") => (ctx.test = mods[mod]?.(ctx, ...param.split("-")) || ctx.test, "")
507
- );
508
- return ctx;
509
- });
510
- if (ctxs.length == 1)
511
- return effect(() => addListener(evaluate(state), ctxs[0]));
512
- let startFn, nextFn, off, idx = 0;
513
- const nextListener = (fn) => {
514
- off = addListener((e) => (off(), nextFn = fn?.(e), (idx = ++idx % ctxs.length) ? nextListener(nextFn) : startFn && nextListener(startFn)), ctxs[idx]);
515
430
  };
516
- return effect(() => (startFn = evaluate(state), !off && nextListener(startFn), () => startFn = null));
517
- function addListener(fn, { evt, target: target2, test, defer, stop, prevent, immediate, ...opts }) {
518
- if (defer)
519
- fn = defer(fn);
520
- const cb = (e) => {
521
- try {
522
- test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.(e));
523
- } catch (error) {
524
- err(error, `:on${evt}`, fn);
431
+
432
+ // directive/style.js
433
+ directive.style = (el, evaluate, state) => {
434
+ let initStyle = el.getAttribute("style");
435
+ return effect(() => {
436
+ let v = evaluate(state);
437
+ if (typeof v === "string")
438
+ el.setAttribute("style", initStyle + (initStyle.endsWith(";") ? "" : "; ") + v);
439
+ else {
440
+ if (initStyle)
441
+ el.setAttribute("style", initStyle);
442
+ for (let k in v)
443
+ k[0] == "-" ? el.style.setProperty(k, v[k]) : el.style[k] = v[k];
525
444
  }
445
+ });
446
+ };
447
+
448
+ // directive/default.js
449
+ directive.default = (target, evaluate, state, name) => {
450
+ if (!name.startsWith("on"))
451
+ return effect(() => {
452
+ let value = evaluate(state);
453
+ if (name)
454
+ attr(target, name, value);
455
+ else
456
+ for (let key in value)
457
+ attr(target, dashcase(key), value[key]);
458
+ });
459
+ const ctxs = name.split("..").map((e) => {
460
+ let ctx = { evt: "", target, test: () => true };
461
+ ctx.evt = (e.startsWith("on") ? e.slice(2) : e).replace(
462
+ /\.(\w+)?-?([-\w]+)?/g,
463
+ (match, mod, param = "") => (ctx.test = mods[mod]?.(ctx, ...param.split("-")) || ctx.test, "")
464
+ );
465
+ return ctx;
466
+ });
467
+ if (ctxs.length == 1)
468
+ return effect(() => addListener(evaluate(state), ctxs[0]));
469
+ let startFn, nextFn, off, idx = 0;
470
+ const nextListener = (fn) => {
471
+ off = addListener((e) => (off(), nextFn = fn?.(e), (idx = ++idx % ctxs.length) ? nextListener(nextFn) : startFn && nextListener(startFn)), ctxs[idx]);
526
472
  };
527
- target2.addEventListener(evt, cb, opts);
528
- return () => target2.removeEventListener(evt, cb, opts);
529
- }
530
- ;
531
- };
532
- var mods = {
533
- prevent(ctx) {
534
- ctx.prevent = true;
535
- },
536
- stop(ctx) {
537
- ctx.stop = true;
538
- },
539
- immediate(ctx) {
540
- ctx.immediate = true;
541
- },
542
- once(ctx) {
543
- ctx.once = true;
544
- },
545
- passive(ctx) {
546
- ctx.passive = true;
547
- },
548
- capture(ctx) {
549
- ctx.capture = true;
550
- },
551
- window(ctx) {
552
- ctx.target = window;
553
- },
554
- document(ctx) {
555
- ctx.target = document;
556
- },
557
- throttle(ctx, limit) {
558
- ctx.defer = (fn) => throttle(fn, limit ? Number(limit) || 0 : 108);
559
- },
560
- debounce(ctx, wait) {
561
- ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108);
562
- },
563
- outside: (ctx) => (e) => {
564
- let target = ctx.target;
565
- if (target.contains(e.target))
566
- return false;
567
- if (e.target.isConnected === false)
568
- return false;
569
- if (target.offsetWidth < 1 && target.offsetHeight < 1)
570
- return false;
571
- return true;
572
- },
573
- self: (ctx) => (e) => e.target === ctx.target,
574
- ctrl: (_, ...param) => (e) => keys.ctrl(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
575
- shift: (_, ...param) => (e) => keys.shift(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
576
- alt: (_, ...param) => (e) => keys.alt(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
577
- meta: (_, ...param) => (e) => keys.meta(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
578
- arrow: () => keys.arrow,
579
- enter: () => keys.enter,
580
- esc: () => keys.esc,
581
- tab: () => keys.tab,
582
- space: () => keys.space,
583
- delete: () => keys.delete,
584
- digit: () => keys.digit,
585
- letter: () => keys.letter,
586
- char: () => keys.char
587
- };
588
- var keys = {
589
- ctrl: (e) => e.ctrlKey || e.key === "Control" || e.key === "Ctrl",
590
- shift: (e) => e.shiftKey || e.key === "Shift",
591
- alt: (e) => e.altKey || e.key === "Alt",
592
- meta: (e) => e.metaKey || e.key === "Meta" || e.key === "Command",
593
- arrow: (e) => e.key.startsWith("Arrow"),
594
- enter: (e) => e.key === "Enter",
595
- esc: (e) => e.key.startsWith("Esc"),
596
- tab: (e) => e.key === "Tab",
597
- space: (e) => e.key === "\xA0" || e.key === "Space" || e.key === " ",
598
- delete: (e) => e.key === "Delete" || e.key === "Backspace",
599
- digit: (e) => /^\d$/.test(e.key),
600
- letter: (e) => /^\p{L}$/gu.test(e.key),
601
- char: (e) => /^\S$/.test(e.key)
602
- };
603
- var attr = (el, name, v) => {
604
- if (v == null || v === false)
605
- el.removeAttribute(name);
606
- else
607
- el.setAttribute(name, v === true ? "" : typeof v === "number" || typeof v === "string" ? v : "");
608
- };
609
- var throttle = (fn, limit) => {
610
- let pause, planned, block = (e) => {
611
- pause = true;
612
- setTimeout(() => {
613
- pause = false;
614
- if (planned)
615
- return planned = false, block(e), fn(e);
616
- }, limit);
473
+ return effect(() => (startFn = evaluate(state), !off && nextListener(startFn), () => startFn = null));
474
+ function addListener(fn, { evt, target: target2, test, defer, stop, prevent, immediate, ...opts }) {
475
+ if (defer)
476
+ fn = defer(fn);
477
+ const cb = (e) => {
478
+ try {
479
+ test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.(e));
480
+ } catch (error) {
481
+ err(error, `:on${evt}`, fn);
482
+ }
483
+ };
484
+ target2.addEventListener(evt, cb, opts);
485
+ return () => target2.removeEventListener(evt, cb, opts);
486
+ }
487
+ ;
617
488
  };
618
- return (e) => {
619
- if (pause)
620
- return planned = true;
621
- block(e);
622
- return fn(e);
489
+ var mods = {
490
+ prevent(ctx) {
491
+ ctx.prevent = true;
492
+ },
493
+ stop(ctx) {
494
+ ctx.stop = true;
495
+ },
496
+ immediate(ctx) {
497
+ ctx.immediate = true;
498
+ },
499
+ once(ctx) {
500
+ ctx.once = true;
501
+ },
502
+ passive(ctx) {
503
+ ctx.passive = true;
504
+ },
505
+ capture(ctx) {
506
+ ctx.capture = true;
507
+ },
508
+ window(ctx) {
509
+ ctx.target = window;
510
+ },
511
+ document(ctx) {
512
+ ctx.target = document;
513
+ },
514
+ throttle(ctx, limit) {
515
+ ctx.defer = (fn) => throttle(fn, limit ? Number(limit) || 0 : 108);
516
+ },
517
+ debounce(ctx, wait) {
518
+ ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108);
519
+ },
520
+ outside: (ctx) => (e) => {
521
+ let target = ctx.target;
522
+ if (target.contains(e.target))
523
+ return false;
524
+ if (e.target.isConnected === false)
525
+ return false;
526
+ if (target.offsetWidth < 1 && target.offsetHeight < 1)
527
+ return false;
528
+ return true;
529
+ },
530
+ self: (ctx) => (e) => e.target === ctx.target,
531
+ ctrl: (_, ...param) => (e) => keys.ctrl(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
532
+ shift: (_, ...param) => (e) => keys.shift(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
533
+ alt: (_, ...param) => (e) => keys.alt(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
534
+ meta: (_, ...param) => (e) => keys.meta(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
535
+ arrow: () => keys.arrow,
536
+ enter: () => keys.enter,
537
+ esc: () => keys.esc,
538
+ tab: () => keys.tab,
539
+ space: () => keys.space,
540
+ delete: () => keys.delete,
541
+ digit: () => keys.digit,
542
+ letter: () => keys.letter,
543
+ char: () => keys.char
623
544
  };
624
- };
625
- var debounce = (fn, wait) => {
626
- let timeout;
627
- return (e) => {
628
- clearTimeout(timeout);
629
- timeout = setTimeout(() => {
630
- timeout = null;
631
- fn(e);
632
- }, wait);
545
+ var keys = {
546
+ ctrl: (e) => e.ctrlKey || e.key === "Control" || e.key === "Ctrl",
547
+ shift: (e) => e.shiftKey || e.key === "Shift",
548
+ alt: (e) => e.altKey || e.key === "Alt",
549
+ meta: (e) => e.metaKey || e.key === "Meta" || e.key === "Command",
550
+ arrow: (e) => e.key.startsWith("Arrow"),
551
+ enter: (e) => e.key === "Enter",
552
+ esc: (e) => e.key.startsWith("Esc"),
553
+ tab: (e) => e.key === "Tab",
554
+ space: (e) => e.key === "\xA0" || e.key === "Space" || e.key === " ",
555
+ delete: (e) => e.key === "Delete" || e.key === "Backspace",
556
+ digit: (e) => /^\d$/.test(e.key),
557
+ letter: (e) => /^\p{L}$/gu.test(e.key),
558
+ char: (e) => /^\S$/.test(e.key)
559
+ };
560
+ var attr = (el, name, v) => {
561
+ if (v == null || v === false)
562
+ el.removeAttribute(name);
563
+ else
564
+ el.setAttribute(name, v === true ? "" : typeof v === "number" || typeof v === "string" ? v : "");
565
+ };
566
+ var throttle = (fn, limit) => {
567
+ let pause, planned, block = (e) => {
568
+ pause = true;
569
+ setTimeout(() => {
570
+ pause = false;
571
+ if (planned)
572
+ return planned = false, block(e), fn(e);
573
+ }, limit);
574
+ };
575
+ return (e) => {
576
+ if (pause)
577
+ return planned = true;
578
+ block(e);
579
+ return fn(e);
580
+ };
581
+ };
582
+ var debounce = (fn, wait) => {
583
+ let timeout;
584
+ return (e) => {
585
+ clearTimeout(timeout);
586
+ timeout = setTimeout(() => {
587
+ timeout = null;
588
+ fn(e);
589
+ }, wait);
590
+ };
591
+ };
592
+ var dashcase = (str) => {
593
+ return str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, (match) => "-" + match.toLowerCase());
633
594
  };
634
- };
635
- var dashcase = (str) => {
636
- return str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, (match) => "-" + match.toLowerCase());
637
- };
638
-
639
- // directive/value.js
640
- directive.value = (el, [getValue, setValue], state) => {
641
- const 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, to) => (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) => {
642
- for (let option in el.options)
643
- option.removeAttribute("selected");
644
- el.value = value;
645
- el.selectedOptions[0]?.setAttribute("selected", "");
646
- } : (value) => el.value = value;
647
- const handleChange = el.type === "checkbox" ? (e) => setValue(state, el.checked) : (e) => setValue(state, el.value);
648
- el.addEventListener("input", handleChange);
649
- el.addEventListener("change", handleChange);
650
- return effect(() => update(getValue(state)));
651
- };
652
- directive.value.parse = (expr) => {
653
- let evaluate = [parse(expr)];
654
- try {
655
- evaluate.push(parse(`${expr}=arguments[1];`));
656
- } catch (e) {
657
- }
658
- return evaluate;
659
- };
660
-
661
- // directive/fx.js
662
- directive.fx = (el, evaluate, state) => {
663
- return effect(() => evaluate(state));
664
- };
665
595
 
666
- // sprae.js
667
- sprae.use(ulive_es_exports);
668
- sprae.use({ compile: (expr) => sprae.constructor(`with (arguments[0]) { return ${expr} };`) });
669
- var sprae_default = sprae;
670
- if (document?.currentScript?.hasAttribute('init')) sprae(document.documentElement)if (typeof module.exports == "object" && typeof exports == "object") {
671
- var __cp = (to, from, except, desc) => {
672
- if ((from && typeof from === "object") || typeof from === "function") {
673
- for (let key of Object.getOwnPropertyNames(from)) {
674
- if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)
675
- Object.defineProperty(to, key, {
676
- get: () => from[key],
677
- enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,
678
- });
679
- }
680
- }
681
- return to;
596
+ // directive/value.js
597
+ directive.value = (el, [getValue, setValue], state) => {
598
+ const 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, to) => (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) => {
599
+ for (let option in el.options)
600
+ option.removeAttribute("selected");
601
+ el.value = value;
602
+ el.selectedOptions[0]?.setAttribute("selected", "");
603
+ } : (value) => el.value = value;
604
+ const handleChange = el.type === "checkbox" ? (e) => setValue(state, el.checked) : (e) => setValue(state, el.value);
605
+ el.addEventListener("input", handleChange);
606
+ el.addEventListener("change", handleChange);
607
+ return effect(() => update(getValue(state)));
682
608
  };
683
- module.exports = __cp(module.exports, exports);
684
- }
685
- return module.exports;
686
- }))if (typeof module.exports == "object" && typeof exports == "object") {
687
- var __cp = (to, from, except, desc) => {
688
- if ((from && typeof from === "object") || typeof from === "function") {
689
- for (let key of Object.getOwnPropertyNames(from)) {
690
- if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)
691
- Object.defineProperty(to, key, {
692
- get: () => from[key],
693
- enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,
694
- });
695
- }
609
+ directive.value.parse = (expr) => {
610
+ let evaluate = [parse(expr)];
611
+ try {
612
+ evaluate.push(parse(`${expr}=arguments[1];`));
613
+ } catch (e) {
696
614
  }
697
- return to;
615
+ return evaluate;
698
616
  };
699
- module.exports = __cp(module.exports, exports);
700
- }
701
- return module.exports;
702
- }))
617
+
618
+ // directive/fx.js
619
+ directive.fx = (el, evaluate, state) => {
620
+ return effect(() => evaluate(state));
621
+ };
622
+
623
+ // sprae.js
624
+ sprae.use(ulive_es_exports);
625
+ sprae.use({ compile: (expr) => sprae.constructor(`with (arguments[0]) { return ${expr} };`) });
626
+ var sprae_default = sprae;
627
+ if (document?.currentScript) {
628
+ window.sprae = sprae;
629
+ if (document.currentScript.hasAttribute("init"))
630
+ sprae(document.documentElement);
631
+ }
632
+ })();