boo-flash 0.1.6 → 0.1.8
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 +16 -0
- package/THIRD_PARTY_NOTICES +24 -0
- package/dist/app.js +471 -430
- package/package.json +2 -3
package/dist/app.js
CHANGED
|
@@ -2547,12 +2547,37 @@ var palette = (() => {
|
|
|
2547
2547
|
// src/App.tsx
|
|
2548
2548
|
import { TextAttributes as TextAttributes2 } from "@opentui/core";
|
|
2549
2549
|
|
|
2550
|
+
// ../../apps/shared/BooLogoData.ts
|
|
2551
|
+
var LIGHT_COLORS = { inkColor: "#002B8F", accentColor: "#00E5FF", highlightColor: "#D0FAFF" };
|
|
2552
|
+
var DARK_COLORS = { inkColor: "#8EEDFC", accentColor: "#235664", highlightColor: "#173D4B" };
|
|
2553
|
+
var PATTERNS = {
|
|
2554
|
+
".": [" ", 0, 0],
|
|
2555
|
+
A: [" ", 1, 1],
|
|
2556
|
+
B: ["\u2582", 1, 0],
|
|
2557
|
+
C: [" ", 2, 2],
|
|
2558
|
+
D: [" ", 3, 3],
|
|
2559
|
+
E: ["\u{1FB85}", 1, 0]
|
|
2560
|
+
};
|
|
2561
|
+
var ROWS = [
|
|
2562
|
+
"....AAAAAAAAAAAABB............................",
|
|
2563
|
+
"BBAACCDD........EEBB..........................",
|
|
2564
|
+
"AACCDD............AA....................AAAAAA",
|
|
2565
|
+
"AACCCCDD..BB..BB..AA....AA......AAAAAA..AA..AA",
|
|
2566
|
+
"EEAACCDD..AA..AA..AA....AAAAAA..AA..AA..AACCAA",
|
|
2567
|
+
"..AACCDD..AA..AA..AA....AA..AA..AACCAA..AACCAA",
|
|
2568
|
+
"..AACCDD..EE..EE..AA....AACCAA..AACCAA..AACCAA",
|
|
2569
|
+
"..AACCDD..........AA....AACCAA..AACCAA..AACCAA",
|
|
2570
|
+
"..AACCDD..........AA....AACCAA..AACCAA..AACCAA",
|
|
2571
|
+
"..AACCDD..........AA....AAAAAA..AAAAAA..AAAAAA",
|
|
2572
|
+
"..AACCAA..AA..AA..AA..........................",
|
|
2573
|
+
"....AA..AA..AA..AA............................"
|
|
2574
|
+
];
|
|
2575
|
+
|
|
2550
2576
|
// src/backend.ts
|
|
2551
2577
|
import { createHash as createHash2 } from "node:crypto";
|
|
2552
2578
|
import { chmod as chmod2, mkdtemp, open as open2, rm } from "node:fs/promises";
|
|
2553
2579
|
import { tmpdir as tmpdir4 } from "node:os";
|
|
2554
2580
|
import { dirname as dirname3, join as join5 } from "node:path";
|
|
2555
|
-
import { setTimeout as delay } from "node:timers/promises";
|
|
2556
2581
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
2557
2582
|
|
|
2558
2583
|
// src/backends/macos.ts
|
|
@@ -3567,105 +3592,40 @@ async function discoverCandidates(signal) {
|
|
|
3567
3592
|
], signal, { limit: 1024 ** 2 })));
|
|
3568
3593
|
}
|
|
3569
3594
|
var FlashBackend = class {
|
|
3570
|
-
constructor(demo2) {
|
|
3571
|
-
this.demo = demo2;
|
|
3572
|
-
}
|
|
3573
|
-
demo;
|
|
3574
|
-
demoInstalled = false;
|
|
3575
3595
|
requirePlatform() {
|
|
3576
3596
|
if (process.platform === "darwin") return platform;
|
|
3577
3597
|
if (process.platform === "linux") return platform2;
|
|
3578
|
-
throw new Error("Boo Flash supports macOS and Linux.
|
|
3598
|
+
throw new Error("Boo Flash supports macOS and Linux.");
|
|
3579
3599
|
}
|
|
3580
3600
|
get platformLabel() {
|
|
3581
|
-
return this.
|
|
3601
|
+
return this.requirePlatform().label;
|
|
3582
3602
|
}
|
|
3583
3603
|
get successTitle() {
|
|
3584
|
-
return this.
|
|
3604
|
+
return this.requirePlatform().successTitle;
|
|
3585
3605
|
}
|
|
3586
3606
|
get successDetail() {
|
|
3587
|
-
return this.
|
|
3607
|
+
return this.requirePlatform().successDetail;
|
|
3588
3608
|
}
|
|
3589
3609
|
async clearCache(signal) {
|
|
3590
|
-
if (this.demo) return "Demo only: no cached images or USB contents were changed.";
|
|
3591
3610
|
return clearCachedImages(signal);
|
|
3592
3611
|
}
|
|
3593
3612
|
dependencies() {
|
|
3594
|
-
|
|
3595
|
-
const setup = this.demo.startsWith("setup") || this.demo === "no-homebrew";
|
|
3596
|
-
return {
|
|
3597
|
-
missing: !setup || this.demoInstalled ? [] : ["zstd"],
|
|
3598
|
-
installer: this.demo === "no-homebrew" ? null : "Homebrew",
|
|
3599
|
-
guidance: "Demo dependency guidance."
|
|
3600
|
-
};
|
|
3613
|
+
return this.requirePlatform().dependencies();
|
|
3601
3614
|
}
|
|
3602
3615
|
async installDependencies(approved, signal, terminal) {
|
|
3603
|
-
|
|
3604
|
-
return terminal(() => this.requirePlatform().installDependencies(approved, signal));
|
|
3605
|
-
}
|
|
3606
|
-
await delay(2e3, void 0, { signal });
|
|
3607
|
-
return terminal(async () => {
|
|
3608
|
-
process.stdout.write("\nDEMO dependency setup: no software is installed.\nSimulating Homebrew terminal handoff. Ctrl-C cancels and quits.\n");
|
|
3609
|
-
await delay(3e3);
|
|
3610
|
-
if (this.demo === "setup-interrupted") process.stdout.write("Simulated Homebrew interruption result, without signaling Boo Flash. Quitting.\n");
|
|
3611
|
-
if (signal.aborted || this.demo === "setup-interrupted") return "cancelled";
|
|
3612
|
-
if (this.demo === "setup-error") throw new Error("Simulated Homebrew failure. No software was installed. Resolve the reported issue, then refresh to retry.");
|
|
3613
|
-
this.demoInstalled = true;
|
|
3614
|
-
return "installed";
|
|
3615
|
-
});
|
|
3616
|
+
return terminal(() => this.requirePlatform().installDependencies(approved, signal));
|
|
3616
3617
|
}
|
|
3617
3618
|
async catalog(signal) {
|
|
3618
|
-
|
|
3619
|
-
await delay(350, void 0, { signal });
|
|
3620
|
-
return { run: 149, version: "0.1.0+149", revision: "9b7574859120add5a1a478bc7923aeb1629be4ba", timestamp: new Date(Date.now() - 10 * 60 * 1e3).toISOString(), images: profiles.map((profile, index) => ({
|
|
3621
|
-
profile,
|
|
3622
|
-
id: index,
|
|
3623
|
-
name: `demo-${profile}`,
|
|
3624
|
-
bytes: 1083197973,
|
|
3625
|
-
digest: "demo"
|
|
3626
|
-
})) };
|
|
3619
|
+
return discoverImages(signal);
|
|
3627
3620
|
}
|
|
3628
3621
|
async candidates(signal) {
|
|
3629
|
-
|
|
3630
|
-
const catalog = await this.catalog(signal);
|
|
3631
|
-
return this.demo === "empty" ? [] : [{
|
|
3632
|
-
...catalog,
|
|
3633
|
-
timestamp: new Date(Date.now() - 5 * 60 * 1e3).toISOString(),
|
|
3634
|
-
images: [catalog.images[0]],
|
|
3635
|
-
candidate: { number: 1 }
|
|
3636
|
-
}];
|
|
3622
|
+
return discoverCandidates(signal);
|
|
3637
3623
|
}
|
|
3638
3624
|
async disks(signal, staging = tmpdir4(), unmounted) {
|
|
3639
|
-
if (this.demo) {
|
|
3640
|
-
await delay(250, void 0, { signal });
|
|
3641
|
-
return this.demo === "empty" ? [] : [
|
|
3642
|
-
{ id: "demo-usb-a", name: "SanDisk Ultra USB 3.0", bytes: 32 * 1024 ** 3, identity: "demo-a" },
|
|
3643
|
-
{ id: "demo-usb-b", name: "Kingston DataTraveler", bytes: 64 * 1024 ** 3, identity: "demo-b" }
|
|
3644
|
-
];
|
|
3645
|
-
}
|
|
3646
3625
|
if (process.getuid?.() === 0) throw new Error(`Run Boo Flash on ${this.requirePlatform().id === "macos" ? "macOS" : "Linux"} as your normal user, not with sudo.`);
|
|
3647
3626
|
return this.requirePlatform().disks(signal, moduleDirectory, staging, unmounted);
|
|
3648
3627
|
}
|
|
3649
3628
|
async flash(catalog, image, disk, signal, update, authorize2) {
|
|
3650
|
-
if (this.demo) {
|
|
3651
|
-
if (!disk.id.startsWith("demo-") || image.digest !== "demo") throw new Error("Invalid demo selection.");
|
|
3652
|
-
for (const stage of ["Downloading", "Verifying", "Unmounting", "Writing", "Flushing", "Ejecting"]) {
|
|
3653
|
-
const total = stage === "Downloading" ? image.bytes : stage === "Writing" ? 8 * 1024 ** 3 : void 0;
|
|
3654
|
-
for (let i = 0; i <= (total ? 30 : 5); i++) {
|
|
3655
|
-
signal.throwIfAborted();
|
|
3656
|
-
update({
|
|
3657
|
-
stage,
|
|
3658
|
-
detail: "Simulated activity. No disk commands are run.",
|
|
3659
|
-
total,
|
|
3660
|
-
bytes: total ? Math.round(total * i / 30) : void 0,
|
|
3661
|
-
speed: total ? total / 3 : void 0
|
|
3662
|
-
});
|
|
3663
|
-
await delay(100, void 0, { signal });
|
|
3664
|
-
if (this.demo === "error" && stage === "Writing" && i === 13) throw new Error("Demo write failure. No disks were written or ejected. Refresh to choose again.");
|
|
3665
|
-
}
|
|
3666
|
-
}
|
|
3667
|
-
return;
|
|
3668
|
-
}
|
|
3669
3629
|
const platform3 = this.requirePlatform();
|
|
3670
3630
|
if (process.getuid?.() === 0) throw new Error(`Run Boo Flash on ${platform3.id === "macos" ? "macOS" : "Linux"} as your normal user, not with sudo.`);
|
|
3671
3631
|
if (!diskID3.test(disk.id) || !catalog.images.includes(image) || !profiles.includes(image.profile) || !positive(image.id) || !positive(image.bytes) || !sha256.test(image.digest)) throw new Error("Invalid flash selection.");
|
|
@@ -3790,13 +3750,54 @@ var FlashBackend = class {
|
|
|
3790
3750
|
}
|
|
3791
3751
|
}
|
|
3792
3752
|
async authorize(signal) {
|
|
3793
|
-
if (this.demo) return;
|
|
3794
3753
|
if (process.getuid?.() === 0) throw new Error("Run Boo Flash as your normal user, not with sudo.");
|
|
3795
3754
|
await this.requirePlatform().authorize(signal);
|
|
3796
3755
|
}
|
|
3797
3756
|
};
|
|
3798
3757
|
|
|
3758
|
+
// package.json
|
|
3759
|
+
var version = "0.1.8";
|
|
3760
|
+
|
|
3799
3761
|
// src/App.tsx
|
|
3762
|
+
function FlashLogo() {
|
|
3763
|
+
const theme = themes.find((entry) => entry.ui === palette && !entry.error)?.kind === "Light" ? LIGHT_COLORS : DARK_COLORS;
|
|
3764
|
+
const colors2 = [palette.background, theme.inkColor, theme.accentColor, theme.highlightColor];
|
|
3765
|
+
const rows = Array.from({
|
|
3766
|
+
length: 6
|
|
3767
|
+
}, (_, y) => Array.from({
|
|
3768
|
+
length: 23
|
|
3769
|
+
}, (_2, x) => [PATTERNS[ROWS[y * 2][x * 2]][1], PATTERNS[ROWS[y * 2 + 1][x * 2]][1]]));
|
|
3770
|
+
return (() => {
|
|
3771
|
+
var _el$ = createElement("box");
|
|
3772
|
+
setProp(_el$, "id", "flash-logo");
|
|
3773
|
+
setProp(_el$, "width", 23);
|
|
3774
|
+
setProp(_el$, "height", 6);
|
|
3775
|
+
setProp(_el$, "flexShrink", 0);
|
|
3776
|
+
setProp(_el$, "marginBottom", 1);
|
|
3777
|
+
insert(_el$, createComponent2(For, {
|
|
3778
|
+
each: rows,
|
|
3779
|
+
children: (row) => (() => {
|
|
3780
|
+
var _el$2 = createElement("text");
|
|
3781
|
+
setProp(_el$2, "height", 1);
|
|
3782
|
+
setProp(_el$2, "wrapMode", "none");
|
|
3783
|
+
insert(_el$2, createComponent2(For, {
|
|
3784
|
+
each: row,
|
|
3785
|
+
children: ([top, bottom]) => (() => {
|
|
3786
|
+
var _el$3 = createElement("span");
|
|
3787
|
+
insert(_el$3, top === bottom ? " " : "\u2580");
|
|
3788
|
+
effect((_$p) => setProp(_el$3, "style", {
|
|
3789
|
+
fg: colors2[top],
|
|
3790
|
+
bg: colors2[bottom]
|
|
3791
|
+
}, _$p));
|
|
3792
|
+
return _el$3;
|
|
3793
|
+
})()
|
|
3794
|
+
}));
|
|
3795
|
+
return _el$2;
|
|
3796
|
+
})()
|
|
3797
|
+
}));
|
|
3798
|
+
return _el$;
|
|
3799
|
+
})();
|
|
3800
|
+
}
|
|
3800
3801
|
function App(props) {
|
|
3801
3802
|
const renderer = useRenderer();
|
|
3802
3803
|
const dimensions = useTerminalDimensions();
|
|
@@ -3845,7 +3846,12 @@ function App(props) {
|
|
|
3845
3846
|
const visible = () => dimensions().width >= 40 && dimensions().height >= 16;
|
|
3846
3847
|
const options = () => screen() === "profile" ? 5 : screen() === "cleared" ? 1 : screen() === "candidates" ? Math.max(1, candidates().length) : screen() === "disks" ? disks3().length : 2;
|
|
3847
3848
|
const percent = () => progress().total ? Math.min(100, Math.floor((progress().bytes ?? 0) / progress().total * 100)) : void 0;
|
|
3848
|
-
const path = (d) =>
|
|
3849
|
+
const path = (d) => `/dev/${d.id}`;
|
|
3850
|
+
const selection = () => {
|
|
3851
|
+
const c = catalog(), i = image();
|
|
3852
|
+
if (!c || !i) return "";
|
|
3853
|
+
return `Boo ${c.version}${c.candidate ? ` candidate #${c.candidate.number}` : ""} / ${i.profile.toUpperCase()}${c.candidate ? ` / ${c.revision.slice(0, 7)}` : ""}`;
|
|
3854
|
+
};
|
|
3849
3855
|
const operation = (work) => {
|
|
3850
3856
|
controller = new AbortController();
|
|
3851
3857
|
setStopping(false);
|
|
@@ -3856,7 +3862,7 @@ function App(props) {
|
|
|
3856
3862
|
} catch (e) {
|
|
3857
3863
|
if (!closing) {
|
|
3858
3864
|
const setup = screen() === "installing";
|
|
3859
|
-
setError(controller.signal.aborted && setup ? "Setup cancelled. Refresh to check what is still missing." :
|
|
3865
|
+
setError(controller.signal.aborted && setup ? "Setup cancelled. Refresh to check what is still missing." : e instanceof Error ? e.message : "Operation failed. Refresh and try again.");
|
|
3860
3866
|
if (setup) setDependencies(props.backend.dependencies());
|
|
3861
3867
|
setScreen(setup ? "setup" : "error");
|
|
3862
3868
|
setCursor(0);
|
|
@@ -3881,6 +3887,7 @@ function App(props) {
|
|
|
3881
3887
|
const refresh = () => {
|
|
3882
3888
|
setError("");
|
|
3883
3889
|
setCatalog(void 0);
|
|
3890
|
+
setImage(void 0);
|
|
3884
3891
|
setDisk(void 0);
|
|
3885
3892
|
setScreen("profile");
|
|
3886
3893
|
setCursor(0);
|
|
@@ -3910,6 +3917,7 @@ function App(props) {
|
|
|
3910
3917
|
if (state.missing.length) {
|
|
3911
3918
|
setDependencies(state);
|
|
3912
3919
|
setCatalog(void 0);
|
|
3920
|
+
setImage(void 0);
|
|
3913
3921
|
setScreen("setup");
|
|
3914
3922
|
setCursor(0);
|
|
3915
3923
|
return;
|
|
@@ -4013,6 +4021,9 @@ function App(props) {
|
|
|
4013
4021
|
await props.backend.flash(catalog(), image(), disk(), signal, setProgress, async () => {
|
|
4014
4022
|
renderer.suspend();
|
|
4015
4023
|
try {
|
|
4024
|
+
process.stdout.write(`
|
|
4025
|
+
${selection()}
|
|
4026
|
+
`);
|
|
4016
4027
|
await props.backend.authorize(signal);
|
|
4017
4028
|
} finally {
|
|
4018
4029
|
renderer.resume();
|
|
@@ -4059,31 +4070,31 @@ function App(props) {
|
|
|
4059
4070
|
if (key.name === "return" && !key.repeated) activate();
|
|
4060
4071
|
});
|
|
4061
4072
|
const row = (label, detail, index, danger = false, detailWhenTight = false) => (() => {
|
|
4062
|
-
var _el$ = createElement("box"), _el$
|
|
4063
|
-
insertNode(_el
|
|
4064
|
-
setProp(_el
|
|
4065
|
-
setProp(_el
|
|
4066
|
-
setProp(_el$
|
|
4067
|
-
insert(_el$
|
|
4068
|
-
insert(_el$
|
|
4069
|
-
insert(_el
|
|
4073
|
+
var _el$4 = createElement("box"), _el$5 = createElement("text");
|
|
4074
|
+
insertNode(_el$4, _el$5);
|
|
4075
|
+
setProp(_el$4, "paddingX", 1);
|
|
4076
|
+
setProp(_el$4, "flexShrink", 0);
|
|
4077
|
+
setProp(_el$5, "wrapMode", "none");
|
|
4078
|
+
insert(_el$5, () => cursor() === index ? "> " : " ", null);
|
|
4079
|
+
insert(_el$5, label, null);
|
|
4080
|
+
insert(_el$4, createComponent2(Show, {
|
|
4070
4081
|
get when() {
|
|
4071
4082
|
return detail && (!tight() || detailWhenTight);
|
|
4072
4083
|
},
|
|
4073
4084
|
get children() {
|
|
4074
|
-
var _el$
|
|
4075
|
-
setProp(_el$
|
|
4076
|
-
insert(_el$
|
|
4077
|
-
effect((_$p) => setProp(_el$
|
|
4078
|
-
return _el$
|
|
4085
|
+
var _el$6 = createElement("text");
|
|
4086
|
+
setProp(_el$6, "wrapMode", "none");
|
|
4087
|
+
insert(_el$6, ` ${detail}`);
|
|
4088
|
+
effect((_$p) => setProp(_el$6, "fg", palette.muted, _$p));
|
|
4089
|
+
return _el$6;
|
|
4079
4090
|
}
|
|
4080
4091
|
}), null);
|
|
4081
4092
|
effect((_p$) => {
|
|
4082
4093
|
var _v$ = detail && (!tight() || detailWhenTight) ? compact() ? 2 : 3 : 1, _v$2 = cursor() === index ? palette.selected : palette.panel, _v$3 = danger ? palette.warning : cursor() === index ? palette.accent : palette.foreground, _v$4 = TextAttributes2.BOLD;
|
|
4083
|
-
_v$ !== _p$.e && (_p$.e = setProp(_el
|
|
4084
|
-
_v$2 !== _p$.t && (_p$.t = setProp(_el
|
|
4085
|
-
_v$3 !== _p$.a && (_p$.a = setProp(_el$
|
|
4086
|
-
_v$4 !== _p$.o && (_p$.o = setProp(_el$
|
|
4094
|
+
_v$ !== _p$.e && (_p$.e = setProp(_el$4, "height", _v$, _p$.e));
|
|
4095
|
+
_v$2 !== _p$.t && (_p$.t = setProp(_el$4, "backgroundColor", _v$2, _p$.t));
|
|
4096
|
+
_v$3 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$3, _p$.a));
|
|
4097
|
+
_v$4 !== _p$.o && (_p$.o = setProp(_el$5, "attributes", _v$4, _p$.o));
|
|
4087
4098
|
return _p$;
|
|
4088
4099
|
}, {
|
|
4089
4100
|
e: void 0,
|
|
@@ -4091,92 +4102,112 @@ function App(props) {
|
|
|
4091
4102
|
a: void 0,
|
|
4092
4103
|
o: void 0
|
|
4093
4104
|
});
|
|
4094
|
-
return _el
|
|
4105
|
+
return _el$4;
|
|
4095
4106
|
})();
|
|
4096
4107
|
return (() => {
|
|
4097
|
-
var _el$
|
|
4098
|
-
insertNode(_el$
|
|
4099
|
-
setProp(_el$
|
|
4100
|
-
setProp(_el$
|
|
4101
|
-
setProp(_el$
|
|
4102
|
-
setProp(_el$
|
|
4103
|
-
|
|
4104
|
-
|
|
4105
|
-
|
|
4106
|
-
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
|
|
4111
|
-
insertNode(_el$
|
|
4112
|
-
insertNode(_el$
|
|
4113
|
-
|
|
4114
|
-
|
|
4115
|
-
setProp(_el$
|
|
4116
|
-
setProp(_el$
|
|
4117
|
-
|
|
4118
|
-
|
|
4119
|
-
setProp(_el$
|
|
4120
|
-
|
|
4121
|
-
|
|
4122
|
-
setProp(_el$
|
|
4123
|
-
setProp(_el$
|
|
4124
|
-
|
|
4108
|
+
var _el$7 = createElement("box"), _el$8 = createElement("box"), _el$9 = createElement("box"), _el$0 = createElement("text"), _el$10 = createElement("text"), _el$11 = createElement("box"), _el$12 = createElement("box"), _el$83 = createElement("box"), _el$84 = createElement("text"), _el$85 = createElement("text"), _el$86 = createTextNode(`v`);
|
|
4109
|
+
insertNode(_el$7, _el$8);
|
|
4110
|
+
setProp(_el$7, "width", "100%");
|
|
4111
|
+
setProp(_el$7, "height", "100%");
|
|
4112
|
+
setProp(_el$7, "justifyContent", "center");
|
|
4113
|
+
setProp(_el$7, "alignItems", "center");
|
|
4114
|
+
insert(_el$7, createComponent2(Show, {
|
|
4115
|
+
get when() {
|
|
4116
|
+
return memo2(() => dimensions().width >= 23)() && dimensions().height >= 31;
|
|
4117
|
+
},
|
|
4118
|
+
get children() {
|
|
4119
|
+
return createComponent2(FlashLogo, {});
|
|
4120
|
+
}
|
|
4121
|
+
}), _el$8);
|
|
4122
|
+
insertNode(_el$8, _el$9);
|
|
4123
|
+
insertNode(_el$8, _el$11);
|
|
4124
|
+
insertNode(_el$8, _el$12);
|
|
4125
|
+
insertNode(_el$8, _el$83);
|
|
4126
|
+
setProp(_el$8, "id", "flash-card");
|
|
4127
|
+
setProp(_el$8, "border", true);
|
|
4128
|
+
setProp(_el$8, "borderStyle", "single");
|
|
4129
|
+
setProp(_el$8, "flexDirection", "column");
|
|
4130
|
+
setProp(_el$8, "paddingX", 1);
|
|
4131
|
+
insertNode(_el$9, _el$0);
|
|
4132
|
+
insertNode(_el$9, _el$10);
|
|
4133
|
+
setProp(_el$9, "height", 1);
|
|
4134
|
+
setProp(_el$9, "flexDirection", "row");
|
|
4135
|
+
setProp(_el$9, "justifyContent", "space-between");
|
|
4136
|
+
setProp(_el$9, "flexShrink", 0);
|
|
4137
|
+
insertNode(_el$0, createTextNode(`BOO FLASH`));
|
|
4138
|
+
insert(_el$10, () => props.backend.platformLabel);
|
|
4139
|
+
setProp(_el$11, "height", 1);
|
|
4140
|
+
setProp(_el$11, "flexShrink", 0);
|
|
4141
|
+
setProp(_el$12, "flexGrow", 1);
|
|
4142
|
+
setProp(_el$12, "minHeight", 0);
|
|
4143
|
+
setProp(_el$12, "overflow", "hidden");
|
|
4144
|
+
insert(_el$12, createComponent2(Show, {
|
|
4125
4145
|
get when() {
|
|
4126
4146
|
return visible();
|
|
4127
4147
|
},
|
|
4128
4148
|
get fallback() {
|
|
4129
4149
|
return (() => {
|
|
4130
|
-
var _el$
|
|
4131
|
-
insertNode(_el$
|
|
4132
|
-
effect((_$p) => setProp(_el$
|
|
4133
|
-
return _el$
|
|
4150
|
+
var _el$87 = createElement("text");
|
|
4151
|
+
insertNode(_el$87, createTextNode(`Enlarge the terminal to show the full choices and erase warning. Q quits.`));
|
|
4152
|
+
effect((_$p) => setProp(_el$87, "fg", palette.warning, _$p));
|
|
4153
|
+
return _el$87;
|
|
4134
4154
|
})();
|
|
4135
4155
|
},
|
|
4136
4156
|
get children() {
|
|
4137
4157
|
return [createComponent2(Show, {
|
|
4158
|
+
get when() {
|
|
4159
|
+
return selection();
|
|
4160
|
+
},
|
|
4161
|
+
get children() {
|
|
4162
|
+
var _el$13 = createElement("text");
|
|
4163
|
+
setProp(_el$13, "flexShrink", 0);
|
|
4164
|
+
insert(_el$13, selection);
|
|
4165
|
+
effect((_$p) => setProp(_el$13, "fg", palette.foreground, _$p));
|
|
4166
|
+
return _el$13;
|
|
4167
|
+
}
|
|
4168
|
+
}), createComponent2(Show, {
|
|
4138
4169
|
get when() {
|
|
4139
4170
|
return screen() === "profile";
|
|
4140
4171
|
},
|
|
4141
4172
|
get children() {
|
|
4142
4173
|
return [(() => {
|
|
4143
|
-
var _el$
|
|
4144
|
-
insertNode(_el$
|
|
4174
|
+
var _el$14 = createElement("text");
|
|
4175
|
+
insertNode(_el$14, createTextNode(`Choose the target computer's GPU`));
|
|
4145
4176
|
effect((_p$) => {
|
|
4146
4177
|
var _v$5 = palette.foreground, _v$6 = TextAttributes2.BOLD;
|
|
4147
|
-
_v$5 !== _p$.e && (_p$.e = setProp(_el$
|
|
4148
|
-
_v$6 !== _p$.t && (_p$.t = setProp(_el$
|
|
4178
|
+
_v$5 !== _p$.e && (_p$.e = setProp(_el$14, "fg", _v$5, _p$.e));
|
|
4179
|
+
_v$6 !== _p$.t && (_p$.t = setProp(_el$14, "attributes", _v$6, _p$.t));
|
|
4149
4180
|
return _p$;
|
|
4150
4181
|
}, {
|
|
4151
4182
|
e: void 0,
|
|
4152
4183
|
t: void 0
|
|
4153
4184
|
});
|
|
4154
|
-
return _el$
|
|
4185
|
+
return _el$14;
|
|
4155
4186
|
})(), (() => {
|
|
4156
|
-
var _el$
|
|
4157
|
-
insert(_el$
|
|
4187
|
+
var _el$16 = createElement("text");
|
|
4188
|
+
insert(_el$16, (() => {
|
|
4158
4189
|
var _c$ = memo2(() => !!loading());
|
|
4159
4190
|
return () => _c$() ? `${spinner()} Finding latest Boo release...` : memo2(() => !!catalog())() ? `Boo ${catalog().version} / ${catalog().revision.slice(0, 7)} / ${imageTime(catalog().timestamp, now())}` : "Dependencies needed. Enter to set up.";
|
|
4160
4191
|
})());
|
|
4161
|
-
effect((_$p) => setProp(_el$
|
|
4162
|
-
return _el$
|
|
4192
|
+
effect((_$p) => setProp(_el$16, "fg", palette.muted, _$p));
|
|
4193
|
+
return _el$16;
|
|
4163
4194
|
})(), (() => {
|
|
4164
|
-
var _el$
|
|
4165
|
-
setProp(_el$
|
|
4166
|
-
setProp(_el$
|
|
4167
|
-
setProp(_el$
|
|
4168
|
-
insert(_el$
|
|
4195
|
+
var _el$17 = createElement("box");
|
|
4196
|
+
setProp(_el$17, "gap", 0);
|
|
4197
|
+
setProp(_el$17, "marginBottom", 1);
|
|
4198
|
+
setProp(_el$17, "flexShrink", 0);
|
|
4199
|
+
insert(_el$17, createComponent2(For, {
|
|
4169
4200
|
each: profiles,
|
|
4170
4201
|
children: (profile, index) => row(profile.toUpperCase(), profile === "nvidia" ? "NVIDIA graphics" : `${profile === "intel" ? "Intel" : "AMD Radeon"} graphics`, index())
|
|
4171
4202
|
}), null);
|
|
4172
|
-
insert(_el$
|
|
4173
|
-
insert(_el$
|
|
4174
|
-
return _el$
|
|
4203
|
+
insert(_el$17, () => row("Candidates", "", 3), null);
|
|
4204
|
+
insert(_el$17, () => row("Clear cached images", "", 4), null);
|
|
4205
|
+
return _el$17;
|
|
4175
4206
|
})(), (() => {
|
|
4176
|
-
var _el$
|
|
4177
|
-
insertNode(_el$
|
|
4178
|
-
effect((_$p) => setProp(_el$
|
|
4179
|
-
return _el$
|
|
4207
|
+
var _el$18 = createElement("text");
|
|
4208
|
+
insertNode(_el$18, createTextNode(`All images support Intel and AMD x86_64 CPUs.`));
|
|
4209
|
+
effect((_$p) => setProp(_el$18, "fg", palette.muted, _$p));
|
|
4210
|
+
return _el$18;
|
|
4180
4211
|
})()];
|
|
4181
4212
|
}
|
|
4182
4213
|
}), createComponent2(Show, {
|
|
@@ -4185,34 +4216,34 @@ function App(props) {
|
|
|
4185
4216
|
},
|
|
4186
4217
|
get children() {
|
|
4187
4218
|
return [(() => {
|
|
4188
|
-
var _el$
|
|
4189
|
-
insertNode(_el$
|
|
4219
|
+
var _el$20 = createElement("text");
|
|
4220
|
+
insertNode(_el$20, createTextNode(`Clear cached images?`));
|
|
4190
4221
|
effect((_p$) => {
|
|
4191
4222
|
var _v$7 = palette.warning, _v$8 = TextAttributes2.BOLD;
|
|
4192
|
-
_v$7 !== _p$.e && (_p$.e = setProp(_el$
|
|
4193
|
-
_v$8 !== _p$.t && (_p$.t = setProp(_el$
|
|
4223
|
+
_v$7 !== _p$.e && (_p$.e = setProp(_el$20, "fg", _v$7, _p$.e));
|
|
4224
|
+
_v$8 !== _p$.t && (_p$.t = setProp(_el$20, "attributes", _v$8, _p$.t));
|
|
4194
4225
|
return _p$;
|
|
4195
4226
|
}, {
|
|
4196
4227
|
e: void 0,
|
|
4197
4228
|
t: void 0
|
|
4198
4229
|
});
|
|
4199
|
-
return _el$16;
|
|
4200
|
-
})(), (() => {
|
|
4201
|
-
var _el$18 = createElement("text");
|
|
4202
|
-
insertNode(_el$18, createTextNode(`Removes downloaded archives only, NOT USB contents. Active flashes are unaffected.`));
|
|
4203
|
-
effect((_$p) => setProp(_el$18, "fg", palette.foreground, _$p));
|
|
4204
|
-
return _el$18;
|
|
4205
|
-
})(), (() => {
|
|
4206
|
-
var _el$20 = createElement("text");
|
|
4207
|
-
insertNode(_el$20, createTextNode(`Images will download again when needed. Pending downloads may still finish and be cached.`));
|
|
4208
|
-
effect((_$p) => setProp(_el$20, "fg", palette.muted, _$p));
|
|
4209
4230
|
return _el$20;
|
|
4210
4231
|
})(), (() => {
|
|
4211
|
-
var _el$22 = createElement("
|
|
4212
|
-
|
|
4213
|
-
|
|
4214
|
-
effect((_$p) => setProp(_el$22, "gap", tight() ? 0 : 1, _$p));
|
|
4232
|
+
var _el$22 = createElement("text");
|
|
4233
|
+
insertNode(_el$22, createTextNode(`Removes downloaded archives only, NOT USB contents. Active flashes are unaffected.`));
|
|
4234
|
+
effect((_$p) => setProp(_el$22, "fg", palette.foreground, _$p));
|
|
4215
4235
|
return _el$22;
|
|
4236
|
+
})(), (() => {
|
|
4237
|
+
var _el$24 = createElement("text");
|
|
4238
|
+
insertNode(_el$24, createTextNode(`Images will download again when needed. Pending downloads may still finish and be cached.`));
|
|
4239
|
+
effect((_$p) => setProp(_el$24, "fg", palette.muted, _$p));
|
|
4240
|
+
return _el$24;
|
|
4241
|
+
})(), (() => {
|
|
4242
|
+
var _el$26 = createElement("box");
|
|
4243
|
+
insert(_el$26, () => row("Go back", "", 0), null);
|
|
4244
|
+
insert(_el$26, () => row(loading() ? "Clearing..." : "Clear cached images", "", 1, true), null);
|
|
4245
|
+
effect((_$p) => setProp(_el$26, "gap", tight() ? 0 : 1, _$p));
|
|
4246
|
+
return _el$26;
|
|
4216
4247
|
})()];
|
|
4217
4248
|
}
|
|
4218
4249
|
}), createComponent2(Show, {
|
|
@@ -4221,23 +4252,23 @@ function App(props) {
|
|
|
4221
4252
|
},
|
|
4222
4253
|
get children() {
|
|
4223
4254
|
return [(() => {
|
|
4224
|
-
var _el$
|
|
4225
|
-
insertNode(_el$
|
|
4255
|
+
var _el$27 = createElement("text");
|
|
4256
|
+
insertNode(_el$27, createTextNode(`Cache cleared`));
|
|
4226
4257
|
effect((_p$) => {
|
|
4227
4258
|
var _v$9 = palette.success, _v$0 = TextAttributes2.BOLD;
|
|
4228
|
-
_v$9 !== _p$.e && (_p$.e = setProp(_el$
|
|
4229
|
-
_v$0 !== _p$.t && (_p$.t = setProp(_el$
|
|
4259
|
+
_v$9 !== _p$.e && (_p$.e = setProp(_el$27, "fg", _v$9, _p$.e));
|
|
4260
|
+
_v$0 !== _p$.t && (_p$.t = setProp(_el$27, "attributes", _v$0, _p$.t));
|
|
4230
4261
|
return _p$;
|
|
4231
4262
|
}, {
|
|
4232
4263
|
e: void 0,
|
|
4233
4264
|
t: void 0
|
|
4234
4265
|
});
|
|
4235
|
-
return _el$
|
|
4266
|
+
return _el$27;
|
|
4236
4267
|
})(), (() => {
|
|
4237
|
-
var _el$
|
|
4238
|
-
insert(_el$
|
|
4239
|
-
effect((_$p) => setProp(_el$
|
|
4240
|
-
return _el$
|
|
4268
|
+
var _el$29 = createElement("text");
|
|
4269
|
+
insert(_el$29, notice);
|
|
4270
|
+
effect((_$p) => setProp(_el$29, "fg", palette.foreground, _$p));
|
|
4271
|
+
return _el$29;
|
|
4241
4272
|
})(), memo2(() => row("Go back", "", 0))];
|
|
4242
4273
|
}
|
|
4243
4274
|
}), createComponent2(Show, {
|
|
@@ -4246,34 +4277,29 @@ function App(props) {
|
|
|
4246
4277
|
},
|
|
4247
4278
|
get children() {
|
|
4248
4279
|
return [(() => {
|
|
4249
|
-
var _el$
|
|
4250
|
-
insertNode(_el$
|
|
4280
|
+
var _el$30 = createElement("text");
|
|
4281
|
+
insertNode(_el$30, createTextNode(`Candidates`));
|
|
4251
4282
|
effect((_p$) => {
|
|
4252
4283
|
var _v$1 = palette.foreground, _v$10 = TextAttributes2.BOLD;
|
|
4253
|
-
_v$1 !== _p$.e && (_p$.e = setProp(_el$
|
|
4254
|
-
_v$10 !== _p$.t && (_p$.t = setProp(_el$
|
|
4284
|
+
_v$1 !== _p$.e && (_p$.e = setProp(_el$30, "fg", _v$1, _p$.e));
|
|
4285
|
+
_v$10 !== _p$.t && (_p$.t = setProp(_el$30, "attributes", _v$10, _p$.t));
|
|
4255
4286
|
return _p$;
|
|
4256
4287
|
}, {
|
|
4257
4288
|
e: void 0,
|
|
4258
4289
|
t: void 0
|
|
4259
4290
|
});
|
|
4260
|
-
return _el$
|
|
4261
|
-
})(), (() => {
|
|
4262
|
-
var _el$28 = createElement("text");
|
|
4263
|
-
insertNode(_el$28, createTextNode(`Build-only; not boot/install/hardware qualified.`));
|
|
4264
|
-
effect((_$p) => setProp(_el$28, "fg", palette.warning, _$p));
|
|
4265
|
-
return _el$28;
|
|
4291
|
+
return _el$30;
|
|
4266
4292
|
})(), createComponent2(Show, {
|
|
4267
4293
|
get when() {
|
|
4268
4294
|
return !loading();
|
|
4269
4295
|
},
|
|
4270
4296
|
get fallback() {
|
|
4271
4297
|
return (() => {
|
|
4272
|
-
var _el$
|
|
4273
|
-
insertNode(_el$
|
|
4274
|
-
insert(_el$
|
|
4275
|
-
effect((_$p) => setProp(_el$
|
|
4276
|
-
return _el$
|
|
4298
|
+
var _el$89 = createElement("text"), _el$90 = createTextNode(` Finding completed candidates...`);
|
|
4299
|
+
insertNode(_el$89, _el$90);
|
|
4300
|
+
insert(_el$89, spinner, _el$90);
|
|
4301
|
+
effect((_$p) => setProp(_el$89, "fg", palette.muted, _$p));
|
|
4302
|
+
return _el$89;
|
|
4277
4303
|
})();
|
|
4278
4304
|
},
|
|
4279
4305
|
get children() {
|
|
@@ -4283,31 +4309,31 @@ function App(props) {
|
|
|
4283
4309
|
},
|
|
4284
4310
|
get fallback() {
|
|
4285
4311
|
return [(() => {
|
|
4286
|
-
var _el$
|
|
4287
|
-
insertNode(_el$
|
|
4288
|
-
effect((_$p) => setProp(_el$
|
|
4289
|
-
return _el$
|
|
4312
|
+
var _el$91 = createElement("text");
|
|
4313
|
+
insertNode(_el$91, createTextNode(`No completed candidates available`));
|
|
4314
|
+
effect((_$p) => setProp(_el$91, "fg", palette.muted, _$p));
|
|
4315
|
+
return _el$91;
|
|
4290
4316
|
})(), memo2(() => row("Go back", "", 0))];
|
|
4291
4317
|
},
|
|
4292
4318
|
get children() {
|
|
4293
4319
|
return [(() => {
|
|
4294
|
-
var _el$
|
|
4295
|
-
setProp(_el$
|
|
4296
|
-
insert(_el$
|
|
4320
|
+
var _el$32 = createElement("box");
|
|
4321
|
+
setProp(_el$32, "gap", 0);
|
|
4322
|
+
insert(_el$32, createComponent2(For, {
|
|
4297
4323
|
get each() {
|
|
4298
4324
|
return candidates().slice(Math.max(0, cursor() - 2), Math.max(3, cursor() + 1));
|
|
4299
4325
|
},
|
|
4300
4326
|
children: (c, index) => row(`${c.images[0].profile.toUpperCase()} ${c.revision.slice(0, 7)} #${c.candidate.number}`, imageTime(c.timestamp, now()), index() + Math.max(0, cursor() - 2), false, true)
|
|
4301
4327
|
}));
|
|
4302
|
-
return _el$
|
|
4328
|
+
return _el$32;
|
|
4303
4329
|
})(), (() => {
|
|
4304
|
-
var _el$
|
|
4305
|
-
insertNode(_el$
|
|
4306
|
-
insertNode(_el$
|
|
4307
|
-
insert(_el$
|
|
4308
|
-
insert(_el$
|
|
4309
|
-
effect((_$p) => setProp(_el$
|
|
4310
|
-
return _el$
|
|
4330
|
+
var _el$33 = createElement("text"), _el$34 = createTextNode(` of `), _el$35 = createTextNode(` candidates / Enter to choose`);
|
|
4331
|
+
insertNode(_el$33, _el$34);
|
|
4332
|
+
insertNode(_el$33, _el$35);
|
|
4333
|
+
insert(_el$33, () => cursor() + 1, _el$34);
|
|
4334
|
+
insert(_el$33, () => candidates().length, _el$35);
|
|
4335
|
+
effect((_$p) => setProp(_el$33, "fg", palette.muted, _$p));
|
|
4336
|
+
return _el$33;
|
|
4311
4337
|
})()];
|
|
4312
4338
|
}
|
|
4313
4339
|
});
|
|
@@ -4320,64 +4346,54 @@ function App(props) {
|
|
|
4320
4346
|
},
|
|
4321
4347
|
get children() {
|
|
4322
4348
|
return [(() => {
|
|
4323
|
-
var _el$
|
|
4324
|
-
insertNode(_el$
|
|
4349
|
+
var _el$36 = createElement("text");
|
|
4350
|
+
insertNode(_el$36, createTextNode(`Set up required tools`));
|
|
4325
4351
|
effect((_p$) => {
|
|
4326
4352
|
var _v$11 = palette.accent, _v$12 = TextAttributes2.BOLD;
|
|
4327
|
-
_v$11 !== _p$.e && (_p$.e = setProp(_el$
|
|
4328
|
-
_v$12 !== _p$.t && (_p$.t = setProp(_el$
|
|
4353
|
+
_v$11 !== _p$.e && (_p$.e = setProp(_el$36, "fg", _v$11, _p$.e));
|
|
4354
|
+
_v$12 !== _p$.t && (_p$.t = setProp(_el$36, "attributes", _v$12, _p$.t));
|
|
4329
4355
|
return _p$;
|
|
4330
4356
|
}, {
|
|
4331
4357
|
e: void 0,
|
|
4332
4358
|
t: void 0
|
|
4333
4359
|
});
|
|
4334
|
-
return _el$34;
|
|
4335
|
-
})(), (() => {
|
|
4336
|
-
var _el$36 = createElement("text"), _el$37 = createTextNode(`Missing: `);
|
|
4337
|
-
insertNode(_el$36, _el$37);
|
|
4338
|
-
insert(_el$36, () => dependencies3().missing.join(", "), null);
|
|
4339
|
-
effect((_$p) => setProp(_el$36, "fg", palette.foreground, _$p));
|
|
4340
4360
|
return _el$36;
|
|
4361
|
+
})(), (() => {
|
|
4362
|
+
var _el$38 = createElement("text"), _el$39 = createTextNode(`Missing: `);
|
|
4363
|
+
insertNode(_el$38, _el$39);
|
|
4364
|
+
insert(_el$38, () => dependencies3().missing.join(", "), null);
|
|
4365
|
+
effect((_$p) => setProp(_el$38, "fg", palette.foreground, _$p));
|
|
4366
|
+
return _el$38;
|
|
4341
4367
|
})(), createComponent2(Show, {
|
|
4342
4368
|
get when() {
|
|
4343
4369
|
return !error();
|
|
4344
4370
|
},
|
|
4345
4371
|
get fallback() {
|
|
4346
4372
|
return (() => {
|
|
4347
|
-
var _el$
|
|
4348
|
-
insert(_el$
|
|
4349
|
-
effect((_$p) => setProp(_el$
|
|
4350
|
-
return _el$
|
|
4373
|
+
var _el$93 = createElement("text");
|
|
4374
|
+
insert(_el$93, error);
|
|
4375
|
+
effect((_$p) => setProp(_el$93, "fg", palette.warning, _$p));
|
|
4376
|
+
return _el$93;
|
|
4351
4377
|
})();
|
|
4352
4378
|
},
|
|
4353
4379
|
get children() {
|
|
4354
|
-
var _el$
|
|
4355
|
-
insert(_el$
|
|
4380
|
+
var _el$40 = createElement("text");
|
|
4381
|
+
insert(_el$40, (() => {
|
|
4356
4382
|
var _c$2 = memo2(() => !!dependencies3().installer);
|
|
4357
4383
|
return () => _c$2() ? `${dependencies3().installer} will install ${dependencies3().missing.join(" and ")} and required dependencies, then continue.` : dependencies3().guidance;
|
|
4358
4384
|
})());
|
|
4359
|
-
effect((_$p) => setProp(_el$
|
|
4360
|
-
return _el$
|
|
4385
|
+
effect((_$p) => setProp(_el$40, "fg", palette.muted, _$p));
|
|
4386
|
+
return _el$40;
|
|
4361
4387
|
}
|
|
4362
4388
|
}), createComponent2(Show, {
|
|
4363
4389
|
get when() {
|
|
4364
4390
|
return !tight();
|
|
4365
4391
|
},
|
|
4366
4392
|
get children() {
|
|
4367
|
-
var _el$
|
|
4368
|
-
insert(_el$
|
|
4369
|
-
effect((_$p) => setProp(_el$
|
|
4370
|
-
return _el$
|
|
4371
|
-
}
|
|
4372
|
-
}), createComponent2(Show, {
|
|
4373
|
-
get when() {
|
|
4374
|
-
return props.backend.demo;
|
|
4375
|
-
},
|
|
4376
|
-
get children() {
|
|
4377
|
-
var _el$40 = createElement("text");
|
|
4378
|
-
insertNode(_el$40, createTextNode(`Setup simulation; no software installed.`));
|
|
4379
|
-
effect((_$p) => setProp(_el$40, "fg", palette.warning, _$p));
|
|
4380
|
-
return _el$40;
|
|
4393
|
+
var _el$41 = createElement("text");
|
|
4394
|
+
insert(_el$41, () => dependencies3().installer ? "Uses the ordinary terminal. Ctrl-C cancels and quits." : "Boo Flash will not change system packages on this platform.");
|
|
4395
|
+
effect((_$p) => setProp(_el$41, "fg", palette.muted, _$p));
|
|
4396
|
+
return _el$41;
|
|
4381
4397
|
}
|
|
4382
4398
|
}), (() => {
|
|
4383
4399
|
var _el$42 = createElement("box");
|
|
@@ -4420,17 +4436,7 @@ function App(props) {
|
|
|
4420
4436
|
insert(_el$47, () => dependencies3().installer, _el$48);
|
|
4421
4437
|
effect((_$p) => setProp(_el$47, "fg", palette.muted, _$p));
|
|
4422
4438
|
return _el$47;
|
|
4423
|
-
})()
|
|
4424
|
-
get when() {
|
|
4425
|
-
return props.backend.demo;
|
|
4426
|
-
},
|
|
4427
|
-
get children() {
|
|
4428
|
-
var _el$49 = createElement("text");
|
|
4429
|
-
insertNode(_el$49, createTextNode(`Setup simulation; no software installed.`));
|
|
4430
|
-
effect((_$p) => setProp(_el$49, "fg", palette.warning, _$p));
|
|
4431
|
-
return _el$49;
|
|
4432
|
-
}
|
|
4433
|
-
})];
|
|
4439
|
+
})()];
|
|
4434
4440
|
}
|
|
4435
4441
|
}), createComponent2(Show, {
|
|
4436
4442
|
get when() {
|
|
@@ -4438,26 +4444,26 @@ function App(props) {
|
|
|
4438
4444
|
},
|
|
4439
4445
|
get children() {
|
|
4440
4446
|
return [(() => {
|
|
4441
|
-
var _el$
|
|
4442
|
-
insertNode(_el$
|
|
4447
|
+
var _el$49 = createElement("text");
|
|
4448
|
+
insertNode(_el$49, createTextNode(`Choose a USB drive`));
|
|
4443
4449
|
effect((_p$) => {
|
|
4444
4450
|
var _v$15 = palette.foreground, _v$16 = TextAttributes2.BOLD;
|
|
4445
|
-
_v$15 !== _p$.e && (_p$.e = setProp(_el$
|
|
4446
|
-
_v$16 !== _p$.t && (_p$.t = setProp(_el$
|
|
4451
|
+
_v$15 !== _p$.e && (_p$.e = setProp(_el$49, "fg", _v$15, _p$.e));
|
|
4452
|
+
_v$16 !== _p$.t && (_p$.t = setProp(_el$49, "attributes", _v$16, _p$.t));
|
|
4447
4453
|
return _p$;
|
|
4448
4454
|
}, {
|
|
4449
4455
|
e: void 0,
|
|
4450
4456
|
t: void 0
|
|
4451
4457
|
});
|
|
4452
|
-
return _el$
|
|
4458
|
+
return _el$49;
|
|
4453
4459
|
})(), (() => {
|
|
4454
|
-
var _el$
|
|
4455
|
-
insert(_el$
|
|
4460
|
+
var _el$51 = createElement("text");
|
|
4461
|
+
insert(_el$51, (() => {
|
|
4456
4462
|
var _c$3 = memo2(() => !!loading());
|
|
4457
4463
|
return () => _c$3() ? `${spinner()} Checking disks and protected storage...` : "System, home and app storage are excluded.";
|
|
4458
4464
|
})());
|
|
4459
|
-
effect((_$p) => setProp(_el$
|
|
4460
|
-
return _el$
|
|
4465
|
+
effect((_$p) => setProp(_el$51, "fg", palette.muted, _$p));
|
|
4466
|
+
return _el$51;
|
|
4461
4467
|
})(), createComponent2(Show, {
|
|
4462
4468
|
get when() {
|
|
4463
4469
|
return !loading();
|
|
@@ -4469,31 +4475,31 @@ function App(props) {
|
|
|
4469
4475
|
},
|
|
4470
4476
|
get fallback() {
|
|
4471
4477
|
return (() => {
|
|
4472
|
-
var _el$
|
|
4473
|
-
insertNode(_el$
|
|
4474
|
-
effect((_$p) => setProp(_el$
|
|
4475
|
-
return _el$
|
|
4478
|
+
var _el$94 = createElement("text");
|
|
4479
|
+
insertNode(_el$94, createTextNode(`No eligible USB drives. Connect a writable external USB drive, then press R to refresh.`));
|
|
4480
|
+
effect((_$p) => setProp(_el$94, "fg", palette.warning, _$p));
|
|
4481
|
+
return _el$94;
|
|
4476
4482
|
})();
|
|
4477
4483
|
},
|
|
4478
4484
|
get children() {
|
|
4479
4485
|
return [(() => {
|
|
4480
|
-
var _el$
|
|
4481
|
-
setProp(_el$
|
|
4482
|
-
insert(_el$
|
|
4486
|
+
var _el$52 = createElement("box");
|
|
4487
|
+
setProp(_el$52, "gap", 0);
|
|
4488
|
+
insert(_el$52, createComponent2(For, {
|
|
4483
4489
|
get each() {
|
|
4484
4490
|
return disks3().slice(Math.max(0, cursor() - 2), Math.max(3, cursor() + 1));
|
|
4485
4491
|
},
|
|
4486
4492
|
children: (d, index) => row(d.name, `${path(d)} / ${bytes(d.bytes)} / USB`, index() + Math.max(0, cursor() - 2))
|
|
4487
4493
|
}));
|
|
4488
|
-
return _el$
|
|
4494
|
+
return _el$52;
|
|
4489
4495
|
})(), (() => {
|
|
4490
|
-
var _el$
|
|
4491
|
-
insert(_el$
|
|
4496
|
+
var _el$53 = createElement("text");
|
|
4497
|
+
insert(_el$53, (() => {
|
|
4492
4498
|
var _c$4 = memo2(() => cursor() < 0);
|
|
4493
4499
|
return () => _c$4() ? "Use arrows to select a drive. Nothing is selected yet." : `${cursor() + 1} of ${disks3().length} drives / Enter to review`;
|
|
4494
4500
|
})());
|
|
4495
|
-
effect((_$p) => setProp(_el$
|
|
4496
|
-
return _el$
|
|
4501
|
+
effect((_$p) => setProp(_el$53, "fg", palette.muted, _$p));
|
|
4502
|
+
return _el$53;
|
|
4497
4503
|
})()];
|
|
4498
4504
|
}
|
|
4499
4505
|
});
|
|
@@ -4506,64 +4512,55 @@ function App(props) {
|
|
|
4506
4512
|
},
|
|
4507
4513
|
get children() {
|
|
4508
4514
|
return [(() => {
|
|
4509
|
-
var _el$
|
|
4510
|
-
insertNode(_el$
|
|
4515
|
+
var _el$54 = createElement("text");
|
|
4516
|
+
insertNode(_el$54, createTextNode(`Erase this entire USB drive?`));
|
|
4511
4517
|
effect((_p$) => {
|
|
4512
4518
|
var _v$17 = palette.warning, _v$18 = TextAttributes2.BOLD;
|
|
4513
|
-
_v$17 !== _p$.e && (_p$.e = setProp(_el$
|
|
4514
|
-
_v$18 !== _p$.t && (_p$.t = setProp(_el$
|
|
4519
|
+
_v$17 !== _p$.e && (_p$.e = setProp(_el$54, "fg", _v$17, _p$.e));
|
|
4520
|
+
_v$18 !== _p$.t && (_p$.t = setProp(_el$54, "attributes", _v$18, _p$.t));
|
|
4515
4521
|
return _p$;
|
|
4516
4522
|
}, {
|
|
4517
4523
|
e: void 0,
|
|
4518
4524
|
t: void 0
|
|
4519
4525
|
});
|
|
4520
|
-
return _el$
|
|
4526
|
+
return _el$54;
|
|
4521
4527
|
})(), (() => {
|
|
4522
|
-
var _el$
|
|
4523
|
-
insertNode(_el$
|
|
4524
|
-
insertNode(_el$
|
|
4525
|
-
|
|
4526
|
-
setProp(_el$
|
|
4527
|
-
setProp(_el$
|
|
4528
|
-
|
|
4529
|
-
insert(_el$
|
|
4530
|
-
insert(_el$60, (() => {
|
|
4528
|
+
var _el$56 = createElement("box"), _el$57 = createElement("text"), _el$58 = createElement("text");
|
|
4529
|
+
insertNode(_el$56, _el$57);
|
|
4530
|
+
insertNode(_el$56, _el$58);
|
|
4531
|
+
setProp(_el$56, "paddingX", 1);
|
|
4532
|
+
setProp(_el$57, "height", 1);
|
|
4533
|
+
setProp(_el$57, "wrapMode", "none");
|
|
4534
|
+
insert(_el$57, () => disk()?.name);
|
|
4535
|
+
insert(_el$58, (() => {
|
|
4531
4536
|
var _c$5 = memo2(() => !!disk());
|
|
4532
4537
|
return () => _c$5() ? `${path(disk())} / ${bytes(disk().bytes)}` : "";
|
|
4533
4538
|
})());
|
|
4534
|
-
insertNode(_el$61, _el$62);
|
|
4535
|
-
insert(_el$61, () => image()?.profile.toUpperCase(), _el$62);
|
|
4536
|
-
insert(_el$61, (() => {
|
|
4537
|
-
var _c$6 = memo2(() => !!catalog()?.candidate);
|
|
4538
|
-
return () => _c$6() ? `candidate (build-only) ${catalog()?.revision.slice(0, 7)}` : `Boo ${catalog()?.version}`;
|
|
4539
|
-
})(), null);
|
|
4540
4539
|
effect((_p$) => {
|
|
4541
|
-
var _v$19 = palette.panelAlt, _v$20 = palette.foreground, _v$21 = TextAttributes2.BOLD, _v$22 = palette.accent
|
|
4542
|
-
_v$19 !== _p$.e && (_p$.e = setProp(_el$
|
|
4543
|
-
_v$20 !== _p$.t && (_p$.t = setProp(_el$
|
|
4544
|
-
_v$21 !== _p$.a && (_p$.a = setProp(_el$
|
|
4545
|
-
_v$22 !== _p$.o && (_p$.o = setProp(_el$
|
|
4546
|
-
_v$23 !== _p$.i && (_p$.i = setProp(_el$61, "fg", _v$23, _p$.i));
|
|
4540
|
+
var _v$19 = palette.panelAlt, _v$20 = palette.foreground, _v$21 = TextAttributes2.BOLD, _v$22 = palette.accent;
|
|
4541
|
+
_v$19 !== _p$.e && (_p$.e = setProp(_el$56, "backgroundColor", _v$19, _p$.e));
|
|
4542
|
+
_v$20 !== _p$.t && (_p$.t = setProp(_el$57, "fg", _v$20, _p$.t));
|
|
4543
|
+
_v$21 !== _p$.a && (_p$.a = setProp(_el$57, "attributes", _v$21, _p$.a));
|
|
4544
|
+
_v$22 !== _p$.o && (_p$.o = setProp(_el$58, "fg", _v$22, _p$.o));
|
|
4547
4545
|
return _p$;
|
|
4548
4546
|
}, {
|
|
4549
4547
|
e: void 0,
|
|
4550
4548
|
t: void 0,
|
|
4551
4549
|
a: void 0,
|
|
4552
|
-
o: void 0
|
|
4553
|
-
i: void 0
|
|
4550
|
+
o: void 0
|
|
4554
4551
|
});
|
|
4555
|
-
return _el$
|
|
4552
|
+
return _el$56;
|
|
4556
4553
|
})(), (() => {
|
|
4557
|
-
var _el$
|
|
4558
|
-
insertNode(_el$
|
|
4559
|
-
effect((_$p) => setProp(_el$
|
|
4560
|
-
return _el$
|
|
4554
|
+
var _el$59 = createElement("text");
|
|
4555
|
+
insertNode(_el$59, createTextNode(`ALL data and partitions on this drive will be lost. Back up anything you need before continuing.`));
|
|
4556
|
+
effect((_$p) => setProp(_el$59, "fg", palette.warning, _$p));
|
|
4557
|
+
return _el$59;
|
|
4561
4558
|
})(), (() => {
|
|
4562
|
-
var _el$
|
|
4563
|
-
insert(_el$
|
|
4564
|
-
insert(_el$
|
|
4565
|
-
effect((_$p) => setProp(_el$
|
|
4566
|
-
return _el$
|
|
4559
|
+
var _el$61 = createElement("box");
|
|
4560
|
+
insert(_el$61, () => row("Go back", "", 0), null);
|
|
4561
|
+
insert(_el$61, () => row("Erase & flash", "", 1, true), null);
|
|
4562
|
+
effect((_$p) => setProp(_el$61, "gap", tight() ? 0 : 1, _$p));
|
|
4563
|
+
return _el$61;
|
|
4567
4564
|
})()];
|
|
4568
4565
|
}
|
|
4569
4566
|
}), createComponent2(Show, {
|
|
@@ -4572,108 +4569,114 @@ function App(props) {
|
|
|
4572
4569
|
},
|
|
4573
4570
|
get children() {
|
|
4574
4571
|
return [(() => {
|
|
4575
|
-
var _el$
|
|
4576
|
-
insertNode(_el$
|
|
4577
|
-
insert(_el$
|
|
4578
|
-
insert(_el$
|
|
4579
|
-
var _c$
|
|
4580
|
-
return () => _c$
|
|
4572
|
+
var _el$62 = createElement("text"), _el$63 = createTextNode(` `);
|
|
4573
|
+
insertNode(_el$62, _el$63);
|
|
4574
|
+
insert(_el$62, spinner, _el$63);
|
|
4575
|
+
insert(_el$62, (() => {
|
|
4576
|
+
var _c$6 = memo2(() => !!stopping());
|
|
4577
|
+
return () => _c$6() ? "Stopping safely..." : progress().stage;
|
|
4581
4578
|
})(), null);
|
|
4582
4579
|
effect((_p$) => {
|
|
4583
|
-
var _v$
|
|
4584
|
-
_v$
|
|
4585
|
-
_v$
|
|
4580
|
+
var _v$23 = palette.accent, _v$24 = TextAttributes2.BOLD;
|
|
4581
|
+
_v$23 !== _p$.e && (_p$.e = setProp(_el$62, "fg", _v$23, _p$.e));
|
|
4582
|
+
_v$24 !== _p$.t && (_p$.t = setProp(_el$62, "attributes", _v$24, _p$.t));
|
|
4586
4583
|
return _p$;
|
|
4587
4584
|
}, {
|
|
4588
4585
|
e: void 0,
|
|
4589
4586
|
t: void 0
|
|
4590
4587
|
});
|
|
4591
|
-
return _el$
|
|
4588
|
+
return _el$62;
|
|
4592
4589
|
})(), (() => {
|
|
4593
|
-
var _el$
|
|
4594
|
-
|
|
4595
|
-
|
|
4596
|
-
|
|
4597
|
-
effect((_$p) => setProp(_el$68, "fg", palette.foreground, _$p));
|
|
4598
|
-
return _el$68;
|
|
4590
|
+
var _el$64 = createElement("text");
|
|
4591
|
+
insert(_el$64, () => disk()?.name);
|
|
4592
|
+
effect((_$p) => setProp(_el$64, "fg", palette.foreground, _$p));
|
|
4593
|
+
return _el$64;
|
|
4599
4594
|
})(), (() => {
|
|
4600
|
-
var _el$
|
|
4601
|
-
insert(_el$
|
|
4602
|
-
var _c$
|
|
4603
|
-
return () => _c$
|
|
4595
|
+
var _el$65 = createElement("text");
|
|
4596
|
+
insert(_el$65, (() => {
|
|
4597
|
+
var _c$7 = memo2(() => !!stopping());
|
|
4598
|
+
return () => _c$7() ? "Waiting for all child processes to stop. Keep the USB connected." : progress().detail;
|
|
4604
4599
|
})());
|
|
4605
|
-
effect((_$p) => setProp(_el$
|
|
4606
|
-
return _el$
|
|
4600
|
+
effect((_$p) => setProp(_el$65, "fg", palette.muted, _$p));
|
|
4601
|
+
return _el$65;
|
|
4607
4602
|
})(), createComponent2(Show, {
|
|
4608
4603
|
get when() {
|
|
4609
4604
|
return percent() !== void 0;
|
|
4610
4605
|
},
|
|
4611
4606
|
get children() {
|
|
4612
4607
|
return [(() => {
|
|
4613
|
-
var _el$
|
|
4614
|
-
setProp(_el$
|
|
4615
|
-
|
|
4616
|
-
insert(_el$71, createComponent2(Show, {
|
|
4608
|
+
var _el$66 = createElement("box");
|
|
4609
|
+
setProp(_el$66, "flexShrink", 0);
|
|
4610
|
+
insert(_el$66, createComponent2(Show, {
|
|
4617
4611
|
get when() {
|
|
4618
4612
|
return percent() > 0;
|
|
4619
4613
|
},
|
|
4620
4614
|
get children() {
|
|
4621
|
-
var _el$
|
|
4622
|
-
setProp(_el$
|
|
4615
|
+
var _el$67 = createElement("box");
|
|
4616
|
+
setProp(_el$67, "height", 1);
|
|
4623
4617
|
effect((_p$) => {
|
|
4624
|
-
var _v$
|
|
4625
|
-
_v$
|
|
4626
|
-
_v$
|
|
4618
|
+
var _v$25 = `${percent() ?? 0}%`, _v$26 = palette.accent;
|
|
4619
|
+
_v$25 !== _p$.e && (_p$.e = setProp(_el$67, "width", _v$25, _p$.e));
|
|
4620
|
+
_v$26 !== _p$.t && (_p$.t = setProp(_el$67, "backgroundColor", _v$26, _p$.t));
|
|
4627
4621
|
return _p$;
|
|
4628
4622
|
}, {
|
|
4629
4623
|
e: void 0,
|
|
4630
4624
|
t: void 0
|
|
4631
4625
|
});
|
|
4632
|
-
return _el$
|
|
4626
|
+
return _el$67;
|
|
4633
4627
|
}
|
|
4634
4628
|
}));
|
|
4635
4629
|
effect((_p$) => {
|
|
4636
|
-
var _v$28 = palette.accent, _v$29 = palette.panelAlt;
|
|
4637
|
-
_v$
|
|
4638
|
-
_v$
|
|
4630
|
+
var _v$27 = !tight(), _v$28 = palette.accent, _v$29 = tight() ? 1 : 3, _v$30 = palette.panelAlt;
|
|
4631
|
+
_v$27 !== _p$.e && (_p$.e = setProp(_el$66, "border", _v$27, _p$.e));
|
|
4632
|
+
_v$28 !== _p$.t && (_p$.t = setProp(_el$66, "borderColor", _v$28, _p$.t));
|
|
4633
|
+
_v$29 !== _p$.a && (_p$.a = setProp(_el$66, "height", _v$29, _p$.a));
|
|
4634
|
+
_v$30 !== _p$.o && (_p$.o = setProp(_el$66, "backgroundColor", _v$30, _p$.o));
|
|
4639
4635
|
return _p$;
|
|
4640
4636
|
}, {
|
|
4641
4637
|
e: void 0,
|
|
4642
|
-
t: void 0
|
|
4638
|
+
t: void 0,
|
|
4639
|
+
a: void 0,
|
|
4640
|
+
o: void 0
|
|
4643
4641
|
});
|
|
4644
|
-
return _el$
|
|
4642
|
+
return _el$66;
|
|
4645
4643
|
})(), (() => {
|
|
4646
|
-
var _el$
|
|
4647
|
-
insertNode(_el$
|
|
4648
|
-
insertNode(_el$
|
|
4649
|
-
insert(_el$
|
|
4650
|
-
insert(_el$
|
|
4651
|
-
insert(_el$
|
|
4644
|
+
var _el$68 = createElement("text"), _el$69 = createTextNode(`% `), _el$70 = createTextNode(` / `);
|
|
4645
|
+
insertNode(_el$68, _el$69);
|
|
4646
|
+
insertNode(_el$68, _el$70);
|
|
4647
|
+
insert(_el$68, percent, _el$69);
|
|
4648
|
+
insert(_el$68, () => bytes(progress().bytes ?? 0), _el$70);
|
|
4649
|
+
insert(_el$68, () => bytes(progress().total ?? 0), null);
|
|
4652
4650
|
effect((_p$) => {
|
|
4653
|
-
var _v$
|
|
4654
|
-
_v$
|
|
4655
|
-
_v$
|
|
4651
|
+
var _v$31 = palette.foreground, _v$32 = TextAttributes2.BOLD;
|
|
4652
|
+
_v$31 !== _p$.e && (_p$.e = setProp(_el$68, "fg", _v$31, _p$.e));
|
|
4653
|
+
_v$32 !== _p$.t && (_p$.t = setProp(_el$68, "attributes", _v$32, _p$.t));
|
|
4656
4654
|
return _p$;
|
|
4657
4655
|
}, {
|
|
4658
4656
|
e: void 0,
|
|
4659
4657
|
t: void 0
|
|
4660
4658
|
});
|
|
4661
|
-
return _el$
|
|
4662
|
-
})(), (
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
|
|
4670
|
-
|
|
4659
|
+
return _el$68;
|
|
4660
|
+
})(), createComponent2(Show, {
|
|
4661
|
+
get when() {
|
|
4662
|
+
return !tight();
|
|
4663
|
+
},
|
|
4664
|
+
get children() {
|
|
4665
|
+
var _el$71 = createElement("text");
|
|
4666
|
+
insert(_el$71, (() => {
|
|
4667
|
+
var _c$8 = memo2(() => !!progress().speed);
|
|
4668
|
+
return () => _c$8() ? `${bytes(progress().speed)} / s` : "";
|
|
4669
|
+
})());
|
|
4670
|
+
effect((_$p) => setProp(_el$71, "fg", palette.muted, _$p));
|
|
4671
|
+
return _el$71;
|
|
4672
|
+
}
|
|
4673
|
+
})];
|
|
4671
4674
|
}
|
|
4672
4675
|
}), (() => {
|
|
4673
|
-
var _el$
|
|
4674
|
-
insertNode(_el$
|
|
4675
|
-
effect((_$p) => setProp(_el$
|
|
4676
|
-
return _el$
|
|
4676
|
+
var _el$72 = createElement("text");
|
|
4677
|
+
insertNode(_el$72, createTextNode(`Keep the USB connected until safe removal succeeds.`));
|
|
4678
|
+
effect((_$p) => setProp(_el$72, "fg", palette.warning, _$p));
|
|
4679
|
+
return _el$72;
|
|
4677
4680
|
})()];
|
|
4678
4681
|
}
|
|
4679
4682
|
}), createComponent2(Show, {
|
|
@@ -4682,34 +4685,34 @@ function App(props) {
|
|
|
4682
4685
|
},
|
|
4683
4686
|
get children() {
|
|
4684
4687
|
return [(() => {
|
|
4685
|
-
var _el$
|
|
4686
|
-
insert(_el$
|
|
4688
|
+
var _el$74 = createElement("text");
|
|
4689
|
+
insert(_el$74, () => props.backend.successTitle);
|
|
4687
4690
|
effect((_p$) => {
|
|
4688
|
-
var _v$
|
|
4689
|
-
_v$
|
|
4690
|
-
_v$
|
|
4691
|
+
var _v$33 = palette.success, _v$34 = TextAttributes2.BOLD;
|
|
4692
|
+
_v$33 !== _p$.e && (_p$.e = setProp(_el$74, "fg", _v$33, _p$.e));
|
|
4693
|
+
_v$34 !== _p$.t && (_p$.t = setProp(_el$74, "attributes", _v$34, _p$.t));
|
|
4691
4694
|
return _p$;
|
|
4692
4695
|
}, {
|
|
4693
4696
|
e: void 0,
|
|
4694
4697
|
t: void 0
|
|
4695
4698
|
});
|
|
4696
|
-
return _el$
|
|
4699
|
+
return _el$74;
|
|
4697
4700
|
})(), (() => {
|
|
4698
|
-
var _el$
|
|
4699
|
-
insert(_el$
|
|
4700
|
-
effect((_$p) => setProp(_el$
|
|
4701
|
-
return _el$
|
|
4701
|
+
var _el$75 = createElement("text");
|
|
4702
|
+
insert(_el$75, () => props.backend.successDetail);
|
|
4703
|
+
effect((_$p) => setProp(_el$75, "fg", palette.foreground, _$p));
|
|
4704
|
+
return _el$75;
|
|
4702
4705
|
})(), (() => {
|
|
4703
|
-
var _el$
|
|
4704
|
-
|
|
4705
|
-
effect((_$p) => setProp(_el$
|
|
4706
|
-
return _el$
|
|
4706
|
+
var _el$76 = createElement("text");
|
|
4707
|
+
insertNode(_el$76, createTextNode(`Compressed image and raw stream verified. Not a device read-back.`));
|
|
4708
|
+
effect((_$p) => setProp(_el$76, "fg", palette.muted, _$p));
|
|
4709
|
+
return _el$76;
|
|
4707
4710
|
})(), (() => {
|
|
4708
|
-
var _el$
|
|
4709
|
-
setProp(_el$
|
|
4710
|
-
insert(_el$
|
|
4711
|
-
insert(_el$
|
|
4712
|
-
return _el$
|
|
4711
|
+
var _el$78 = createElement("box");
|
|
4712
|
+
setProp(_el$78, "gap", 1);
|
|
4713
|
+
insert(_el$78, () => row("Choose another image", "", 0), null);
|
|
4714
|
+
insert(_el$78, () => row("Quit", "", 1), null);
|
|
4715
|
+
return _el$78;
|
|
4713
4716
|
})()];
|
|
4714
4717
|
}
|
|
4715
4718
|
}), createComponent2(Show, {
|
|
@@ -4718,56 +4721,67 @@ function App(props) {
|
|
|
4718
4721
|
},
|
|
4719
4722
|
get children() {
|
|
4720
4723
|
return [(() => {
|
|
4721
|
-
var _el$
|
|
4722
|
-
insertNode(_el$
|
|
4724
|
+
var _el$79 = createElement("text");
|
|
4725
|
+
insertNode(_el$79, createTextNode(`Flash not completed`));
|
|
4723
4726
|
effect((_p$) => {
|
|
4724
|
-
var _v$
|
|
4725
|
-
_v$
|
|
4726
|
-
_v$
|
|
4727
|
+
var _v$35 = palette.danger, _v$36 = TextAttributes2.BOLD;
|
|
4728
|
+
_v$35 !== _p$.e && (_p$.e = setProp(_el$79, "fg", _v$35, _p$.e));
|
|
4729
|
+
_v$36 !== _p$.t && (_p$.t = setProp(_el$79, "attributes", _v$36, _p$.t));
|
|
4727
4730
|
return _p$;
|
|
4728
4731
|
}, {
|
|
4729
4732
|
e: void 0,
|
|
4730
4733
|
t: void 0
|
|
4731
4734
|
});
|
|
4732
|
-
return _el$
|
|
4735
|
+
return _el$79;
|
|
4733
4736
|
})(), (() => {
|
|
4734
|
-
var _el$
|
|
4735
|
-
insert(_el$
|
|
4736
|
-
effect((_$p) => setProp(_el$
|
|
4737
|
-
return _el$
|
|
4737
|
+
var _el$81 = createElement("text");
|
|
4738
|
+
insert(_el$81, error);
|
|
4739
|
+
effect((_$p) => setProp(_el$81, "fg", palette.foreground, _$p));
|
|
4740
|
+
return _el$81;
|
|
4738
4741
|
})(), (() => {
|
|
4739
|
-
var _el$
|
|
4740
|
-
setProp(_el$
|
|
4741
|
-
insert(_el$
|
|
4742
|
-
insert(_el$
|
|
4743
|
-
return _el$
|
|
4742
|
+
var _el$82 = createElement("box");
|
|
4743
|
+
setProp(_el$82, "gap", 1);
|
|
4744
|
+
insert(_el$82, () => row("Refresh & try again", "", 0), null);
|
|
4745
|
+
insert(_el$82, () => row("Quit", "", 1), null);
|
|
4746
|
+
return _el$82;
|
|
4744
4747
|
})()];
|
|
4745
4748
|
}
|
|
4746
4749
|
})];
|
|
4747
4750
|
}
|
|
4748
4751
|
}));
|
|
4749
|
-
|
|
4750
|
-
|
|
4751
|
-
setProp(_el$
|
|
4752
|
-
|
|
4753
|
-
|
|
4754
|
-
|
|
4752
|
+
insertNode(_el$83, _el$84);
|
|
4753
|
+
insertNode(_el$83, _el$85);
|
|
4754
|
+
setProp(_el$83, "height", 1);
|
|
4755
|
+
setProp(_el$83, "flexShrink", 0);
|
|
4756
|
+
setProp(_el$83, "flexDirection", "row");
|
|
4757
|
+
setProp(_el$83, "gap", 1);
|
|
4758
|
+
setProp(_el$84, "flexGrow", 1);
|
|
4759
|
+
setProp(_el$84, "minWidth", 0);
|
|
4760
|
+
setProp(_el$84, "wrapMode", "none");
|
|
4761
|
+
insert(_el$84, (() => {
|
|
4762
|
+
var _c$9 = memo2(() => !!busy());
|
|
4763
|
+
return () => _c$9() ? "Esc cancel / Q stop & quit" : dimensions().width < 56 ? "\u2191\u2193 Enter / Esc / R / Q quit" : "Arrows / Enter / Esc back / R refresh / Q quit";
|
|
4755
4764
|
})());
|
|
4765
|
+
insertNode(_el$85, _el$86);
|
|
4766
|
+
setProp(_el$85, "flexShrink", 0);
|
|
4767
|
+
setProp(_el$85, "wrapMode", "none");
|
|
4768
|
+
insert(_el$85, version, null);
|
|
4756
4769
|
effect((_p$) => {
|
|
4757
|
-
var _v$
|
|
4758
|
-
_v$
|
|
4759
|
-
_v$
|
|
4760
|
-
_v$
|
|
4761
|
-
_v$
|
|
4762
|
-
_v$
|
|
4763
|
-
_v$
|
|
4764
|
-
_v$
|
|
4765
|
-
_v$
|
|
4766
|
-
_v$
|
|
4767
|
-
_v$
|
|
4768
|
-
_v$
|
|
4769
|
-
_v$
|
|
4770
|
-
_v$
|
|
4770
|
+
var _v$37 = palette.background, _v$38 = dimensions().width <= 80 ? "100%" : 80, _v$39 = dimensions().height <= 24 ? "100%" : 24, _v$40 = palette.border, _v$41 = palette.card, _v$42 = palette.accent, _v$43 = TextAttributes2.BOLD, _v$44 = palette.muted, _v$45 = palette.danger, _v$46 = tight() ? 0 : 1, _v$47 = tight() ? 0 : 1, _v$48 = tight() || (compact() || dimensions().width < 56) && (screen() === "setup" || !!image()) ? 0 : 1, _v$49 = palette.muted, _v$50 = palette.muted;
|
|
4771
|
+
_v$37 !== _p$.e && (_p$.e = setProp(_el$7, "backgroundColor", _v$37, _p$.e));
|
|
4772
|
+
_v$38 !== _p$.t && (_p$.t = setProp(_el$8, "width", _v$38, _p$.t));
|
|
4773
|
+
_v$39 !== _p$.a && (_p$.a = setProp(_el$8, "height", _v$39, _p$.a));
|
|
4774
|
+
_v$40 !== _p$.o && (_p$.o = setProp(_el$8, "borderColor", _v$40, _p$.o));
|
|
4775
|
+
_v$41 !== _p$.i && (_p$.i = setProp(_el$8, "backgroundColor", _v$41, _p$.i));
|
|
4776
|
+
_v$42 !== _p$.n && (_p$.n = setProp(_el$0, "fg", _v$42, _p$.n));
|
|
4777
|
+
_v$43 !== _p$.s && (_p$.s = setProp(_el$0, "attributes", _v$43, _p$.s));
|
|
4778
|
+
_v$44 !== _p$.h && (_p$.h = setProp(_el$10, "fg", _v$44, _p$.h));
|
|
4779
|
+
_v$45 !== _p$.r && (_p$.r = setProp(_el$11, "backgroundColor", _v$45, _p$.r));
|
|
4780
|
+
_v$46 !== _p$.d && (_p$.d = setProp(_el$11, "marginTop", _v$46, _p$.d));
|
|
4781
|
+
_v$47 !== _p$.l && (_p$.l = setProp(_el$12, "paddingTop", _v$47, _p$.l));
|
|
4782
|
+
_v$48 !== _p$.u && (_p$.u = setProp(_el$12, "gap", _v$48, _p$.u));
|
|
4783
|
+
_v$49 !== _p$.c && (_p$.c = setProp(_el$84, "fg", _v$49, _p$.c));
|
|
4784
|
+
_v$50 !== _p$.w && (_p$.w = setProp(_el$85, "fg", _v$50, _p$.w));
|
|
4771
4785
|
return _p$;
|
|
4772
4786
|
}, {
|
|
4773
4787
|
e: void 0,
|
|
@@ -4782,18 +4796,17 @@ function App(props) {
|
|
|
4782
4796
|
d: void 0,
|
|
4783
4797
|
l: void 0,
|
|
4784
4798
|
u: void 0,
|
|
4785
|
-
c: void 0
|
|
4799
|
+
c: void 0,
|
|
4800
|
+
w: void 0
|
|
4786
4801
|
});
|
|
4787
|
-
return _el$
|
|
4802
|
+
return _el$7;
|
|
4788
4803
|
})();
|
|
4789
4804
|
}
|
|
4790
4805
|
|
|
4791
4806
|
// src/index.tsx
|
|
4792
4807
|
var args = process.argv.slice(2);
|
|
4793
|
-
|
|
4794
|
-
|
|
4795
|
-
if (args.length > 1 || args.some((arg) => !["--demo", "--demo=empty", "--demo=error", "--demo=setup", "--demo=setup-zstd", "--demo=setup-error", "--demo=setup-interrupted", "--demo=no-homebrew", "--list-images", "--clear-cache"].includes(arg))) {
|
|
4796
|
-
console.error("Usage: bun start [--demo[=empty|error|setup|setup-zstd|setup-error|setup-interrupted|no-homebrew] | --list-images | --clear-cache]");
|
|
4808
|
+
if (args.length > 1 || args.some((arg) => !["--list-images", "--clear-cache"].includes(arg))) {
|
|
4809
|
+
console.error("Usage: boo-flash [--list-images | --clear-cache]");
|
|
4797
4810
|
process.exitCode = 1;
|
|
4798
4811
|
} else if (args.includes("--clear-cache")) {
|
|
4799
4812
|
try {
|
|
@@ -4809,11 +4822,11 @@ if (args.length > 1 || args.some((arg) => !["--demo", "--demo=empty", "--demo=er
|
|
|
4809
4822
|
console.error(e instanceof Error ? e.message : "Image discovery failed.");
|
|
4810
4823
|
process.exitCode = 1;
|
|
4811
4824
|
}
|
|
4812
|
-
} else if (!
|
|
4813
|
-
console.error("Boo Flash requires macOS or Linux and a normal user account.
|
|
4825
|
+
} else if (!["darwin", "linux"].includes(process.platform) || process.getuid?.() === 0) {
|
|
4826
|
+
console.error("Boo Flash requires macOS or Linux and a normal user account.");
|
|
4814
4827
|
process.exitCode = 1;
|
|
4815
4828
|
} else {
|
|
4816
|
-
const backend = new FlashBackend(
|
|
4829
|
+
const backend = new FlashBackend();
|
|
4817
4830
|
const renderer = await createCliRenderer2({
|
|
4818
4831
|
backgroundColor: palette.background,
|
|
4819
4832
|
targetFps: 30,
|
|
@@ -4854,3 +4867,31 @@ if (args.length > 1 || args.some((arg) => !["--demo", "--demo=empty", "--demo=er
|
|
|
4854
4867
|
for (const signal of signals) process.off(signal, quit);
|
|
4855
4868
|
}
|
|
4856
4869
|
}
|
|
4870
|
+
/*!
|
|
4871
|
+
* Artwork derived from @simonklee/bigfeelings@0.2.1, original octant painter,
|
|
4872
|
+
* scale 4, time 0, right-facing ghost at (0,0), wordmark at (48,0).
|
|
4873
|
+
* Frozen 92x48 samples / 46x12 cells, unchanged from BooLogoRenderable.ts.
|
|
4874
|
+
* Source tarball SHA-256:
|
|
4875
|
+
* 5a82909d19c9eb94e28c7407f5d220f7ff8051a1e3cdcdb11a6eb8870c4e30b0
|
|
4876
|
+
*
|
|
4877
|
+
* MIT License
|
|
4878
|
+
* Copyright (c) 2026 Simon Klee
|
|
4879
|
+
*
|
|
4880
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4881
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
4882
|
+
* in the Software without restriction, including without limitation the rights
|
|
4883
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
4884
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
4885
|
+
* furnished to do so, subject to the following conditions:
|
|
4886
|
+
*
|
|
4887
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
4888
|
+
* copies or substantial portions of the Software.
|
|
4889
|
+
*
|
|
4890
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
4891
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
4892
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
4893
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
4894
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
4895
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
4896
|
+
* SOFTWARE.
|
|
4897
|
+
*/
|