boo-flash 0.1.7 → 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 CHANGED
@@ -22,6 +22,9 @@ Choose the target computer’s GPU and USB drive. Boo Flash downloads and verifi
22
22
 
23
23
  You can also choose a candidate. The selected version, candidate number (when applicable), and GPU stay visible through flashing and on the result screen.
24
24
 
25
+ Boo Flash's own package version is shown in the bottom-right footer. A compact
26
+ Unicode Boo logo appears above the flash box when there is room without shrinking it.
27
+
25
28
  Requires Node.js 26.4+ or Bun 1.4+.
26
29
 
27
30
  ## Development
@@ -1,5 +1,29 @@
1
1
  This distribution contains code from the following projects.
2
2
 
3
+ Boo logo artwork derived from @simonklee/bigfeelings 0.2.1
4
+ -------------------------------------------------------
5
+ MIT License
6
+
7
+ Copyright (c) 2026 Simon Klee
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+
3
27
  @opentui/solid
4
28
  ----------------
5
29
  MIT License
package/dist/app.js CHANGED
@@ -2547,6 +2547,32 @@ 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";
@@ -3729,7 +3755,49 @@ var FlashBackend = class {
3729
3755
  }
3730
3756
  };
3731
3757
 
3758
+ // package.json
3759
+ var version = "0.1.8";
3760
+
3732
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
+ }
3733
3801
  function App(props) {
3734
3802
  const renderer = useRenderer();
3735
3803
  const dimensions = useTerminalDimensions();
@@ -4002,31 +4070,31 @@ ${selection()}
4002
4070
  if (key.name === "return" && !key.repeated) activate();
4003
4071
  });
4004
4072
  const row = (label, detail, index, danger = false, detailWhenTight = false) => (() => {
4005
- var _el$ = createElement("box"), _el$2 = createElement("text");
4006
- insertNode(_el$, _el$2);
4007
- setProp(_el$, "paddingX", 1);
4008
- setProp(_el$, "flexShrink", 0);
4009
- setProp(_el$2, "wrapMode", "none");
4010
- insert(_el$2, () => cursor() === index ? "> " : " ", null);
4011
- insert(_el$2, label, null);
4012
- insert(_el$, createComponent2(Show, {
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, {
4013
4081
  get when() {
4014
4082
  return detail && (!tight() || detailWhenTight);
4015
4083
  },
4016
4084
  get children() {
4017
- var _el$3 = createElement("text");
4018
- setProp(_el$3, "wrapMode", "none");
4019
- insert(_el$3, ` ${detail}`);
4020
- effect((_$p) => setProp(_el$3, "fg", palette.muted, _$p));
4021
- return _el$3;
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;
4022
4090
  }
4023
4091
  }), null);
4024
4092
  effect((_p$) => {
4025
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;
4026
- _v$ !== _p$.e && (_p$.e = setProp(_el$, "height", _v$, _p$.e));
4027
- _v$2 !== _p$.t && (_p$.t = setProp(_el$, "backgroundColor", _v$2, _p$.t));
4028
- _v$3 !== _p$.a && (_p$.a = setProp(_el$2, "fg", _v$3, _p$.a));
4029
- _v$4 !== _p$.o && (_p$.o = setProp(_el$2, "attributes", _v$4, _p$.o));
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));
4030
4098
  return _p$;
4031
4099
  }, {
4032
4100
  e: void 0,
@@ -4034,46 +4102,55 @@ ${selection()}
4034
4102
  a: void 0,
4035
4103
  o: void 0
4036
4104
  });
4037
- return _el$;
4105
+ return _el$4;
4038
4106
  })();
