boo-flash 0.1.8 → 0.1.9

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 (3) hide show
  1. package/README.md +9 -12
  2. package/dist/app.js +647 -393
  3. package/package.json +3 -2
package/dist/app.js CHANGED
@@ -1,10 +1,10 @@
1
- // node_modules/@opentui/solid/index.js
1
+ // ../../node_modules/@opentui/solid/index.js
2
2
  import { CliRenderer, createCliRenderer, engine as engine2 } from "@opentui/core";
3
3
  import { createTestRenderer } from "@opentui/core/testing";
4
4
  import { ASCIIFontRenderable, BoxRenderable, CodeRenderable, DiffRenderable, ImageRenderable, InputRenderable, LineNumberRenderable, MarkdownRenderable, ScrollBoxRenderable, SelectRenderable, TabSelectRenderable, TextareaRenderable, TextAttributes, TextNodeRenderable, TextRenderable } from "@opentui/core";
5
5
  import { engine, Timeline } from "@opentui/core";
6
6
 
7
- // node_modules/solid-js/dist/solid.js
7
+ // ../../node_modules/solid-js/dist/solid.js
8
8
  var sharedConfig = {
9
9
  context: void 0,
10
10
  registry: void 0,
@@ -837,10 +837,10 @@ function Show(props) {
837
837
  }, void 0, void 0);
838
838
  }
839
839
 
840
- // node_modules/@opentui/solid/index.js
840
+ // ../../node_modules/@opentui/solid/index.js
841
841
  import { BaseRenderable, createTextAttributes, ImageRenderable as ImageRenderable2, InputRenderable as InputRenderable2, InputRenderableEvents, isTextNodeRenderable, isEditBufferRenderable, parseColor, Renderable, RootTextNodeRenderable, ScrollBoxRenderable as ScrollBoxRenderable2, SelectRenderable as SelectRenderable2, SelectRenderableEvents, TabSelectRenderable as TabSelectRenderable2, TabSelectRenderableEvents, TextNodeRenderable as TextNodeRenderable2, TextRenderable as TextRenderable2 } from "@opentui/core";
842
842
 
843
- // node_modules/entities/dist/esm/decode-codepoint.js
843
+ // ../../node_modules/entities/dist/esm/decode-codepoint.js
844
844
  var _a;
