sprae 8.1.2 → 9.0.0

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