4039
4107
  return (() => {
4040
- var _el$4 = createElement("box"), _el$5 = createElement("box"), _el$6 = createElement("box"), _el$7 = createElement("text"), _el$9 = createElement("text"), _el$0 = createElement("box"), _el$1 = createElement("box"), _el$80 = createElement("text");
4041
- insertNode(_el$4, _el$5);
4042
- setProp(_el$4, "width", "100%");
4043
- setProp(_el$4, "height", "100%");
4044
- setProp(_el$4, "justifyContent", "center");
4045
- setProp(_el$4, "alignItems", "center");
4046
- insertNode(_el$5, _el$6);
4047
- insertNode(_el$5, _el$0);
4048
- insertNode(_el$5, _el$1);
4049
- insertNode(_el$5, _el$80);
4050
- setProp(_el$5, "border", true);
4051
- setProp(_el$5, "borderStyle", "single");
4052
- setProp(_el$5, "flexDirection", "column");
4053
- setProp(_el$5, "paddingX", 1);
4054
- insertNode(_el$6, _el$7);
4055
- insertNode(_el$6, _el$9);
4056
- setProp(_el$6, "height", 1);
4057
- setProp(_el$6, "flexDirection", "row");
4058
- setProp(_el$6, "justifyContent", "space-between");
4059
- setProp(_el$6, "flexShrink", 0);
4060
- insertNode(_el$7, createTextNode(`BOO FLASH`));
4061
- insert(_el$9, () => props.backend.platformLabel);
4062
- setProp(_el$0, "height", 1);
4063
- setProp(_el$0, "flexShrink", 0);
4064
- setProp(_el$1, "flexGrow", 1);
4065
- setProp(_el$1, "minHeight", 0);
4066
- setProp(_el$1, "overflow", "hidden");
4067
- insert(_el$1, createComponent2(Show, {
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, {
4068
4145
  get when() {
4069
4146
  return visible();
4070
4147
  },
4071
4148
  get fallback() {
4072
4149
  return (() => {
4073
- var _el$81 = createElement("text");
4074
- insertNode(_el$81, createTextNode(`Enlarge the terminal to show the full choices and erase warning. Q quits.`));
4075
- effect((_$p) => setProp(_el$81, "fg", palette.warning, _$p));
4076
- return _el$81;
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;
4077
4154
  })();
4078
4155
  },
4079
4156
  get children() {
@@ -4082,11 +4159,11 @@ ${selection()}
4082
4159
  return selection();
4083
4160
  },
4084
4161
  get children() {
4085
- var _el$10 = createElement("text");
4086
- setProp(_el$10, "flexShrink", 0);
4087
- insert(_el$10, selection);
4088
- effect((_$p) => setProp(_el$10, "fg", palette.foreground, _$p));
4089
- return _el$10;
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;
4090
4167
  }
4091
4168
  }), createComponent2(Show, {
4092
4169
  get when() {
@@ -4094,43 +4171,43 @@ ${selection()}
4094
4171
  },
4095
4172
  get children() {
4096
4173
  return [(() => {
4097
- var _el$11 = createElement("text");
4098
- insertNode(_el$11, createTextNode(`Choose the target computer's GPU`));
4174
+ var _el$14 = createElement("text");
4175
+ insertNode(_el$14, createTextNode(`Choose the target computer's GPU`));
4099
4176
  effect((_p$) => {
4100
4177
  var _v$5 = palette.foreground, _v$6 = TextAttributes2.BOLD;
4101
- _v$5 !== _p$.e && (_p$.e = setProp(_el$11, "fg", _v$5, _p$.e));
4102
- _v$6 !== _p$.t && (_p$.t = setProp(_el$11, "attributes", _v$6, _p$.t));
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));
4103
4180
  return _p$;
4104
4181
  }, {
4105
4182
  e: void 0,
4106
4183
  t: void 0
4107
4184
  });
4108
- return _el$11;
4185
+ return _el$14;
4109
4186
  })(), (() => {
4110
- var _el$13 = createElement("text");
4111
- insert(_el$13, (() => {
4187
+ var _el$16 = createElement("text");
4188
+ insert(_el$16, (() => {
4112
4189
  var _c$ = memo2(() => !!loading());
4113
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.";
4114
4191
  })());
4115
- effect((_$p) => setProp(_el$13, "fg", palette.muted, _$p));
4116
- return _el$13;
4192
+ effect((_$p) => setProp(_el$16, "fg", palette.muted, _$p));
4193
+ return _el$16;
4117
4194
  })(), (() => {
4118
- var _el$14 = createElement("box");
4119
- setProp(_el$14, "gap", 0);
4120
- setProp(_el$14, "marginBottom", 1);
4121
- setProp(_el$14, "flexShrink", 0);
4122
- insert(_el$14, createComponent2(For, {
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, {
4123
4200
  each: profiles,
4124
4201
  children: (profile, index) => row(profile.toUpperCase(), profile === "nvidia" ? "NVIDIA graphics" : `${profile === "intel" ? "Intel" : "AMD Radeon"} graphics`, index())
4125
4202
  }), null);
4126
- insert(_el$14, () => row("Candidates", "", 3), null);
4127
- insert(_el$14, () => row("Clear cached images", "", 4), null);
4128
- return _el$14;
4203
+ insert(_el$17, () => row("Candidates", "", 3), null);
4204
+ insert(_el$17, () => row("Clear cached images", "", 4), null);
4205
+ return _el$17;
4129
4206
  })(), (() => {
4130
- var _el$15 = createElement("text");
4131
- insertNode(_el$15, createTextNode(`All images support Intel and AMD x86_64 CPUs.`));
4132
- effect((_$p) => setProp(_el$15, "fg", palette.muted, _$p));
4133
- return _el$15;
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;
4134
4211
  })()];
4135
4212
  }
4136
4213
  }), createComponent2(Show, {
@@ -4139,34 +4216,34 @@ ${selection()}
4139
4216
  },
4140
4217
  get children() {
4141
4218
  return [(() => {
4142
- var _el$17 = createElement("text");
4143
- insertNode(_el$17, createTextNode(`Clear cached images?`));
4219
+ var _el$20 = createElement("text");
4220
+ insertNode(_el$20, createTextNode(`Clear cached images?`));
4144
4221
  effect((_p$) => {
4145
4222
  var _v$7 = palette.warning, _v$8 = TextAttributes2.BOLD;
4146
- _v$7 !== _p$.e && (_p$.e = setProp(_el$17, "fg", _v$7, _p$.e));
4147
- _v$8 !== _p$.t && (_p$.t = setProp(_el$17, "attributes", _v$8, _p$.t));
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));
4148
4225
  return _p$;
4149
4226
  }, {
4150
4227
  e: void 0,
4151
4228
  t: void 0
4152
4229
  });
4153
- return _el$17;
4230
+ return _el$20;
4154
4231
  })(), (() => {
4155
- var _el$19 = createElement("text");
4156
- insertNode(_el$19, createTextNode(`Removes downloaded archives only, NOT USB contents. Active flashes are unaffected.`));
4157
- effect((_$p) => setProp(_el$19, "fg", palette.foreground, _$p));
4158
- return _el$19;
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));
4235
+ return _el$22;
4159
4236
  })(), (() => {
4160
- var _el$21 = createElement("text");
4161
- insertNode(_el$21, createTextNode(`Images will download again when needed. Pending downloads may still finish and be cached.`));
4162
- effect((_$p) => setProp(_el$21, "fg", palette.muted, _$p));
4163
- return _el$21;
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;
4164
4241
  })(), (() => {
4165
- var _el$23 = createElement("box");
4166
- insert(_el$23, () => row("Go back", "", 0), null);
4167
- insert(_el$23, () => row(loading() ? "Clearing..." : "Clear cached images", "", 1, true), null);
4168
- effect((_$p) => setProp(_el$23, "gap", tight() ? 0 : 1, _$p));
4169
- return _el$23;
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;
4170
4247
  })()];
4171
4248
  }
4172
4249
  }), createComponent2(Show, {
@@ -4175,23 +4252,23 @@ ${selection()}
4175
4252
  },
4176
4253
  get children() {
4177
4254
  return [(() => {
4178
- var _el$24 = createElement("text");
4179
- insertNode(_el$24, createTextNode(`Cache cleared`));
4255
+ var _el$27 = createElement("text");
4256
+ insertNode(_el$27, createTextNode(`Cache cleared`));
4180
4257
  effect((_p$) => {
4181
4258
  var _v$9 = palette.success, _v$0 = TextAttributes2.BOLD;
4182
- _v$9 !== _p$.e && (_p$.e = setProp(_el$24, "fg", _v$9, _p$.e));
4183
- _v$0 !== _p$.t && (_p$.t = setProp(_el$24, "attributes", _v$0, _p$.t));
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));
4184
4261
  return _p$;
4185
4262
  }, {
4186
4263
  e: void 0,
4187
4264
  t: void 0
4188
4265
  });
4189
- return _el$24;
4266
+ return _el$27;
4190
4267
  })(), (() => {
4191
- var _el$26 = createElement("text");
4192
- insert(_el$26, notice);
4193
- effect((_$p) => setProp(_el$26, "fg", palette.foreground, _$p));
4194
- return _el$26;
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;
4195
4272
  })(), memo2(() => row("Go back", "", 0))];
4196
4273
  }