845
845
  var decodeMap = /* @__PURE__ */ new Map([
846
846
  [0, 65533],
@@ -894,7 +894,7 @@ function replaceCodePoint(codePoint) {
894
894
  return (_a2 = decodeMap.get(codePoint)) !== null && _a2 !== void 0 ? _a2 : codePoint;
895
895
  }
896
896
 
897
- // node_modules/entities/dist/esm/internal/decode-shared.js
897
+ // ../../node_modules/entities/dist/esm/internal/decode-shared.js
898
898
  function decodeBase64(input) {
899
899
  const binary = (
900
900
  // eslint-disable-next-line n/no-unsupported-features/node-builtins
@@ -924,10 +924,10 @@ function decodeBase64(input) {
924
924
  return out;
925
925
  }
926
926
 
927
- // node_modules/entities/dist/esm/generated/decode-data-html.js
927
+ // ../../node_modules/entities/dist/esm/generated/decode-data-html.js
928
928
  var htmlDecodeTree = /* @__PURE__ */ decodeBase64("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");
929
929
 
930
- // node_modules/entities/dist/esm/internal/bin-trie-flags.js
930
+ // ../../node_modules/entities/dist/esm/internal/bin-trie-flags.js
931
931
  var BinTrieFlags;
932
932
  (function(BinTrieFlags2) {
933
933
  BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
@@ -936,7 +936,7 @@ var BinTrieFlags;
936
936
  BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
937
937
  })(BinTrieFlags || (BinTrieFlags = {}));
938
938
 
939
- // node_modules/entities/dist/esm/decode.js
939
+ // ../../node_modules/entities/dist/esm/decode.js
940
940
  var CharCodes;
941
941
  (function(CharCodes2) {
942
942
  CharCodes2[CharCodes2["NUM"] = 35] = "NUM";
@@ -1331,7 +1331,7 @@ function decodeHTMLStrict(htmlString) {
1331
1331
  return htmlDecoder(htmlString, DecodingMode.Strict);
1332
1332
  }
1333
1333
 
1334
- // node_modules/entities/dist/esm/escape.js
1334
+ // ../../node_modules/entities/dist/esm/escape.js
1335
1335
  var getCodePoint = (
1336
1336
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
1337
1337
  String.prototype.codePointAt == null ? (c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index) : (
@@ -1340,7 +1340,7 @@ var getCodePoint = (
1340
1340
  )
1341
1341
  );
1342
1342
 
1343
- // node_modules/entities/dist/esm/index.js
1343
+ // ../../node_modules/entities/dist/esm/index.js
1344
1344
  var EntityLevel;
1345
1345
  (function(EntityLevel2) {
1346
1346
  EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
@@ -1355,7 +1355,7 @@ var EncodingMode;
1355
1355
  EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
1356
1356
  })(EncodingMode || (EncodingMode = {}));
1357
1357
 
1358
- // node_modules/@opentui/solid/index.js
1358
+ // ../../node_modules/@opentui/solid/index.js
1359
1359
  import { BaseRenderable as BaseRenderable2, isTextNodeRenderable as isTextNodeRenderable2, TextNodeRenderable as TextNodeRenderable3, TextRenderable as TextRenderable3, Yoga } from "@opentui/core";
1360
1360
  import { BoxRenderable as BoxRenderable2, RootRenderable } from "@opentui/core";
1361
1361
  import { TimeToFirstDrawRenderable } from "@opentui/core";
@@ -2464,15 +2464,15 @@ var render = async (node, rendererOrConfig = {}) => {
2464
2464
  // src/index.tsx
2465
2465
  import { createCliRenderer as createCliRenderer2 } from "@opentui/core";
2466
2466
 
2467
- // ../../apps/shared/theme.ts
2467
+ // ../../packages/tui-shared/src/theme.ts
2468
2468
  import { lstatSync, readFileSync } from "node:fs";
2469
2469
  import { homedir } from "node:os";
2470
2470
  import { join } from "node:path";
2471
2471
 
2472
- // ../../apps/shared/Boo.ghostty
2472
+ // ../../packages/tui-shared/src/Boo.ghostty
2473
2473
  var Boo_default = "# Boo: the default terminal palette, matching the native installer.\nbackground = #08080E\nforeground = #F5ECD8\ncursor-color = #25D9E8\ncursor-text = #071014\nselection-background = #0E5965\nselection-foreground = #F5ECD8\npalette = 0=#171522\npalette = 1=#FF577D\npalette = 2=#2BE566\npalette = 3=#FFD51A\npalette = 4=#5355C9\npalette = 5=#FF2A8A\npalette = 6=#25D9E8\npalette = 7=#B7AB9A\npalette = 8=#686379\npalette = 9=#FF839D\npalette = 10=#80F5A4\npalette = 11=#FFE873\npalette = 12=#9698FF\npalette = 13=#FF83BB\npalette = 14=#8CEEF5\npalette = 15=#F5ECD8\n# Extended terminal slots retain Boo's existing UI surface colors.\npalette = 16=#111018\npalette = 17=#171522\npalette = 18=#211D2C\npalette = 19=#071014\n";
2474
2474
 
2475
- // ../../apps/shared/theme.ts
2475
+ // ../../packages/tui-shared/src/theme.ts
2476
2476
  var selectionPath = join(process.env.XDG_CONFIG_HOME || join(homedir(), ".config"), "ghostty/auto/theme.ghostty");
2477
2477
  var resources = process.env.GHOSTTY_RESOURCES_DIR || "/usr/share/ghostty";
2478
2478
  function colors(source) {
@@ -2547,31 +2547,270 @@ var palette = (() => {
2547
2547
  // src/App.tsx
2548
2548
  import { TextAttributes as TextAttributes2 } from "@opentui/core";
2549
2549
 
2550
- // ../../apps/shared/BooLogoData.ts
2550
+ // ../../packages/tui-shared/src/AnimatedBooLogoRenderable.ts
2551
+ import { OptimizedBuffer, Renderable as Renderable2, RGBA } from "@opentui/core";
2552
+ import { setImmediate as yieldToLoop } from "node:timers/promises";
2553
+
2554
+ // ../../packages/tui-shared/src/BooLogoAnimation.ts
2555
+ var BLINK_PERIOD = 4.6;
2556
+ var clips = {
2557
+ blink: { duration: 0.22 },
2558
+ boo: {
2559
+ duration: 1.65,
2560
+ frames: [
2561
+ { at: 0, x: 1, y: 1 },
2562
+ { at: 0.12, x: 1.1, y: 0.9 },
2563
+ { at: 0.28, x: 0.94, y: 1.09 },
2564
+ { at: 0.48, x: 1.03, y: 0.98 },
2565
+ { at: 0.72, x: 1, y: 1 }
2566
+ ]
2567
+ }
2568
+ };
2569
+ var clamp = (value, min, max) => Math.max(min, Math.min(max, value));
2570
+ function createMotion() {
2571
+ return { time: 0, boo: null };
2572
+ }
2573
+ function sayBoo(motion) {
2574
+ motion.boo = 0;
2575
+ }
2576
+ function advanceMotion(motion, deltaSeconds) {
2577
+ const delta = clamp(Number.isFinite(deltaSeconds) ? deltaSeconds : 0, 0, 0.1);
2578
+ motion.time += delta;
2579
+ if (motion.boo !== null) {
2580
+ motion.boo += delta;
2581
+ if (motion.boo >= clips.boo.duration) motion.boo = null;
2582
+ }
2583
+ }
2584
+ function pose(motion) {
2585
+ let x = 1;
2586
+ let y = 1;
2587
+ if (motion.boo !== null) {
2588
+ for (let index = 1; index < clips.boo.frames.length; index++) {
2589
+ if (motion.boo > clips.boo.frames[index].at) continue;
2590
+ const previous = clips.boo.frames[index - 1];
2591
+ const next = clips.boo.frames[index];
2592
+ const progress = clamp((motion.boo - previous.at) / (next.at - previous.at), 0, 1);
2593
+ x = previous.x + (next.x - previous.x) * progress;
2594
+ y = previous.y + (next.y - previous.y) * progress;
2595
+ break;
2596
+ }
2597
+ }
2598
+ const blink = (motion.time + 1.7) % BLINK_PERIOD;
2599
+ const eyes = blink < clips.blink.duration ? Math.max(0.1, Math.abs(blink / clips.blink.duration * 2 - 1)) : 1;
2600
+ return { x, y, eyes, bob: Math.sin(motion.time * 2.1) * 0.24 };
2601
+ }
2602
+ function wordmarkLayout(age = null) {
2603
+ const progress = age === null ? 0 : clamp(age / clips.boo.duration, 0, 1);
2604
+ const gap = 1 + Math.sin(progress * Math.PI) * 0.45;
2605
+ const letters2 = [];
2606
+ let x = 0;
2607
+ for (let index = 0; index < 5; index++) {
2608
+ const reveal = index < 3 || age === null ? index < 3 ? 1 : 0 : clamp((age - 0.14 - (index - 3) * 0.1) / 0.22, 0, 1) * clamp((1.58 - age) / 0.42, 0, 1);
2609
+ if (reveal <= 0) continue;
2610
+ const wave = age === null ? 0 : Math.sin(Math.PI * clamp((age - index * 0.045) / (1.65 - index * 0.045), 0, 1));
2611
+ const base = index < 2 ? 7 : 8 + Math.max(0, index - 2);
2612
+ const height = (base + wave * (index === 0 ? 0.5 : index === 1 ? 1.6 : 3)) * reveal;
2613
+ if (index > 0) x += gap * reveal;
2614
+ letters2.push({ glyph: Math.min(index, 2), x, width: 3 * reveal, height, faded: index >= 3 && progress > 0.8, wave, reveal });
2615
+ x += 3 * reveal;
2616
+ }
2617
+ return { width: x, letters: letters2 };
2618
+ }
2619
+
2620
+ // ../../packages/tui-shared/src/BooLogoData.ts
2551
2621
  var LIGHT_COLORS = { inkColor: "#002B8F", accentColor: "#00E5FF", highlightColor: "#D0FAFF" };
2552
2622
  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]
2623
+
2624
+ // ../../packages/tui-shared/src/BooLogoTerminal.ts
2625
+ var LOGO_WIDTH = 34;
2626
+ var LOGO_HEIGHT = 18;
2627
+ var ghosts = {
2628
+ idle: [
2629
+ "..AAAAAA..",
2630
+ ".ACD....A.",
2631
+ "ACD......A",
2632
+ "ACCD.....A",
2633
+ "AACD.....A",
2634
+ ".ACD.....A",
2635
+ ".ACD.....A",
2636
+ ".ACD.....A",
2637
+ ".ACD.....A",
2638
+ ".ACD.....A",
2639
+ ".ACA.A.A.A",
2640
+ "..A.A.A.A."
2641
+ ],
2642
+ squash: [
2643
+ "..AAAAAAA..",
2644
+ ".ACD.....A.",
2645
+ "ACD.......A",
2646
+ "ACCD......A",
2647
+ "AACD......A",
2648
+ ".ACD......A",
2649
+ ".ACD......A",
2650
+ ".ACD......A",
2651
+ ".ACD......A",
2652
+ ".ACA.A.A.AA",
2653
+ "..A.A.A.A.."
2654
+ ],
2655
+ stretch: [
2656
+ "..AAAAA..",
2657
+ ".ACD...A.",
2658
+ "ACD.....A",
2659
+ "ACCD....A",
2660
+ "AACD....A",
2661
+ ".ACD....A",
2662
+ ".ACD....A",
2663
+ ".ACD....A",
2664
+ ".ACD....A",
2665
+ ".ACD....A",
2666
+ ".ACD....A",
2667
+ ".ACA.A.AA",
2668
+ "..A.A.A.."
2669
+ ]
2560
2670
  };
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............................"
2671
+ var letters = [
2672
+ ["A..", "AAA", "A.A", "ACA", "ACA", "ACA", "AAA"],
2673
+ ["AAA", "A.A", "ACA", "ACA", "ACA", "ACA", "AAA"],
2674
+ ["AAA", "A.A", "ACA", "ACA", "ACA", "ACA", "ACA", "AAA"]
2574
2675
  ];
2676
+ var inks = { ".": 0, A: 1, C: 2, D: 3 };
2677
+ function terminalPortrait(motion) {
2678
+ const pixels = new Uint8Array(LOGO_WIDTH * LOGO_HEIGHT);
2679
+ const stamp = (rows, left, top2) => {
2680
+ for (let y = 0; y < rows.length; y++) {
2681
+ for (let x = 0; x < rows[y].length; x++) pixels[(top2 + y) * LOGO_WIDTH + left + x] = inks[rows[y][x]];
2682
+ }
2683
+ };
2684
+ const state = pose(motion);
2685
+ const ghost = state.y < 0.97 ? ghosts.squash : state.y > 1.04 ? ghosts.stretch : ghosts.idle;
2686
+ const top = 15 - ghost.length + Math.round(state.bob * 4);
2687
+ stamp(ghost, 11 - ghost[0].length, top);
2688
+ const eyeHeight = Math.max(1, Math.round(state.eyes * 3));
2689
+ const eyeTop = top + 4 + Math.floor((3 - eyeHeight) / 2);
2690
+ for (let y = eyeTop; y < eyeTop + eyeHeight; y++) {
2691
+ pixels[y * LOGO_WIDTH + 6] = 1;
2692
+ pixels[y * LOGO_WIDTH + 8] = 1;
2693
+ }
2694
+ if (motion.boo !== null && motion.boo > 0.12 && motion.boo < 0.85) pixels[(top + 8) * LOGO_WIDTH + 7] = 1;
2695
+ for (const [index, letter] of wordmarkLayout(motion.boo).letters.entries()) {
2696
+ if (letter.reveal < 0.5) continue;
2697
+ const glyph = letters[letter.glyph];
2698
+ const lift = Math.round(letter.wave * (index === 0 ? 1 : 2));
2699
+ stamp(glyph, 13 + index * 4, 13 - glyph.length - lift);
2700
+ }
2701
+ return pixels;
2702
+ }
2703
+
2704
+ // ../../packages/tui-shared/src/AnimatedBooLogoRenderable.ts
2705
+ var transparent = RGBA.fromInts(0, 0, 0, 0);
2706
+ var frameRate = 20;
2707
+ var AnimatedBooLogoRenderable = class extends Renderable2 {
2708
+ ready;
2709
+ initialized = false;
2710
+ motion = createMotion();
2711
+ idleFrames = [];
2712
+ booFrames = [];
2713
+ buffers = [];
2714
+ contextDestroyed = () => this.destroy();
2715
+ constructor(ctx, options = {}, signal) {
2716
+ signal?.throwIfAborted();
2717
+ if ("isDestroyed" in ctx && ctx.isDestroyed === true) throw new Error("Cannot prepare a logo for a destroyed renderer");
2718
+ const theme = options.theme ?? "dark";
2719
+ const scale = options.scale ?? 1;
2720
+ if (theme !== "light" && theme !== "dark") throw new TypeError("AnimatedBooLogoRenderable theme must be light or dark");
2721
+ if (scale !== 1 && scale !== 2) throw new TypeError("AnimatedBooLogoRenderable scale must be 1 or 2");
2722
+ super(ctx, { ...options, width: options.width ?? LOGO_WIDTH * scale, height: options.height ?? LOGO_HEIGHT * scale / 2, flexShrink: options.flexShrink ?? 0, live: options.live ?? true });
2723
+ ctx.once("destroy", this.contextDestroyed);
2724
+ this.ready = this.prepare(options, signal).then(() => {
2725
+ signal?.throwIfAborted();
2726
+ if (this.isDestroyed) throw new Error("Logo preparation stopped because its renderer was destroyed");
2727
+ this.initialized = true;
2728
+ this.requestRender();
2729
+ });
2730
+ void this.ready.catch((error) => {
2731
+ if (this.isDestroyed) return;
2732
+ this.destroy();
2733
+ if (!signal?.aborted) ctx.emit("render:error", { error, renderable: this });
2734
+ });
2735
+ }
2736
+ async prepare(options, signal) {
2737
+ const theme = options.theme ?? "dark", scale = options.scale ?? 1;
2738
+ const palette2 = theme === "light" ? LIGHT_COLORS : DARK_COLORS;
2739
+ const colors2 = [transparent, ...[palette2.inkColor, palette2.accentColor, palette2.highlightColor].map((color) => RGBA.fromHex(color))];
2740
+ const columns = LOGO_WIDTH * scale, rows = LOGO_HEIGHT * scale / 2;
2741
+ const cache = /* @__PURE__ */ new Map();
2742
+ const prepare = async (motion) => {
2743
+ await yieldToLoop(void 0, { signal });
2744
+ if (this.isDestroyed) throw new Error("Logo preparation stopped because its renderer was destroyed");
2745
+ const pixels = terminalPortrait(motion);
2746
+ const key = pixels.join("");
2747
+ const cached = cache.get(key);
2748
+ if (cached) return cached;
2749
+ const buffer = OptimizedBuffer.create(columns, rows, this.ctx.widthMethod, { respectAlpha: true });
2750
+ this.buffers.push(buffer);
2751
+ for (let y = 0; y < rows; y++) {
2752
+ for (let x = 0; x < columns; x++) {
2753
+ const column = Math.floor(x / scale);
2754
+ const top = pixels[Math.floor(y * 2 / scale) * LOGO_WIDTH + column];
2755
+ const bottom = pixels[Math.floor((y * 2 + 1) / scale) * LOGO_WIDTH + column];
2756
+ const char = top === bottom ? " " : top === 0 ? "\u2584" : "\u2580";
2757
+ buffer.setCell(x, y, char, colors2[top || bottom], colors2[top === 0 ? 0 : bottom]);
2758
+ }
2759
+ }
2760
+ cache.set(key, buffer);
2761
+ return buffer;
2762
+ };
2763
+ const idle = createMotion();
2764
+ for (let i = 0; i < Math.round(2 * BLINK_PERIOD * frameRate); i++) {
2765
+ this.idleFrames.push(await prepare(idle));
2766
+ advanceMotion(idle, 1 / frameRate);
2767
+ }
2768
+ const clip = createMotion();
2769
+ sayBoo(clip);
2770
+ while (clip.boo !== null) {
2771
+ this.booFrames.push(await prepare(clip));
2772
+ advanceMotion(clip, 1 / frameRate);
2773
+ }
2774
+ }
2775
+ sayBoo() {
2776
+ if (this.motion.boo !== null || this.isDestroyed) return;
2777
+ sayBoo(this.motion);
2778
+ this.requestRender();
2779
+ }
2780
+ onMouseEvent(event) {
2781
+ if (event.type === "up" && event.button === 0 && !event.isDragging) this.sayBoo();
2782
+ }
2783
+ onUpdate(deltaTime) {
2784
+ if (!this.initialized || !this.live) return;
2785
+ advanceMotion(this.motion, deltaTime / 1e3);
2786
+ }
2787
+ render(buffer, deltaTime) {
2788
+ if (!this.initialized) return;
2789
+ const width = this.width, height = this.height;
2790
+ if (!Number.isFinite(width) || !Number.isFinite(height) || width < 1 || height < 1) return;
2791
+ super.render(buffer, deltaTime);
2792
+ }
2793
+ renderSelf(buffer) {
2794
+ const width = this.width, height = this.height;
2795
+ const frame = this.motion.boo === null ? this.idleFrames[Math.floor(this.motion.time * frameRate) % this.idleFrames.length] : this.booFrames[Math.min(this.booFrames.length - 1, Math.floor(this.motion.boo * frameRate))];
2796
+ if (this.buffered) buffer.clear(transparent);
2797
+ buffer.drawFrameBuffer(
2798
+ this.buffered ? 0 : this.screenX,
2799
+ this.buffered ? 0 : this.screenY,
2800
+ frame,
2801
+ 0,
2802
+ 0,
2803
+ Math.min(width, frame.width),
2804
+ Math.min(height, frame.height)
2805
+ );
2806
+ }
2807
+ destroySelf() {
2808
+ this.ctx.off("destroy", this.contextDestroyed);
2809
+ for (const buffer of this.buffers) buffer.destroy();
2810
+ this.buffers.length = this.idleFrames.length = this.booFrames.length = 0;
2811
+ super.destroySelf();
2812
+ }
2813
+ };
2575
2814
 
2576
2815
  // src/backend.ts
2577
2816
  import { createHash as createHash2 } from "node:crypto";
@@ -3756,45 +3995,35 @@ var FlashBackend = class {
3756
3995
  };
3757
3996
 
3758
3997
  // package.json
3759
- var version = "0.1.8";
3998
+ var version = "0.1.9";
3760
3999
 
3761
4000
  // src/App.tsx
3762
4001
  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]]));
4002
+ const renderer = useRenderer();
4003
+ let host;
4004
+ let logo;
4005
+ onMount(() => {
4006
+ const theme = themes.find((entry) => entry.ui === palette && !entry.error)?.kind === "Light" ? "light" : "dark";
4007
+ logo = new AnimatedBooLogoRenderable(renderer, {
4008
+ id: "flash-logo",
4009
+ theme
4010
+ });
4011
+ host.add(logo);
4012
+ });
4013
+ onCleanup(() => {
4014
+ if (logo) {
4015
+ if (!host.isDestroyed) host.remove(logo);
4016
+ logo.destroy();
4017
+ }
4018
+ });
3770
4019
  return (() => {
3771
4020
  var _el$ = createElement("box");
3772
- setProp(_el$, "id", "flash-logo");
3773
- setProp(_el$, "width", 23);
3774
- setProp(_el$, "height", 6);
4021
+ var _ref$ = host;
4022
+ typeof _ref$ === "function" ? use(_ref$, _el$) : host = _el$;
4023
+ setProp(_el$, "width", 34);
4024
+ setProp(_el$, "height", 9);
3775
4025
  setProp(_el$, "flexShrink", 0);
3776
4026
  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
4027
  return _el$;
3799
4028
  })();
3800
4029
  }
@@ -4070,31 +4299,31 @@ ${selection()}
4070
4299
  if (key.name === "return" && !key.repeated) activate();
4071
4300
  });
4072
4301
  const row = (label, detail, index, danger = false, detailWhenTight = false) => (() => {
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, {
4302
+ var _el$2 = createElement("box"), _el$3 = createElement("text");
4303
+ insertNode(_el$2, _el$3);
4304
+ setProp(_el$2, "paddingX", 1);
4305
+ setProp(_el$2, "flexShrink", 0);
4306
+ setProp(_el$3, "wrapMode", "none");
4307
+ insert(_el$3, () => cursor() === index ? "> " : " ", null);
4308
+ insert(_el$3, label, null);
4309
+ insert(_el$2, createComponent2(Show, {
4081
4310
  get when() {
4082
4311
  return detail && (!tight() || detailWhenTight);
4083
4312
  },
4084
4313
  get children() {
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;
4314
+ var _el$4 = createElement("text");
4315
+ setProp(_el$4, "wrapMode", "none");
4316
+ insert(_el$4, ` ${detail}`);
4317
+ effect((_$p) => setProp(_el$4, "fg", palette.muted, _$p));
4318
+ return _el$4;
4090
4319
  }
4091
4320
  }), null);
4092
4321
  effect((_p$) => {
4093
4322
  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;
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));
4323
+ _v$ !== _p$.e && (_p$.e = setProp(_el$2, "height", _v$, _p$.e));
4324
+ _v$2 !== _p$.t && (_p$.t = setProp(_el$2, "backgroundColor", _v$2, _p$.t));
4325
+ _v$3 !== _p$.a && (_p$.a = setProp(_el$3, "fg", _v$3, _p$.a));
4326
+ _v$4 !== _p$.o && (_p$.o = setProp(_el$3, "attributes", _v$4, _p$.o));
4098
4327
  return _p$;
4099
4328
  }, {
4100
4329
  e: void 0,
@@ -4102,55 +4331,55 @@ ${selection()}
4102
4331
  a: void 0,
4103
4332
  o: void 0
4104
4333
  });
4105
- return _el$4;
4334
+ return _el$2;
4106
4335
  })();
4107
4336
  return (() => {
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, {
4337
+ 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$81 = createElement("box"), _el$82 = createElement("text"), _el$83 = createElement("text"), _el$84 = createTextNode(`v`);
4338
+ insertNode(_el$5, _el$6);
4339
+ setProp(_el$5, "width", "100%");
4340
+ setProp(_el$5, "height", "100%");
4341
+ setProp(_el$5, "justifyContent", "center");
4342
+ setProp(_el$5, "alignItems", "center");
4343
+ insert(_el$5, createComponent2(Show, {
4115
4344
  get when() {
4116
- return memo2(() => dimensions().width >= 23)() && dimensions().height >= 31;
4345
+ return memo2(() => dimensions().width >= 34)() && dimensions().height >= 34;
4117
4346
  },
4118
4347
  get children() {
4119
4348
  return createComponent2(FlashLogo, {});
4120
4349
  }
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, {
4350
+ }), _el$6);
4351
+ insertNode(_el$6, _el$7);
4352
+ insertNode(_el$6, _el$1);
4353
+ insertNode(_el$6, _el$10);
4354
+ insertNode(_el$6, _el$81);
4355
+ setProp(_el$6, "id", "flash-card");
4356
+ setProp(_el$6, "border", true);
4357
+ setProp(_el$6, "borderStyle", "single");
4358
+ setProp(_el$6, "flexDirection", "column");
4359
+ setProp(_el$6, "paddingX", 1);
4360
+ insertNode(_el$7, _el$8);
4361
+ insertNode(_el$7, _el$0);
4362
+ setProp(_el$7, "height", 1);
4363
+ setProp(_el$7, "flexDirection", "row");
4364
+ setProp(_el$7, "justifyContent", "space-between");
4365
+ setProp(_el$7, "flexShrink", 0);
4366
+ insertNode(_el$8, createTextNode(`BOO FLASH`));
4367
+ insert(_el$0, () => props.backend.platformLabel);
4368
+ setProp(_el$1, "height", 1);
4369
+ setProp(_el$1, "flexShrink", 0);
4370
+ setProp(_el$10, "flexGrow", 1);
4371
+ setProp(_el$10, "minHeight", 0);
4372
+ setProp(_el$10, "overflow", "hidden");
4373
+ insert(_el$10, createComponent2(Show, {
4145
4374
  get when() {
4146
4375
  return visible();
4147
4376
  },
4148
4377
  get fallback() {
4149
4378
  return (() => {
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;
4379
+ var _el$85 = createElement("text");
4380
+ insertNode(_el$85, createTextNode(`Enlarge the terminal to show the full choices and erase warning. Q quits.`));
4381
+ effect((_$p) => setProp(_el$85, "fg", palette.warning, _$p));
4382
+ return _el$85;
4154
4383
  })();
4155
4384
  },
4156
4385
  get children() {
@@ -4159,11 +4388,11 @@ ${selection()}
4159
4388
  return selection();
4160
4389
  },
4161
4390
  get children() {
4162
- var _el$13 = createElement("text");
4163
- setProp(_el$13, "flexShrink", 0);
4164
- insert(_el$13, selection);
4165
- effect((_$p) => setProp(_el$13, "fg", palette.foreground, _$p));
4166
- return _el$13;
4391
+ var _el$11 = createElement("text");
4392
+ setProp(_el$11, "flexShrink", 0);
4393
+ insert(_el$11, selection);
4394
+ effect((_$p) => setProp(_el$11, "fg", palette.foreground, _$p));
4395
+ return _el$11;
4167
4396
  }
4168
4397
  }), createComponent2(Show, {
4169
4398
  get when() {
@@ -4171,43 +4400,43 @@ ${selection()}
4171
4400
  },
4172
4401
  get children() {
4173
4402
  return [(() => {
4174
- var _el$14 = createElement("text");
4175
- insertNode(_el$14, createTextNode(`Choose the target computer's GPU`));
4403
+ var _el$12 = createElement("text");
4404
+ insertNode(_el$12, createTextNode(`Choose the target computer's GPU`));
4176
4405
  effect((_p$) => {
4177
4406
  var _v$5 = palette.foreground, _v$6 = TextAttributes2.BOLD;
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));
4407
+ _v$5 !== _p$.e && (_p$.e = setProp(_el$12, "fg", _v$5, _p$.e));
4408
+ _v$6 !== _p$.t && (_p$.t = setProp(_el$12, "attributes", _v$6, _p$.t));
4180
4409
  return _p$;
4181
4410
  }, {
4182
4411
  e: void 0,
4183
4412
  t: void 0
4184
4413
  });
4185
- return _el$14;
4414
+ return _el$12;
4186
4415
  })(), (() => {
4187
- var _el$16 = createElement("text");
4188
- insert(_el$16, (() => {
4416
+ var _el$14 = createElement("text");
4417
+ insert(_el$14, (() => {
4189
4418
  var _c$ = memo2(() => !!loading());
4190
4419
  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.";
4191
4420
  })());
4192
- effect((_$p) => setProp(_el$16, "fg", palette.muted, _$p));
4193
- return _el$16;
4421
+ effect((_$p) => setProp(_el$14, "fg", palette.muted, _$p));
4422
+ return _el$14;
4194
4423
  })(), (() => {
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, {
4424
+ var _el$15 = createElement("box");
4425
+ setProp(_el$15, "gap", 0);
4426
+ setProp(_el$15, "marginBottom", 1);
4427
+ setProp(_el$15, "flexShrink", 0);
4428
+ insert(_el$15, createComponent2(For, {
4200
4429
  each: profiles,
4201
4430
  children: (profile, index) => row(profile.toUpperCase(), profile === "nvidia" ? "NVIDIA graphics" : `${profile === "intel" ? "Intel" : "AMD Radeon"} graphics`, index())
4202
4431
  }), null);
4203
- insert(_el$17, () => row("Candidates", "", 3), null);
4204
- insert(_el$17, () => row("Clear cached images", "", 4), null);
4205
- return _el$17;
4432
+ insert(_el$15, () => row("Candidates", "", 3), null);
4433
+ insert(_el$15, () => row("Clear cached images", "", 4), null);
4434
+ return _el$15;
4206
4435
  })(), (() => {
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;
4436
+ var _el$16 = createElement("text");
4437
+ insertNode(_el$16, createTextNode(`All images support Intel and AMD x86_64 CPUs.`));
4438
+ effect((_$p) => setProp(_el$16, "fg", palette.muted, _$p));
4439
+ return _el$16;
4211
4440
  })()];
4212
4441
  }
4213
4442
  }), createComponent2(Show, {
@@ -4216,34 +4445,34 @@ ${selection()}
4216
4445
  },
4217
4446
  get children() {
4218
4447
  return [(() => {
4219
- var _el$20 = createElement("text");
4220
- insertNode(_el$20, createTextNode(`Clear cached images?`));
4448
+ var _el$18 = createElement("text");
4449
+ insertNode(_el$18, createTextNode(`Clear cached images?`));
4221
4450
  effect((_p$) => {
4222
4451
  var _v$7 = palette.warning, _v$8 = TextAttributes2.BOLD;
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));
4452
+ _v$7 !== _p$.e && (_p$.e = setProp(_el$18, "fg", _v$7, _p$.e));
4453
+ _v$8 !== _p$.t && (_p$.t = setProp(_el$18, "attributes", _v$8, _p$.t));
4225
4454
  return _p$;
4226
4455
  }, {
4227
4456
  e: void 0,
4228
4457
  t: void 0
4229
4458
  });
4459
+ return _el$18;
4460
+ })(), (() => {
4461
+ var _el$20 = createElement("text");
4462
+ insertNode(_el$20, createTextNode(`Removes downloaded archives only, NOT USB contents. Active flashes are unaffected.`));
4463
+ effect((_$p) => setProp(_el$20, "fg", palette.foreground, _$p));
4230
4464
  return _el$20;
4231
4465
  })(), (() => {
4232
4466
  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));
4467
+ insertNode(_el$22, createTextNode(`Images will download again when needed. Pending downloads may still finish and be cached.`));
4468
+ effect((_$p) => setProp(_el$22, "fg", palette.muted, _$p));
4235
4469
  return _el$22;
4236
4470
  })(), (() => {
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));
4471
+ var _el$24 = createElement("box");
4472
+ insert(_el$24, () => row("Go back", "", 0), null);
4473
+ insert(_el$24, () => row(loading() ? "Clearing..." : "Clear cached images", "", 1, true), null);
4474
+ effect((_$p) => setProp(_el$24, "gap", tight() ? 0 : 1, _$p));
4240
4475
  return _el$24;
4241
- })(), (() => {
4242
- var _el$26 = createElement("box");
4243
- insert(_el$26, () => row("Go back", "", 0), null);
4244
- insert(_el$26, () => row(loading() ? "Clearing..." : "Clear cached images", "", 1, true), null);
4245
- effect((_$p) => setProp(_el$26, "gap", tight() ? 0 : 1, _$p));
4246
- return _el$26;
4247
4476
  })()];
4248
4477
  }
4249
4478
  }), createComponent2(Show, {
@@ -4252,23 +4481,23 @@ ${selection()}
4252
4481
  },
4253
4482
  get children() {
4254
4483
  return [(() => {
4255
- var _el$27 = createElement("text");
4256
- insertNode(_el$27, createTextNode(`Cache cleared`));
4484
+ var _el$25 = createElement("text");
4485
+ insertNode(_el$25, createTextNode(`Cache cleared`));
4257
4486
  effect((_p$) => {
4258
4487
  var _v$9 = palette.success, _v$0 = TextAttributes2.BOLD;
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));
4488
+ _v$9 !== _p$.e && (_p$.e = setProp(_el$25, "fg", _v$9, _p$.e));
4489
+ _v$0 !== _p$.t && (_p$.t = setProp(_el$25, "attributes", _v$0, _p$.t));
4261
4490
  return _p$;
4262
4491
  }, {
4263
4492
  e: void 0,
4264
4493
  t: void 0
4265
4494
  });
4266
- return _el$27;
4495
+ return _el$25;
4267
4496
  })(), (() => {
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;
4497
+ var _el$27 = createElement("text");
4498
+ insert(_el$27, notice);
4499
+ effect((_$p) => setProp(_el$27, "fg", palette.foreground, _$p));
4500
+ return _el$27;
4272
4501
  })(), memo2(() => row("Go back", "", 0))];
4273
4502
  }
4274
4503
  }), createComponent2(Show, {
@@ -4277,29 +4506,29 @@ ${selection()}
4277
4506
  },
4278
4507
  get children() {
4279
4508
  return [(() => {
4280
- var _el$30 = createElement("text");
4281
- insertNode(_el$30, createTextNode(`Candidates`));
4509
+ var _el$28 = createElement("text");
4510
+ insertNode(_el$28, createTextNode(`Candidates`));
4282
4511
  effect((_p$) => {
4283
4512
  var _v$1 = palette.foreground, _v$10 = TextAttributes2.BOLD;
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));
4513
+ _v$1 !== _p$.e && (_p$.e = setProp(_el$28, "fg", _v$1, _p$.e));
4514
+ _v$10 !== _p$.t && (_p$.t = setProp(_el$28, "attributes", _v$10, _p$.t));
4286
4515
  return _p$;
4287
4516
  }, {
4288
4517
  e: void 0,
4289
4518
  t: void 0
4290
4519
  });
4291
- return _el$30;
4520
+ return _el$28;
4292
4521
  })(), createComponent2(Show, {
4293
4522
  get when() {
4294
4523
  return !loading();
4295
4524
  },
4296
4525
  get fallback() {
4297
4526
  return (() => {
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;
4527
+ var _el$87 = createElement("text"), _el$88 = createTextNode(` Finding completed candidates...`);
4528
+ insertNode(_el$87, _el$88);
4529
+ insert(_el$87, spinner, _el$88);
4530
+ effect((_$p) => setProp(_el$87, "fg", palette.muted, _$p));
4531
+ return _el$87;
4303
4532
  })();
4304
4533
  },
4305
4534
  get children() {
@@ -4309,31 +4538,31 @@ ${selection()}
4309
4538
  },
4310
4539
  get fallback() {
4311
4540
  return [(() => {
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;
4541
+ var _el$89 = createElement("text");
4542
+ insertNode(_el$89, createTextNode(`No completed candidates available`));
4543
+ effect((_$p) => setProp(_el$89, "fg", palette.muted, _$p));
4544
+ return _el$89;
4316
4545
  })(), memo2(() => row("Go back", "", 0))];
4317
4546
  },
4318
4547
  get children() {
4319
4548
  return [(() => {
4320
- var _el$32 = createElement("box");
4321
- setProp(_el$32, "gap", 0);
4322
- insert(_el$32, createComponent2(For, {
4549
+ var _el$30 = createElement("box");
4550
+ setProp(_el$30, "gap", 0);
4551
+ insert(_el$30, createComponent2(For, {
4323
4552
  get each() {
4324
4553
  return candidates().slice(Math.max(0, cursor() - 2), Math.max(3, cursor() + 1));
4325
4554
  },
4326
4555
  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)
4327
4556
  }));
4328
- return _el$32;
4557
+ return _el$30;
4329
4558
  })(), (() => {
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;
4559
+ var _el$31 = createElement("text"), _el$32 = createTextNode(` of `), _el$33 = createTextNode(` candidates / Enter to choose`);
4560
+ insertNode(_el$31, _el$32);
4561
+ insertNode(_el$31, _el$33);
4562
+ insert(_el$31, () => cursor() + 1, _el$32);
4563
+ insert(_el$31, () => candidates().length, _el$33);
4564
+ effect((_$p) => setProp(_el$31, "fg", palette.muted, _$p));
4565
+ return _el$31;
4337
4566
  })()];
4338
4567
  }
4339
4568
  });
@@ -4346,61 +4575,61 @@ ${selection()}
4346
4575
  },
4347
4576
  get children() {
4348
4577
  return [(() => {
4349
- var _el$36 = createElement("text");
4350
- insertNode(_el$36, createTextNode(`Set up required tools`));
4578
+ var _el$34 = createElement("text");
4579
+ insertNode(_el$34, createTextNode(`Set up required tools`));
4351
4580
  effect((_p$) => {
4352
4581
  var _v$11 = palette.accent, _v$12 = TextAttributes2.BOLD;
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));
4582
+ _v$11 !== _p$.e && (_p$.e = setProp(_el$34, "fg", _v$11, _p$.e));
4583
+ _v$12 !== _p$.t && (_p$.t = setProp(_el$34, "attributes", _v$12, _p$.t));
4355
4584
  return _p$;
4356
4585
  }, {
4357
4586
  e: void 0,
4358
4587
  t: void 0
4359
4588
  });
4360
- return _el$36;
4589
+ return _el$34;
4361
4590
  })(), (() => {
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;
4591
+ var _el$36 = createElement("text"), _el$37 = createTextNode(`Missing: `);
4592
+ insertNode(_el$36, _el$37);
4593
+ insert(_el$36, () => dependencies3().missing.join(", "), null);
4594
+ effect((_$p) => setProp(_el$36, "fg", palette.foreground, _$p));
4595
+ return _el$36;
4367
4596
  })(), createComponent2(Show, {
4368
4597
  get when() {
4369
4598
  return !error();
4370
4599
  },
4371
4600
  get fallback() {
4372
4601
  return (() => {
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;
4602
+ var _el$91 = createElement("text");
4603
+ insert(_el$91, error);
4604
+ effect((_$p) => setProp(_el$91, "fg", palette.warning, _$p));
4605
+ return _el$91;
4377
4606
  })();
4378
4607
  },
4379
4608
  get children() {
4380
- var _el$40 = createElement("text");
4381
- insert(_el$40, (() => {
4609
+ var _el$38 = createElement("text");
4610
+ insert(_el$38, (() => {
4382
4611
  var _c$2 = memo2(() => !!dependencies3().installer);
4383
4612
  return () => _c$2() ? `${dependencies3().installer} will install ${dependencies3().missing.join(" and ")} and required dependencies, then continue.` : dependencies3().guidance;
4384
4613
  })());
4385
- effect((_$p) => setProp(_el$40, "fg", palette.muted, _$p));
4386
- return _el$40;
4614
+ effect((_$p) => setProp(_el$38, "fg", palette.muted, _$p));
4615
+ return _el$38;
4387
4616
  }
4388
4617
  }), createComponent2(Show, {
4389
4618
  get when() {
4390
4619
  return !tight();
4391
4620
  },
4392
4621
  get children() {
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;
4622
+ var _el$39 = createElement("text");
4623
+ insert(_el$39, () => dependencies3().installer ? "Uses the ordinary terminal. Ctrl-C cancels and quits." : "Boo Flash will not change system packages on this platform.");
4624
+ effect((_$p) => setProp(_el$39, "fg", palette.muted, _$p));
4625
+ return _el$39;
4397
4626
  }
4398
4627
  }), (() => {
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;
4628
+ var _el$40 = createElement("box");
4629
+ insert(_el$40, () => row("Go back", "", 0), null);
4630
+ insert(_el$40, () => row(dependencies3().installer ? `Install ${dependencies3().missing.join(" + ")}` : "Refresh", "", 1), null);
4631
+ effect((_$p) => setProp(_el$40, "gap", tight() ? 0 : 1, _$p));
4632
+ return _el$40;
4404
4633
  })()];
4405
4634
  }
4406
4635
  }), createComponent2(Show, {
@@ -4409,33 +4638,33 @@ ${selection()}
4409
4638
  },
4410
4639
  get children() {
4411
4640
  return [(() => {
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);
4641
+ var _el$41 = createElement("text"), _el$42 = createTextNode(` `);
4642
+ insertNode(_el$41, _el$42);
4643
+ insert(_el$41, spinner, _el$42);
4644
+ insert(_el$41, () => stopping() ? "Waiting for setup to stop..." : "Installing required tools", null);
4416
4645
  effect((_p$) => {
4417
4646
  var _v$13 = palette.accent, _v$14 = TextAttributes2.BOLD;
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));
4647
+ _v$13 !== _p$.e && (_p$.e = setProp(_el$41, "fg", _v$13, _p$.e));
4648
+ _v$14 !== _p$.t && (_p$.t = setProp(_el$41, "attributes", _v$14, _p$.t));
4420
4649
  return _p$;
4421
4650
  }, {
4422
4651
  e: void 0,
4423
4652
  t: void 0
4424
4653
  });
4654
+ return _el$41;
4655
+ })(), (() => {
4656
+ var _el$43 = createElement("text"), _el$44 = createTextNode(` via `);
4657
+ insertNode(_el$43, _el$44);
4658
+ insert(_el$43, () => dependencies3().missing.join(" + "), _el$44);
4659
+ insert(_el$43, () => dependencies3().installer, null);
4660
+ effect((_$p) => setProp(_el$43, "fg", palette.foreground, _$p));
4425
4661
  return _el$43;
4426
4662
  })(), (() => {
4427
- var _el$45 = createElement("text"), _el$46 = createTextNode(` via `);
4663
+ var _el$45 = createElement("text"), _el$46 = createTextNode(` uses the ordinary terminal. Ctrl-C cancels and quits; wait for cleanup.`);
4428
4664
  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));
4665
+ insert(_el$45, () => dependencies3().installer, _el$46);
4666
+ effect((_$p) => setProp(_el$45, "fg", palette.muted, _$p));
4432
4667
  return _el$45;
4433
- })(), (() => {
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;
4439
4668
  })()];
