@ai-ecoverse/slicc-spectrum 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -6
- package/dist/{chunk-JASEW37G.js → chunk-2BBOXTOJ.js} +5 -3
- package/dist/chunk-2EPADERK.js +25260 -0
- package/dist/chunk-2EPADERK.js.map +7 -0
- package/dist/{chunk-HBUX7E54.js → chunk-4JUIYZ4Q.js} +4 -4
- package/dist/{chunk-OFQ56DAN.js → chunk-CDYGCBW7.js} +5 -5
- package/dist/{chunk-YPQKCWWG.js → chunk-FXM4K5WL.js} +4 -4
- package/dist/{chunk-I2NMYJ25.js → chunk-H57UPFSK.js} +3 -3
- package/dist/{chunk-4GQ6THC2.js → chunk-JCRICTXR.js} +6 -6
- package/dist/{chunk-6JNYNXUQ.js → chunk-LR5GBIK7.js} +7 -7
- package/dist/{chunk-6N3GZNXH.js → chunk-MJOCPOXZ.js} +8 -8
- package/dist/{chunk-5XWUZJTT.js → chunk-N27WNL5Q.js} +4 -4
- package/dist/chunk-WCSKGA5W.js +30 -0
- package/dist/chunk-WCSKGA5W.js.map +7 -0
- package/dist/chunk-YWO2TNED.js +71 -0
- package/dist/chunk-YWO2TNED.js.map +7 -0
- package/dist/slicc-dummy.js +981 -115
- package/dist/slicc-dummy.js.map +4 -4
- package/dist/slicc-kernel-model.js +379 -0
- package/dist/slicc-kernel-model.js.map +7 -0
- package/dist/slicc-terminal.js +3 -26
- package/dist/slicc-terminal.js.map +3 -3
- package/dist/slicc-ui.js +2638 -2243
- package/dist/slicc-ui.js.map +4 -4
- package/dist/types/app/app.d.ts +5 -1
- package/dist/types/app/files.d.ts +11 -0
- package/dist/types/app/fonts.d.ts +8 -0
- package/dist/types/app/lucide.d.ts +24 -0
- package/dist/types/app/messages.d.ts +2 -1
- package/dist/types/app/panels.d.ts +3 -3
- package/dist/types/app/spectrum.d.ts +2 -0
- package/dist/types/app/sprinkle.d.ts +18 -1
- package/dist/types/kernel/files.d.ts +20 -0
- package/dist/types/kernel/idle.d.ts +51 -0
- package/dist/types/kernel/index.d.ts +17 -0
- package/dist/types/kernel/terminals.d.ts +21 -0
- package/dist/types/kernel.d.ts +7 -0
- package/dist/types/model/types.d.ts +4 -0
- package/package.json +7 -2
- /package/dist/{chunk-JASEW37G.js.map → chunk-2BBOXTOJ.js.map} +0 -0
- /package/dist/{chunk-HBUX7E54.js.map → chunk-4JUIYZ4Q.js.map} +0 -0
- /package/dist/{chunk-OFQ56DAN.js.map → chunk-CDYGCBW7.js.map} +0 -0
- /package/dist/{chunk-YPQKCWWG.js.map → chunk-FXM4K5WL.js.map} +0 -0
- /package/dist/{chunk-5XWUZJTT.js.map → chunk-H57UPFSK.js.map} +0 -0
- /package/dist/{chunk-4GQ6THC2.js.map → chunk-JCRICTXR.js.map} +0 -0
- /package/dist/{chunk-6JNYNXUQ.js.map → chunk-LR5GBIK7.js.map} +0 -0
- /package/dist/{chunk-6N3GZNXH.js.map → chunk-MJOCPOXZ.js.map} +0 -0
- /package/dist/{chunk-I2NMYJ25.js.map → chunk-N27WNL5Q.js.map} +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
o
|
|
3
|
+
} from "./chunk-2BBOXTOJ.js";
|
|
1
4
|
import {
|
|
2
5
|
defineElement
|
|
3
6
|
} from "./chunk-6A6NIESE.js";
|
|
4
|
-
import {
|
|
5
|
-
o
|
|
6
|
-
} from "./chunk-JASEW37G.js";
|
|
7
7
|
import {
|
|
8
8
|
SpectrumElement,
|
|
9
9
|
b,
|
|
@@ -231,4 +231,4 @@ export {
|
|
|
231
231
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
232
232
|
*)
|
|
233
233
|
*/
|
|
234
|
-
//# sourceMappingURL=chunk-
|
|
234
|
+
//# sourceMappingURL=chunk-4JUIYZ4Q.js.map
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
import {
|
|
24
24
|
o as o2,
|
|
25
25
|
o2 as o3
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-2BBOXTOJ.js";
|
|
27
27
|
import {
|
|
28
28
|
A,
|
|
29
29
|
SpectrumElement,
|
|
@@ -243,7 +243,7 @@ var AbstractOverlay = class _AbstractOverlay extends SpectrumElement {
|
|
|
243
243
|
document.dispatchEvent(e2);
|
|
244
244
|
}
|
|
245
245
|
static async open(e2, r3, n2, a) {
|
|
246
|
-
await import("./chunk-
|
|
246
|
+
await import("./chunk-JCRICTXR.js");
|
|
247
247
|
const m = arguments.length === 2, l2 = n2 || e2, t = new this();
|
|
248
248
|
let p = false;
|
|
249
249
|
t.dispose = () => {
|
|
@@ -2164,9 +2164,9 @@ var InteractionController = class {
|
|
|
2164
2164
|
return;
|
|
2165
2165
|
}
|
|
2166
2166
|
e2 && (customElements.whenDefined("sp-overlay").then(async () => {
|
|
2167
|
-
const { Overlay: t } = await import("./chunk-
|
|
2167
|
+
const { Overlay: t } = await import("./chunk-H57UPFSK.js");
|
|
2168
2168
|
this.overlay = new t(), this.overlay.open = true, this.target[lastInteractionType] = this.type;
|
|
2169
|
-
}), import("./chunk-
|
|
2169
|
+
}), import("./chunk-JCRICTXR.js"));
|
|
2170
2170
|
}
|
|
2171
2171
|
}
|
|
2172
2172
|
get overlay() {
|
|
@@ -2635,4 +2635,4 @@ export {
|
|
|
2635
2635
|
LONGPRESS_INSTRUCTIONS,
|
|
2636
2636
|
Overlay
|
|
2637
2637
|
};
|
|
2638
|
-
//# sourceMappingURL=chunk-
|
|
2638
|
+
//# sourceMappingURL=chunk-CDYGCBW7.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
css_default
|
|
3
|
-
} from "./chunk-LY7WVBCB.js";
|
|
4
1
|
import {
|
|
5
2
|
javascript_default
|
|
6
3
|
} from "./chunk-TAZBKRHT.js";
|
|
4
|
+
import {
|
|
5
|
+
css_default
|
|
6
|
+
} from "./chunk-LY7WVBCB.js";
|
|
7
7
|
import "./chunk-AXQFWXYZ.js";
|
|
8
8
|
|
|
9
9
|
// node_modules/@shikijs/langs/dist/html.mjs
|
|
@@ -16,4 +16,4 @@ var html_default = [
|
|
|
16
16
|
export {
|
|
17
17
|
html_default as default
|
|
18
18
|
};
|
|
19
|
-
//# sourceMappingURL=chunk-
|
|
19
|
+
//# sourceMappingURL=chunk-FXM4K5WL.js.map
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
LONGPRESS_INSTRUCTIONS,
|
|
3
3
|
Overlay
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-CDYGCBW7.js";
|
|
5
5
|
import "./chunk-IBQ4O4NO.js";
|
|
6
6
|
import "./chunk-ZMBN6APP.js";
|
|
7
7
|
import "./chunk-Y4Z7K443.js";
|
|
8
8
|
import "./chunk-364Y2XOJ.js";
|
|
9
9
|
import "./chunk-ER3HU7OE.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-2BBOXTOJ.js";
|
|
11
11
|
import "./chunk-TS7SL372.js";
|
|
12
12
|
import "./chunk-AXQFWXYZ.js";
|
|
13
13
|
export {
|
|
14
14
|
LONGPRESS_INSTRUCTIONS,
|
|
15
15
|
Overlay
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-H57UPFSK.js.map
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
defineElement
|
|
3
|
-
} from "./chunk-6A6NIESE.js";
|
|
4
1
|
import {
|
|
5
2
|
Overlay
|
|
6
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CDYGCBW7.js";
|
|
7
4
|
import "./chunk-IBQ4O4NO.js";
|
|
8
5
|
import "./chunk-ZMBN6APP.js";
|
|
9
6
|
import "./chunk-Y4Z7K443.js";
|
|
10
7
|
import "./chunk-364Y2XOJ.js";
|
|
11
8
|
import "./chunk-ER3HU7OE.js";
|
|
12
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-2BBOXTOJ.js";
|
|
10
|
+
import {
|
|
11
|
+
defineElement
|
|
12
|
+
} from "./chunk-6A6NIESE.js";
|
|
13
13
|
import "./chunk-TS7SL372.js";
|
|
14
14
|
import "./chunk-AXQFWXYZ.js";
|
|
15
15
|
|
|
16
16
|
// node_modules/@spectrum-web-components/overlay/sp-overlay.js
|
|
17
17
|
defineElement("sp-overlay", Overlay);
|
|
18
|
-
//# sourceMappingURL=chunk-
|
|
18
|
+
//# sourceMappingURL=chunk-JCRICTXR.js.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
MatchMediaController
|
|
3
|
-
} from "./chunk-5OVGH7HO.js";
|
|
4
|
-
import {
|
|
5
|
-
defineElement
|
|
6
|
-
} from "./chunk-6A6NIESE.js";
|
|
7
1
|
import {
|
|
8
2
|
firstFocusableIn
|
|
9
3
|
} from "./chunk-IBQ4O4NO.js";
|
|
10
4
|
import "./chunk-ZMBN6APP.js";
|
|
5
|
+
import {
|
|
6
|
+
MatchMediaController
|
|
7
|
+
} from "./chunk-5OVGH7HO.js";
|
|
11
8
|
import {
|
|
12
9
|
r
|
|
13
10
|
} from "./chunk-ER3HU7OE.js";
|
|
11
|
+
import {
|
|
12
|
+
defineElement
|
|
13
|
+
} from "./chunk-6A6NIESE.js";
|
|
14
14
|
import {
|
|
15
15
|
A,
|
|
16
16
|
SpectrumElement,
|
|
@@ -177,4 +177,4 @@ i3([n({ type: Boolean, reflect: true })], Tray.prototype, "open", 2), i3([e(".tr
|
|
|
177
177
|
|
|
178
178
|
// node_modules/@spectrum-web-components/tray/sp-tray.js
|
|
179
179
|
defineElement("sp-tray", Tray);
|
|
180
|
-
//# sourceMappingURL=chunk-
|
|
180
|
+
//# sourceMappingURL=chunk-LR5GBIK7.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
focusableSelector
|
|
3
|
+
} from "./chunk-ZMBN6APP.js";
|
|
1
4
|
import {
|
|
2
5
|
DependencyManagerController
|
|
3
6
|
} from "./chunk-EN3XGF2M.js";
|
|
7
|
+
import {
|
|
8
|
+
o
|
|
9
|
+
} from "./chunk-2BBOXTOJ.js";
|
|
4
10
|
import {
|
|
5
11
|
defineElement
|
|
6
12
|
} from "./chunk-6A6NIESE.js";
|
|
7
|
-
import {
|
|
8
|
-
focusableSelector
|
|
9
|
-
} from "./chunk-ZMBN6APP.js";
|
|
10
|
-
import {
|
|
11
|
-
o
|
|
12
|
-
} from "./chunk-JASEW37G.js";
|
|
13
13
|
import {
|
|
14
14
|
SpectrumElement,
|
|
15
15
|
b,
|
|
@@ -146,7 +146,7 @@ var Tooltip = class extends SpectrumElement {
|
|
|
146
146
|
<span id="tip" aria-hidden="true"></span>
|
|
147
147
|
</sp-tooltip-openable>
|
|
148
148
|
`;
|
|
149
|
-
return this.selfManaged ? (this.dependencyManager.add("sp-overlay"), import("./chunk-
|
|
149
|
+
return this.selfManaged ? (this.dependencyManager.add("sp-overlay"), import("./chunk-JCRICTXR.js"), b`
|
|
150
150
|
<sp-overlay
|
|
151
151
|
?open=${this.open && !this.disabled && this.dependencyManager.loaded}
|
|
152
152
|
?delayed=${this.delayed}
|
|
@@ -178,4 +178,4 @@ o3([n({ type: Boolean })], Tooltip.prototype, "delayed", 2), o3([n({ type: Boole
|
|
|
178
178
|
|
|
179
179
|
// node_modules/@spectrum-web-components/tooltip/sp-tooltip.js
|
|
180
180
|
defineElement("sp-tooltip", Tooltip);
|
|
181
|
-
//# sourceMappingURL=chunk-
|
|
181
|
+
//# sourceMappingURL=chunk-MJOCPOXZ.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import "./chunk-
|
|
2
|
-
import "./chunk-6A6NIESE.js";
|
|
1
|
+
import "./chunk-4JUIYZ4Q.js";
|
|
3
2
|
import "./chunk-364Y2XOJ.js";
|
|
4
3
|
import "./chunk-ER3HU7OE.js";
|
|
5
|
-
import "./chunk-
|
|
4
|
+
import "./chunk-2BBOXTOJ.js";
|
|
5
|
+
import "./chunk-6A6NIESE.js";
|
|
6
6
|
import "./chunk-TS7SL372.js";
|
|
7
7
|
import "./chunk-AXQFWXYZ.js";
|
|
8
|
-
//# sourceMappingURL=chunk-
|
|
8
|
+
//# sourceMappingURL=chunk-N27WNL5Q.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// src/kernel-backend.ts
|
|
2
|
+
var encoder = new TextEncoder();
|
|
3
|
+
function kernelBackend(kernel, { argv = ["bash", "-i"], cwd, env } = {}) {
|
|
4
|
+
return {
|
|
5
|
+
async open(sink, { cols, rows }) {
|
|
6
|
+
const onData = (bytes) => sink.output(bytes);
|
|
7
|
+
const terminal = await kernel.openTerminal(argv, { cwd, env, cols, rows, onData });
|
|
8
|
+
terminal.exited.then(
|
|
9
|
+
(status) => sink.exit(status),
|
|
10
|
+
(error) => {
|
|
11
|
+
sink.output(encoder.encode(`\r
|
|
12
|
+
${error instanceof Error ? error.message : error}\r
|
|
13
|
+
`));
|
|
14
|
+
sink.exit(1);
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
return {
|
|
18
|
+
write: (data) => terminal.write(data),
|
|
19
|
+
resize: (c, r) => terminal.resize(c, r),
|
|
20
|
+
signal: (name) => terminal.signal(name),
|
|
21
|
+
close: () => terminal.close()
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export {
|
|
28
|
+
kernelBackend
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=chunk-WCSKGA5W.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/kernel-backend.ts"],
|
|
4
|
+
"sourcesContent": ["import type { TerminalBackend, TerminalSignal } from './backend.ts';\n\nexport interface KernelTerminal {\n readonly exited: Promise<number>;\n write(data: Uint8Array): void;\n resize(cols: number, rows: number): void;\n signal(name: TerminalSignal): void;\n close(): void;\n}\n\nexport interface KernelTerminalOptions {\n cwd?: string;\n env?: Record<string, string>;\n cols: number;\n rows: number;\n onData: (bytes: Uint8Array) => void;\n}\n\nexport interface TerminalKernel {\n openTerminal(argv: string[], options: KernelTerminalOptions): Promise<KernelTerminal>;\n}\n\nexport interface KernelBackendOptions {\n argv?: string[];\n cwd?: string;\n env?: Record<string, string>;\n}\n\nconst encoder = new TextEncoder();\n\nexport function kernelBackend(\n kernel: TerminalKernel,\n { argv = ['bash', '-i'], cwd, env }: KernelBackendOptions = {}\n): TerminalBackend {\n return {\n async open(sink, { cols, rows }) {\n const onData = (bytes: Uint8Array) => sink.output(bytes);\n const terminal = await kernel.openTerminal(argv, { cwd, env, cols, rows, onData });\n terminal.exited.then(\n (status) => sink.exit(status),\n (error) => {\n sink.output(encoder.encode(`\\r\\n${error instanceof Error ? error.message : error}\\r\\n`));\n sink.exit(1);\n }\n );\n return {\n write: (data) => terminal.write(data),\n resize: (c, r) => terminal.resize(c, r),\n signal: (name) => terminal.signal(name),\n close: () => terminal.close(),\n };\n },\n };\n}\n"],
|
|
5
|
+
"mappings": ";AA4BA,IAAM,UAAU,IAAI,YAAY;AAEzB,SAAS,cACd,QACA,EAAE,OAAO,CAAC,QAAQ,IAAI,GAAG,KAAK,IAAI,IAA0B,CAAC,GAC5C;AACjB,SAAO;AAAA,IACL,MAAM,KAAK,MAAM,EAAE,MAAM,KAAK,GAAG;AAC/B,YAAM,SAAS,CAAC,UAAsB,KAAK,OAAO,KAAK;AACvD,YAAM,WAAW,MAAM,OAAO,aAAa,MAAM,EAAE,KAAK,KAAK,MAAM,MAAM,OAAO,CAAC;AACjF,eAAS,OAAO;AAAA,QACd,CAAC,WAAW,KAAK,KAAK,MAAM;AAAA,QAC5B,CAAC,UAAU;AACT,eAAK,OAAO,QAAQ,OAAO;AAAA,EAAO,iBAAiB,QAAQ,MAAM,UAAU,KAAK;AAAA,CAAM,CAAC;AACvF,eAAK,KAAK,CAAC;AAAA,QACb;AAAA,MACF;AACA,aAAO;AAAA,QACL,OAAO,CAAC,SAAS,SAAS,MAAM,IAAI;AAAA,QACpC,QAAQ,CAAC,GAAG,MAAM,SAAS,OAAO,GAAG,CAAC;AAAA,QACtC,QAAQ,CAAC,SAAS,SAAS,OAAO,IAAI;AAAA,QACtC,OAAO,MAAM,SAAS,MAAM;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Emitter
|
|
3
|
+
} from "./chunk-T5NHW4KC.js";
|
|
4
|
+
|
|
5
|
+
// src/dummy/clock.ts
|
|
6
|
+
function clock(delay) {
|
|
7
|
+
return {
|
|
8
|
+
delay,
|
|
9
|
+
sleep: (ticks = 1) => new Promise((resolve) => setTimeout(resolve, delay * ticks))
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// src/dummy/settings.ts
|
|
14
|
+
var key = "slicc-ui.settings";
|
|
15
|
+
var DummySettings = class extends Emitter {
|
|
16
|
+
#settings;
|
|
17
|
+
#accounts;
|
|
18
|
+
#models;
|
|
19
|
+
#storage;
|
|
20
|
+
#clock;
|
|
21
|
+
constructor(defaults, models, accounts, storage, clock2) {
|
|
22
|
+
super();
|
|
23
|
+
this.#storage = storage;
|
|
24
|
+
this.#clock = clock2;
|
|
25
|
+
this.#models = models;
|
|
26
|
+
this.#accounts = accounts.map((account) => ({ ...account }));
|
|
27
|
+
this.#settings = { ...defaults, ...this.#load() };
|
|
28
|
+
}
|
|
29
|
+
#load() {
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(this.#storage?.getItem(key) ?? "{}");
|
|
32
|
+
} catch {
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
get() {
|
|
37
|
+
return { ...this.#settings };
|
|
38
|
+
}
|
|
39
|
+
update(patch) {
|
|
40
|
+
this.#settings = { ...this.#settings, ...patch };
|
|
41
|
+
this.#storage?.setItem(key, JSON.stringify(this.#settings));
|
|
42
|
+
this.emit("settings", this.get());
|
|
43
|
+
}
|
|
44
|
+
models() {
|
|
45
|
+
return this.#models;
|
|
46
|
+
}
|
|
47
|
+
accounts() {
|
|
48
|
+
return this.#accounts.map((account) => ({ ...account }));
|
|
49
|
+
}
|
|
50
|
+
#set(id, patch) {
|
|
51
|
+
this.#accounts = this.#accounts.map(
|
|
52
|
+
(account) => account.id === id ? { ...account, ...patch } : account
|
|
53
|
+
);
|
|
54
|
+
this.emit("accounts", this.accounts());
|
|
55
|
+
}
|
|
56
|
+
async connect(id) {
|
|
57
|
+
await this.#clock.sleep(10);
|
|
58
|
+
const account = this.#accounts.find((candidate) => candidate.id === id);
|
|
59
|
+
const identity = account?.identity || `${id}-user@example.com`;
|
|
60
|
+
this.#set(id, { status: "connected", identity });
|
|
61
|
+
}
|
|
62
|
+
disconnect(id) {
|
|
63
|
+
this.#set(id, { status: "disconnected" });
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export {
|
|
68
|
+
clock,
|
|
69
|
+
DummySettings
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=chunk-YWO2TNED.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/dummy/clock.ts", "../src/dummy/settings.ts"],
|
|
4
|
+
"sourcesContent": ["export interface Clock {\n delay: number;\n sleep(ticks?: number): Promise<void>;\n}\n\nexport function clock(delay: number): Clock {\n return {\n delay,\n sleep: (ticks = 1) => new Promise((resolve) => setTimeout(resolve, delay * ticks)),\n };\n}\n", "import { Emitter } from '../model/emitter.ts';\nimport type {\n Account,\n ModelOption,\n Settings,\n SettingsEvents,\n SettingsPort,\n} from '../model/types.ts';\nimport type { Clock } from './clock.ts';\n\nconst key = 'slicc-ui.settings';\n\nexport class DummySettings extends Emitter<SettingsEvents> implements SettingsPort {\n #settings: Settings;\n #accounts: Account[];\n #models: readonly ModelOption[];\n #storage: Storage | null;\n #clock: Clock;\n\n constructor(\n defaults: Settings,\n models: readonly ModelOption[],\n accounts: readonly Account[],\n storage: Storage | null,\n clock: Clock\n ) {\n super();\n this.#storage = storage;\n this.#clock = clock;\n this.#models = models;\n this.#accounts = accounts.map((account) => ({ ...account }));\n this.#settings = { ...defaults, ...this.#load() };\n }\n\n #load(): Partial<Settings> {\n try {\n return JSON.parse(this.#storage?.getItem(key) ?? '{}');\n } catch {\n return {};\n }\n }\n\n get(): Settings {\n return { ...this.#settings };\n }\n\n update(patch: Partial<Settings>): void {\n this.#settings = { ...this.#settings, ...patch };\n this.#storage?.setItem(key, JSON.stringify(this.#settings));\n this.emit('settings', this.get());\n }\n\n models(): readonly ModelOption[] {\n return this.#models;\n }\n\n accounts(): readonly Account[] {\n return this.#accounts.map((account) => ({ ...account }));\n }\n\n #set(id: string, patch: Partial<Account>): void {\n this.#accounts = this.#accounts.map((account) =>\n account.id === id ? { ...account, ...patch } : account\n );\n this.emit('accounts', this.accounts());\n }\n\n async connect(id: string): Promise<void> {\n await this.#clock.sleep(10);\n const account = this.#accounts.find((candidate) => candidate.id === id);\n const identity = account?.identity || `${id}-user@example.com`;\n this.#set(id, { status: 'connected', identity });\n }\n\n disconnect(id: string): void {\n this.#set(id, { status: 'disconnected' });\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAKO,SAAS,MAAM,OAAsB;AAC1C,SAAO;AAAA,IACL;AAAA,IACA,OAAO,CAAC,QAAQ,MAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,QAAQ,KAAK,CAAC;AAAA,EACnF;AACF;;;ACAA,IAAM,MAAM;AAEL,IAAM,gBAAN,cAA4B,QAAgD;AAAA,EACjF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YACE,UACA,QACA,UACA,SACAA,QACA;AACA,UAAM;AACN,SAAK,WAAW;AAChB,SAAK,SAASA;AACd,SAAK,UAAU;AACf,SAAK,YAAY,SAAS,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,EAAE;AAC3D,SAAK,YAAY,EAAE,GAAG,UAAU,GAAG,KAAK,MAAM,EAAE;AAAA,EAClD;AAAA,EAEA,QAA2B;AACzB,QAAI;AACF,aAAO,KAAK,MAAM,KAAK,UAAU,QAAQ,GAAG,KAAK,IAAI;AAAA,IACvD,QAAQ;AACN,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAgB;AACd,WAAO,EAAE,GAAG,KAAK,UAAU;AAAA,EAC7B;AAAA,EAEA,OAAO,OAAgC;AACrC,SAAK,YAAY,EAAE,GAAG,KAAK,WAAW,GAAG,MAAM;AAC/C,SAAK,UAAU,QAAQ,KAAK,KAAK,UAAU,KAAK,SAAS,CAAC;AAC1D,SAAK,KAAK,YAAY,KAAK,IAAI,CAAC;AAAA,EAClC;AAAA,EAEA,SAAiC;AAC/B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,WAA+B;AAC7B,WAAO,KAAK,UAAU,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,EAAE;AAAA,EACzD;AAAA,EAEA,KAAK,IAAY,OAA+B;AAC9C,SAAK,YAAY,KAAK,UAAU;AAAA,MAAI,CAAC,YACnC,QAAQ,OAAO,KAAK,EAAE,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,IACjD;AACA,SAAK,KAAK,YAAY,KAAK,SAAS,CAAC;AAAA,EACvC;AAAA,EAEA,MAAM,QAAQ,IAA2B;AACvC,UAAM,KAAK,OAAO,MAAM,EAAE;AAC1B,UAAM,UAAU,KAAK,UAAU,KAAK,CAAC,cAAc,UAAU,OAAO,EAAE;AACtE,UAAM,WAAW,SAAS,YAAY,GAAG,EAAE;AAC3C,SAAK,KAAK,IAAI,EAAE,QAAQ,aAAa,SAAS,CAAC;AAAA,EACjD;AAAA,EAEA,WAAW,IAAkB;AAC3B,SAAK,KAAK,IAAI,EAAE,QAAQ,eAAe,CAAC;AAAA,EAC1C;AACF;",
|
|
6
|
+
"names": ["clock"]
|
|
7
|
+
}
|