4197
4274
  }), createComponent2(Show, {
@@ -4200,29 +4277,29 @@ ${selection()}
4200
4277
  },
4201
4278
  get children() {
4202
4279
  return [(() => {
4203
- var _el$27 = createElement("text");
4204
- insertNode(_el$27, createTextNode(`Candidates`));
4280
+ var _el$30 = createElement("text");
4281
+ insertNode(_el$30, createTextNode(`Candidates`));
4205
4282
  effect((_p$) => {
4206
4283
  var _v$1 = palette.foreground, _v$10 = TextAttributes2.BOLD;
4207
- _v$1 !== _p$.e && (_p$.e = setProp(_el$27, "fg", _v$1, _p$.e));
4208
- _v$10 !== _p$.t && (_p$.t = setProp(_el$27, "attributes", _v$10, _p$.t));
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));
4209
4286
  return _p$;
4210
4287
  }, {
4211
4288
  e: void 0,
4212
4289
  t: void 0
4213
4290
  });
4214
- return _el$27;
4291
+ return _el$30;
4215
4292
  })(), createComponent2(Show, {
4216
4293
  get when() {
4217
4294
  return !loading();
4218
4295
  },
4219
4296
  get fallback() {
4220
4297
  return (() => {
4221
- var _el$83 = createElement("text"), _el$84 = createTextNode(` Finding completed candidates...`);
4222
- insertNode(_el$83, _el$84);
4223
- insert(_el$83, spinner, _el$84);
4224
- effect((_$p) => setProp(_el$83, "fg", palette.muted, _$p));
4225
- return _el$83;
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;
4226
4303
  })();
4227
4304
  },
4228
4305
  get children() {
@@ -4232,31 +4309,31 @@ ${selection()}
4232
4309
  },
4233
4310
  get fallback() {
4234
4311
  return [(() => {
4235
- var _el$85 = createElement("text");
4236
- insertNode(_el$85, createTextNode(`No completed candidates available`));
4237
- effect((_$p) => setProp(_el$85, "fg", palette.muted, _$p));
4238
- return _el$85;
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;
4239
4316
  })(), memo2(() => row("Go back", "", 0))];
4240
4317
  },
4241
4318
  get children() {
4242
4319
  return [(() => {
4243
- var _el$29 = createElement("box");
4244
- setProp(_el$29, "gap", 0);
4245
- insert(_el$29, createComponent2(For, {
4320
+ var _el$32 = createElement("box");
4321
+ setProp(_el$32, "gap", 0);
4322
+ insert(_el$32, createComponent2(For, {
4246
4323
  get each() {
4247
4324
  return candidates().slice(Math.max(0, cursor() - 2), Math.max(3, cursor() + 1));
4248
4325
  },
4249
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)
4250
4327
  }));
4251
- return _el$29;
4328
+ return _el$32;
4252
4329
  })(), (() => {
4253
- var _el$30 = createElement("text"), _el$31 = createTextNode(` of `), _el$32 = createTextNode(` candidates / Enter to choose`);
4254
- insertNode(_el$30, _el$31);
4255
- insertNode(_el$30, _el$32);
4256
- insert(_el$30, () => cursor() + 1, _el$31);
4257
- insert(_el$30, () => candidates().length, _el$32);
4258
- effect((_$p) => setProp(_el$30, "fg", palette.muted, _$p));
4259
- return _el$30;
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;
4260
4337
  })()];
4261
4338
  }
4262
4339
  });
@@ -4269,61 +4346,61 @@ ${selection()}
4269
4346
  },
4270
4347
  get children() {
4271
4348
  return [(() => {
4272
- var _el$33 = createElement("text");
4273
- insertNode(_el$33, createTextNode(`Set up required tools`));
4349
+ var _el$36 = createElement("text");
4350
+ insertNode(_el$36, createTextNode(`Set up required tools`));
4274
4351
  effect((_p$) => {
4275
4352
  var _v$11 = palette.accent, _v$12 = TextAttributes2.BOLD;
4276
- _v$11 !== _p$.e && (_p$.e = setProp(_el$33, "fg", _v$11, _p$.e));
4277
- _v$12 !== _p$.t && (_p$.t = setProp(_el$33, "attributes", _v$12, _p$.t));
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));
4278
4355
  return _p$;
4279
4356
  }, {
4280
4357
  e: void 0,
4281
4358
  t: void 0
4282
4359
  });
4283
- return _el$33;
4360
+ return _el$36;
4284
4361
  })(), (() => {
4285
- var _el$35 = createElement("text"), _el$36 = createTextNode(`Missing: `);
4286
- insertNode(_el$35, _el$36);
4287
- insert(_el$35, () => dependencies3().missing.join(", "), null);
4288
- effect((_$p) => setProp(_el$35, "fg", palette.foreground, _$p));
4289
- return _el$35;
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;
4290
4367
  })(), createComponent2(Show, {
4291
4368
  get when() {
4292
4369
  return !error();
4293
4370
  },
4294
4371
  get fallback() {
4295
4372
  return (() => {
4296
- var _el$87 = createElement("text");
4297
- insert(_el$87, error);
4298
- effect((_$p) => setProp(_el$87, "fg", palette.warning, _$p));
4299
- return _el$87;
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;
4300
4377
  })();
4301
4378
  },
4302
4379
  get children() {
4303
- var _el$37 = createElement("text");
4304
- insert(_el$37, (() => {
4380
+ var _el$40 = createElement("text");
4381
+ insert(_el$40, (() => {
4305
4382
  var _c$2 = memo2(() => !!dependencies3().installer);
4306
4383
  return () => _c$2() ? `${dependencies3().installer} will install ${dependencies3().missing.join(" and ")} and required dependencies, then continue.` : dependencies3().guidance;
4307
4384
  })());
4308
- effect((_$p) => setProp(_el$37, "fg", palette.muted, _$p));
4309
- return _el$37;
4385
+ effect((_$p) => setProp(_el$40, "fg", palette.muted, _$p));
4386
+ return _el$40;
4310
4387
  }
4311
4388
  }), createComponent2(Show, {
4312
4389
  get when() {
4313
4390
  return !tight();
4314
4391
  },
4315
4392
  get children() {
4316
- var _el$38 = createElement("text");
4317
- insert(_el$38, () => dependencies3().installer ? "Uses the ordinary terminal. Ctrl-C cancels and quits." : "Boo Flash will not change system packages on this platform.");
4318
- effect((_$p) => setProp(_el$38, "fg", palette.muted, _$p));
4319
- return _el$38;
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;
4320
4397
  }
4321
4398
  }), (() => {
4322
- var _el$39 = createElement("box");
4323
- insert(_el$39, () => row("Go back", "", 0), null);
4324
- insert(_el$39, () => row(dependencies3().installer ? `Install ${dependencies3().missing.join(" + ")}` : "Refresh", "", 1), null);
4325
- effect((_$p) => setProp(_el$39, "gap", tight() ? 0 : 1, _$p));
4326
- return _el$39;
4399
+ var _el$42 = createElement("box");
4400
+ insert(_el$42, () => row("Go back", "", 0), null);
4401
+ insert(_el$42, () => row(dependencies3().installer ? `Install ${dependencies3().missing.join(" + ")}` : "Refresh", "", 1), null);
4402
+ effect((_$p) => setProp(_el$42, "gap", tight() ? 0 : 1, _$p));
4403
+ return _el$42;
4327
4404
  })()];
4328
4405
  }
4329
4406
  }), createComponent2(Show, {
@@ -4332,33 +4409,33 @@ ${selection()}
4332
4409
  },
4333
4410
  get children() {
4334
4411
  return [(() => {
4335
- var _el$40 = createElement("text"), _el$41 = createTextNode(` `);
4336
- insertNode(_el$40, _el$41);
4337
- insert(_el$40, spinner, _el$41);
4338
- insert(_el$40, () => stopping() ? "Waiting for setup to stop..." : "Installing required tools", null);
4412
+ var _el$43 = createElement("text"), _el$44 = createTextNode(` `);
4413
+ insertNode(_el$43, _el$44);
4414
+ insert(_el$43, spinner, _el$44);
4415
+ insert(_el$43, () => stopping() ? "Waiting for setup to stop..." : "Installing required tools", null);
4339
4416
  effect((_p$) => {
4340
4417
  var _v$13 = palette.accent, _v$14 = TextAttributes2.BOLD;
4341
- _v$13 !== _p$.e && (_p$.e = setProp(_el$40, "fg", _v$13, _p$.e));
4342
- _v$14 !== _p$.t && (_p$.t = setProp(_el$40, "attributes", _v$14, _p$.t));
4418
+ _v$13 !== _p$.e && (_p$.e = setProp(_el$43, "fg", _v$13, _p$.e));
4419
+ _v$14 !== _p$.t && (_p$.t = setProp(_el$43, "attributes", _v$14, _p$.t));
4343
4420
  return _p$;
4344
4421
  }, {
4345
4422
  e: void 0,
4346
4423
  t: void 0
4347
4424
  });
4348
- return _el$40;
4425
+ return _el$43;
4349
4426
  })(), (() => {
4350
- var _el$42 = createElement("text"), _el$43 = createTextNode(` via `);
4351
- insertNode(_el$42, _el$43);
4352
- insert(_el$42, () => dependencies3().missing.join(" + "), _el$43);
4353
- insert(_el$42, () => dependencies3().installer, null);
4354
- effect((_$p) => setProp(_el$42, "fg", palette.foreground, _$p));
4355
- return _el$42;
4427
+ var _el$45 = createElement("text"), _el$46 = createTextNode(` via `);
4428
+ insertNode(_el$45, _el$46);
4429
+ insert(_el$45, () => dependencies3().missing.join(" + "), _el$46);
4430
+ insert(_el$45, () => dependencies3().installer, null);
4431
+ effect((_$p) => setProp(_el$45, "fg", palette.foreground, _$p));
4432
+ return _el$45;
4356
4433
  })(), (() => {
4357
- var _el$44 = createElement("text"), _el$45 = createTextNode(` uses the ordinary terminal. Ctrl-C cancels and quits; wait for cleanup.`);
4358
- insertNode(_el$44, _el$45);
4359
- insert(_el$44, () => dependencies3().installer, _el$45);
4360
- effect((_$p) => setProp(_el$44, "fg", palette.muted, _$p));
4361
- return _el$44;
4434
+ var _el$47 = createElement("text"), _el$48 = createTextNode(` uses the ordinary terminal. Ctrl-C cancels and quits; wait for cleanup.`);
4435
+ insertNode(_el$47, _el$48);
4436
+ insert(_el$47, () => dependencies3().installer, _el$48);
4437
+ effect((_$p) => setProp(_el$47, "fg", palette.muted, _$p));
4438
+ return _el$47;
4362
4439
  })()];
4363
4440
  }
4364
4441
  }), createComponent2(Show, {
@@ -4367,26 +4444,26 @@ ${selection()}
4367
4444
  },
4368
4445
  get children() {
4369
4446
  return [(() => {
4370
- var _el$46 = createElement("text");
4371
- insertNode(_el$46, createTextNode(`Choose a USB drive`));
4447
+ var _el$49 = createElement("text");
4448
+ insertNode(_el$49, createTextNode(`Choose a USB drive`));
4372
4449
  effect((_p$) => {
4373
4450
  var _v$15 = palette.foreground, _v$16 = TextAttributes2.BOLD;
4374
- _v$15 !== _p$.e && (_p$.e = setProp(_el$46, "fg", _v$15, _p$.e));
4375
- _v$16 !== _p$.t && (_p$.t = setProp(_el$46, "attributes", _v$16, _p$.t));
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));
4376
4453
  return _p$;
4377
4454
  }, {
4378
4455
  e: void 0,
4379
4456
  t: void 0
4380
4457
  });
4381
- return _el$46;
4458
+ return _el$49;
4382
4459
  })(), (() => {
4383
- var _el$48 = createElement("text");
4384
- insert(_el$48, (() => {
4460
+ var _el$51 = createElement("text");
4461
+ insert(_el$51, (() => {
4385
4462
  var _c$3 = memo2(() => !!loading());
4386
4463
  return () => _c$3() ? `${spinner()} Checking disks and protected storage...` : "System, home and app storage are excluded.";
4387
4464
  })());
4388
- effect((_$p) => setProp(_el$48, "fg", palette.muted, _$p));
4389
- return _el$48;
4465
+ effect((_$p) => setProp(_el$51, "fg", palette.muted, _$p));
4466
+ return _el$51;
4390
4467
  })(), createComponent2(Show, {
4391
4468
  get when() {
4392
4469
  return !loading();
@@ -4398,31 +4475,31 @@ ${selection()}
4398
4475
  },
4399
4476
  get fallback() {
4400
4477
  return (() => {
4401
- var _el$88 = createElement("text");
4402
- insertNode(_el$88, createTextNode(`No eligible USB drives. Connect a writable external USB drive, then press R to refresh.`));
4403
- effect((_$p) => setProp(_el$88, "fg", palette.warning, _$p));
4404
- return _el$88;
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;
4405
4482
  })();
4406
4483
  },
4407
4484
  get children() {
4408
4485
  return [(() => {
4409
- var _el$49 = createElement("box");
4410
- setProp(_el$49, "gap", 0);
4411
- insert(_el$49, createComponent2(For, {
4486
+ var _el$52 = createElement("box");
4487
+ setProp(_el$52, "gap", 0);
4488
+ insert(_el$52, createComponent2(For, {
4412
4489
  get each() {
4413
4490
  return disks3().slice(Math.max(0, cursor() - 2), Math.max(3, cursor() + 1));
4414
4491
  },
4415
4492
  children: (d, index) => row(d.name, `${path(d)} / ${bytes(d.bytes)} / USB`, index() + Math.max(0, cursor() - 2))
4416
4493
  }));
4417
- return _el$49;
4494
+ return _el$52;
4418
4495
  })(), (() => {
4419
- var _el$50 = createElement("text");
4420
- insert(_el$50, (() => {
4496
+ var _el$53 = createElement("text");
4497
+ insert(_el$53, (() => {
4421
4498
  var _c$4 = memo2(() => cursor() < 0);
4422
4499
  return () => _c$4() ? "Use arrows to select a drive. Nothing is selected yet." : `${cursor() + 1} of ${disks3().length} drives / Enter to review`;
4423
4500
  })());
4424
- effect((_$p) => setProp(_el$50, "fg", palette.muted, _$p));
4425
- return _el$50;
4501
+ effect((_$p) => setProp(_el$53, "fg", palette.muted, _$p));
4502
+ return _el$53;
4426
4503
  })()];
4427
4504
  }
4428
4505
  });
@@ -4435,36 +4512,36 @@ ${selection()}
4435
4512
  },
4436
4513
  get children() {
4437
4514
  return [(() => {
4438
- var _el$51 = createElement("text");
4439
- insertNode(_el$51, createTextNode(`Erase this entire USB drive?`));
4515
+ var _el$54 = createElement("text");
4516
+ insertNode(_el$54, createTextNode(`Erase this entire USB drive?`));
4440
4517
  effect((_p$) => {
4441
4518
  var _v$17 = palette.warning, _v$18 = TextAttributes2.BOLD;
4442
- _v$17 !== _p$.e && (_p$.e = setProp(_el$51, "fg", _v$17, _p$.e));
4443
- _v$18 !== _p$.t && (_p$.t = setProp(_el$51, "attributes", _v$18, _p$.t));
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));
4444
4521
  return _p$;
4445
4522
  }, {
4446
4523
  e: void 0,
4447
4524
  t: void 0
4448
4525
  });
4449
- return _el$51;
4526
+ return _el$54;
4450
4527
  })(), (() => {
4451
- var _el$53 = createElement("box"), _el$54 = createElement("text"), _el$55 = createElement("text");
4452
- insertNode(_el$53, _el$54);
4453
- insertNode(_el$53, _el$55);
4454
- setProp(_el$53, "paddingX", 1);
4455
- setProp(_el$54, "height", 1);
4456
- setProp(_el$54, "wrapMode", "none");
4457
- insert(_el$54, () => disk()?.name);
4458
- insert(_el$55, (() => {
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, (() => {
4459
4536
  var _c$5 = memo2(() => !!disk());
4460
4537
  return () => _c$5() ? `${path(disk())} / ${bytes(disk().bytes)}` : "";
4461
4538
  })());
4462
4539
  effect((_p$) => {
4463
4540
  var _v$19 = palette.panelAlt, _v$20 = palette.foreground, _v$21 = TextAttributes2.BOLD, _v$22 = palette.accent;
4464
- _v$19 !== _p$.e && (_p$.e = setProp(_el$53, "backgroundColor", _v$19, _p$.e));
4465
- _v$20 !== _p$.t && (_p$.t = setProp(_el$54, "fg", _v$20, _p$.t));
4466
- _v$21 !== _p$.a && (_p$.a = setProp(_el$54, "attributes", _v$21, _p$.a));
4467
- _v$22 !== _p$.o && (_p$.o = setProp(_el$55, "fg", _v$22, _p$.o));
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));
4468
4545
  return _p$;
4469
4546
  }, {
4470
4547
  e: void 0,
@@ -4472,18 +4549,18 @@ ${selection()}
4472
4549
  a: void 0,
4473
4550
  o: void 0
4474
4551
  });
4475
- return _el$53;
4476
- })(), (() => {
4477
- var _el$56 = createElement("text");
4478
- insertNode(_el$56, createTextNode(`ALL data and partitions on this drive will be lost. Back up anything you need before continuing.`));
4479
- effect((_$p) => setProp(_el$56, "fg", palette.warning, _$p));
4480
4552
  return _el$56;
4481
4553
  })(), (() => {
4482
- var _el$58 = createElement("box");
4483
- insert(_el$58, () => row("Go back", "", 0), null);
4484
- insert(_el$58, () => row("Erase & flash", "", 1, true), null);
4485
- effect((_$p) => setProp(_el$58, "gap", tight() ? 0 : 1, _$p));
4486
- return _el$58;
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;
4558
+ })(), (() => {
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;
4487
4564
  })()];
4488
4565
  }
4489
4566
  }), createComponent2(Show, {
@@ -4492,69 +4569,69 @@ ${selection()}
4492
4569
  },
4493
4570
  get children() {
4494
4571
  return [(() => {
4495
- var _el$59 = createElement("text"), _el$60 = createTextNode(` `);
4496
- insertNode(_el$59, _el$60);
4497
- insert(_el$59, spinner, _el$60);
4498
- insert(_el$59, (() => {
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, (() => {
4499
4576
  var _c$6 = memo2(() => !!stopping());
4500
4577
  return () => _c$6() ? "Stopping safely..." : progress().stage;
4501
4578
  })(), null);
4502
4579
  effect((_p$) => {
4503
4580
  var _v$23 = palette.accent, _v$24 = TextAttributes2.BOLD;
4504
- _v$23 !== _p$.e && (_p$.e = setProp(_el$59, "fg", _v$23, _p$.e));
4505
- _v$24 !== _p$.t && (_p$.t = setProp(_el$59, "attributes", _v$24, _p$.t));
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));
4506
4583
  return _p$;
4507
4584
  }, {
4508
4585
  e: void 0,
4509
4586
  t: void 0
4510
4587
  });
4511
- return _el$59;
4588
+ return _el$62;
4512
4589
  })(), (() => {
4513
- var _el$61 = createElement("text");
4514
- insert(_el$61, () => disk()?.name);
4515
- effect((_$p) => setProp(_el$61, "fg", palette.foreground, _$p));
4516
- return _el$61;
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;
4517
4594
  })(), (() => {
4518
- var _el$62 = createElement("text");
4519
- insert(_el$62, (() => {
4595
+ var _el$65 = createElement("text");
4596
+ insert(_el$65, (() => {
4520
4597
  var _c$7 = memo2(() => !!stopping());
4521
4598
  return () => _c$7() ? "Waiting for all child processes to stop. Keep the USB connected." : progress().detail;
4522
4599
  })());
4523
- effect((_$p) => setProp(_el$62, "fg", palette.muted, _$p));
4524
- return _el$62;
4600
+ effect((_$p) => setProp(_el$65, "fg", palette.muted, _$p));
4601
+ return _el$65;
4525
4602
  })(), createComponent2(Show, {
4526
4603
  get when() {
4527
4604
  return percent() !== void 0;
4528
4605
  },
4529
4606
  get children() {
4530
4607
  return [(() => {
4531
- var _el$63 = createElement("box");
4532
- setProp(_el$63, "flexShrink", 0);
4533
- insert(_el$63, createComponent2(Show, {
4608
+ var _el$66 = createElement("box");
4609
+ setProp(_el$66, "flexShrink", 0);
4610
+ insert(_el$66, createComponent2(Show, {
4534
4611
  get when() {
4535
4612
  return percent() > 0;
4536
4613
  },
4537
4614
  get children() {
4538
- var _el$64 = createElement("box");
4539
- setProp(_el$64, "height", 1);
4615
+ var _el$67 = createElement("box");
4616
+ setProp(_el$67, "height", 1);
4540
4617
  effect((_p$) => {
4541
4618
  var _v$25 = `${percent() ?? 0}%`, _v$26 = palette.accent;
4542
- _v$25 !== _p$.e && (_p$.e = setProp(_el$64, "width", _v$25, _p$.e));
4543
- _v$26 !== _p$.t && (_p$.t = setProp(_el$64, "backgroundColor", _v$26, _p$.t));
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));
4544
4621
  return _p$;
4545
4622
  }, {
4546
4623
  e: void 0,
4547
4624
  t: void 0
4548
4625
  });
4549
- return _el$64;
4626
+ return _el$67;
4550
4627
  }
4551
4628
  }));
4552
4629
  effect((_p$) => {
4553
4630
  var _v$27 = !tight(), _v$28 = palette.accent, _v$29 = tight() ? 1 : 3, _v$30 = palette.panelAlt;
4554
- _v$27 !== _p$.e && (_p$.e = setProp(_el$63, "border", _v$27, _p$.e));
4555
- _v$28 !== _p$.t && (_p$.t = setProp(_el$63, "borderColor", _v$28, _p$.t));
4556
- _v$29 !== _p$.a && (_p$.a = setProp(_el$63, "height", _v$29, _p$.a));
4557
- _v$30 !== _p$.o && (_p$.o = setProp(_el$63, "backgroundColor", _v$30, _p$.o));
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));
4558
4635
  return _p$;
4559
4636
  }, {
4560
4637
  e: void 0,
@@ -4562,44 +4639,44 @@ ${selection()}
4562
4639
  a: void 0,
4563
4640
  o: void 0
4564
4641
  });
4565
- return _el$63;
4642
+ return _el$66;
4566
4643
  })(), (() => {
4567
- var _el$65 = createElement("text"), _el$66 = createTextNode(`% `), _el$67 = createTextNode(` / `);
4568
- insertNode(_el$65, _el$66);
4569
- insertNode(_el$65, _el$67);
4570
- insert(_el$65, percent, _el$66);
4571
- insert(_el$65, () => bytes(progress().bytes ?? 0), _el$67);
4572
- insert(_el$65, () => bytes(progress().total ?? 0), null);
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);
4573
4650
  effect((_p$) => {
4574
4651
  var _v$31 = palette.foreground, _v$32 = TextAttributes2.BOLD;
4575
- _v$31 !== _p$.e && (_p$.e = setProp(_el$65, "fg", _v$31, _p$.e));
4576
- _v$32 !== _p$.t && (_p$.t = setProp(_el$65, "attributes", _v$32, _p$.t));
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));
4577
4654
  return _p$;
4578
4655
  }, {
4579
4656
  e: void 0,
4580
4657
  t: void 0
4581
4658
  });
4582
- return _el$65;
4659
+ return _el$68;
4583
4660
  })(), createComponent2(Show, {
4584
4661
  get when() {
4585
4662
  return !tight();
4586
4663
  },
4587
4664
  get children() {
4588
- var _el$68 = createElement("text");
4589
- insert(_el$68, (() => {
4665
+ var _el$71 = createElement("text");
4666
+ insert(_el$71, (() => {
4590
4667
  var _c$8 = memo2(() => !!progress().speed);
4591
4668
  return () => _c$8() ? `${bytes(progress().speed)} / s` : "";
4592
4669
  })());
4593
- effect((_$p) => setProp(_el$68, "fg", palette.muted, _$p));
4594
- return _el$68;
4670
+ effect((_$p) => setProp(_el$71, "fg", palette.muted, _$p));
4671
+ return _el$71;
4595
4672
  }
4596
4673
  })];
4597
4674
  }
4598
4675
  }), (() => {
4599
- var _el$69 = createElement("text");
4600
- insertNode(_el$69, createTextNode(`Keep the USB connected until safe removal succeeds.`));
4601
- effect((_$p) => setProp(_el$69, "fg", palette.warning, _$p));
4602
- return _el$69;
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;
4603
4680
  })()];
4604
4681
  }
4605
4682
  }), createComponent2(Show, {
@@ -4608,34 +4685,34 @@ ${selection()}
4608
4685
  },
4609
4686
  get children() {
4610
4687
  return [(() => {
4611
- var _el$71 = createElement("text");
4612
- insert(_el$71, () => props.backend.successTitle);
4688
+ var _el$74 = createElement("text");
4689
+ insert(_el$74, () => props.backend.successTitle);
4613
4690
  effect((_p$) => {
4614
4691
  var _v$33 = palette.success, _v$34 = TextAttributes2.BOLD;
4615
- _v$33 !== _p$.e && (_p$.e = setProp(_el$71, "fg", _v$33, _p$.e));
4616
- _v$34 !== _p$.t && (_p$.t = setProp(_el$71, "attributes", _v$34, _p$.t));
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));
4617
4694
  return _p$;
4618
4695
  }, {
4619
4696
  e: void 0,
4620
4697
  t: void 0
4621
4698
  });
4622
- return _el$71;
4699
+ return _el$74;
4623
4700
  })(), (() => {
4624
- var _el$72 = createElement("text");
4625
- insert(_el$72, () => props.backend.successDetail);
4626
- effect((_$p) => setProp(_el$72, "fg", palette.foreground, _$p));
4627
- return _el$72;
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;
4628
4705
  })(), (() => {
4629
- var _el$73 = createElement("text");
4630
- insertNode(_el$73, createTextNode(`Compressed image and raw stream verified. Not a device read-back.`));
4631
- effect((_$p) => setProp(_el$73, "fg", palette.muted, _$p));
4632
- return _el$73;
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;
4633
4710
  })(), (() => {
4634
- var _el$75 = createElement("box");
4635
- setProp(_el$75, "gap", 1);
4636
- insert(_el$75, () => row("Choose another image", "", 0), null);
4637
- insert(_el$75, () => row("Quit", "", 1), null);
4638
- return _el$75;
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;
4639
4716
  })()];
4640
4717
  }
4641
4718
  }), createComponent2(Show, {
@@ -4644,56 +4721,67 @@ ${selection()}
4644
4721
  },
4645
4722
  get children() {
4646
4723
  return [(() => {
4647
- var _el$76 = createElement("text");
4648
- insertNode(_el$76, createTextNode(`Flash not completed`));
4724
+ var _el$79 = createElement("text");
4725
+ insertNode(_el$79, createTextNode(`Flash not completed`));
4649
4726
  effect((_p$) => {
4650
4727
  var _v$35 = palette.danger, _v$36 = TextAttributes2.BOLD;
4651
- _v$35 !== _p$.e && (_p$.e = setProp(_el$76, "fg", _v$35, _p$.e));
4652
- _v$36 !== _p$.t && (_p$.t = setProp(_el$76, "attributes", _v$36, _p$.t));
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));
4653
4730
  return _p$;
4654
4731
  }, {
4655
4732
  e: void 0,
4656
4733
  t: void 0
4657
4734
  });
4658
- return _el$76;
4735
+ return _el$79;
4659
4736
  })(), (() => {
4660
- var _el$78 = createElement("text");
4661
- insert(_el$78, error);
4662
- effect((_$p) => setProp(_el$78, "fg", palette.foreground, _$p));
4663
- return _el$78;
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;
4664
4741
  })(), (() => {
4665
- var _el$79 = createElement("box");
4666
- setProp(_el$79, "gap", 1);
4667
- insert(_el$79, () => row("Refresh & try again", "", 0), null);
4668
- insert(_el$79, () => row("Quit", "", 1), null);
4669
- return _el$79;
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;
4670
4747
  })()];
4671
4748
  }
4672
4749
  })];
