boo-flash 0.1.4 → 0.1.5

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.
Files changed (2) hide show
  1. package/dist/app.js +329 -321
  2. package/package.json +1 -1
package/dist/app.js CHANGED
@@ -3434,13 +3434,15 @@ var moduleDirectory = dirname3(fileURLToPath2(import.meta.url));
3434
3434
  function bytes(n) {
3435
3435
  return n >= 1024 ** 3 ? `${(n / 1024 ** 3).toFixed(1)} GiB` : `${(n / 1024 ** 2).toFixed(1)} MiB`;
3436
3436
  }
3437
- function localTimestamp(value) {
3437
+ function imageTime(value, now = Date.now(), locales) {
3438
3438
  const date = new Date(value);
3439
3439
  if (!Number.isFinite(date.getTime())) throw new Error("Invalid image timestamp.");
3440
- const part = (number) => String(number).padStart(2, "0");
3441
- const minutes = -date.getTimezoneOffset();
3442
- const offset = `${minutes < 0 ? "-" : "+"}${part(Math.floor(Math.abs(minutes) / 60))}:${part(Math.abs(minutes) % 60)}`;
3443
- return `${date.getFullYear()}-${part(date.getMonth() + 1)}-${part(date.getDate())} ${part(date.getHours())}:${part(date.getMinutes())}:${part(date.getSeconds())} ${offset}`;
3440
+ const age = now - date.getTime();
3441
+ if (age >= -60 * 1e3 && age <= 60 * 60 * 1e3) {
3442
+ const minutes = Math.max(0, Math.round(age / (60 * 1e3)));
3443
+ return new Intl.RelativeTimeFormat(locales, { numeric: "always" }).format(-minutes, "minute");
3444
+ }
3445
+ return new Intl.DateTimeFormat(locales, { dateStyle: "medium", timeStyle: "short" }).format(date);
3444
3446
  }
3445
3447
  function releaseTimestamp(headers) {
3446
3448
  const values = headers.split(/\r?\n/).flatMap((line) => {
@@ -3550,7 +3552,7 @@ async function discoverCandidates(signal) {
3550
3552
  bytes: a.size_in_bytes,
3551
3553
  digest: a.digest.slice(7)
3552
3554
  }],
3553
- candidate: { number: run.run_number, title: cleanText(run.display_title ?? "") }
3555
+ candidate: { number: run.run_number }
3554
3556
  });
3555
3557
  if (candidates.length === 10) return candidates;
3556
3558
  }
