sprae 7.0.0 → 8.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/package.json +3 -6
- package/readme.md +44 -15
- package/sprae.auto.js +192 -201
- package/sprae.auto.min.js +1 -1
- package/sprae.js +192 -201
- package/sprae.min.js +1 -1
- package/src/core.js +22 -16
- package/src/directives.js +111 -85
- package/src/domdiff.js +10 -7
- package/src/state.proxy.js +4 -2
- package/src/state.signals-proxy.js +74 -49
- package/src/state.signals.js +2 -2
- package/src/util.js +0 -30
package/sprae.js
CHANGED
|
@@ -44,6 +44,20 @@ function n(i2) {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
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
|
+
}
|
|
47
61
|
var f = void 0;
|
|
48
62
|
var v = 0;
|
|
49
63
|
var e = 0;
|
|
@@ -380,6 +394,8 @@ function O(i2) {
|
|
|
380
394
|
}
|
|
381
395
|
|
|
382
396
|
// src/state.signals-proxy.js
|
|
397
|
+
var _dispose = Symbol.dispose ||= Symbol("dispose");
|
|
398
|
+
var _signals = Symbol("signals");
|
|
383
399
|
var sandbox = {
|
|
384
400
|
Array,
|
|
385
401
|
Object,
|
|
@@ -406,47 +422,73 @@ var sandbox = {
|
|
|
406
422
|
requestAnimationFrame
|
|
407
423
|
};
|
|
408
424
|
var isObject = (v2) => v2?.constructor === Object;
|
|
409
|
-
var memo = /* @__PURE__ */ new WeakMap();
|
|
410
425
|
var lastProp;
|
|
411
426
|
function createState(values, parent) {
|
|
412
427
|
if (!isObject(values) && !Array.isArray(values))
|
|
413
428
|
return values;
|
|
414
|
-
if (
|
|
429
|
+
if (values[_signals] && !parent)
|
|
415
430
|
return values;
|
|
416
|
-
const
|
|
431
|
+
const initSignals = values[_signals];
|
|
432
|
+
const _len = Array.isArray(values) && a((initSignals || values).length), signals = parent ? Object.create((parent = createState(parent))[_signals]) : Array.isArray(values) ? [] : {}, proto = signals.constructor.prototype;
|
|
433
|
+
const state = new Proxy(values, {
|
|
417
434
|
has() {
|
|
418
435
|
return true;
|
|
419
436
|
},
|
|
420
|
-
get(
|
|
421
|
-
let v2;
|
|
422
|
-
if (_len && key === "length")
|
|
423
|
-
v2 = Array.prototype[lastProp] ? _len.peek() : _len.value;
|
|
424
|
-
else
|
|
425
|
-
v2 = (signals2[key] || initSignal(key))?.valueOf();
|
|
437
|
+
get(values2, key) {
|
|
426
438
|
if (_len)
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
},
|
|
430
|
-
set(signals2, key, v2) {
|
|
431
|
-
if (_len && key === "length")
|
|
432
|
-
_len.value = signals2.length = v2;
|
|
433
|
-
else {
|
|
434
|
-
const s = signals2[key] || initSignal(key);
|
|
435
|
-
if (!s)
|
|
436
|
-
signals2[key] = a(createState(v2?.valueOf()));
|
|
437
|
-
else if (s._set)
|
|
438
|
-
s._set(v2);
|
|
439
|
+
if (key === "length")
|
|
440
|
+
return proto[lastProp] ? _len.peek() : _len.value;
|
|
439
441
|
else
|
|
440
|
-
|
|
442
|
+
lastProp = key;
|
|
443
|
+
if (proto[key])
|
|
444
|
+
return proto[key];
|
|
445
|
+
if (key === _signals)
|
|
446
|
+
return signals;
|
|
447
|
+
const s2 = signals[key] || initSignal(key);
|
|
448
|
+
if (s2)
|
|
449
|
+
return s2.value;
|
|
450
|
+
if (parent)
|
|
451
|
+
return parent[key];
|
|
452
|
+
return sandbox[key];
|
|
453
|
+
},
|
|
454
|
+
set(values2, key, v2) {
|
|
455
|
+
if (_len) {
|
|
456
|
+
if (key === "length") {
|
|
457
|
+
n(() => {
|
|
458
|
+
for (let i2 = v2, l2 = signals.length; i2 < l2; i2++)
|
|
459
|
+
delete state[i2];
|
|
460
|
+
_len.value = signals.length = values2.length = v2;
|
|
461
|
+
});
|
|
462
|
+
return true;
|
|
463
|
+
}
|
|
441
464
|
}
|
|
442
|
-
|
|
443
|
-
|
|
465
|
+
const s2 = signals[key] || initSignal(key, v2) || a();
|
|
466
|
+
const cur = s2.peek();
|
|
467
|
+
if (v2 === cur)
|
|
468
|
+
;
|
|
469
|
+
else if (s2._set)
|
|
470
|
+
s2._set(v2);
|
|
471
|
+
else if (Array.isArray(v2) && Array.isArray(cur)) {
|
|
472
|
+
s(() => n(() => {
|
|
473
|
+
let i2 = 0, l2 = v2.length, vals = values2[key];
|
|
474
|
+
for (; i2 < l2; i2++)
|
|
475
|
+
cur[i2] = vals[i2] = v2[i2];
|
|
476
|
+
cur.length = l2;
|
|
477
|
+
}));
|
|
478
|
+
} else {
|
|
479
|
+
s2.value = createState(values2[key] = v2);
|
|
480
|
+
}
|
|
481
|
+
if (_len && key >= _len.peek())
|
|
482
|
+
_len.value = signals.length = values2.length = Number(key) + 1;
|
|
483
|
+
return true;
|
|
484
|
+
},
|
|
485
|
+
deleteProperty(values2, key) {
|
|
486
|
+
signals[key]?._del?.(), delete signals[key], delete values2[key];
|
|
444
487
|
return true;
|
|
445
488
|
}
|
|
446
489
|
});
|
|
447
|
-
for (let key in values)
|
|
448
|
-
signals[key] = initSignal(key);
|
|
449
|
-
}
|
|
490
|
+
for (let key in values)
|
|
491
|
+
signals[key] = initSignals?.[key] ?? initSignal(key);
|
|
450
492
|
function initSignal(key) {
|
|
451
493
|
if (values.hasOwnProperty(key)) {
|
|
452
494
|
const desc = Object.getOwnPropertyDescriptor(values, key);
|
|
@@ -456,103 +498,17 @@ function createState(values, parent) {
|
|
|
456
498
|
}
|
|
457
499
|
return signals[key] = desc.value?.peek ? desc.value : a(createState(desc.value));
|
|
458
500
|
}
|
|
459
|
-
if (parent)
|
|
460
|
-
return parent[key];
|
|
461
|
-
if (sandbox.hasOwnProperty(key))
|
|
462
|
-
return sandbox[key];
|
|
463
501
|
}
|
|
464
|
-
memo.set(state, signals);
|
|
465
502
|
return state;
|
|
466
503
|
}
|
|
467
504
|
|
|
468
|
-
// src/domdiff.js
|
|
469
|
-
function domdiff_default(parent, a2, b2, before) {
|
|
470
|
-
const aIdx = /* @__PURE__ */ new Map();
|
|
471
|
-
const bIdx = /* @__PURE__ */ new Map();
|
|
472
|
-
let i2;
|
|
473
|
-
let j;
|
|
474
|
-
for (i2 = 0; i2 < a2.length; i2++) {
|
|
475
|
-
aIdx.set(a2[i2], i2);
|
|
476
|
-
}
|
|
477
|
-
for (i2 = 0; i2 < b2.length; i2++) {
|
|
478
|
-
bIdx.set(b2[i2], i2);
|
|
479
|
-
}
|
|
480
|
-
for (i2 = j = 0; i2 !== a2.length || j !== b2.length; ) {
|
|
481
|
-
var aElm = a2[i2], bElm = b2[j];
|
|
482
|
-
if (aElm === null) {
|
|
483
|
-
i2++;
|
|
484
|
-
} else if (b2.length <= j) {
|
|
485
|
-
parent.removeChild(a2[i2]);
|
|
486
|
-
i2++;
|
|
487
|
-
} else if (a2.length <= i2) {
|
|
488
|
-
parent.insertBefore(bElm, a2[i2] || before);
|
|
489
|
-
j++;
|
|
490
|
-
} else if (aElm === bElm) {
|
|
491
|
-
i2++;
|
|
492
|
-
j++;
|
|
493
|
-
} else {
|
|
494
|
-
var curElmInNew = bIdx.get(aElm);
|
|
495
|
-
var wantedElmInOld = aIdx.get(bElm);
|
|
496
|
-
if (curElmInNew === void 0) {
|
|
497
|
-
parent.removeChild(a2[i2]);
|
|
498
|
-
i2++;
|
|
499
|
-
} else if (wantedElmInOld === void 0) {
|
|
500
|
-
parent.insertBefore(
|
|
501
|
-
bElm,
|
|
502
|
-
a2[i2] || before
|
|
503
|
-
);
|
|
504
|
-
j++;
|
|
505
|
-
} else {
|
|
506
|
-
parent.insertBefore(
|
|
507
|
-
a2[wantedElmInOld],
|
|
508
|
-
a2[i2] || before
|
|
509
|
-
);
|
|
510
|
-
a2[wantedElmInOld] = null;
|
|
511
|
-
if (wantedElmInOld > i2 + 1)
|
|
512
|
-
i2++;
|
|
513
|
-
j++;
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
return b2;
|
|
518
|
-
}
|
|
519
|
-
|
|
520
505
|
// src/util.js
|
|
521
506
|
var queueMicrotask = Promise.prototype.then.bind(Promise.resolve());
|
|
522
|
-
var refs = /* @__PURE__ */ new WeakMap();
|
|
523
|
-
var set = (value) => {
|
|
524
|
-
const ref = new WeakRef(value);
|
|
525
|
-
refs.set(value, ref);
|
|
526
|
-
return ref;
|
|
527
|
-
};
|
|
528
|
-
var get = (value) => refs.get(value) || set(value);
|
|
529
|
-
var WeakishMap = class extends Map {
|
|
530
|
-
#registry = new FinalizationRegistry((key) => super.delete(key));
|
|
531
|
-
get size() {
|
|
532
|
-
return [...this].length;
|
|
533
|
-
}
|
|
534
|
-
constructor(entries = []) {
|
|
535
|
-
super();
|
|
536
|
-
for (const [key, value] of entries)
|
|
537
|
-
this.set(key, value);
|
|
538
|
-
}
|
|
539
|
-
get(key) {
|
|
540
|
-
return super.get(key)?.deref();
|
|
541
|
-
}
|
|
542
|
-
set(key, value) {
|
|
543
|
-
let ref = super.get(key);
|
|
544
|
-
if (ref)
|
|
545
|
-
this.#registry.unregister(ref);
|
|
546
|
-
ref = get(value);
|
|
547
|
-
this.#registry.register(value, key, ref);
|
|
548
|
-
return super.set(key, ref);
|
|
549
|
-
}
|
|
550
|
-
};
|
|
551
507
|
|
|
552
508
|
// src/directives.js
|
|
553
509
|
var primary = {};
|
|
554
510
|
var secondary = {};
|
|
555
|
-
primary["if"] = (el, expr) => {
|
|
511
|
+
primary["if"] = (el, expr, state) => {
|
|
556
512
|
let holder = document.createTextNode(""), clauses = [parseExpr(el, expr, ":if")], els = [el], cur = el;
|
|
557
513
|
while (cur = el.nextElementSibling) {
|
|
558
514
|
if (cur.hasAttribute(":else")) {
|
|
@@ -570,70 +526,92 @@ primary["if"] = (el, expr) => {
|
|
|
570
526
|
break;
|
|
571
527
|
}
|
|
572
528
|
el.replaceWith(cur = holder);
|
|
573
|
-
|
|
529
|
+
const dispose = O(() => {
|
|
574
530
|
let i2 = clauses.findIndex((f2) => f2(state));
|
|
575
531
|
if (els[i2] != cur) {
|
|
576
532
|
;
|
|
577
533
|
(cur[_each] || cur).replaceWith(cur = els[i2] || holder);
|
|
578
534
|
sprae(cur, state);
|
|
579
535
|
}
|
|
536
|
+
});
|
|
537
|
+
return () => {
|
|
538
|
+
for (const el2 of els)
|
|
539
|
+
el2[_dispose]?.();
|
|
540
|
+
dispose();
|
|
580
541
|
};
|
|
581
542
|
};
|
|
582
543
|
var _each = Symbol(":each");
|
|
583
|
-
primary["each"] = (tpl, expr) => {
|
|
544
|
+
primary["each"] = (tpl, expr, state) => {
|
|
584
545
|
let each = parseForExpression(expr);
|
|
585
546
|
if (!each)
|
|
586
547
|
return exprError(new Error(), tpl, expr, ":each");
|
|
548
|
+
const [itemVar, idxVar, itemsExpr] = each;
|
|
587
549
|
const holder = tpl[_each] = document.createTextNode("");
|
|
588
550
|
tpl.replaceWith(holder);
|
|
589
|
-
const evaluate = parseExpr(tpl,
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
if (
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
list = list.map((item, i2) => [i2 + 1, item]);
|
|
605
|
-
else if (typeof list === "object")
|
|
606
|
-
list = Object.entries(list);
|
|
607
|
-
else
|
|
608
|
-
exprError(Error("Bad list value"), tpl, expr, ":each", list);
|
|
609
|
-
let newEls = [], elScopes = [];
|
|
610
|
-
for (let [idx, item] of list) {
|
|
611
|
-
let el, scope, key = itemKey?.({ [each[0]]: item, [each[1]]: idx });
|
|
612
|
-
if (key == null)
|
|
613
|
-
el = tpl.cloneNode(true);
|
|
614
|
-
else
|
|
615
|
-
(el = itemEls.get(key)) || itemEls.set(key, el = tpl.cloneNode(true));
|
|
616
|
-
newEls.push(el);
|
|
617
|
-
if (key == null || !(scope = scopes.get(key))) {
|
|
618
|
-
scope = createState({ [each[0]]: item, [refExpr || ""]: null, [each[1]]: idx }, state);
|
|
619
|
-
if (key != null)
|
|
620
|
-
scopes.set(key, scope);
|
|
621
|
-
} else
|
|
622
|
-
scope[each[0]] = item;
|
|
623
|
-
elScopes.push(scope);
|
|
624
|
-
}
|
|
625
|
-
domdiff_default(holder.parentNode, curEls, newEls, holder);
|
|
626
|
-
curEls = newEls;
|
|
627
|
-
for (let i2 = 0; i2 < newEls.length; i2++) {
|
|
628
|
-
sprae(newEls[i2], elScopes[i2]);
|
|
551
|
+
const evaluate = parseExpr(tpl, itemsExpr, ":each");
|
|
552
|
+
let items, prevl = 0, keys2;
|
|
553
|
+
O(() => {
|
|
554
|
+
let newItems = evaluate(state);
|
|
555
|
+
if (!newItems)
|
|
556
|
+
newItems = [];
|
|
557
|
+
else if (typeof newItems === "number") {
|
|
558
|
+
newItems = Array.from({ length: newItems }, (_2, i2) => i2);
|
|
559
|
+
} else if (Array.isArray(newItems))
|
|
560
|
+
;
|
|
561
|
+
else if (typeof newItems === "object") {
|
|
562
|
+
keys2 = Object.keys(newItems);
|
|
563
|
+
newItems = Object.values(newItems);
|
|
564
|
+
} else {
|
|
565
|
+
exprError(Error("Bad items value"), tpl, expr, ":each", newItems);
|
|
629
566
|
}
|
|
630
|
-
|
|
567
|
+
s(() => n(() => {
|
|
568
|
+
if (!items?.[_signals][0]?.peek) {
|
|
569
|
+
for (let i2 = 0, signals = items?.[_signals]; i2 < prevl; i2++)
|
|
570
|
+
signals[i2]?._del();
|
|
571
|
+
items = newItems, items[_signals] ||= {};
|
|
572
|
+
} else {
|
|
573
|
+
let newl = newItems.length, i2 = 0;
|
|
574
|
+
for (; i2 < newl; i2++)
|
|
575
|
+
items[i2] = newItems[i2];
|
|
576
|
+
items.length = newl;
|
|
577
|
+
}
|
|
578
|
+
}));
|
|
579
|
+
return O(() => {
|
|
580
|
+
let newl = newItems.length;
|
|
581
|
+
if (prevl !== newl)
|
|
582
|
+
s(() => n(() => {
|
|
583
|
+
const signals = items[_signals];
|
|
584
|
+
for (let i2 = prevl; i2 < newl; i2++) {
|
|
585
|
+
items[i2];
|
|
586
|
+
const el = tpl.cloneNode(true), scope = createState({
|
|
587
|
+
[itemVar]: signals[i2] ?? items[i2],
|
|
588
|
+
[idxVar]: keys2?.[i2] ?? i2
|
|
589
|
+
}, state);
|
|
590
|
+
holder.before(el);
|
|
591
|
+
sprae(el, scope);
|
|
592
|
+
const { _del } = signals[i2] ||= {};
|
|
593
|
+
signals[i2]._del = () => {
|
|
594
|
+
delete signals[i2];
|
|
595
|
+
_del?.();
|
|
596
|
+
el[_dispose](), el.remove(), delete items[i2];
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
prevl = newl;
|
|
600
|
+
}));
|
|
601
|
+
});
|
|
602
|
+
});
|
|
603
|
+
return () => n(() => {
|
|
604
|
+
for (let _i of items[_signals])
|
|
605
|
+
_i?._del();
|
|
606
|
+
items.length = 0;
|
|
607
|
+
});
|
|
631
608
|
};
|
|
632
609
|
primary["with"] = (el, expr, rootState) => {
|
|
633
610
|
let evaluate = parseExpr(el, expr, ":with");
|
|
634
611
|
const localState = evaluate(rootState);
|
|
635
612
|
let state = createState(localState, rootState);
|
|
636
613
|
sprae(el, state);
|
|
614
|
+
return el[_dispose];
|
|
637
615
|
};
|
|
638
616
|
primary["ref"] = (el, expr, state) => {
|
|
639
617
|
state[expr] = el;
|
|
@@ -663,16 +641,17 @@ secondary["render"] = (el, expr, state) => {
|
|
|
663
641
|
let content = tpl.content.cloneNode(true);
|
|
664
642
|
el.replaceChildren(content);
|
|
665
643
|
sprae(el, state);
|
|
644
|
+
return el[_dispose];
|
|
666
645
|
};
|
|
667
|
-
secondary["id"] = (el, expr) => {
|
|
646
|
+
secondary["id"] = (el, expr, state) => {
|
|
668
647
|
let evaluate = parseExpr(el, expr, ":id");
|
|
669
648
|
const update = (v2) => el.id = v2 || v2 === 0 ? v2 : "";
|
|
670
|
-
return (
|
|
649
|
+
return O(() => update(evaluate(state)));
|
|
671
650
|
};
|
|
672
|
-
secondary["class"] = (el, expr) => {
|
|
651
|
+
secondary["class"] = (el, expr, state) => {
|
|
673
652
|
let evaluate = parseExpr(el, expr, ":class");
|
|
674
653
|
let initClassName = el.getAttribute("class");
|
|
675
|
-
return (
|
|
654
|
+
return O(() => {
|
|
676
655
|
let v2 = evaluate(state);
|
|
677
656
|
let className = [initClassName];
|
|
678
657
|
if (v2) {
|
|
@@ -687,41 +666,44 @@ secondary["class"] = (el, expr) => {
|
|
|
687
666
|
el.setAttribute("class", className);
|
|
688
667
|
else
|
|
689
668
|
el.removeAttribute("class");
|
|
690
|
-
};
|
|
669
|
+
});
|
|
691
670
|
};
|
|
692
|
-
secondary["style"] = (el, expr) => {
|
|
671
|
+
secondary["style"] = (el, expr, state) => {
|
|
693
672
|
let evaluate = parseExpr(el, expr, ":style");
|
|
694
673
|
let initStyle = el.getAttribute("style") || "";
|
|
695
674
|
if (!initStyle.endsWith(";"))
|
|
696
675
|
initStyle += "; ";
|
|
697
|
-
return (
|
|
676
|
+
return O(() => {
|
|
698
677
|
let v2 = evaluate(state);
|
|
699
678
|
if (typeof v2 === "string")
|
|
700
679
|
el.setAttribute("style", initStyle + v2);
|
|
701
680
|
else {
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
681
|
+
s(() => {
|
|
682
|
+
el.setAttribute("style", initStyle);
|
|
683
|
+
for (let k in v2)
|
|
684
|
+
if (typeof v2[k] !== "symbol")
|
|
685
|
+
el.style.setProperty(k, v2[k]);
|
|
686
|
+
});
|
|
705
687
|
}
|
|
706
|
-
};
|
|
688
|
+
});
|
|
707
689
|
};
|
|
708
|
-
secondary["text"] = (el, expr) => {
|
|
690
|
+
secondary["text"] = (el, expr, state) => {
|
|
709
691
|
let evaluate = parseExpr(el, expr, ":text");
|
|
710
|
-
return (
|
|
692
|
+
return O(() => {
|
|
711
693
|
let value = evaluate(state);
|
|
712
694
|
el.textContent = value == null ? "" : value;
|
|
713
|
-
};
|
|
695
|
+
});
|
|
714
696
|
};
|
|
715
|
-
secondary[""] = (el, expr) => {
|
|
697
|
+
secondary[""] = (el, expr, state) => {
|
|
716
698
|
let evaluate = parseExpr(el, expr, ":");
|
|
717
699
|
if (evaluate)
|
|
718
|
-
return (
|
|
700
|
+
return O(() => {
|
|
719
701
|
let value = evaluate(state);
|
|
720
702
|
for (let key in value)
|
|
721
703
|
attr(el, dashcase(key), value[key]);
|
|
722
|
-
};
|
|
704
|
+
});
|
|
723
705
|
};
|
|
724
|
-
secondary["value"] = (el, expr) => {
|
|
706
|
+
secondary["value"] = (el, expr, state) => {
|
|
725
707
|
let evaluate = parseExpr(el, expr, ":value");
|
|
726
708
|
let from, to;
|
|
727
709
|
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) => {
|
|
@@ -730,20 +712,28 @@ secondary["value"] = (el, expr) => {
|
|
|
730
712
|
el.value = value;
|
|
731
713
|
el.selectedOptions[0]?.setAttribute("selected", "");
|
|
732
714
|
} : (value) => el.value = value;
|
|
733
|
-
return (
|
|
715
|
+
return O(() => {
|
|
716
|
+
update(evaluate(state));
|
|
717
|
+
});
|
|
734
718
|
};
|
|
735
719
|
var directives_default = (el, expr, state, name) => {
|
|
736
720
|
let evt = name.startsWith("on") && name.slice(2);
|
|
737
721
|
let evaluate = parseExpr(el, expr, ":" + name);
|
|
738
722
|
if (!evaluate)
|
|
739
723
|
return;
|
|
740
|
-
if (evt)
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
724
|
+
if (evt) {
|
|
725
|
+
let off, dispose = O(() => {
|
|
726
|
+
if (off)
|
|
727
|
+
off(), off = null;
|
|
728
|
+
let value = evaluate(state);
|
|
729
|
+
if (value)
|
|
730
|
+
off = on(el, evt, value);
|
|
731
|
+
});
|
|
732
|
+
return () => (off?.(), dispose());
|
|
733
|
+
}
|
|
734
|
+
return O(() => {
|
|
735
|
+
attr(el, name, evaluate(state));
|
|
736
|
+
});
|
|
747
737
|
};
|
|
748
738
|
var on = (el, e2, fn) => {
|
|
749
739
|
if (!fn)
|
|
@@ -867,7 +857,7 @@ function parseExpr(el, expression, dir) {
|
|
|
867
857
|
let evaluate = evaluatorMemo[expression];
|
|
868
858
|
if (!evaluate) {
|
|
869
859
|
try {
|
|
870
|
-
evaluate = evaluatorMemo[expression] = new Function(`__scope`, `with (__scope) { return ${expression.trim()} };`);
|
|
860
|
+
evaluate = evaluatorMemo[expression] = new Function(`__scope`, `with (__scope) { let __; return ${expression.trim()} };`);
|
|
871
861
|
} catch (e2) {
|
|
872
862
|
return exprError(e2, el, expression, dir);
|
|
873
863
|
}
|
|
@@ -899,22 +889,22 @@ function dashcase(str) {
|
|
|
899
889
|
|
|
900
890
|
// src/core.js
|
|
901
891
|
sprae.globals = sandbox;
|
|
902
|
-
var
|
|
892
|
+
var memo = /* @__PURE__ */ new WeakMap();
|
|
903
893
|
function sprae(container, values) {
|
|
904
894
|
if (!container.children)
|
|
905
895
|
return;
|
|
906
|
-
if (
|
|
907
|
-
return n(() => Object.assign(
|
|
896
|
+
if (memo.has(container))
|
|
897
|
+
return n(() => Object.assign(memo.get(container), values));
|
|
908
898
|
const state = createState(values || {});
|
|
909
|
-
const
|
|
899
|
+
const disposes = [];
|
|
910
900
|
const init = (el, parent = el.parentNode) => {
|
|
911
901
|
for (let name in primary) {
|
|
912
902
|
let attrName = ":" + name;
|
|
913
903
|
if (el.hasAttribute?.(attrName)) {
|
|
914
904
|
let expr = el.getAttribute(attrName);
|
|
915
905
|
el.removeAttribute(attrName);
|
|
916
|
-
|
|
917
|
-
if (
|
|
906
|
+
disposes.push(primary[name](el, expr, state, name));
|
|
907
|
+
if (memo.has(el))
|
|
918
908
|
return;
|
|
919
909
|
if (el.parentNode !== parent)
|
|
920
910
|
return false;
|
|
@@ -930,7 +920,7 @@ function sprae(container, values) {
|
|
|
930
920
|
if (prefix === "@")
|
|
931
921
|
name = `on` + name;
|
|
932
922
|
let dir = secondary[name] || directives_default;
|
|
933
|
-
|
|
923
|
+
disposes.push(dir(el, expr, state, name));
|
|
934
924
|
}
|
|
935
925
|
} else
|
|
936
926
|
i2++;
|
|
@@ -942,16 +932,17 @@ function sprae(container, values) {
|
|
|
942
932
|
}
|
|
943
933
|
};
|
|
944
934
|
init(container);
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
935
|
+
if (memo.has(container))
|
|
936
|
+
return state;
|
|
937
|
+
memo.set(container, state);
|
|
938
|
+
if (disposes.length)
|
|
939
|
+
Object.defineProperty(container, _dispose, {
|
|
940
|
+
value: () => {
|
|
941
|
+
while (disposes.length)
|
|
942
|
+
disposes.shift()?.();
|
|
943
|
+
memo.delete(container);
|
|
944
|
+
}
|
|
945
|
+
});
|
|
955
946
|
return state;
|
|
956
947
|
}
|
|
957
948
|
|
package/sprae.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function t(){throw new Error("Cycle detected")}var e=Symbol.for("preact-signals");function r(){if(o>1)o--;else{for(var t,e=!1;void 0!==n;){var r=n;for(n=void 0,s++;void 0!==r;){var i=r.o;if(r.o=void 0,r.f&=-3,!(8&r.f)&&c(r))try{r.c()}catch(r){e||(t=r,e=!0)}r=i}}if(s=0,o--,e)throw t}}var i=void 0,n=void 0,o=0,s=0,a=0;function l(t){if(void 0!==i){var e=t.n;if(void 0===e||e.t!==i)return e={i:0,S:t,p:i.s,n:void 0,t:i,e:void 0,x:void 0,r:e},void 0!==i.s&&(i.s.n=e),i.s=e,t.n=e,32&i.f&&t.S(e),e;if(-1===e.i)return e.i=0,void 0!==e.n&&(e.n.p=e.p,void 0!==e.p&&(e.p.n=e.n),e.p=i.s,e.n=void 0,i.s.n=e,i.s=e),e}}function u(t){this.v=t,this.i=0,this.n=void 0,this.t=void 0}function f(t){return new u(t)}function c(t){for(var e=t.s;void 0!==e;e=e.n)if(e.S.i!==e.i||!e.S.h()||e.S.i!==e.i)return!0;return!1}function h(t){for(var e=t.s;void 0!==e;e=e.n){var r=e.S.n;if(void 0!==r&&(e.r=r),e.S.n=e,e.i=-1,void 0===e.n){t.s=e;break}}}function v(t){for(var e=t.s,r=void 0;void 0!==e;){var i=e.p;-1===e.i?(e.S.U(e),void 0!==i&&(i.n=e.n),void 0!==e.n&&(e.n.p=i)):r=e,e.S.n=e.r,void 0!==e.r&&(e.r=void 0),e=i}t.s=r}function p(t){u.call(this,void 0),this.x=t,this.s=void 0,this.g=a-1,this.f=4}function d(t){var e=t.u;if(t.u=void 0,"function"==typeof e){o++;var n=i;i=void 0;try{e()}catch(e){throw t.f&=-2,t.f|=8,y(t),e}finally{i=n,r()}}}function y(t){for(var e=t.s;void 0!==e;e=e.n)e.S.U(e);t.x=void 0,t.s=void 0,d(t)}function g(t){if(i!==this)throw new Error("Out-of-order effect");v(this),i=t,this.f&=-2,8&this.f&&y(this),r()}function m(t){this.x=t,this.u=void 0,this.s=void 0,this.o=void 0,this.f=32}function b(t){var e=new m(t);try{e.c()}catch(t){throw e.d(),t}return e.d.bind(e)}u.prototype.brand=e,u.prototype.h=function(){return!0},u.prototype.S=function(t){this.t!==t&&void 0===t.e&&(t.x=this.t,void 0!==this.t&&(this.t.e=t),this.t=t)},u.prototype.U=function(t){if(void 0!==this.t){var e=t.e,r=t.x;void 0!==e&&(e.x=r,t.e=void 0),void 0!==r&&(r.e=e,t.x=void 0),t===this.t&&(this.t=r)}},u.prototype.subscribe=function(t){var e=this;return b((function(){var r=e.value,i=32&this.f;this.f&=-33;try{t(r)}finally{this.f|=i}}))},u.prototype.valueOf=function(){return this.value},u.prototype.toString=function(){return this.value+""},u.prototype.toJSON=function(){return this.value},u.prototype.peek=function(){return this.v},Object.defineProperty(u.prototype,"value",{get:function(){var t=l(this);return void 0!==t&&(t.i=this.i),this.v},set:function(e){if(i instanceof p&&function(){throw new Error("Computed cannot have side-effects")}(),e!==this.v){s>100&&t(),this.v=e,this.i++,a++,o++;try{for(var n=this.t;void 0!==n;n=n.x)n.t.N()}finally{r()}}}}),(p.prototype=new u).h=function(){if(this.f&=-3,1&this.f)return!1;if(32==(36&this.f))return!0;if(this.f&=-5,this.g===a)return!0;if(this.g=a,this.f|=1,this.i>0&&!c(this))return this.f&=-2,!0;var t=i;try{h(this),i=this;var e=this.x();(16&this.f||this.v!==e||0===this.i)&&(this.v=e,this.f&=-17,this.i++)}catch(t){this.v=t,this.f|=16,this.i++}return i=t,v(this),this.f&=-2,!0},p.prototype.S=function(t){if(void 0===this.t){this.f|=36;for(var e=this.s;void 0!==e;e=e.n)e.S.S(e)}u.prototype.S.call(this,t)},p.prototype.U=function(t){if(void 0!==this.t&&(u.prototype.U.call(this,t),void 0===this.t)){this.f&=-33;for(var e=this.s;void 0!==e;e=e.n)e.S.U(e)}},p.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var t=this.t;void 0!==t;t=t.x)t.t.N()}},p.prototype.peek=function(){if(this.h()||t(),16&this.f)throw this.v;return this.v},Object.defineProperty(p.prototype,"value",{get:function(){1&this.f&&t();var e=l(this);if(this.h(),void 0!==e&&(e.i=this.i),16&this.f)throw this.v;return this.v}}),m.prototype.c=function(){var t=this.S();try{if(8&this.f)return;if(void 0===this.x)return;var e=this.x();"function"==typeof e&&(this.u=e)}finally{t()}},m.prototype.S=function(){1&this.f&&t(),this.f|=1,this.f&=-9,d(this),h(this),o++;var e=i;return i=this,g.bind(this,e)},m.prototype.N=function(){2&this.f||(this.f|=2,this.o=n,n=this)},m.prototype.d=function(){this.f|=8,1&this.f||y(this)};var w,A={Array:Array,Object:Object,Number:Number,String:String,Boolean:Boolean,Date:Date,console:console,window:window,document:document,history:history,navigator:navigator,location:location,screen:screen,localStorage:localStorage,sessionStorage:sessionStorage,alert:alert,prompt:prompt,confirm:confirm,fetch:fetch,performance:performance,setTimeout:setTimeout,setInterval:setInterval,requestAnimationFrame:requestAnimationFrame},k=new WeakMap;function S(t,e){if(t?.constructor!==Object&&!Array.isArray(t))return t;if(k.has(t)&&!e)return t;const r=Array.isArray(t)&&f(t.length),i=e?Object.create(k.get(e=S(e))):Array.isArray(t)?[]:{},n=new Proxy(i,{has:()=>!0,get(t,e){let i;return i=r&&"length"===e?Array.prototype[w]?r.peek():r.value:(t[e]||o(e))?.valueOf(),r&&(w=e),i},set(t,e,i){if(r&&"length"===e)r.value=t.length=i;else{const r=t[e]||o(e);r?r._set?r._set(i):r.value=S(i?.valueOf()):t[e]=f(S(i?.valueOf()))}return r&&(w=null),!0}});for(let e in t)i[e]=o(e);function o(r){if(t.hasOwnProperty(r)){const e=Object.getOwnPropertyDescriptor(t,r);return e?.get?((i[r]=(o=e.get.bind(n),new p(o)))._set=e.set?.bind(n),i[r]):i[r]=e.value?.peek?e.value:f(S(e.value))}var o;return e?e[r]:A.hasOwnProperty(r)?A[r]:void 0}return k.set(n,i),n}var x=Promise.prototype.then.bind(Promise.resolve()),O=new WeakMap,N=class extends Map{#t=new FinalizationRegistry((t=>super.delete(t)));get size(){return[...this].length}constructor(t=[]){super();for(const[e,r]of t)this.set(e,r)}get(t){return super.get(t)?.deref()}set(t,e){let r=super.get(t);return r&&this.#t.unregister(r),r=(t=>O.get(t)||(t=>{const e=new WeakRef(t);return O.set(t,e),e})(t))(e),this.#t.register(e,t,r),super.set(t,r)}},E={},j={};E.if=(t,e)=>{let r=document.createTextNode(""),i=[U(t,e,":if")],n=[t],o=t;for(;(o=t.nextElementSibling)&&o.hasAttribute(":else");)o.removeAttribute(":else"),(e=o.getAttribute(":if"))?(o.removeAttribute(":if"),o.remove(),n.push(o),i.push(U(t,e,":else :if"))):(o.remove(),n.push(o),i.push((()=>1)));return t.replaceWith(o=r),t=>{let e=i.findIndex((e=>e(t)));n[e]!=o&&((o[W]||o).replaceWith(o=n[e]||r),R(o,t))}};var W=Symbol(":each");E.each=(t,e)=>{let r=function(t){let e=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,r=t.match(/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/);if(!r)return;let i=r[2].trim(),n=r[1].replace(/^\s*\(|\)\s*$/g,"").trim(),o=n.match(e);return o?[n.replace(e,"").trim(),o[1].trim(),i]:[n,"",i]}(e);if(!r)return F(new Error,t,e,":each");const i=t[W]=document.createTextNode("");t.replaceWith(i);const n=U(t,r[2],":each"),o=t.getAttribute(":key"),s=o?U(null,o,":each"):null;t.removeAttribute(":key");const a=t.getAttribute(":ref"),l=new N,u=new N;let f=[];return o=>{let c=n(o);c?"number"==typeof c?c=Array.from({length:c},((t,e)=>[e+1,e])):Array.isArray(c)?c=c.map(((t,e)=>[e+1,t])):"object"==typeof c?c=Object.entries(c):F(Error("Bad list value"),t,e,":each"):c=[];let h=[],v=[];for(let[e,i]of c){let n,f,c=s?.({[r[0]]:i,[r[1]]:e});null==c?n=t.cloneNode(!0):(n=u.get(c))||u.set(c,n=t.cloneNode(!0)),h.push(n),null!=c&&(f=l.get(c))?f[r[0]]=i:(f=S({[r[0]]:i,[a||""]:null,[r[1]]:e},o),null!=c&&l.set(c,f)),v.push(f)}!function(t,e,r,i){const n=new Map,o=new Map;let s,a;for(s=0;s<e.length;s++)n.set(e[s],s);for(s=0;s<r.length;s++)o.set(r[s],s);for(s=a=0;s!==e.length||a!==r.length;){var l=e[s],u=r[a];if(null===l)s++;else if(r.length<=a)t.removeChild(e[s]),s++;else if(e.length<=s)t.insertBefore(u,e[s]||i),a++;else if(l===u)s++,a++;else{var f=o.get(l),c=n.get(u);void 0===f?(t.removeChild(e[s]),s++):void 0===c?(t.insertBefore(u,e[s]||i),a++):(t.insertBefore(e[c],e[s]||i),e[c]=null,c>s+1&&s++,a++)}}}(i.parentNode,f,h,i),f=h;for(let t=0;t<h.length;t++)R(h[t],v[t])}},E.with=(t,e,r)=>{R(t,S(U(t,e,":with")(r),r))},E.ref=(t,e,r)=>{r[e]=t},j.render=(t,e,r)=>{let i=U(t,e,":render")(r);i||F(new Error("Template not found"),t,e,":render");let n=i.content.cloneNode(!0);t.replaceChildren(n),R(t,r)},j.id=(t,e)=>{let r=U(t,e,":id");return e=>{return i=r(e),t.id=i||0===i?i:"";var i}},j.class=(t,e)=>{let r=U(t,e,":class"),i=t.getAttribute("class");return e=>{let n=r(e),o=[i];n&&("string"==typeof n?o.push(n):Array.isArray(n)?o.push(...n):o.push(...Object.entries(n).map((([t,e])=>e?t:"")))),(o=o.filter(Boolean).join(" "))?t.setAttribute("class",o):t.removeAttribute("class")}},j.style=(t,e)=>{let r=U(t,e,":style"),i=t.getAttribute("style")||"";return i.endsWith(";")||(i+="; "),e=>{let n=r(e);if("string"==typeof n)t.setAttribute("style",i+n);else{t.setAttribute("style",i);for(let e in n)t.style.setProperty(e,n[e])}}},j.text=(t,e)=>{let r=U(t,e,":text");return e=>{let i=r(e);t.textContent=null==i?"":i}},j[""]=(t,e)=>{let r=U(t,e,":");if(r)return e=>{let i=r(e);for(let e in i)M(t,e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(t=>"-"+t.toLowerCase())),i[e])}},j.value=(t,e)=>{let r,i,n=U(t,e,":value"),o="text"===t.type||""===t.type?e=>t.setAttribute("value",t.value=null==e?"":e):"TEXTAREA"===t.tagName||"text"===t.type||""===t.type?e=>(r=t.selectionStart,i=t.selectionEnd,t.setAttribute("value",t.value=null==e?"":e),r&&t.setSelectionRange(r,i)):"checkbox"===t.type?e=>(t.value=e?"on":"",M(t,"checked",e)):"select-one"===t.type?e=>{for(let e in t.options)e.removeAttribute("selected");t.value=e,t.selectedOptions[0]?.setAttribute("selected","")}:e=>t.value=e;return t=>o(n(t))};var C=(t,e,r,i)=>{let n=i.startsWith("on")&&i.slice(2),o=U(t,e,":"+i);if(o)return n?e=>{let r=o(e)||(()=>{});return $(t,n,r)}:e=>M(t,i,o(e))},$=(t,e,r)=>{if(!r)return;const i={evt:"",target:t,test:()=>!0};i.evt=(e.startsWith("on")?e.slice(2):e).replace(/\.(\w+)?-?([-\w]+)?/g,((t,e,r="")=>(i.test=T[e]?.(i,...r.split("-"))||i.test,"")));const{evt:n,target:o,test:s,defer:a,stop:l,prevent:u,...f}=i;a&&(r=a(r));const c=t=>s(t)&&(l&&t.stopPropagation(),u&&t.preventDefault(),r.call(o,t));return o.addEventListener(n,c,f),()=>o.removeEventListener(n,c,f)},T={prevent(t){t.prevent=!0},stop(t){t.stop=!0},once(t){t.once=!0},passive(t){t.passive=!0},capture(t){t.capture=!0},window(t){t.target=window},document(t){t.target=document},throttle(t,e){t.defer=t=>B(t,e?Number(e)||0:108)},debounce(t,e){t.defer=t=>D(t,e?Number(e)||0:108)},outside:t=>e=>{let r=t.target;return!(r.contains(e.target)||!1===e.target.isConnected||r.offsetWidth<1&&r.offsetHeight<1)},self:t=>e=>e.target===t.target,ctrl:(t,...e)=>t=>P.ctrl(t)&&e.every((e=>P[e]?P[e](t):t.key===e)),shift:(t,...e)=>t=>P.shift(t)&&e.every((e=>P[e]?P[e](t):t.key===e)),alt:(t,...e)=>t=>P.alt(t)&&e.every((e=>P[e]?P[e](t):t.key===e)),meta:(t,...e)=>t=>P.meta(t)&&e.every((e=>P[e]?P[e](t):t.key===e)),arrow:t=>P.arrow,enter:t=>P.enter,escape:t=>P.escape,tab:t=>P.tab,space:t=>P.space,backspace:t=>P.backspace,delete:t=>P.delete,digit:t=>P.digit,letter:t=>P.letter,character:t=>P.character},P={ctrl:t=>t.ctrlKey||"Control"===t.key||"Ctrl"===t.key,shift:t=>t.shiftKey||"Shift"===t.key,alt:t=>t.altKey||"Alt"===t.key,meta:t=>t.metaKey||"Meta"===t.key||"Command"===t.key,arrow:t=>t.key.startsWith("Arrow"),enter:t=>"Enter"===t.key,escape:t=>t.key.startsWith("Esc"),tab:t=>"Tab"===t.key,space:t=>" "===t.key||"Space"===t.key||" "===t.key,backspace:t=>"Backspace"===t.key,delete:t=>"Delete"===t.key,digit:t=>/^\d$/.test(t.key),letter:t=>/^[a-zA-Z]$/.test(t.key),character:t=>/^\S$/.test(t.key)},B=(t,e)=>{let r,i,n=o=>{r=!0,setTimeout((()=>{if(r=!1,i)return i=!1,n(o),t(o)}),e)};return e=>r?i=!0:(n(e),t(e))},D=(t,e)=>{let r;return i=>{clearTimeout(r),r=setTimeout((()=>{r=null,t(i)}),e)}},M=(t,e,r)=>{null==r||!1===r?t.removeAttribute(e):t.setAttribute(e,!0===r?"":"number"==typeof r||"string"==typeof r?r:"")},_={};function U(t,e,r){let i=_[e];if(!i)try{i=_[e]=new Function("__scope",`with (__scope) { return ${e.trim()} };`)}catch(i){return F(i,t,e,r)}return n=>{let o;try{o=i.call(t,n)}catch(i){return F(i,t,e,r)}return o}}function F(t,e,r,i){Object.assign(t,{element:e,expression:r}),console.warn(`∴ ${t.message}\n\n${i}=${r?`"${r}"\n\n`:""}`,e),x((()=>{throw t}),0)}R.globals=A;var K=new WeakMap;function R(t,e){if(!t.children)return;if(K.has(t))return function(t){if(o>0)return t();o++;try{return t()}finally{r()}}((()=>Object.assign(K.get(t),e)));const i=S(e||{}),n=[],s=(t,e=t.parentNode)=>{for(let r in E){let o=":"+r;if(t.hasAttribute?.(o)){let s=t.getAttribute(o);if(t.removeAttribute(o),n.push(E[r](t,s,i,r)),K.has(t))return;if(t.parentNode!==e)return!1}}if(t.attributes)for(let e=0;e<t.attributes.length;){let r=t.attributes[e],o=r.name[0];if(":"===o||"@"===o){t.removeAttribute(r.name);let e="@"===o?`${r.value.includes("await")?"async":""} event=>{${r.value}}`:r.value,s=r.name.slice(1).split(o);for(let r of s){"@"===o&&(r="on"+r);let s=j[r]||C;n.push(s(t,e,i,r))}}else e++}for(let e,r=0;e=t.children[r];r++)!1===s(e,t)&&r--};s(t);for(let t of n)if(t){let e;b((()=>{"function"==typeof e&&e(),e=t(i)}))}return K.set(t,i),i}var z=R;document.currentScript&&R(document.documentElement);export{z as default};
|
|
1
|
+
function t(){throw new Error("Cycle detected")}var e=Symbol.for("preact-signals");function r(){if(l>1)l--;else{for(var t,e=!1;void 0!==a;){var r=a;for(a=void 0,u++;void 0!==r;){var i=r.o;if(r.o=void 0,r.f&=-3,!(8&r.f)&&p(r))try{r.c()}catch(r){e||(t=r,e=!0)}r=i}}if(u=0,l--,e)throw t}}function i(t){if(l>0)return t();l++;try{return t()}finally{r()}}var n=void 0,o=0;function s(t){if(o>0)return t();var e=n;n=void 0,o++;try{return t()}finally{o--,n=e}}var a=void 0,l=0,u=0,f=0;function c(t){if(void 0!==n){var e=t.n;if(void 0===e||e.t!==n)return e={i:0,S:t,p:n.s,n:void 0,t:n,e:void 0,x:void 0,r:e},void 0!==n.s&&(n.s.n=e),n.s=e,t.n=e,32&n.f&&t.S(e),e;if(-1===e.i)return e.i=0,void 0!==e.n&&(e.n.p=e.p,void 0!==e.p&&(e.p.n=e.n),e.p=n.s,e.n=void 0,n.s.n=e,n.s=e),e}}function h(t){this.v=t,this.i=0,this.n=void 0,this.t=void 0}function v(t){return new h(t)}function p(t){for(var e=t.s;void 0!==e;e=e.n)if(e.S.i!==e.i||!e.S.h()||e.S.i!==e.i)return!0;return!1}function d(t){for(var e=t.s;void 0!==e;e=e.n){var r=e.S.n;if(void 0!==r&&(e.r=r),e.S.n=e,e.i=-1,void 0===e.n){t.s=e;break}}}function y(t){for(var e=t.s,r=void 0;void 0!==e;){var i=e.p;-1===e.i?(e.S.U(e),void 0!==i&&(i.n=e.n),void 0!==e.n&&(e.n.p=i)):r=e,e.S.n=e.r,void 0!==e.r&&(e.r=void 0),e=i}t.s=r}function m(t){h.call(this,void 0),this.x=t,this.s=void 0,this.g=f-1,this.f=4}function b(t){var e=t.u;if(t.u=void 0,"function"==typeof e){l++;var i=n;n=void 0;try{e()}catch(e){throw t.f&=-2,t.f|=8,g(t),e}finally{n=i,r()}}}function g(t){for(var e=t.s;void 0!==e;e=e.n)e.S.U(e);t.x=void 0,t.s=void 0,b(t)}function A(t){if(n!==this)throw new Error("Out-of-order effect");y(this),n=t,this.f&=-2,8&this.f&&g(this),r()}function w(t){this.x=t,this.u=void 0,this.s=void 0,this.o=void 0,this.f=32}function S(t){var e=new w(t);try{e.c()}catch(t){throw e.d(),t}return e.d.bind(e)}h.prototype.brand=e,h.prototype.h=function(){return!0},h.prototype.S=function(t){this.t!==t&&void 0===t.e&&(t.x=this.t,void 0!==this.t&&(this.t.e=t),this.t=t)},h.prototype.U=function(t){if(void 0!==this.t){var e=t.e,r=t.x;void 0!==e&&(e.x=r,t.e=void 0),void 0!==r&&(r.e=e,t.x=void 0),t===this.t&&(this.t=r)}},h.prototype.subscribe=function(t){var e=this;return S((function(){var r=e.value,i=32&this.f;this.f&=-33;try{t(r)}finally{this.f|=i}}))},h.prototype.valueOf=function(){return this.value},h.prototype.toString=function(){return this.value+""},h.prototype.toJSON=function(){return this.value},h.prototype.peek=function(){return this.v},Object.defineProperty(h.prototype,"value",{get:function(){var t=c(this);return void 0!==t&&(t.i=this.i),this.v},set:function(e){if(n instanceof m&&function(){throw new Error("Computed cannot have side-effects")}(),e!==this.v){u>100&&t(),this.v=e,this.i++,f++,l++;try{for(var i=this.t;void 0!==i;i=i.x)i.t.N()}finally{r()}}}}),(m.prototype=new h).h=function(){if(this.f&=-3,1&this.f)return!1;if(32==(36&this.f))return!0;if(this.f&=-5,this.g===f)return!0;if(this.g=f,this.f|=1,this.i>0&&!p(this))return this.f&=-2,!0;var t=n;try{d(this),n=this;var e=this.x();(16&this.f||this.v!==e||0===this.i)&&(this.v=e,this.f&=-17,this.i++)}catch(t){this.v=t,this.f|=16,this.i++}return n=t,y(this),this.f&=-2,!0},m.prototype.S=function(t){if(void 0===this.t){this.f|=36;for(var e=this.s;void 0!==e;e=e.n)e.S.S(e)}h.prototype.S.call(this,t)},m.prototype.U=function(t){if(void 0!==this.t&&(h.prototype.U.call(this,t),void 0===this.t)){this.f&=-33;for(var e=this.s;void 0!==e;e=e.n)e.S.U(e)}},m.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var t=this.t;void 0!==t;t=t.x)t.t.N()}},m.prototype.peek=function(){if(this.h()||t(),16&this.f)throw this.v;return this.v},Object.defineProperty(m.prototype,"value",{get:function(){1&this.f&&t();var e=c(this);if(this.h(),void 0!==e&&(e.i=this.i),16&this.f)throw this.v;return this.v}}),w.prototype.c=function(){var t=this.S();try{if(8&this.f)return;if(void 0===this.x)return;var e=this.x();"function"==typeof e&&(this.u=e)}finally{t()}},w.prototype.S=function(){1&this.f&&t(),this.f|=1,this.f&=-9,b(this),d(this),l++;var e=n;return n=this,A.bind(this,e)},w.prototype.N=function(){2&this.f||(this.f|=2,this.o=a,a=this)},w.prototype.d=function(){this.f|=8,1&this.f||g(this)};var k,x=Symbol.dispose||=Symbol("dispose"),O=Symbol("signals"),N={Array:Array,Object:Object,Number:Number,String:String,Boolean:Boolean,Date:Date,console:console,window:window,document:document,history:history,navigator:navigator,location:location,screen:screen,localStorage:localStorage,sessionStorage:sessionStorage,alert:alert,prompt:prompt,confirm:confirm,fetch:fetch,performance:performance,setTimeout:setTimeout,setInterval:setInterval,requestAnimationFrame:requestAnimationFrame};function E(t,e){if(t?.constructor!==Object&&!Array.isArray(t))return t;if(t[O]&&!e)return t;const r=t[O],n=Array.isArray(t)&&v((r||t).length),o=e?Object.create((e=E(e))[O]):Array.isArray(t)?[]:{},a=o.constructor.prototype,l=new Proxy(t,{has:()=>!0,get(t,r){if(n){if("length"===r)return a[k]?n.peek():n.value;k=r}if(a[r])return a[r];if(r===O)return o;const i=o[r]||u(r);return i?i.value:e?e[r]:N[r]},set(t,e,r){if(n&&"length"===e)return i((()=>{for(let t=r,e=o.length;t<e;t++)delete l[t];n.value=o.length=t.length=r})),!0;const a=o[e]||u(e)||v(),f=a.peek();return r===f||(a._set?a._set(r):Array.isArray(r)&&Array.isArray(f)?s((()=>i((()=>{let i=0,n=r.length,o=t[e];for(;i<n;i++)f[i]=o[i]=r[i];f.length=n})))):a.value=E(t[e]=r)),n&&e>=n.peek()&&(n.value=o.length=t.length=Number(e)+1),!0},deleteProperty:(t,e)=>(o[e]?._del?.(),delete o[e],delete t[e],!0)});for(let e in t)o[e]=r?.[e]??u(e);function u(e){if(t.hasOwnProperty(e)){const i=Object.getOwnPropertyDescriptor(t,e);return i?.get?((o[e]=(r=i.get.bind(l),new m(r)))._set=i.set?.bind(l),o[e]):o[e]=i.value?.peek?i.value:v(E(i.value))}var r}return l}var j=Promise.prototype.then.bind(Promise.resolve()),_={},$={};_.if=(t,e,r)=>{let i=document.createTextNode(""),n=[I(t,e,":if")],o=[t],s=t;for(;(s=t.nextElementSibling)&&s.hasAttribute(":else");)s.removeAttribute(":else"),(e=s.getAttribute(":if"))?(s.removeAttribute(":if"),s.remove(),o.push(s),n.push(I(t,e,":else :if"))):(s.remove(),o.push(s),n.push((()=>1)));t.replaceWith(s=i);const a=S((()=>{let t=n.findIndex((t=>t(r)));o[t]!=s&&((s[P]||s).replaceWith(s=o[t]||i),M(s,r))}));return()=>{for(const t of o)t[x]?.();a()}};var P=Symbol(":each");_.each=(t,e,r)=>{let n=function(t){let e=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,r=t.match(/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/);if(!r)return;let i=r[2].trim(),n=r[1].replace(/^\s*\(|\)\s*$/g,"").trim(),o=n.match(e);return o?[n.replace(e,"").trim(),o[1].trim(),i]:[n,"",i]}(e);if(!n)return L(new Error,t,e,":each");const[o,a,l]=n,u=t[P]=document.createTextNode("");t.replaceWith(u);const f=I(t,l,":each");let c,h,v=0;return S((()=>{let n=f(r);return n?"number"==typeof n?n=Array.from({length:n},((t,e)=>e)):Array.isArray(n)||("object"==typeof n?(h=Object.keys(n),n=Object.values(n)):L(Error("Bad items value"),t,e,":each")):n=[],s((()=>i((()=>{if(c?.[O][0]?.peek){let t=n.length,e=0;for(;e<t;e++)c[e]=n[e];c.length=t}else{for(let t=0,e=c?.[O];t<v;t++)e[t]?._del();c=n,c[O]||={}}})))),S((()=>{let e=n.length;v!==e&&s((()=>i((()=>{const i=c[O];for(let n=v;n<e;n++){c[n];const e=t.cloneNode(!0),s=E({[o]:i[n]??c[n],[a]:h?.[n]??n},r);u.before(e),M(e,s);const{_del:l}=i[n]||={};i[n]._del=()=>{delete i[n],l?.(),e[x](),e.remove(),delete c[n]}}v=e}))))}))})),()=>i((()=>{for(let t of c[O])t?._del();c.length=0}))},_.with=(t,e,r)=>(M(t,E(I(t,e,":with")(r),r)),t[x]),_.ref=(t,e,r)=>{r[e]=t},$.render=(t,e,r)=>{let i=I(t,e,":render")(r);i||L(new Error("Template not found"),t,e,":render");let n=i.content.cloneNode(!0);return t.replaceChildren(n),M(t,r),t[x]},$.id=(t,e,r)=>{let i=I(t,e,":id");return S((()=>{return e=i(r),t.id=e||0===e?e:"";var e}))},$.class=(t,e,r)=>{let i=I(t,e,":class"),n=t.getAttribute("class");return S((()=>{let e=i(r),o=[n];e&&("string"==typeof e?o.push(e):Array.isArray(e)?o.push(...e):o.push(...Object.entries(e).map((([t,e])=>e?t:"")))),(o=o.filter(Boolean).join(" "))?t.setAttribute("class",o):t.removeAttribute("class")}))},$.style=(t,e,r)=>{let i=I(t,e,":style"),n=t.getAttribute("style")||"";return n.endsWith(";")||(n+="; "),S((()=>{let e=i(r);"string"==typeof e?t.setAttribute("style",n+e):s((()=>{t.setAttribute("style",n);for(let r in e)"symbol"!=typeof e[r]&&t.style.setProperty(r,e[r])}))}))},$.text=(t,e,r)=>{let i=I(t,e,":text");return S((()=>{let e=i(r);t.textContent=null==e?"":e}))},$[""]=(t,e,r)=>{let i=I(t,e,":");if(i)return S((()=>{let e=i(r);for(let r in e)K(t,r.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(t=>"-"+t.toLowerCase())),e[r])}))},$.value=(t,e,r)=>{let i,n,o=I(t,e,":value"),s="text"===t.type||""===t.type?e=>t.setAttribute("value",t.value=null==e?"":e):"TEXTAREA"===t.tagName||"text"===t.type||""===t.type?e=>(i=t.selectionStart,n=t.selectionEnd,t.setAttribute("value",t.value=null==e?"":e),i&&t.setSelectionRange(i,n)):"checkbox"===t.type?e=>(t.value=e?"on":"",K(t,"checked",e)):"select-one"===t.type?e=>{for(let e in t.options)e.removeAttribute("selected");t.value=e,t.selectedOptions[0]?.setAttribute("selected","")}:e=>t.value=e;return S((()=>{s(o(r))}))};var T=(t,e,r,i)=>{let n=i.startsWith("on")&&i.slice(2),o=I(t,e,":"+i);if(o){if(n){let e,i=S((()=>{e&&(e(),e=null);let i=o(r);i&&(e=C(t,n,i))}));return()=>(e?.(),i())}return S((()=>{K(t,i,o(r))}))}},C=(t,e,r)=>{if(!r)return;const i={evt:"",target:t,test:()=>!0};i.evt=(e.startsWith("on")?e.slice(2):e).replace(/\.(\w+)?-?([-\w]+)?/g,((t,e,r="")=>(i.test=W[e]?.(i,...r.split("-"))||i.test,"")));const{evt:n,target:o,test:s,defer:a,stop:l,prevent:u,...f}=i;a&&(r=a(r));const c=t=>s(t)&&(l&&t.stopPropagation(),u&&t.preventDefault(),r.call(o,t));return o.addEventListener(n,c,f),()=>o.removeEventListener(n,c,f)},W={prevent(t){t.prevent=!0},stop(t){t.stop=!0},once(t){t.once=!0},passive(t){t.passive=!0},capture(t){t.capture=!0},window(t){t.target=window},document(t){t.target=document},throttle(t,e){t.defer=t=>U(t,e?Number(e)||0:108)},debounce(t,e){t.defer=t=>B(t,e?Number(e)||0:108)},outside:t=>e=>{let r=t.target;return!(r.contains(e.target)||!1===e.target.isConnected||r.offsetWidth<1&&r.offsetHeight<1)},self:t=>e=>e.target===t.target,ctrl:(t,...e)=>t=>D.ctrl(t)&&e.every((e=>D[e]?D[e](t):t.key===e)),shift:(t,...e)=>t=>D.shift(t)&&e.every((e=>D[e]?D[e](t):t.key===e)),alt:(t,...e)=>t=>D.alt(t)&&e.every((e=>D[e]?D[e](t):t.key===e)),meta:(t,...e)=>t=>D.meta(t)&&e.every((e=>D[e]?D[e](t):t.key===e)),arrow:t=>D.arrow,enter:t=>D.enter,escape:t=>D.escape,tab:t=>D.tab,space:t=>D.space,backspace:t=>D.backspace,delete:t=>D.delete,digit:t=>D.digit,letter:t=>D.letter,character:t=>D.character},D={ctrl:t=>t.ctrlKey||"Control"===t.key||"Ctrl"===t.key,shift:t=>t.shiftKey||"Shift"===t.key,alt:t=>t.altKey||"Alt"===t.key,meta:t=>t.metaKey||"Meta"===t.key||"Command"===t.key,arrow:t=>t.key.startsWith("Arrow"),enter:t=>"Enter"===t.key,escape:t=>t.key.startsWith("Esc"),tab:t=>"Tab"===t.key,space:t=>" "===t.key||"Space"===t.key||" "===t.key,backspace:t=>"Backspace"===t.key,delete:t=>"Delete"===t.key,digit:t=>/^\d$/.test(t.key),letter:t=>/^[a-zA-Z]$/.test(t.key),character:t=>/^\S$/.test(t.key)},U=(t,e)=>{let r,i,n=o=>{r=!0,setTimeout((()=>{if(r=!1,i)return i=!1,n(o),t(o)}),e)};return e=>r?i=!0:(n(e),t(e))},B=(t,e)=>{let r;return i=>{clearTimeout(r),r=setTimeout((()=>{r=null,t(i)}),e)}},K=(t,e,r)=>{null==r||!1===r?t.removeAttribute(e):t.setAttribute(e,!0===r?"":"number"==typeof r||"string"==typeof r?r:"")},F={};function I(t,e,r){let i=F[e];if(!i)try{i=F[e]=new Function("__scope",`with (__scope) { let __; return ${e.trim()} };`)}catch(i){return L(i,t,e,r)}return n=>{let o;try{o=i.call(t,n)}catch(i){return L(i,t,e,r)}return o}}function L(t,e,r,i){Object.assign(t,{element:e,expression:r}),console.warn(`∴ ${t.message}\n\n${i}=${r?`"${r}"\n\n`:""}`,e),j((()=>{throw t}),0)}M.globals=N;var q=new WeakMap;function M(t,e){if(!t.children)return;if(q.has(t))return i((()=>Object.assign(q.get(t),e)));const r=E(e||{}),n=[],o=(t,e=t.parentNode)=>{for(let i in _){let o=":"+i;if(t.hasAttribute?.(o)){let s=t.getAttribute(o);if(t.removeAttribute(o),n.push(_[i](t,s,r,i)),q.has(t))return;if(t.parentNode!==e)return!1}}if(t.attributes)for(let e=0;e<t.attributes.length;){let i=t.attributes[e],o=i.name[0];if(":"===o||"@"===o){t.removeAttribute(i.name);let e="@"===o?`${i.value.includes("await")?"async":""} event=>{${i.value}}`:i.value,s=i.name.slice(1).split(o);for(let i of s){"@"===o&&(i="on"+i);let s=$[i]||T;n.push(s(t,e,r,i))}}else e++}for(let e,r=0;e=t.children[r];r++)!1===o(e,t)&&r--};return o(t),q.has(t)||(q.set(t,r),n.length&&Object.defineProperty(t,x,{value:()=>{for(;n.length;)n.shift()?.();q.delete(t)}})),r}var R=M;document.currentScript&&M(document.documentElement);export{R as default};
|