pi-namespace-patch 1.0.0-namespace.2 → 1.0.2-namespace.2

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 (185) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +22 -4
  3. package/dist/bundle/chunks/{anthropic-messages-UID2PALB.js → anthropic-messages-MVG2FL56.js} +3 -3
  4. package/dist/bundle/chunks/azure-openai-responses-7AMFUIWJ.js +2 -0
  5. package/dist/bundle/chunks/bedrock-converse-stream.js +2 -2
  6. package/dist/bundle/chunks/chunk-2KAZSACP.js +2 -0
  7. package/dist/bundle/chunks/{chunk-2KTBZM5G.js → chunk-6FX7UEPL.js} +5 -5
  8. package/dist/bundle/chunks/{chunk-2VNGUWBO.js → chunk-BYB6ZAAQ.js} +1 -1
  9. package/dist/bundle/chunks/chunk-DN3QEIXS.js +2 -0
  10. package/dist/bundle/chunks/chunk-F5ZABL6Z.js +20 -0
  11. package/dist/bundle/chunks/{chunk-3LH3ZQKY.js → chunk-G7EDXK4D.js} +1 -1
  12. package/dist/bundle/chunks/chunk-IKZJX7ZT.js +2 -0
  13. package/dist/bundle/chunks/{chunk-4N5K4RKC.js → chunk-OLBCNJCL.js} +31 -32
  14. package/dist/bundle/chunks/{chunk-PRD6WYBT.js → chunk-OYBSLV7Y.js} +1 -1
  15. package/dist/bundle/chunks/{chunk-IBCPYVFK.js → chunk-PDFMCAOZ.js} +4 -4
  16. package/dist/bundle/chunks/{chunk-LTXEMVMA.js → chunk-SYF2TF6W.js} +2 -2
  17. package/dist/bundle/chunks/chunk-WCQZGZ6I.js +82 -0
  18. package/dist/bundle/chunks/{chunk-KDN6RCEQ.js → chunk-ZSI3BL5Q.js} +2 -2
  19. package/dist/bundle/chunks/{cli-QOMC26IJ.js → cli-KILDDGW3.js} +2 -2
  20. package/dist/bundle/chunks/{cloudflare-workers-ai-system-one-NPQN263E.js → cloudflare-workers-ai-system-one-X5PVWWYJ.js} +1 -1
  21. package/dist/bundle/chunks/codemode-worker.js +24 -3
  22. package/dist/bundle/chunks/easter-egg-3d-T5FFWIBR.js +2 -0
  23. package/dist/bundle/chunks/{execute-GVRSEGHL.js → execute-RYVK27GT.js} +25 -4
  24. package/dist/bundle/chunks/{google-generative-ai-APTPZOQL.js → google-generative-ai-ZOK6CV7D.js} +1 -1
  25. package/dist/bundle/chunks/{google-vertex-MXCOSOY3.js → google-vertex-VKWZQ3AY.js} +1 -1
  26. package/dist/bundle/chunks/{mistral-conversations-DKVFNQL6.js → mistral-conversations-7DAUEE4N.js} +1 -1
  27. package/dist/bundle/chunks/node-N5BSDOA5.js +16 -0
  28. package/dist/bundle/chunks/openai-chatgpt.js +1 -1
  29. package/dist/bundle/chunks/{openai-codex-responses-GK67DQQJ.js → openai-codex-responses-TC3OK7B4.js} +1 -1
  30. package/dist/bundle/chunks/openai-completions-GWHGMQ3T.js +7 -0
  31. package/dist/bundle/chunks/openai-responses-EZ7FJ2KL.js +3 -0
  32. package/dist/bundle/chunks/{runtime-2SO2JDWM.js → runtime-D5I2NTIF.js} +1 -1
  33. package/dist/bundle/chunks/virtual-modules-J2M3WAR2.js +2 -0
  34. package/dist/bundle/cli-runtime.js +1 -1
  35. package/dist/bundle/index.js +1 -1
  36. package/dist/bundle/rpc-entry.js +1 -1
  37. package/dist/cli/args.d.ts.map +1 -1
  38. package/dist/cli/args.js +4 -1
  39. package/dist/cli/args.js.map +1 -1
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +3 -0
  42. package/dist/config.js.map +1 -1
  43. package/dist/core/agent-session.d.ts.map +1 -1
  44. package/dist/core/agent-session.js +1 -1
  45. package/dist/core/agent-session.js.map +1 -1
  46. package/dist/core/export-html/tool-renderer.d.ts +3 -3
  47. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  48. package/dist/core/export-html/tool-renderer.js +3 -3
  49. package/dist/core/export-html/tool-renderer.js.map +1 -1
  50. package/dist/core/extensions/index.d.ts +1 -1
  51. package/dist/core/extensions/index.d.ts.map +1 -1
  52. package/dist/core/extensions/index.js.map +1 -1
  53. package/dist/core/extensions/loader.d.ts.map +1 -1
  54. package/dist/core/extensions/loader.js +5 -0
  55. package/dist/core/extensions/loader.js.map +1 -1
  56. package/dist/core/extensions/runner.d.ts +3 -1
  57. package/dist/core/extensions/runner.d.ts.map +1 -1
  58. package/dist/core/extensions/runner.js +6 -0
  59. package/dist/core/extensions/runner.js.map +1 -1
  60. package/dist/core/extensions/types.d.ts +9 -0
  61. package/dist/core/extensions/types.d.ts.map +1 -1
  62. package/dist/core/extensions/types.js.map +1 -1
  63. package/dist/core/mcp-servers.d.ts +6 -0
  64. package/dist/core/mcp-servers.d.ts.map +1 -1
  65. package/dist/core/mcp-servers.js +11 -0
  66. package/dist/core/mcp-servers.js.map +1 -1
  67. package/dist/core/model-config.d.ts +36 -0
  68. package/dist/core/model-config.d.ts.map +1 -1
  69. package/dist/core/model-config.js +14 -2
  70. package/dist/core/model-config.js.map +1 -1
  71. package/dist/core/model-resolver.js +1 -1
  72. package/dist/core/model-resolver.js.map +1 -1
  73. package/dist/core/provider-composer.d.ts +2 -1
  74. package/dist/core/provider-composer.d.ts.map +1 -1
  75. package/dist/core/provider-composer.js +13 -0
  76. package/dist/core/provider-composer.js.map +1 -1
  77. package/dist/core/tools/renderers/index.d.ts +2 -2
  78. package/dist/core/tools/renderers/index.d.ts.map +1 -1
  79. package/dist/core/tools/renderers/index.js.map +1 -1
  80. package/dist/extensions/mcp/cli.d.ts.map +1 -1
  81. package/dist/extensions/mcp/cli.js +3 -0
  82. package/dist/extensions/mcp/cli.js.map +1 -1
  83. package/dist/extensions/mcp/config.d.ts +15 -3
  84. package/dist/extensions/mcp/config.d.ts.map +1 -1
  85. package/dist/extensions/mcp/config.js +46 -10
  86. package/dist/extensions/mcp/config.js.map +1 -1
  87. package/dist/extensions/mcp/index.d.ts +4 -1
  88. package/dist/extensions/mcp/index.d.ts.map +1 -1
  89. package/dist/extensions/mcp/index.js +80 -45
  90. package/dist/extensions/mcp/index.js.map +1 -1
  91. package/dist/extensions/mcp/oauth.d.ts +4 -1
  92. package/dist/extensions/mcp/oauth.d.ts.map +1 -1
  93. package/dist/extensions/mcp/oauth.js +54 -10
  94. package/dist/extensions/mcp/oauth.js.map +1 -1
  95. package/dist/extensions/mcp/runtime.d.ts.map +1 -1
  96. package/dist/extensions/mcp/runtime.js +1 -0
  97. package/dist/extensions/mcp/runtime.js.map +1 -1
  98. package/dist/extensions/mcp/tools.d.ts +3 -1
  99. package/dist/extensions/mcp/tools.d.ts.map +1 -1
  100. package/dist/extensions/mcp/tools.js +19 -13
  101. package/dist/extensions/mcp/tools.js.map +1 -1
  102. package/dist/extensions/mcp/ui.d.ts.map +1 -1
  103. package/dist/extensions/mcp/ui.js +8 -4
  104. package/dist/extensions/mcp/ui.js.map +1 -1
  105. package/dist/index.d.ts +1 -1
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js.map +1 -1
  108. package/dist/modes/interactive/components/armin.d.ts +3 -0
  109. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  110. package/dist/modes/interactive/components/armin.js +7 -5
  111. package/dist/modes/interactive/components/armin.js.map +1 -1
  112. package/dist/modes/interactive/components/auth-url.d.ts +14 -0
  113. package/dist/modes/interactive/components/auth-url.d.ts.map +1 -0
  114. package/dist/modes/interactive/components/auth-url.js +37 -0
  115. package/dist/modes/interactive/components/auth-url.js.map +1 -0
  116. package/dist/modes/interactive/components/easter-egg-3d.d.ts +104 -0
  117. package/dist/modes/interactive/components/easter-egg-3d.d.ts.map +1 -0
  118. package/dist/modes/interactive/components/{pi-logo-animation.js → easter-egg-3d.js} +127 -74
  119. package/dist/modes/interactive/components/easter-egg-3d.js.map +1 -0
  120. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts +6 -0
  121. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts.map +1 -0
  122. package/dist/modes/interactive/components/easter-egg-3d.lazy.js +23 -0
  123. package/dist/modes/interactive/components/easter-egg-3d.lazy.js.map +1 -0
  124. package/dist/modes/interactive/components/index.d.ts +0 -1
  125. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  126. package/dist/modes/interactive/components/index.js +0 -1
  127. package/dist/modes/interactive/components/index.js.map +1 -1
  128. package/dist/modes/interactive/components/login-dialog.d.ts +2 -0
  129. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  130. package/dist/modes/interactive/components/login-dialog.js +11 -5
  131. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  132. package/dist/modes/interactive/components/tool-execution.d.ts +6 -18
  133. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  134. package/dist/modes/interactive/components/tool-execution.js +22 -45
  135. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  136. package/dist/modes/interactive/interactive-mode.d.ts +2 -2
  137. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  138. package/dist/modes/interactive/interactive-mode.js +15 -17
  139. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  140. package/dist/package-manager-cli.d.ts.map +1 -1
  141. package/dist/package-manager-cli.js +12 -0
  142. package/dist/package-manager-cli.js.map +1 -1
  143. package/dist/utils/image-convert.d.ts +12 -0
  144. package/dist/utils/image-convert.d.ts.map +1 -1
  145. package/dist/utils/image-convert.js +45 -6
  146. package/dist/utils/image-convert.js.map +1 -1
  147. package/docs/cli.md +2 -0
  148. package/docs/codemode.md +1 -1
  149. package/docs/extensions.md +4 -0
  150. package/docs/keybindings.md +1 -1
  151. package/docs/mcp.md +23 -1
  152. package/docs/models.md +28 -2
  153. package/docs/quickstart.md +16 -2
  154. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  155. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  156. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  157. package/examples/extensions/gondolin/package-lock.json +2 -2
  158. package/examples/extensions/gondolin/package.json +1 -1
  159. package/examples/extensions/sandbox/package-lock.json +2 -2
  160. package/examples/extensions/sandbox/package.json +1 -1
  161. package/examples/extensions/with-deps/package-lock.json +2 -2
  162. package/examples/extensions/with-deps/package.json +1 -1
  163. package/package.json +13 -14
  164. package/dist/bundle/chunks/azure-openai-responses-AFMVM6NP.js +0 -2
  165. package/dist/bundle/chunks/chunk-6D7LHLKG.js +0 -2
  166. package/dist/bundle/chunks/chunk-7FH3BDRG.js +0 -82
  167. package/dist/bundle/chunks/chunk-DTD7JQ7Y.js +0 -42
  168. package/dist/bundle/chunks/chunk-MJOHEBV7.js +0 -2
  169. package/dist/bundle/chunks/node-O3RIBJRH.js +0 -16
  170. package/dist/bundle/chunks/openai-completions-JXDDPZ23.js +0 -7
  171. package/dist/bundle/chunks/openai-responses-CQDDLDQF.js +0 -3
  172. package/dist/bundle/chunks/pi-logo-animation-MPKZE4EK.js +0 -2
  173. package/dist/bundle/chunks/virtual-modules-3THEGRQQ.js +0 -2
  174. package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  175. package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  176. package/dist/modes/interactive/components/daxnuts.js +0 -140
  177. package/dist/modes/interactive/components/daxnuts.js.map +0 -1
  178. package/dist/modes/interactive/components/pi-logo-animation.d.ts +0 -68
  179. package/dist/modes/interactive/components/pi-logo-animation.d.ts.map +0 -1
  180. package/dist/modes/interactive/components/pi-logo-animation.js.map +0 -1
  181. package/dist/modes/interactive/components/pi-logo-animation.lazy.d.ts +0 -7
  182. package/dist/modes/interactive/components/pi-logo-animation.lazy.d.ts.map +0 -1
  183. package/dist/modes/interactive/components/pi-logo-animation.lazy.js +0 -12
  184. package/dist/modes/interactive/components/pi-logo-animation.lazy.js.map +0 -1
  185. package/npm-shrinkwrap.json +0 -1952