4673
4750
  }
4674
4751
  }));
4675
- setProp(_el$80, "height", 1);
4676
- setProp(_el$80, "flexShrink", 0);
4677
- setProp(_el$80, "wrapMode", "none");
4678
- insert(_el$80, (() => {
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, (() => {
4679
4762
  var _c$9 = memo2(() => !!busy());
4680
- return () => _c$9() ? "Esc cancel / Q stop & quit" : dimensions().width < 56 ? "Arrows / Enter / Esc / R / Q quit" : "Arrows / Enter / Esc back / R refresh / Q quit";
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";
4681
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);
4682
4769
  effect((_p$) => {
4683
- 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;
4684
- _v$37 !== _p$.e && (_p$.e = setProp(_el$4, "backgroundColor", _v$37, _p$.e));
4685
- _v$38 !== _p$.t && (_p$.t = setProp(_el$5, "width", _v$38, _p$.t));
4686
- _v$39 !== _p$.a && (_p$.a = setProp(_el$5, "height", _v$39, _p$.a));
4687
- _v$40 !== _p$.o && (_p$.o = setProp(_el$5, "borderColor", _v$40, _p$.o));
4688
- _v$41 !== _p$.i && (_p$.i = setProp(_el$5, "backgroundColor", _v$41, _p$.i));
4689
- _v$42 !== _p$.n && (_p$.n = setProp(_el$7, "fg", _v$42, _p$.n));
4690
- _v$43 !== _p$.s && (_p$.s = setProp(_el$7, "attributes", _v$43, _p$.s));
4691
- _v$44 !== _p$.h && (_p$.h = setProp(_el$9, "fg", _v$44, _p$.h));
4692
- _v$45 !== _p$.r && (_p$.r = setProp(_el$0, "backgroundColor", _v$45, _p$.r));
4693
- _v$46 !== _p$.d && (_p$.d = setProp(_el$0, "marginTop", _v$46, _p$.d));
4694
- _v$47 !== _p$.l && (_p$.l = setProp(_el$1, "paddingTop", _v$47, _p$.l));
4695
- _v$48 !== _p$.u && (_p$.u = setProp(_el$1, "gap", _v$48, _p$.u));
4696
- _v$49 !== _p$.c && (_p$.c = setProp(_el$80, "fg", _v$49, _p$.c));
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));
4697
4785
  return _p$;
4698
4786
  }, {
4699
4787
  e: void 0,
@@ -4708,9 +4796,10 @@ ${selection()}
4708
4796
  d: void 0,
4709
4797
  l: void 0,
4710
4798
  u: void 0,
4711
- c: void 0
4799
+ c: void 0,
4800
+ w: void 0
4712
4801
  });
4713
- return _el$4;
4802
+ return _el$7;
4714
4803
  })();
4715
4804
  }
4716
4805
 
@@ -4778,3 +4867,31 @@ if (args.length > 1 || args.some((arg) => !["--list-images", "--clear-cache"].in
4778
4867
  for (const signal of signals) process.off(signal, quit);
4779
4868
  }
4780
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
+ */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "boo-flash",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Flash qualified Boo images to USB drives on macOS and Linux",
5
5
  "license": "MIT",
6
6
  "type": "module",