@unbndl/store 1.0.1 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/store/src/fromStore.d.ts +1 -0
- package/dist/store/src/index.d.ts +2 -0
- package/dist/store/src/store.d.ts +18 -0
- package/dist/store.d.ts +2 -0
- package/dist/store.js +186 -152
- package/dist/store.umd.cjs +1 -1
- package/package.json +9 -2
- package/src/fromStore.ts +2 -2
- package/vite.config.js +10 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fromStore<M extends object>(target: HTMLElement, contextLabel?: string): import('@unbndl/view').Source<M>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Context } from '@unbndl/html';
|
|
2
|
+
import { Auth } from '@unbndl/auth';
|
|
3
|
+
import { Message, Provider, Service } from '@unbndl/service';
|
|
4
|
+
declare const STORE_CONTEXT_DEFAULT = "context:store";
|
|
5
|
+
type UpdateFn<M extends object, Msg extends Message.Base, Cmd extends Message.Base> = (model: M, message: Msg | Cmd) => M | Message.Async<M, Cmd>;
|
|
6
|
+
type AuthorizedUpdateFn<M extends object, Msg extends Message.Base, Cmd extends Message.Base> = (model: M, message: Msg | Cmd, auth: Auth.Model) => M | Message.Async<M, Cmd>;
|
|
7
|
+
declare class StoreService<M extends object, Msg extends Message.Base, Cmd extends Message.Base> extends Service<Msg | Cmd, M> {
|
|
8
|
+
static EVENT_TYPE: string;
|
|
9
|
+
constructor(context: Context<M>, update: UpdateFn<M, Msg, Cmd>);
|
|
10
|
+
}
|
|
11
|
+
declare class StoreProvider<M extends object, Msg extends Message.Base, Cmd extends Message.Base> extends Provider<M> {
|
|
12
|
+
viewModel: import('@unbndl/view').ViewModel<Auth.Model>;
|
|
13
|
+
_updateFn: AuthorizedUpdateFn<M, Msg, Cmd>;
|
|
14
|
+
constructor(updateFn: AuthorizedUpdateFn<M, Msg, Cmd>, init: M);
|
|
15
|
+
connectedCallback(): void;
|
|
16
|
+
}
|
|
17
|
+
declare function dispatch<Msg extends Message.Base>(target: HTMLElement, message: Msg): void;
|
|
18
|
+
export { STORE_CONTEXT_DEFAULT as CONTEXT_DEFAULT, StoreProvider as Provider, StoreService as Service, dispatch };
|
package/dist/store.d.ts
ADDED
package/dist/store.js
CHANGED
|
@@ -85,7 +85,7 @@ var ee = u(), te = class extends CustomEvent {
|
|
|
85
85
|
};
|
|
86
86
|
function d(e, ...t) {
|
|
87
87
|
let n = { execute() {
|
|
88
|
-
e(...t.map((e) => e
|
|
88
|
+
console.log("▶️ Executing created effect:", t, e), e(...t.map((e) => e.open(n))), t.forEach((e) => e.close());
|
|
89
89
|
} };
|
|
90
90
|
n.execute();
|
|
91
91
|
}
|
|
@@ -132,7 +132,7 @@ var f = class e {
|
|
|
132
132
|
n && f.scheduler.subscribe(t, e, n);
|
|
133
133
|
}
|
|
134
134
|
runEffects(e, t) {
|
|
135
|
-
if (f.scheduler.scheduleEffects(t, e), this.host) {
|
|
135
|
+
if (console.log("⚙️ Running effects for signal", e, t), f.scheduler.scheduleEffects(t, e), this.host) {
|
|
136
136
|
let n = new te(this.eventType, {
|
|
137
137
|
property: e,
|
|
138
138
|
value: t[e]
|
|
@@ -157,7 +157,7 @@ var f = class e {
|
|
|
157
157
|
this.proxy[e] = t;
|
|
158
158
|
}
|
|
159
159
|
toObject() {
|
|
160
|
-
return this.
|
|
160
|
+
return this.proxy;
|
|
161
161
|
}
|
|
162
162
|
update(e) {
|
|
163
163
|
Object.assign(this.proxy, e);
|
|
@@ -201,7 +201,7 @@ function m(e) {
|
|
|
201
201
|
default: return !1;
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
|
-
var
|
|
204
|
+
var h = class {
|
|
205
205
|
constructor(e, ...t) {
|
|
206
206
|
this.effectFn = () => e(...t);
|
|
207
207
|
}
|
|
@@ -209,17 +209,17 @@ var ie = class {
|
|
|
209
209
|
this.effectFn();
|
|
210
210
|
}
|
|
211
211
|
};
|
|
212
|
-
function
|
|
212
|
+
function g(e, t) {
|
|
213
213
|
return Object.assign(e, { render: t }), e;
|
|
214
214
|
}
|
|
215
|
-
function
|
|
215
|
+
function _(e, t, ...n) {
|
|
216
216
|
let r = e.cloneNode(!0);
|
|
217
217
|
return Array.from(t.entries()).forEach(([e, t]) => {
|
|
218
218
|
let i = r.querySelector(`[data-${e}]`);
|
|
219
219
|
i && t.forEach((e) => e(i, r, ...n));
|
|
220
220
|
}), r;
|
|
221
221
|
}
|
|
222
|
-
var
|
|
222
|
+
var v = class e {
|
|
223
223
|
static {
|
|
224
224
|
this.parser = new DOMParser();
|
|
225
225
|
}
|
|
@@ -255,7 +255,7 @@ var se = class e {
|
|
|
255
255
|
}
|
|
256
256
|
});
|
|
257
257
|
}
|
|
258
|
-
return
|
|
258
|
+
return g(s, (...e) => _(s, c, ...e));
|
|
259
259
|
}
|
|
260
260
|
static {
|
|
261
261
|
this.OPEN_RE = /<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/;
|
|
@@ -294,35 +294,35 @@ var se = class e {
|
|
|
294
294
|
let n = this.plugins;
|
|
295
295
|
for (let r = 0; r < n.length; r++) {
|
|
296
296
|
let i = n[r];
|
|
297
|
-
if (e.kind === i.place &&
|
|
297
|
+
if (e.kind === i.place && y(t, i)) return i.mutator(e, t);
|
|
298
298
|
}
|
|
299
299
|
}
|
|
300
300
|
};
|
|
301
|
-
function
|
|
301
|
+
function y(e, t) {
|
|
302
302
|
return typeof t.types == "function" ? t.types(e, t) : t.types.includes(typeof e);
|
|
303
303
|
}
|
|
304
|
-
var
|
|
304
|
+
var b = class {
|
|
305
305
|
constructor(e) {
|
|
306
306
|
this.place = e;
|
|
307
307
|
}
|
|
308
308
|
apply(e, t) {
|
|
309
309
|
throw "abstract method 'apply' called";
|
|
310
310
|
}
|
|
311
|
-
},
|
|
311
|
+
}, x = class extends b {
|
|
312
312
|
constructor(e, t) {
|
|
313
313
|
super(e), this.content = t;
|
|
314
314
|
}
|
|
315
315
|
apply(e, t) {
|
|
316
316
|
(e.parentNode || t).replaceChild(this.content, e);
|
|
317
317
|
}
|
|
318
|
-
},
|
|
318
|
+
}, ie = class extends b {
|
|
319
319
|
constructor(e, t) {
|
|
320
320
|
super(e), this.text = t, this.name = e.attrName;
|
|
321
321
|
}
|
|
322
322
|
apply(e) {
|
|
323
323
|
e.setAttribute(this.name, this.text);
|
|
324
324
|
}
|
|
325
|
-
},
|
|
325
|
+
}, ae = class extends b {
|
|
326
326
|
constructor(e, t) {
|
|
327
327
|
super(e), this.fn = t;
|
|
328
328
|
}
|
|
@@ -331,12 +331,12 @@ var h = class {
|
|
|
331
331
|
return (e, t, ...r) => {
|
|
332
332
|
let i = new Comment(` <<< ${n} `), a = new Comment(` >>> ${n} `), o = new DocumentFragment();
|
|
333
333
|
o.replaceChildren(i, a), (e.parentNode || t).replaceChild(o, e), d((...e) => {
|
|
334
|
-
|
|
334
|
+
oe(this.fn(...e), i, a);
|
|
335
335
|
}, ...r);
|
|
336
336
|
};
|
|
337
337
|
}
|
|
338
338
|
};
|
|
339
|
-
function
|
|
339
|
+
function oe(e, t, n) {
|
|
340
340
|
let r = t.parentNode;
|
|
341
341
|
if (!r) throw Error("No parent for placeholder");
|
|
342
342
|
let i = (e) => {
|
|
@@ -345,26 +345,24 @@ function v(e, t, n) {
|
|
|
345
345
|
return t.replaceChildren(...n), t;
|
|
346
346
|
} else if (e instanceof Node) return e;
|
|
347
347
|
else return new Text(e?.toString() || "");
|
|
348
|
-
}, a = i(e);
|
|
349
|
-
console.log("📸 Rendered for view:", e, a);
|
|
350
|
-
let o = t.nextSibling;
|
|
348
|
+
}, a = i(e), o = t.nextSibling;
|
|
351
349
|
for (; o && o !== n;) {
|
|
352
350
|
let e = o;
|
|
353
351
|
o = o.nextSibling, r.removeChild(e);
|
|
354
352
|
}
|
|
355
353
|
a && r.insertBefore(a, n);
|
|
356
354
|
}
|
|
357
|
-
var
|
|
355
|
+
var se = class extends b {
|
|
358
356
|
constructor(e, t) {
|
|
359
357
|
super(e), this.fn = t, this.name = e.attrName;
|
|
360
358
|
}
|
|
361
359
|
apply(e, t) {
|
|
362
360
|
return (e, t, ...n) => d((...t) => {
|
|
363
|
-
|
|
361
|
+
ce(this.fn(...t), e, this.name);
|
|
364
362
|
}, ...n);
|
|
365
363
|
}
|
|
366
364
|
};
|
|
367
|
-
function
|
|
365
|
+
function ce(e, t, n) {
|
|
368
366
|
let r = n.match(/^([.$])(.+)$/);
|
|
369
367
|
if (r) {
|
|
370
368
|
let [n, i, a] = r;
|
|
@@ -388,7 +386,7 @@ function b(e, t, n) {
|
|
|
388
386
|
default: t.setAttribute(n, e?.toString());
|
|
389
387
|
}
|
|
390
388
|
}
|
|
391
|
-
var
|
|
389
|
+
var le = class extends b {
|
|
392
390
|
constructor(e, t) {
|
|
393
391
|
super(e), this.fn = t;
|
|
394
392
|
}
|
|
@@ -399,7 +397,7 @@ var x = class extends h {
|
|
|
399
397
|
}, ...n);
|
|
400
398
|
}
|
|
401
399
|
};
|
|
402
|
-
new
|
|
400
|
+
new v().use([
|
|
403
401
|
{
|
|
404
402
|
place: "element content",
|
|
405
403
|
types: [
|
|
@@ -409,7 +407,7 @@ new se().use([
|
|
|
409
407
|
"symbol",
|
|
410
408
|
"boolean"
|
|
411
409
|
],
|
|
412
|
-
mutator: (e, t) => new
|
|
410
|
+
mutator: (e, t) => new x(e, new Text(t?.toString() || ""))
|
|
413
411
|
},
|
|
414
412
|
{
|
|
415
413
|
place: "attr value",
|
|
@@ -419,27 +417,35 @@ new se().use([
|
|
|
419
417
|
"bigint",
|
|
420
418
|
"symbol"
|
|
421
419
|
],
|
|
422
|
-
mutator: (e, t) => new
|
|
420
|
+
mutator: (e, t) => new ie(e, t?.toString() || "")
|
|
423
421
|
},
|
|
424
422
|
{
|
|
425
423
|
place: "element content",
|
|
426
424
|
types: (e) => e instanceof Node,
|
|
427
|
-
mutator: (e, t) => new
|
|
425
|
+
mutator: (e, t) => new x(e, t)
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
place: "element content",
|
|
429
|
+
types: (e) => Array.isArray(e),
|
|
430
|
+
mutator: (e, t) => {
|
|
431
|
+
let n = new DocumentFragment(), r = t.map((e) => e instanceof Node ? e : new Text(e?.toString() || ""));
|
|
432
|
+
return n.append(...r), new x(e, n);
|
|
433
|
+
}
|
|
428
434
|
},
|
|
429
435
|
{
|
|
430
436
|
place: "element content",
|
|
431
437
|
types: ["function"],
|
|
432
|
-
mutator: (e, t) => new
|
|
438
|
+
mutator: (e, t) => new ae(e, t)
|
|
433
439
|
},
|
|
434
440
|
{
|
|
435
441
|
place: "attr value",
|
|
436
442
|
types: ["function"],
|
|
437
|
-
mutator: (e, t) => new
|
|
443
|
+
mutator: (e, t) => new se(e, t)
|
|
438
444
|
},
|
|
439
445
|
{
|
|
440
446
|
place: "tag content",
|
|
441
447
|
types: ["function"],
|
|
442
|
-
mutator: (e, t) => new
|
|
448
|
+
mutator: (e, t) => new le(e, t)
|
|
443
449
|
}
|
|
444
450
|
]);
|
|
445
451
|
var ue = class e extends HTMLElement {
|
|
@@ -510,13 +516,13 @@ var me = class {
|
|
|
510
516
|
}
|
|
511
517
|
attachObserver(e) {
|
|
512
518
|
let t = this.provider.attach((t) => {
|
|
513
|
-
let { property: n, value: r } = t.detail, i = new
|
|
519
|
+
let { property: n, value: r } = t.detail, i = new h(e, {
|
|
514
520
|
property: n,
|
|
515
521
|
value: r
|
|
516
522
|
});
|
|
517
|
-
|
|
523
|
+
console.log("📡Signal received:", n, r), i.execute();
|
|
518
524
|
});
|
|
519
|
-
return
|
|
525
|
+
return console.log("👀 Initial observation:", t), t;
|
|
520
526
|
}
|
|
521
527
|
}, he = class {
|
|
522
528
|
constructor(e, t, n = "service:message", r = !0) {
|
|
@@ -530,19 +536,22 @@ var me = class {
|
|
|
530
536
|
});
|
|
531
537
|
}
|
|
532
538
|
start() {
|
|
533
|
-
this._running || (this._running = !0, this._pending.forEach((e) => this.process(e)));
|
|
539
|
+
this._running || (console.log(`Starting ${this._eventType} service`), this._running = !0, this._pending.forEach((e) => this.process(e)));
|
|
534
540
|
}
|
|
535
541
|
consume(e) {
|
|
536
|
-
if (e.length
|
|
542
|
+
if (e.length !== 0) {
|
|
537
543
|
let t = e;
|
|
538
|
-
this._running ? this.process(t) : this._pending.push(t);
|
|
544
|
+
this._running ? this.process(t) : (console.log(`📥 Queueing ${this._eventType} message`, e), this._pending.push(t));
|
|
539
545
|
}
|
|
540
546
|
}
|
|
541
547
|
process(e) {
|
|
548
|
+
console.log(`📤 Processing ${this._eventType} message`, e);
|
|
542
549
|
let t = this._update(e, this._context.toObject());
|
|
543
|
-
if (!Array.isArray(t))
|
|
544
|
-
|
|
545
|
-
|
|
550
|
+
if (console.log("⏭️ next state: ", t), !Array.isArray(t)) this._context.update(t);
|
|
551
|
+
else {
|
|
552
|
+
let [e, ...n] = t;
|
|
553
|
+
n.forEach((e) => e.then((e) => this.consume(e))), this._context.update(e);
|
|
554
|
+
}
|
|
546
555
|
}
|
|
547
556
|
};
|
|
548
557
|
function ge(e, t) {
|
|
@@ -589,7 +598,7 @@ var _e = class {
|
|
|
589
598
|
super((e, t) => this.update(e, t), t, e.EVENT_TYPE), this._redirectForLogin = n;
|
|
590
599
|
}
|
|
591
600
|
update(e, t) {
|
|
592
|
-
switch (e[0]) {
|
|
601
|
+
switch (console.log("Auth update", e), e[0]) {
|
|
593
602
|
case "auth/signin":
|
|
594
603
|
let { token: n, redirect: r } = e[1];
|
|
595
604
|
return [D(n), T(r)];
|
|
@@ -613,7 +622,7 @@ function T(e, t = {}) {
|
|
|
613
622
|
function E(e, t = {}) {
|
|
614
623
|
if (e) {
|
|
615
624
|
let n = window.location.href, r = new URL(e, n);
|
|
616
|
-
Object.entries(t).forEach(([e, t]) => r.searchParams.set(e, t)), console.log("
|
|
625
|
+
Object.entries(t).forEach(([e, t]) => r.searchParams.set(e, t)), console.log("Auth redirecting to ", e), window.history.pushState({}, "", e), window.history.go();
|
|
617
626
|
}
|
|
618
627
|
}
|
|
619
628
|
function D(e) {
|
|
@@ -673,7 +682,7 @@ var be = P(), xe = class extends CustomEvent {
|
|
|
673
682
|
};
|
|
674
683
|
function F(e, ...t) {
|
|
675
684
|
let n = { execute() {
|
|
676
|
-
e(...t.map((e) => e
|
|
685
|
+
console.log("▶️ Executing created effect:", t, e), e(...t.map((e) => e.open(n))), t.forEach((e) => e.close());
|
|
677
686
|
} };
|
|
678
687
|
n.execute();
|
|
679
688
|
}
|
|
@@ -720,7 +729,7 @@ var I = class e {
|
|
|
720
729
|
n && I.scheduler.subscribe(t, e, n);
|
|
721
730
|
}
|
|
722
731
|
runEffects(e, t) {
|
|
723
|
-
if (I.scheduler.scheduleEffects(t, e), this.host) {
|
|
732
|
+
if (console.log("⚙️ Running effects for signal", e, t), I.scheduler.scheduleEffects(t, e), this.host) {
|
|
724
733
|
let n = new xe(this.eventType, {
|
|
725
734
|
property: e,
|
|
726
735
|
value: t[e]
|
|
@@ -745,7 +754,7 @@ var I = class e {
|
|
|
745
754
|
this.proxy[e] = t;
|
|
746
755
|
}
|
|
747
756
|
toObject() {
|
|
748
|
-
return this.
|
|
757
|
+
return this.proxy;
|
|
749
758
|
}
|
|
750
759
|
update(e) {
|
|
751
760
|
Object.assign(this.proxy, e);
|
|
@@ -910,7 +919,7 @@ var z = class {
|
|
|
910
919
|
apply(e) {
|
|
911
920
|
e.setAttribute(this.name, this.text);
|
|
912
921
|
}
|
|
913
|
-
},
|
|
922
|
+
}, Ae = class extends z {
|
|
914
923
|
constructor(e, t) {
|
|
915
924
|
super(e), this.fn = t;
|
|
916
925
|
}
|
|
@@ -919,12 +928,12 @@ var z = class {
|
|
|
919
928
|
return (e, t, ...r) => {
|
|
920
929
|
let i = new Comment(` <<< ${n} `), a = new Comment(` >>> ${n} `), o = new DocumentFragment();
|
|
921
930
|
o.replaceChildren(i, a), (e.parentNode || t).replaceChild(o, e), F((...e) => {
|
|
922
|
-
|
|
931
|
+
je(this.fn(...e), i, a);
|
|
923
932
|
}, ...r);
|
|
924
933
|
};
|
|
925
934
|
}
|
|
926
935
|
};
|
|
927
|
-
function
|
|
936
|
+
function je(e, t, n) {
|
|
928
937
|
let r = t.parentNode;
|
|
929
938
|
if (!r) throw Error("No parent for placeholder");
|
|
930
939
|
let i = (e) => {
|
|
@@ -933,26 +942,24 @@ function Ae(e, t, n) {
|
|
|
933
942
|
return t.replaceChildren(...n), t;
|
|
934
943
|
} else if (e instanceof Node) return e;
|
|
935
944
|
else return new Text(e?.toString() || "");
|
|
936
|
-
}, a = i(e);
|
|
937
|
-
console.log("📸 Rendered for view:", e, a);
|
|
938
|
-
let o = t.nextSibling;
|
|
945
|
+
}, a = i(e), o = t.nextSibling;
|
|
939
946
|
for (; o && o !== n;) {
|
|
940
947
|
let e = o;
|
|
941
948
|
o = o.nextSibling, r.removeChild(e);
|
|
942
949
|
}
|
|
943
950
|
a && r.insertBefore(a, n);
|
|
944
951
|
}
|
|
945
|
-
var
|
|
952
|
+
var Me = class extends z {
|
|
946
953
|
constructor(e, t) {
|
|
947
954
|
super(e), this.fn = t, this.name = e.attrName;
|
|
948
955
|
}
|
|
949
956
|
apply(e, t) {
|
|
950
957
|
return (e, t, ...n) => F((...t) => {
|
|
951
|
-
|
|
958
|
+
Ne(this.fn(...t), e, this.name);
|
|
952
959
|
}, ...n);
|
|
953
960
|
}
|
|
954
961
|
};
|
|
955
|
-
function
|
|
962
|
+
function Ne(e, t, n) {
|
|
956
963
|
let r = n.match(/^([.$])(.+)$/);
|
|
957
964
|
if (r) {
|
|
958
965
|
let [n, i, a] = r;
|
|
@@ -976,7 +983,7 @@ function Me(e, t, n) {
|
|
|
976
983
|
default: t.setAttribute(n, e?.toString());
|
|
977
984
|
}
|
|
978
985
|
}
|
|
979
|
-
var
|
|
986
|
+
var Pe = class extends z {
|
|
980
987
|
constructor(e, t) {
|
|
981
988
|
super(e), this.fn = t;
|
|
982
989
|
}
|
|
@@ -1014,23 +1021,31 @@ new De().use([
|
|
|
1014
1021
|
types: (e) => e instanceof Node,
|
|
1015
1022
|
mutator: (e, t) => new B(e, t)
|
|
1016
1023
|
},
|
|
1024
|
+
{
|
|
1025
|
+
place: "element content",
|
|
1026
|
+
types: (e) => Array.isArray(e),
|
|
1027
|
+
mutator: (e, t) => {
|
|
1028
|
+
let n = new DocumentFragment(), r = t.map((e) => e instanceof Node ? e : new Text(e?.toString() || ""));
|
|
1029
|
+
return n.append(...r), new B(e, n);
|
|
1030
|
+
}
|
|
1031
|
+
},
|
|
1017
1032
|
{
|
|
1018
1033
|
place: "element content",
|
|
1019
1034
|
types: ["function"],
|
|
1020
|
-
mutator: (e, t) => new
|
|
1035
|
+
mutator: (e, t) => new Ae(e, t)
|
|
1021
1036
|
},
|
|
1022
1037
|
{
|
|
1023
1038
|
place: "attr value",
|
|
1024
1039
|
types: ["function"],
|
|
1025
|
-
mutator: (e, t) => new
|
|
1040
|
+
mutator: (e, t) => new Me(e, t)
|
|
1026
1041
|
},
|
|
1027
1042
|
{
|
|
1028
1043
|
place: "tag content",
|
|
1029
1044
|
types: ["function"],
|
|
1030
|
-
mutator: (e, t) => new
|
|
1045
|
+
mutator: (e, t) => new Pe(e, t)
|
|
1031
1046
|
}
|
|
1032
1047
|
]);
|
|
1033
|
-
var
|
|
1048
|
+
var V = class e extends HTMLElement {
|
|
1034
1049
|
static {
|
|
1035
1050
|
this.DISCOVERY_EVENT = "un-provider:discover";
|
|
1036
1051
|
}
|
|
@@ -1042,11 +1057,11 @@ var H = class e extends HTMLElement {
|
|
|
1042
1057
|
}
|
|
1043
1058
|
static {
|
|
1044
1059
|
document.addEventListener(e.DISCOVERY_EVENT, (e) => {
|
|
1045
|
-
let [t, n] = e.detail, r =
|
|
1060
|
+
let [t, n] = e.detail, r = Le(t);
|
|
1046
1061
|
r && n(r);
|
|
1047
1062
|
}), document.addEventListener(e.REGISTRY_EVENT, (e) => {
|
|
1048
1063
|
let [t, n] = e.detail;
|
|
1049
|
-
|
|
1064
|
+
Ie(t, n);
|
|
1050
1065
|
});
|
|
1051
1066
|
}
|
|
1052
1067
|
constructor(t, n) {
|
|
@@ -1068,9 +1083,9 @@ var H = class e extends HTMLElement {
|
|
|
1068
1083
|
this.removeEventListener(e.CHANGE_EVENT, t);
|
|
1069
1084
|
}
|
|
1070
1085
|
};
|
|
1071
|
-
function
|
|
1086
|
+
function Fe(e, t) {
|
|
1072
1087
|
return new Promise((n, r) => {
|
|
1073
|
-
let i = new CustomEvent(
|
|
1088
|
+
let i = new CustomEvent(V.DISCOVERY_EVENT, {
|
|
1074
1089
|
bubbles: !0,
|
|
1075
1090
|
composed: !0,
|
|
1076
1091
|
detail: [t, (e) => e ? n(e) : r()]
|
|
@@ -1078,20 +1093,20 @@ function Pe(e, t) {
|
|
|
1078
1093
|
e.isConnected ? e.dispatchEvent(i) : document.dispatchEvent(i);
|
|
1079
1094
|
});
|
|
1080
1095
|
}
|
|
1081
|
-
var
|
|
1082
|
-
function
|
|
1083
|
-
|
|
1096
|
+
var H = {};
|
|
1097
|
+
function Ie(e, t) {
|
|
1098
|
+
H[e] = t;
|
|
1084
1099
|
}
|
|
1085
|
-
function
|
|
1086
|
-
return
|
|
1100
|
+
function Le(e) {
|
|
1101
|
+
return H[e];
|
|
1087
1102
|
}
|
|
1088
|
-
var
|
|
1103
|
+
var Re = class {
|
|
1089
1104
|
constructor(e) {
|
|
1090
1105
|
this.contextLabel = e;
|
|
1091
1106
|
}
|
|
1092
1107
|
observe(e, t) {
|
|
1093
1108
|
return new Promise((n, r) => {
|
|
1094
|
-
this.provider ? n(this.attachObserver(t)) :
|
|
1109
|
+
this.provider ? n(this.attachObserver(t)) : Fe(e, this.contextLabel).then((e) => {
|
|
1095
1110
|
this.provider = e, n(this.attachObserver(t));
|
|
1096
1111
|
}).catch((e) => r(e));
|
|
1097
1112
|
});
|
|
@@ -1102,11 +1117,11 @@ var Le = class {
|
|
|
1102
1117
|
property: n,
|
|
1103
1118
|
value: r
|
|
1104
1119
|
});
|
|
1105
|
-
|
|
1120
|
+
console.log("📡Signal received:", n, r), i.execute();
|
|
1106
1121
|
});
|
|
1107
|
-
return
|
|
1122
|
+
return console.log("👀 Initial observation:", t), t;
|
|
1108
1123
|
}
|
|
1109
|
-
},
|
|
1124
|
+
}, ze = class {
|
|
1110
1125
|
constructor(e, t, n = "service:message", r = !0) {
|
|
1111
1126
|
this._pending = [], this._context = t, this._update = e, this._eventType = n, this._running = r;
|
|
1112
1127
|
}
|
|
@@ -1118,50 +1133,60 @@ var Le = class {
|
|
|
1118
1133
|
});
|
|
1119
1134
|
}
|
|
1120
1135
|
start() {
|
|
1121
|
-
this._running || (this._running = !0, this._pending.forEach((e) => this.process(e)));
|
|
1136
|
+
this._running || (console.log(`Starting ${this._eventType} service`), this._running = !0, this._pending.forEach((e) => this.process(e)));
|
|
1122
1137
|
}
|
|
1123
1138
|
consume(e) {
|
|
1124
|
-
if (e.length
|
|
1139
|
+
if (e.length !== 0) {
|
|
1125
1140
|
let t = e;
|
|
1126
|
-
this._running ? this.process(t) : this._pending.push(t);
|
|
1141
|
+
this._running ? this.process(t) : (console.log(`📥 Queueing ${this._eventType} message`, e), this._pending.push(t));
|
|
1127
1142
|
}
|
|
1128
1143
|
}
|
|
1129
1144
|
process(e) {
|
|
1145
|
+
console.log(`📤 Processing ${this._eventType} message`, e);
|
|
1130
1146
|
let t = this._update(e, this._context.toObject());
|
|
1131
|
-
if (!Array.isArray(t))
|
|
1132
|
-
|
|
1133
|
-
|
|
1147
|
+
if (console.log("⏭️ next state: ", t), !Array.isArray(t)) this._context.update(t);
|
|
1148
|
+
else {
|
|
1149
|
+
let [e, ...n] = t;
|
|
1150
|
+
n.forEach((e) => e.then((e) => this.consume(e))), this._context.update(e);
|
|
1151
|
+
}
|
|
1134
1152
|
}
|
|
1135
|
-
}
|
|
1153
|
+
};
|
|
1154
|
+
function Be(e, t) {
|
|
1155
|
+
return new Ve(e, t);
|
|
1156
|
+
}
|
|
1157
|
+
var Ve = class {
|
|
1136
1158
|
constructor(e, t) {
|
|
1137
|
-
this.client = e, this.observer = new
|
|
1159
|
+
this.client = e, this.observer = new Re(t);
|
|
1138
1160
|
}
|
|
1139
1161
|
start(e) {
|
|
1140
1162
|
return this.observer.observe(this.client, (t) => {
|
|
1141
1163
|
e(t.property, t.value);
|
|
1142
1164
|
});
|
|
1143
1165
|
}
|
|
1144
|
-
},
|
|
1166
|
+
}, U = class {
|
|
1145
1167
|
constructor(e, t) {
|
|
1146
|
-
this.origin = e;
|
|
1147
|
-
let n =
|
|
1168
|
+
this.initialized = !1, this.origin = e;
|
|
1169
|
+
let n = He(t).map(([e, t]) => [t, e]);
|
|
1148
1170
|
this.inverse = Object.fromEntries(n);
|
|
1149
1171
|
}
|
|
1150
1172
|
mapObservation(e) {
|
|
1151
|
-
let t = Object.entries(e)
|
|
1152
|
-
|
|
1173
|
+
let t = Object.entries(e).map(([e, t]) => {
|
|
1174
|
+
let n = this.inverse[e];
|
|
1175
|
+
return n ? [n, t] : [];
|
|
1176
|
+
});
|
|
1177
|
+
return Object.fromEntries(t.filter((e) => e.length > 0));
|
|
1153
1178
|
}
|
|
1154
1179
|
start(e) {
|
|
1155
1180
|
return this.origin.start((t, n) => {
|
|
1156
1181
|
let r = this.inverse[t];
|
|
1157
|
-
e(r, n);
|
|
1158
|
-
}).then((e) => this.mapObservation(e));
|
|
1182
|
+
e(r, n), this.initialized = !0;
|
|
1183
|
+
}).then((e) => this.initialized ? {} : this.mapObservation(e));
|
|
1159
1184
|
}
|
|
1160
1185
|
};
|
|
1161
|
-
function
|
|
1186
|
+
function He(e) {
|
|
1162
1187
|
return Object.entries(e).map(([e, t]) => [e, t]);
|
|
1163
1188
|
}
|
|
1164
|
-
var
|
|
1189
|
+
var Ue = class extends CustomEvent {
|
|
1165
1190
|
constructor(e, t) {
|
|
1166
1191
|
super(e, {
|
|
1167
1192
|
bubbles: !0,
|
|
@@ -1171,13 +1196,13 @@ var Ve = class extends CustomEvent {
|
|
|
1171
1196
|
});
|
|
1172
1197
|
}
|
|
1173
1198
|
};
|
|
1174
|
-
function
|
|
1199
|
+
function W(e, ...t) {
|
|
1175
1200
|
let n = { execute() {
|
|
1176
|
-
e(...t.map((e) => e
|
|
1201
|
+
console.log("▶️ Executing created effect:", t, e), e(...t.map((e) => e.open(n))), t.forEach((e) => e.close());
|
|
1177
1202
|
} };
|
|
1178
1203
|
n.execute();
|
|
1179
1204
|
}
|
|
1180
|
-
var
|
|
1205
|
+
var G = class e {
|
|
1181
1206
|
constructor() {
|
|
1182
1207
|
this.signals = /* @__PURE__ */ new WeakMap(), this.scheduled = /* @__PURE__ */ new WeakSet();
|
|
1183
1208
|
}
|
|
@@ -1198,7 +1223,7 @@ var K = class e {
|
|
|
1198
1223
|
this.scheduled.delete(e), e.execute();
|
|
1199
1224
|
}));
|
|
1200
1225
|
}
|
|
1201
|
-
},
|
|
1226
|
+
}, We = class {
|
|
1202
1227
|
constructor() {
|
|
1203
1228
|
this.running = [], this.eventType = "un-effect:change";
|
|
1204
1229
|
}
|
|
@@ -1217,11 +1242,11 @@ var K = class e {
|
|
|
1217
1242
|
}
|
|
1218
1243
|
subscribe(e, t) {
|
|
1219
1244
|
let n = this.current();
|
|
1220
|
-
n &&
|
|
1245
|
+
n && G.scheduler.subscribe(t, e, n);
|
|
1221
1246
|
}
|
|
1222
1247
|
runEffects(e, t) {
|
|
1223
|
-
if (
|
|
1224
|
-
let n = new
|
|
1248
|
+
if (console.log("⚙️ Running effects for signal", e, t), G.scheduler.scheduleEffects(t, e), this.host) {
|
|
1249
|
+
let n = new Ue(this.eventType, {
|
|
1225
1250
|
property: e,
|
|
1226
1251
|
value: t[e]
|
|
1227
1252
|
});
|
|
@@ -1231,12 +1256,12 @@ var K = class e {
|
|
|
1231
1256
|
setHost(e, t) {
|
|
1232
1257
|
this.host = e, t && (this.eventType = t);
|
|
1233
1258
|
}
|
|
1234
|
-
},
|
|
1259
|
+
}, K = class {
|
|
1235
1260
|
static {
|
|
1236
1261
|
this.CHANGE_EVENT_TYPE = "un-context:change";
|
|
1237
1262
|
}
|
|
1238
1263
|
constructor(e, t) {
|
|
1239
|
-
t ? (this.manager = t.manager, this.object = t.object, this.proxy = t.proxy, this.update(e)) : (this.manager = new
|
|
1264
|
+
t ? (this.manager = t.manager, this.object = t.object, this.proxy = t.proxy, this.update(e)) : (this.manager = new We(), this.object = e, this.proxy = Ge(this.object, this.manager));
|
|
1240
1265
|
}
|
|
1241
1266
|
get(e) {
|
|
1242
1267
|
return this.proxy[e];
|
|
@@ -1245,7 +1270,7 @@ var K = class e {
|
|
|
1245
1270
|
this.proxy[e] = t;
|
|
1246
1271
|
}
|
|
1247
1272
|
toObject() {
|
|
1248
|
-
return this.
|
|
1273
|
+
return this.proxy;
|
|
1249
1274
|
}
|
|
1250
1275
|
update(e) {
|
|
1251
1276
|
Object.assign(this.proxy, e);
|
|
@@ -1254,7 +1279,7 @@ var K = class e {
|
|
|
1254
1279
|
this.update(e(this.proxy));
|
|
1255
1280
|
}
|
|
1256
1281
|
createEffect(e) {
|
|
1257
|
-
|
|
1282
|
+
W(e, this);
|
|
1258
1283
|
}
|
|
1259
1284
|
setHost(e, t) {
|
|
1260
1285
|
this.manager.setHost(e, t);
|
|
@@ -1266,19 +1291,19 @@ var K = class e {
|
|
|
1266
1291
|
this.manager.pop();
|
|
1267
1292
|
}
|
|
1268
1293
|
};
|
|
1269
|
-
function
|
|
1294
|
+
function Ge(e, t) {
|
|
1270
1295
|
return new Proxy(e, {
|
|
1271
1296
|
get: (e, n, r) => {
|
|
1272
1297
|
let i = Reflect.get(e, n, r);
|
|
1273
|
-
return t.isRunning() &&
|
|
1298
|
+
return t.isRunning() && q(i) && t.subscribe(n, e), i;
|
|
1274
1299
|
},
|
|
1275
1300
|
set: (e, n, r, i) => {
|
|
1276
1301
|
let a = Reflect.set(e, n, r, i);
|
|
1277
|
-
return a &&
|
|
1302
|
+
return a && q(r) && t.runEffects(n, e), a;
|
|
1278
1303
|
}
|
|
1279
1304
|
});
|
|
1280
1305
|
}
|
|
1281
|
-
function
|
|
1306
|
+
function q(e) {
|
|
1282
1307
|
switch (typeof e) {
|
|
1283
1308
|
case "object":
|
|
1284
1309
|
case "number":
|
|
@@ -1289,17 +1314,17 @@ function J(e) {
|
|
|
1289
1314
|
default: return !1;
|
|
1290
1315
|
}
|
|
1291
1316
|
}
|
|
1292
|
-
function
|
|
1317
|
+
function Ke(e, t) {
|
|
1293
1318
|
return Object.assign(e, { render: t }), e;
|
|
1294
1319
|
}
|
|
1295
|
-
function
|
|
1320
|
+
function qe(e, t, ...n) {
|
|
1296
1321
|
let r = e.cloneNode(!0);
|
|
1297
1322
|
return Array.from(t.entries()).forEach(([e, t]) => {
|
|
1298
1323
|
let i = r.querySelector(`[data-${e}]`);
|
|
1299
1324
|
i && t.forEach((e) => e(i, r, ...n));
|
|
1300
1325
|
}), r;
|
|
1301
1326
|
}
|
|
1302
|
-
var
|
|
1327
|
+
var Je = class e {
|
|
1303
1328
|
static {
|
|
1304
1329
|
this.parser = new DOMParser();
|
|
1305
1330
|
}
|
|
@@ -1335,7 +1360,7 @@ var Ke = class e {
|
|
|
1335
1360
|
}
|
|
1336
1361
|
});
|
|
1337
1362
|
}
|
|
1338
|
-
return
|
|
1363
|
+
return Ke(s, (...e) => qe(s, c, ...e));
|
|
1339
1364
|
}
|
|
1340
1365
|
static {
|
|
1341
1366
|
this.OPEN_RE = /<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/;
|
|
@@ -1374,35 +1399,35 @@ var Ke = class e {
|
|
|
1374
1399
|
let n = this.plugins;
|
|
1375
1400
|
for (let r = 0; r < n.length; r++) {
|
|
1376
1401
|
let i = n[r];
|
|
1377
|
-
if (e.kind === i.place &&
|
|
1402
|
+
if (e.kind === i.place && Ye(t, i)) return i.mutator(e, t);
|
|
1378
1403
|
}
|
|
1379
1404
|
}
|
|
1380
1405
|
};
|
|
1381
|
-
function
|
|
1406
|
+
function Ye(e, t) {
|
|
1382
1407
|
return typeof t.types == "function" ? t.types(e, t) : t.types.includes(typeof e);
|
|
1383
1408
|
}
|
|
1384
|
-
var
|
|
1409
|
+
var J = class {
|
|
1385
1410
|
constructor(e) {
|
|
1386
1411
|
this.place = e;
|
|
1387
1412
|
}
|
|
1388
1413
|
apply(e, t) {
|
|
1389
1414
|
throw "abstract method 'apply' called";
|
|
1390
1415
|
}
|
|
1391
|
-
},
|
|
1416
|
+
}, Y = class extends J {
|
|
1392
1417
|
constructor(e, t) {
|
|
1393
1418
|
super(e), this.content = t;
|
|
1394
1419
|
}
|
|
1395
1420
|
apply(e, t) {
|
|
1396
1421
|
(e.parentNode || t).replaceChild(this.content, e);
|
|
1397
1422
|
}
|
|
1398
|
-
},
|
|
1423
|
+
}, Xe = class extends J {
|
|
1399
1424
|
constructor(e, t) {
|
|
1400
1425
|
super(e), this.text = t, this.name = e.attrName;
|
|
1401
1426
|
}
|
|
1402
1427
|
apply(e) {
|
|
1403
1428
|
e.setAttribute(this.name, this.text);
|
|
1404
1429
|
}
|
|
1405
|
-
},
|
|
1430
|
+
}, Ze = class extends J {
|
|
1406
1431
|
constructor(e, t) {
|
|
1407
1432
|
super(e), this.fn = t;
|
|
1408
1433
|
}
|
|
@@ -1410,13 +1435,13 @@ var Y = class {
|
|
|
1410
1435
|
let n = this.place.nodeLabel;
|
|
1411
1436
|
return (e, t, ...r) => {
|
|
1412
1437
|
let i = new Comment(` <<< ${n} `), a = new Comment(` >>> ${n} `), o = new DocumentFragment();
|
|
1413
|
-
o.replaceChildren(i, a), (e.parentNode || t).replaceChild(o, e),
|
|
1414
|
-
|
|
1438
|
+
o.replaceChildren(i, a), (e.parentNode || t).replaceChild(o, e), W((...e) => {
|
|
1439
|
+
Qe(this.fn(...e), i, a);
|
|
1415
1440
|
}, ...r);
|
|
1416
1441
|
};
|
|
1417
1442
|
}
|
|
1418
1443
|
};
|
|
1419
|
-
function
|
|
1444
|
+
function Qe(e, t, n) {
|
|
1420
1445
|
let r = t.parentNode;
|
|
1421
1446
|
if (!r) throw Error("No parent for placeholder");
|
|
1422
1447
|
let i = (e) => {
|
|
@@ -1425,26 +1450,24 @@ function Xe(e, t, n) {
|
|
|
1425
1450
|
return t.replaceChildren(...n), t;
|
|
1426
1451
|
} else if (e instanceof Node) return e;
|
|
1427
1452
|
else return new Text(e?.toString() || "");
|
|
1428
|
-
}, a = i(e);
|
|
1429
|
-
console.log("📸 Rendered for view:", e, a);
|
|
1430
|
-
let o = t.nextSibling;
|
|
1453
|
+
}, a = i(e), o = t.nextSibling;
|
|
1431
1454
|
for (; o && o !== n;) {
|
|
1432
1455
|
let e = o;
|
|
1433
1456
|
o = o.nextSibling, r.removeChild(e);
|
|
1434
1457
|
}
|
|
1435
1458
|
a && r.insertBefore(a, n);
|
|
1436
1459
|
}
|
|
1437
|
-
var
|
|
1460
|
+
var $e = class extends J {
|
|
1438
1461
|
constructor(e, t) {
|
|
1439
1462
|
super(e), this.fn = t, this.name = e.attrName;
|
|
1440
1463
|
}
|
|
1441
1464
|
apply(e, t) {
|
|
1442
|
-
return (e, t, ...n) =>
|
|
1443
|
-
|
|
1465
|
+
return (e, t, ...n) => W((...t) => {
|
|
1466
|
+
et(this.fn(...t), e, this.name);
|
|
1444
1467
|
}, ...n);
|
|
1445
1468
|
}
|
|
1446
1469
|
};
|
|
1447
|
-
function
|
|
1470
|
+
function et(e, t, n) {
|
|
1448
1471
|
let r = n.match(/^([.$])(.+)$/);
|
|
1449
1472
|
if (r) {
|
|
1450
1473
|
let [n, i, a] = r;
|
|
@@ -1453,7 +1476,7 @@ function Qe(e, t, n) {
|
|
|
1453
1476
|
t[a] = e;
|
|
1454
1477
|
break;
|
|
1455
1478
|
case "$":
|
|
1456
|
-
"viewModel" in t && t.viewModel instanceof
|
|
1479
|
+
"viewModel" in t && t.viewModel instanceof K && t.viewModel.set(a, e);
|
|
1457
1480
|
break;
|
|
1458
1481
|
}
|
|
1459
1482
|
} else switch (typeof e) {
|
|
@@ -1468,18 +1491,18 @@ function Qe(e, t, n) {
|
|
|
1468
1491
|
default: t.setAttribute(n, e?.toString());
|
|
1469
1492
|
}
|
|
1470
1493
|
}
|
|
1471
|
-
var
|
|
1494
|
+
var X = class extends J {
|
|
1472
1495
|
constructor(e, t) {
|
|
1473
1496
|
super(e), this.fn = t;
|
|
1474
1497
|
}
|
|
1475
1498
|
apply(e, t) {
|
|
1476
|
-
return (e, t, ...n) =>
|
|
1499
|
+
return (e, t, ...n) => W((...t) => {
|
|
1477
1500
|
let n = this.fn(...t);
|
|
1478
1501
|
typeof n == "function" && n(e);
|
|
1479
1502
|
}, ...n);
|
|
1480
1503
|
}
|
|
1481
1504
|
};
|
|
1482
|
-
new
|
|
1505
|
+
new Je().use([
|
|
1483
1506
|
{
|
|
1484
1507
|
place: "element content",
|
|
1485
1508
|
types: [
|
|
@@ -1489,7 +1512,7 @@ new Ke().use([
|
|
|
1489
1512
|
"symbol",
|
|
1490
1513
|
"boolean"
|
|
1491
1514
|
],
|
|
1492
|
-
mutator: (e, t) => new
|
|
1515
|
+
mutator: (e, t) => new Y(e, new Text(t?.toString() || ""))
|
|
1493
1516
|
},
|
|
1494
1517
|
{
|
|
1495
1518
|
place: "attr value",
|
|
@@ -1499,30 +1522,38 @@ new Ke().use([
|
|
|
1499
1522
|
"bigint",
|
|
1500
1523
|
"symbol"
|
|
1501
1524
|
],
|
|
1502
|
-
mutator: (e, t) => new
|
|
1525
|
+
mutator: (e, t) => new Xe(e, t?.toString() || "")
|
|
1503
1526
|
},
|
|
1504
1527
|
{
|
|
1505
1528
|
place: "element content",
|
|
1506
1529
|
types: (e) => e instanceof Node,
|
|
1507
|
-
mutator: (e, t) => new
|
|
1530
|
+
mutator: (e, t) => new Y(e, t)
|
|
1531
|
+
},
|
|
1532
|
+
{
|
|
1533
|
+
place: "element content",
|
|
1534
|
+
types: (e) => Array.isArray(e),
|
|
1535
|
+
mutator: (e, t) => {
|
|
1536
|
+
let n = new DocumentFragment(), r = t.map((e) => e instanceof Node ? e : new Text(e?.toString() || ""));
|
|
1537
|
+
return n.append(...r), new Y(e, n);
|
|
1538
|
+
}
|
|
1508
1539
|
},
|
|
1509
1540
|
{
|
|
1510
1541
|
place: "element content",
|
|
1511
1542
|
types: ["function"],
|
|
1512
|
-
mutator: (e, t) => new
|
|
1543
|
+
mutator: (e, t) => new Ze(e, t)
|
|
1513
1544
|
},
|
|
1514
1545
|
{
|
|
1515
1546
|
place: "attr value",
|
|
1516
1547
|
types: ["function"],
|
|
1517
|
-
mutator: (e, t) => new
|
|
1548
|
+
mutator: (e, t) => new $e(e, t)
|
|
1518
1549
|
},
|
|
1519
1550
|
{
|
|
1520
1551
|
place: "tag content",
|
|
1521
1552
|
types: ["function"],
|
|
1522
|
-
mutator: (e, t) => new
|
|
1553
|
+
mutator: (e, t) => new X(e, t)
|
|
1523
1554
|
}
|
|
1524
1555
|
]);
|
|
1525
|
-
var Z = class extends
|
|
1556
|
+
var Z = class extends K {
|
|
1526
1557
|
constructor(e, t) {
|
|
1527
1558
|
super(e, t);
|
|
1528
1559
|
}
|
|
@@ -1531,20 +1562,23 @@ var Z = class extends q {
|
|
|
1531
1562
|
}
|
|
1532
1563
|
with(e, ...t) {
|
|
1533
1564
|
let n = Object.fromEntries(t.map((e) => [e, e]));
|
|
1534
|
-
return this.merge(new
|
|
1565
|
+
return this.merge(new U(e, n));
|
|
1535
1566
|
}
|
|
1536
1567
|
withCalculated(e, t) {
|
|
1537
|
-
return this.merge(new
|
|
1568
|
+
return this.merge(new U(e, t));
|
|
1538
1569
|
}
|
|
1539
1570
|
withRenamed(e, t) {
|
|
1540
|
-
return this.merge(new
|
|
1571
|
+
return this.merge(new U(e, t));
|
|
1541
1572
|
}
|
|
1542
1573
|
merge(e) {
|
|
1543
1574
|
if (e) {
|
|
1544
|
-
let t =
|
|
1545
|
-
|
|
1575
|
+
let t = /* @__PURE__ */ new Map();
|
|
1576
|
+
e.start((e, n) => {
|
|
1577
|
+
this.set(e, n), t.set(e, !0);
|
|
1546
1578
|
}).then((e) => {
|
|
1547
|
-
|
|
1579
|
+
Object.keys(e).filter((e) => !t.get(e)).forEach((t) => {
|
|
1580
|
+
this.set(t, e[t]);
|
|
1581
|
+
});
|
|
1548
1582
|
});
|
|
1549
1583
|
}
|
|
1550
1584
|
return this;
|
|
@@ -1553,38 +1587,38 @@ var Z = class extends q {
|
|
|
1553
1587
|
return e.render(this);
|
|
1554
1588
|
}
|
|
1555
1589
|
};
|
|
1556
|
-
function
|
|
1590
|
+
function tt(e) {
|
|
1557
1591
|
return e === void 0 ? new Z({}) : new Z(e);
|
|
1558
1592
|
}
|
|
1559
1593
|
//#endregion
|
|
1560
1594
|
//#region src/store.ts
|
|
1561
|
-
var
|
|
1595
|
+
var nt = /* @__PURE__ */ t({
|
|
1562
1596
|
CONTEXT_DEFAULT: () => Q,
|
|
1563
|
-
Provider: () =>
|
|
1597
|
+
Provider: () => rt,
|
|
1564
1598
|
Service: () => $,
|
|
1565
|
-
dispatch: () =>
|
|
1566
|
-
}), Q = "context:store", $ = class e extends
|
|
1599
|
+
dispatch: () => it
|
|
1600
|
+
}), Q = "context:store", $ = class e extends ze {
|
|
1567
1601
|
static {
|
|
1568
1602
|
this.EVENT_TYPE = "store:message";
|
|
1569
1603
|
}
|
|
1570
1604
|
constructor(t, n) {
|
|
1571
1605
|
super((e, t) => n(t, e), t, e.EVENT_TYPE);
|
|
1572
1606
|
}
|
|
1573
|
-
},
|
|
1607
|
+
}, rt = class extends V {
|
|
1574
1608
|
constructor(e, t) {
|
|
1575
|
-
super(t, Q), this.viewModel =
|
|
1609
|
+
super(t, Q), this.viewModel = tt({ authenticated: !1 }).with(k(this), "authenticated", "username", "token"), this._updateFn = e;
|
|
1576
1610
|
}
|
|
1577
1611
|
connectedCallback() {
|
|
1578
1612
|
new $(this.context, (e, t) => this._updateFn(e, t, this.viewModel.toObject())).attach(this);
|
|
1579
1613
|
}
|
|
1580
1614
|
};
|
|
1581
|
-
function
|
|
1615
|
+
function it(e, t) {
|
|
1582
1616
|
console.log("📨 Dispatching message:", t, e), e.dispatchEvent(new j.Dispatch(t, $.EVENT_TYPE));
|
|
1583
1617
|
}
|
|
1584
1618
|
//#endregion
|
|
1585
1619
|
//#region src/fromStore.ts
|
|
1586
|
-
function
|
|
1587
|
-
return
|
|
1620
|
+
function at(e, t = Q) {
|
|
1621
|
+
return Be(e, t);
|
|
1588
1622
|
}
|
|
1589
1623
|
//#endregion
|
|
1590
|
-
export {
|
|
1624
|
+
export { nt as Store, at as fromStore };
|
package/dist/store.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.store={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Object.defineProperty,n=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},r=class extends Error{};r.prototype.name=`InvalidTokenError`;function i(e){return decodeURIComponent(atob(e).replace(/(.)/g,(e,t)=>{let n=t.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n=`0`+n),`%`+n}))}function a(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`);switch(t.length%4){case 0:break;case 2:t+=`==`;break;case 3:t+=`=`;break;default:throw Error(`base64 string is not of the correct length`)}try{return i(t)}catch{return atob(t)}}function o(e,t){if(typeof e!=`string`)throw new r(`Invalid token specified: must be a string`);t||={};let n=t.header===!0?0:1,i=e.split(`.`)[n];if(typeof i!=`string`)throw new r(`Invalid token specified: missing part #${n+1}`);let o;try{o=a(i)}catch(e){throw new r(`Invalid token specified: invalid base64 for part #${n+1} (${e.message})`)}try{return JSON.parse(o)}catch(e){throw new r(`Invalid token specified: invalid json for part #${n+1} (${e.message})`)}}var s=Object.defineProperty,c=((e,t)=>{let n={};for(var r in e)s(n,r,{get:e[r],enumerable:!0});return t||s(n,Symbol.toStringTag,{value:`Module`}),n})({Dispatch:()=>u,None:()=>l,dispatch:()=>ee,dispatcher:()=>d}),l=[],u=class extends CustomEvent{constructor(e,t=`un:message`){super(t,{bubbles:!0,composed:!0,detail:e})}};function d(e=`un:message`){return(t,...n)=>t.dispatchEvent(new u(n,e))}var ee=d(),te=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function f(e,...t){let n={execute(){e(...t.map(e=>e instanceof m?e.open(n):e)),t.forEach(e=>e instanceof m&&e.close())}};n.execute()}var p=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},ne=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&p.scheduler.subscribe(t,e,n)}runEffects(e,t){if(p.scheduler.scheduleEffects(t,e),this.host){let n=new te(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},m=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new ne,this.object=e,this.proxy=re(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.object}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){f(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function re(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&h(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&h(r)&&t.runEffects(n,e),a}})}function h(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}var g=class{constructor(e,...t){this.effectFn=()=>e(...t)}execute(){this.effectFn()}};function _(e,t){return Object.assign(e,{render:t}),e}function v(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var ie=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return _(s,(...e)=>v(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&ae(t,i))return i.mutator(e,t)}}};function ae(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var y=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},b=class extends y{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},oe=class extends y{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},se=class extends y{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),f((...e)=>{ce(this.fn(...e),i,a)},...r)}}};function ce(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e);console.log(`📸 Rendered for view:`,e,a);let o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var le=class extends y{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>f((...t)=>{ue(this.fn(...t),e,this.name)},...n)}};function ue(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof m&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var de=class extends y{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>f((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new ie().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new b(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new oe(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new b(e,t)},{place:`element content`,types:[`function`],mutator:(e,t)=>new se(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new le(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new de(e,t)}]);var fe=class e extends HTMLElement{static{this.DISCOVERY_EVENT=`un-provider:discover`}static{this.REGISTRY_EVENT=`un-provider:register`}static{this.CHANGE_EVENT=`un-provider:change`}static{document.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail,r=he(t);r&&n(r)}),document.addEventListener(e.REGISTRY_EVENT,e=>{let[t,n]=e.detail;me(t,n)})}constructor(t,n){super(),this.contextLabel=n,this.context=new m(t),this.context.setHost(this,e.CHANGE_EVENT),this.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail;t===this.contextLabel&&(e.stopPropagation(),n(this))});let r=new CustomEvent(e.REGISTRY_EVENT,{bubbles:!0,composed:!0,detail:[this.contextLabel,this]});this.dispatchEvent(r)}attach(t){return this.addEventListener(e.CHANGE_EVENT,t),this.context.toObject()}detach(t){this.removeEventListener(e.CHANGE_EVENT,t)}};function pe(e,t){return new Promise((n,r)=>{let i=new CustomEvent(fe.DISCOVERY_EVENT,{bubbles:!0,composed:!0,detail:[t,e=>e?n(e):r()]});e.isConnected?e.dispatchEvent(i):document.dispatchEvent(i)})}var x={};function me(e,t){x[e]=t}function he(e){return x[e]}var ge=class{constructor(e){this.contextLabel=e}observe(e,t){return new Promise((n,r)=>{this.provider?n(this.attachObserver(t)):pe(e,this.contextLabel).then(e=>{this.provider=e,n(this.attachObserver(t))}).catch(e=>r(e))})}attachObserver(e){let t=this.provider.attach(t=>{let{property:n,value:r}=t.detail,i=new g(e,{property:n,value:r});this.observed&&(this.observed[n]=r,i.execute())});return this.observed=t,t}},_e=class{constructor(e,t,n=`service:message`,r=!0){this._pending=[],this._context=t,this._update=e,this._eventType=n,this._running=r}attach(e){e.addEventListener(this._eventType,e=>{e.stopPropagation();let t=e.detail;this.consume(t)})}start(){this._running||(this._running=!0,this._pending.forEach(e=>this.process(e)))}consume(e){if(e.length===0){let t=e;this._running?this.process(t):this._pending.push(t)}}process(e){let t=this._update(e,this._context.toObject());if(!Array.isArray(t))return t;let[n,...r]=t;return r.forEach(e=>e.then(e=>this.consume(e))),n}};function ve(e,t){return new ye(e,t)}var ye=class{constructor(e,t){this.client=e,this.observer=new ge(t)}start(e){return this.observer.observe(this.client,t=>{e(t.property,t.value)})}},be=`context:auth`,S=class e{static{this.TOKEN_KEY=`un-auth:token`}constructor(e){this.authenticated=!1,this.username=e||`anonymous`}static deauthenticate(t){return t.authenticated=!1,t.username=`anonymous`,localStorage.removeItem(e.TOKEN_KEY),t}},C=class e extends S{constructor(e){super();let t=o(e);console.log(`Token payload`,t),this.token=e,this.authenticated=!0,this.username=t.username}static authenticate(t){let n=new e(t);return localStorage.setItem(S.TOKEN_KEY,t),n}static authenticateFromLocalStorage(){let t=localStorage.getItem(S.TOKEN_KEY);return t?e.authenticate(t):new S}},w=class e extends _e{static{this.EVENT_TYPE=`auth:message`}constructor(t,n){super((e,t)=>this.update(e,t),t,e.EVENT_TYPE),this._redirectForLogin=n}update(e,t){switch(e[0]){case`auth/signin`:let{token:n,redirect:r}=e[1];return[D(n),T(r)];case`auth/signout`:return[O(t),T(this._redirectForLogin)];case`auth/redirect`:E(this._redirectForLogin,{next:window.location.href});break;default:let i=e[0];throw Error(`Unhandled Auth message "${i}"`)}return t}};c.dispatcher(w.EVENT_TYPE);function T(e,t={}){return new Promise(n=>{E(e,t),n(c.None)})}function E(e,t={}){if(e){let n=window.location.href,r=new URL(e,n);Object.entries(t).forEach(([e,t])=>r.searchParams.set(e,t)),console.log(`Redirecting to `,e),window.location.assign(r)}}function D(e){let{authenticated:t,username:n}=C.authenticate(e);return{authenticated:t,username:n,token:e}}function O(e){let{authenticated:t,username:n}=S.deauthenticate(new S(e.username));return{username:n,authenticated:t,token:void 0}}function k(e,t=be){return ve(e,t)}var A=Object.defineProperty,j=((e,t)=>{let n={};for(var r in e)A(n,r,{get:e[r],enumerable:!0});return t||A(n,Symbol.toStringTag,{value:`Module`}),n})({Dispatch:()=>N,None:()=>M,dispatch:()=>xe,dispatcher:()=>P}),M=[],N=class extends CustomEvent{constructor(e,t=`un:message`){super(t,{bubbles:!0,composed:!0,detail:e})}};function P(e=`un:message`){return(t,...n)=>t.dispatchEvent(new N(n,e))}var xe=P(),Se=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function F(e,...t){let n={execute(){e(...t.map(e=>e instanceof L?e.open(n):e)),t.forEach(e=>e instanceof L&&e.close())}};n.execute()}var I=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},Ce=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&I.scheduler.subscribe(t,e,n)}runEffects(e,t){if(I.scheduler.scheduleEffects(t,e),this.host){let n=new Se(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},L=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new Ce,this.object=e,this.proxy=we(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.object}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){F(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function we(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&R(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&R(r)&&t.runEffects(n,e),a}})}function R(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}var Te=class{constructor(e,...t){this.effectFn=()=>e(...t)}execute(){this.effectFn()}};function Ee(e,t){return Object.assign(e,{render:t}),e}function De(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var Oe=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return Ee(s,(...e)=>De(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&ke(t,i))return i.mutator(e,t)}}};function ke(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var z=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},B=class extends z{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},Ae=class extends z{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},je=class extends z{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),F((...e)=>{Me(this.fn(...e),i,a)},...r)}}};function Me(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e);console.log(`📸 Rendered for view:`,e,a);let o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var Ne=class extends z{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>F((...t)=>{Pe(this.fn(...t),e,this.name)},...n)}};function Pe(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof L&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var Fe=class extends z{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>F((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new Oe().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new B(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new Ae(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new B(e,t)},{place:`element content`,types:[`function`],mutator:(e,t)=>new je(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new Ne(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new Fe(e,t)}]);var V=class e extends HTMLElement{static{this.DISCOVERY_EVENT=`un-provider:discover`}static{this.REGISTRY_EVENT=`un-provider:register`}static{this.CHANGE_EVENT=`un-provider:change`}static{document.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail,r=Re(t);r&&n(r)}),document.addEventListener(e.REGISTRY_EVENT,e=>{let[t,n]=e.detail;Le(t,n)})}constructor(t,n){super(),this.contextLabel=n,this.context=new L(t),this.context.setHost(this,e.CHANGE_EVENT),this.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail;t===this.contextLabel&&(e.stopPropagation(),n(this))});let r=new CustomEvent(e.REGISTRY_EVENT,{bubbles:!0,composed:!0,detail:[this.contextLabel,this]});this.dispatchEvent(r)}attach(t){return this.addEventListener(e.CHANGE_EVENT,t),this.context.toObject()}detach(t){this.removeEventListener(e.CHANGE_EVENT,t)}};function Ie(e,t){return new Promise((n,r)=>{let i=new CustomEvent(V.DISCOVERY_EVENT,{bubbles:!0,composed:!0,detail:[t,e=>e?n(e):r()]});e.isConnected?e.dispatchEvent(i):document.dispatchEvent(i)})}var H={};function Le(e,t){H[e]=t}function Re(e){return H[e]}var ze=class{constructor(e){this.contextLabel=e}observe(e,t){return new Promise((n,r)=>{this.provider?n(this.attachObserver(t)):Ie(e,this.contextLabel).then(e=>{this.provider=e,n(this.attachObserver(t))}).catch(e=>r(e))})}attachObserver(e){let t=this.provider.attach(t=>{let{property:n,value:r}=t.detail,i=new Te(e,{property:n,value:r});this.observed&&(this.observed[n]=r,i.execute())});return this.observed=t,t}},Be=class{constructor(e,t,n=`service:message`,r=!0){this._pending=[],this._context=t,this._update=e,this._eventType=n,this._running=r}attach(e){e.addEventListener(this._eventType,e=>{e.stopPropagation();let t=e.detail;this.consume(t)})}start(){this._running||(this._running=!0,this._pending.forEach(e=>this.process(e)))}consume(e){if(e.length===0){let t=e;this._running?this.process(t):this._pending.push(t)}}process(e){let t=this._update(e,this._context.toObject());if(!Array.isArray(t))return t;let[n,...r]=t;return r.forEach(e=>e.then(e=>this.consume(e))),n}},Ve=class{constructor(e,t){this.client=e,this.observer=new ze(t)}start(e){return this.observer.observe(this.client,t=>{e(t.property,t.value)})}},U=class{constructor(e,t){this.origin=e;let n=He(t).map(([e,t])=>[t,e]);this.inverse=Object.fromEntries(n)}mapObservation(e){let t=Object.entries(e);return Object.fromEntries(t.map(([e,t])=>[this.inverse[e],t]).filter(e=>e.length>0))}start(e){return this.origin.start((t,n)=>{let r=this.inverse[t];e(r,n)}).then(e=>this.mapObservation(e))}};function He(e){return Object.entries(e).map(([e,t])=>[e,t])}var Ue=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function W(e,...t){let n={execute(){e(...t.map(e=>e instanceof K?e.open(n):e)),t.forEach(e=>e instanceof K&&e.close())}};n.execute()}var G=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},We=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&G.scheduler.subscribe(t,e,n)}runEffects(e,t){if(G.scheduler.scheduleEffects(t,e),this.host){let n=new Ue(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},K=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new We,this.object=e,this.proxy=Ge(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.object}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){W(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function Ge(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&q(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&q(r)&&t.runEffects(n,e),a}})}function q(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}function Ke(e,t){return Object.assign(e,{render:t}),e}function qe(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var Je=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return Ke(s,(...e)=>qe(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&Ye(t,i))return i.mutator(e,t)}}};function Ye(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var J=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},Y=class extends J{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},Xe=class extends J{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},Ze=class extends J{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),W((...e)=>{Qe(this.fn(...e),i,a)},...r)}}};function Qe(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e);console.log(`📸 Rendered for view:`,e,a);let o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var $e=class extends J{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>W((...t)=>{et(this.fn(...t),e,this.name)},...n)}};function et(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof K&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var X=class extends J{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>W((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new Je().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new Y(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new Xe(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new Y(e,t)},{place:`element content`,types:[`function`],mutator:(e,t)=>new Ze(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new $e(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new X(e,t)}]);var Z=class extends K{constructor(e,t){super(e,t)}get $(){return this.toObject()}with(e,...t){let n=Object.fromEntries(t.map(e=>[e,e]));return this.merge(new U(e,n))}withCalculated(e,t){return this.merge(new U(e,t))}withRenamed(e,t){return this.merge(new U(e,t))}merge(e){if(e){let t=e.start((e,n)=>{console.log(`🪄 Merging effect`,e,n,t),this.set(e,n)}).then(e=>{console.log(`👀 ViewModel source observed:`,e,t),Object.keys(e).forEach(t=>this.set(t,e[t]))})}return this}render(e){return e.render(this)}};function tt(e){return e===void 0?new Z({}):new Z(e)}var nt=n({CONTEXT_DEFAULT:()=>Q,Provider:()=>rt,Service:()=>$,dispatch:()=>it}),Q=`context:store`,$=class e extends Be{static{this.EVENT_TYPE=`store:message`}constructor(t,n){super((e,t)=>n(t,e),t,e.EVENT_TYPE)}},rt=class extends V{constructor(e,t){super(t,Q),this.viewModel=tt({authenticated:!1}).with(k(this),`authenticated`,`username`,`token`),this._updateFn=e}connectedCallback(){new $(this.context,(e,t)=>this._updateFn(e,t,this.viewModel.toObject())).attach(this)}};function it(e,t){console.log(`📨 Dispatching message:`,t,e),e.dispatchEvent(new j.Dispatch(t,$.EVENT_TYPE))}function at(e,t=Q){return new Ve(e,t)}Object.defineProperty(e,`Store`,{enumerable:!0,get:function(){return nt}}),e.fromStore=at});
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.store={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Object.defineProperty,n=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},r=class extends Error{};r.prototype.name=`InvalidTokenError`;function i(e){return decodeURIComponent(atob(e).replace(/(.)/g,(e,t)=>{let n=t.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n=`0`+n),`%`+n}))}function a(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`);switch(t.length%4){case 0:break;case 2:t+=`==`;break;case 3:t+=`=`;break;default:throw Error(`base64 string is not of the correct length`)}try{return i(t)}catch{return atob(t)}}function o(e,t){if(typeof e!=`string`)throw new r(`Invalid token specified: must be a string`);t||={};let n=t.header===!0?0:1,i=e.split(`.`)[n];if(typeof i!=`string`)throw new r(`Invalid token specified: missing part #${n+1}`);let o;try{o=a(i)}catch(e){throw new r(`Invalid token specified: invalid base64 for part #${n+1} (${e.message})`)}try{return JSON.parse(o)}catch(e){throw new r(`Invalid token specified: invalid json for part #${n+1} (${e.message})`)}}var s=Object.defineProperty,c=((e,t)=>{let n={};for(var r in e)s(n,r,{get:e[r],enumerable:!0});return t||s(n,Symbol.toStringTag,{value:`Module`}),n})({Dispatch:()=>u,None:()=>l,dispatch:()=>ee,dispatcher:()=>d}),l=[],u=class extends CustomEvent{constructor(e,t=`un:message`){super(t,{bubbles:!0,composed:!0,detail:e})}};function d(e=`un:message`){return(t,...n)=>t.dispatchEvent(new u(n,e))}var ee=d(),te=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function f(e,...t){let n={execute(){console.log(`▶️ Executing created effect:`,t,e),e(...t.map(e=>e.open(n))),t.forEach(e=>e.close())}};n.execute()}var p=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},ne=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&p.scheduler.subscribe(t,e,n)}runEffects(e,t){if(console.log(`⚙️ Running effects for signal`,e,t),p.scheduler.scheduleEffects(t,e),this.host){let n=new te(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},m=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new ne,this.object=e,this.proxy=re(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.proxy}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){f(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function re(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&h(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&h(r)&&t.runEffects(n,e),a}})}function h(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}var g=class{constructor(e,...t){this.effectFn=()=>e(...t)}execute(){this.effectFn()}};function _(e,t){return Object.assign(e,{render:t}),e}function v(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var ie=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return _(s,(...e)=>v(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&ae(t,i))return i.mutator(e,t)}}};function ae(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var y=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},b=class extends y{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},oe=class extends y{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},se=class extends y{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),f((...e)=>{ce(this.fn(...e),i,a)},...r)}}};function ce(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e),o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var le=class extends y{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>f((...t)=>{ue(this.fn(...t),e,this.name)},...n)}};function ue(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof m&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var de=class extends y{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>f((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new ie().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new b(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new oe(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new b(e,t)},{place:`element content`,types:e=>Array.isArray(e),mutator:(e,t)=>{let n=new DocumentFragment,r=t.map(e=>e instanceof Node?e:new Text(e?.toString()||``));return n.append(...r),new b(e,n)}},{place:`element content`,types:[`function`],mutator:(e,t)=>new se(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new le(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new de(e,t)}]);var fe=class e extends HTMLElement{static{this.DISCOVERY_EVENT=`un-provider:discover`}static{this.REGISTRY_EVENT=`un-provider:register`}static{this.CHANGE_EVENT=`un-provider:change`}static{document.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail,r=he(t);r&&n(r)}),document.addEventListener(e.REGISTRY_EVENT,e=>{let[t,n]=e.detail;me(t,n)})}constructor(t,n){super(),this.contextLabel=n,this.context=new m(t),this.context.setHost(this,e.CHANGE_EVENT),this.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail;t===this.contextLabel&&(e.stopPropagation(),n(this))});let r=new CustomEvent(e.REGISTRY_EVENT,{bubbles:!0,composed:!0,detail:[this.contextLabel,this]});this.dispatchEvent(r)}attach(t){return this.addEventListener(e.CHANGE_EVENT,t),this.context.toObject()}detach(t){this.removeEventListener(e.CHANGE_EVENT,t)}};function pe(e,t){return new Promise((n,r)=>{let i=new CustomEvent(fe.DISCOVERY_EVENT,{bubbles:!0,composed:!0,detail:[t,e=>e?n(e):r()]});e.isConnected?e.dispatchEvent(i):document.dispatchEvent(i)})}var x={};function me(e,t){x[e]=t}function he(e){return x[e]}var ge=class{constructor(e){this.contextLabel=e}observe(e,t){return new Promise((n,r)=>{this.provider?n(this.attachObserver(t)):pe(e,this.contextLabel).then(e=>{this.provider=e,n(this.attachObserver(t))}).catch(e=>r(e))})}attachObserver(e){let t=this.provider.attach(t=>{let{property:n,value:r}=t.detail,i=new g(e,{property:n,value:r});console.log(`📡Signal received:`,n,r),i.execute()});return console.log(`👀 Initial observation:`,t),t}},_e=class{constructor(e,t,n=`service:message`,r=!0){this._pending=[],this._context=t,this._update=e,this._eventType=n,this._running=r}attach(e){e.addEventListener(this._eventType,e=>{e.stopPropagation();let t=e.detail;this.consume(t)})}start(){this._running||(console.log(`Starting ${this._eventType} service`),this._running=!0,this._pending.forEach(e=>this.process(e)))}consume(e){if(e.length!==0){let t=e;this._running?this.process(t):(console.log(`📥 Queueing ${this._eventType} message`,e),this._pending.push(t))}}process(e){console.log(`📤 Processing ${this._eventType} message`,e);let t=this._update(e,this._context.toObject());if(console.log(`⏭️ next state: `,t),!Array.isArray(t))this._context.update(t);else{let[e,...n]=t;n.forEach(e=>e.then(e=>this.consume(e))),this._context.update(e)}}};function ve(e,t){return new ye(e,t)}var ye=class{constructor(e,t){this.client=e,this.observer=new ge(t)}start(e){return this.observer.observe(this.client,t=>{e(t.property,t.value)})}},be=`context:auth`,S=class e{static{this.TOKEN_KEY=`un-auth:token`}constructor(e){this.authenticated=!1,this.username=e||`anonymous`}static deauthenticate(t){return t.authenticated=!1,t.username=`anonymous`,localStorage.removeItem(e.TOKEN_KEY),t}},C=class e extends S{constructor(e){super();let t=o(e);console.log(`Token payload`,t),this.token=e,this.authenticated=!0,this.username=t.username}static authenticate(t){let n=new e(t);return localStorage.setItem(S.TOKEN_KEY,t),n}static authenticateFromLocalStorage(){let t=localStorage.getItem(S.TOKEN_KEY);return t?e.authenticate(t):new S}},w=class e extends _e{static{this.EVENT_TYPE=`auth:message`}constructor(t,n){super((e,t)=>this.update(e,t),t,e.EVENT_TYPE),this._redirectForLogin=n}update(e,t){switch(console.log(`Auth update`,e),e[0]){case`auth/signin`:let{token:n,redirect:r}=e[1];return[D(n),T(r)];case`auth/signout`:return[O(t),T(this._redirectForLogin)];case`auth/redirect`:E(this._redirectForLogin,{next:window.location.href});break;default:let i=e[0];throw Error(`Unhandled Auth message "${i}"`)}return t}};c.dispatcher(w.EVENT_TYPE);function T(e,t={}){return new Promise(n=>{E(e,t),n(c.None)})}function E(e,t={}){if(e){let n=window.location.href,r=new URL(e,n);Object.entries(t).forEach(([e,t])=>r.searchParams.set(e,t)),console.log(`Auth redirecting to `,e),window.history.pushState({},``,e),window.history.go()}}function D(e){let{authenticated:t,username:n}=C.authenticate(e);return{authenticated:t,username:n,token:e}}function O(e){let{authenticated:t,username:n}=S.deauthenticate(new S(e.username));return{username:n,authenticated:t,token:void 0}}function k(e,t=be){return ve(e,t)}var A=Object.defineProperty,j=((e,t)=>{let n={};for(var r in e)A(n,r,{get:e[r],enumerable:!0});return t||A(n,Symbol.toStringTag,{value:`Module`}),n})({Dispatch:()=>N,None:()=>M,dispatch:()=>xe,dispatcher:()=>P}),M=[],N=class extends CustomEvent{constructor(e,t=`un:message`){super(t,{bubbles:!0,composed:!0,detail:e})}};function P(e=`un:message`){return(t,...n)=>t.dispatchEvent(new N(n,e))}var xe=P(),Se=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function F(e,...t){let n={execute(){console.log(`▶️ Executing created effect:`,t,e),e(...t.map(e=>e.open(n))),t.forEach(e=>e.close())}};n.execute()}var I=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},Ce=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&I.scheduler.subscribe(t,e,n)}runEffects(e,t){if(console.log(`⚙️ Running effects for signal`,e,t),I.scheduler.scheduleEffects(t,e),this.host){let n=new Se(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},L=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new Ce,this.object=e,this.proxy=we(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.proxy}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){F(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function we(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&R(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&R(r)&&t.runEffects(n,e),a}})}function R(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}var Te=class{constructor(e,...t){this.effectFn=()=>e(...t)}execute(){this.effectFn()}};function Ee(e,t){return Object.assign(e,{render:t}),e}function De(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var Oe=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return Ee(s,(...e)=>De(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&ke(t,i))return i.mutator(e,t)}}};function ke(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var z=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},B=class extends z{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},Ae=class extends z{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},je=class extends z{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),F((...e)=>{Me(this.fn(...e),i,a)},...r)}}};function Me(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e),o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var Ne=class extends z{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>F((...t)=>{Pe(this.fn(...t),e,this.name)},...n)}};function Pe(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof L&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var Fe=class extends z{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>F((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new Oe().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new B(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new Ae(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new B(e,t)},{place:`element content`,types:e=>Array.isArray(e),mutator:(e,t)=>{let n=new DocumentFragment,r=t.map(e=>e instanceof Node?e:new Text(e?.toString()||``));return n.append(...r),new B(e,n)}},{place:`element content`,types:[`function`],mutator:(e,t)=>new je(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new Ne(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new Fe(e,t)}]);var V=class e extends HTMLElement{static{this.DISCOVERY_EVENT=`un-provider:discover`}static{this.REGISTRY_EVENT=`un-provider:register`}static{this.CHANGE_EVENT=`un-provider:change`}static{document.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail,r=Re(t);r&&n(r)}),document.addEventListener(e.REGISTRY_EVENT,e=>{let[t,n]=e.detail;Le(t,n)})}constructor(t,n){super(),this.contextLabel=n,this.context=new L(t),this.context.setHost(this,e.CHANGE_EVENT),this.addEventListener(e.DISCOVERY_EVENT,e=>{let[t,n]=e.detail;t===this.contextLabel&&(e.stopPropagation(),n(this))});let r=new CustomEvent(e.REGISTRY_EVENT,{bubbles:!0,composed:!0,detail:[this.contextLabel,this]});this.dispatchEvent(r)}attach(t){return this.addEventListener(e.CHANGE_EVENT,t),this.context.toObject()}detach(t){this.removeEventListener(e.CHANGE_EVENT,t)}};function Ie(e,t){return new Promise((n,r)=>{let i=new CustomEvent(V.DISCOVERY_EVENT,{bubbles:!0,composed:!0,detail:[t,e=>e?n(e):r()]});e.isConnected?e.dispatchEvent(i):document.dispatchEvent(i)})}var H={};function Le(e,t){H[e]=t}function Re(e){return H[e]}var ze=class{constructor(e){this.contextLabel=e}observe(e,t){return new Promise((n,r)=>{this.provider?n(this.attachObserver(t)):Ie(e,this.contextLabel).then(e=>{this.provider=e,n(this.attachObserver(t))}).catch(e=>r(e))})}attachObserver(e){let t=this.provider.attach(t=>{let{property:n,value:r}=t.detail,i=new Te(e,{property:n,value:r});console.log(`📡Signal received:`,n,r),i.execute()});return console.log(`👀 Initial observation:`,t),t}},Be=class{constructor(e,t,n=`service:message`,r=!0){this._pending=[],this._context=t,this._update=e,this._eventType=n,this._running=r}attach(e){e.addEventListener(this._eventType,e=>{e.stopPropagation();let t=e.detail;this.consume(t)})}start(){this._running||(console.log(`Starting ${this._eventType} service`),this._running=!0,this._pending.forEach(e=>this.process(e)))}consume(e){if(e.length!==0){let t=e;this._running?this.process(t):(console.log(`📥 Queueing ${this._eventType} message`,e),this._pending.push(t))}}process(e){console.log(`📤 Processing ${this._eventType} message`,e);let t=this._update(e,this._context.toObject());if(console.log(`⏭️ next state: `,t),!Array.isArray(t))this._context.update(t);else{let[e,...n]=t;n.forEach(e=>e.then(e=>this.consume(e))),this._context.update(e)}}};function Ve(e,t){return new He(e,t)}var He=class{constructor(e,t){this.client=e,this.observer=new ze(t)}start(e){return this.observer.observe(this.client,t=>{e(t.property,t.value)})}},U=class{constructor(e,t){this.initialized=!1,this.origin=e;let n=Ue(t).map(([e,t])=>[t,e]);this.inverse=Object.fromEntries(n)}mapObservation(e){let t=Object.entries(e).map(([e,t])=>{let n=this.inverse[e];return n?[n,t]:[]});return Object.fromEntries(t.filter(e=>e.length>0))}start(e){return this.origin.start((t,n)=>{let r=this.inverse[t];e(r,n),this.initialized=!0}).then(e=>this.initialized?{}:this.mapObservation(e))}};function Ue(e){return Object.entries(e).map(([e,t])=>[e,t])}var We=class extends CustomEvent{constructor(e,t){super(e,{bubbles:!0,cancelable:!0,composed:!0,detail:t})}};function W(e,...t){let n={execute(){console.log(`▶️ Executing created effect:`,t,e),e(...t.map(e=>e.open(n))),t.forEach(e=>e.close())}};n.execute()}var G=class e{constructor(){this.signals=new WeakMap,this.scheduled=new WeakSet}static{this.scheduler=new e}subscribe(e,t,n){let r=this.signals.get(e);r||(r=new Map,this.signals.set(e,r));let i=r.get(t);i||(i=new Set,r.set(t,i)),i.add(n)}scheduleEffects(e,t){let n=this.signals.get(e);if(!n)return;let r=n.get(t);if(r)for(let e of r)this.scheduled.has(e)||(this.scheduled.add(e),setTimeout(()=>{this.scheduled.delete(e),e.execute()}))}},Ge=class{constructor(){this.running=[],this.eventType=`un-effect:change`}isRunning(){return this.running.length>0}push(e){this.running.push(e)}pop(){this.running.pop()}current(){let e=this.running.length;return e?this.running[e-1]:void 0}subscribe(e,t){let n=this.current();n&&G.scheduler.subscribe(t,e,n)}runEffects(e,t){if(console.log(`⚙️ Running effects for signal`,e,t),G.scheduler.scheduleEffects(t,e),this.host){let n=new We(this.eventType,{property:e,value:t[e]});this.host.dispatchEvent(n)}}setHost(e,t){this.host=e,t&&(this.eventType=t)}},K=class{static{this.CHANGE_EVENT_TYPE=`un-context:change`}constructor(e,t){t?(this.manager=t.manager,this.object=t.object,this.proxy=t.proxy,this.update(e)):(this.manager=new Ge,this.object=e,this.proxy=Ke(this.object,this.manager))}get(e){return this.proxy[e]}set(e,t){this.proxy[e]=t}toObject(){return this.proxy}update(e){Object.assign(this.proxy,e)}apply(e){this.update(e(this.proxy))}createEffect(e){W(e,this)}setHost(e,t){this.manager.setHost(e,t)}open(e){return this.manager.push(e),this.proxy}close(){this.manager.pop()}};function Ke(e,t){return new Proxy(e,{get:(e,n,r)=>{let i=Reflect.get(e,n,r);return t.isRunning()&&q(i)&&t.subscribe(n,e),i},set:(e,n,r,i)=>{let a=Reflect.set(e,n,r,i);return a&&q(r)&&t.runEffects(n,e),a}})}function q(e){switch(typeof e){case`object`:case`number`:case`string`:case`symbol`:case`boolean`:case`undefined`:return!0;default:return!1}}function qe(e,t){return Object.assign(e,{render:t}),e}function Je(e,t,...n){let r=e.cloneNode(!0);return Array.from(t.entries()).forEach(([e,t])=>{let i=r.querySelector(`[data-${e}]`);i&&t.forEach(e=>e(i,r,...n))}),r}var Ye=class e{static{this.parser=new DOMParser}constructor(e){this.docType=`text/html`,this.plugins=[],e&&(this.docType=e)}use(e){this.plugins=this.plugins.concat(e)}parse(t,n){let r={},i=t.map((e,i)=>{if(i>=n.length)return[e];let a=n[i],o=this.classifyPlace(i,t),s=this.tryReplacements(o,a);if(s){let t=r[o.nodeLabel];switch(t?t.push(s):r[o.nodeLabel]=[s],o.kind){case`attr value`:return[e,`"" data-${o.nodeLabel}`];case`tag content`:return[e,`data-${o.nodeLabel}`];case`element content`:return[e,`<ins data-${o.nodeLabel}></ins>`]}}else throw console.error(`No match for template parameter`,o,a),`Failed to render template parameter ${i} around ${e}`;return[e]}).flat().join(``),a=e.parser.parseFromString(i,this.docType),o=a.head.childElementCount?a.head.children:a.body.children,s=new DocumentFragment;s.replaceChildren(...o);let c=new Map;for(let e in r){let t=s.querySelector(`[data-${e}]`);t&&r[e].forEach(n=>{let r=n.apply(t,s);if(r){let t=c.get(e);t?t.push(r):c.set(e,[r])}})}return qe(s,(...e)=>Je(s,c,...e))}static{this.OPEN_RE=/<([a-zA-z][$a-zA-Z0-9.-]*)\s+[^>]*$/}static{this.IN_TAG_RE=/^(\s+|[^<>]*|"[^"]*")*$/}static{this.ATTR_RE=/([$.]?[a-zA-Z][$a-zA-Z0-9.-]*)=\s*$/}static{this.CLOSE_RE=/[/]?>[^<]*$/}classifyPlace(t,n){let r=null;for(let i=t;i>=0&&!(n[i].match(e.CLOSE_RE)||(r=n[i].match(e.OPEN_RE),r)||!n[i].match(e.IN_TAG_RE));i--);if(r){let i=n[t].match(e.ATTR_RE);return i?{kind:`attr value`,nodeLabel:`node${t}`,tagName:r[1],attrName:i[1]}:{kind:`tag content`,nodeLabel:`node${t}`,tagName:r[1]}}return{kind:`element content`,nodeLabel:`node${t}`}}tryReplacements(e,t){let n=this.plugins;for(let r=0;r<n.length;r++){let i=n[r];if(e.kind===i.place&&Xe(t,i))return i.mutator(e,t)}}};function Xe(e,t){return typeof t.types==`function`?t.types(e,t):t.types.includes(typeof e)}var J=class{constructor(e){this.place=e}apply(e,t){throw`abstract method 'apply' called`}},Y=class extends J{constructor(e,t){super(e),this.content=t}apply(e,t){(e.parentNode||t).replaceChild(this.content,e)}},Ze=class extends J{constructor(e,t){super(e),this.text=t,this.name=e.attrName}apply(e){e.setAttribute(this.name,this.text)}},X=class extends J{constructor(e,t){super(e),this.fn=t}apply(e,t){let n=this.place.nodeLabel;return(e,t,...r)=>{let i=new Comment(` <<< ${n} `),a=new Comment(` >>> ${n} `),o=new DocumentFragment;o.replaceChildren(i,a),(e.parentNode||t).replaceChild(o,e),W((...e)=>{Qe(this.fn(...e),i,a)},...r)}}};function Qe(e,t,n){let r=t.parentNode;if(!r)throw Error(`No parent for placeholder`);let i=e=>{if(Array.isArray(e)){let t=new DocumentFragment,n=e.map(i);return t.replaceChildren(...n),t}else if(e instanceof Node)return e;else return new Text(e?.toString()||``)},a=i(e),o=t.nextSibling;for(;o&&o!==n;){let e=o;o=o.nextSibling,r.removeChild(e)}a&&r.insertBefore(a,n)}var $e=class extends J{constructor(e,t){super(e),this.fn=t,this.name=e.attrName}apply(e,t){return(e,t,...n)=>W((...t)=>{et(this.fn(...t),e,this.name)},...n)}};function et(e,t,n){let r=n.match(/^([.$])(.+)$/);if(r){let[n,i,a]=r;switch(i){case`.`:t[a]=e;break;case`$`:`viewModel`in t&&t.viewModel instanceof K&&t.viewModel.set(a,e);break}}else switch(typeof e){case`string`:t.setAttribute(n,e);break;case`undefined`:case`object`:case`boolean`:e?t.setAttribute(n,n):t.removeAttribute(n);break;default:t.setAttribute(n,e?.toString())}}var tt=class extends J{constructor(e,t){super(e),this.fn=t}apply(e,t){return(e,t,...n)=>W((...t)=>{let n=this.fn(...t);typeof n==`function`&&n(e)},...n)}};new Ye().use([{place:`element content`,types:[`string`,`number`,`bigint`,`symbol`,`boolean`],mutator:(e,t)=>new Y(e,new Text(t?.toString()||``))},{place:`attr value`,types:[`string`,`number`,`bigint`,`symbol`],mutator:(e,t)=>new Ze(e,t?.toString()||``)},{place:`element content`,types:e=>e instanceof Node,mutator:(e,t)=>new Y(e,t)},{place:`element content`,types:e=>Array.isArray(e),mutator:(e,t)=>{let n=new DocumentFragment,r=t.map(e=>e instanceof Node?e:new Text(e?.toString()||``));return n.append(...r),new Y(e,n)}},{place:`element content`,types:[`function`],mutator:(e,t)=>new X(e,t)},{place:`attr value`,types:[`function`],mutator:(e,t)=>new $e(e,t)},{place:`tag content`,types:[`function`],mutator:(e,t)=>new tt(e,t)}]);var Z=class extends K{constructor(e,t){super(e,t)}get $(){return this.toObject()}with(e,...t){let n=Object.fromEntries(t.map(e=>[e,e]));return this.merge(new U(e,n))}withCalculated(e,t){return this.merge(new U(e,t))}withRenamed(e,t){return this.merge(new U(e,t))}merge(e){if(e){let t=new Map;e.start((e,n)=>{this.set(e,n),t.set(e,!0)}).then(e=>{Object.keys(e).filter(e=>!t.get(e)).forEach(t=>{this.set(t,e[t])})})}return this}render(e){return e.render(this)}};function nt(e){return e===void 0?new Z({}):new Z(e)}var rt=n({CONTEXT_DEFAULT:()=>Q,Provider:()=>it,Service:()=>$,dispatch:()=>at}),Q=`context:store`,$=class e extends Be{static{this.EVENT_TYPE=`store:message`}constructor(t,n){super((e,t)=>n(t,e),t,e.EVENT_TYPE)}},it=class extends V{constructor(e,t){super(t,Q),this.viewModel=nt({authenticated:!1}).with(k(this),`authenticated`,`username`,`token`),this._updateFn=e}connectedCallback(){new $(this.context,(e,t)=>this._updateFn(e,t,this.viewModel.toObject())).attach(this)}};function at(e,t){console.log(`📨 Dispatching message:`,t,e),e.dispatchEvent(new j.Dispatch(t,$.EVENT_TYPE))}function ot(e,t=Q){return Ve(e,t)}Object.defineProperty(e,`Store`,{enumerable:!0,get:function(){return rt}}),e.fromStore=ot});
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbndl/store",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "Unbundled library for maintaining client-side state in a store, following the Elm architecture and MVU",
|
|
5
5
|
"main": "./dist/store.js",
|
|
6
6
|
"type": "module",
|
|
7
|
+
"types": "./dist/store.d.ts",
|
|
7
8
|
"scripts": {
|
|
8
9
|
"build": "npx vite build",
|
|
9
10
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
@@ -19,5 +20,11 @@
|
|
|
19
20
|
"The Elm Architecture (TEA)"
|
|
20
21
|
],
|
|
21
22
|
"author": "ken@mnmlst.me",
|
|
22
|
-
"license": "BSD-3-Clause"
|
|
23
|
+
"license": "BSD-3-Clause",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"route-parser": "^0.0.5"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/route-parser": "^0.1.7"
|
|
29
|
+
}
|
|
23
30
|
}
|
package/src/fromStore.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { fromService } from "@unbndl/service";
|
|
2
2
|
import * as Store from "./store.ts";
|
|
3
3
|
|
|
4
4
|
export function fromStore<M extends object>(
|
|
5
5
|
target: HTMLElement,
|
|
6
6
|
contextLabel: string = Store.CONTEXT_DEFAULT
|
|
7
7
|
) {
|
|
8
|
-
return
|
|
8
|
+
return fromService<M>(target, contextLabel);
|
|
9
9
|
}
|
package/vite.config.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { defineConfig } from "vite";
|
|
2
2
|
import { resolve } from "path";
|
|
3
|
+
import dts from "vite-plugin-dts";
|
|
4
|
+
|
|
3
5
|
|
|
4
6
|
export default defineConfig({
|
|
5
7
|
build: {
|
|
@@ -7,5 +9,12 @@ export default defineConfig({
|
|
|
7
9
|
entry: resolve(__dirname, "src/index.ts"),
|
|
8
10
|
name: "store"
|
|
9
11
|
}
|
|
10
|
-
}
|
|
12
|
+
},
|
|
13
|
+
plugins: [
|
|
14
|
+
dts({
|
|
15
|
+
insertTypesEntry: true,
|
|
16
|
+
rollupTypes: true
|
|
17
|
+
})
|
|
18
|
+
]
|
|
19
|
+
|
|
11
20
|
});
|