@@ -3608,7 +3610,7 @@ var FlashBackend = class {
3608
3610
  async catalog(signal) {
3609
3611
  if (!this.demo) return discoverImages(signal);
3610
3612
  await delay(350, void 0, { signal });
3611
- return { run: 149, version: "0.1.0+149", revision: "9b7574859120add5a1a478bc7923aeb1629be4ba", timestamp: "2026-08-28T14:23:45Z", images: profiles.map((profile, index) => ({
3613
+ return { run: 149, version: "0.1.0+149", revision: "9b7574859120add5a1a478bc7923aeb1629be4ba", timestamp: new Date(Date.now() - 10 * 60 * 1e3).toISOString(), images: profiles.map((profile, index) => ({
3612
3614
  profile,
3613
3615
  id: index,
3614
3616
  name: `demo-${profile}`,
@@ -3621,9 +3623,9 @@ var FlashBackend = class {
3621
3623
  const catalog = await this.catalog(signal);
3622
3624
  return this.demo === "empty" ? [] : [{
3623
3625
  ...catalog,
3624
- timestamp: "2026-08-29T01:02:03Z",
3626
+ timestamp: new Date(Date.now() - 5 * 60 * 1e3).toISOString(),
3625
3627
  images: [catalog.images[0]],
3626
- candidate: { number: 1, title: "Simulated candidate" }
3628
+ candidate: { number: 1 }
3627
3629
  }];
3628
3630
  }
3629
3631
  async disks(signal, staging = tmpdir4(), unmounted) {
@@ -3860,6 +3862,7 @@ function App(props) {
3860
3862
  detail: ""
3861
3863
  });
3862
3864
  const [frame, setFrame] = createSignal(0);
3865
+ const [now, setNow] = createSignal(Date.now());
3863
3866
  let controller = new AbortController();
3864
3867
  let pending = Promise.resolve();
3865
3868
  let closing = false;
@@ -3961,7 +3964,11 @@ function App(props) {
3961
3964
  await pending;
3962
3965
  };
3963
3966
  props.registerStop(stop);
3964
- onMount(refresh);
3967
+ onMount(() => {
3968
+ refresh();
3969
+ const timer = setInterval(() => setNow(Date.now()), 60 * 1e3);
3970
+ onCleanup(() => clearInterval(timer));
3971
+ });
3965
3972
  const activate = () => {
3966
3973
  if (busy() || !visible()) return;
3967
3974
  if (screen() === "setup") {
@@ -4104,10 +4111,9 @@ function App(props) {
4104
4111
  return detail && (!tight() || detailWhenTight);
4105
4112
  },
4106
4113
  get children() {
4107
- var _el$3 = createElement("text"), _el$4 = createTextNode(` `);
4108
- insertNode(_el$3, _el$4);
4114
+ var _el$3 = createElement("text");
4109
4115
  setProp(_el$3, "wrapMode", "none");
4110
- insert(_el$3, detail, null);
4116
+ insert(_el$3, ` ${detail}`);
4111
4117
  effect((_$p) => setProp(_el$3, "fg", palette.muted, _$p));
4112
4118
  return _el$3;
4113
4119
  }
@@ -4128,43 +4134,43 @@ function App(props) {
4128
4134
  return _el$;
4129
4135
  })();
4130
4136
  return (() => {
4131
- var _el$5 = createElement("box"), _el$6 = createElement("box"), _el$7 = createElement("box"), _el$8 = createElement("text"), _el$0 = createElement("text"), _el$1 = createElement("box"), _el$10 = createElement("box"), _el$88 = createElement("text");
4137
+ 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$87 = createElement("text");
4138
+ insertNode(_el$4, _el$5);
4139
+ setProp(_el$4, "width", "100%");
4140
+ setProp(_el$4, "height", "100%");
4141
+ setProp(_el$4, "justifyContent", "center");
4142
+ setProp(_el$4, "alignItems", "center");
4132
4143
  insertNode(_el$5, _el$6);
4133
- setProp(_el$5, "width", "100%");
4134
- setProp(_el$5, "height", "100%");
4135
- setProp(_el$5, "justifyContent", "center");
4136
- setProp(_el$5, "alignItems", "center");
4144
+ insertNode(_el$5, _el$0);
4145
+ insertNode(_el$5, _el$1);
4146
+ insertNode(_el$5, _el$87);
4147
+ setProp(_el$5, "border", true);
4148
+ setProp(_el$5, "borderStyle", "single");
4149
+ setProp(_el$5, "flexDirection", "column");
4150
+ setProp(_el$5, "paddingX", 1);
4137
4151
  insertNode(_el$6, _el$7);
4138
- insertNode(_el$6, _el$1);
4139
- insertNode(_el$6, _el$10);
4140
- insertNode(_el$6, _el$88);
4141
- setProp(_el$6, "border", true);
4142
- setProp(_el$6, "borderStyle", "single");
4143
- setProp(_el$6, "flexDirection", "column");
4144
- setProp(_el$6, "paddingX", 1);
4145
- insertNode(_el$7, _el$8);
4146
- insertNode(_el$7, _el$0);
4147
- setProp(_el$7, "height", 1);
4148
- setProp(_el$7, "flexDirection", "row");
4149
- setProp(_el$7, "justifyContent", "space-between");
4150
- setProp(_el$7, "flexShrink", 0);
4151
- insertNode(_el$8, createTextNode(`BOO FLASH`));
4152
- insert(_el$0, () => props.backend.platformLabel);
4153
- setProp(_el$1, "height", 1);
4154
- setProp(_el$1, "flexShrink", 0);
4155
- setProp(_el$10, "flexGrow", 1);
4156
- setProp(_el$10, "minHeight", 0);
4157
- setProp(_el$10, "overflow", "hidden");
4158
- insert(_el$10, createComponent2(Show, {
4152
+ insertNode(_el$6, _el$9);
4153
+ setProp(_el$6, "height", 1);
4154
+ setProp(_el$6, "flexDirection", "row");
4155
+ setProp(_el$6, "justifyContent", "space-between");
4156
+ setProp(_el$6, "flexShrink", 0);
4157
+ insertNode(_el$7, createTextNode(`BOO FLASH`));
4158
+ insert(_el$9, () => props.backend.platformLabel);
4159
+ setProp(_el$0, "height", 1);
4160
+ setProp(_el$0, "flexShrink", 0);
4161
+ setProp(_el$1, "flexGrow", 1);
4162
+ setProp(_el$1, "minHeight", 0);
4163
+ setProp(_el$1, "overflow", "hidden");
4164
+ insert(_el$1, createComponent2(Show, {
4159
4165
  get when() {
4160
4166
  return visible();
4161
4167
  },
4162
4168
  get fallback() {
4163
4169
  return (() => {
4164
- var _el$89 = createElement("text");
4165
- insertNode(_el$89, createTextNode(`Enlarge the terminal to show the full choices and erase warning. Q quits.`));
4166
- effect((_$p) => setProp(_el$89, "fg", palette.warning, _$p));
4167
- return _el$89;
4170
+ var _el$88 = createElement("text");
4171
+ insertNode(_el$88, createTextNode(`Enlarge the terminal to show the full choices and erase warning. Q quits.`));
4172
+ effect((_$p) => setProp(_el$88, "fg", palette.warning, _$p));
4173
+ return _el$88;
4168
4174
  })();
4169
4175
  },
4170
4176
  get children() {
@@ -4174,41 +4180,43 @@ function App(props) {
4174
4180
  },
4175
4181
  get children() {
4176
4182
  return [(() => {
4177
- var _el$11 = createElement("text");
4178
- insertNode(_el$11, createTextNode(`Choose the target computer's GPU`));
4183
+ var _el$10 = createElement("text");
4184
+ insertNode(_el$10, createTextNode(`Choose the target computer's GPU`));
4179
4185
  effect((_p$) => {
4180
4186
  var _v$5 = palette.foreground, _v$6 = TextAttributes2.BOLD;
4181
- _v$5 !== _p$.e && (_p$.e = setProp(_el$11, "fg", _v$5, _p$.e));
4182
- _v$6 !== _p$.t && (_p$.t = setProp(_el$11, "attributes", _v$6, _p$.t));
4187
+ _v$5 !== _p$.e && (_p$.e = setProp(_el$10, "fg", _v$5, _p$.e));
4188
+ _v$6 !== _p$.t && (_p$.t = setProp(_el$10, "attributes", _v$6, _p$.t));
4183
4189
  return _p$;
4184
4190
  }, {
4185
4191
  e: void 0,
4186
4192
  t: void 0
4187
4193
  });
4188
- return _el$11;
4194
+ return _el$10;
4189
4195
  })(), (() => {
4190
- var _el$13 = createElement("text");
4191
- insert(_el$13, (() => {
4196
+ var _el$12 = createElement("text");
4197
+ insert(_el$12, (() => {
4192
4198
  var _c$ = memo2(() => !!loading());
4193
- return () => _c$() ? `${spinner()} Finding latest Boo release...` : memo2(() => !!catalog())() ? `Boo ${catalog().version} / ${catalog().revision.slice(0, 7)} / ${localTimestamp(catalog().timestamp)}` : "Dependencies needed. Enter to set up.";
4199
+ 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.";
4194
4200
  })());
4195
- effect((_$p) => setProp(_el$13, "fg", palette.muted, _$p));
4196
- return _el$13;
4201
+ effect((_$p) => setProp(_el$12, "fg", palette.muted, _$p));
4202
+ return _el$12;
4197
4203
  })(), (() => {
4198
- var _el$14 = createElement("box");
4199
- setProp(_el$14, "gap", 0);
4200
- insert(_el$14, createComponent2(For, {
4204
+ var _el$13 = createElement("box");
4205
+ setProp(_el$13, "gap", 0);
4206
+ setProp(_el$13, "marginBottom", 1);
4207
+ setProp(_el$13, "flexShrink", 0);
4208
+ insert(_el$13, createComponent2(For, {
4201
4209
  each: profiles,
4202
4210
  children: (profile, index) => row(profile.toUpperCase(), profile === "nvidia" ? "NVIDIA graphics" : `${profile === "intel" ? "Intel" : "AMD Radeon"} graphics`, index())
4203
4211
  }), null);
4204
- insert(_el$14, () => row("Candidates", "", 3), null);
4205
- insert(_el$14, () => row("Clear cached images", "", 4), null);
4206
- return _el$14;
4212
+ insert(_el$13, () => row("Candidates", "", 3), null);
4213
+ insert(_el$13, () => row("Clear cached images", "", 4), null);
4214
+ return _el$13;
4207
4215
  })(), (() => {
4208
- var _el$15 = createElement("text");
4209
- insertNode(_el$15, createTextNode(`All images support Intel and AMD x86_64 CPUs.`));
4210
- effect((_$p) => setProp(_el$15, "fg", palette.muted, _$p));
4211
- return _el$15;
4216
+ var _el$14 = createElement("text");
4217
+ insertNode(_el$14, createTextNode(`All images support Intel and AMD x86_64 CPUs.`));
4218
+ effect((_$p) => setProp(_el$14, "fg", palette.muted, _$p));
4219
+ return _el$14;
4212
4220
  })()];
4213
4221
  }
4214
4222
  }), createComponent2(Show, {
@@ -4217,34 +4225,34 @@ function App(props) {
4217
4225
  },
4218
4226
  get children() {
4219
4227
  return [(() => {
4220
- var _el$17 = createElement("text");
4221
- insertNode(_el$17, createTextNode(`Clear cached images?`));
4228
+ var _el$16 = createElement("text");
4229
+ insertNode(_el$16, createTextNode(`Clear cached images?`));
4222
4230
  effect((_p$) => {
4223
4231
  var _v$7 = palette.warning, _v$8 = TextAttributes2.BOLD;
4224
- _v$7 !== _p$.e && (_p$.e = setProp(_el$17, "fg", _v$7, _p$.e));
4225
- _v$8 !== _p$.t && (_p$.t = setProp(_el$17, "attributes", _v$8, _p$.t));
4232
+ _v$7 !== _p$.e && (_p$.e = setProp(_el$16, "fg", _v$7, _p$.e));
4233
+ _v$8 !== _p$.t && (_p$.t = setProp(_el$16, "attributes", _v$8, _p$.t));
4226
4234
  return _p$;
4227
4235
  }, {
4228
4236
  e: void 0,
4229
4237
  t: void 0
4230
4238
  });
4231
- return _el$17;
4239
+ return _el$16;
4232
4240
  })(), (() => {
4233
- var _el$19 = createElement("text");
4234
- insertNode(_el$19, createTextNode(`Removes downloaded archives only, NOT USB contents. Active flashes are unaffected.`));
4235
- effect((_$p) => setProp(_el$19, "fg", palette.foreground, _$p));
4236
- return _el$19;
4241
+ var _el$18 = createElement("text");
4242
+ insertNode(_el$18, createTextNode(`Removes downloaded archives only, NOT USB contents. Active flashes are unaffected.`));
4243
+ effect((_$p) => setProp(_el$18, "fg", palette.foreground, _$p));
4244
+ return _el$18;
4237
4245
  })(), (() => {
4238
- var _el$21 = createElement("text");
4239
- insertNode(_el$21, createTextNode(`Images will download again when needed. Pending downloads may still finish and be cached.`));
4240
- effect((_$p) => setProp(_el$21, "fg", palette.muted, _$p));
4241
- return _el$21;
4246
+ var _el$20 = createElement("text");
4247
+ insertNode(_el$20, createTextNode(`Images will download again when needed. Pending downloads may still finish and be cached.`));
4248
+ effect((_$p) => setProp(_el$20, "fg", palette.muted, _$p));
4249
+ return _el$20;
4242
4250
  })(), (() => {
4243
- var _el$23 = createElement("box");
4244
- insert(_el$23, () => row("Go back", "", 0), null);
4245
- insert(_el$23, () => row(loading() ? "Clearing..." : "Clear cached images", "", 1, true), null);
4246
- effect((_$p) => setProp(_el$23, "gap", tight() ? 0 : 1, _$p));
4247
- return _el$23;
4251
+ var _el$22 = createElement("box");
4252
+ insert(_el$22, () => row("Go back", "", 0), null);
4253
+ insert(_el$22, () => row(loading() ? "Clearing..." : "Clear cached images", "", 1, true), null);
4254
+ effect((_$p) => setProp(_el$22, "gap", tight() ? 0 : 1, _$p));
4255
+ return _el$22;
4248
4256
  })()];
4249
4257
  }
4250
4258
  }), createComponent2(Show, {
@@ -4253,23 +4261,23 @@ function App(props) {
4253
4261
  },
4254
4262
  get children() {
4255
4263
  return [(() => {
4256
- var _el$24 = createElement("text");
4257
- insertNode(_el$24, createTextNode(`Cache cleared`));
4264
+ var _el$23 = createElement("text");
4265
+ insertNode(_el$23, createTextNode(`Cache cleared`));
4258
4266
  effect((_p$) => {
4259
4267
  var _v$9 = palette.success, _v$0 = TextAttributes2.BOLD;
4260
- _v$9 !== _p$.e && (_p$.e = setProp(_el$24, "fg", _v$9, _p$.e));
4261
- _v$0 !== _p$.t && (_p$.t = setProp(_el$24, "attributes", _v$0, _p$.t));
4268
+ _v$9 !== _p$.e && (_p$.e = setProp(_el$23, "fg", _v$9, _p$.e));
4269
+ _v$0 !== _p$.t && (_p$.t = setProp(_el$23, "attributes", _v$0, _p$.t));
4262
4270
  return _p$;
4263
4271
  }, {
4264
4272
  e: void 0,
4265
4273
  t: void 0
4266
4274
  });
4267
- return _el$24;
4275
+ return _el$23;
4268
4276
  })(), (() => {
4269
- var _el$26 = createElement("text");
4270
- insert(_el$26, notice);
4271
- effect((_$p) => setProp(_el$26, "fg", palette.foreground, _$p));
4272
- return _el$26;
4277
+ var _el$25 = createElement("text");
4278
+ insert(_el$25, notice);
4279
+ effect((_$p) => setProp(_el$25, "fg", palette.foreground, _$p));
4280
+ return _el$25;
4273
4281
  })(), memo2(() => row("Go back", "", 0))];
4274
4282
  }
4275
4283
  }), createComponent2(Show, {
@@ -4278,34 +4286,34 @@ function App(props) {
4278
4286
  },
4279
4287
  get children() {
4280
4288
  return [(() => {
4281
- var _el$27 = createElement("text");
4282
- insertNode(_el$27, createTextNode(`Candidates`));
4289
+ var _el$26 = createElement("text");
4290
+ insertNode(_el$26, createTextNode(`Candidates`));
4283
4291
  effect((_p$) => {
4284
4292
  var _v$1 = palette.foreground, _v$10 = TextAttributes2.BOLD;
4285
- _v$1 !== _p$.e && (_p$.e = setProp(_el$27, "fg", _v$1, _p$.e));
4286
- _v$10 !== _p$.t && (_p$.t = setProp(_el$27, "attributes", _v$10, _p$.t));
4293
+ _v$1 !== _p$.e && (_p$.e = setProp(_el$26, "fg", _v$1, _p$.e));
4294
+ _v$10 !== _p$.t && (_p$.t = setProp(_el$26, "attributes", _v$10, _p$.t));
4287
4295
  return _p$;
4288
4296
  }, {
4289
4297
  e: void 0,
4290
4298
  t: void 0
4291
4299
  });
4292
- return _el$27;
4300
+ return _el$26;
4293
4301
  })(), (() => {
4294
- var _el$29 = createElement("text");
4295
- insertNode(_el$29, createTextNode(`Build-only; not boot/install/hardware qualified.`));
4296
- effect((_$p) => setProp(_el$29, "fg", palette.warning, _$p));
4297
- return _el$29;
4302
+ var _el$28 = createElement("text");
4303
+ insertNode(_el$28, createTextNode(`Build-only; not boot/install/hardware qualified.`));
4304
+ effect((_$p) => setProp(_el$28, "fg", palette.warning, _$p));
4305
+ return _el$28;
4298
4306
  })(), createComponent2(Show, {
4299
4307
  get when() {
4300
4308
  return !loading();
4301
4309
  },
4302
4310
  get fallback() {
4303
4311
  return (() => {
4304
- var _el$91 = createElement("text"), _el$92 = createTextNode(` Finding completed candidates...`);
4305
- insertNode(_el$91, _el$92);
4306
- insert(_el$91, spinner, _el$92);
4307
- effect((_$p) => setProp(_el$91, "fg", palette.muted, _$p));
4308
- return _el$91;
4312
+ var _el$90 = createElement("text"), _el$91 = createTextNode(` Finding completed candidates...`);
4313
+ insertNode(_el$90, _el$91);
4314
+ insert(_el$90, spinner, _el$91);
4315
+ effect((_$p) => setProp(_el$90, "fg", palette.muted, _$p));
4316
+ return _el$90;
4309
4317
  })();
4310
4318
  },
4311
4319
  get children() {
@@ -4315,31 +4323,31 @@ function App(props) {
4315
4323
  },
4316
4324
  get fallback() {
4317
4325
  return [(() => {
4318
- var _el$93 = createElement("text");
4319
- insertNode(_el$93, createTextNode(`No completed candidates available`));
4320
- effect((_$p) => setProp(_el$93, "fg", palette.muted, _$p));
4321
- return _el$93;
4326
+ var _el$92 = createElement("text");
4327
+ insertNode(_el$92, createTextNode(`No completed candidates available`));
4328
+ effect((_$p) => setProp(_el$92, "fg", palette.muted, _$p));
4329
+ return _el$92;
4322
4330
  })(), memo2(() => row("Go back", "", 0))];
4323
4331
  },
4324
4332
  get children() {
4325
4333
  return [(() => {
4326
- var _el$31 = createElement("box");
4327
- setProp(_el$31, "gap", 0);
4328
- insert(_el$31, createComponent2(For, {
4334
+ var _el$30 = createElement("box");
4335
+ setProp(_el$30, "gap", 0);
4336
+ insert(_el$30, createComponent2(For, {
4329
4337
  get each() {
4330
4338
  return candidates().slice(Math.max(0, cursor() - 2), Math.max(3, cursor() + 1));
4331
4339
  },
4332
- children: (c, index) => row(`${c.images[0].profile.toUpperCase()} ${c.revision.slice(0, 7)} #${c.candidate.number}`, `${localTimestamp(c.timestamp)} ${c.candidate.title}`, index() + Math.max(0, cursor() - 2), false, true)
4340
+ 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)
4333
4341
  }));
4334
- return _el$31;
4342
+ return _el$30;
4335
4343
  })(), (() => {
4336
- var _el$32 = createElement("text"), _el$33 = createTextNode(` of `), _el$34 = createTextNode(` candidates / Enter to choose`);
4337
- insertNode(_el$32, _el$33);
4338
- insertNode(_el$32, _el$34);
4339
- insert(_el$32, () => cursor() + 1, _el$33);
4340
- insert(_el$32, () => candidates().length, _el$34);
4341
- effect((_$p) => setProp(_el$32, "fg", palette.muted, _$p));
4342
- return _el$32;
4344
+ var _el$31 = createElement("text"), _el$32 = createTextNode(` of `), _el$33 = createTextNode(` candidates / Enter to choose`);
4345
+ insertNode(_el$31, _el$32);
4346
+ insertNode(_el$31, _el$33);
4347
+ insert(_el$31, () => cursor() + 1, _el$32);
4348
+ insert(_el$31, () => candidates().length, _el$33);
4349
+ effect((_$p) => setProp(_el$31, "fg", palette.muted, _$p));
4350
+ return _el$31;
4343
4351
  })()];
4344
4352
  }
4345
4353
  });
@@ -4352,71 +4360,71 @@ function App(props) {
4352
4360
  },
4353
4361
  get children() {
4354
4362
  return [(() => {
4355
- var _el$35 = createElement("text");
4356
- insertNode(_el$35, createTextNode(`Set up required tools`));
4363
+ var _el$34 = createElement("text");
4364
+ insertNode(_el$34, createTextNode(`Set up required tools`));
4357
4365
  effect((_p$) => {
4358
4366
  var _v$11 = palette.accent, _v$12 = TextAttributes2.BOLD;
4359
- _v$11 !== _p$.e && (_p$.e = setProp(_el$35, "fg", _v$11, _p$.e));
4360
- _v$12 !== _p$.t && (_p$.t = setProp(_el$35, "attributes", _v$12, _p$.t));
4367
+ _v$11 !== _p$.e && (_p$.e = setProp(_el$34, "fg", _v$11, _p$.e));
4368
+ _v$12 !== _p$.t && (_p$.t = setProp(_el$34, "attributes", _v$12, _p$.t));
4361
4369
  return _p$;
4362
4370
  }, {
4363
4371
  e: void 0,
4364
4372
  t: void 0
4365
4373
  });
4366
- return _el$35;
4374
+ return _el$34;
4367
4375
  })(), (() => {
4368
- var _el$37 = createElement("text"), _el$38 = createTextNode(`Missing: `);
4369
- insertNode(_el$37, _el$38);
4370
- insert(_el$37, () => dependencies3().missing.join(", "), null);
4371
- effect((_$p) => setProp(_el$37, "fg", palette.foreground, _$p));
4372
- return _el$37;
4376
+ var _el$36 = createElement("text"), _el$37 = createTextNode(`Missing: `);
4377
+ insertNode(_el$36, _el$37);
4378
+ insert(_el$36, () => dependencies3().missing.join(", "), null);
4379
+ effect((_$p) => setProp(_el$36, "fg", palette.foreground, _$p));
4380
+ return _el$36;
4373
4381
  })(), createComponent2(Show, {
4374
4382
  get when() {
4375
4383
  return !error();
4376
4384
  },
4377
4385
  get fallback() {
4378
4386
  return (() => {
4379
- var _el$95 = createElement("text");
4380
- insert(_el$95, error);
4381
- effect((_$p) => setProp(_el$95, "fg", palette.warning, _$p));
4382
- return _el$95;
4387
+ var _el$94 = createElement("text");
4388
+ insert(_el$94, error);
4389
+ effect((_$p) => setProp(_el$94, "fg", palette.warning, _$p));
4390
+ return _el$94;
4383
4391
  })();
4384
4392
  },
4385
4393
  get children() {
4386
- var _el$39 = createElement("text");
4387
- insert(_el$39, (() => {
4394
+ var _el$38 = createElement("text");
4395
+ insert(_el$38, (() => {
4388
4396
  var _c$2 = memo2(() => !!dependencies3().installer);
4389
4397
  return () => _c$2() ? `${dependencies3().installer} will install ${dependencies3().missing.join(" and ")} and required dependencies, then continue.` : dependencies3().guidance;
4390
4398
  })());
4391
- effect((_$p) => setProp(_el$39, "fg", palette.muted, _$p));
4392
- return _el$39;
4399
+ effect((_$p) => setProp(_el$38, "fg", palette.muted, _$p));
4400
+ return _el$38;
4393
4401
  }
4394
4402
  }), createComponent2(Show, {
4395
4403
  get when() {
4396
4404
  return !tight();
4397
4405
  },
4398
4406
  get children() {
4399
- var _el$40 = createElement("text");
4400
- insert(_el$40, () => dependencies3().installer ? "Uses the ordinary terminal. Ctrl-C cancels and quits." : "Boo Flash will not change system packages on this platform.");
4401
- effect((_$p) => setProp(_el$40, "fg", palette.muted, _$p));
4402
- return _el$40;
4407
+ var _el$39 = createElement("text");
4408
+ insert(_el$39, () => dependencies3().installer ? "Uses the ordinary terminal. Ctrl-C cancels and quits." : "Boo Flash will not change system packages on this platform.");
4409
+ effect((_$p) => setProp(_el$39, "fg", palette.muted, _$p));
4410
+ return _el$39;
4403
4411
  }
4404
4412
  }), createComponent2(Show, {
4405
4413
  get when() {
4406
4414
  return props.backend.demo;
4407
4415
  },
4408
4416
  get children() {
4409
- var _el$41 = createElement("text");
4410
- insertNode(_el$41, createTextNode(`Setup simulation; no software installed.`));
4411
- effect((_$p) => setProp(_el$41, "fg", palette.warning, _$p));
4412
- return _el$41;
4417
+ var _el$40 = createElement("text");
4418
+ insertNode(_el$40, createTextNode(`Setup simulation; no software installed.`));
4419
+ effect((_$p) => setProp(_el$40, "fg", palette.warning, _$p));
4420
+ return _el$40;
4413
4421
  }
4414
4422
  }), (() => {
4415
- var _el$43 = createElement("box");
4416
- insert(_el$43, () => row("Go back", "", 0), null);
4417
- insert(_el$43, () => row(dependencies3().installer ? `Install ${dependencies3().missing.join(" + ")}` : "Refresh", "", 1), null);
4418
- effect((_$p) => setProp(_el$43, "gap", tight() ? 0 : 1, _$p));
4419
- return _el$43;
4423
+ var _el$42 = createElement("box");
4424
+ insert(_el$42, () => row("Go back", "", 0), null);
4425
+ insert(_el$42, () => row(dependencies3().installer ? `Install ${dependencies3().missing.join(" + ")}` : "Refresh", "", 1), null);
4426
+ effect((_$p) => setProp(_el$42, "gap", tight() ? 0 : 1, _$p));
4427
+ return _el$42;
4420
4428
  })()];
4421
4429
  }
4422
4430
  }), createComponent2(Show, {
@@ -4425,42 +4433,42 @@ function App(props) {
4425
4433
  },
4426
4434
  get children() {
4427
4435
  return [(() => {
4428
- var _el$44 = createElement("text"), _el$45 = createTextNode(` `);
4429
- insertNode(_el$44, _el$45);
4430
- insert(_el$44, spinner, _el$45);
4431
- insert(_el$44, () => stopping() ? "Waiting for setup to stop..." : "Installing required tools", null);
4436
+ var _el$43 = createElement("text"), _el$44 = createTextNode(` `);
4437
+ insertNode(_el$43, _el$44);
4438
+ insert(_el$43, spinner, _el$44);
4439
+ insert(_el$43, () => stopping() ? "Waiting for setup to stop..." : "Installing required tools", null);
4432
4440
  effect((_p$) => {
4433
4441
  var _v$13 = palette.accent, _v$14 = TextAttributes2.BOLD;
4434
- _v$13 !== _p$.e && (_p$.e = setProp(_el$44, "fg", _v$13, _p$.e));
4435
- _v$14 !== _p$.t && (_p$.t = setProp(_el$44, "attributes", _v$14, _p$.t));
4442
+ _v$13 !== _p$.e && (_p$.e = setProp(_el$43, "fg", _v$13, _p$.e));
4443
+ _v$14 !== _p$.t && (_p$.t = setProp(_el$43, "attributes", _v$14, _p$.t));
4436
4444
  return _p$;
4437
4445
  }, {
4438
4446
  e: void 0,
4439
4447
  t: void 0
4440
4448
  });
4441
- return _el$44;
4449
+ return _el$43;
4442
4450
  })(), (() => {
4443
- var _el$46 = createElement("text"), _el$47 = createTextNode(` via `);
4444
- insertNode(_el$46, _el$47);
4445
- insert(_el$46, () => dependencies3().missing.join(" + "), _el$47);
4446
- insert(_el$46, () => dependencies3().installer, null);
4447
- effect((_$p) => setProp(_el$46, "fg", palette.foreground, _$p));
4448
- return _el$46;
4451
+ var _el$45 = createElement("text"), _el$46 = createTextNode(` via `);
4452
+ insertNode(_el$45, _el$46);
4453
+ insert(_el$45, () => dependencies3().missing.join(" + "), _el$46);
4454
+ insert(_el$45, () => dependencies3().installer, null);
4455
+ effect((_$p) => setProp(_el$45, "fg", palette.foreground, _$p));
4456
+ return _el$45;
4449
4457
  })(), (() => {
4450
- var _el$48 = createElement("text"), _el$49 = createTextNode(` uses the ordinary terminal. Ctrl-C cancels and quits; wait for cleanup.`);
4451
- insertNode(_el$48, _el$49);
4452
- insert(_el$48, () => dependencies3().installer, _el$49);
4453
- effect((_$p) => setProp(_el$48, "fg", palette.muted, _$p));
4454
- return _el$48;
4458
+ var _el$47 = createElement("text"), _el$48 = createTextNode(` uses the ordinary terminal. Ctrl-C cancels and quits; wait for cleanup.`);
4459
+ insertNode(_el$47, _el$48);
4460
+ insert(_el$47, () => dependencies3().installer, _el$48);
4461
+ effect((_$p) => setProp(_el$47, "fg", palette.muted, _$p));
4462
+ return _el$47;
4455
4463
  })(), createComponent2(Show, {
4456
4464
  get when() {
4457
4465
  return props.backend.demo;
4458
4466
  },
4459
4467
  get children() {
4460
- var _el$50 = createElement("text");
4461
- insertNode(_el$50, createTextNode(`Setup simulation; no software installed.`));
4462
- effect((_$p) => setProp(_el$50, "fg", palette.warning, _$p));
4463
- return _el$50;
4468
+ var _el$49 = createElement("text");
4469
+ insertNode(_el$49, createTextNode(`Setup simulation; no software installed.`));
4470
+ effect((_$p) => setProp(_el$49, "fg", palette.warning, _$p));
4471
+ return _el$49;
4464
4472
  }
4465
4473
  })];
4466
4474
  }
@@ -4470,26 +4478,26 @@ function App(props) {
4470
4478
  },
4471
4479
  get children() {
4472
4480
  return [(() => {
4473
- var _el$52 = createElement("text");
4474
- insertNode(_el$52, createTextNode(`Choose a USB drive`));
4481
+ var _el$51 = createElement("text");
4482
+ insertNode(_el$51, createTextNode(`Choose a USB drive`));
4475
4483
  effect((_p$) => {
4476
4484
  var _v$15 = palette.foreground, _v$16 = TextAttributes2.BOLD;
4477
- _v$15 !== _p$.e && (_p$.e = setProp(_el$52, "fg", _v$15, _p$.e));
4478
- _v$16 !== _p$.t && (_p$.t = setProp(_el$52, "attributes", _v$16, _p$.t));
4485
+ _v$15 !== _p$.e && (_p$.e = setProp(_el$51, "fg", _v$15, _p$.e));
4486
+ _v$16 !== _p$.t && (_p$.t = setProp(_el$51, "attributes", _v$16, _p$.t));
4479
4487
  return _p$;
4480
4488
  }, {
4481
4489
  e: void 0,
4482
4490
  t: void 0
4483
4491
  });
4484
- return _el$52;
4492
+ return _el$51;
4485
4493
  })(), (() => {
4486
- var _el$54 = createElement("text");
4487
- insert(_el$54, (() => {
4494
+ var _el$53 = createElement("text");
4495
+ insert(_el$53, (() => {
4488
4496
  var _c$3 = memo2(() => !!loading());
4489
4497
  return () => _c$3() ? `${spinner()} Checking disks and protected storage...` : "System, home and app storage are excluded.";
4490
4498
  })());
4491
- effect((_$p) => setProp(_el$54, "fg", palette.muted, _$p));
4492
- return _el$54;
4499
+ effect((_$p) => setProp(_el$53, "fg", palette.muted, _$p));
4500
+ return _el$53;
4493
4501
  })(), createComponent2(Show, {
4494
4502
  get when() {
4495
4503
  return !loading();
@@ -4501,31 +4509,31 @@ function App(props) {
4501
4509
  },
4502
4510
  get fallback() {
4503
4511
  return (() => {
4504
- var _el$96 = createElement("text");
4505
- insertNode(_el$96, createTextNode(`No eligible USB drives. Connect a writable external USB drive, then press R to refresh.`));
4506
- effect((_$p) => setProp(_el$96, "fg", palette.warning, _$p));
4507
- return _el$96;
4512
+ var _el$95 = createElement("text");
4513
+ insertNode(_el$95, createTextNode(`No eligible USB drives. Connect a writable external USB drive, then press R to refresh.`));
4514
+ effect((_$p) => setProp(_el$95, "fg", palette.warning, _$p));
4515
+ return _el$95;
4508
4516
  })();
4509
4517
  },
4510
4518
  get children() {
4511
4519
  return [(() => {
4512
- var _el$55 = createElement("box");
4513
- setProp(_el$55, "gap", 0);
4514
- insert(_el$55, createComponent2(For, {
4520
+ var _el$54 = createElement("box");
4521
+ setProp(_el$54, "gap", 0);
4522
+ insert(_el$54, createComponent2(For, {
4515
4523
  get each() {
4516
4524
  return disks3().slice(Math.max(0, cursor() - 2), Math.max(3, cursor() + 1));
4517
4525
  },
4518
4526
  children: (d, index) => row(d.name, `${path(d)} / ${bytes(d.bytes)} / USB`, index() + Math.max(0, cursor() - 2))
4519
4527
  }));
4520
- return _el$55;
4528
+ return _el$54;
4521
4529
  })(), (() => {
4522
- var _el$56 = createElement("text");
4523
- insert(_el$56, (() => {
4530
+ var _el$55 = createElement("text");
4531
+ insert(_el$55, (() => {
4524
4532
  var _c$4 = memo2(() => cursor() < 0);
4525
4533
  return () => _c$4() ? "Use arrows to select a drive. Nothing is selected yet." : `${cursor() + 1} of ${disks3().length} drives / Enter to review`;
4526
4534
  })());
4527
- effect((_$p) => setProp(_el$56, "fg", palette.muted, _$p));
4528
- return _el$56;
4535
+ effect((_$p) => setProp(_el$55, "fg", palette.muted, _$p));
4536
+ return _el$55;
4529
4537
  })()];
4530
4538
  }
4531
4539
  });
@@ -4538,44 +4546,44 @@ function App(props) {
4538
4546
  },
4539
4547
  get children() {
4540
4548
  return [(() => {
4541
- var _el$57 = createElement("text");
4542
- insertNode(_el$57, createTextNode(`Erase this entire USB drive?`));
4549
+ var _el$56 = createElement("text");
4550
+ insertNode(_el$56, createTextNode(`Erase this entire USB drive?`));
4543
4551
  effect((_p$) => {
4544
4552
  var _v$17 = palette.warning, _v$18 = TextAttributes2.BOLD;
4545
- _v$17 !== _p$.e && (_p$.e = setProp(_el$57, "fg", _v$17, _p$.e));
4546
- _v$18 !== _p$.t && (_p$.t = setProp(_el$57, "attributes", _v$18, _p$.t));
4553
+ _v$17 !== _p$.e && (_p$.e = setProp(_el$56, "fg", _v$17, _p$.e));
4554
+ _v$18 !== _p$.t && (_p$.t = setProp(_el$56, "attributes", _v$18, _p$.t));
4547
4555
  return _p$;
4548
4556
  }, {
4549
4557
  e: void 0,
4550
4558
  t: void 0
4551
4559
  });
4552
- return _el$57;
4560
+ return _el$56;
4553
4561
  })(), (() => {
4554
- var _el$59 = createElement("box"), _el$60 = createElement("text"), _el$61 = createElement("text"), _el$62 = createElement("text"), _el$63 = createTextNode(` / `);
4555
- insertNode(_el$59, _el$60);
4556
- insertNode(_el$59, _el$61);
4557
- insertNode(_el$59, _el$62);
4558
- setProp(_el$59, "paddingX", 1);
4559
- setProp(_el$60, "height", 1);
4560
- setProp(_el$60, "wrapMode", "none");
4561
- insert(_el$60, () => disk()?.name);
4562
- insert(_el$61, (() => {
4562
+ var _el$58 = createElement("box"), _el$59 = createElement("text"), _el$60 = createElement("text"), _el$61 = createElement("text"), _el$62 = createTextNode(` / `);
4563
+ insertNode(_el$58, _el$59);
4564
+ insertNode(_el$58, _el$60);
4565
+ insertNode(_el$58, _el$61);
4566
+ setProp(_el$58, "paddingX", 1);
4567
+ setProp(_el$59, "height", 1);
4568
+ setProp(_el$59, "wrapMode", "none");
4569
+ insert(_el$59, () => disk()?.name);
4570
+ insert(_el$60, (() => {
4563
4571
  var _c$5 = memo2(() => !!disk());
4564
4572
  return () => _c$5() ? `${path(disk())} / ${bytes(disk().bytes)}` : "";
4565
4573
  })());
4566
- insertNode(_el$62, _el$63);
4567
- insert(_el$62, () => image()?.profile.toUpperCase(), _el$63);
4568
- insert(_el$62, (() => {
4574
+ insertNode(_el$61, _el$62);
4575
+ insert(_el$61, () => image()?.profile.toUpperCase(), _el$62);
4576
+ insert(_el$61, (() => {
4569
4577
  var _c$6 = memo2(() => !!catalog()?.candidate);
4570
4578
  return () => _c$6() ? `candidate (build-only) ${catalog()?.revision.slice(0, 7)}` : `Boo ${catalog()?.version}`;
4571
4579
  })(), null);
4572
4580
  effect((_p$) => {
4573
4581
  var _v$19 = palette.panelAlt, _v$20 = palette.foreground, _v$21 = TextAttributes2.BOLD, _v$22 = palette.accent, _v$23 = catalog()?.candidate ? palette.warning : palette.muted;
4574
- _v$19 !== _p$.e && (_p$.e = setProp(_el$59, "backgroundColor", _v$19, _p$.e));
4575
- _v$20 !== _p$.t && (_p$.t = setProp(_el$60, "fg", _v$20, _p$.t));
4576
- _v$21 !== _p$.a && (_p$.a = setProp(_el$60, "attributes", _v$21, _p$.a));
4577
- _v$22 !== _p$.o && (_p$.o = setProp(_el$61, "fg", _v$22, _p$.o));
4578
- _v$23 !== _p$.i && (_p$.i = setProp(_el$62, "fg", _v$23, _p$.i));
4582
+ _v$19 !== _p$.e && (_p$.e = setProp(_el$58, "backgroundColor", _v$19, _p$.e));
4583
+ _v$20 !== _p$.t && (_p$.t = setProp(_el$59, "fg", _v$20, _p$.t));
4584
+ _v$21 !== _p$.a && (_p$.a = setProp(_el$59, "attributes", _v$21, _p$.a));
4585
+ _v$22 !== _p$.o && (_p$.o = setProp(_el$60, "fg", _v$22, _p$.o));
4586
+ _v$23 !== _p$.i && (_p$.i = setProp(_el$61, "fg", _v$23, _p$.i));
4579
4587
  return _p$;
4580
4588
  }, {
4581
4589
  e: void 0,
@@ -4584,18 +4592,18 @@ function App(props) {
4584
4592
  o: void 0,
4585
4593
  i: void 0
4586
4594
  });
4587
- return _el$59;
4595
+ return _el$58;
4588
4596
  })(), (() => {
4589
- var _el$64 = createElement("text");
4590
- insertNode(_el$64, createTextNode(`ALL data and partitions on this drive will be lost. Back up anything you need before continuing.`));
4591
- effect((_$p) => setProp(_el$64, "fg", palette.warning, _$p));
4592
- return _el$64;
4597
+ var _el$63 = createElement("text");
4598
+ insertNode(_el$63, createTextNode(`ALL data and partitions on this drive will be lost. Back up anything you need before continuing.`));
4599
+ effect((_$p) => setProp(_el$63, "fg", palette.warning, _$p));
4600
+ return _el$63;
4593
4601
  })(), (() => {
4594
- var _el$66 = createElement("box");
4595
- insert(_el$66, () => row("Go back", "", 0), null);
4596
- insert(_el$66, () => row("Erase & flash", "", 1, true), null);
4597
- effect((_$p) => setProp(_el$66, "gap", tight() ? 0 : 1, _$p));
4598
- return _el$66;
4602
+ var _el$65 = createElement("box");
4603
+ insert(_el$65, () => row("Go back", "", 0), null);
4604
+ insert(_el$65, () => row("Erase & flash", "", 1, true), null);
4605
+ effect((_$p) => setProp(_el$65, "gap", tight() ? 0 : 1, _$p));
4606
+ return _el$65;
4599
4607
  })()];
4600
4608
  }
4601
4609
  }), createComponent2(Show, {
@@ -4604,108 +4612,108 @@ function App(props) {
4604
4612
  },
4605
4613
  get children() {
4606
4614
  return [(() => {
4607
- var _el$67 = createElement("text"), _el$68 = createTextNode(` `);
4608
- insertNode(_el$67, _el$68);
4609
- insert(_el$67, spinner, _el$68);
4610
- insert(_el$67, (() => {
4615
+ var _el$66 = createElement("text"), _el$67 = createTextNode(` `);
4616
+ insertNode(_el$66, _el$67);
4617
+ insert(_el$66, spinner, _el$67);
4618
+ insert(_el$66, (() => {
4611
4619
  var _c$7 = memo2(() => !!stopping());
4612
4620
  return () => _c$7() ? "Stopping safely..." : progress().stage;
4613
4621
  })(), null);
4614
4622
  effect((_p$) => {
4615
4623
  var _v$24 = palette.accent, _v$25 = TextAttributes2.BOLD;
4616
- _v$24 !== _p$.e && (_p$.e = setProp(_el$67, "fg", _v$24, _p$.e));
4617
- _v$25 !== _p$.t && (_p$.t = setProp(_el$67, "attributes", _v$25, _p$.t));
4624
+ _v$24 !== _p$.e && (_p$.e = setProp(_el$66, "fg", _v$24, _p$.e));
4625
+ _v$25 !== _p$.t && (_p$.t = setProp(_el$66, "attributes", _v$25, _p$.t));
4618
4626
  return _p$;
4619
4627
  }, {
4620
4628
  e: void 0,
4621
4629
  t: void 0
4622
4630
  });
4623
- return _el$67;
4631
+ return _el$66;
4624
4632
  })(), (() => {
4625
- var _el$69 = createElement("text"), _el$70 = createTextNode(` / `);
4626
- insertNode(_el$69, _el$70);
4627
- insert(_el$69, () => disk()?.name, _el$70);
4628
- insert(_el$69, () => image()?.profile.toUpperCase(), null);
4629
- effect((_$p) => setProp(_el$69, "fg", palette.foreground, _$p));
4630
- return _el$69;
4633
+ var _el$68 = createElement("text"), _el$69 = createTextNode(` / `);
4634
+ insertNode(_el$68, _el$69);
4635
+ insert(_el$68, () => disk()?.name, _el$69);
4636
+ insert(_el$68, () => image()?.profile.toUpperCase(), null);
4637
+ effect((_$p) => setProp(_el$68, "fg", palette.foreground, _$p));
4638
+ return _el$68;
4631
4639
  })(), (() => {
4632
- var _el$71 = createElement("text");
4633
- insert(_el$71, (() => {
4640
+ var _el$70 = createElement("text");
4641
+ insert(_el$70, (() => {
4634
4642
  var _c$8 = memo2(() => !!stopping());
4635
4643
  return () => _c$8() ? "Waiting for all child processes to stop. Keep the USB connected." : progress().detail;
4636
4644
  })());
4637
- effect((_$p) => setProp(_el$71, "fg", palette.muted, _$p));
4638
- return _el$71;
4645
+ effect((_$p) => setProp(_el$70, "fg", palette.muted, _$p));
4646
+ return _el$70;
4639
4647
  })(), createComponent2(Show, {
4640
4648
  get when() {
4641
4649
  return percent() !== void 0;
4642
4650
  },
4643
4651
  get children() {
4644
4652
  return [(() => {
4645
- var _el$72 = createElement("box");
4646
- setProp(_el$72, "border", true);
4647
- setProp(_el$72, "height", 3);
4648
- insert(_el$72, createComponent2(Show, {
4653
+ var _el$71 = createElement("box");
4654
+ setProp(_el$71, "border", true);
4655
+ setProp(_el$71, "height", 3);
4656
+ insert(_el$71, createComponent2(Show, {
4649
4657
  get when() {
4650
4658
  return percent() > 0;
4651
4659
  },
4652
4660
  get children() {
4653
- var _el$73 = createElement("box");
4654
- setProp(_el$73, "height", 1);
4661
+ var _el$72 = createElement("box");
4662
+ setProp(_el$72, "height", 1);
4655
4663
  effect((_p$) => {
4656
4664
  var _v$26 = `${percent() ?? 0}%`, _v$27 = palette.accent;
4657
- _v$26 !== _p$.e && (_p$.e = setProp(_el$73, "width", _v$26, _p$.e));
4658
- _v$27 !== _p$.t && (_p$.t = setProp(_el$73, "backgroundColor", _v$27, _p$.t));
4665
+ _v$26 !== _p$.e && (_p$.e = setProp(_el$72, "width", _v$26, _p$.e));
4666
+ _v$27 !== _p$.t && (_p$.t = setProp(_el$72, "backgroundColor", _v$27, _p$.t));
4659
4667
  return _p$;
4660
4668
  }, {
4661
4669
  e: void 0,
4662
4670
  t: void 0
4663
4671
  });
4664
- return _el$73;
4672
+ return _el$72;
4665
4673
  }
4666
4674
  }));
4667
4675
  effect((_p$) => {
4668
4676
  var _v$28 = palette.accent, _v$29 = palette.panelAlt;
4669
- _v$28 !== _p$.e && (_p$.e = setProp(_el$72, "borderColor", _v$28, _p$.e));
4670
- _v$29 !== _p$.t && (_p$.t = setProp(_el$72, "backgroundColor", _v$29, _p$.t));
4677
+ _v$28 !== _p$.e && (_p$.e = setProp(_el$71, "borderColor", _v$28, _p$.e));
4678
+ _v$29 !== _p$.t && (_p$.t = setProp(_el$71, "backgroundColor", _v$29, _p$.t));
4671
4679
  return _p$;
4672
4680
  }, {
4673
4681
  e: void 0,
4674
4682
  t: void 0
4675
4683
  });
4676
- return _el$72;
4684
+ return _el$71;
4677
4685
  })(), (() => {
4678
- var _el$74 = createElement("text"), _el$75 = createTextNode(`% `), _el$76 = createTextNode(` / `);
4679
- insertNode(_el$74, _el$75);
4680
- insertNode(_el$74, _el$76);
4681
- insert(_el$74, percent, _el$75);
4682
- insert(_el$74, () => bytes(progress().bytes ?? 0), _el$76);
4683
- insert(_el$74, () => bytes(progress().total ?? 0), null);
4686
+ var _el$73 = createElement("text"), _el$74 = createTextNode(`% `), _el$75 = createTextNode(` / `);
4687
+ insertNode(_el$73, _el$74);
4688
+ insertNode(_el$73, _el$75);
4689
+ insert(_el$73, percent, _el$74);
4690
+ insert(_el$73, () => bytes(progress().bytes ?? 0), _el$75);
4691
+ insert(_el$73, () => bytes(progress().total ?? 0), null);
4684
4692
  effect((_p$) => {
4685
4693
  var _v$30 = palette.foreground, _v$31 = TextAttributes2.BOLD;
4686
- _v$30 !== _p$.e && (_p$.e = setProp(_el$74, "fg", _v$30, _p$.e));
4687
- _v$31 !== _p$.t && (_p$.t = setProp(_el$74, "attributes", _v$31, _p$.t));
4694
+ _v$30 !== _p$.e && (_p$.e = setProp(_el$73, "fg", _v$30, _p$.e));
4695
+ _v$31 !== _p$.t && (_p$.t = setProp(_el$73, "attributes", _v$31, _p$.t));
4688
4696
  return _p$;
4689
4697
  }, {
4690
4698
  e: void 0,
4691
4699
  t: void 0
4692
4700
  });
4693
- return _el$74;
4701
+ return _el$73;
4694
4702
  })(), (() => {
4695
- var _el$77 = createElement("text");
4696
- insert(_el$77, (() => {
4703
+ var _el$76 = createElement("text");
4704
+ insert(_el$76, (() => {
4697
4705
  var _c$9 = memo2(() => !!progress().speed);
4698
4706
  return () => _c$9() ? `${bytes(progress().speed)} / s` : "";
4699
4707
  })());
4700
- effect((_$p) => setProp(_el$77, "fg", palette.muted, _$p));
4701
- return _el$77;
4708
+ effect((_$p) => setProp(_el$76, "fg", palette.muted, _$p));
4709
+ return _el$76;
4702
4710
  })()];
4703
4711
  }
4704
4712
  }), (() => {
4705
- var _el$78 = createElement("text");
4706
- insertNode(_el$78, createTextNode(`Keep the USB connected until safe removal succeeds.`));
4707
- effect((_$p) => setProp(_el$78, "fg", palette.warning, _$p));
4708
- return _el$78;
4713
+ var _el$77 = createElement("text");
4714
+ insertNode(_el$77, createTextNode(`Keep the USB connected until safe removal succeeds.`));
4715
+ effect((_$p) => setProp(_el$77, "fg", palette.warning, _$p));
4716
+ return _el$77;
4709
4717
  })()];
4710
4718
  }
4711
4719
  }), createComponent2(Show, {
@@ -4714,37 +4722,37 @@ function App(props) {
4714
4722
  },
4715
4723
  get children() {
4716
4724
  return [(() => {
4717
- var _el$80 = createElement("text");
4718
- insert(_el$80, () => props.backend.successTitle);
4725
+ var _el$79 = createElement("text");
4726
+ insert(_el$79, () => props.backend.successTitle);
4719
4727
  effect((_p$) => {
4720
4728
  var _v$32 = palette.success, _v$33 = TextAttributes2.BOLD;
4721
- _v$32 !== _p$.e && (_p$.e = setProp(_el$80, "fg", _v$32, _p$.e));
4722
- _v$33 !== _p$.t && (_p$.t = setProp(_el$80, "attributes", _v$33, _p$.t));
4729
+ _v$32 !== _p$.e && (_p$.e = setProp(_el$79, "fg", _v$32, _p$.e));
4730
+ _v$33 !== _p$.t && (_p$.t = setProp(_el$79, "attributes", _v$33, _p$.t));
4723
4731
  return _p$;
4724
4732
  }, {
4725
4733
  e: void 0,
4726
4734
  t: void 0
4727
4735
  });
4736
+ return _el$79;
4737
+ })(), (() => {
4738
+ var _el$80 = createElement("text");
4739
+ insert(_el$80, () => props.backend.successDetail);
4740
+ effect((_$p) => setProp(_el$80, "fg", palette.foreground, _$p));
4728
4741
  return _el$80;
4729
4742
  })(), (() => {
4730
4743
  var _el$81 = createElement("text");
4731
- insert(_el$81, () => props.backend.successDetail);
4732
- effect((_$p) => setProp(_el$81, "fg", palette.foreground, _$p));
4733
- return _el$81;
4734
- })(), (() => {
4735
- var _el$82 = createElement("text");
4736
- insert(_el$82, (() => {
4744
+ insert(_el$81, (() => {
4737
4745
  var _c$0 = memo2(() => !!props.backend.demo);
4738
4746
  return () => _c$0() ? "The real flow checks the write, flush and safe removal." : catalog()?.candidate ? "GitHub ZIP, compressed image and raw stream verified. Not a device read-back." : "Compressed image and raw stream verified. Not a device read-back.";
4739
4747
  })());
4740
- effect((_$p) => setProp(_el$82, "fg", palette.muted, _$p));
4741
- return _el$82;
4748
+ effect((_$p) => setProp(_el$81, "fg", palette.muted, _$p));
4749
+ return _el$81;
4742
4750
  })(), (() => {
4743
- var _el$83 = createElement("box");
4744
- setProp(_el$83, "gap", 1);
4745
- insert(_el$83, () => row("Choose another image", "", 0), null);
4746
- insert(_el$83, () => row("Quit", "", 1), null);
4747
- return _el$83;
4751
+ var _el$82 = createElement("box");
4752
+ setProp(_el$82, "gap", 1);
4753
+ insert(_el$82, () => row("Choose another image", "", 0), null);
4754
+ insert(_el$82, () => row("Quit", "", 1), null);
4755
+ return _el$82;
4748
4756
  })()];
4749
4757
  }
4750
4758
  }), createComponent2(Show, {
@@ -4753,56 +4761,56 @@ function App(props) {
4753
4761
  },
4754
4762
  get children() {
4755
4763
  return [(() => {
4756
- var _el$84 = createElement("text");
4757
- insertNode(_el$84, createTextNode(`Flash not completed`));
4764
+ var _el$83 = createElement("text");
4765
+ insertNode(_el$83, createTextNode(`Flash not completed`));
4758
4766
  effect((_p$) => {
4759
4767
  var _v$34 = palette.danger, _v$35 = TextAttributes2.BOLD;
4760
- _v$34 !== _p$.e && (_p$.e = setProp(_el$84, "fg", _v$34, _p$.e));
4761
- _v$35 !== _p$.t && (_p$.t = setProp(_el$84, "attributes", _v$35, _p$.t));
4768
+ _v$34 !== _p$.e && (_p$.e = setProp(_el$83, "fg", _v$34, _p$.e));
4769
+ _v$35 !== _p$.t && (_p$.t = setProp(_el$83, "attributes", _v$35, _p$.t));
4762
4770
  return _p$;
4763
4771
  }, {
4764
4772
  e: void 0,
4765
4773
  t: void 0
4766
4774
  });
4767
- return _el$84;
4775
+ return _el$83;
4768
4776
  })(), (() => {
4769
- var _el$86 = createElement("text");
4770
- insert(_el$86, error);
4771
- effect((_$p) => setProp(_el$86, "fg", palette.foreground, _$p));
4772
- return _el$86;
4777
+ var _el$85 = createElement("text");
4778
+ insert(_el$85, error);
4779
+ effect((_$p) => setProp(_el$85, "fg", palette.foreground, _$p));
4780
+ return _el$85;
4773
4781
  })(), (() => {
4774
- var _el$87 = createElement("box");
4775
- setProp(_el$87, "gap", 1);
4776
- insert(_el$87, () => row("Refresh & try again", "", 0), null);
4777
- insert(_el$87, () => row("Quit", "", 1), null);
4778
- return _el$87;
4782
+ var _el$86 = createElement("box");
4783
+ setProp(_el$86, "gap", 1);
4784
+ insert(_el$86, () => row("Refresh & try again", "", 0), null);
4785
+ insert(_el$86, () => row("Quit", "", 1), null);
4786
+ return _el$86;
4779
4787
  })()];
4780
4788
  }
4781
4789
  })];
4782
4790
  }
4783
4791
  }));
4784
- setProp(_el$88, "height", 1);
4785
- setProp(_el$88, "flexShrink", 0);
4786
- setProp(_el$88, "wrapMode", "none");
4787
- insert(_el$88, (() => {
4792
+ setProp(_el$87, "height", 1);
4793
+ setProp(_el$87, "flexShrink", 0);
4794
+ setProp(_el$87, "wrapMode", "none");
4795
+ insert(_el$87, (() => {
4788
4796
  var _c$1 = memo2(() => !!busy());
4789
4797
  return () => _c$1() ? "Esc cancel / Q stop & quit" : dimensions().width < 56 ? "Arrows / Enter / Esc / R / Q quit" : "Arrows / Enter / Esc back / R refresh / Q quit";
4790
4798
  })());
4791
4799
  effect((_p$) => {
4792
4800
  var _v$36 = palette.background, _v$37 = dimensions().width <= 80 ? "100%" : 80, _v$38 = dimensions().height <= 24 ? "100%" : 24, _v$39 = palette.border, _v$40 = palette.card, _v$41 = palette.accent, _v$42 = TextAttributes2.BOLD, _v$43 = props.backend.demo ? palette.warning : palette.muted, _v$44 = palette.danger, _v$45 = tight() ? 0 : 1, _v$46 = tight() ? 0 : 1, _v$47 = tight() || (compact() || dimensions().width < 56) && screen() === "setup" ? 0 : 1, _v$48 = palette.muted;
4793
- _v$36 !== _p$.e && (_p$.e = setProp(_el$5, "backgroundColor", _v$36, _p$.e));
4794
- _v$37 !== _p$.t && (_p$.t = setProp(_el$6, "width", _v$37, _p$.t));
4795
- _v$38 !== _p$.a && (_p$.a = setProp(_el$6, "height", _v$38, _p$.a));
4796
- _v$39 !== _p$.o && (_p$.o = setProp(_el$6, "borderColor", _v$39, _p$.o));
4797
- _v$40 !== _p$.i && (_p$.i = setProp(_el$6, "backgroundColor", _v$40, _p$.i));
4798
- _v$41 !== _p$.n && (_p$.n = setProp(_el$8, "fg", _v$41, _p$.n));
4799
- _v$42 !== _p$.s && (_p$.s = setProp(_el$8, "attributes", _v$42, _p$.s));
4800
- _v$43 !== _p$.h && (_p$.h = setProp(_el$0, "fg", _v$43, _p$.h));
4801
- _v$44 !== _p$.r && (_p$.r = setProp(_el$1, "backgroundColor", _v$44, _p$.r));
4802
- _v$45 !== _p$.d && (_p$.d = setProp(_el$1, "marginTop", _v$45, _p$.d));
4803
- _v$46 !== _p$.l && (_p$.l = setProp(_el$10, "paddingTop", _v$46, _p$.l));
4804
- _v$47 !== _p$.u && (_p$.u = setProp(_el$10, "gap", _v$47, _p$.u));
4805
- _v$48 !== _p$.c && (_p$.c = setProp(_el$88, "fg", _v$48, _p$.c));
4801
+ _v$36 !== _p$.e && (_p$.e = setProp(_el$4, "backgroundColor", _v$36, _p$.e));
4802
+ _v$37 !== _p$.t && (_p$.t = setProp(_el$5, "width", _v$37, _p$.t));
4803
+ _v$38 !== _p$.a && (_p$.a = setProp(_el$5, "height", _v$38, _p$.a));
4804
+ _v$39 !== _p$.o && (_p$.o = setProp(_el$5, "borderColor", _v$39, _p$.o));
4805
+ _v$40 !== _p$.i && (_p$.i = setProp(_el$5, "backgroundColor", _v$40, _p$.i));
4806
+ _v$41 !== _p$.n && (_p$.n = setProp(_el$7, "fg", _v$41, _p$.n));
4807
+ _v$42 !== _p$.s && (_p$.s = setProp(_el$7, "attributes", _v$42, _p$.s));
4808
+ _v$43 !== _p$.h && (_p$.h = setProp(_el$9, "fg", _v$43, _p$.h));
4809
+ _v$44 !== _p$.r && (_p$.r = setProp(_el$0, "backgroundColor", _v$44, _p$.r));
4810
+ _v$45 !== _p$.d && (_p$.d = setProp(_el$0, "marginTop", _v$45, _p$.d));
4811
+ _v$46 !== _p$.l && (_p$.l = setProp(_el$1, "paddingTop", _v$46, _p$.l));
4812
+ _v$47 !== _p$.u && (_p$.u = setProp(_el$1, "gap", _v$47, _p$.u));
4813
+ _v$48 !== _p$.c && (_p$.c = setProp(_el$87, "fg", _v$48, _p$.c));
4806
4814
  return _p$;
4807
4815
  }, {
4808
4816
  e: void 0,
@@ -4819,7 +4827,7 @@ function App(props) {
4819
4827
  u: void 0,
4820
4828
  c: void 0
4821
4829
  });
4822
- return _el$5;
4830
+ return _el$4;
4823
4831
  })();
4824
4832
  }
4825
4833
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "boo-flash",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Flash qualified Boo images to USB drives on macOS and Linux",
5
5
  "license": "MIT",
6
6
  "type": "module",