boo-flash 0.1.7 → 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.
- package/README.md +9 -9
- package/THIRD_PARTY_NOTICES +24 -0
- package/dist/app.js +700 -329
- 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+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IAAOA12J/c8iFvaxBhAAhOVGFjZGZnbG1vcHFzdHV4owOlA6kDsAO/A8IDxgPNA9ID8gP9AwEEFAQeBCAEJQRHAEphSAA7gNAA0EBjAHUAdABlADuAyQDJQIABYWl5ALYDuQO+A/Ihb24aYXIAYwA7gMoAykAtZG8AdAAWYXIAAOA12AjdcgBhAHYAZQA7gMgAyEDlIm1lbnQAoAgiAAFhcNYD2QNjAHIAEmF0AHkAUwLhAwAAAADpA20lYWxsU3F1YXJlAACg+yVlJ3J5U21hbGxTcXVhcmUAAKCrJQABZ3D2A/kDbwBuABhhZgAA4DXYPN3zImlsb26VY3UAAAFhaQYEDgRsAFSgdSppImxkZQAAoEIi7CNpYnJpdW0AoMwhAAFjaRgEGwRyAACgMCFtAACgcyphAJdjbQBsADuAywDLQAABaXApBC0E8yF0cwCgAyLvJG5lbnRpYWxFAKBHIYACY2Zpb3MAPQQ/BEMEXQRyBHkAJGRyAADgNdgJ3WwibGVkAFMCTAQAAAAAVARtJWFsbFNxdWFyZQAAoPwlZSdyeVNtYWxsU3F1YXJlAACgqiVwA2UEAABpBAAAAABtBGYAAOA12D3dwSFsbACgACLyI2llcnRyZgCgMSFjAPIAcQQABkpUYWJjZGZnb3JzdIgEiwSOBJMElwSkBKcEqwStBLIE5QTqBGMAeQADZDuAPgA+QO0hbWFkoJMD3GNyImV2ZQAeYYABZWl5AJ0EoASjBOQhaWwiYXIAYwAcYRNkbwB0ACBhcgAA4DXYCt0AoNkicABmAADgNdg+3eUiYXRlcgADRUZHTFNUvwTIBM8E1QTZBOAEcSJ1YWwATKBlIuUhc3MAoNsidSRsbEVxdWFsAACgZyJyI2VhdGVyAACgoirlIXNzAKB3IuwkYW50RXF1YWwAoH4qaSJsZGUAAKBzImMAcgAA4DXYotwAoGsiAARBYWNmaW9zdfkE/QQFBQgFCwUTBSIFKwVSIkRjeQAqZAABY3QBBQQFZQBrAMdiXmDpIXJjJGFyAACgDCFsJWJlcnRTcGFjZQAAoAsh8AEYBQAAGwVmAACgDSHpJXpvbnRhbExpbmUAoAAlAAFjdCYFKAXyABIF8iFvayZhbQBwAEQBMQU5BW8AdwBuAEgAdQBtAPAAAAFxInVhbAAAoE8iAAdFSk9hY2RmZ21ub3N0dVMFVgVZBVwFYwVtBXAFcwV6BZAFtgXFBckFzQVjAHkAFWTsIWlnMmFjAHkAAWRjAHUAdABlADuAzQDNQAABaXlnBWwFcgBjADuAzgDOQBhkbwB0ADBhcgAAoBEhcgBhAHYAZQA7gMwAzEAAoREhYXB/BYsFAAFjZ4MFhQVyACphaSNuYXJ5SQAAoEghbABpAGUA8wD6AvQBlQUAAKUFZaAsIgABZ3KaBZ4F8iFhbACgKyLzI2VjdGlvbgCgwiJpI3NpYmxlAAABQ1SsBbEFbyJtbWEAAKBjIGkibWVzAACgYiCAAWdwdAC8Bb8FwwVvAG4ALmFmAADgNdhA3WEAmWNjAHIAAKAQIWkibGRlAChh6wHSBQAA1QVjAHkABmRsADuAzwDPQIACY2Zvc3UA4QXpBe0F8gX9BQABaXnlBegFcgBjADRhGWRyAADgNdgN3XAAZgAA4DXYQd3jAfcFAAD7BXIAAOA12KXc8iFjeQhk6yFjeQRkgANISmFjZm9zAAwGDwYSBhUGHQYhBiYGYwB5ACVkYwB5AAxk8CFwYZpjAAFleRkGHAbkIWlsNmEaZHIAAOA12A7dcABmAADgNdhC3WMAcgAA4DXYptyABUpUYWNlZmxtb3N0AD0GQAZDBl4GawZkB2gHcAd0B80H2gdjAHkACWQ7gDwAPECAAmNtbnByAEwGTwZSBlUGWwb1IXRlOWHiIWRhm2NnAACg6ifsI2FjZXRyZgCgEiFyAACgniGAAWFleQBkBmcGagbyIW9uPWHkIWlsO2EbZAABZnNvBjQHdAAABUFDREZSVFVWYXKABp4GpAbGBssG3AYDByEHwQIqBwABbnKEBowGZyVsZUJyYWNrZXQAAKDoJ/Ihb3cAoZAhQlKTBpcGYQByAACg5CHpJGdodEFycm93AKDGIWUjaWxpbmcAAKAII28A9QGqBgAAsgZiJWxlQnJhY2tldAAAoOYnbgDUAbcGAAC+BmUkZVZlY3RvcgAAoGEp5SJjdG9yQqDDIWEAcgAAoFkpbCJvb3IAAKAKI2kiZ2h0AAABQVbSBtcGciJyb3cAAKCUIeUiY3RvcgCgTikAAWVy4AbwBmUAAKGjIkFW5gbrBnIicm93AACgpCHlImN0b3IAoFopaSNhbmdsZQBCorIi+wYAAAAA/wZhAHIAAKDPKXEidWFsAACgtCJwAIABRFRWAAoHEQcYB+8kd25WZWN0b3IAoFEpZSRlVmVjdG9yAACgYCnlImN0b3JCoL8hYQByAACgWCnlImN0b3JCoLwhYQByAACgUilpAGcAaAB0AGEAcgByAG8A9wDMAnMAAANFRkdMU1Q/B0cHTgdUB1gHXwfxJXVhbEdyZWF0ZXIAoNoidSRsbEVxdWFsAACgZiJyI2VhdGVyAACgdiLlIXNzAKChKuwkYW50RXF1YWwAoH0qaSJsZGUAAKByInIAAOA12A/dZaDYIuYjdGFycm93AKDaIWkiZG90AD9hgAFucHcAege1B7kHZwAAAkxSbHKCB5QHmwerB+UhZnQAAUFSiAeNB3Iicm93AACg9SfpJGdodEFycm93AKD3J+kkZ2h0QXJyb3cAoPYn5SFmdAABYXLcAqEHaQBnAGgAdABhAHIAcgBvAPcA5wJpAGcAaAB0AGEAcgByAG8A9wDuAmYAAOA12EPdZQByAAABTFK/B8YHZSRmdEFycm93AACgmSHpJGdodEFycm93AKCYIYABY2h0ANMH1QfXB/IAWgYAoLAh8iFva0FhAKBqIgAEYWNlZmlvc3XpB+wH7gf/BwMICQgOCBEIcAAAoAUpeQAcZAABZGzyB/kHaSR1bVNwYWNlAACgXyBsI2ludHJmAACgMyFyAADgNdgQ3e4jdXNQbHVzAKATInAAZgAA4DXYRN1jAPIA/gecY4AESmFjZWZvc3R1ACEIJAgoCDUIgQiFCDsKQApHCmMAeQAKZGMidXRlAENhgAFhZXkALggxCDQI8iFvbkdh5CFpbEVhHWSAAWdzdwA7CGEIfQjhInRpdmWAAU1UVgBECEwIWQhlJWRpdW1TcGFjZQAAoAsgaABpAAABY25SCFMIawBTAHAAYQBjAOUASwhlAHIAeQBUAGgAaQDuAFQI9CFlZAABR0xnCHUIcgBlAGEAdABlAHIARwByAGUAYQB0AGUA8gDrBGUAcwBzAEwAZQBzAPMA2wdMImluZQAKYHIAAOA12BHdAAJCbnB0jAiRCJkInAhyImVhawAAoGAgwiZyZWFraW5nU3BhY2WgYGYAAKAVIUOq7CqzCMIIzQgAAOcIGwkAAAAAAAAtCQAAbwkAAIcJAACdCcAJGQoAADQKAAFvdbYIvAjuI2dydWVudACgYiJwIkNhcAAAoG0ibyh1YmxlVmVydGljYWxCYXIAAKAmIoABbHF4ANII1wjhCOUibWVudACgCSL1IWFsVKBgImkibGRlAADgQiI4A2kic3RzAACgBCJyI2VhdGVyAACjbyJFRkdMU1T1CPoIAgkJCQ0JFQlxInVhbAAAoHEidSRsbEVxdWFsAADgZyI4A3IjZWF0ZXIAAOBrIjgD5SFzcwCgeSLsJGFudEVxdWFsAOB+KjgDaSJsZGUAAKB1IvUhbXBEASAJJwnvI3duSHVtcADgTiI4A3EidWFsAADgTyI4A2UAAAFmczEJRgn0JFRyaWFuZ2xlQqLqIj0JAAAAAEIJYQByAADgzyk4A3EidWFsAACg7CJzAICibiJFR0xTVABRCVYJXAlhCWkJcSJ1YWwAAKBwInIjZWF0ZXIAAKB4IuUhc3MA4GoiOAPsJGFudEVxdWFsAOB9KjgDaSJsZGUAAKB0IuUic3RlZAABR0x1CX8J8iZlYXRlckdyZWF0ZXIA4KIqOAPlI3NzTGVzcwDgoSo4A/IjZWNlZGVzAKGAIkVTjwmVCXEidWFsAADgryo4A+wkYW50RXF1YWwAoOAiAAFlaaAJqQl2JmVyc2VFbGVtZW50AACgDCLnJWh0VHJpYW5nbGVCousitgkAAAAAuwlhAHIAAODQKTgDcSJ1YWwAAKDtIgABcXXDCeAJdSNhcmVTdQAAAWJwywnVCfMhZXRF4I8iOANxInVhbAAAoOIi5SJyc2V0ReCQIjgDcSJ1YWwAAKDjIoABYmNwAOYJ8AkNCvMhZXRF4IIi0iBxInVhbAAAoIgi4yJlZWRzgKGBIkVTVAD6CQAKBwpxInVhbAAA4LAqOAPsJGFudEVxdWFsAKDhImkibGRlAADgfyI4A+UicnNldEXggyLSIHEidWFsAACgiSJpImxkZQCAoUEiRUZUACIKJwouCnEidWFsAACgRCJ1JGxsRXF1YWwAAKBHImkibGRlAACgSSJlJXJ0aWNhbEJhcgAAoCQiYwByAADgNdip3GkAbABkAGUAO4DRANFAnWMAB0VhY2RmZ21vcHJzdHV2XgphCmgKcgp2CnoKgQqRCpYKqwqtCrsKyArNCuwhaWdSYWMAdQB0AGUAO4DTANNAAAFpeWwKcQpyAGMAO4DUANRAHmRiImxhYwBQYXIAAOA12BLdcgBhAHYAZQA7gNIA0kCAAWFlaQCHCooKjQpjAHIATGFnAGEAqWNjInJvbgCfY3AAZgAA4DXYRt3lI25DdXJseQABRFGeCqYKbyV1YmxlUXVvdGUAAKAcIHUib3RlAACgGCAAoFQqAAFjbLEKtQpyAADgNdiq3GEAcwBoADuA2ADYQGkAbAHACsUKZABlADuA1QDVQGUAcwAAoDcqbQBsADuA1gDWQGUAcgAAAUJQ0wrmCgABYXLXCtoKcgAAoD4gYQBjAAABZWvgCuIKAKDeI2UAdAAAoLQjYSVyZW50aGVzaXMAAKDcI4AEYWNmaGlsb3JzAP0KAwsFCwkLCwsMCxELIwtaC3IjdGlhbEQAAKACInkAH2RyAADgNdgT3WkApmOgY/Ujc01pbnVzsWAAAWlwFQsgC24AYwBhAHIAZQBwAGwAYQBuAOUACgVmAACgGSGAobsqZWlvACoLRQtJC+MiZWRlc4CheiJFU1QANAs5C0ALcSJ1YWwAAKCvKuwkYW50RXF1YWwAoHwiaSJsZGUAAKB+Im0AZQAAoDMgAAFkcE0LUQv1IWN0AKAPIm8jcnRpb24AYaA3ImwAAKAdIgABY2leC2ILcgAA4DXYq9yoYwACVWZvc2oLbwtzC3cLTwBUADuAIgAiQHIAAOA12BTdcABmAACgGiFjAHIAAOA12KzcAAZCRWFjZWZoaW9yc3WPC5MLlwupC7YL2AvbC90LhQyTDJoMowzhIXJyAKAQKUcAO4CuAK5AgAFjbnIAnQugC6ML9SF0ZVRhZwAAoOsncgB0oKAhbAAAoBYpgAFhZXkArwuyC7UL8iFvblhh5CFpbFZhIGR2oBwhZSJyc2UAAAFFVb8LzwsAAWxxwwvIC+UibWVudACgCyL1JGlsaWJyaXVtAKDLIXAmRXF1aWxpYnJpdW0AAKBvKXIAAKAcIW8AoWPnIWh0AARBQ0RGVFVWYewLCgwQDDIMNwxeDHwM9gIAAW5y8Av4C2clbGVCcmFja2V0AACg6SfyIW93AKGSIUJM/wsDDGEAcgAAoOUhZSRmdEFycm93AACgxCFlI2lsaW5nAACgCSNvAPUBFgwAAB4MYiVsZUJyYWNrZXQAAKDnJ24A1AEjDAAAKgxlJGVWZWN0b3IAAKBdKeUiY3RvckKgwiFhAHIAAKBVKWwib29yAACgCyMAAWVyOwxLDGUAAKGiIkFWQQxGDHIicm93AACgpiHlImN0b3IAoFspaSNhbmdsZQBCorMiVgwAAAAAWgxhAHIAAKDQKXEidWFsAACgtSJwAIABRFRWAGUMbAxzDO8kd25WZWN0b3IAoE8pZSRlVmVjdG9yAACgXCnlImN0b3JCoL4hYQByAACgVCnlImN0b3JCoMAhYQByAACgUykAAXB1iQyMDGYAAKAdIe4kZEltcGxpZXMAoHAp6SRnaHRhcnJvdwCg2yEAAWNongyhDHIAAKAbIQCgsSHsJGVEZWxheWVkAKD0KYAGSE9hY2ZoaW1vcXN0dQC/DMgMzAzQDOIM5gwKDQ0NFA0ZDU8NVA1YDQABQ2PDDMYMyCFjeSlkeQAoZEYiVGN5ACxkYyJ1dGUAWmEAorwqYWVpedgM2wzeDOEM8iFvbmBh5CFpbF5hcgBjAFxhIWRyAADgNdgW3e8hcnQAAkRMUlXvDPYM/QwEDW8kd25BcnJvdwAAoJMhZSRmdEFycm93AACgkCHpJGdodEFycm93AKCSIXAjQXJyb3cAAKCRIechbWGjY+EkbGxDaXJjbGUAoBgicABmAADgNdhK3XICHw0AAAAAIg10AACgGiLhIXJlgKGhJUlTVQAqDTINSg3uJXRlcnNlY3Rpb24AoJMidQAAAWJwNw1ADfMhZXRFoI8icSJ1YWwAAKCRIuUicnNldEWgkCJxInVhbAAAoJIibiJpb24AAKCUImMAcgAA4DXYrtxhAHIAAKDGIgACYmNtcF8Nag2ODZANc6DQImUAdABFoNAicSJ1YWwAAKCGIgABY2huDYkNZSJlZHMAgKF7IkVTVAB4DX0NhA1xInVhbAAAoLAq7CRhbnRFcXVhbACgfSJpImxkZQAAoH8iVABoAGEA9ADHCwCgESIAodEiZXOVDZ8NciJzZXQARaCDInEidWFsAACghyJlAHQAAKDRIoAFSFJTYWNmaGlvcnMAtQ27Db8NyA3ODdsN3w3+DRgOHQ4jDk8AUgBOADuA3gDeQMEhREUAoCIhAAFIY8MNxg1jAHkAC2R5ACZkAAFidcwNzQ0JYKRjgAFhZXkA1A3XDdoN8iFvbmRh5CFpbGJhImRyAADgNdgX3QABZWnjDe4N8gHoDQAA7Q3lImZvcmUAoDQiYQCYYwABY27yDfkNayNTcGFjZQAA4F8gCiDTInBhY2UAoAkg7CFkZYChPCJFRlQABw4MDhMOcSJ1YWwAAKBDInUkbGxFcXVhbAAAoEUiaSJsZGUAAKBIInAAZgAA4DXYS93pI3BsZURvdACg2yAAAWN0Jw4rDnIAAOA12K/c8iFva2Zh4QpFDlYOYA5qDgAAbg5yDgAAAAAAAAAAAAB5DnwOqA6zDgAADg8RDxYPGg8AAWNySA5ODnUAdABlADuA2gDaQHIAb6CfIeMhaXIAoEkpcgDjAVsOAABdDnkADmR2AGUAbGEAAWl5Yw5oDnIAYwA7gNsA20AjZGIibGFjAHBhcgAA4DXYGN1yAGEAdgBlADuA2QDZQOEhY3JqYQABZGl/Dp8OZQByAAABQlCFDpcOAAFhcokOiw5yAF9gYQBjAAABZWuRDpMOAKDfI2UAdAAAoLUjYSVyZW50aGVzaXMAAKDdI28AbgBQoMMi7CF1cwCgjiIAAWdwqw6uDm8AbgByYWYAAOA12EzdAARBREVUYWRwc78O0g7ZDuEOBQPqDvMOBw9yInJvdwDCoZEhyA4AAMwOYQByAACgEilvJHduQXJyb3cAAKDFIW8kd25BcnJvdwAAoJUhcSV1aWxpYnJpdW0AAKBuKWUAZQBBoKUiciJyb3cAAKClIW8AdwBuAGEAcgByAG8A9wAQA2UAcgAAAUxS+Q4AD2UkZnRBcnJvdwAAoJYh6SRnaHRBcnJvdwCglyFpAGyg0gNvAG4ApWPpIW5nbmFjAHIAAOA12LDcaSJsZGUAaGFtAGwAO4DcANxAgAREYmNkZWZvc3YALQ8xDzUPNw89D3IPdg97D4AP4SFzaACgqyJhAHIAAKDrKnkAEmThIXNobKCpIgCg5ioAAWVyQQ9DDwCgwSKAAWJ0eQBJD00Paw9hAHIAAKAWIGmgFiDjIWFsAAJCTFNUWA9cD18PZg9hAHIAAKAjIukhbmV8YGUkcGFyYXRvcgAAoFgnaSJsZGUAAKBAItQkaGluU3BhY2UAoAogcgAA4DXYGd1wAGYAAOA12E3dYwByAADgNdix3GQiYXNoAACgqiKAAmNlZm9zAI4PkQ+VD5kPng/pIXJjdGHkIWdlAKDAInIAAOA12BrdcABmAADgNdhO3WMAcgAA4DXYstwAAmZpb3OqD64Prw+0D3IAAOA12BvdnmNwAGYAAOA12E/dYwByAADgNdiz3IAEQUlVYWNmb3N1AMgPyw/OD9EP2A/gD+QP6Q/uD2MAeQAvZGMAeQAHZGMAeQAuZGMAdQB0AGUAO4DdAN1AAAFpedwP3w9yAGMAdmErZHIAAOA12BzdcABmAADgNdhQ3WMAcgAA4DXYtNxtAGwAeGEABEhhY2RlZm9z/g8BEAUQDRAQEB0QIBAkEGMAeQAWZGMidXRlAHlhAAFheQkQDBDyIW9ufWEXZG8AdAB7YfIBFRAAABwQbwBXAGkAZAB0AOgAVAhhAJZjcgAAoCghcABmAACgJCFjAHIAAOA12LXc4QtCEEkQTRAAAGcQbRByEAAAAAAAAAAAeRCKEJcQ8hD9EAAAGxEhETIROREAAD4RYwB1AHQAZQA7gOEA4UByImV2ZQADYYCiPiJFZGl1eQBWEFkQWxBgEGUQAOA+IjMDAKA/InIAYwA7gOIA4kB0AGUAO4C0ALRAMGRsAGkAZwA7gOYA5kByoGEgAOA12B7dcgBhAHYAZQA7gOAA4EAAAWVwfBCGEAABZnCAEIQQ8yF5bQCgNSHoAIMQaABhALFjAAFhcI0QWwAAAWNskRCTEHIAAWFnAACgPypkApwQAAAAALEQAKInImFkc3ajEKcQqRCuEG4AZAAAoFUqAKBcKmwib3BlAACgWCoAoFoqAKMgImVsbXJzersQvRDAEN0Q5RDtEACgpCllAACgICJzAGQAYaAhImEEzhDQENIQ1BDWENgQ2hDcEACgqCkAoKkpAKCqKQCgqykAoKwpAKCtKQCgrikAoK8pdAB2oB8iYgBkoL4iAKCdKQABcHTpEOwQaAAAoCIixWDhIXJyAKB8IwABZ3D1EPgQbwBuAAVhZgAA4DXYUt0Ao0giRWFlaW9wBxEJEQ0RDxESERQRAKBwKuMhaXIAoG8qAKBKImQAAKBLInMAJ2DyIW94ZaBIIvEADhFpAG4AZwA7gOUA5UCAAWN0eQAmESoRKxFyAADgNdi23CpgbQBwAGWgSCLxAPgBaQBsAGQAZQA7gOMA40BtAGwAO4DkAORAAAFjaUERRxFvAG4AaQBuAPQA6AFuAHQAAKARKgAITmFiY2RlZmlrbG5vcHJzdWQRaBGXEZ8RpxGrEdIR1hErEjASexKKEn0RThNbE3oTbwB0AACg7SoAAWNybBGJEWsAAAJjZXBzdBF4EX0RghHvIW5nAKBMInAjc2lsb24A9mNyImltZQAAoDUgaQBtAGWgPSJxAACgzSJ2AY0RkRFlAGUAAKC9ImUAZABnoAUjZQAAoAUjcgBrAHSgtSPiIXJrAKC2IwABb3mjEaYRbgDnAHcRMWTxIXVvAKAeIIACY21wcnQAtBG5Eb4RwRHFEeEhdXPloDUi5ABwInR5dgAAoLApcwDpAH0RbgBvAPUA6gCAAWFodwDLEcwRzhGyYwCgNiHlIWVuAKBsInIAAOA12B/dZwCAA2Nvc3R1dncA4xHyEQUSEhIhEiYSKRKAAWFpdQDpEesR7xHwAKMFcgBjAACg7yVwAACgwyKAAWRwdAD4EfwRABJvAHQAAKAAKuwhdXMAoAEqaSJtZXMAAKACKnECCxIAAAAADxLjIXVwAKAGKmEAcgAAoAUm8iNpYW5nbGUAAWR1GhIeEu8hd24AoL0lcAAAoLMlcCJsdXMAAKAEKmUA5QBCD+UAkg9hInJvdwAAoA0pgAFha28ANhJoEncSAAFjbjoSZRJrAIABbHN0AEESRxJNEm8jemVuZ2UAAKDrKXEAdQBhAHIA5QBcBPIjaWFuZ2xlgKG0JWRscgBYElwSYBLvIXduAKC+JeUhZnQAoMIlaSJnaHQAAKC4JWsAAKAjJLEBbRIAAHUSsgFxEgAAcxIAoJIlAKCRJTQAAKCTJWMAawAAoIglAAFlb38ShxJx4D0A5SD1IWl2AOBhIuUgdAAAoBAjAAJwdHd4kRKVEpsSnxJmAADgNdhT3XSgpSJvAG0AAKClIvQhaWUAoMgiAAZESFVWYmRobXB0dXayEsES0RLgEvcS+xIKExoTHxMjEygTNxMAAkxSbHK5ErsSvRK/EgCgVyUAoFQlAKBWJQCgUyUAolAlRFVkdckSyxLNEs8SAKBmJQCgaSUAoGQlAKBnJQACTFJsctgS2hLcEt4SAKBdJQCgWiUAoFwlAKBZJQCjUSVITFJobHLrEu0S7xLxEvMS9RIAoGwlAKBjJQCgYCUAoGslAKBiJQCgXyVvAHgAAKDJKQACTFJscgITBBMGEwgTAKBVJQCgUiUAoBAlAKAMJQCiACVEVWR1EhMUExYTGBMAoGUlAKBoJQCgLCUAoDQlaSJudXMAAKCfIuwhdXMAoJ4iaSJtZXMAAKCgIgACTFJsci8TMRMzEzUTAKBbJQCgWCUAoBglAKAUJQCjAiVITFJobHJCE0QTRhNIE0oTTBMAoGolAKBhJQCgXiUAoDwlAKAkJQCgHCUAAWV2UhNVE3YA5QD5AGIAYQByADuApgCmQAACY2Vpb2ITZhNqE24TcgAA4DXYt9xtAGkAAKBPIG0A5aA9IogRbAAAoVwAYmh0E3YTAKDFKfMhdWIAoMgnbAF+E4QTbABloCIgdAAAoCIgcAAAoU4iRWWJE4sTAKCuKvGgTyI8BeEMqRMAAN8TABQDFB8UAAAjFDQUAAAAAIUUAAAAAI0UAAAAANcU4xT3FPsUAACIFQAAlhWAAWNwcgCuE7ET1RP1IXRlB2GAoikiYWJjZHMAuxO/E8QTzhPSE24AZAAAoEQqciJjdXAAAKBJKgABYXXIE8sTcAAAoEsqcAAAoEcqbwB0AACgQCoA4CkiAP4AAWVv2RPcE3QAAKBBIO4ABAUAAmFlaXXlE+8T9RP4E/AB6hMAAO0TcwAAoE0qbwBuAA1hZABpAGwAO4DnAOdAcgBjAAlhcABzAHOgTCptAACgUCpvAHQAC2GAAWRtbgAIFA0UEhRpAGwAO4C4ALhAcCJ0eXYAAKCyKXQAAIGiADtlGBQZFKJAcgBkAG8A9ABiAXIAAOA12CDdgAFjZWkAKBQqFDIUeQBHZGMAawBtoBMn4SFyawCgEyfHY3IAAKPLJUVjZWZtcz8UQRRHFHcUfBSAFACgwykAocYCZWxGFEkUcQAAoFciZQBhAlAUAAAAAGAUciJyb3cAAAFsclYUWhTlIWZ0AKC6IWkiZ2h0AACguyGAAlJTYWNkAGgUaRRrFG8UcxSuYACgyCRzAHQAAKCbIukhcmMAoJoi4SFzaACgnSJuImludAAAoBAqaQBkAACg7yrjIWlyAKDCKfUhYnN1oGMmaQB0AACgYybsApMUmhS2FAAAwxRvAG4AZaA6APGgVCKrAG0CnxQAAAAAoxRhAHSgLABAYAChASJmbKcUqRTuABMNZQAAAW14rhSyFOUhbnQAoAEiZQDzANIB5wG6FAAAwBRkoEUibwB0AACgbSpuAPQAzAGAAWZyeQDIFMsUzhQA4DXYVN1vAOQA1wEAgakAO3MeAdMUcgAAoBchAAFhb9oU3hRyAHIAAKC1IXMAcwAAoBcnAAFjdeYU6hRyAADgNdi43AABYnDuFPIUZaDPKgCg0SploNAqAKDSKuQhb3QAoO8igANkZWxwcnZ3AAYVEBUbFSEVRBVlFYQV4SFycgABbHIMFQ4VAKA4KQCgNSlwAhYVAAAAABkVcgAAoN4iYwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/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
|
-
// ../../
|
|
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
|
-
// ../../
|
|
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
|
-
// ../../
|
|
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,6 +2547,271 @@ var palette = (() => {
|
|
|
2547
2547
|
// src/App.tsx
|
|
2548
2548
|
import { TextAttributes as TextAttributes2 } from "@opentui/core";
|
|
2549
2549
|
|
|
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
|
|
2621
|
+
var LIGHT_COLORS = { inkColor: "#002B8F", accentColor: "#00E5FF", highlightColor: "#D0FAFF" };
|
|
2622
|
+
var DARK_COLORS = { inkColor: "#8EEDFC", accentColor: "#235664", highlightColor: "#173D4B" };
|
|
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
|
+
]
|
|
2670
|
+
};
|
|
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"]
|
|
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
|
+
};
|
|
2814
|
+
|
|
2550
2815
|
// src/backend.ts
|
|
2551
2816
|
import { createHash as createHash2 } from "node:crypto";
|
|
2552
2817
|
import { chmod as chmod2, mkdtemp, open as open2, rm } from "node:fs/promises";
|
|
@@ -3729,7 +3994,39 @@ var FlashBackend = class {
|
|
|
3729
3994
|
}
|
|
3730
3995
|
};
|
|
3731
3996
|
|
|
3997
|
+
// package.json
|
|
3998
|
+
var version = "0.1.9";
|
|
3999
|
+
|
|
3732
4000
|
// src/App.tsx
|
|
4001
|
+
function FlashLogo() {
|
|
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
|
+
});
|
|
4019
|
+
return (() => {
|
|
4020
|
+
var _el$ = createElement("box");
|
|
4021
|
+
var _ref$ = host;
|
|
4022
|
+
typeof _ref$ === "function" ? use(_ref$, _el$) : host = _el$;
|
|
4023
|
+
setProp(_el$, "width", 34);
|
|
4024
|
+
setProp(_el$, "height", 9);
|
|
4025
|
+
setProp(_el$, "flexShrink", 0);
|
|
4026
|
+
setProp(_el$, "marginBottom", 1);
|
|
4027
|
+
return _el$;
|
|
4028
|
+
})();
|
|
4029
|
+
}
|
|
3733
4030
|
function App(props) {
|
|
3734
4031
|
const renderer = useRenderer();
|
|
3735
4032
|
const dimensions = useTerminalDimensions();
|
|
@@ -4002,31 +4299,31 @@ ${selection()}
|
|
|
4002
4299
|
if (key.name === "return" && !key.repeated) activate();
|
|
4003
4300
|
});
|
|
4004
4301
|
const row = (label, detail, index, danger = false, detailWhenTight = false) => (() => {
|
|
4005
|
-
var _el$ = createElement("box"), _el$
|
|
4006
|
-
insertNode(_el
|
|
4007
|
-
setProp(_el
|
|
4008
|
-
setProp(_el
|
|
4009
|
-
setProp(_el$
|
|
4010
|
-
insert(_el$
|
|
4011
|
-
insert(_el$
|
|
4012
|
-
insert(_el
|
|
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, {
|
|
4013
4310
|
get when() {
|
|
4014
4311
|
return detail && (!tight() || detailWhenTight);
|
|
4015
4312
|
},
|
|
4016
4313
|
get children() {
|
|
4017
|
-
var _el$
|
|
4018
|
-
setProp(_el$
|
|
4019
|
-
insert(_el$
|
|
4020
|
-
effect((_$p) => setProp(_el$
|
|
4021
|
-
return _el$
|
|
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;
|
|
4022
4319
|
}
|
|
4023
4320
|
}), null);
|
|
4024
4321
|
effect((_p$) => {
|
|
4025
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;
|
|
4026
|
-
_v$ !== _p$.e && (_p$.e = setProp(_el
|
|
4027
|
-
_v$2 !== _p$.t && (_p$.t = setProp(_el
|
|
4028
|
-
_v$3 !== _p$.a && (_p$.a = setProp(_el$
|
|
4029
|
-
_v$4 !== _p$.o && (_p$.o = setProp(_el$
|
|
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));
|
|
4030
4327
|
return _p$;
|
|
4031
4328
|
}, {
|
|
4032
4329
|
e: void 0,
|
|
@@ -4034,46 +4331,55 @@ ${selection()}
|
|
|
4034
4331
|
a: void 0,
|
|
4035
4332
|
o: void 0
|
|
4036
4333
|
});
|
|
4037
|
-
return _el
|
|
4334
|
+
return _el$2;
|
|
4038
4335
|
})();
|
|
4039
4336
|
return (() => {
|
|
4040
|
-
var _el$
|
|
4041
|
-
insertNode(_el$4, _el$5);
|
|
4042
|
-
setProp(_el$4, "width", "100%");
|
|
4043
|
-
setProp(_el$4, "height", "100%");
|
|
4044
|
-
setProp(_el$4, "justifyContent", "center");
|
|
4045
|
-
setProp(_el$4, "alignItems", "center");
|
|
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`);
|
|
4046
4338
|
insertNode(_el$5, _el$6);
|
|
4047
|
-
|
|
4048
|
-
|
|
4049
|
-
|
|
4050
|
-
setProp(_el$5, "
|
|
4051
|
-
|
|
4052
|
-
|
|
4053
|
-
|
|
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, {
|
|
4344
|
+
get when() {
|
|
4345
|
+
return memo2(() => dimensions().width >= 34)() && dimensions().height >= 34;
|
|
4346
|
+
},
|
|
4347
|
+
get children() {
|
|
4348
|
+
return createComponent2(FlashLogo, {});
|
|
4349
|
+
}
|
|
4350
|
+
}), _el$6);
|
|
4054
4351
|
insertNode(_el$6, _el$7);
|
|
4055
|
-
insertNode(_el$6, _el$
|
|
4056
|
-
|
|
4057
|
-
|
|
4058
|
-
setProp(_el$6, "
|
|
4059
|
-
setProp(_el$6, "
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
setProp(_el$
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
setProp(_el$
|
|
4066
|
-
setProp(_el$
|
|
4067
|
-
|
|
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, {
|
|
4068
4374
|
get when() {
|
|
4069
4375
|
return visible();
|
|
4070
4376
|
},
|
|
4071
4377
|
get fallback() {
|
|
4072
4378
|
return (() => {
|
|
4073
|
-
var _el$
|
|
4074
|
-
insertNode(_el$
|
|
4075
|
-
effect((_$p) => setProp(_el$
|
|
4076
|
-
return _el$
|
|
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;
|
|
4077
4383
|
})();
|
|
4078
4384
|
},
|
|
4079
4385
|
get children() {
|
|
@@ -4082,11 +4388,11 @@ ${selection()}
|
|
|
4082
4388
|
return selection();
|
|
4083
4389
|
},
|
|
4084
4390
|
get children() {
|
|
4085
|
-
var _el$
|
|
4086
|
-
setProp(_el$
|
|
4087
|
-
insert(_el$
|
|
4088
|
-
effect((_$p) => setProp(_el$
|
|
4089
|
-
return _el$
|
|
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;
|
|
4090
4396
|
}
|
|
4091
4397
|
}), createComponent2(Show, {
|
|
4092
4398
|
get when() {
|
|
@@ -4094,43 +4400,43 @@ ${selection()}
|
|
|
4094
4400
|
},
|
|
4095
4401
|
get children() {
|
|
4096
4402
|
return [(() => {
|
|
4097
|
-
var _el$
|
|
4098
|
-
insertNode(_el$
|
|
4403
|
+
var _el$12 = createElement("text");
|
|
4404
|
+
insertNode(_el$12, createTextNode(`Choose the target computer's GPU`));
|
|
4099
4405
|
effect((_p$) => {
|
|
4100
4406
|
var _v$5 = palette.foreground, _v$6 = TextAttributes2.BOLD;
|
|
4101
|
-
_v$5 !== _p$.e && (_p$.e = setProp(_el$
|
|
4102
|
-
_v$6 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4103
4409
|
return _p$;
|
|
4104
4410
|
}, {
|
|
4105
4411
|
e: void 0,
|
|
4106
4412
|
t: void 0
|
|
4107
4413
|
});
|
|
4108
|
-
return _el$
|
|
4414
|
+
return _el$12;
|
|
4109
4415
|
})(), (() => {
|
|
4110
|
-
var _el$
|
|
4111
|
-
insert(_el$
|
|
4416
|
+
var _el$14 = createElement("text");
|
|
4417
|
+
insert(_el$14, (() => {
|
|
4112
4418
|
var _c$ = memo2(() => !!loading());
|
|
4113
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.";
|
|
4114
4420
|
})());
|
|
4115
|
-
effect((_$p) => setProp(_el$
|
|
4116
|
-
return _el$
|
|
4421
|
+
effect((_$p) => setProp(_el$14, "fg", palette.muted, _$p));
|
|
4422
|
+
return _el$14;
|
|
4117
4423
|
})(), (() => {
|
|
4118
|
-
var _el$
|
|
4119
|
-
setProp(_el$
|
|
4120
|
-
setProp(_el$
|
|
4121
|
-
setProp(_el$
|
|
4122
|
-
insert(_el$
|
|
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, {
|
|
4123
4429
|
each: profiles,
|
|
4124
4430
|
children: (profile, index) => row(profile.toUpperCase(), profile === "nvidia" ? "NVIDIA graphics" : `${profile === "intel" ? "Intel" : "AMD Radeon"} graphics`, index())
|
|
4125
4431
|
}), null);
|
|
4126
|
-
insert(_el$
|
|
4127
|
-
insert(_el$
|
|
4128
|
-
return _el$14;
|
|
4129
|
-
})(), (() => {
|
|
4130
|
-
var _el$15 = createElement("text");
|
|
4131
|
-
insertNode(_el$15, createTextNode(`All images support Intel and AMD x86_64 CPUs.`));
|
|
4132
|
-
effect((_$p) => setProp(_el$15, "fg", palette.muted, _$p));
|
|
4432
|
+
insert(_el$15, () => row("Candidates", "", 3), null);
|
|
4433
|
+
insert(_el$15, () => row("Clear cached images", "", 4), null);
|
|
4133
4434
|
return _el$15;
|
|
4435
|
+
})(), (() => {
|
|
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;
|
|
4134
4440
|
})()];
|
|
4135
4441
|
}
|
|
4136
4442
|
}), createComponent2(Show, {
|
|
@@ -4139,34 +4445,34 @@ ${selection()}
|
|
|
4139
4445
|
},
|
|
4140
4446
|
get children() {
|
|
4141
4447
|
return [(() => {
|
|
4142
|
-
var _el$
|
|
4143
|
-
insertNode(_el$
|
|
4448
|
+
var _el$18 = createElement("text");
|
|
4449
|
+
insertNode(_el$18, createTextNode(`Clear cached images?`));
|
|
4144
4450
|
effect((_p$) => {
|
|
4145
4451
|
var _v$7 = palette.warning, _v$8 = TextAttributes2.BOLD;
|
|
4146
|
-
_v$7 !== _p$.e && (_p$.e = setProp(_el$
|
|
4147
|
-
_v$8 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4148
4454
|
return _p$;
|
|
4149
4455
|
}, {
|
|
4150
4456
|
e: void 0,
|
|
4151
4457
|
t: void 0
|
|
4152
4458
|
});
|
|
4153
|
-
return _el$
|
|
4459
|
+
return _el$18;
|
|
4154
4460
|
})(), (() => {
|
|
4155
|
-
var _el$
|
|
4156
|
-
insertNode(_el$
|
|
4157
|
-
effect((_$p) => setProp(_el$
|
|
4158
|
-
return _el$
|
|
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));
|
|
4464
|
+
return _el$20;
|
|
4159
4465
|
})(), (() => {
|
|
4160
|
-
var _el$
|
|
4161
|
-
insertNode(_el$
|
|
4162
|
-
effect((_$p) => setProp(_el$
|
|
4163
|
-
return _el$
|
|
4466
|
+
var _el$22 = createElement("text");
|
|
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));
|
|
4469
|
+
return _el$22;
|
|
4164
4470
|
})(), (() => {
|
|
4165
|
-
var _el$
|
|
4166
|
-
insert(_el$
|
|
4167
|
-
insert(_el$
|
|
4168
|
-
effect((_$p) => setProp(_el$
|
|
4169
|
-
return _el$
|
|
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));
|
|
4475
|
+
return _el$24;
|
|
4170
4476
|
})()];
|
|
4171
4477
|
}
|
|
4172
4478
|
}), createComponent2(Show, {
|
|
@@ -4175,23 +4481,23 @@ ${selection()}
|
|
|
4175
4481
|
},
|
|
4176
4482
|
get children() {
|
|
4177
4483
|
return [(() => {
|
|
4178
|
-
var _el$
|
|
4179
|
-
insertNode(_el$
|
|
4484
|
+
var _el$25 = createElement("text");
|
|
4485
|
+
insertNode(_el$25, createTextNode(`Cache cleared`));
|
|
4180
4486
|
effect((_p$) => {
|
|
4181
4487
|
var _v$9 = palette.success, _v$0 = TextAttributes2.BOLD;
|
|
4182
|
-
_v$9 !== _p$.e && (_p$.e = setProp(_el$
|
|
4183
|
-
_v$0 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4184
4490
|
return _p$;
|
|
4185
4491
|
}, {
|
|
4186
4492
|
e: void 0,
|
|
4187
4493
|
t: void 0
|
|
4188
4494
|
});
|
|
4189
|
-
return _el$
|
|
4495
|
+
return _el$25;
|
|
4190
4496
|
})(), (() => {
|
|
4191
|
-
var _el$
|
|
4192
|
-
insert(_el$
|
|
4193
|
-
effect((_$p) => setProp(_el$
|
|
4194
|
-
return _el$
|
|
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;
|
|
4195
4501
|
})(), memo2(() => row("Go back", "", 0))];
|
|
4196
4502
|
}
|
|
4197
4503
|
}), createComponent2(Show, {
|
|
@@ -4200,29 +4506,29 @@ ${selection()}
|
|
|
4200
4506
|
},
|
|
4201
4507
|
get children() {
|
|
4202
4508
|
return [(() => {
|
|
4203
|
-
var _el$
|
|
4204
|
-
insertNode(_el$
|
|
4509
|
+
var _el$28 = createElement("text");
|
|
4510
|
+
insertNode(_el$28, createTextNode(`Candidates`));
|
|
4205
4511
|
effect((_p$) => {
|
|
4206
4512
|
var _v$1 = palette.foreground, _v$10 = TextAttributes2.BOLD;
|
|
4207
|
-
_v$1 !== _p$.e && (_p$.e = setProp(_el$
|
|
4208
|
-
_v$10 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4209
4515
|
return _p$;
|
|
4210
4516
|
}, {
|
|
4211
4517
|
e: void 0,
|
|
4212
4518
|
t: void 0
|
|
4213
4519
|
});
|
|
4214
|
-
return _el$
|
|
4520
|
+
return _el$28;
|
|
4215
4521
|
})(), createComponent2(Show, {
|
|
4216
4522
|
get when() {
|
|
4217
4523
|
return !loading();
|
|
4218
4524
|
},
|
|
4219
4525
|
get fallback() {
|
|
4220
4526
|
return (() => {
|
|
4221
|
-
var _el$
|
|
4222
|
-
insertNode(_el$
|
|
4223
|
-
insert(_el$
|
|
4224
|
-
effect((_$p) => setProp(_el$
|
|
4225
|
-
return _el$
|
|
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;
|
|
4226
4532
|
})();
|
|
4227
4533
|
},
|
|
4228
4534
|
get children() {
|
|
@@ -4232,31 +4538,31 @@ ${selection()}
|
|
|
4232
4538
|
},
|
|
4233
4539
|
get fallback() {
|
|
4234
4540
|
return [(() => {
|
|
4235
|
-
var _el$
|
|
4236
|
-
insertNode(_el$
|
|
4237
|
-
effect((_$p) => setProp(_el$
|
|
4238
|
-
return _el$
|
|
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;
|
|
4239
4545
|
})(), memo2(() => row("Go back", "", 0))];
|
|
4240
4546
|
},
|
|
4241
4547
|
get children() {
|
|
4242
4548
|
return [(() => {
|
|
4243
|
-
var _el$
|
|
4244
|
-
setProp(_el$
|
|
4245
|
-
insert(_el$
|
|
4549
|
+
var _el$30 = createElement("box");
|
|
4550
|
+
setProp(_el$30, "gap", 0);
|
|
4551
|
+
insert(_el$30, createComponent2(For, {
|
|
4246
4552
|
get each() {
|
|
4247
4553
|
return candidates().slice(Math.max(0, cursor() - 2), Math.max(3, cursor() + 1));
|
|
4248
4554
|
},
|
|
4249
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)
|
|
4250
4556
|
}));
|
|
4251
|
-
return _el$29;
|
|
4252
|
-
})(), (() => {
|
|
4253
|
-
var _el$30 = createElement("text"), _el$31 = createTextNode(` of `), _el$32 = createTextNode(` candidates / Enter to choose`);
|
|
4254
|
-
insertNode(_el$30, _el$31);
|
|
4255
|
-
insertNode(_el$30, _el$32);
|
|
4256
|
-
insert(_el$30, () => cursor() + 1, _el$31);
|
|
4257
|
-
insert(_el$30, () => candidates().length, _el$32);
|
|
4258
|
-
effect((_$p) => setProp(_el$30, "fg", palette.muted, _$p));
|
|
4259
4557
|
return _el$30;
|
|
4558
|
+
})(), (() => {
|
|
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;
|
|
4260
4566
|
})()];
|
|
4261
4567
|
}
|
|
4262
4568
|
});
|
|
@@ -4269,61 +4575,61 @@ ${selection()}
|
|
|
4269
4575
|
},
|
|
4270
4576
|
get children() {
|
|
4271
4577
|
return [(() => {
|
|
4272
|
-
var _el$
|
|
4273
|
-
insertNode(_el$
|
|
4578
|
+
var _el$34 = createElement("text");
|
|
4579
|
+
insertNode(_el$34, createTextNode(`Set up required tools`));
|
|
4274
4580
|
effect((_p$) => {
|
|
4275
4581
|
var _v$11 = palette.accent, _v$12 = TextAttributes2.BOLD;
|
|
4276
|
-
_v$11 !== _p$.e && (_p$.e = setProp(_el$
|
|
4277
|
-
_v$12 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4278
4584
|
return _p$;
|
|
4279
4585
|
}, {
|
|
4280
4586
|
e: void 0,
|
|
4281
4587
|
t: void 0
|
|
4282
4588
|
});
|
|
4283
|
-
return _el$
|
|
4589
|
+
return _el$34;
|
|
4284
4590
|
})(), (() => {
|
|
4285
|
-
var _el$
|
|
4286
|
-
insertNode(_el$
|
|
4287
|
-
insert(_el$
|
|
4288
|
-
effect((_$p) => setProp(_el$
|
|
4289
|
-
return _el$
|
|
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;
|
|
4290
4596
|
})(), createComponent2(Show, {
|
|
4291
4597
|
get when() {
|
|
4292
4598
|
return !error();
|
|
4293
4599
|
},
|
|
4294
4600
|
get fallback() {
|
|
4295
4601
|
return (() => {
|
|
4296
|
-
var _el$
|
|
4297
|
-
insert(_el$
|
|
4298
|
-
effect((_$p) => setProp(_el$
|
|
4299
|
-
return _el$
|
|
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;
|
|
4300
4606
|
})();
|
|
4301
4607
|
},
|
|
4302
4608
|
get children() {
|
|
4303
|
-
var _el$
|
|
4304
|
-
insert(_el$
|
|
4609
|
+
var _el$38 = createElement("text");
|
|
4610
|
+
insert(_el$38, (() => {
|
|
4305
4611
|
var _c$2 = memo2(() => !!dependencies3().installer);
|
|
4306
4612
|
return () => _c$2() ? `${dependencies3().installer} will install ${dependencies3().missing.join(" and ")} and required dependencies, then continue.` : dependencies3().guidance;
|
|
4307
4613
|
})());
|
|
4308
|
-
effect((_$p) => setProp(_el$
|
|
4309
|
-
return _el$
|
|
4614
|
+
effect((_$p) => setProp(_el$38, "fg", palette.muted, _$p));
|
|
4615
|
+
return _el$38;
|
|
4310
4616
|
}
|
|
4311
4617
|
}), createComponent2(Show, {
|
|
4312
4618
|
get when() {
|
|
4313
4619
|
return !tight();
|
|
4314
4620
|
},
|
|
4315
4621
|
get children() {
|
|
4316
|
-
var _el$
|
|
4317
|
-
insert(_el$
|
|
4318
|
-
effect((_$p) => setProp(_el$
|
|
4319
|
-
return _el$
|
|
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;
|
|
4320
4626
|
}
|
|
4321
4627
|
}), (() => {
|
|
4322
|
-
var _el$
|
|
4323
|
-
insert(_el$
|
|
4324
|
-
insert(_el$
|
|
4325
|
-
effect((_$p) => setProp(_el$
|
|
4326
|
-
return _el$
|
|
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;
|
|
4327
4633
|
})()];
|
|
4328
4634
|
}
|
|
4329
4635
|
}), createComponent2(Show, {
|
|
@@ -4332,33 +4638,33 @@ ${selection()}
|
|
|
4332
4638
|
},
|
|
4333
4639
|
get children() {
|
|
4334
4640
|
return [(() => {
|
|
4335
|
-
var _el$
|
|
4336
|
-
insertNode(_el$
|
|
4337
|
-
insert(_el$
|
|
4338
|
-
insert(_el$
|
|
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);
|
|
4339
4645
|
effect((_p$) => {
|
|
4340
4646
|
var _v$13 = palette.accent, _v$14 = TextAttributes2.BOLD;
|
|
4341
|
-
_v$13 !== _p$.e && (_p$.e = setProp(_el$
|
|
4342
|
-
_v$14 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4343
4649
|
return _p$;
|
|
4344
4650
|
}, {
|
|
4345
4651
|
e: void 0,
|
|
4346
4652
|
t: void 0
|
|
4347
4653
|
});
|
|
4348
|
-
return _el$
|
|
4654
|
+
return _el$41;
|
|
4349
4655
|
})(), (() => {
|
|
4350
|
-
var _el$
|
|
4351
|
-
insertNode(_el$
|
|
4352
|
-
insert(_el$
|
|
4353
|
-
insert(_el$
|
|
4354
|
-
effect((_$p) => setProp(_el$
|
|
4355
|
-
return _el$
|
|
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));
|
|
4661
|
+
return _el$43;
|
|
4356
4662
|
})(), (() => {
|
|
4357
|
-
var _el$
|
|
4358
|
-
insertNode(_el$
|
|
4359
|
-
insert(_el$
|
|
4360
|
-
effect((_$p) => setProp(_el$
|
|
4361
|
-
return _el$
|
|
4663
|
+
var _el$45 = createElement("text"), _el$46 = createTextNode(` uses the ordinary terminal. Ctrl-C cancels and quits; wait for cleanup.`);
|
|
4664
|
+
insertNode(_el$45, _el$46);
|
|
4665
|
+
insert(_el$45, () => dependencies3().installer, _el$46);
|
|
4666
|
+
effect((_$p) => setProp(_el$45, "fg", palette.muted, _$p));
|
|
4667
|
+
return _el$45;
|
|
4362
4668
|
})()];
|
|
4363
4669
|
}
|
|
4364
4670
|
}), createComponent2(Show, {
|
|
@@ -4367,26 +4673,26 @@ ${selection()}
|
|
|
4367
4673
|
},
|
|
4368
4674
|
get children() {
|
|
4369
4675
|
return [(() => {
|
|
4370
|
-
var _el$
|
|
4371
|
-
insertNode(_el$
|
|
4676
|
+
var _el$47 = createElement("text");
|
|
4677
|
+
insertNode(_el$47, createTextNode(`Choose a USB drive`));
|
|
4372
4678
|
effect((_p$) => {
|
|
4373
4679
|
var _v$15 = palette.foreground, _v$16 = TextAttributes2.BOLD;
|
|
4374
|
-
_v$15 !== _p$.e && (_p$.e = setProp(_el$
|
|
4375
|
-
_v$16 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4376
4682
|
return _p$;
|
|
4377
4683
|
}, {
|
|
4378
4684
|
e: void 0,
|
|
4379
4685
|
t: void 0
|
|
4380
4686
|
});
|
|
4381
|
-
return _el$
|
|
4687
|
+
return _el$47;
|
|
4382
4688
|
})(), (() => {
|
|
4383
|
-
var _el$
|
|
4384
|
-
insert(_el$
|
|
4689
|
+
var _el$49 = createElement("text");
|
|
4690
|
+
insert(_el$49, (() => {
|
|
4385
4691
|
var _c$3 = memo2(() => !!loading());
|
|
4386
4692
|
return () => _c$3() ? `${spinner()} Checking disks and protected storage...` : "System, home and app storage are excluded.";
|
|
4387
4693
|
})());
|
|
4388
|
-
effect((_$p) => setProp(_el$
|
|
4389
|
-
return _el$
|
|
4694
|
+
effect((_$p) => setProp(_el$49, "fg", palette.muted, _$p));
|
|
4695
|
+
return _el$49;
|
|
4390
4696
|
})(), createComponent2(Show, {
|
|
4391
4697
|
get when() {
|
|
4392
4698
|
return !loading();
|
|
@@ -4398,31 +4704,31 @@ ${selection()}
|
|
|
4398
4704
|
},
|
|
4399
4705
|
get fallback() {
|
|
4400
4706
|
return (() => {
|
|
4401
|
-
var _el$
|
|
4402
|
-
insertNode(_el$
|
|
4403
|
-
effect((_$p) => setProp(_el$
|
|
4404
|
-
return _el$
|
|
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;
|
|
4405
4711
|
})();
|
|
4406
4712
|
},
|
|
4407
4713
|
get children() {
|
|
4408
4714
|
return [(() => {
|
|
4409
|
-
var _el$
|
|
4410
|
-
setProp(_el$
|
|
4411
|
-
insert(_el$
|
|
4715
|
+
var _el$50 = createElement("box");
|
|
4716
|
+
setProp(_el$50, "gap", 0);
|
|
4717
|
+
insert(_el$50, createComponent2(For, {
|
|
4412
4718
|
get each() {
|
|
4413
4719
|
return disks3().slice(Math.max(0, cursor() - 2), Math.max(3, cursor() + 1));
|
|
4414
4720
|
},
|
|
4415
4721
|
children: (d, index) => row(d.name, `${path(d)} / ${bytes(d.bytes)} / USB`, index() + Math.max(0, cursor() - 2))
|
|
4416
4722
|
}));
|
|
4417
|
-
return _el$
|
|
4723
|
+
return _el$50;
|
|
4418
4724
|
})(), (() => {
|
|
4419
|
-
var _el$
|
|
4420
|
-
insert(_el$
|
|
4725
|
+
var _el$51 = createElement("text");
|
|
4726
|
+
insert(_el$51, (() => {
|
|
4421
4727
|
var _c$4 = memo2(() => cursor() < 0);
|
|
4422
4728
|
return () => _c$4() ? "Use arrows to select a drive. Nothing is selected yet." : `${cursor() + 1} of ${disks3().length} drives / Enter to review`;
|
|
4423
4729
|
})());
|
|
4424
|
-
effect((_$p) => setProp(_el$
|
|
4425
|
-
return _el$
|
|
4730
|
+
effect((_$p) => setProp(_el$51, "fg", palette.muted, _$p));
|
|
4731
|
+
return _el$51;
|
|
4426
4732
|
})()];
|
|
4427
4733
|
}
|
|
4428
4734
|
});
|
|
@@ -4435,36 +4741,36 @@ ${selection()}
|
|
|
4435
4741
|
},
|
|
4436
4742
|
get children() {
|
|
4437
4743
|
return [(() => {
|
|
4438
|
-
var _el$
|
|
4439
|
-
insertNode(_el$
|
|
4744
|
+
var _el$52 = createElement("text");
|
|
4745
|
+
insertNode(_el$52, createTextNode(`Erase this entire USB drive?`));
|
|
4440
4746
|
effect((_p$) => {
|
|
4441
4747
|
var _v$17 = palette.warning, _v$18 = TextAttributes2.BOLD;
|
|
4442
|
-
_v$17 !== _p$.e && (_p$.e = setProp(_el$
|
|
4443
|
-
_v$18 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4444
4750
|
return _p$;
|
|
4445
4751
|
}, {
|
|
4446
4752
|
e: void 0,
|
|
4447
4753
|
t: void 0
|
|
4448
4754
|
});
|
|
4449
|
-
return _el$
|
|
4755
|
+
return _el$52;
|
|
4450
4756
|
})(), (() => {
|
|
4451
|
-
var _el$
|
|
4452
|
-
insertNode(_el$
|
|
4453
|
-
insertNode(_el$
|
|
4454
|
-
setProp(_el$
|
|
4455
|
-
setProp(_el$
|
|
4456
|
-
setProp(_el$
|
|
4457
|
-
insert(_el$
|
|
4458
|
-
insert(_el$
|
|
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, (() => {
|
|
4459
4765
|
var _c$5 = memo2(() => !!disk());
|
|
4460
4766
|
return () => _c$5() ? `${path(disk())} / ${bytes(disk().bytes)}` : "";
|
|
4461
4767
|
})());
|
|
4462
4768
|
effect((_p$) => {
|
|
4463
4769
|
var _v$19 = palette.panelAlt, _v$20 = palette.foreground, _v$21 = TextAttributes2.BOLD, _v$22 = palette.accent;
|
|
4464
|
-
_v$19 !== _p$.e && (_p$.e = setProp(_el$
|
|
4465
|
-
_v$20 !== _p$.t && (_p$.t = setProp(_el$
|
|
4466
|
-
_v$21 !== _p$.a && (_p$.a = setProp(_el$
|
|
4467
|
-
_v$22 !== _p$.o && (_p$.o = setProp(_el$
|
|
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));
|
|
4468
4774
|
return _p$;
|
|
4469
4775
|
}, {
|
|
4470
4776
|
e: void 0,
|
|
@@ -4472,18 +4778,18 @@ ${selection()}
|
|
|
4472
4778
|
a: void 0,
|
|
4473
4779
|
o: void 0
|
|
4474
4780
|
});
|
|
4475
|
-
return _el$
|
|
4781
|
+
return _el$54;
|
|
4476
4782
|
})(), (() => {
|
|
4477
|
-
var _el$
|
|
4478
|
-
insertNode(_el$
|
|
4479
|
-
effect((_$p) => setProp(_el$
|
|
4480
|
-
return _el$
|
|
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;
|
|
4481
4787
|
})(), (() => {
|
|
4482
|
-
var _el$
|
|
4483
|
-
insert(_el$
|
|
4484
|
-
insert(_el$
|
|
4485
|
-
effect((_$p) => setProp(_el$
|
|
4486
|
-
return _el$
|
|
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;
|
|
4487
4793
|
})()];
|
|
4488
4794
|
}
|
|
4489
4795
|
}), createComponent2(Show, {
|
|
@@ -4492,69 +4798,69 @@ ${selection()}
|
|
|
4492
4798
|
},
|
|
4493
4799
|
get children() {
|
|
4494
4800
|
return [(() => {
|
|
4495
|
-
var _el$
|
|
4496
|
-
insertNode(_el$
|
|
4497
|
-
insert(_el$
|
|
4498
|
-
insert(_el$
|
|
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, (() => {
|
|
4499
4805
|
var _c$6 = memo2(() => !!stopping());
|
|
4500
4806
|
return () => _c$6() ? "Stopping safely..." : progress().stage;
|
|
4501
4807
|
})(), null);
|
|
4502
4808
|
effect((_p$) => {
|
|
4503
4809
|
var _v$23 = palette.accent, _v$24 = TextAttributes2.BOLD;
|
|
4504
|
-
_v$23 !== _p$.e && (_p$.e = setProp(_el$
|
|
4505
|
-
_v$24 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4506
4812
|
return _p$;
|
|
4507
4813
|
}, {
|
|
4508
4814
|
e: void 0,
|
|
4509
4815
|
t: void 0
|
|
4510
4816
|
});
|
|
4511
|
-
return _el$
|
|
4512
|
-
})(), (() => {
|
|
4513
|
-
var _el$61 = createElement("text");
|
|
4514
|
-
insert(_el$61, () => disk()?.name);
|
|
4515
|
-
effect((_$p) => setProp(_el$61, "fg", palette.foreground, _$p));
|
|
4516
|
-
return _el$61;
|
|
4817
|
+
return _el$60;
|
|
4517
4818
|
})(), (() => {
|
|
4518
4819
|
var _el$62 = createElement("text");
|
|
4519
|
-
insert(_el$62, (
|
|
4820
|
+
insert(_el$62, () => disk()?.name);
|
|
4821
|
+
effect((_$p) => setProp(_el$62, "fg", palette.foreground, _$p));
|
|
4822
|
+
return _el$62;
|
|
4823
|
+
})(), (() => {
|
|
4824
|
+
var _el$63 = createElement("text");
|
|
4825
|
+
insert(_el$63, (() => {
|
|
4520
4826
|
var _c$7 = memo2(() => !!stopping());
|
|
4521
4827
|
return () => _c$7() ? "Waiting for all child processes to stop. Keep the USB connected." : progress().detail;
|
|
4522
4828
|
})());
|
|
4523
|
-
effect((_$p) => setProp(_el$
|
|
4524
|
-
return _el$
|
|
4829
|
+
effect((_$p) => setProp(_el$63, "fg", palette.muted, _$p));
|
|
4830
|
+
return _el$63;
|
|
4525
4831
|
})(), createComponent2(Show, {
|
|
4526
4832
|
get when() {
|
|
4527
4833
|
return percent() !== void 0;
|
|
4528
4834
|
},
|
|
4529
4835
|
get children() {
|
|
4530
4836
|
return [(() => {
|
|
4531
|
-
var _el$
|
|
4532
|
-
setProp(_el$
|
|
4533
|
-
insert(_el$
|
|
4837
|
+
var _el$64 = createElement("box");
|
|
4838
|
+
setProp(_el$64, "flexShrink", 0);
|
|
4839
|
+
insert(_el$64, createComponent2(Show, {
|
|
4534
4840
|
get when() {
|
|
4535
4841
|
return percent() > 0;
|
|
4536
4842
|
},
|
|
4537
4843
|
get children() {
|
|
4538
|
-
var _el$
|
|
4539
|
-
setProp(_el$
|
|
4844
|
+
var _el$65 = createElement("box");
|
|
4845
|
+
setProp(_el$65, "height", 1);
|
|
4540
4846
|
effect((_p$) => {
|
|
4541
4847
|
var _v$25 = `${percent() ?? 0}%`, _v$26 = palette.accent;
|
|
4542
|
-
_v$25 !== _p$.e && (_p$.e = setProp(_el$
|
|
4543
|
-
_v$26 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4544
4850
|
return _p$;
|
|
4545
4851
|
}, {
|
|
4546
4852
|
e: void 0,
|
|
4547
4853
|
t: void 0
|
|
4548
4854
|
});
|
|
4549
|
-
return _el$
|
|
4855
|
+
return _el$65;
|
|
4550
4856
|
}
|
|
4551
4857
|
}));
|
|
4552
4858
|
effect((_p$) => {
|
|
4553
4859
|
var _v$27 = !tight(), _v$28 = palette.accent, _v$29 = tight() ? 1 : 3, _v$30 = palette.panelAlt;
|
|
4554
|
-
_v$27 !== _p$.e && (_p$.e = setProp(_el$
|
|
4555
|
-
_v$28 !== _p$.t && (_p$.t = setProp(_el$
|
|
4556
|
-
_v$29 !== _p$.a && (_p$.a = setProp(_el$
|
|
4557
|
-
_v$30 !== _p$.o && (_p$.o = setProp(_el$
|
|
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));
|
|
4558
4864
|
return _p$;
|
|
4559
4865
|
}, {
|
|
4560
4866
|
e: void 0,
|
|
@@ -4562,44 +4868,44 @@ ${selection()}
|
|
|
4562
4868
|
a: void 0,
|
|
4563
4869
|
o: void 0
|
|
4564
4870
|
});
|
|
4565
|
-
return _el$
|
|
4871
|
+
return _el$64;
|
|
4566
4872
|
})(), (() => {
|
|
4567
|
-
var _el$
|
|
4568
|
-
insertNode(_el$
|
|
4569
|
-
insertNode(_el$
|
|
4570
|
-
insert(_el$
|
|
4571
|
-
insert(_el$
|
|
4572
|
-
insert(_el$
|
|
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);
|
|
4573
4879
|
effect((_p$) => {
|
|
4574
4880
|
var _v$31 = palette.foreground, _v$32 = TextAttributes2.BOLD;
|
|
4575
|
-
_v$31 !== _p$.e && (_p$.e = setProp(_el$
|
|
4576
|
-
_v$32 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4577
4883
|
return _p$;
|
|
4578
4884
|
}, {
|
|
4579
4885
|
e: void 0,
|
|
4580
4886
|
t: void 0
|
|
4581
4887
|
});
|
|
4582
|
-
return _el$
|
|
4888
|
+
return _el$66;
|
|
4583
4889
|
})(), createComponent2(Show, {
|
|
4584
4890
|
get when() {
|
|
4585
4891
|
return !tight();
|
|
4586
4892
|
},
|
|
4587
4893
|
get children() {
|
|
4588
|
-
var _el$
|
|
4589
|
-
insert(_el$
|
|
4894
|
+
var _el$69 = createElement("text");
|
|
4895
|
+
insert(_el$69, (() => {
|
|
4590
4896
|
var _c$8 = memo2(() => !!progress().speed);
|
|
4591
4897
|
return () => _c$8() ? `${bytes(progress().speed)} / s` : "";
|
|
4592
4898
|
})());
|
|
4593
|
-
effect((_$p) => setProp(_el$
|
|
4594
|
-
return _el$
|
|
4899
|
+
effect((_$p) => setProp(_el$69, "fg", palette.muted, _$p));
|
|
4900
|
+
return _el$69;
|
|
4595
4901
|
}
|
|
4596
4902
|
})];
|
|
4597
4903
|
}
|
|
4598
4904
|
}), (() => {
|
|
4599
|
-
var _el$
|
|
4600
|
-
insertNode(_el$
|
|
4601
|
-
effect((_$p) => setProp(_el$
|
|
4602
|
-
return _el$
|
|
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;
|
|
4603
4909
|
})()];
|
|
4604
4910
|
}
|
|
4605
4911
|
}), createComponent2(Show, {
|
|
@@ -4608,34 +4914,34 @@ ${selection()}
|
|
|
4608
4914
|
},
|
|
4609
4915
|
get children() {
|
|
4610
4916
|
return [(() => {
|
|
4611
|
-
var _el$
|
|
4612
|
-
insert(_el$
|
|
4917
|
+
var _el$72 = createElement("text");
|
|
4918
|
+
insert(_el$72, () => props.backend.successTitle);
|
|
4613
4919
|
effect((_p$) => {
|
|
4614
4920
|
var _v$33 = palette.success, _v$34 = TextAttributes2.BOLD;
|
|
4615
|
-
_v$33 !== _p$.e && (_p$.e = setProp(_el$
|
|
4616
|
-
_v$34 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4617
4923
|
return _p$;
|
|
4618
4924
|
}, {
|
|
4619
4925
|
e: void 0,
|
|
4620
4926
|
t: void 0
|
|
4621
4927
|
});
|
|
4622
|
-
return _el$71;
|
|
4623
|
-
})(), (() => {
|
|
4624
|
-
var _el$72 = createElement("text");
|
|
4625
|
-
insert(_el$72, () => props.backend.successDetail);
|
|
4626
|
-
effect((_$p) => setProp(_el$72, "fg", palette.foreground, _$p));
|
|
4627
4928
|
return _el$72;
|
|
4628
4929
|
})(), (() => {
|
|
4629
4930
|
var _el$73 = createElement("text");
|
|
4630
|
-
|
|
4631
|
-
effect((_$p) => setProp(_el$73, "fg", palette.
|
|
4931
|
+
insert(_el$73, () => props.backend.successDetail);
|
|
4932
|
+
effect((_$p) => setProp(_el$73, "fg", palette.foreground, _$p));
|
|
4632
4933
|
return _el$73;
|
|
4633
4934
|
})(), (() => {
|
|
4634
|
-
var _el$
|
|
4635
|
-
|
|
4636
|
-
|
|
4637
|
-
|
|
4638
|
-
|
|
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;
|
|
4939
|
+
})(), (() => {
|
|
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;
|
|
4639
4945
|
})()];
|
|
4640
4946
|
}
|
|
4641
4947
|
}), createComponent2(Show, {
|
|
@@ -4644,56 +4950,67 @@ ${selection()}
|
|
|
4644
4950
|
},
|
|
4645
4951
|
get children() {
|
|
4646
4952
|
return [(() => {
|
|
4647
|
-
var _el$
|
|
4648
|
-
insertNode(_el$
|
|
4953
|
+
var _el$77 = createElement("text");
|
|
4954
|
+
insertNode(_el$77, createTextNode(`Flash not completed`));
|
|
4649
4955
|
effect((_p$) => {
|
|
4650
4956
|
var _v$35 = palette.danger, _v$36 = TextAttributes2.BOLD;
|
|
4651
|
-
_v$35 !== _p$.e && (_p$.e = setProp(_el$
|
|
4652
|
-
_v$36 !== _p$.t && (_p$.t = setProp(_el$
|
|
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));
|
|
4653
4959
|
return _p$;
|
|
4654
4960
|
}, {
|
|
4655
4961
|
e: void 0,
|
|
4656
4962
|
t: void 0
|
|
4657
4963
|
});
|
|
4658
|
-
return _el$
|
|
4964
|
+
return _el$77;
|
|
4659
4965
|
})(), (() => {
|
|
4660
|
-
var _el$
|
|
4661
|
-
insert(_el$
|
|
4662
|
-
effect((_$p) => setProp(_el$
|
|
4663
|
-
return _el$78;
|
|
4664
|
-
})(), (() => {
|
|
4665
|
-
var _el$79 = createElement("box");
|
|
4666
|
-
setProp(_el$79, "gap", 1);
|
|
4667
|
-
insert(_el$79, () => row("Refresh & try again", "", 0), null);
|
|
4668
|
-
insert(_el$79, () => row("Quit", "", 1), null);
|
|
4966
|
+
var _el$79 = createElement("text");
|
|
4967
|
+
insert(_el$79, error);
|
|
4968
|
+
effect((_$p) => setProp(_el$79, "fg", palette.foreground, _$p));
|
|
4669
4969
|
return _el$79;
|
|
4970
|
+
})(), (() => {
|
|
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;
|
|
4670
4976
|
})()];
|
|
4671
4977
|
}
|
|
4672
4978
|
})];
|
|
4673
4979
|
}
|
|
4674
4980
|
}));
|
|
4675
|
-
|
|
4676
|
-
|
|
4677
|
-
setProp(_el$
|
|
4678
|
-
|
|
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, (() => {
|
|
4679
4991
|
var _c$9 = memo2(() => !!busy());
|
|
4680
|
-
return () => _c$9() ? "Esc cancel / Q stop & quit" : dimensions().width < 56 ? "
|
|
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";
|
|
4681
4993
|
})());
|
|
4994
|
+
insertNode(_el$83, _el$84);
|
|
4995
|
+
setProp(_el$83, "flexShrink", 0);
|
|
4996
|
+
setProp(_el$83, "wrapMode", "none");
|
|
4997
|
+
insert(_el$83, version, null);
|
|
4682
4998
|
effect((_p$) => {
|
|
4683
|
-
var _v$37 = palette.background, _v$38 = dimensions().width <= 80 ? "100%" : 80, _v$39 = dimensions().height <= 24 ? "100%" : 24, _v$40 = palette.border, _v$41 = palette.card, _v$42 = palette.accent, _v$43 = TextAttributes2.BOLD, _v$44 = palette.muted, _v$45 = palette.danger, _v$46 = tight() ? 0 : 1, _v$47 = tight() ? 0 : 1, _v$48 = tight() || (compact() || dimensions().width < 56) && (screen() === "setup" || !!image()) ? 0 : 1, _v$49 = palette.muted;
|
|
4684
|
-
_v$37 !== _p$.e && (_p$.e = setProp(_el$
|
|
4685
|
-
_v$38 !== _p$.t && (_p$.t = setProp(_el$
|
|
4686
|
-
_v$39 !== _p$.a && (_p$.a = setProp(_el$
|
|
4687
|
-
_v$40 !== _p$.o && (_p$.o = setProp(_el$
|
|
4688
|
-
_v$41 !== _p$.i && (_p$.i = setProp(_el$
|
|
4689
|
-
_v$42 !== _p$.n && (_p$.n = setProp(_el$
|
|
4690
|
-
_v$43 !== _p$.s && (_p$.s = setProp(_el$
|
|
4691
|
-
_v$44 !== _p$.h && (_p$.h = setProp(_el$
|
|
4692
|
-
_v$45 !== _p$.r && (_p$.r = setProp(_el$
|
|
4693
|
-
_v$46 !== _p$.d && (_p$.d = setProp(_el$
|
|
4694
|
-
_v$47 !== _p$.l && (_p$.l = setProp(_el$
|
|
4695
|
-
_v$48 !== _p$.u && (_p$.u = setProp(_el$
|
|
4696
|
-
_v$49 !== _p$.c && (_p$.c = setProp(_el$
|
|
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;
|
|
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));
|
|
4697
5014
|
return _p$;
|
|
4698
5015
|
}, {
|
|
4699
5016
|
e: void 0,
|
|
@@ -4708,9 +5025,10 @@ ${selection()}
|
|
|
4708
5025
|
d: void 0,
|
|
4709
5026
|
l: void 0,
|
|
4710
5027
|
u: void 0,
|
|
4711
|
-
c: void 0
|
|
5028
|
+
c: void 0,
|
|
5029
|
+
w: void 0
|
|
4712
5030
|
});
|
|
4713
|
-
return _el$
|
|
5031
|
+
return _el$5;
|
|
4714
5032
|
})();
|
|
4715
5033
|
}
|
|
4716
5034
|
|
|
@@ -4778,3 +5096,56 @@ if (args.length > 1 || args.some((arg) => !["--list-images", "--clear-cache"].in
|
|
|
4778
5096
|
for (const signal of signals) process.off(signal, quit);
|
|
4779
5097
|
}
|
|
4780
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
|
+
*/
|
|
5124
|
+
/*!
|
|
5125
|
+
* Artwork derived from @simonklee/bigfeelings@0.2.1, original octant painter,
|
|
5126
|
+
* scale 4, time 0, right-facing ghost at (0,0), wordmark at (48,0).
|
|
5127
|
+
* Frozen 92x48 samples / 46x12 cells, unchanged from BooLogoRenderable.ts.
|
|
5128
|
+
* Source tarball SHA-256:
|
|
5129
|
+
* 5a82909d19c9eb94e28c7407f5d220f7ff8051a1e3cdcdb11a6eb8870c4e30b0
|
|
5130
|
+
*
|
|
5131
|
+
* MIT License
|
|
5132
|
+
* Copyright (c) 2026 Simon Klee
|
|
5133
|
+
*
|
|
5134
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5135
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
5136
|
+
* in the Software without restriction, including without limitation the rights
|
|
5137
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
5138
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
5139
|
+
* furnished to do so, subject to the following conditions:
|
|
5140
|
+
*
|
|
5141
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
5142
|
+
* copies or substantial portions of the Software.
|
|
5143
|
+
*
|
|
5144
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
5145
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
5146
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
5147
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
5148
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
5149
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
5150
|
+
* SOFTWARE.
|
|
5151
|
+
*/
|