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