@@ -1 +0,0 @@
1
- {"version":3,"file":"daxnuts.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/daxnuts.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * POWERED BY DAXNUTS - Easter egg for OpenCode + Kimi K2.5\n *\n * A heartfelt tribute to dax (@thdxr) for providing free Kimi K2.5 access via OpenCode.\n */\n\nimport type { Component, TUI } from \"@earendil-works/pi-tui\";\nimport { theme } from \"../theme/theme.ts\";\n\n// 32x32 RGB image of dax, hex encoded (3 bytes per pixel)\nconst DAX_HEX =\n\t\"bbbab8b9b9b6b9b8b5bcbbb8b8b7b4b7b5b2b6b5b2b8b7b4b7b6b3b6b4b1bdbcb8bab8b6bbb8b5b8b5b1bbb8b4c2bebbc1bebac0bdbabfbcb9c1bebabfbebbc0bfbcc0bdbabbb8b5c1bfbcbfbcb8bbb9b6bfbcb8c2bfbcc1bfbcbfbbb8bdb9b6b8b7b5b9b8b5b8b8b5b5b5b2b6b5b2b8b7b4b9b8b5b9b8b5b6b5b3bab8b5bcbab7bbb9b6bbb8b5bfb9b5bdb2abbcb0a8beb2aabeb5afbfbab6bebab7c0bfbcbebdbabebbb8c0bdbabfbebbc2bebbbdbab7c3c0bdc3c0bdc1bebbc2bebabfbcb8bab9b6b7b6b3b2b1aeb6b5b2b5b4b1b5b4b2b6b5b2b7b6b4b9b8b6b7b6b3bbbab7b2afaba5988fb49e90b09481b79a88b39683b09583b7a395bfb6b0c0bdbabdbbb8bebcb9c1bfbcc0bebbbdbab7bebbb8c2bfbcc0bdbac0bcb9bdb9b6c0bcb8b5b4b2b4b3b0bab9b6b9b9b6b5b4b1b5b4b1b6b5b3b9b8b5b9b8b6b9b8b6b2aeaa968174a6836eaa856eab846eaf8973ac8973b08f79b18f7ab39786b7a89dbbb3aebfbab6c2c0bdbebcb9bfbdbac3c1bdc2bebbc0bcb9bdb9b6c1bdbabfbbb8b4b3b0b9b8b5b8b7b5b4b3b1b5b4b1b8b7b4b8b7b5bab9b6bbbab7b1afad8c7a719d735ca47860a87d65a98069ae8972ae8c75af8d77aa826ba98067aa8974b39e90b6a79dbbb2adc0bdbac1bfbdbfbbb8c1bdb9bebab6c0bdb9bfbbb8c1bdbab4b2b0b7b6b4b7b6b3b4b2b0bab9b7b6b5b2b6b5b2bab9b6bab9b6958c87977663aa836bac8772b08f7aad8c77b2917db0917db0907cac8971a77d64a87f67ac8972b29887b8a89dbfbab5bfbdbac1bebac0bcb9c0bcb9c0bcb9c1bebabebab7b8b7b4b7b6b4b5b4b1b5b4b2b7b6b3b5b4b2bab9b7bab9b6b4b1ada88f7fad8973ae8d78b19684b19685b29786b69a89b29582b1917daa856ea87e66a97e66ad866ea9826baf9280b8ada6bdbbb8bebab7bfbbb8c1bdbabfbbb8bcb8b4bcb8b5b6b4b2b7b5b3b6b5b2b8b7b4b3b2afb8b7b4b6b5b2b3b2b0b3a59aab856fad8d78b0917eb19886b49b8bb49a89b39785b0917eaf8f7cab866fa77d65a77a61a87d64a9816ab08f79b5a296c1bcb8c3bfbcc2bebbbebab7bfbbb7bdbab6c2bebab8b7b4b7b6b4b6b5b3b7b6b3b6b5b2b9b8b6b4b3b1b6b1acac8f7ca9826bae8f7aaf9583b49c8cb49c8bb79d8cb59987b19380ad8e79ae8c77af8e78ac8771a3775faa826bae8972b39888bbb6b2bebbb8bfbbb8bfbbb8c0bdb9bebbb7c0bdb9b6b5b2b9b8b5b4b3b1b8b7b5b4b3b0b7b6b4b6b5b3b1a7a0aa8772a77d65a88570b49887b19b8d9c887c907a6d987f71aa907faf917daf8e7aad8c78ac8b77a8836ca9836cac8770b49b8abdb6b2c0bcb9c0bdb9bfbbb8bebab7bfbcb9bebab7b9b8b6b5b4b2b9b8b5b8b7b5b8b7b4b7b6b4b5b4b2b3a9a2ad8973a1755da9856fb398858c776a65544b776358725d526e594d9c7f6eb1907ba68672ad8e7aab8771ac856db18f79b3a092beb9b5c1bdbabdb9b5bebab7bfbbb7bebab7bcb9b6b7b6b4b6b6b3b8b7b4b5b4b2b8b6b4b7b6b3b4b3b0b4aba4a6826ba3775fb08e79b19584a88e7daa8e7db29481ad8f7c997e6da38674ac8d79ac8e7aae917f9a7c6a896a599a7c6ab3a398c1bdbabdb9b6bcb8b5bebab6bebab7bdb9b5bdb9b6b5b4b1b7b5b3b5b4b2b7b6b3b7b6b4b3b3b0b3b2b0b4aca5a7846fa97f68ae8f7bae9383b59c8bb2937fae8e79ac8b76af927eaf927eb29683b39885b2988891786a72594c6e594d978d86bdbab7bab7b3c0bcb9c0bcb9bebab7bebbb7bdb9b6b3b2b0b4b3b0b5b4b2b4b4b1b4b3b1b4b3b1b4b3b0b6ada5aa8670a57a62ad8e7ab29b8cb69d8dab856fa9826aa88069ab8771af907db49987b19684b29886b59987b39480b09787b5a9a1bcb8b5bebab7bdb9b5bebab7bfbbb8bfbbb7bbb7b4b3b2afb8b7b5b8b7b5b3b2b0b5b4b2b6b5b3b6b4b1afa299a98975a9826baf907cb39988b49a89af8e7aac8973aa856eaf8c74b1917dae907dac907db39988b29785b49785b7a090b9aca3bfbab7bcb8b5bdb9b6bcb8b4bcb8b5bdb9b5bcb8b4b5b4b2b6b5b3b4b3b0b4b3b0b9b8b5b8b6b4908b88887467aa8f7ea78976ad8973b08b74b59885b69e8eb29888b1917cb1917db1937fae907cb19686b39a8ab29886b59b8ab8a192b6aaa3b7b2afbcb8b4bcb8b5bbb7b4c0bcb9bebab7c0bcb9b6b5b2b6b5b3b4b3b0bab9b7b7b6b4b1b0ae7b716ba083709b806f716158967764b08870b29481b69b8ab69f8fb39a89b69f90b49d8db39a89b29988b49c8cb6a090b8a496baa49593867f8f8986bfbbb7bdb9b5bcb7b4bab6b3b9b5b2bab6b2b4b3b1b3b3b0b6b5b3b8b7b5b4b2b0a7a5a38f837dae917ea084725a504c63544da28370b39784b59e8db2a093a698909b918b998e8790857e95877dad998bb39c8cb5a091b9a2938d827c95908dbebab6bbb7b3bdbab7bbb7b4bdb9b6bbb7b4b4b3b0b5b4b1b8b7b5b6b5b3b8b8b5b4b2af968f8ab29a8bab9485544b483a323073655d96887f70655f61595547403e453e3c453f3d57504f655e5b90847db39c8db7a090b6a09189807aaba6a3bdb9b6c0bcb9bebab7bcb7b4bebab7bbb7b4b3b2b0b6b5b3b2b1afb7b6b4b8b7b4b5b4b1aeaba8b5a89fac998d4d44412d25244d46444e4744322b293a3230423937433a37352d2a59504c534b48524a48988a81b59f8fb19c8d827974b2afacbdb9b5bcb8b4bdb9b5bcb8b5bdb9b6bab6b2b8b7b5b5b4b2b6b6b3b9b8b5b7b6b3b6b5b2b8b6b3b9b4b1b2a9a26c64612d25242d2625312a28352d2c453d3a78675c8d7a6ea09792aea6a0615854332b29524a479f8e82b09d90a49b96c1bdb9bebab7bfbbb8bbb8b4b9b5b1b8b4b0b9b4b0b7b6b4b8b7b5b8b7b4b6b5b3b8b6b3bab9b6b9b8b5b4b3b0b7b5b2a5a29f453d3b261e1d261f1e2e2625413936857268977865b19482b5a69caca5a07c7572453d3b746963a0948cc5bfbbc0bbb8beb9b6bbb7b3bbb6b3b7b3afb8b4b0b9b5b1b7b6b3b6b5b3b5b4b2b5b4b2b7b6b3b7b6b3b8b6b3b4b2afb7b6b3b3b1ae6d6765251f1e1e18172a22212d2523443b3971625ab19888b09482a89182877e792c25243e3634766d6abeb9b5bfbbb7bebab6bcb7b3bbb6b3b9b5b1b7b3afb8b4b0b4b3b0b5b4b1b5b4b1b4b3b1b5b4b2b8b6b4b5b3b0b9b6b4b5b4b1b6b4b27f79762a2322221c1b2d2524221b1a443e3c47413f6f676281766f867971675e5a3e37352a222166605dbab7b3bdb9b5beb9b5bcb7b3bcb7b3b9b4b0bab6b2bab6b2b5b3b0b6b4b2b3b2afb7b6b3b4b4b1b4b3b0b6b4b1b5b4b1b4b3b0b9b6b29a8c8252474230292828201f181212322c2c231e1d1c16162c26252923222d26252d2523332b2a8e8885bcb8b5bcb7b3bbb6b2bcb7b3b9b4b1b9b5b1b7b2afb7b2ae7a838e9b9b9caeadacb3b2b0b3b2afb7b7b4b6b5b3b6b6b3b7b6b3b9ada4a991808e7b6f50453f2b24231a14142923221f19181d17161f18182620201d17162a22215d5654b7b3b0bbb7b3bbb6b2b8b4b0bab5b1bbb6b2bab5b1b8b4b0bab6b22c496b4c5d735f68766e727a828285929090adaba8b7b2aeb6a59ab39682a28470a387748e76674e403a1a14141d1716181211221c1c1f1918221c1b2f2827342d2c8d8884bab6b3b9b5b2bab5b1bab5b1b9b4b0bab6b2b8b4b0b9b4b0b7b2ae325e8b365f8a3a5d833f5b7a545f70646469706b6aa08f84b08e78b18e769f7e689e7f6b9e816d907766584940362d2a1c1615201b1a1a1413201a1a251e1d393331a39e9bbab5b1bcb7b3bab6b2b8b3afb8b4b0b9b4b0b9b4b1bab5b2b5b0ac3d6c9843729d44719c426e98415f805a64716f6a699d8677b1927eb3947faa89749d7a649f7f6ba487749e837186716454463f2c25231e181837302e3a33317a7471beb9b6bcb8b4bbb6b2b6b2aebab5b1b9b5b1b8b3afbab6b2b6b1adb5aeaa4877a14c7aa44e7ba345719a3a5d80586b7f767475927b6eb1927faf8e79b08e78a78169a07861a17f6aa58570a688749b83738270666f66618a8480a49e99b7b2aebab6b2bcb8b4b9b5b1b7b2aebab5b1b9b4b0b6b1aeb6b1adb2aca8b2aca84876a04a78a2517fa74771973a5d80405c7a6161677c695fac8a75b08d77b4917aaf8971ad876fa5816aa6846ea78670a98a76ac9484ab9f96b2aca8bdb8b4bcb7b3bcb8b4bcb8b4b8b3afb7b2aeb9b4b0b8b3afb8b2aeb6afabb3aeaab2aeaa4878a14b7aa34c7ba44a759b3d63873b5f825b67766f5f569c7e6caf8c77b18f79b28f78b5927caf8e78a98872aa8a76a98a76ac917fada199b7b0acb9b3afbfb9b5c1bab6bdb6b2b8b3afbab5b1b9b4b0b6afabb7b1adb3ada9b3aeaab0aba8\";\n\nconst WIDTH = 32;\nconst HEIGHT = 32;\n\nfunction parseImage(): number[][][] {\n\tconst pixels: number[][][] = [];\n\tfor (let y = 0; y < HEIGHT; y++) {\n\t\tconst row: number[][] = [];\n\t\tfor (let x = 0; x < WIDTH; x++) {\n\t\t\tconst idx = (y * WIDTH + x) * 6;\n\t\t\tconst r = parseInt(DAX_HEX.slice(idx, idx + 2), 16);\n\t\t\tconst g = parseInt(DAX_HEX.slice(idx + 2, idx + 4), 16);\n\t\t\tconst b = parseInt(DAX_HEX.slice(idx + 4, idx + 6), 16);\n\t\t\trow.push([r, g, b]);\n\t\t}\n\t\tpixels.push(row);\n\t}\n\treturn pixels;\n}\n\nfunction rgb(r: number, g: number, b: number, bg = false): string {\n\treturn `\\x1b[${bg ? 48 : 38};2;${r};${g};${b}m`;\n}\n\nconst RESET = \"\\x1b[0m\";\n\nfunction buildImage(): string[] {\n\tconst pixels = parseImage();\n\tconst lines: string[] = [];\n\n\t// Use half-block chars: ▄ with bg=top pixel, fg=bottom pixel\n\tfor (let row = 0; row < HEIGHT; row += 2) {\n\t\tlet line = \"\";\n\t\tfor (let x = 0; x < WIDTH; x++) {\n\t\t\tconst top = pixels[row][x];\n\t\t\tconst bottom = pixels[row + 1]?.[x] ?? top;\n\t\t\tline += `${rgb(bottom[0], bottom[1], bottom[2])}${rgb(top[0], top[1], top[2], true)}▄`;\n\t\t}\n\t\tline += RESET;\n\t\tlines.push(line);\n\t}\n\treturn lines;\n}\n\nexport class DaxnutsComponent implements Component {\n\tprivate ui: TUI;\n\tprivate image: string[];\n\tprivate interval: ReturnType<typeof setInterval> | null = null;\n\tprivate tick = 0;\n\tprivate maxTicks = 25; // ~2 seconds at 80ms\n\tprivate cachedLines: string[] = [];\n\tprivate cachedWidth = 0;\n\tprivate cachedTick = -1;\n\n\tconstructor(ui: TUI) {\n\t\tthis.ui = ui;\n\t\tthis.image = buildImage();\n\t\tthis.startAnimation();\n\t}\n\n\tinvalidate(): void {\n\t\tthis.cachedWidth = 0;\n\t}\n\n\tprivate startAnimation(): void {\n\t\tthis.interval = setInterval(() => {\n\t\t\tthis.tick++;\n\t\t\tif (this.tick >= this.maxTicks) {\n\t\t\t\tthis.stopAnimation();\n\t\t\t}\n\t\t\tthis.cachedWidth = 0;\n\t\t\tthis.ui.requestRender();\n\t\t}, 80);\n\t}\n\n\tprivate stopAnimation(): void {\n\t\tif (this.interval) {\n\t\t\tclearInterval(this.interval);\n\t\t\tthis.interval = null;\n\t\t}\n\t}\n\n\trender(width: number): string[] {\n\t\tif (width === this.cachedWidth && this.cachedTick === this.tick) {\n\t\t\treturn this.cachedLines;\n\t\t}\n\n\t\tconst t = theme;\n\t\tconst lines: string[] = [];\n\n\t\tconst center = (s: string) => {\n\t\t\tconst visible = s.replace(/\\x1b\\[[0-9;]*m/g, \"\").length;\n\t\t\tconst left = Math.max(0, Math.floor((width - visible) / 2));\n\t\t\treturn \" \".repeat(left) + s;\n\t\t};\n\n\t\tlines.push(\"\");\n\n\t\t// Scanline reveal effect: show rows progressively\n\t\tconst revealedRows = Math.min(\n\t\t\tthis.image.length,\n\t\t\tMath.floor((this.tick / this.maxTicks) * (this.image.length + 3)),\n\t\t);\n\n\t\tfor (let i = 0; i < this.image.length; i++) {\n\t\t\tif (i < revealedRows) {\n\t\t\t\tlines.push(center(this.image[i]));\n\t\t\t} else {\n\t\t\t\t// Show scan line\n\t\t\t\tif (i === revealedRows) {\n\t\t\t\t\tconst scanline = \"▓\".repeat(WIDTH);\n\t\t\t\t\tlines.push(center(rgb(100, 200, 255) + scanline + RESET));\n\t\t\t\t} else {\n\t\t\t\t\tlines.push(center(\" \".repeat(WIDTH)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlines.push(\"\");\n\n\t\t// Fade in text after image is revealed\n\t\tconst textPhase = Math.max(0, this.tick - this.maxTicks * 0.6);\n\t\tif (textPhase > 0 || this.tick >= this.maxTicks) {\n\t\t\tlines.push(center(t.fg(\"accent\", \"Free Kimi K2.5 via OpenCode Zen\")));\n\t\t\tlines.push(center(t.fg(\"success\", '\"Powered by daxnuts\"')));\n\t\t\tlines.push(center(t.fg(\"muted\", \"— @thdxr\")));\n\t\t} else {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tlines.push(\"\");\n\t\tif (textPhase > 2 || this.tick >= this.maxTicks) {\n\t\t\tlines.push(center(t.fg(\"dim\", \"Try OpenCode\")));\n\t\t\tlines.push(center(t.fg(\"mdLink\", \"https://mistral.ai/news/mistral-vibe-2-0\")));\n\t\t} else {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t\tlines.push(\"\");\n\n\t\tthis.cachedLines = lines;\n\t\tthis.cachedWidth = width;\n\t\tthis.cachedTick = this.tick;\n\t\treturn lines;\n\t}\n\n\tdispose(): void {\n\t\tthis.stopAnimation();\n\t}\n}\n"]}
@@ -1,68 +0,0 @@
1
- import { type Component, type TUI, type TuiMouseEvent, type TuiMouseEventResult } from "@earendil-works/pi-tui";
2
- /**
3
- * Fullscreen easter egg shown when the header logo is clicked. The current screen dissolves into braille dust,
4
- * spreading out from the logo, while the logo lifts off as a 3D object, flies to the center, grows, and spins.
5
- * Leaving plays the same timeline backwards, so the logo lands on the header and the screen reassembles.
6
- *
7
- * The logo is ray cast per braille dot. A braille cell holds 2x4 dots and roughly square dots, so one logo
8
- * pixel (a half block) is exactly 2x2 dots and the header logo (4x2 cells) is 8x8 dots at the start.
9
- */
10
- type Rgb = readonly [number, number, number];
11
- export interface PiLogoAnimationOptions {
12
- /** The screen to dissolve, as rendered lines. */
13
- screen: readonly string[];
14
- /** Terminal cell of the header logo's top-left corner. */
15
- logoColumn: number;
16
- logoRow: number;
17
- }
18
- /**
19
- * Show the animation as a fullscreen overlay until it is dismissed. The overlay takes focus and mouse input and
20
- * returns focus when hidden, so the rest of the UI keeps running underneath untouched.
21
- */
22
- export declare function playPiLogoAnimation(tui: TUI, options: PiLogoAnimationOptions): Promise<void>;
23
- export declare class PiLogoAnimation implements Component {
24
- private readonly tui;
25
- private readonly options;
26
- private readonly foreground;
27
- private readonly background;
28
- private readonly onDone;
29
- private readonly startTime;
30
- private lastRender;
31
- private timer;
32
- private exit;
33
- private shuffle;
34
- private screenWidth;
35
- private screenHeight;
36
- /** Star per cell index, or undefined. */
37
- private stars;
38
- private cells;
39
- private readonly ansiCache;
40
- private readonly logo;
41
- constructor(tui: TUI, options: PiLogoAnimationOptions, colors: {
42
- foreground: Rgb;
43
- background: Rgb;
44
- }, onDone: () => void);
45
- /** Play the exit animation. A second call skips it. */
46
- close(): void;
47
- handleInput(data: string): void;
48
- handleMouse(event: TuiMouseEvent): TuiMouseEventResult;
49
- invalidate(): void;
50
- render(width: number): string[];
51
- private elapsed;
52
- private exitProgress;
53
- private finish;
54
- /** Each block's displacement from its place in the logo at `time`, in grid units. */
55
- private blockOffsets;
56
- private flyProgress;
57
- private starAlpha;
58
- private hintAlpha;
59
- private pose;
60
- private hint;
61
- /** A sparse, deterministic starfield: one braille dot in about STAR_DENSITY of all cells. */
62
- private prepareStars;
63
- private prepareCells;
64
- private pack;
65
- private ansi;
66
- }
67
- export {};
68
- //# sourceMappingURL=pi-logo-animation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pi-logo-animation.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/pi-logo-animation.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,SAAS,EAMd,KAAK,GAAG,EACR,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAExB,MAAM,wBAAwB,CAAC;AAIhC;;;;;;;GAOG;AAEH,KAAK,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAiuB7C,MAAM,WAAW,sBAAsB;IACtC,iDAAiD;IACjD,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBlG;AAED,qBAAa,eAAgB,YAAW,SAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,IAAI,CAEC;IACb,OAAO,CAAC,OAAO,CAAkD;IACjE,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,YAAY,CAAM;IAC1B,yCAAyC;IACzC,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IAEzC,YACC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE;QAAE,UAAU,EAAE,GAAG,CAAC;QAAC,UAAU,EAAE,GAAG,CAAA;KAAE,EAC5C,MAAM,EAAE,MAAM,IAAI,EAalB;IAED,uDAAuD;IACvD,KAAK,IAAI,IAAI,CAeZ;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAG9B;IAED,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,mBAAmB,CAGrD;IAED,UAAU,IAAI,IAAI,CAIjB;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA6J9B;IAED,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,MAAM;IAOd,qFAAqF;IACrF,OAAO,CAAC,YAAY;IAkCpB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,IAAI;IAqBZ,OAAO,CAAC,IAAI;IAoBZ,6FAA6F;IAC7F,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,YAAY;IAwCpB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,IAAI;CAWZ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pi-logo-animation.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/pi-logo-animation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tbackgroundAnsi,\n\ttype Color,\n\ttype Component,\n\tcolorToRgb,\n\tforegroundAnsi,\n\tgetKeybindings,\n\tindexedColor,\n\trgbColor,\n\ttype TUI,\n\ttype TuiMouseEvent,\n\ttype TuiMouseEventResult,\n\tvisibleWidth,\n} from \"@earendil-works/pi-tui\";\nimport { theme } from \"../theme/theme.ts\";\nimport { formatKeyText } from \"./keybinding-hints.ts\";\n\n/**\n * Fullscreen easter egg shown when the header logo is clicked. The current screen dissolves into braille dust,\n * spreading out from the logo, while the logo lifts off as a 3D object, flies to the center, grows, and spins.\n * Leaving plays the same timeline backwards, so the logo lands on the header and the screen reassembles.\n *\n * The logo is ray cast per braille dot. A braille cell holds 2x4 dots and roughly square dots, so one logo\n * pixel (a half block) is exactly 2x2 dots and the header logo (4x2 cells) is 8x8 dots at the start.\n */\n\ntype Rgb = readonly [number, number, number];\n\ninterface ScreenCell {\n\ttext: string;\n\t/** 1 or 2 for a grapheme, 0 for the second column of a wide grapheme. */\n\twidth: number;\n\tfg: Rgb;\n\t/** Undefined when the cell uses the terminal's default background. */\n\tbg: Rgb | undefined;\n\t/** Seconds until the cell turns into braille dust. */\n\tdelay: number;\n\t/** Number of braille dots the glyph turns into. */\n\tink: number;\n\tseed: number;\n}\n\ninterface Star {\n\t/** Braille character with the single dot the star occupies. */\n\tglyph: string;\n\t/** Color the star leans toward; it only ever shows a small step from the background toward it. */\n\ttint: Rgb;\n\t/** Largest step from the background toward the tint, from 0 to 1. */\n\tstrength: number;\n\tphase: number;\n\t/** Flicker speed in radians per second. */\n\tspeed: number;\n}\n\ninterface LogoBox {\n\tmin: readonly [number, number, number];\n\tmax: readonly [number, number, number];\n\tcolor: Rgb;\n}\n\ninterface Pose {\n\tcenterX: number;\n\tcenterY: number;\n\t/** Braille dots per logo pixel at depth 0. */\n\tscale: number;\n\tyaw: number;\n\tpitch: number;\n\troll: number;\n}\n\nconst CORAL: Rgb = [228, 138, 122];\nconst BLUE: Rgb = [79, 142, 179];\nconst YELLOW: Rgb = [234, 182, 93];\n\nconst DEPTH = 0.7;\nconst CAMERA_DISTANCE = 10;\nconst FLY_START = 0.1;\nconst FLY_DURATION = 1.3;\n\n/** Grid position of a logo block: column and row in the 4x4 logo, and layer (-1, 0, 1) in depth. */\ntype Cell3 = readonly [number, number, number];\n\n// The logo's pixels on a 4x4 grid. Each pixel is a block that the puzzle slides around.\nconst LOGO_PIXELS = [\"ccc.\", \"b.c.\", \"bb.y\", \"b..y\"];\nconst BLOCKS: Array<{ home: Cell3; color: Rgb }> = LOGO_PIXELS.flatMap((line, row) =>\n\t[...line].flatMap((pixel, column) => {\n\t\tconst color = pixel === \"c\" ? CORAL : pixel === \"b\" ? BLUE : pixel === \"y\" ? YELLOW : undefined;\n\t\treturn color ? [{ home: [column, row, 0] as Cell3, color }] : [];\n\t}),\n);\n// Farthest distance of any block corner from the origin, with blocks on the outer depth layers.\nconst LOGO_RADIUS = Math.hypot(2, 2, 1 + DEPTH / 2);\n\n// The sliding puzzle: after the logo spun for a while, blocks slide into free neighboring cells, one step at\n// a time. Each cycle shuffles, flies every block back home, and holds the logo briefly.\nconst PUZZLE_START = FLY_START + FLY_DURATION + 3;\nconst PUZZLE_STEP = 0.3;\nconst PUZZLE_STEPS = 12;\nconst PUZZLE_RETURN = 1;\nconst PUZZLE_HOLD = 0.6;\nconst PUZZLE_CYCLE = PUZZLE_STEP * PUZZLE_STEPS + PUZZLE_RETURN + PUZZLE_HOLD;\nconst PUZZLE_MOVES: Cell3[] = [\n\t[1, 0, 0],\n\t[-1, 0, 0],\n\t[0, 1, 0],\n\t[0, -1, 0],\n\t[1, 0, 0],\n\t[-1, 0, 0],\n\t[0, 1, 0],\n\t[0, -1, 0],\n\t[0, 0, 1],\n\t[0, 0, -1],\n];\n\n/** Block positions after each step of one shuffle cycle, starting at home. Deterministic per cycle. */\nfunction shuffleSteps(cycle: number): Cell3[][] {\n\tlet positions: Cell3[] = BLOCKS.map((block) => block.home);\n\tconst steps = [positions];\n\tconst lastMoved = new Set<number>();\n\tlet random = cycle * 7_919 + 1;\n\tconst next = () => hash(random++);\n\tconst key = ([x, y, z]: Cell3) => (z + 1) * 16 + y * 4 + x;\n\tfor (let step = 0; step < PUZZLE_STEPS; step++) {\n\t\tconst occupied = new Set(positions.map(key));\n\t\tconst nextPositions = [...positions];\n\t\tconst moved = new Set<number>();\n\t\tconst moveCount = next() < 0.4 ? 2 : 1;\n\t\tfor (let move = 0; move < moveCount; move++) {\n\t\t\tconst candidates: Array<{ block: number; target: Cell3 }> = [];\n\t\t\tfor (let block = 0; block < positions.length; block++) {\n\t\t\t\tif (moved.has(block)) continue;\n\t\t\t\tconst [x, y, z] = positions[block]!;\n\t\t\t\tfor (const [dx, dy, dz] of PUZZLE_MOVES) {\n\t\t\t\t\tconst target: Cell3 = [x + dx, y + dy, z + dz];\n\t\t\t\t\tif (target[0] < 0 || target[0] > 3 || target[1] < 0 || target[1] > 3) continue;\n\t\t\t\t\tif (target[2] < -1 || target[2] > 1 || occupied.has(key(target))) continue;\n\t\t\t\t\tcandidates.push({ block, target });\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Prefer blocks that did not just move, so the puzzle does not look like one block jittering.\n\t\t\tconst fresh = candidates.filter((candidate) => !lastMoved.has(candidate.block));\n\t\t\tconst pool = fresh.length > 0 ? fresh : candidates;\n\t\t\tconst choice = pool[Math.floor(next() * pool.length)];\n\t\t\tif (!choice) break;\n\t\t\toccupied.add(key(choice.target));\n\t\t\tnextPositions[choice.block] = choice.target;\n\t\t\tmoved.add(choice.block);\n\t\t}\n\t\tlastMoved.clear();\n\t\tfor (const block of moved) lastMoved.add(block);\n\t\tpositions = nextPositions;\n\t\tsteps.push(positions);\n\t}\n\treturn steps;\n}\n\nconst FRAME_MS = 1000 / 30;\nconst DUST_DURATION = 0.35;\nconst WAVE_SPREAD = 0.55;\nconst WAVE_JITTER = 0.12;\nconst DISSOLVE_END = FLY_START + WAVE_SPREAD + WAVE_JITTER + DUST_DURATION;\nconst BACKGROUND_FADE = 0.5;\nconst EXIT_DURATION = 1.1;\n// A faint starfield fades in behind the logo once the screen has dissolved.\nconst STARS_START = 2.5;\nconst STARS_FADE = 2;\nconst STAR_DENSITY = 0.018;\n// Star tints: neutral, pale blue, pale gold, and pale rose, each mixed half with the terminal's foreground.\nconst STAR_TINTS: Rgb[] = [\n\t[255, 255, 255],\n\t[170, 195, 255],\n\t[255, 225, 170],\n\t[255, 190, 205],\n];\nconst LOGO_COLOR_STEP = 5;\n// On light backgrounds most of each braille cell shows the bright background, which washes the logo out. There,\n// the logo gets a halo: its colors and coverage blurred into the cell backgrounds, strongest under the logo and\n// fading out over HALO_RADIUS_X columns and HALO_RADIUS_Y rows (cells are about twice as tall as wide).\nconst LIGHT_HALO_STRENGTH = 0.3;\nconst HALO_RADIUS_X = 6;\nconst HALO_RADIUS_Y = 3;\nconst HALO_LEVELS = 32;\nconst STAR_ALPHA_LEVELS = 8;\nconst STAR_FLICKER_LEVELS = 3;\nconst HINT_FADE = 0.5;\n\n// Braille dot bits, indexed by row * 2 + column within the 2x4 cell.\nconst DOT_BITS = [0x01, 0x08, 0x02, 0x10, 0x04, 0x20, 0x40, 0x80];\nconst BRAILLE = Array.from({ length: 256 }, (_, bits) => String.fromCharCode(0x2800 + bits));\nconst LIGHT = normalize([-0.45, -0.6, 0.75]);\nconst HALF_VECTOR = normalize([LIGHT[0], LIGHT[1], LIGHT[2] + 1]);\n\nfunction normalize(v: readonly [number, number, number]): [number, number, number] {\n\tconst length = Math.hypot(v[0], v[1], v[2]);\n\treturn [v[0] / length, v[1] / length, v[2] / length];\n}\n\nfunction clamp01(value: number): number {\n\treturn value < 0 ? 0 : value > 1 ? 1 : value;\n}\n\n/** Quintic smoothstep. */\nfunction smooth(value: number): number {\n\tconst t = clamp01(value);\n\treturn t * t * t * (t * (t * 6 - 15) + 10);\n}\n\nfunction easeOut(value: number): number {\n\tconst t = 1 - clamp01(value);\n\treturn 1 - t * t * t;\n}\n\nfunction mix(a: Rgb, b: Rgb, amount: number): Rgb {\n\treturn [a[0] + (b[0] - a[0]) * amount, a[1] + (b[1] - a[1]) * amount, a[2] + (b[2] - a[2]) * amount];\n}\n\nfunction hash(value: number): number {\n\tlet x = Math.imul(value ^ 0x9e3779b9, 0x85ebca6b);\n\tx ^= x >>> 13;\n\tx = Math.imul(x, 0xc2b2ae35);\n\tx ^= x >>> 16;\n\treturn (x >>> 0) / 0x100000000;\n}\n\n/** Whether a background is light, by relative luminance. */\nfunction isLight([r, g, b]: Rgb): boolean {\n\treturn 0.2126 * r + 0.7152 * g + 0.0722 * b > 128;\n}\n\nfunction toRgb(color: Color): Rgb {\n\tconst { r, g, b } = colorToRgb(color);\n\treturn [r, g, b];\n}\n\n/** Braille dots a glyph turns into, a rough measure of how much ink it has. */\nfunction glyphInk(text: string, seed: number): number {\n\tif (text.trim() === \"\") return 0;\n\tif (/^[.,:;'`\\-_·]$/.test(text)) return 2;\n\tif (/^[\\u2500-\\u257f]$/.test(text)) return 3;\n\treturn 4 + Math.floor(seed * 3);\n}\n\nconst segmenter = new Intl.Segmenter();\n\n/** Parse rendered lines into cells with resolved colors. Other escape sequences (OSC, APC, cursor) are skipped. */\nfunction parseScreen(\n\tlines: readonly string[],\n\twidth: number,\n\tforeground: Rgb,\n\tbackground: Rgb,\n): Array<Array<ScreenCell>> {\n\tconst palette = (index: number): Rgb => toRgb(indexedColor(index));\n\treturn lines.map((line) => {\n\t\tconst cells: ScreenCell[] = [];\n\t\tlet fg: Rgb | undefined;\n\t\tlet bg: Rgb | undefined;\n\t\tlet dim = false;\n\t\tlet inverse = false;\n\t\tconst applySgr = (params: string) => {\n\t\t\tconst codes = params === \"\" ? [\"0\"] : params.split(\";\");\n\t\t\tfor (let i = 0; i < codes.length; i++) {\n\t\t\t\tconst parts = codes[i]!.split(\":\").map((part) => Number.parseInt(part, 10));\n\t\t\t\tconst code = parts[0] ?? 0;\n\t\t\t\tif (code === 38 || code === 48) {\n\t\t\t\t\t// Extended color, either as `38;5;n` / `38;2;r;g;b` or colon sub-parameters.\n\t\t\t\t\tlet args: number[];\n\t\t\t\t\tif (parts.length > 1) {\n\t\t\t\t\t\targs = parts.slice(1).filter((part) => !Number.isNaN(part));\n\t\t\t\t\t\t// `38:2::r:g:b` has an empty color space id, dropped above.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst kind = Number.parseInt(codes[i + 1] ?? \"\", 10);\n\t\t\t\t\t\tconst count = kind === 5 ? 2 : kind === 2 ? 4 : 1;\n\t\t\t\t\t\targs = codes.slice(i + 1, i + 1 + count).map((part) => Number.parseInt(part, 10));\n\t\t\t\t\t\ti += count;\n\t\t\t\t\t}\n\t\t\t\t\tlet color: Rgb | undefined;\n\t\t\t\t\tif (args[0] === 5 && args[1] !== undefined) color = palette(args[1]);\n\t\t\t\t\telse if (args[0] === 2 && args.length >= 4) color = [args[1]!, args[2]!, args[3]!];\n\t\t\t\t\tif (color) {\n\t\t\t\t\t\tif (code === 38) fg = color;\n\t\t\t\t\t\telse bg = color;\n\t\t\t\t\t}\n\t\t\t\t} else if (code === 0) {\n\t\t\t\t\tfg = undefined;\n\t\t\t\t\tbg = undefined;\n\t\t\t\t\tdim = false;\n\t\t\t\t\tinverse = false;\n\t\t\t\t} else if (code === 2) dim = true;\n\t\t\t\telse if (code === 22) dim = false;\n\t\t\t\telse if (code === 7) inverse = true;\n\t\t\t\telse if (code === 27) inverse = false;\n\t\t\t\telse if (code >= 30 && code <= 37) fg = palette(code - 30);\n\t\t\t\telse if (code >= 90 && code <= 97) fg = palette(code - 90 + 8);\n\t\t\t\telse if (code === 39) fg = undefined;\n\t\t\t\telse if (code >= 40 && code <= 47) bg = palette(code - 40);\n\t\t\t\telse if (code >= 100 && code <= 107) bg = palette(code - 100 + 8);\n\t\t\t\telse if (code === 49) bg = undefined;\n\t\t\t}\n\t\t};\n\t\tconst pushText = (text: string) => {\n\t\t\tfor (const { segment } of segmenter.segment(text)) {\n\t\t\t\tconst glyphWidth = visibleWidth(segment);\n\t\t\t\tif (glyphWidth === 0 || cells.length + glyphWidth > width) continue;\n\t\t\t\tlet cellFg = fg ?? foreground;\n\t\t\t\tlet cellBg = bg;\n\t\t\t\tif (inverse) {\n\t\t\t\t\tcellFg = bg ?? background;\n\t\t\t\t\tcellBg = fg ?? foreground;\n\t\t\t\t}\n\t\t\t\tif (dim) cellFg = mix(cellFg, cellBg ?? background, 0.4);\n\t\t\t\tconst cell = { text: segment, width: glyphWidth, fg: cellFg, bg: cellBg, delay: 0, ink: 0, seed: 0 };\n\t\t\t\tcells.push(cell);\n\t\t\t\tif (glyphWidth === 2) cells.push({ ...cell, text: \"\", width: 0 });\n\t\t\t}\n\t\t};\n\t\tlet i = 0;\n\t\twhile (i < line.length) {\n\t\t\tconst sequenceStart = line.indexOf(\"\\x1b\", i);\n\t\t\tif (sequenceStart === -1) {\n\t\t\t\tpushText(line.slice(i));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (sequenceStart > i) pushText(line.slice(i, sequenceStart));\n\t\t\tconst kind = line[sequenceStart + 1];\n\t\t\tif (kind === \"[\") {\n\t\t\t\tlet end = sequenceStart + 2;\n\t\t\t\twhile (end < line.length && (line.charCodeAt(end) < 0x40 || line.charCodeAt(end) > 0x7e)) end++;\n\t\t\t\tif (line[end] === \"m\") applySgr(line.slice(sequenceStart + 2, end));\n\t\t\t\ti = end + 1;\n\t\t\t} else if (kind === \"]\" || kind === \"_\" || kind === \"P\" || kind === \"^\") {\n\t\t\t\t// String sequences end at BEL or ST (ESC \\).\n\t\t\t\tconst bell = line.indexOf(\"\\x07\", sequenceStart + 2);\n\t\t\t\tconst st = line.indexOf(\"\\x1b\\\\\", sequenceStart + 2);\n\t\t\t\tif (bell === -1 && st === -1) break;\n\t\t\t\ti = bell !== -1 && (st === -1 || bell < st) ? bell + 1 : st + 2;\n\t\t\t} else {\n\t\t\t\ti = sequenceStart + 2;\n\t\t\t}\n\t\t}\n\t\treturn cells;\n\t});\n}\n\n/** Row-major 3x3 rotation matrix for yaw (y), then pitch (x), then roll (z). */\nfunction rotation(yaw: number, pitch: number, roll: number): number[] {\n\tconst [sy, cy, sx, cx, sz, cz] = [\n\t\tMath.sin(yaw),\n\t\tMath.cos(yaw),\n\t\tMath.sin(pitch),\n\t\tMath.cos(pitch),\n\t\tMath.sin(roll),\n\t\tMath.cos(roll),\n\t];\n\t// Rz * Rx * Ry\n\tconst ry = [cy, 0, sy, 0, 1, 0, -sy, 0, cy];\n\tconst rx = [1, 0, 0, 0, cx, -sx, 0, sx, cx];\n\tconst rz = [cz, -sz, 0, sz, cz, 0, 0, 0, 1];\n\treturn multiply(rz, multiply(rx, ry));\n}\n\nfunction multiply(a: number[], b: number[]): number[] {\n\tconst result = new Array<number>(9);\n\tfor (let row = 0; row < 3; row++) {\n\t\tfor (let column = 0; column < 3; column++) {\n\t\t\tresult[row * 3 + column] =\n\t\t\t\ta[row * 3]! * b[column]! + a[row * 3 + 1]! * b[3 + column]! + a[row * 3 + 2]! * b[6 + column]!;\n\t\t}\n\t}\n\treturn result;\n}\n\n// The spin is locked to the puzzle: one turn per cycle, facing the camera in the middle of each hold.\nconst SPIN_RAMP = 1.4;\nconst SPIN_SPEED = (Math.PI * 2) / PUZZLE_CYCLE;\n// How much the spin slows down while facing the camera (and speeds up while facing away), from 0 to 1.\nconst SPIN_LINGER = 0.6;\nconst FIRST_FRONT_VIEW = PUZZLE_START + PUZZLE_STEP * PUZZLE_STEPS + PUZZLE_RETURN + PUZZLE_HOLD / 2;\n\n/** Uniform spin that accelerates from rest over SPIN_RAMP, then turns at SPIN_SPEED. */\nfunction baseSpinPhase(time: number): number {\n\tconst elapsed = time - FLY_START;\n\tif (elapsed <= 0) return 0;\n\tconst u = elapsed / SPIN_RAMP;\n\t// Integral of the quintic smoothstep ramp.\n\tif (u < 1) return SPIN_SPEED * SPIN_RAMP * (u ** 6 - 3 * u ** 5 + 2.5 * u ** 4);\n\treturn SPIN_SPEED * (SPIN_RAMP * 0.5 + elapsed - SPIN_RAMP);\n}\n\n// Extra rotation added during the flight, so the phase is a whole number of turns at every assembled front view.\nconst SPIN_ALIGNMENT = Math.PI * 2 - (baseSpinPhase(FIRST_FRONT_VIEW) % (Math.PI * 2));\n\n/** Spin phase: whole turns exactly when the reassembled logo faces the camera. */\nfunction spinPhase(time: number): number {\n\treturn baseSpinPhase(time) + SPIN_ALIGNMENT * smooth((time - FLY_START) / FLY_DURATION);\n}\n\n/** Yaw of the logo. It matches the phase at whole turns but lingers there, so the logo reads from the front. */\nfunction spinAngle(time: number): number {\n\tconst phase = spinPhase(time);\n\treturn phase - SPIN_LINGER * Math.sin(phase);\n}\n\ninterface Face {\n\taxis: number;\n\t/** Plane coordinate on `axis` in object space. */\n\tplane: number;\n\tuMin: number;\n\tuMax: number;\n\tvMin: number;\n\tvMax: number;\n\t/** Projected bounds in braille dots, inclusive. */\n\tminX: number;\n\tminY: number;\n\tmaxX: number;\n\tmaxY: number;\n\tred: number;\n\tgreen: number;\n\tblue: number;\n}\n\n/**\n * Renders the logo blocks into braille cells. Only faces that point at the camera and are not covered by a\n * touching block are drawn. Each face is rasterized over its projected bounds by intersecting each dot's ray\n * with the face's plane, with a depth buffer resolving overlaps. Buffers are reused between frames.\n */\nclass LogoRaster {\n\t/** Braille dot bits per cell. */\n\tbits = new Uint8Array(0);\n\t/** Lit dots per cell. */\n\tcounts = new Uint8Array(0);\n\t/** Summed RGB of the lit dots per cell. */\n\trgb = new Float32Array(0);\n\t/** Halo tint strength per cell, from 0 to 1. Only set when a halo was requested. */\n\thaloAmount = new Float32Array(0);\n\t/** Halo color per cell. */\n\thaloRgb = new Float32Array(0);\n\tprivate width = 0;\n\tprivate height = 0;\n\t/** Ray parameter of the nearest hit per dot; smaller is nearer. */\n\tprivate depth = new Float32Array(0);\n\t/** Face index + 1 of the nearest hit per dot, 0 for none. */\n\tprivate faceIds = new Uint8Array(0);\n\t/** Cells written by the previous frame, cleared before the next one. */\n\tprivate dirty: { minX: number; minY: number; maxX: number; maxY: number } | undefined;\n\t/** Cells with a halo from the previous frame, cleared before the next one. */\n\tprivate haloDirty: { minX: number; minY: number; maxX: number; maxY: number } | undefined;\n\n\trender(\n\t\twidth: number,\n\t\theight: number,\n\t\tpose: Pose,\n\t\tboxes: readonly LogoBox[],\n\t\tbackground: Rgb,\n\t\thaloStrength: number,\n\t): void {\n\t\tconst dotWidth = width * 2;\n\t\tconst dotHeight = height * 4;\n\t\tif (width !== this.width || height !== this.height) {\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.bits = new Uint8Array(width * height);\n\t\t\tthis.counts = new Uint8Array(width * height);\n\t\t\tthis.rgb = new Float32Array(width * height * 3);\n\t\t\tthis.haloAmount = new Float32Array(width * height);\n\t\t\tthis.haloRgb = new Float32Array(width * height * 3);\n\t\t\tthis.haloDirty = undefined;\n\t\t\tthis.depth = new Float32Array(dotWidth * dotHeight).fill(Infinity);\n\t\t\tthis.faceIds = new Uint8Array(dotWidth * dotHeight);\n\t\t\tthis.dirty = undefined;\n\t\t} else if (this.dirty) {\n\t\t\tconst { minX, minY, maxX, maxY } = this.dirty;\n\t\t\tfor (let row = minY; row <= maxY; row++) {\n\t\t\t\tthis.bits.fill(0, row * width + minX, row * width + maxX + 1);\n\t\t\t\tthis.counts.fill(0, row * width + minX, row * width + maxX + 1);\n\t\t\t\tthis.rgb.fill(0, (row * width + minX) * 3, (row * width + maxX + 1) * 3);\n\t\t\t}\n\t\t\tthis.dirty = undefined;\n\t\t}\n\t\tif (this.haloDirty) {\n\t\t\tconst { minX, minY, maxX, maxY } = this.haloDirty;\n\t\t\tfor (let row = minY; row <= maxY; row++) {\n\t\t\t\tthis.haloAmount.fill(0, row * width + minX, row * width + maxX + 1);\n\t\t\t\tthis.haloRgb.fill(0, (row * width + minX) * 3, (row * width + maxX + 1) * 3);\n\t\t\t}\n\t\t\tthis.haloDirty = undefined;\n\t\t}\n\n\t\tconst m = rotation(pose.yaw, pose.pitch, pose.roll);\n\t\tconst { centerX, centerY, scale } = pose;\n\t\t// The camera sits at (0, 0, CAMERA_DISTANCE) in camera space; object space is the transpose rotation.\n\t\tconst origin = [m[6]! * CAMERA_DISTANCE, m[7]! * CAMERA_DISTANCE, m[8]! * CAMERA_DISTANCE];\n\t\tconst light = isLight(background);\n\t\tconst faces = this.visibleFaces(m, origin, pose, boxes, dotWidth, dotHeight, light);\n\t\tif (faces.length === 0) return;\n\t\tlet minX = dotWidth;\n\t\tlet minY = dotHeight;\n\t\tlet maxX = -1;\n\t\tlet maxY = -1;\n\t\tfor (const face of faces) {\n\t\t\tminX = Math.min(minX, face.minX);\n\t\t\tminY = Math.min(minY, face.minY);\n\t\t\tmaxX = Math.max(maxX, face.maxX);\n\t\t\tmaxY = Math.max(maxY, face.maxY);\n\t\t}\n\t\tif (maxX < minX || maxY < minY) return;\n\n\t\tconst depth = this.depth;\n\t\tconst faceIds = this.faceIds;\n\t\tfor (let faceIndex = 0; faceIndex < faces.length; faceIndex++) {\n\t\t\tconst face = faces[faceIndex]!;\n\t\t\tconst a = face.axis;\n\t\t\tconst u = (a + 1) % 3;\n\t\t\tconst v = (a + 2) % 3;\n\t\t\tconst originA = origin[a]!;\n\t\t\tconst originU = origin[u]!;\n\t\t\tconst originV = origin[v]!;\n\t\t\t// The ray direction in object space is linear in the dot position, so it is stepped per dot.\n\t\t\tconst stepA = m[a]! / scale;\n\t\t\tconst stepU = m[u]! / scale;\n\t\t\tconst stepV = m[v]! / scale;\n\t\t\tconst sx = (face.minX + 0.5 - centerX) / scale;\n\t\t\tfor (let dotY = face.minY; dotY <= face.maxY; dotY++) {\n\t\t\t\tconst sy = (dotY + 0.5 - centerY) / scale;\n\t\t\t\tlet directionA = m[a]! * sx + m[3 + a]! * sy - m[6 + a]! * CAMERA_DISTANCE;\n\t\t\t\tlet directionU = m[u]! * sx + m[3 + u]! * sy - m[6 + u]! * CAMERA_DISTANCE;\n\t\t\t\tlet directionV = m[v]! * sx + m[3 + v]! * sy - m[6 + v]! * CAMERA_DISTANCE;\n\t\t\t\tlet index = dotY * dotWidth + face.minX;\n\t\t\t\tfor (let dotX = face.minX; dotX <= face.maxX; dotX++, index++) {\n\t\t\t\t\tconst t = (face.plane - originA) / directionA;\n\t\t\t\t\tif (t > 0 && t < depth[index]!) {\n\t\t\t\t\t\tconst hitU = originU + t * directionU;\n\t\t\t\t\t\tconst hitV = originV + t * directionV;\n\t\t\t\t\t\tif (hitU >= face.uMin && hitU <= face.uMax && hitV >= face.vMin && hitV <= face.vMax) {\n\t\t\t\t\t\t\tdepth[index] = t;\n\t\t\t\t\t\t\tfaceIds[index] = faceIndex + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdirectionA += stepA;\n\t\t\t\t\tdirectionU += stepU;\n\t\t\t\t\tdirectionV += stepV;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Shade the hit dots, pack them into braille cells, and reset the dot buffers for the next frame.\n\t\tconst bits = this.bits;\n\t\tconst counts = this.counts;\n\t\tconst rgb = this.rgb;\n\t\tlet cellMinX = width;\n\t\tlet cellMinY = height;\n\t\tlet cellMaxX = -1;\n\t\tlet cellMaxY = -1;\n\t\tfor (let dotY = minY; dotY <= maxY; dotY++) {\n\t\t\tlet index = dotY * dotWidth + minX;\n\t\t\tfor (let dotX = minX; dotX <= maxX; dotX++, index++) {\n\t\t\t\tconst id = faceIds[index]!;\n\t\t\t\tif (id === 0) continue;\n\t\t\t\tconst face = faces[id - 1]!;\n\t\t\t\t// Points farther from the camera fade slightly toward the background for depth.\n\t\t\t\tconst fog = clamp01(0.15 - CAMERA_DISTANCE * (1 - depth[index]!) * 0.12) * (light ? 0.5 : 1);\n\t\t\t\tfaceIds[index] = 0;\n\t\t\t\tdepth[index] = Infinity;\n\t\t\t\tconst cellX = dotX >> 1;\n\t\t\t\tconst cellY = dotY >> 2;\n\t\t\t\tconst cell = cellY * width + cellX;\n\t\t\t\tbits[cell]! |= DOT_BITS[(dotY & 3) * 2 + (dotX & 1)];\n\t\t\t\tcounts[cell]!++;\n\t\t\t\trgb[cell * 3] += face.red + (background[0] - face.red) * fog;\n\t\t\t\trgb[cell * 3 + 1] += face.green + (background[1] - face.green) * fog;\n\t\t\t\trgb[cell * 3 + 2] += face.blue + (background[2] - face.blue) * fog;\n\t\t\t\tif (cellX < cellMinX) cellMinX = cellX;\n\t\t\t\tif (cellX > cellMaxX) cellMaxX = cellX;\n\t\t\t\tif (cellY < cellMinY) cellMinY = cellY;\n\t\t\t\tif (cellY > cellMaxY) cellMaxY = cellY;\n\t\t\t}\n\t\t}\n\t\tif (cellMaxX >= 0) this.dirty = { minX: cellMinX, minY: cellMinY, maxX: cellMaxX, maxY: cellMaxY };\n\t\tif (haloStrength > 0) this.renderHalo(haloStrength);\n\t}\n\n\t/**\n\t * Blur the logo's coverage and color over neighboring cells with a separable tent filter, so the tint falls\n\t * off smoothly past the logo's edges.\n\t */\n\tprivate renderHalo(strength: number): void {\n\t\tconst cells = this.dirty;\n\t\tif (!cells) return;\n\t\tconst { width, height, counts, rgb } = this;\n\t\tconst minX = Math.max(0, cells.minX - HALO_RADIUS_X);\n\t\tconst maxX = Math.min(width - 1, cells.maxX + HALO_RADIUS_X);\n\t\tconst minY = Math.max(0, cells.minY - HALO_RADIUS_Y);\n\t\tconst maxY = Math.min(height - 1, cells.maxY + HALO_RADIUS_Y);\n\t\tconst regionWidth = maxX - minX + 1;\n\t\tconst tent = (radius: number) => {\n\t\t\tconst weights = Array.from({ length: radius * 2 + 1 }, (_, i) => radius + 1 - Math.abs(i - radius));\n\t\t\tconst total = weights.reduce((sum, weight) => sum + weight, 0);\n\t\t\treturn weights.map((weight) => weight / total);\n\t\t};\n\t\tconst weightsX = tent(HALO_RADIUS_X);\n\t\tconst weightsY = tent(HALO_RADIUS_Y);\n\n\t\t// Horizontal pass over the rows that contain the logo: coverage and premultiplied color per cell.\n\t\tconst rows = cells.maxY - cells.minY + 1;\n\t\tconst horizontal = new Float32Array(rows * regionWidth * 4);\n\t\tfor (let y = cells.minY; y <= cells.maxY; y++) {\n\t\t\tfor (let x = minX; x <= maxX; x++) {\n\t\t\t\tlet coverage = 0;\n\t\t\t\tlet red = 0;\n\t\t\t\tlet green = 0;\n\t\t\t\tlet blue = 0;\n\t\t\t\tfor (let dx = -HALO_RADIUS_X; dx <= HALO_RADIUS_X; dx++) {\n\t\t\t\t\tconst sourceX = x + dx;\n\t\t\t\t\tif (sourceX < cells.minX || sourceX > cells.maxX) continue;\n\t\t\t\t\tconst source = y * width + sourceX;\n\t\t\t\t\tconst count = counts[source]!;\n\t\t\t\t\tif (count === 0) continue;\n\t\t\t\t\tconst weight = weightsX[dx + HALO_RADIUS_X]! / 8;\n\t\t\t\t\tcoverage += count * weight;\n\t\t\t\t\tred += rgb[source * 3]! * weight;\n\t\t\t\t\tgreen += rgb[source * 3 + 1]! * weight;\n\t\t\t\t\tblue += rgb[source * 3 + 2]! * weight;\n\t\t\t\t}\n\t\t\t\tconst target = ((y - cells.minY) * regionWidth + (x - minX)) * 4;\n\t\t\t\thorizontal[target] = coverage;\n\t\t\t\thorizontal[target + 1] = red;\n\t\t\t\thorizontal[target + 2] = green;\n\t\t\t\thorizontal[target + 3] = blue;\n\t\t\t}\n\t\t}\n\n\t\t// Vertical pass into the halo buffers.\n\t\tfor (let y = minY; y <= maxY; y++) {\n\t\t\tfor (let x = minX; x <= maxX; x++) {\n\t\t\t\tlet coverage = 0;\n\t\t\t\tlet red = 0;\n\t\t\t\tlet green = 0;\n\t\t\t\tlet blue = 0;\n\t\t\t\tfor (let dy = -HALO_RADIUS_Y; dy <= HALO_RADIUS_Y; dy++) {\n\t\t\t\t\tconst sourceY = y + dy;\n\t\t\t\t\tif (sourceY < cells.minY || sourceY > cells.maxY) continue;\n\t\t\t\t\tconst weight = weightsY[dy + HALO_RADIUS_Y]!;\n\t\t\t\t\tconst source = ((sourceY - cells.minY) * regionWidth + (x - minX)) * 4;\n\t\t\t\t\tcoverage += horizontal[source]! * weight;\n\t\t\t\t\tred += horizontal[source + 1]! * weight;\n\t\t\t\t\tgreen += horizontal[source + 2]! * weight;\n\t\t\t\t\tblue += horizontal[source + 3]! * weight;\n\t\t\t\t}\n\t\t\t\tconst target = y * width + x;\n\t\t\t\t// Cells under the logo keep at least their own coverage, so faces stay solidly tinted.\n\t\t\t\tconst count = counts[target]!;\n\t\t\t\tif (count > 0 && count / 8 > coverage) {\n\t\t\t\t\tcoverage = count / 8;\n\t\t\t\t\tred = (rgb[target * 3]! / count) * coverage;\n\t\t\t\t\tgreen = (rgb[target * 3 + 1]! / count) * coverage;\n\t\t\t\t\tblue = (rgb[target * 3 + 2]! / count) * coverage;\n\t\t\t\t}\n\t\t\t\tif (coverage <= 0) continue;\n\t\t\t\t// Quantized so neighboring cells usually share a background and its escape sequence.\n\t\t\t\tconst amount = Math.round(strength * Math.min(1, coverage) ** 0.7 * HALO_LEVELS) / HALO_LEVELS;\n\t\t\t\tif (amount <= 0) continue;\n\t\t\t\tthis.haloAmount[target] = amount;\n\t\t\t\tthis.haloRgb[target * 3] = Math.round(red / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;\n\t\t\t\tthis.haloRgb[target * 3 + 1] = Math.round(green / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;\n\t\t\t\tthis.haloRgb[target * 3 + 2] = Math.round(blue / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;\n\t\t\t}\n\t\t}\n\t\tthis.haloDirty = { minX, minY, maxX, maxY };\n\t}\n\n\tprivate visibleFaces(\n\t\tm: number[],\n\t\torigin: number[],\n\t\tpose: Pose,\n\t\tboxes: readonly LogoBox[],\n\t\tdotWidth: number,\n\t\tdotHeight: number,\n\t\tlightBackground: boolean,\n\t): Face[] {\n\t\tconst faces: Face[] = [];\n\t\tfor (const box of boxes) {\n\t\t\tfor (let a = 0; a < 3; a++) {\n\t\t\t\tconst u = (a + 1) % 3;\n\t\t\t\tconst v = (a + 2) % 3;\n\t\t\t\tfor (const side of [-1, 1]) {\n\t\t\t\t\tconst plane = side > 0 ? box.max[a]! : box.min[a]!;\n\t\t\t\t\t// Back faces point away from the camera.\n\t\t\t\t\tif ((origin[a]! - plane) * side <= 0) continue;\n\t\t\t\t\t// Faces pressed against a neighboring block are hidden. Positions are exact while blocks rest.\n\t\t\t\t\tconst covered = boxes.some(\n\t\t\t\t\t\t(other) =>\n\t\t\t\t\t\t\tother !== box &&\n\t\t\t\t\t\t\t(side > 0 ? other.min[a] : other.max[a]) === plane &&\n\t\t\t\t\t\t\tother.min[u]! <= box.min[u]! &&\n\t\t\t\t\t\t\tother.max[u]! >= box.max[u]! &&\n\t\t\t\t\t\t\tother.min[v]! <= box.min[v]! &&\n\t\t\t\t\t\t\tother.max[v]! >= box.max[v]!,\n\t\t\t\t\t);\n\t\t\t\t\tif (covered) continue;\n\n\t\t\t\t\tlet minX = Infinity;\n\t\t\t\t\tlet minY = Infinity;\n\t\t\t\t\tlet maxX = -Infinity;\n\t\t\t\t\tlet maxY = -Infinity;\n\t\t\t\t\tconst corner = [0, 0, 0];\n\t\t\t\t\tfor (const cornerU of [box.min[u]!, box.max[u]!]) {\n\t\t\t\t\t\tfor (const cornerV of [box.min[v]!, box.max[v]!]) {\n\t\t\t\t\t\t\tcorner[a] = plane;\n\t\t\t\t\t\t\tcorner[u] = cornerU;\n\t\t\t\t\t\t\tcorner[v] = cornerV;\n\t\t\t\t\t\t\tconst x = m[0]! * corner[0]! + m[1]! * corner[1]! + m[2]! * corner[2]!;\n\t\t\t\t\t\t\tconst y = m[3]! * corner[0]! + m[4]! * corner[1]! + m[5]! * corner[2]!;\n\t\t\t\t\t\t\tconst z = m[6]! * corner[0]! + m[7]! * corner[1]! + m[8]! * corner[2]!;\n\t\t\t\t\t\t\tconst perspective = (pose.scale * CAMERA_DISTANCE) / (CAMERA_DISTANCE - z);\n\t\t\t\t\t\t\tconst screenX = pose.centerX + x * perspective;\n\t\t\t\t\t\t\tconst screenY = pose.centerY + y * perspective;\n\t\t\t\t\t\t\tminX = Math.min(minX, screenX);\n\t\t\t\t\t\t\tminY = Math.min(minY, screenY);\n\t\t\t\t\t\t\tmaxX = Math.max(maxX, screenX);\n\t\t\t\t\t\t\tmaxY = Math.max(maxY, screenY);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst face = {\n\t\t\t\t\t\tminX: Math.max(0, Math.floor(minX)),\n\t\t\t\t\t\tminY: Math.max(0, Math.floor(minY)),\n\t\t\t\t\t\tmaxX: Math.min(dotWidth - 1, Math.ceil(maxX)),\n\t\t\t\t\t\tmaxY: Math.min(dotHeight - 1, Math.ceil(maxY)),\n\t\t\t\t\t};\n\t\t\t\t\tif (face.maxX < face.minX || face.maxY < face.minY) continue;\n\n\t\t\t\t\t// Faces are flat, so lighting is computed once per face. The normal in camera space is a\n\t\t\t\t\t// column of the rotation matrix.\n\t\t\t\t\tconst nx = m[a]! * side;\n\t\t\t\t\tconst ny = m[3 + a]! * side;\n\t\t\t\t\tconst nz = m[6 + a]! * side;\n\t\t\t\t\tconst diffuse = Math.max(0, nx * LIGHT[0] + ny * LIGHT[1] + nz * LIGHT[2]);\n\t\t\t\t\tconst rim = Math.max(0, nx * 0.8 - nz * 0.3);\n\t\t\t\t\t// On light backgrounds, highlights toward white would vanish, so faces only get darker than\n\t\t\t\t\t// the brand colors there.\n\t\t\t\t\tconst specular = lightBackground\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: Math.max(0, nx * HALF_VECTOR[0] + ny * HALF_VECTOR[1] + nz * HALF_VECTOR[2]) ** 24 * 0.6 * 255;\n\t\t\t\t\tconst light = lightBackground\n\t\t\t\t\t\t? Math.min(1, 0.55 + diffuse * 0.45 + rim * 0.1)\n\t\t\t\t\t\t: 0.45 + diffuse * 0.78 + rim * 0.25;\n\t\t\t\t\tfaces.push({\n\t\t\t\t\t\taxis: a,\n\t\t\t\t\t\tplane,\n\t\t\t\t\t\tuMin: box.min[u]!,\n\t\t\t\t\t\tuMax: box.max[u]!,\n\t\t\t\t\t\tvMin: box.min[v]!,\n\t\t\t\t\t\tvMax: box.max[v]!,\n\t\t\t\t\t\t...face,\n\t\t\t\t\t\tred: Math.min(255, box.color[0] * light + specular),\n\t\t\t\t\t\tgreen: Math.min(255, box.color[1] * light + specular),\n\t\t\t\t\t\tblue: Math.min(255, box.color[2] * light + specular),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn faces;\n\t}\n}\n\nexport interface PiLogoAnimationOptions {\n\t/** The screen to dissolve, as rendered lines. */\n\tscreen: readonly string[];\n\t/** Terminal cell of the header logo's top-left corner. */\n\tlogoColumn: number;\n\tlogoRow: number;\n}\n\nlet playing = false;\n\n/**\n * Show the animation as a fullscreen overlay until it is dismissed. The overlay takes focus and mouse input and\n * returns focus when hidden, so the rest of the UI keeps running underneath untouched.\n */\nexport async function playPiLogoAnimation(tui: TUI, options: PiLogoAnimationOptions): Promise<void> {\n\tif (playing) return;\n\tplaying = true;\n\t// Fading needs the terminal's actual default colors; the theme only knows its own.\n\tconst reported = await tui.queryTerminalColors({ timeoutMs: 100 });\n\tconst dark = theme.appearance === \"dark\";\n\tconst toRgbTuple = (rgb: { r: number; g: number; b: number } | undefined, fallback: Rgb): Rgb =>\n\t\trgb ? [rgb.r, rgb.g, rgb.b] : fallback;\n\tconst colors = {\n\t\tforeground: toRgbTuple(reported.foreground, toRgb(theme.colors.text)),\n\t\tbackground: toRgbTuple(reported.background, dark ? [0, 0, 0] : [255, 255, 255]),\n\t};\n\tif (tui.hasOverlay()) {\n\t\tplaying = false;\n\t\treturn;\n\t}\n\tconst animation = new PiLogoAnimation(tui, options, colors, () => {\n\t\tplaying = false;\n\t\toverlay.hide();\n\t});\n\tconst overlay = tui.showOverlay(animation, { anchor: \"top-left\", width: \"100%\", maxHeight: \"100%\" });\n}\n\nexport class PiLogoAnimation implements Component {\n\tprivate readonly tui: TUI;\n\tprivate readonly options: PiLogoAnimationOptions;\n\tprivate readonly foreground: Rgb;\n\tprivate readonly background: Rgb;\n\tprivate readonly onDone: () => void;\n\tprivate readonly startTime = performance.now();\n\tprivate lastRender = performance.now();\n\tprivate timer: ReturnType<typeof setInterval> | undefined;\n\tprivate exit:\n\t\t| { start: number; time: number; yaw: number; targetYaw: number; offsets: Array<[number, number, number]> }\n\t\t| undefined;\n\tprivate shuffle: { cycle: number; steps: Cell3[][] } | undefined;\n\tprivate screenWidth = -1;\n\tprivate screenHeight = -1;\n\t/** Star per cell index, or undefined. */\n\tprivate stars: Array<Star | undefined> = [];\n\tprivate cells: ScreenCell[][] = [];\n\tprivate readonly ansiCache = new Map<number, string>();\n\tprivate readonly logo = new LogoRaster();\n\n\tconstructor(\n\t\ttui: TUI,\n\t\toptions: PiLogoAnimationOptions,\n\t\tcolors: { foreground: Rgb; background: Rgb },\n\t\tonDone: () => void,\n\t) {\n\t\tthis.tui = tui;\n\t\tthis.options = options;\n\t\tthis.foreground = colors.foreground;\n\t\tthis.background = colors.background;\n\t\tthis.onDone = onDone;\n\t\tthis.timer = setInterval(() => {\n\t\t\t// Also stop when no longer rendered, e.g. when pi hides all overlays on exit.\n\t\t\tif ((this.exit && this.exitProgress() >= 1) || performance.now() - this.lastRender > 1000) this.finish();\n\t\t\telse this.tui.requestRender();\n\t\t}, FRAME_MS);\n\t\tthis.timer.unref?.();\n\t}\n\n\t/** Play the exit animation. A second call skips it. */\n\tclose(): void {\n\t\tif (this.exit) {\n\t\t\tthis.finish();\n\t\t\treturn;\n\t\t}\n\t\tconst time = this.elapsed();\n\t\tconst yaw = spinAngle(time);\n\t\tconst turn = Math.PI * 2;\n\t\tthis.exit = {\n\t\t\tstart: performance.now(),\n\t\t\ttime,\n\t\t\tyaw,\n\t\t\ttargetYaw: Math.ceil(yaw / turn) * turn,\n\t\t\toffsets: this.blockOffsets(time),\n\t\t};\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst keybindings = getKeybindings();\n\t\tif (keybindings.matches(data, \"tui.select.cancel\") || keybindings.matches(data, \"app.clear\")) this.close();\n\t}\n\n\thandleMouse(event: TuiMouseEvent): TuiMouseEventResult {\n\t\tif (event.type === \"click\") this.close();\n\t\treturn { handled: true, render: false };\n\t}\n\n\tinvalidate(): void {\n\t\tthis.screenWidth = -1;\n\t\tthis.screenHeight = -1;\n\t\tthis.ansiCache.clear();\n\t}\n\n\trender(width: number): string[] {\n\t\tconst height = Math.max(1, this.tui.terminal.rows);\n\t\tconst foreground = this.foreground;\n\t\tconst background = this.background;\n\t\tthis.lastRender = performance.now();\n\t\tif (width !== this.screenWidth || height !== this.screenHeight) {\n\t\t\tthis.screenWidth = width;\n\t\t\tthis.screenHeight = height;\n\t\t\tthis.cells = this.prepareCells(width, foreground);\n\t\t\tthis.stars = this.prepareStars(width, height);\n\t\t}\n\n\t\t// Dissolve time runs forward on entry and backward on exit, so the screen reassembles in reverse order.\n\t\tlet dissolveTime: number;\n\t\tlet pose: Pose;\n\t\tlet hintAlpha: number;\n\t\tlet starAlpha: number;\n\t\tlet offsets: Array<[number, number, number]>;\n\t\tif (this.exit) {\n\t\t\tconst progress = this.exitProgress();\n\t\t\tconst landing = clamp01(progress / 0.8);\n\t\t\tconst settle = 1 - smooth(landing);\n\t\t\tdissolveTime = Math.min(this.exit.time, DISSOLVE_END) * (1 - progress);\n\t\t\tpose = this.pose(width, height, this.flyProgress(this.exit.time) * settle, this.exit.time);\n\t\t\tpose.yaw = this.exit.yaw + (this.exit.targetYaw - this.exit.yaw) * easeOut(landing);\n\t\t\tpose.pitch *= settle;\n\t\t\tpose.roll *= settle;\n\t\t\thintAlpha = this.hintAlpha(this.exit.time) * (1 - smooth(progress / 0.2));\n\t\t\tstarAlpha = this.starAlpha(this.exit.time) * (1 - smooth(progress / 0.3));\n\t\t\t// Blocks are home well before the logo lands.\n\t\t\tconst gather = 1 - smooth(progress / 0.5);\n\t\t\toffsets = this.exit.offsets.map(([x, y, z]) => [x * gather, y * gather, z * gather]);\n\t\t} else {\n\t\t\tconst time = this.elapsed();\n\t\t\tdissolveTime = time;\n\t\t\tpose = this.pose(width, height, this.flyProgress(time), time);\n\t\t\thintAlpha = this.hintAlpha(time);\n\t\t\tstarAlpha = this.starAlpha(time);\n\t\t\toffsets = this.blockOffsets(time);\n\t\t}\n\n\t\tconst boxes: LogoBox[] = BLOCKS.map((block, index) => {\n\t\t\tconst [dx, dy, dz] = offsets[index]!;\n\t\t\tconst x = block.home[0] - 2 + dx;\n\t\t\tconst y = block.home[1] - 2 + dy;\n\t\t\treturn { min: [x, y, dz - DEPTH / 2], max: [x + 1, y + 1, dz + DEPTH / 2], color: block.color };\n\t\t});\n\t\tconst logo = this.logo;\n\t\tlogo.render(width, height, pose, boxes, background, isLight(background) ? LIGHT_HALO_STRENGTH : 0);\n\t\tconst halo = (index: number, base: Rgb | undefined): Rgb | undefined => {\n\t\t\tconst amount = logo.haloAmount[index]!;\n\t\t\tif (amount <= 0) return base;\n\t\t\tconst color = logo.haloRgb;\n\t\t\treturn mix(base ?? background, [color[index * 3]!, color[index * 3 + 1]!, color[index * 3 + 2]!], amount);\n\t\t};\n\t\tconst backgroundFade = smooth(dissolveTime / BACKGROUND_FADE);\n\t\tconst textFade = smooth(dissolveTime / 0.6) * 0.3;\n\t\t// Once the screen has fully dissolved, the text layer is empty and can be skipped.\n\t\tconst textActive = dissolveTime < DISSOLVE_END || backgroundFade < 1;\n\t\tconst hint = this.hint(width, height, hintAlpha, background);\n\t\tconst frame = Math.floor(dissolveTime * 14);\n\t\tconst now = this.elapsed();\n\t\t// Star brightness is quantized, so a row only changes when one of its stars steps to another level\n\t\t// instead of on every frame.\n\t\tconst starLevel = Math.round(starAlpha * STAR_ALPHA_LEVELS) / STAR_ALPHA_LEVELS;\n\t\tconst starfield = (index: number): { text: string; fg: Rgb } | undefined => {\n\t\t\tif (starLevel <= 0) return undefined;\n\t\t\tconst star = this.stars[index];\n\t\t\tif (!star) return undefined;\n\t\t\tconst flicker =\n\t\t\t\tMath.round((0.5 + 0.5 * Math.sin(now * star.speed + star.phase)) * STAR_FLICKER_LEVELS) /\n\t\t\t\tSTAR_FLICKER_LEVELS;\n\t\t\treturn {\n\t\t\t\ttext: star.glyph,\n\t\t\t\tfg: mix(background, mix(foreground, star.tint, 0.5), star.strength * (0.7 + 0.3 * flicker) * starLevel),\n\t\t\t};\n\t\t};\n\t\tconst lines: string[] = [];\n\t\tfor (let row = 0; row < height; row++) {\n\t\t\tconst cells = this.cells[row] ?? [];\n\t\t\tlet line = \"\";\n\t\t\tlet currentFg = -1;\n\t\t\tlet currentBg = -1;\n\t\t\tconst emit = (text: string, fg: Rgb | undefined, bg: Rgb | undefined) => {\n\t\t\t\tconst fgKey = fg ? this.pack(fg) : -1;\n\t\t\t\tconst bgKey = bg ? this.pack(bg) : -1;\n\t\t\t\tif (fgKey !== currentFg && text !== \" \") {\n\t\t\t\t\tline += fg ? this.ansi(fgKey, false) : \"\\x1b[39m\";\n\t\t\t\t\tcurrentFg = fgKey;\n\t\t\t\t}\n\t\t\t\tif (bgKey !== currentBg) {\n\t\t\t\t\tline += bg ? this.ansi(bgKey, true) : \"\\x1b[49m\";\n\t\t\t\t\tcurrentBg = bgKey;\n\t\t\t\t}\n\t\t\t\tline += text;\n\t\t\t};\n\t\t\tfor (let column = 0; column < width; column++) {\n\t\t\t\tconst index = row * width + column;\n\t\t\t\tconst cell = textActive ? cells[column] : undefined;\n\t\t\t\tconst cellBg = halo(\n\t\t\t\t\tindex,\n\t\t\t\t\tcell?.bg && backgroundFade < 1 ? mix(cell.bg, background, backgroundFade) : undefined,\n\t\t\t\t);\n\t\t\t\tif (hint && row === hint.row && column >= hint.start && column < hint.start + hint.text.length) {\n\t\t\t\t\tconst offset = column - hint.start;\n\t\t\t\t\temit(hint.text[offset]!, offset < hint.keyLength ? hint.keyColor : hint.color, cellBg);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst dots = logo.bits[index]!;\n\t\t\t\tif (dots) {\n\t\t\t\t\t// Quantized so neighboring cells on one face usually share a color and its escape sequence.\n\t\t\t\t\tconst step = LOGO_COLOR_STEP * logo.counts[index]!;\n\t\t\t\t\tconst rgb = logo.rgb;\n\t\t\t\t\tconst color: Rgb = [\n\t\t\t\t\t\tMath.round(rgb[index * 3]! / step) * LOGO_COLOR_STEP,\n\t\t\t\t\t\tMath.round(rgb[index * 3 + 1]! / step) * LOGO_COLOR_STEP,\n\t\t\t\t\t\tMath.round(rgb[index * 3 + 2]! / step) * LOGO_COLOR_STEP,\n\t\t\t\t\t];\n\t\t\t\t\temit(BRAILLE[dots]!, color, cellBg);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!cell) {\n\t\t\t\t\tconst star = starfield(index);\n\t\t\t\t\temit(star?.text ?? \" \", star?.fg, cellBg);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst dust = (dissolveTime - cell.delay) / DUST_DURATION;\n\t\t\t\tif (dust < 0 && cell.width === 2 && !logo.bits[index + 1]) {\n\t\t\t\t\temit(cell.text, mix(cell.fg, background, textFade), cellBg);\n\t\t\t\t\tcolumn++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (dust < 0 && cell.width === 1) {\n\t\t\t\t\temit(cell.text, mix(cell.fg, background, textFade), cellBg);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst dotCount = dust < 0 ? cell.ink : Math.round(cell.ink * (1 - clamp01(dust)));\n\t\t\t\tif (dotCount <= 0) {\n\t\t\t\t\tconst star = starfield(index);\n\t\t\t\t\temit(star?.text ?? \" \", star?.fg, cellBg);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Pick `dotCount` distinct dots; the choice changes a few times per second so the dust shimmers.\n\t\t\t\tlet bits = 0;\n\t\t\t\tlet placed = 0;\n\t\t\t\tfor (let attempt = 0; placed < dotCount && attempt < 32; attempt++) {\n\t\t\t\t\tconst bit = DOT_BITS[Math.floor(hash(cell.seed * 7919 + frame * 131 + attempt) * 8)]!;\n\t\t\t\t\tif (bits & bit) continue;\n\t\t\t\t\tbits |= bit;\n\t\t\t\t\tplaced++;\n\t\t\t\t}\n\t\t\t\tconst fade = textFade + (1 - textFade) * clamp01(dust) ** 0.8;\n\t\t\t\temit(BRAILLE[bits]!, mix(cell.fg, background, fade), cellBg);\n\t\t\t}\n\t\t\tlines.push(`${line}\\x1b[0m`);\n\t\t}\n\t\treturn lines;\n\t}\n\n\tprivate elapsed(): number {\n\t\treturn (performance.now() - this.startTime) / 1000;\n\t}\n\n\tprivate exitProgress(): number {\n\t\treturn this.exit ? clamp01((performance.now() - this.exit.start) / 1000 / EXIT_DURATION) : 0;\n\t}\n\n\tprivate finish(): void {\n\t\tif (!this.timer) return;\n\t\tclearInterval(this.timer);\n\t\tthis.timer = undefined;\n\t\tthis.onDone();\n\t}\n\n\t/** Each block's displacement from its place in the logo at `time`, in grid units. */\n\tprivate blockOffsets(time: number): Array<[number, number, number]> {\n\t\tconst home = (): Array<[number, number, number]> => BLOCKS.map(() => [0, 0, 0]);\n\t\tif (time < PUZZLE_START) return home();\n\t\tconst cycle = Math.floor((time - PUZZLE_START) / PUZZLE_CYCLE);\n\t\tconst local = time - PUZZLE_START - cycle * PUZZLE_CYCLE;\n\t\tif (this.shuffle?.cycle !== cycle) this.shuffle = { cycle, steps: shuffleSteps(cycle) };\n\t\tconst steps = this.shuffle.steps;\n\t\tconst offset = (position: Cell3, index: number): [number, number, number] => {\n\t\t\tconst block = BLOCKS[index]!.home;\n\t\t\treturn [position[0] - block[0], position[1] - block[1], position[2] - block[2]];\n\t\t};\n\t\tconst shuffleEnd = PUZZLE_STEP * PUZZLE_STEPS;\n\t\tif (local < shuffleEnd) {\n\t\t\tconst step = Math.floor(local / PUZZLE_STEP);\n\t\t\tconst progress = smooth((local - step * PUZZLE_STEP) / PUZZLE_STEP);\n\t\t\treturn steps[step]!.map((from, index) => {\n\t\t\t\tconst a = offset(from, index);\n\t\t\t\tconst b = offset(steps[step + 1]![index]!, index);\n\t\t\t\treturn [a[0] + (b[0] - a[0]) * progress, a[1] + (b[1] - a[1]) * progress, a[2] + (b[2] - a[2]) * progress];\n\t\t\t});\n\t\t}\n\t\tif (local < shuffleEnd + PUZZLE_RETURN) {\n\t\t\t// All blocks fly home at once. Alternating arcs in depth keep them from passing through each other.\n\t\t\tconst u = (local - shuffleEnd) / PUZZLE_RETURN;\n\t\t\tconst remaining = 1 - smooth(u);\n\t\t\tconst arc = Math.sin(Math.PI * clamp01(u)) * 0.8;\n\t\t\treturn steps[PUZZLE_STEPS]!.map((position, index) => {\n\t\t\t\tconst [x, y, z] = offset(position, index);\n\t\t\t\treturn [x * remaining, y * remaining, z * remaining + (index % 2 === 0 ? arc : -arc)];\n\t\t\t});\n\t\t}\n\t\treturn home();\n\t}\n\n\tprivate flyProgress(time: number): number {\n\t\treturn smooth((time - FLY_START) / FLY_DURATION);\n\t}\n\n\tprivate starAlpha(time: number): number {\n\t\treturn smooth((time - STARS_START) / STARS_FADE);\n\t}\n\n\tprivate hintAlpha(time: number): number {\n\t\treturn smooth((time - FLY_START - FLY_DURATION) / HINT_FADE);\n\t}\n\n\tprivate pose(width: number, height: number, progress: number, time: number): Pose {\n\t\t// At the start the front face must cover exactly the header logo's 8x8 dots despite the perspective.\n\t\tconst startScale = (2 * (CAMERA_DISTANCE - DEPTH / 2)) / CAMERA_DISTANCE;\n\t\tconst reach = LOGO_RADIUS * (CAMERA_DISTANCE / (CAMERA_DISTANCE - LOGO_RADIUS));\n\t\tconst endScale = Math.max(startScale, Math.min(width * 2 * 0.35, (height * 4 - 8) * 0.48) / reach);\n\t\tconst startX = this.options.logoColumn * 2 + 4;\n\t\tconst startY = this.options.logoRow * 4 + 4;\n\t\tconst endX = width;\n\t\tconst endY = height * 2 - 2;\n\t\treturn {\n\t\t\tcenterX: startX + (endX - startX) * progress,\n\t\t\tcenterY: startY + (endY - startY) * progress,\n\t\t\t// Interpolate the zoom geometrically so it feels uniform.\n\t\t\tscale: startScale * (endScale / startScale) ** progress,\n\t\t\tyaw: spinAngle(time),\n\t\t\t// Tilts are zero at whole turns, so the camera looks straight at the front of the reassembled logo.\n\t\t\tpitch: 0.3 * Math.sin(spinPhase(time)) * progress,\n\t\t\troll: 0.06 * Math.sin(2 * spinPhase(time)) * progress,\n\t\t};\n\t}\n\n\tprivate hint(\n\t\twidth: number,\n\t\theight: number,\n\t\talpha: number,\n\t\tbackground: Rgb,\n\t): { row: number; start: number; text: string; keyLength: number; keyColor: Rgb; color: Rgb } | undefined {\n\t\tif (alpha <= 0) return undefined;\n\t\tconst key = formatKeyText(getKeybindings().getKeys(\"tui.select.cancel\")[0] ?? \"escape\");\n\t\tconst text = `${key} to return`;\n\t\tif (text.length > width) return undefined;\n\t\treturn {\n\t\t\trow: height - 2,\n\t\t\tstart: Math.floor((width - text.length) / 2),\n\t\t\ttext,\n\t\t\tkeyLength: key.length,\n\t\t\tkeyColor: mix(background, toRgb(theme.colors.muted), alpha),\n\t\t\tcolor: mix(background, toRgb(theme.colors.dim), alpha),\n\t\t};\n\t}\n\n\t/** A sparse, deterministic starfield: one braille dot in about STAR_DENSITY of all cells. */\n\tprivate prepareStars(width: number, height: number): Array<Star | undefined> {\n\t\tconst stars = new Array<Star | undefined>(width * height);\n\t\tfor (let index = 0; index < width * height; index++) {\n\t\t\tif (hash(index * 3 + 0x51ed) >= STAR_DENSITY) continue;\n\t\t\tconst random = (salt: number) => hash(index * 7 + salt * 0x9e37);\n\t\t\tstars[index] = {\n\t\t\t\tglyph: BRAILLE[DOT_BITS[Math.floor(random(1) * 8)]!]!,\n\t\t\t\ttint: STAR_TINTS[Math.floor(random(2) * STAR_TINTS.length)]!,\n\t\t\t\tstrength: 0.1 + random(3) * 0.12,\n\t\t\t\tphase: random(4) * Math.PI * 2,\n\t\t\t\tspeed: 0.4 + random(5) * 0.8,\n\t\t\t};\n\t\t}\n\t\treturn stars;\n\t}\n\n\tprivate prepareCells(width: number, foreground: Rgb): ScreenCell[][] {\n\t\tconst cells = parseScreen(this.options.screen, width, foreground, this.background);\n\t\tconst centerX = this.options.logoColumn + 2;\n\t\tconst centerY = this.options.logoRow + 1;\n\t\tconst height = Math.max(1, this.tui.terminal.rows);\n\t\tconst farthest = Math.hypot(Math.max(centerX, width - centerX), Math.max(centerY, height - centerY) * 2);\n\t\tfor (let row = 0; row < cells.length; row++) {\n\t\t\tconst line = cells[row]!;\n\t\t\tfor (let column = 0; column < line.length; column++) {\n\t\t\t\tconst cell = line[column]!;\n\t\t\t\t// Wide graphemes share their first column's timing so both halves change together.\n\t\t\t\tconst owner = cell.width === 0 ? line[column - 1]! : cell;\n\t\t\t\tconst seed = hash(row * 65_537 + column);\n\t\t\t\tif (cell.width !== 0) {\n\t\t\t\t\tconst distance = Math.hypot(column - centerX, (row - centerY) * 2) / farthest;\n\t\t\t\t\tcell.delay = FLY_START + distance * WAVE_SPREAD + seed * WAVE_JITTER;\n\t\t\t\t} else {\n\t\t\t\t\tcell.delay = owner.delay;\n\t\t\t\t}\n\t\t\t\tcell.seed = row * 65_537 + column;\n\t\t\t\tcell.ink = glyphInk(owner.text, seed);\n\t\t\t}\n\t\t}\n\t\t// The 3D logo replaces the header logo.\n\t\tfor (let row = this.options.logoRow; row < this.options.logoRow + 2; row++) {\n\t\t\tconst line = cells[row];\n\t\t\tif (!line) continue;\n\t\t\tfor (let column = this.options.logoColumn; column < this.options.logoColumn + 4; column++) {\n\t\t\t\tconst cell = line[column];\n\t\t\t\tif (cell) {\n\t\t\t\t\tcell.text = \" \";\n\t\t\t\t\tcell.width = 1;\n\t\t\t\t\tcell.ink = 0;\n\t\t\t\t\tcell.bg = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cells;\n\t}\n\n\tprivate pack(color: Rgb): number {\n\t\treturn (Math.round(color[0]) << 16) | (Math.round(color[1]) << 8) | Math.round(color[2]);\n\t}\n\n\tprivate ansi(key: number, isBackground: boolean): string {\n\t\tconst cacheKey = key * 2 + (isBackground ? 1 : 0);\n\t\tlet value = this.ansiCache.get(cacheKey);\n\t\tif (value === undefined) {\n\t\t\tconst color = rgbColor((key >> 16) & 255, (key >> 8) & 255, key & 255);\n\t\t\tconst mode = theme.getColorMode();\n\t\t\tvalue = isBackground ? backgroundAnsi(color, mode) : foregroundAnsi(color, mode);\n\t\t\tthis.ansiCache.set(cacheKey, value);\n\t\t}\n\t\treturn value;\n\t}\n}\n"]}
@@ -1,7 +0,0 @@
1
- import { type TUI } from "@earendil-works/pi-tui";
2
- /**
3
- * Plays the logo easter egg (see pi-logo-animation.ts), which loads on the first click. Only fullscreen mode
4
- * can show it, because it dissolves the rendered screen. The screen is captured before loading.
5
- */
6
- export declare function playPiLogoAnimation(tui: TUI, logoColumn: number, logoRow: number): void;
7
- //# sourceMappingURL=pi-logo-animation.lazy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pi-logo-animation.lazy.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/pi-logo-animation.lazy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAgB,MAAM,wBAAwB,CAAC;AAEhE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAOvF"}
@@ -1,12 +0,0 @@
1
- import { TuiAltScreen } from "@earendil-works/pi-tui";
2
- /**
3
- * Plays the logo easter egg (see pi-logo-animation.ts), which loads on the first click. Only fullscreen mode
4
- * can show it, because it dissolves the rendered screen. The screen is captured before loading.
5
- */
6
- export function playPiLogoAnimation(tui, logoColumn, logoRow) {
7
- if (!(tui instanceof TuiAltScreen) || tui.hasOverlay())
8
- return;
9
- const screen = tui.getScreenLines();
10
- import("./pi-logo-animation.js").then((module) => module.playPiLogoAnimation(tui, { screen, logoColumn, logoRow }), () => { });
11
- }
12
- //# sourceMappingURL=pi-logo-animation.lazy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pi-logo-animation.lazy.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/pi-logo-animation.lazy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAQ,EAAE,UAAkB,EAAE,OAAe;IAChF,IAAI,CAAC,CAAC,GAAG,YAAY,YAAY,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE;QAAE,OAAO;IAC/D,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IACpC,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,CACpC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAC5E,GAAG,EAAE,GAAE,CAAC,CACR,CAAC;AACH,CAAC","sourcesContent":["import { type TUI, TuiAltScreen } from \"@earendil-works/pi-tui\";\n\n/**\n * Plays the logo easter egg (see pi-logo-animation.ts), which loads on the first click. Only fullscreen mode\n * can show it, because it dissolves the rendered screen. The screen is captured before loading.\n */\nexport function playPiLogoAnimation(tui: TUI, logoColumn: number, logoRow: number): void {\n\tif (!(tui instanceof TuiAltScreen) || tui.hasOverlay()) return;\n\tconst screen = tui.getScreenLines();\n\timport(\"./pi-logo-animation.ts\").then(\n\t\t(module) => module.playPiLogoAnimation(tui, { screen, logoColumn, logoRow }),\n\t\t() => {},\n\t);\n}\n"]}