4440
4669
  }
4441
4670
  }), createComponent2(Show, {
@@ -4444,26 +4673,26 @@ ${selection()}
4444
4673
  },
4445
4674
  get children() {
4446
4675
  return [(() => {
4447
- var _el$49 = createElement("text");
4448
- insertNode(_el$49, createTextNode(`Choose a USB drive`));
4676
+ var _el$47 = createElement("text");
4677
+ insertNode(_el$47, createTextNode(`Choose a USB drive`));
4449
4678
  effect((_p$) => {
4450
4679
  var _v$15 = palette.foreground, _v$16 = TextAttributes2.BOLD;
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));
4680
+ _v$15 !== _p$.e && (_p$.e = setProp(_el$47, "fg", _v$15, _p$.e));
4681
+ _v$16 !== _p$.t && (_p$.t = setProp(_el$47, "attributes", _v$16, _p$.t));
4453
4682
  return _p$;
4454
4683
  }, {
4455
4684
  e: void 0,
4456
4685
  t: void 0
4457
4686
  });
4458
- return _el$49;
4687
+ return _el$47;
4459
4688
  })(), (() => {
4460
- var _el$51 = createElement("text");
4461
- insert(_el$51, (() => {
4689
+ var _el$49 = createElement("text");
4690
+ insert(_el$49, (() => {
4462
4691
  var _c$3 = memo2(() => !!loading());
4463
4692
  return () => _c$3() ? `${spinner()} Checking disks and protected storage...` : "System, home and app storage are excluded.";
4464
4693
  })());
4465
- effect((_$p) => setProp(_el$51, "fg", palette.muted, _$p));
4466
- return _el$51;
4694
+ effect((_$p) => setProp(_el$49, "fg", palette.muted, _$p));
4695
+ return _el$49;
4467
4696
  })(), createComponent2(Show, {
4468
4697
  get when() {
4469
4698
  return !loading();
@@ -4475,31 +4704,31 @@ ${selection()}
4475
4704
  },
4476
4705
  get fallback() {
4477
4706
  return (() => {
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;
4707
+ var _el$92 = createElement("text");
4708
+ insertNode(_el$92, createTextNode(`No eligible USB drives. Connect a writable external USB drive, then press R to refresh.`));
4709
+ effect((_$p) => setProp(_el$92, "fg", palette.warning, _$p));
4710
+ return _el$92;
4482
4711
  })();
4483
4712
  },
4484
4713
  get children() {
4485
4714
  return [(() => {
4486
- var _el$52 = createElement("box");
4487
- setProp(_el$52, "gap", 0);
4488
- insert(_el$52, createComponent2(For, {
4715
+ var _el$50 = createElement("box");
4716
+ setProp(_el$50, "gap", 0);
4717
+ insert(_el$50, createComponent2(For, {
4489
4718
  get each() {
4490
4719
  return disks3().slice(Math.max(0, cursor() - 2), Math.max(3, cursor() + 1));
4491
4720
  },
4492
4721
  children: (d, index) => row(d.name, `${path(d)} / ${bytes(d.bytes)} / USB`, index() + Math.max(0, cursor() - 2))
4493
4722
  }));
4494
- return _el$52;
4723
+ return _el$50;
4495
4724
  })(), (() => {
4496
- var _el$53 = createElement("text");
4497
- insert(_el$53, (() => {
4725
+ var _el$51 = createElement("text");
4726
+ insert(_el$51, (() => {
4498
4727
  var _c$4 = memo2(() => cursor() < 0);
4499
4728
  return () => _c$4() ? "Use arrows to select a drive. Nothing is selected yet." : `${cursor() + 1} of ${disks3().length} drives / Enter to review`;
4500
4729
  })());
4501
- effect((_$p) => setProp(_el$53, "fg", palette.muted, _$p));
4502
- return _el$53;
4730
+ effect((_$p) => setProp(_el$51, "fg", palette.muted, _$p));
4731
+ return _el$51;
4503
4732
  })()];
4504
4733
  }
4505
4734
  });
@@ -4512,36 +4741,36 @@ ${selection()}
4512
4741
  },
4513
4742
  get children() {
4514
4743
  return [(() => {
4515
- var _el$54 = createElement("text");
4516
- insertNode(_el$54, createTextNode(`Erase this entire USB drive?`));
4744
+ var _el$52 = createElement("text");
4745
+ insertNode(_el$52, createTextNode(`Erase this entire USB drive?`));
4517
4746
  effect((_p$) => {
4518
4747
  var _v$17 = palette.warning, _v$18 = TextAttributes2.BOLD;
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));
4748
+ _v$17 !== _p$.e && (_p$.e = setProp(_el$52, "fg", _v$17, _p$.e));
4749
+ _v$18 !== _p$.t && (_p$.t = setProp(_el$52, "attributes", _v$18, _p$.t));
4521
4750
  return _p$;
4522
4751
  }, {
4523
4752
  e: void 0,
4524
4753
  t: void 0
4525
4754
  });
4526
- return _el$54;
4755
+ return _el$52;
4527
4756
  })(), (() => {
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, (() => {
4757
+ var _el$54 = createElement("box"), _el$55 = createElement("text"), _el$56 = createElement("text");
4758
+ insertNode(_el$54, _el$55);
4759
+ insertNode(_el$54, _el$56);
4760
+ setProp(_el$54, "paddingX", 1);
4761
+ setProp(_el$55, "height", 1);
4762
+ setProp(_el$55, "wrapMode", "none");
4763
+ insert(_el$55, () => disk()?.name);
4764
+ insert(_el$56, (() => {
4536
4765
  var _c$5 = memo2(() => !!disk());
4537
4766
  return () => _c$5() ? `${path(disk())} / ${bytes(disk().bytes)}` : "";
4538
4767
  })());
4539
4768
  effect((_p$) => {
4540
4769
  var _v$19 = palette.panelAlt, _v$20 = palette.foreground, _v$21 = TextAttributes2.BOLD, _v$22 = palette.accent;
4541
- _v$19 !== _p$.e && (_p$.e = setProp(_el$56, "backgroundColor", _v$19, _p$.e));
4542
- _v$20 !== _p$.t && (_p$.t = setProp(_el$57, "fg", _v$20, _p$.t));
4543
- _v$21 !== _p$.a && (_p$.a = setProp(_el$57, "attributes", _v$21, _p$.a));
4544
- _v$22 !== _p$.o && (_p$.o = setProp(_el$58, "fg", _v$22, _p$.o));
4770
+ _v$19 !== _p$.e && (_p$.e = setProp(_el$54, "backgroundColor", _v$19, _p$.e));
4771
+ _v$20 !== _p$.t && (_p$.t = setProp(_el$55, "fg", _v$20, _p$.t));
4772
+ _v$21 !== _p$.a && (_p$.a = setProp(_el$55, "attributes", _v$21, _p$.a));
4773
+ _v$22 !== _p$.o && (_p$.o = setProp(_el$56, "fg", _v$22, _p$.o));
4545
4774
  return _p$;
4546
4775
  }, {
4547
4776
  e: void 0,
@@ -4549,18 +4778,18 @@ ${selection()}
4549
4778
  a: void 0,
4550
4779
  o: void 0
4551
4780
  });
4552
- return _el$56;
4781
+ return _el$54;
4553
4782
  })(), (() => {
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;
4783
+ var _el$57 = createElement("text");
4784
+ insertNode(_el$57, createTextNode(`ALL data and partitions on this drive will be lost. Back up anything you need before continuing.`));
4785
+ effect((_$p) => setProp(_el$57, "fg", palette.warning, _$p));
4786
+ return _el$57;
4558
4787
  })(), (() => {
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;
4788
+ var _el$59 = createElement("box");
4789
+ insert(_el$59, () => row("Go back", "", 0), null);
4790
+ insert(_el$59, () => row("Erase & flash", "", 1, true), null);
4791
+ effect((_$p) => setProp(_el$59, "gap", tight() ? 0 : 1, _$p));
4792
+ return _el$59;
4564
4793
  })()];
4565
4794
  }
4566
4795
  }), createComponent2(Show, {
@@ -4569,69 +4798,69 @@ ${selection()}
4569
4798
  },
4570
4799
  get children() {
4571
4800
  return [(() => {
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, (() => {
4801
+ var _el$60 = createElement("text"), _el$61 = createTextNode(` `);
4802
+ insertNode(_el$60, _el$61);
4803
+ insert(_el$60, spinner, _el$61);
4804
+ insert(_el$60, (() => {
4576
4805
  var _c$6 = memo2(() => !!stopping());
4577
4806
  return () => _c$6() ? "Stopping safely..." : progress().stage;
4578
4807
  })(), null);
4579
4808
  effect((_p$) => {
4580
4809
  var _v$23 = palette.accent, _v$24 = TextAttributes2.BOLD;
4581
- _v$23 !== _p$.e && (_p$.e = setProp(_el$62, "fg", _v$23, _p$.e));
4582
- _v$24 !== _p$.t && (_p$.t = setProp(_el$62, "attributes", _v$24, _p$.t));
4810
+ _v$23 !== _p$.e && (_p$.e = setProp(_el$60, "fg", _v$23, _p$.e));
4811
+ _v$24 !== _p$.t && (_p$.t = setProp(_el$60, "attributes", _v$24, _p$.t));
4583
4812
  return _p$;
4584
4813
  }, {
4585
4814
  e: void 0,
4586
4815
  t: void 0
4587
4816
  });
4588
- return _el$62;
4817
+ return _el$60;
4589
4818
  })(), (() => {
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;
4819
+ var _el$62 = createElement("text");
4820
+ insert(_el$62, () => disk()?.name);
4821
+ effect((_$p) => setProp(_el$62, "fg", palette.foreground, _$p));
4822
+ return _el$62;
4594
4823
  })(), (() => {
4595
- var _el$65 = createElement("text");
4596
- insert(_el$65, (() => {
4824
+ var _el$63 = createElement("text");
4825
+ insert(_el$63, (() => {
4597
4826
  var _c$7 = memo2(() => !!stopping());
4598
4827
  return () => _c$7() ? "Waiting for all child processes to stop. Keep the USB connected." : progress().detail;
4599
4828
  })());
4600
- effect((_$p) => setProp(_el$65, "fg", palette.muted, _$p));
4601
- return _el$65;
4829
+ effect((_$p) => setProp(_el$63, "fg", palette.muted, _$p));
4830
+ return _el$63;
4602
4831
  })(), createComponent2(Show, {
4603
4832
  get when() {
4604
4833
  return percent() !== void 0;
4605
4834
  },
4606
4835
  get children() {
4607
4836
  return [(() => {
4608
- var _el$66 = createElement("box");
4609
- setProp(_el$66, "flexShrink", 0);
4610
- insert(_el$66, createComponent2(Show, {
4837
+ var _el$64 = createElement("box");
4838
+ setProp(_el$64, "flexShrink", 0);
4839
+ insert(_el$64, createComponent2(Show, {
4611
4840
  get when() {
4612
4841
  return percent() > 0;
4613
4842
  },
4614
4843
  get children() {
4615
- var _el$67 = createElement("box");
4616
- setProp(_el$67, "height", 1);
4844
+ var _el$65 = createElement("box");
4845
+ setProp(_el$65, "height", 1);
4617
4846
  effect((_p$) => {
4618
4847
  var _v$25 = `${percent() ?? 0}%`, _v$26 = palette.accent;
4619
- _v$25 !== _p$.e && (_p$.e = setProp(_el$67, "width", _v$25, _p$.e));
4620
- _v$26 !== _p$.t && (_p$.t = setProp(_el$67, "backgroundColor", _v$26, _p$.t));
4848
+ _v$25 !== _p$.e && (_p$.e = setProp(_el$65, "width", _v$25, _p$.e));
4849
+ _v$26 !== _p$.t && (_p$.t = setProp(_el$65, "backgroundColor", _v$26, _p$.t));
4621
4850
  return _p$;
4622
4851
  }, {
4623
4852
  e: void 0,
4624
4853
  t: void 0
4625
4854
  });
4626
- return _el$67;
4855
+ return _el$65;
4627
4856
  }
4628
4857
  }));
4629
4858
  effect((_p$) => {
4630
4859
  var _v$27 = !tight(), _v$28 = palette.accent, _v$29 = tight() ? 1 : 3, _v$30 = palette.panelAlt;
4631
- _v$27 !== _p$.e && (_p$.e = setProp(_el$66, "border", _v$27, _p$.e));
4632
- _v$28 !== _p$.t && (_p$.t = setProp(_el$66, "borderColor", _v$28, _p$.t));
4633
- _v$29 !== _p$.a && (_p$.a = setProp(_el$66, "height", _v$29, _p$.a));
4634
- _v$30 !== _p$.o && (_p$.o = setProp(_el$66, "backgroundColor", _v$30, _p$.o));
4860
+ _v$27 !== _p$.e && (_p$.e = setProp(_el$64, "border", _v$27, _p$.e));
4861
+ _v$28 !== _p$.t && (_p$.t = setProp(_el$64, "borderColor", _v$28, _p$.t));
4862
+ _v$29 !== _p$.a && (_p$.a = setProp(_el$64, "height", _v$29, _p$.a));
4863
+ _v$30 !== _p$.o && (_p$.o = setProp(_el$64, "backgroundColor", _v$30, _p$.o));
4635
4864
  return _p$;
4636
4865
  }, {
4637
4866
  e: void 0,
@@ -4639,44 +4868,44 @@ ${selection()}
4639
4868
  a: void 0,
4640
4869
  o: void 0
4641
4870
  });
4642
- return _el$66;
4871
+ return _el$64;
4643
4872
  })(), (() => {
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);
4873
+ var _el$66 = createElement("text"), _el$67 = createTextNode(`% `), _el$68 = createTextNode(` / `);
4874
+ insertNode(_el$66, _el$67);
4875
+ insertNode(_el$66, _el$68);
4876
+ insert(_el$66, percent, _el$67);
4877
+ insert(_el$66, () => bytes(progress().bytes ?? 0), _el$68);
4878
+ insert(_el$66, () => bytes(progress().total ?? 0), null);
4650
4879
  effect((_p$) => {
4651
4880
  var _v$31 = palette.foreground, _v$32 = TextAttributes2.BOLD;
4652
- _v$31 !== _p$.e && (_p$.e = setProp(_el$68, "fg", _v$31, _p$.e));
4653
- _v$32 !== _p$.t && (_p$.t = setProp(_el$68, "attributes", _v$32, _p$.t));
4881
+ _v$31 !== _p$.e && (_p$.e = setProp(_el$66, "fg", _v$31, _p$.e));
4882
+ _v$32 !== _p$.t && (_p$.t = setProp(_el$66, "attributes", _v$32, _p$.t));
4654
4883
  return _p$;
4655
4884
  }, {
4656
4885
  e: void 0,
4657
4886
  t: void 0
4658
4887
  });
4659
- return _el$68;
4888
+ return _el$66;
4660
4889
  })(), createComponent2(Show, {
4661
4890
  get when() {
4662
4891
  return !tight();
4663
4892
  },
4664
4893
  get children() {
4665
- var _el$71 = createElement("text");
4666
- insert(_el$71, (() => {
4894
+ var _el$69 = createElement("text");
4895
+ insert(_el$69, (() => {
4667
4896
  var _c$8 = memo2(() => !!progress().speed);
4668
4897
  return () => _c$8() ? `${bytes(progress().speed)} / s` : "";
4669
4898
  })());
4670
- effect((_$p) => setProp(_el$71, "fg", palette.muted, _$p));
4671
- return _el$71;
4899
+ effect((_$p) => setProp(_el$69, "fg", palette.muted, _$p));
4900
+ return _el$69;
4672
4901
  }
4673
4902
  })];
4674
4903
  }
4675
4904
  }), (() => {
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;
4905
+ var _el$70 = createElement("text");
4906
+ insertNode(_el$70, createTextNode(`Keep the USB connected until safe removal succeeds.`));
4907
+ effect((_$p) => setProp(_el$70, "fg", palette.warning, _$p));
4908
+ return _el$70;
4680
4909
  })()];
4681
4910
  }
4682
4911
  }), createComponent2(Show, {
@@ -4685,34 +4914,34 @@ ${selection()}
4685
4914
  },
4686
4915
  get children() {
4687
4916
  return [(() => {
4688
- var _el$74 = createElement("text");
4689
- insert(_el$74, () => props.backend.successTitle);
4917
+ var _el$72 = createElement("text");
4918
+ insert(_el$72, () => props.backend.successTitle);
4690
4919
  effect((_p$) => {
4691
4920
  var _v$33 = palette.success, _v$34 = TextAttributes2.BOLD;
4692
- _v$33 !== _p$.e && (_p$.e = setProp(_el$74, "fg", _v$33, _p$.e));
4693
- _v$34 !== _p$.t && (_p$.t = setProp(_el$74, "attributes", _v$34, _p$.t));
4921
+ _v$33 !== _p$.e && (_p$.e = setProp(_el$72, "fg", _v$33, _p$.e));
4922
+ _v$34 !== _p$.t && (_p$.t = setProp(_el$72, "attributes", _v$34, _p$.t));
4694
4923
  return _p$;
4695
4924
  }, {
4696
4925
  e: void 0,
4697
4926
  t: void 0
4698
4927
  });
4699
- return _el$74;
4928
+ return _el$72;
4700
4929
  })(), (() => {
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;
4930
+ var _el$73 = createElement("text");
4931
+ insert(_el$73, () => props.backend.successDetail);
4932
+ effect((_$p) => setProp(_el$73, "fg", palette.foreground, _$p));
4933
+ return _el$73;
4705
4934
  })(), (() => {
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;
4935
+ var _el$74 = createElement("text");
4936
+ insertNode(_el$74, createTextNode(`Compressed image and raw stream verified. Not a device read-back.`));
4937
+ effect((_$p) => setProp(_el$74, "fg", palette.muted, _$p));
4938
+ return _el$74;
4710
4939
  })(), (() => {
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;
4940
+ var _el$76 = createElement("box");
4941
+ setProp(_el$76, "gap", 1);
4942
+ insert(_el$76, () => row("Choose another image", "", 0), null);
4943
+ insert(_el$76, () => row("Quit", "", 1), null);
4944
+ return _el$76;
4716
4945
  })()];
4717
4946
  }
4718
4947
  }), createComponent2(Show, {
@@ -4721,67 +4950,67 @@ ${selection()}
4721
4950
  },
4722
4951
  get children() {
4723
4952
  return [(() => {
4724
- var _el$79 = createElement("text");
4725
- insertNode(_el$79, createTextNode(`Flash not completed`));
4953
+ var _el$77 = createElement("text");
4954
+ insertNode(_el$77, createTextNode(`Flash not completed`));
4726
4955
  effect((_p$) => {
4727
4956
  var _v$35 = palette.danger, _v$36 = TextAttributes2.BOLD;
4728
- _v$35 !== _p$.e && (_p$.e = setProp(_el$79, "fg", _v$35, _p$.e));
4729
- _v$36 !== _p$.t && (_p$.t = setProp(_el$79, "attributes", _v$36, _p$.t));
4957
+ _v$35 !== _p$.e && (_p$.e = setProp(_el$77, "fg", _v$35, _p$.e));
4958
+ _v$36 !== _p$.t && (_p$.t = setProp(_el$77, "attributes", _v$36, _p$.t));
4730
4959
  return _p$;
4731
4960
  }, {
4732
4961
  e: void 0,
4733
4962
  t: void 0
4734
4963
  });
4735
- return _el$79;
4964
+ return _el$77;
4736
4965
  })(), (() => {
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;
4966
+ var _el$79 = createElement("text");
4967
+ insert(_el$79, error);
4968
+ effect((_$p) => setProp(_el$79, "fg", palette.foreground, _$p));
4969
+ return _el$79;
4741
4970
  })(), (() => {
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;
4971
+ var _el$80 = createElement("box");
4972
+ setProp(_el$80, "gap", 1);
4973
+ insert(_el$80, () => row("Refresh & try again", "", 0), null);
4974
+ insert(_el$80, () => row("Quit", "", 1), null);
4975
+ return _el$80;
4747
4976
  })()];
4748
4977
  }
4749
4978
  })];
4750
4979
  }
4751
4980
  }));
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, (() => {
4981
+ insertNode(_el$81, _el$82);
4982
+ insertNode(_el$81, _el$83);
4983
+ setProp(_el$81, "height", 1);
4984
+ setProp(_el$81, "flexShrink", 0);
4985
+ setProp(_el$81, "flexDirection", "row");
4986
+ setProp(_el$81, "gap", 1);
4987
+ setProp(_el$82, "flexGrow", 1);
4988
+ setProp(_el$82, "minWidth", 0);
4989
+ setProp(_el$82, "wrapMode", "none");
4990
+ insert(_el$82, (() => {
4762
4991
  var _c$9 = memo2(() => !!busy());
4763
4992
  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";
4764
4993
  })());
4765
- insertNode(_el$85, _el$86);
4766
- setProp(_el$85, "flexShrink", 0);
4767
- setProp(_el$85, "wrapMode", "none");
4768
- insert(_el$85, version, null);
4994
+ insertNode(_el$83, _el$84);
4995
+ setProp(_el$83, "flexShrink", 0);
4996
+ setProp(_el$83, "wrapMode", "none");
4997
+ insert(_el$83, version, null);
4769
4998
  effect((_p$) => {
4770
4999
  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));
5000
+ _v$37 !== _p$.e && (_p$.e = setProp(_el$5, "backgroundColor", _v$37, _p$.e));
5001
+ _v$38 !== _p$.t && (_p$.t = setProp(_el$6, "width", _v$38, _p$.t));
5002
+ _v$39 !== _p$.a && (_p$.a = setProp(_el$6, "height", _v$39, _p$.a));
5003
+ _v$40 !== _p$.o && (_p$.o = setProp(_el$6, "borderColor", _v$40, _p$.o));
5004
+ _v$41 !== _p$.i && (_p$.i = setProp(_el$6, "backgroundColor", _v$41, _p$.i));
5005
+ _v$42 !== _p$.n && (_p$.n = setProp(_el$8, "fg", _v$42, _p$.n));
5006
+ _v$43 !== _p$.s && (_p$.s = setProp(_el$8, "attributes", _v$43, _p$.s));
5007
+ _v$44 !== _p$.h && (_p$.h = setProp(_el$0, "fg", _v$44, _p$.h));
5008
+ _v$45 !== _p$.r && (_p$.r = setProp(_el$1, "backgroundColor", _v$45, _p$.r));
5009
+ _v$46 !== _p$.d && (_p$.d = setProp(_el$1, "marginTop", _v$46, _p$.d));
5010
+ _v$47 !== _p$.l && (_p$.l = setProp(_el$10, "paddingTop", _v$47, _p$.l));
5011
+ _v$48 !== _p$.u && (_p$.u = setProp(_el$10, "gap", _v$48, _p$.u));
5012
+ _v$49 !== _p$.c && (_p$.c = setProp(_el$82, "fg", _v$49, _p$.c));
5013
+ _v$50 !== _p$.w && (_p$.w = setProp(_el$83, "fg", _v$50, _p$.w));
4785
5014
  return _p$;
4786
5015
  }, {
4787
5016
  e: void 0,
@@ -4799,7 +5028,7 @@ ${selection()}
4799
5028
  c: void 0,
4800
5029
  w: void 0
4801
5030
  });
4802
- return _el$7;
5031
+ return _el$5;
4803
5032
  })();
4804
5033
  }
4805
5034
 
@@ -4867,6 +5096,31 @@ if (args.length > 1 || args.some((arg) => !["--list-images", "--clear-cache"].in
4867
5096
  for (const signal of signals) process.off(signal, quit);
4868
5097
  }
4869
5098
  }
5099
+ /*!
5100
+ * Boo artwork derived from @simonklee/bigfeelings@0.2.1; motion and scene shared
5101
+ * with the Boo website (originally website/src/lib/boo-animation.ts).
5102
+ *
5103
+ * MIT License
5104
+ * Copyright (c) 2026 Simon Klee
5105
+ *
5106
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
5107
+ * of this software and associated documentation files (the "Software"), to deal
5108
+ * in the Software without restriction, including without limitation the rights
5109
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
5110
+ * copies of the Software, and to permit persons to whom the Software is
5111
+ * furnished to do so, subject to the following conditions:
5112
+ *
5113
+ * The above copyright notice and this permission notice shall be included in all
5114
+ * copies or substantial portions of the Software.
5115
+ *
5116
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
5117
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
5118
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
5119
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
5120
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
5121
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
5122
+ * SOFTWARE.
5123
+ */
4870
5124
  /*!
4871
5125
  * Artwork derived from @simonklee/bigfeelings@0.2.1, original octant painter,
4872
5126
  * scale 4, time 0, right-facing ghost at (0,0), wordmark at (48,0).