uigraph 1.0.0 → 1.0.1

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 (319) hide show
  1. package/dist/bin.mjs +134 -56911
  2. package/dist/viewer/assets/abnfDiagram-VCTEODGH-D7zWJuPJ.js +1 -0
  3. package/dist/viewer/assets/actor-avatar-Bu-mKKXB.js +1 -0
  4. package/dist/viewer/assets/{api-adapters-CnQpLiWI.js → api-adapters-tfr51BsS.js} +1 -1
  5. package/dist/viewer/assets/{api-endpoints-DCA5GNpC.js → api-endpoints-D-Whnnwd.js} +9 -9
  6. package/dist/viewer/assets/{api-group-endpoints-page-Di42W69y.js → api-group-endpoints-page-B9R1EI4i.js} +9 -9
  7. package/dist/viewer/assets/{arc-Cn8owoDw.js → arc-DauzQXFu.js} +1 -1
  8. package/dist/viewer/assets/architectureDiagram-5GKGNRK7-CXzgHd-c.js +36 -0
  9. package/dist/viewer/assets/{arrow-left-DWcMgM2U.js → arrow-left-DpQqmf17.js} +1 -1
  10. package/dist/viewer/assets/avatar-DAFUyk1i.js +43 -0
  11. package/dist/viewer/assets/badge-hR3QvPWv.js +1 -0
  12. package/dist/viewer/assets/better-delete-confirmation-modal-CGEQ5O4X.js +1 -0
  13. package/dist/viewer/assets/better-dialog-DcIxFWwk.js +1 -0
  14. package/dist/viewer/assets/{blockDiagram-I7D4REHJ-CbYzOsL_.js → blockDiagram-I7D4REHJ-CFHWUw4z.js} +2 -2
  15. package/dist/viewer/assets/{brands-Bd4RklRx.js → brands-DtmA1AhP.js} +1 -1
  16. package/dist/viewer/assets/button-DZj74qS7.js +1 -0
  17. package/dist/viewer/assets/{c4Diagram-7LVT6UL2-CLkVbphC.js → c4Diagram-7LVT6UL2-BHSggPKI.js} +6 -6
  18. package/dist/viewer/assets/{calendar-C0xdI_ag.js → calendar-Bolgc8E5.js} +1 -1
  19. package/dist/viewer/assets/channel-CNRSofFP.js +1 -0
  20. package/dist/viewer/assets/{check-XjanpAFg.js → check-BpmCQNbj.js} +1 -1
  21. package/dist/viewer/assets/checkbox-CFJfXL6R.js +1 -0
  22. package/dist/viewer/assets/{chevron-down-R7pQzyLD.js → chevron-down-DDsUE_xz.js} +1 -1
  23. package/dist/viewer/assets/{chevron-up-CRPypfOs.js → chevron-up-DVznKMGv.js} +1 -1
  24. package/dist/viewer/assets/{chunk-2Q5K7J3B-CcvtugCu.js → chunk-2Q5K7J3B-CNfz5YDQ.js} +1 -1
  25. package/dist/viewer/assets/{chunk-5VM5RSS4-CpZHHr12.js → chunk-5VM5RSS4-CwIhjvMe.js} +1 -1
  26. package/dist/viewer/assets/{chunk-F27PBJKO-DeAl4iOc.js → chunk-F27PBJKO-YFexFJof.js} +1 -1
  27. package/dist/viewer/assets/{chunk-IMKFNOWR-BfrPe7pS.js → chunk-IMKFNOWR-GY2yrvuo.js} +1 -1
  28. package/dist/viewer/assets/{chunk-JWPE2WC7-DDjyvUmZ.js → chunk-JWPE2WC7-xd0JGvne.js} +1 -1
  29. package/dist/viewer/assets/chunk-OB3PAWPO-DJIP1M4r.js +12 -0
  30. package/dist/viewer/assets/{chunk-POPQ4Y6H-DkDb0mzz.js → chunk-POPQ4Y6H-Bh6rizEy.js} +1 -1
  31. package/dist/viewer/assets/{chunk-SVP7TREG-D-K2XIGs.js → chunk-SVP7TREG-DtNrjvpq.js} +1 -1
  32. package/dist/viewer/assets/{chunk-TICWLB2K-DWMQQx6z.js → chunk-TICWLB2K-DrERwtw8.js} +1 -1
  33. package/dist/viewer/assets/{chunk-XXDRQBXY-DfkljAyM.js → chunk-XXDRQBXY-fYo04iwY.js} +1 -1
  34. package/dist/viewer/assets/{circle-alert-pm13M-Ef.js → circle-alert-Bl7DXYD_.js} +1 -1
  35. package/dist/viewer/assets/classDiagram-ZZMXUADV-D7PO-ME9.js +1 -0
  36. package/dist/viewer/assets/classDiagram-v2-VYDZK3BY-D7PO-ME9.js +1 -0
  37. package/dist/viewer/assets/color-input-ClkkG_kZ.js +11 -0
  38. package/dist/viewer/assets/{common-Y7ySZBdh.js → common-DLCsGQ-t.js} +1 -1
  39. package/dist/viewer/assets/{component-icons-D1BDAuEt.js → component-icons-MJ61E9nt.js} +2 -2
  40. package/dist/viewer/assets/{copy-CN4K2f_R.js → copy-DMJJonQF.js} +1 -1
  41. package/dist/viewer/assets/cose-bilkent-JH36ORCC-Dplz8nVT.js +1 -0
  42. package/dist/viewer/assets/cross-button-D5qst1tj.js +1 -0
  43. package/dist/viewer/assets/{cynefin-OW5HDTMX-yz-uw9Kz.js → cynefin-OW5HDTMX-DiBs4CI8.js} +1 -1
  44. package/dist/viewer/assets/cynefinDiagram-5FMLGOSQ-COXS8-dI.js +62 -0
  45. package/dist/viewer/assets/{dagre-GXQ25YYZ-zjZDwXOe.js → dagre-GXQ25YYZ-K8qvfG8D.js} +2 -2
  46. package/dist/viewer/assets/dashboard-diagrams-page-Cb0xNr4W.js +2 -0
  47. package/dist/viewer/assets/dashboard-diagrams-page-inner-CD--zr5q.js +1 -0
  48. package/dist/viewer/assets/dashboard-docs-page-BfWR9Ai9.js +2 -0
  49. package/dist/viewer/assets/dashboard-docs-page-inner-BLbX-YwF.js +67 -0
  50. package/dist/viewer/assets/dashboard-layout-sTeeHNsZ.js +1 -0
  51. package/dist/viewer/assets/dashboard-lens-layout-D-tu_4kn.js +1 -0
  52. package/dist/viewer/assets/dashboard-map-frame-page-7pDmbTSe.js +1 -0
  53. package/dist/viewer/assets/dashboard-plans-page-CfwOZ34A.js +1 -0
  54. package/dist/viewer/assets/dashboard-service-apis-k93fjW51.js +1 -0
  55. package/dist/viewer/assets/{dashboard-service-diagrams-CIjk95Jk.js → dashboard-service-diagrams-BIWUxX-Y.js} +3 -3
  56. package/dist/viewer/assets/dashboard-service-docs-CnniTD6Q.js +1 -0
  57. package/dist/viewer/assets/{dashboard-service-overview-CzePVPjl.js → dashboard-service-overview-CGBu4omY.js} +5 -5
  58. package/dist/viewer/assets/dashboard-services-DEscIO2O.js +1 -0
  59. package/dist/viewer/assets/{db-type-badge-DOgu1Pyc.js → db-type-badge-UbPgpwQf.js} +2 -2
  60. package/dist/viewer/assets/debounce-Cp8eREM4-D7o-Pzb-.js +2 -0
  61. package/dist/viewer/assets/{dependencies-CYdEztHw.js → dependencies-DK2GDlhQ.js} +1 -1
  62. package/dist/viewer/assets/{dependency-graph-DbyfN-rC.js → dependency-graph-xBEnCS0J.js} +3 -3
  63. package/dist/viewer/assets/{diagram-S7CK7UJ4-q-NHkUCx.js → diagram-S7CK7UJ4-D-liadVe.js} +2 -2
  64. package/dist/viewer/assets/diagram-UQ7AKVKN-CnA8mgXp.js +41 -0
  65. package/dist/viewer/assets/{diagram-VSXAHHWV-DZc1kHGx.js → diagram-VSXAHHWV-Ck7dgRFR.js} +2 -2
  66. package/dist/viewer/assets/diagram-VX7I27RA-Cm1LHbu3.js +24 -0
  67. package/dist/viewer/assets/diagram-Z3DM3KII-DV3yBUCB.js +24 -0
  68. package/dist/viewer/assets/diagram-live-preview-DzJ7Nxp1.js +2 -0
  69. package/dist/viewer/assets/{diagram-portal-page-CWxuok9E.js → diagram-portal-page-gguGLULH.js} +24 -24
  70. package/dist/viewer/assets/{diagrams-C1xkRPqT.js → diagrams-BqBSv2eb.js} +4 -4
  71. package/dist/viewer/assets/dialog-D7wzTt0L.js +6 -0
  72. package/dist/viewer/assets/{doc-file-content-B06roi8L.js → doc-file-content-Be0au9Vo.js} +4 -4
  73. package/dist/viewer/assets/{download-CLdCXVsO.js → download-DhyZ3g4F.js} +1 -1
  74. package/dist/viewer/assets/ebnfDiagram-PWID7BFC-BXbHVQvG.js +1 -0
  75. package/dist/viewer/assets/{editor-vqK4qAnB.js → editor-F9o4zoeB.js} +2 -2
  76. package/dist/viewer/assets/{erDiagram-RLTQ6QDP-BWuA-aqV.js → erDiagram-RLTQ6QDP-DMfiWput.js} +2 -2
  77. package/dist/viewer/assets/{file-text-BvszilVL.js → file-text-BFqJQ67P.js} +1 -1
  78. package/dist/viewer/assets/flow-diagram-preview-B83UU1n_.js +1 -0
  79. package/dist/viewer/assets/{flowDiagram-HODETNUW-Db0QtNj4.js → flowDiagram-HODETNUW-BNFS2Mkr.js} +1 -1
  80. package/dist/viewer/assets/ganttDiagram-EL5Y4UJY-DFDsYJNp.js +292 -0
  81. package/dist/viewer/assets/gitGraphDiagram-WWUBYQGX-BVHabPDp.js +106 -0
  82. package/dist/viewer/assets/global-loader-XJO9_e0l.js +1 -0
  83. package/dist/viewer/assets/{globe-Jl6eIZmG.js → globe-CJ35KsQW.js} +1 -1
  84. package/dist/viewer/assets/gql-FFIj8zdp.js +1 -0
  85. package/dist/viewer/assets/{grid-scroll-body-CPqSxU6-.js → grid-scroll-body-DC5pYDPJ.js} +2 -2
  86. package/dist/viewer/assets/iconBase-DtqdW2XR.js +1 -0
  87. package/dist/viewer/assets/index-B6MxYIzs.js +1 -0
  88. package/dist/viewer/assets/index-BC5xdBQU.js +48 -0
  89. package/dist/viewer/assets/index-BIrx3oY4.js +1 -0
  90. package/dist/viewer/assets/{index-jm22RWpY.js → index-BZGsDmUx.js} +5 -5
  91. package/dist/viewer/assets/{index-Poftp9f1.js → index-BZXhpoWr.js} +4 -4
  92. package/dist/viewer/assets/index-Bn2bqqMd.js +1 -0
  93. package/dist/viewer/assets/{index-HU5pz3kj.js → index-BpCVYTvP.js} +36 -36
  94. package/dist/viewer/assets/{index-Bt2YHgxl.js → index-CBOYhBKJ.js} +1 -1
  95. package/dist/viewer/assets/index-CH7cEAxj.js +17 -0
  96. package/dist/viewer/assets/index-CIf0GId3.js +74 -0
  97. package/dist/viewer/assets/{index-D7MEHpJf.js → index-Ck66Ic_p.js} +4 -4
  98. package/dist/viewer/assets/index-Cp9mIQ8F.js +1 -0
  99. package/dist/viewer/assets/{index-c6Bxcoqm.js → index-DDmBuMKI.js} +1 -1
  100. package/dist/viewer/assets/{index-BSyJbFDG.js → index-DY3BFyb6.js} +1 -1
  101. package/dist/viewer/assets/{index-BS94XVnd.js → index-DkzZ-ZvR.js} +1 -1
  102. package/dist/viewer/assets/{index-C_43VC19.js → index-PglMbhys.js} +1 -1
  103. package/dist/viewer/assets/infoDiagram-27XIBGKW-CG-wwxBf.js +2 -0
  104. package/dist/viewer/assets/input--C59pq6j.js +1 -0
  105. package/dist/viewer/assets/{ishikawaDiagram-5VMMS53U-C4PzFnZ4.js → ishikawaDiagram-5VMMS53U-BlgV7ceJ.js} +2 -2
  106. package/dist/viewer/assets/{journeyDiagram-3NMN7TZE-Dpn3bBNo.js → journeyDiagram-3NMN7TZE-Cn03_Xl6.js} +2 -2
  107. package/dist/viewer/assets/{kanban-definition-UXKFOSKX-CJ99H4G6.js → kanban-definition-UXKFOSKX-CJogvDPY.js} +6 -6
  108. package/dist/viewer/assets/{layout-Bfvxt_D5.js → layout-B26eC4yQ.js} +1 -1
  109. package/dist/viewer/assets/{lens-run-page-DZneics-.js → lens-run-page-Ba1ppzJt.js} +3 -3
  110. package/dist/viewer/assets/lens-runs-page-BnUS57LM.js +1 -0
  111. package/dist/viewer/assets/{link-2-C75goIOt.js → link-2-D1e0xznG.js} +1 -1
  112. package/dist/viewer/assets/linked-project-dot-BY1gEES9.js +543 -0
  113. package/dist/viewer/assets/{loader-circle-C5jZoM7X.js → loader-circle-CiqyoJF7.js} +1 -1
  114. package/dist/viewer/assets/{merge-Cy7YkrN7.js → merge-BhOMvhW1.js} +1 -1
  115. package/dist/viewer/assets/mermaid.core-BDgZg3kW.js +312 -0
  116. package/dist/viewer/assets/method-badge-DErZP7y5.js +1 -0
  117. package/dist/viewer/assets/{mindmap-definition-YA3MSWOX-yQCKA-K4.js → mindmap-definition-YA3MSWOX-DFkLu0ac.js} +2 -2
  118. package/dist/viewer/assets/nav-links-DZWMpwMR.js +61 -0
  119. package/dist/viewer/assets/{network-COWNXGMM.js → network-B1apzT1s.js} +1 -1
  120. package/dist/viewer/assets/{nosql-editor-modal-DTiWkc_r.js → nosql-editor-modal-CvH0SWAi.js} +5 -5
  121. package/dist/viewer/assets/not-found-page-C-fn8QeM.js +1 -0
  122. package/dist/viewer/assets/organization-dependency-graph-page-BryP-iJL.js +1 -0
  123. package/dist/viewer/assets/pegDiagram-XKGWAZYB-g1cM14-L.js +1 -0
  124. package/dist/viewer/assets/{pieDiagram-E7YTZNPT-DqnkpCX4.js → pieDiagram-E7YTZNPT-WEnDsMY3.js} +2 -2
  125. package/dist/viewer/assets/{plus-DQakmTjA.js → plus-DbyuOgKB.js} +1 -1
  126. package/dist/viewer/assets/popover-476u3TN0.js +1 -0
  127. package/dist/viewer/assets/preload-helper-BlTxHScW.js +1 -0
  128. package/dist/viewer/assets/{quadrantDiagram-AXDQQJYC-iQjJfars.js → quadrantDiagram-AXDQQJYC-NdfQCpzF.js} +2 -2
  129. package/dist/viewer/assets/query-D9oj6LGx.js +50 -0
  130. package/dist/viewer/assets/{quill-rCHj4fCw.js → quill-Cde5JMRD.js} +1 -1
  131. package/dist/viewer/assets/railroadDiagram-O6MQD6OU-BYhlXlMY.js +1 -0
  132. package/dist/viewer/assets/{react-BNzYaZuG.js → react-Bx48XWN4.js} +1 -1
  133. package/dist/viewer/assets/react-flow-wrapper-BcbvHgxz.js +277 -0
  134. package/dist/viewer/assets/{requirementDiagram-BXWQKSXE-Bv-Vh1dW.js → requirementDiagram-BXWQKSXE-C25Bcm2L.js} +2 -2
  135. package/dist/viewer/assets/{sankeyDiagram-P5KCCOFB-C__uD07f.js → sankeyDiagram-P5KCCOFB-h8LiCsgk.js} +2 -2
  136. package/dist/viewer/assets/scroll-area-RagrStGj.js +6 -0
  137. package/dist/viewer/assets/{search-DW-qhXLk.js → search-vw7ucoOs.js} +1 -1
  138. package/dist/viewer/assets/section-loader-C4hOfhQS.js +1 -0
  139. package/dist/viewer/assets/section-not-found-BnrXiPog.js +1 -0
  140. package/dist/viewer/assets/select-D9fbrr7O.js +1 -0
  141. package/dist/viewer/assets/{sequenceDiagram-WJ2MYXX4-1RbvcHwO.js → sequenceDiagram-WJ2MYXX4-CDRVvD30.js} +2 -2
  142. package/dist/viewer/assets/{service-context-C17u_Fw9.js → service-context-D5nBtU18.js} +1 -1
  143. package/dist/viewer/assets/{service-database-list-page-cYuDHIls.js → service-database-list-page-DBjaDLVy.js} +2 -2
  144. package/dist/viewer/assets/service-database-page-CenNCgwf.js +2 -0
  145. package/dist/viewer/assets/service-database-page-inner-gS51TQTZ.js +85 -0
  146. package/dist/viewer/assets/{service-doc-Dir8g83J.js → service-doc-C-jHqT1U.js} +4 -4
  147. package/dist/viewer/assets/{service-doc-preview-modal-bJ6tJ5YR.js → service-doc-preview-modal-5sX6FOu1.js} +2 -2
  148. package/dist/viewer/assets/service-layout-Bf0vZBCH.js +1 -0
  149. package/dist/viewer/assets/service-pages-CFikvX4t.js +1 -0
  150. package/dist/viewer/assets/{services-Crqkffr5.js → services-Ivav34WC.js} +4 -4
  151. package/dist/viewer/assets/{share-2-BmYmqN4k.js → share-2-CQEaWbfH.js} +1 -1
  152. package/dist/viewer/assets/sizeCapture-INFHLROL-BJ6ndnPM.js +1 -0
  153. package/dist/viewer/assets/stateDiagram-D77RDMKH-B_tNCX3o.js +1 -0
  154. package/dist/viewer/assets/stateDiagram-v2-MP3YSRHH-Dl9wqdli.js +1 -0
  155. package/dist/viewer/assets/{style-DgSU0bQl.js → style-BPesJvJr.js} +8 -8
  156. package/dist/viewer/assets/super-circle-loader-DSkos6uP.js +1 -0
  157. package/dist/viewer/assets/super-logo-loader-Cxlbn6MB.js +1 -0
  158. package/dist/viewer/assets/swimlanes-42K2YHIH-CzURzYwf.js +1 -0
  159. package/dist/viewer/assets/swimlanesDiagram-VR7AAH4N-DrIlwFtk.js +8 -0
  160. package/dist/viewer/assets/table-B4pFND-o.js +1 -0
  161. package/dist/viewer/assets/textarea-Clgdv3Oi.js +1 -0
  162. package/dist/viewer/assets/{timeline-definition-24CTP7MA-C4yuLwUH.js → timeline-definition-24CTP7MA-D0YXQE1U.js} +2 -2
  163. package/dist/viewer/assets/ui-graph-logo-gHowu5gP.js +1 -0
  164. package/dist/viewer/assets/{upload-CRsS43j9.js → upload-CYb3nN_5.js} +1 -1
  165. package/dist/viewer/assets/{uploads-BOQHX9l4.js → uploads-CX2kdXbM.js} +8 -8
  166. package/dist/viewer/assets/{use-debounced-value-Ba-kkCUY.js → use-debounced-value-BpNFJd3C.js} +1 -1
  167. package/dist/viewer/assets/{use-localstorage-DIisTx-J.js → use-localstorage-D233xVb0.js} +1 -1
  168. package/dist/viewer/assets/use-permissions-BvmxJJ5r.js +1 -0
  169. package/dist/viewer/assets/{use-scoped-storage-C4RzED-E.js → use-scoped-storage-DL1XVp1j.js} +1 -1
  170. package/dist/viewer/assets/useMutation-D5ZHwHsx.js +1 -0
  171. package/dist/viewer/assets/useQuery-Dhe6uxrL.js +1 -0
  172. package/dist/viewer/assets/{vennDiagram-4TSXK5OY-BCtqXZqe.js → vennDiagram-4TSXK5OY-SSjHlqCQ.js} +2 -2
  173. package/dist/viewer/assets/{wardleyDiagram-VM6X3IG4-D3OtZJoT.js → wardleyDiagram-VM6X3IG4-CZWNdQxH.js} +2 -2
  174. package/dist/viewer/assets/{xychartDiagram-S5SC5T6Z-DxLL2CHH.js → xychartDiagram-S5SC5T6Z-B2qAGeb0.js} +2 -2
  175. package/dist/viewer/assets/zod-BMU4UTQt.js +1 -0
  176. package/dist/viewer/index.html +10 -1
  177. package/package.json +56 -56
  178. package/dist/abort-signals-B4fc3ahg.mjs +0 -34
  179. package/dist/anthropic-messages-KPxCHqBN.mjs +0 -14327
  180. package/dist/auth-storage-BvNH97p9.mjs +0 -2180
  181. package/dist/azure-openai-config-BbeCSg4y.mjs +0 -55
  182. package/dist/azure-openai-responses-BRzy8RfL.mjs +0 -182
  183. package/dist/classifier-shared-DBUHiTGw.mjs +0 -105
  184. package/dist/cli-2R6QQFp1.mjs +0 -451
  185. package/dist/cloudflare-workers-ai-system-one-BfqwmRQf.mjs +0 -44
  186. package/dist/config-D8DMGzIq.mjs +0 -647
  187. package/dist/cross-spawn-B2jIQPlu.mjs +0 -404
  188. package/dist/diagnostics-xdSgQR8t.mjs +0 -131
  189. package/dist/dist-BRyghrKX.mjs +0 -404
  190. package/dist/dist-D0EzrblG.mjs +0 -12161
  191. package/dist/dist-EKhnHWHG.mjs +0 -140221
  192. package/dist/dist-pQtuusFv.mjs +0 -1243
  193. package/dist/easter-egg-3d-C9_btlWn.mjs +0 -1225
  194. package/dist/env-api-keys-uytNub6O.mjs +0 -122
  195. package/dist/error-body-FhmCtR7m.mjs +0 -101
  196. package/dist/esm-D5isprgl.mjs +0 -1533
  197. package/dist/esm-DnqE4pfM.mjs +0 -104876
  198. package/dist/execute-BoTKl80U.mjs +0 -1715
  199. package/dist/github-copilot-headers-DWcTgoXr.mjs +0 -22
  200. package/dist/google-generative-ai-Brs5YpJo.mjs +0 -332
  201. package/dist/google-shared-2CyYa4VE.mjs +0 -33438
  202. package/dist/google-vertex-DZDUQPKa.mjs +0 -378
  203. package/dist/hash-DN7ukSfd.mjs +0 -16
  204. package/dist/headers-GhQHLk-3.mjs +0 -17
  205. package/dist/jiti-9kWALm4Y.mjs +0 -5439
  206. package/dist/jiti-loader-f21DrY1K.mjs +0 -27
  207. package/dist/jiti-static-loader-BI_w28l7.mjs +0 -41704
  208. package/dist/json-parse-B2mHg7o7.mjs +0 -381
  209. package/dist/keybinding-hints-D0nLU3ZH.mjs +0 -17899
  210. package/dist/lib-Dj1gKQJc.mjs +0 -24379
  211. package/dist/llama-cpp-classify-C73BoMYd.mjs +0 -344
  212. package/dist/mistral-conversations-DXVR7znL.mjs +0 -698
  213. package/dist/models-DBdii9gQ.mjs +0 -1255
  214. package/dist/multipart-parser-DLw9Z0uJ.mjs +0 -298
  215. package/dist/node-B0NU8X55.mjs +0 -2479
  216. package/dist/node-B8gaKm9g.mjs +0 -23
  217. package/dist/openai-I3_AqKDX.mjs +0 -17357
  218. package/dist/openai-codex-responses-PcZHDuBD.mjs +0 -1198
  219. package/dist/openai-completions-a_mH01ii.mjs +0 -994
  220. package/dist/openai-decisions-Du8y4mQG.mjs +0 -142
  221. package/dist/openai-prompt-cache-Bc6qNWt0.mjs +0 -8
  222. package/dist/openai-responses-a9lV_U7O.mjs +0 -270
  223. package/dist/openai-responses-shared-CDs_PBiH.mjs +0 -598
  224. package/dist/openrouter-images-D0Zc8Cjs.mjs +0 -125
  225. package/dist/photon_rs-DCvMOMu0.mjs +0 -4252
  226. package/dist/pi-messages-B5ietIBq.mjs +0 -306
  227. package/dist/provider-env-BJhgA66g.mjs +0 -37
  228. package/dist/provider-retry-DXYM7rVE.mjs +0 -79
  229. package/dist/runtime-DTkBxiaM.mjs +0 -2822
  230. package/dist/sanitize-unicode-CqChtoM6.mjs +0 -26
  231. package/dist/shell-836_JFnI.mjs +0 -162
  232. package/dist/source-CKPndhKl.mjs +0 -478
  233. package/dist/src-DNm2QRm3.mjs +0 -5028
  234. package/dist/system-one-shared-DUAFtNa8.mjs +0 -75
  235. package/dist/token-DEUkymby.mjs +0 -56
  236. package/dist/token-util-Cx5S4eKt.mjs +0 -3
  237. package/dist/tool-DHDYqsyG.mjs +0 -6673
  238. package/dist/transform-messages-BClk99Vn.mjs +0 -477
  239. package/dist/typesafe-system-one-D2d8j8hZ.mjs +0 -24
  240. package/dist/typescript-Br-vsRJV.mjs +0 -6737
  241. package/dist/uuid-CNCZqNBb.mjs +0 -49
  242. package/dist/v2-1z8ijsD3.mjs +0 -6120
  243. package/dist/viewer/assets/abnfDiagram-VCTEODGH-j5YaKnl9.js +0 -1
  244. package/dist/viewer/assets/actor-avatar-DqmoY8Xc.js +0 -1
  245. package/dist/viewer/assets/architectureDiagram-5GKGNRK7-D80cJKz_.js +0 -36
  246. package/dist/viewer/assets/avatar-BI7D-Aia.js +0 -43
  247. package/dist/viewer/assets/badge-870-A4Y6.js +0 -1
  248. package/dist/viewer/assets/better-delete-confirmation-modal-Dib31LVb.js +0 -1
  249. package/dist/viewer/assets/better-dialog-D3AAiahr.js +0 -1
  250. package/dist/viewer/assets/button-DadqadpO.js +0 -1
  251. package/dist/viewer/assets/channel-DRkt3LIn.js +0 -1
  252. package/dist/viewer/assets/checkbox-BXpR079x.js +0 -1
  253. package/dist/viewer/assets/classDiagram-ZZMXUADV-G5CebNaC.js +0 -1
  254. package/dist/viewer/assets/classDiagram-v2-VYDZK3BY-G5CebNaC.js +0 -1
  255. package/dist/viewer/assets/color-input-Efm-lxDy.js +0 -11
  256. package/dist/viewer/assets/cose-bilkent-JH36ORCC-CrSHFmnp.js +0 -1
  257. package/dist/viewer/assets/cross-button-5Sr5rWVP.js +0 -1
  258. package/dist/viewer/assets/cynefinDiagram-5FMLGOSQ-Bdl_eBdu.js +0 -62
  259. package/dist/viewer/assets/dashboard-diagrams-page-DMupOe1m.js +0 -2
  260. package/dist/viewer/assets/dashboard-diagrams-page-inner-Dh0yKh2A.js +0 -1
  261. package/dist/viewer/assets/dashboard-docs-page-DWJ1qOQz.js +0 -2
  262. package/dist/viewer/assets/dashboard-docs-page-inner-Fs6G3oGo.js +0 -67
  263. package/dist/viewer/assets/dashboard-layout-D36InAaB.js +0 -1
  264. package/dist/viewer/assets/dashboard-lens-layout-Cv1Xx3hY.js +0 -1
  265. package/dist/viewer/assets/dashboard-map-frame-page-CTn61NUO.js +0 -1
  266. package/dist/viewer/assets/dashboard-plans-page-DxFJkrgK.js +0 -1
  267. package/dist/viewer/assets/dashboard-service-apis-BHtD9s5z.js +0 -1
  268. package/dist/viewer/assets/dashboard-service-docs-Uv_1uxxO.js +0 -1
  269. package/dist/viewer/assets/dashboard-services-CUP-L4Jg.js +0 -1
  270. package/dist/viewer/assets/diagram-UQ7AKVKN-DhFcurW6.js +0 -41
  271. package/dist/viewer/assets/diagram-VX7I27RA-DE1nREE8.js +0 -24
  272. package/dist/viewer/assets/diagram-Z3DM3KII-CSrYcCbc.js +0 -24
  273. package/dist/viewer/assets/diagram-live-preview-i5doxXLH.js +0 -2
  274. package/dist/viewer/assets/dialog-D_HtNS17.js +0 -6
  275. package/dist/viewer/assets/ebnfDiagram-PWID7BFC-BfL8m_sf.js +0 -1
  276. package/dist/viewer/assets/flow-diagram-preview-T0Z4iMVU.js +0 -1
  277. package/dist/viewer/assets/ganttDiagram-EL5Y4UJY-CsITpniw.js +0 -292
  278. package/dist/viewer/assets/gitGraphDiagram-WWUBYQGX-B4eCBGoe.js +0 -106
  279. package/dist/viewer/assets/iconBase-BoDZfJgC.js +0 -1
  280. package/dist/viewer/assets/index-5E1tJ7yK.js +0 -125
  281. package/dist/viewer/assets/index-7XpV2DRw.js +0 -1
  282. package/dist/viewer/assets/index-C0Rs3s9Z.js +0 -1
  283. package/dist/viewer/assets/index-CzHjJWeV.js +0 -1
  284. package/dist/viewer/assets/index-DcEA6SIV.js +0 -74
  285. package/dist/viewer/assets/infoDiagram-27XIBGKW-lTebN5Ix.js +0 -2
  286. package/dist/viewer/assets/input-YvHTVS0E.js +0 -1
  287. package/dist/viewer/assets/lens-runs-page-DoAOObxx.js +0 -1
  288. package/dist/viewer/assets/linked-project-dot-Ds2uEmJ9.js +0 -543
  289. package/dist/viewer/assets/mermaid.core-BCRBv8Us.js +0 -312
  290. package/dist/viewer/assets/method-badge-DMYDKdDZ.js +0 -1
  291. package/dist/viewer/assets/nav-links-8vT2ixiI.js +0 -61
  292. package/dist/viewer/assets/not-found-page-CnfLlhS4.js +0 -1
  293. package/dist/viewer/assets/organization-dependency-graph-page-3xqIxjNx.js +0 -1
  294. package/dist/viewer/assets/pegDiagram-XKGWAZYB-CMXqeAum.js +0 -1
  295. package/dist/viewer/assets/popover-CN9ni1N3.js +0 -1
  296. package/dist/viewer/assets/railroadDiagram-O6MQD6OU-CfqToX3W.js +0 -1
  297. package/dist/viewer/assets/react-flow-wrapper-BPlRstyO.js +0 -276
  298. package/dist/viewer/assets/scroll-area-BodE-n7W.js +0 -6
  299. package/dist/viewer/assets/section-loader-BzpYM_Nx.js +0 -1
  300. package/dist/viewer/assets/select-DDtnmSET.js +0 -1
  301. package/dist/viewer/assets/service-database-page-CMi1wF4h.js +0 -2
  302. package/dist/viewer/assets/service-database-page-inner-CoqAj93L.js +0 -85
  303. package/dist/viewer/assets/service-layout-0NMm_bKG.js +0 -1
  304. package/dist/viewer/assets/service-pages-dfnc91SU.js +0 -1
  305. package/dist/viewer/assets/sizeCapture-INFHLROL-BRJi3gCg.js +0 -1
  306. package/dist/viewer/assets/stateDiagram-D77RDMKH-DdLsfxgy.js +0 -1
  307. package/dist/viewer/assets/stateDiagram-v2-MP3YSRHH-DFwg8Qki.js +0 -1
  308. package/dist/viewer/assets/super-circle-loader-D8MElOMh.js +0 -1
  309. package/dist/viewer/assets/super-logo-loader-DJYiRbCS.js +0 -1
  310. package/dist/viewer/assets/swimlanes-42K2YHIH-AuYjrPqh.js +0 -1
  311. package/dist/viewer/assets/swimlanesDiagram-VR7AAH4N-0nIGA8_4.js +0 -8
  312. package/dist/viewer/assets/table-Bi4Auk9Z.js +0 -1
  313. package/dist/viewer/assets/textarea-MgxZ5x6-.js +0 -1
  314. package/dist/viewer/assets/ui-graph-logo-D4jRhd4z.js +0 -1
  315. package/dist/viewer/assets/use-permissions-6JVET753.js +0 -1
  316. package/dist/viewer/assets/useMutation-CmVaR9zz.js +0 -1
  317. package/dist/viewer/assets/useQuery-B8yYhO0c.js +0 -1
  318. package/dist/viewer/assets/zod-Dc4H6VVJ.js +0 -1
  319. package/dist/virtual-modules-DnCx0Gdx.mjs +0 -340
@@ -1,1225 +0,0 @@
1
- import { Ct as colorToRgb, M as theme, Mt as visibleWidth, Ot as rgbColor, St as backgroundAnsi, Tt as indexedColor, ct as getKeybindings, t as formatKeyText, wt as foregroundAnsi } from "./keybinding-hints-D0nLU3ZH.mjs";
2
- import { n as isArminPixel } from "./dist-EKhnHWHG.mjs";
3
- //#region node_modules/.pnpm/@earendil-works+pi-coding-agent@1.2.0_@aws-sdk+credential-provider-node@3.972.86_@model_cb83c1bd7a7ff5cede8c43e329c5cf76/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/easter-egg-3d.js
4
- const DEPTH = .7;
5
- const FLY_START = .1;
6
- const FLY_DURATION = 1.3;
7
- /** Braille dots per pixel when a model without an origin appears, growing from a speck at the center. */
8
- const START_SCALE = .1;
9
- function createModel(columns, rows, pixel, options) {
10
- const blocks = [];
11
- for (let row = 0; row < rows; row++) for (let column = 0; column < columns; column++) {
12
- const color = pixel(column, row);
13
- if (color) blocks.push({
14
- home: [
15
- column,
16
- row,
17
- 0
18
- ],
19
- color
20
- });
21
- }
22
- return {
23
- columns,
24
- rows,
25
- blocks,
26
- cameraDistance: options.cameraDistance,
27
- radius: Math.hypot(columns / 2, rows / 2, 1.35),
28
- widthShare: options.widthShare,
29
- puzzleMoves: (random) => options.puzzleMoves(random, blocks.length),
30
- origin: options.origin
31
- };
32
- }
33
- const CORAL = [
34
- 228,
35
- 138,
36
- 122
37
- ];
38
- const BLUE = [
39
- 79,
40
- 142,
41
- 179
42
- ];
43
- const YELLOW = [
44
- 234,
45
- 182,
46
- 93
47
- ];
48
- const PI_LOGO_PIXELS = [
49
- "ccc.",
50
- "b.c.",
51
- "bb.y",
52
- "b..y"
53
- ];
54
- const PI_LOGO_COLORS = {
55
- c: CORAL,
56
- b: BLUE,
57
- y: YELLOW
58
- };
59
- function piLogoModel(origin) {
60
- return createModel(4, 4, (column, row) => PI_LOGO_COLORS[PI_LOGO_PIXELS[row][column]], {
61
- cameraDistance: 10,
62
- widthShare: .35,
63
- puzzleMoves: (random) => random < .4 ? 2 : 1,
64
- origin
65
- });
66
- }
67
- function arminModel(color) {
68
- return createModel(31, 36, (column, row) => isArminPixel(column, row) ? color : void 0, {
69
- cameraDistance: 80,
70
- widthShare: .45,
71
- puzzleMoves: (random, blockCount) => Math.round(blockCount * (.03 + random * .04)),
72
- origin: void 0
73
- });
74
- }
75
- const PUZZLE_START = 4.4;
76
- const PUZZLE_STEP = .3;
77
- const PUZZLE_STEPS = 12;
78
- const PUZZLE_RETURN = 1;
79
- const PUZZLE_CYCLE = 5.199999999999999;
80
- const PUZZLE_MOVES = [
81
- [
82
- 1,
83
- 0,
84
- 0
85
- ],
86
- [
87
- -1,
88
- 0,
89
- 0
90
- ],
91
- [
92
- 0,
93
- 1,
94
- 0
95
- ],
96
- [
97
- 0,
98
- -1,
99
- 0
100
- ],
101
- [
102
- 1,
103
- 0,
104
- 0
105
- ],
106
- [
107
- -1,
108
- 0,
109
- 0
110
- ],
111
- [
112
- 0,
113
- 1,
114
- 0
115
- ],
116
- [
117
- 0,
118
- -1,
119
- 0
120
- ],
121
- [
122
- 0,
123
- 0,
124
- 1
125
- ],
126
- [
127
- 0,
128
- 0,
129
- -1
130
- ]
131
- ];
132
- /** Block positions after each step of one shuffle cycle, starting at home. Deterministic per cycle. */
133
- function shuffleSteps(model, cycle) {
134
- const { columns, rows } = model;
135
- let positions = model.blocks.map((block) => block.home);
136
- const steps = [positions];
137
- const lastMoved = /* @__PURE__ */ new Set();
138
- let random = cycle * 7919 + 1;
139
- const next = () => hash(random++);
140
- const key = ([x, y, z]) => ((z + 1) * rows + y) * columns + x;
141
- for (let step = 0; step < PUZZLE_STEPS; step++) {
142
- const occupied = new Set(positions.map(key));
143
- const nextPositions = [...positions];
144
- const moved = /* @__PURE__ */ new Set();
145
- const moveCount = model.puzzleMoves(next());
146
- for (let move = 0; move < moveCount; move++) {
147
- const candidates = [];
148
- for (let block = 0; block < positions.length; block++) {
149
- if (moved.has(block)) continue;
150
- const [x, y, z] = positions[block];
151
- for (const [dx, dy, dz] of PUZZLE_MOVES) {
152
- const target = [
153
- x + dx,
154
- y + dy,
155
- z + dz
156
- ];
157
- if (target[0] < 0 || target[0] >= columns || target[1] < 0 || target[1] >= rows) continue;
158
- if (target[2] < -1 || target[2] > 1 || occupied.has(key(target))) continue;
159
- candidates.push({
160
- block,
161
- target
162
- });
163
- }
164
- }
165
- const fresh = candidates.filter((candidate) => !lastMoved.has(candidate.block));
166
- const pool = fresh.length > 0 ? fresh : candidates;
167
- const choice = pool[Math.floor(next() * pool.length)];
168
- if (!choice) break;
169
- occupied.add(key(choice.target));
170
- nextPositions[choice.block] = choice.target;
171
- moved.add(choice.block);
172
- }
173
- lastMoved.clear();
174
- for (const block of moved) lastMoved.add(block);
175
- positions = nextPositions;
176
- steps.push(positions);
177
- }
178
- return steps;
179
- }
180
- const FRAME_MS = 1e3 / 30;
181
- const DUST_DURATION = .35;
182
- const WAVE_SPREAD = .55;
183
- const WAVE_JITTER = .12;
184
- const DISSOLVE_END = 1.12;
185
- const BACKGROUND_FADE = .5;
186
- const EXIT_DURATION = 1.1;
187
- const STARS_START = 2.5;
188
- const STARS_FADE = 2;
189
- const STAR_DENSITY = .018;
190
- const STAR_TINTS = [
191
- [
192
- 255,
193
- 255,
194
- 255
195
- ],
196
- [
197
- 170,
198
- 195,
199
- 255
200
- ],
201
- [
202
- 255,
203
- 225,
204
- 170
205
- ],
206
- [
207
- 255,
208
- 190,
209
- 205
210
- ]
211
- ];
212
- const LOGO_COLOR_STEP = 5;
213
- const LIGHT_HALO_STRENGTH = .3;
214
- const HALO_RADIUS_X = 6;
215
- const HALO_RADIUS_Y = 3;
216
- const HALO_LEVELS = 32;
217
- const STAR_ALPHA_LEVELS = 8;
218
- const STAR_FLICKER_LEVELS = 3;
219
- const HINT_FADE = .5;
220
- const DOT_BITS = [
221
- 1,
222
- 8,
223
- 2,
224
- 16,
225
- 4,
226
- 32,
227
- 64,
228
- 128
229
- ];
230
- const BRAILLE = Array.from({ length: 256 }, (_, bits) => String.fromCharCode(10240 + bits));
231
- const LIGHT = normalize([
232
- -.45,
233
- -.6,
234
- .75
235
- ]);
236
- const HALF_VECTOR = normalize([
237
- LIGHT[0],
238
- LIGHT[1],
239
- LIGHT[2] + 1
240
- ]);
241
- function normalize(v) {
242
- const length = Math.hypot(v[0], v[1], v[2]);
243
- return [
244
- v[0] / length,
245
- v[1] / length,
246
- v[2] / length
247
- ];
248
- }
249
- function clamp01(value) {
250
- return value < 0 ? 0 : value > 1 ? 1 : value;
251
- }
252
- /** Quintic smoothstep. */
253
- function smooth(value) {
254
- const t = clamp01(value);
255
- return t * t * t * (t * (t * 6 - 15) + 10);
256
- }
257
- function easeOut(value) {
258
- const t = 1 - clamp01(value);
259
- return 1 - t * t * t;
260
- }
261
- function mix(a, b, amount) {
262
- return [
263
- a[0] + (b[0] - a[0]) * amount,
264
- a[1] + (b[1] - a[1]) * amount,
265
- a[2] + (b[2] - a[2]) * amount
266
- ];
267
- }
268
- function hash(value) {
269
- let x = Math.imul(value ^ 2654435769, 2246822507);
270
- x ^= x >>> 13;
271
- x = Math.imul(x, 3266489909);
272
- x ^= x >>> 16;
273
- return (x >>> 0) / 4294967296;
274
- }
275
- /** Whether a background is light, by relative luminance. */
276
- function isLight([r, g, b]) {
277
- return .2126 * r + .7152 * g + .0722 * b > 128;
278
- }
279
- function toRgb(color) {
280
- const { r, g, b } = colorToRgb(color);
281
- return [
282
- r,
283
- g,
284
- b
285
- ];
286
- }
287
- /** Braille dots a glyph turns into, a rough measure of how much ink it has. */
288
- function glyphInk(text, seed) {
289
- if (text.trim() === "") return 0;
290
- if (/^[.,:;'`\-_·]$/.test(text)) return 2;
291
- if (/^[\u2500-\u257f]$/.test(text)) return 3;
292
- return 4 + Math.floor(seed * 3);
293
- }
294
- const segmenter = new Intl.Segmenter();
295
- /** Parse rendered lines into cells with resolved colors. Other escape sequences (OSC, APC, cursor) are skipped. */
296
- function parseScreen(lines, width, foreground, background) {
297
- const palette = (index) => toRgb(indexedColor(index));
298
- return lines.map((line) => {
299
- const cells = [];
300
- let fg;
301
- let bg;
302
- let dim = false;
303
- let inverse = false;
304
- const applySgr = (params) => {
305
- const codes = params === "" ? ["0"] : params.split(";");
306
- for (let i = 0; i < codes.length; i++) {
307
- const parts = codes[i].split(":").map((part) => Number.parseInt(part, 10));
308
- const code = parts[0] ?? 0;
309
- if (code === 38 || code === 48) {
310
- let args;
311
- if (parts.length > 1) args = parts.slice(1).filter((part) => !Number.isNaN(part));
312
- else {
313
- const kind = Number.parseInt(codes[i + 1] ?? "", 10);
314
- const count = kind === 5 ? 2 : kind === 2 ? 4 : 1;
315
- args = codes.slice(i + 1, i + 1 + count).map((part) => Number.parseInt(part, 10));
316
- i += count;
317
- }
318
- let color;
319
- if (args[0] === 5 && args[1] !== void 0) color = palette(args[1]);
320
- else if (args[0] === 2 && args.length >= 4) color = [
321
- args[1],
322
- args[2],
323
- args[3]
324
- ];
325
- if (color) {
326
- if (code === 38) fg = color;
327
- else bg = color;
328
- }
329
- } else if (code === 0) {
330
- fg = void 0;
331
- bg = void 0;
332
- dim = false;
333
- inverse = false;
334
- } else if (code === 2) dim = true;
335
- else if (code === 22) dim = false;
336
- else if (code === 7) inverse = true;
337
- else if (code === 27) inverse = false;
338
- else if (code >= 30 && code <= 37) fg = palette(code - 30);
339
- else if (code >= 90 && code <= 97) fg = palette(code - 90 + 8);
340
- else if (code === 39) fg = void 0;
341
- else if (code >= 40 && code <= 47) bg = palette(code - 40);
342
- else if (code >= 100 && code <= 107) bg = palette(code - 100 + 8);
343
- else if (code === 49) bg = void 0;
344
- }
345
- };
346
- const pushText = (text) => {
347
- for (const { segment } of segmenter.segment(text)) {
348
- const glyphWidth = visibleWidth(segment);
349
- if (glyphWidth === 0 || cells.length + glyphWidth > width) continue;
350
- let cellFg = fg ?? foreground;
351
- let cellBg = bg;
352
- if (inverse) {
353
- cellFg = bg ?? background;
354
- cellBg = fg ?? foreground;
355
- }
356
- if (dim) cellFg = mix(cellFg, cellBg ?? background, .4);
357
- const cell = {
358
- text: segment,
359
- width: glyphWidth,
360
- fg: cellFg,
361
- bg: cellBg,
362
- delay: 0,
363
- ink: 0,
364
- seed: 0
365
- };
366
- cells.push(cell);
367
- if (glyphWidth === 2) cells.push({
368
- ...cell,
369
- text: "",
370
- width: 0
371
- });
372
- }
373
- };
374
- let i = 0;
375
- while (i < line.length) {
376
- const sequenceStart = line.indexOf("\x1B", i);
377
- if (sequenceStart === -1) {
378
- pushText(line.slice(i));
379
- break;
380
- }
381
- if (sequenceStart > i) pushText(line.slice(i, sequenceStart));
382
- const kind = line[sequenceStart + 1];
383
- if (kind === "[") {
384
- let end = sequenceStart + 2;
385
- while (end < line.length && (line.charCodeAt(end) < 64 || line.charCodeAt(end) > 126)) end++;
386
- if (line[end] === "m") applySgr(line.slice(sequenceStart + 2, end));
387
- i = end + 1;
388
- } else if (kind === "]" || kind === "_" || kind === "P" || kind === "^") {
389
- const bell = line.indexOf("\x07", sequenceStart + 2);
390
- const st = line.indexOf("\x1B\\", sequenceStart + 2);
391
- if (bell === -1 && st === -1) break;
392
- i = bell !== -1 && (st === -1 || bell < st) ? bell + 1 : st + 2;
393
- } else i = sequenceStart + 2;
394
- }
395
- return cells;
396
- });
397
- }
398
- /** Row-major 3x3 rotation matrix for yaw (y), then pitch (x), then roll (z). */
399
- function rotation(yaw, pitch, roll) {
400
- const [sy, cy, sx, cx, sz, cz] = [
401
- Math.sin(yaw),
402
- Math.cos(yaw),
403
- Math.sin(pitch),
404
- Math.cos(pitch),
405
- Math.sin(roll),
406
- Math.cos(roll)
407
- ];
408
- const ry = [
409
- cy,
410
- 0,
411
- sy,
412
- 0,
413
- 1,
414
- 0,
415
- -sy,
416
- 0,
417
- cy
418
- ];
419
- const rx = [
420
- 1,
421
- 0,
422
- 0,
423
- 0,
424
- cx,
425
- -sx,
426
- 0,
427
- sx,
428
- cx
429
- ];
430
- return multiply([
431
- cz,
432
- -sz,
433
- 0,
434
- sz,
435
- cz,
436
- 0,
437
- 0,
438
- 0,
439
- 1
440
- ], multiply(rx, ry));
441
- }
442
- function multiply(a, b) {
443
- const result = new Array(9);
444
- for (let row = 0; row < 3; row++) for (let column = 0; column < 3; column++) result[row * 3 + column] = a[row * 3] * b[column] + a[row * 3 + 1] * b[3 + column] + a[row * 3 + 2] * b[6 + column];
445
- return result;
446
- }
447
- const SPIN_RAMP = 1.4;
448
- const SPIN_SPEED = Math.PI * 2 / PUZZLE_CYCLE;
449
- const SPIN_LINGER = .6;
450
- const FIRST_FRONT_VIEW = 9.3;
451
- /** Uniform spin that accelerates from rest over SPIN_RAMP, then turns at SPIN_SPEED. */
452
- function baseSpinPhase(time) {
453
- const elapsed = time - FLY_START;
454
- if (elapsed <= 0) return 0;
455
- const u = elapsed / SPIN_RAMP;
456
- if (u < 1) return SPIN_SPEED * SPIN_RAMP * (u ** 6 - 3 * u ** 5 + 2.5 * u ** 4);
457
- return SPIN_SPEED * (SPIN_RAMP * .5 + elapsed - SPIN_RAMP);
458
- }
459
- const SPIN_ALIGNMENT = Math.PI * 2 - baseSpinPhase(FIRST_FRONT_VIEW) % (Math.PI * 2);
460
- /** Spin phase: whole turns exactly when the reassembled logo faces the camera. */
461
- function spinPhase(time) {
462
- return baseSpinPhase(time) + SPIN_ALIGNMENT * smooth((time - FLY_START) / FLY_DURATION);
463
- }
464
- /** Yaw of the logo. It matches the phase at whole turns but lingers there, so the logo reads from the front. */
465
- function spinAngle(time) {
466
- const phase = spinPhase(time);
467
- return phase - SPIN_LINGER * Math.sin(phase);
468
- }
469
- /**
470
- * Renders the model's blocks into braille cells. Only faces that point at the camera and are not covered by a
471
- * touching block are drawn. Each face is rasterized over its projected bounds by intersecting each dot's ray
472
- * with the face's plane, with a depth buffer resolving overlaps. Buffers are reused between frames.
473
- */
474
- var BlockRaster = class {
475
- /** Braille dot bits per cell. */
476
- bits = /* @__PURE__ */ new Uint8Array(0);
477
- /** Lit dots per cell. */
478
- counts = /* @__PURE__ */ new Uint8Array(0);
479
- /** Summed RGB of the lit dots per cell. */
480
- rgb = /* @__PURE__ */ new Float32Array(0);
481
- /** Halo tint strength per cell, from 0 to 1. Only set when a halo was requested. */
482
- haloAmount = /* @__PURE__ */ new Float32Array(0);
483
- /** Halo color per cell. */
484
- haloRgb = /* @__PURE__ */ new Float32Array(0);
485
- width = 0;
486
- height = 0;
487
- /** Ray parameter of the nearest hit per dot; smaller is nearer. */
488
- depth = /* @__PURE__ */ new Float32Array(0);
489
- /** Face index + 1 of the nearest hit per dot, 0 for none. */
490
- faceIds = /* @__PURE__ */ new Uint16Array(0);
491
- /** Cells written by the previous frame, cleared before the next one. */
492
- dirty;
493
- /** Cells with a halo from the previous frame, cleared before the next one. */
494
- haloDirty;
495
- cameraDistance;
496
- constructor(cameraDistance) {
497
- this.cameraDistance = cameraDistance;
498
- }
499
- render(width, height, pose, boxes, background, haloStrength) {
500
- const dotWidth = width * 2;
501
- const dotHeight = height * 4;
502
- if (width !== this.width || height !== this.height) {
503
- this.width = width;
504
- this.height = height;
505
- this.bits = new Uint8Array(width * height);
506
- this.counts = new Uint8Array(width * height);
507
- this.rgb = new Float32Array(width * height * 3);
508
- this.haloAmount = new Float32Array(width * height);
509
- this.haloRgb = new Float32Array(width * height * 3);
510
- this.haloDirty = void 0;
511
- this.depth = new Float32Array(dotWidth * dotHeight).fill(Infinity);
512
- this.faceIds = new Uint16Array(dotWidth * dotHeight);
513
- this.dirty = void 0;
514
- } else if (this.dirty) {
515
- const { minX, minY, maxX, maxY } = this.dirty;
516
- for (let row = minY; row <= maxY; row++) {
517
- this.bits.fill(0, row * width + minX, row * width + maxX + 1);
518
- this.counts.fill(0, row * width + minX, row * width + maxX + 1);
519
- this.rgb.fill(0, (row * width + minX) * 3, (row * width + maxX + 1) * 3);
520
- }
521
- this.dirty = void 0;
522
- }
523
- if (this.haloDirty) {
524
- const { minX, minY, maxX, maxY } = this.haloDirty;
525
- for (let row = minY; row <= maxY; row++) {
526
- this.haloAmount.fill(0, row * width + minX, row * width + maxX + 1);
527
- this.haloRgb.fill(0, (row * width + minX) * 3, (row * width + maxX + 1) * 3);
528
- }
529
- this.haloDirty = void 0;
530
- }
531
- const m = rotation(pose.yaw, pose.pitch, pose.roll);
532
- const { centerX, centerY, scale } = pose;
533
- const cameraDistance = this.cameraDistance;
534
- const origin = [
535
- m[6] * cameraDistance,
536
- m[7] * cameraDistance,
537
- m[8] * cameraDistance
538
- ];
539
- const light = isLight(background);
540
- const faces = this.visibleFaces(m, origin, pose, boxes, dotWidth, dotHeight, light);
541
- if (faces.length === 0) return;
542
- let minX = dotWidth;
543
- let minY = dotHeight;
544
- let maxX = -1;
545
- let maxY = -1;
546
- for (const face of faces) {
547
- minX = Math.min(minX, face.minX);
548
- minY = Math.min(minY, face.minY);
549
- maxX = Math.max(maxX, face.maxX);
550
- maxY = Math.max(maxY, face.maxY);
551
- }
552
- if (maxX < minX || maxY < minY) return;
553
- const depth = this.depth;
554
- const faceIds = this.faceIds;
555
- for (let faceIndex = 0; faceIndex < faces.length; faceIndex++) {
556
- const face = faces[faceIndex];
557
- const a = face.axis;
558
- const u = (a + 1) % 3;
559
- const v = (a + 2) % 3;
560
- const originA = origin[a];
561
- const originU = origin[u];
562
- const originV = origin[v];
563
- const stepA = m[a] / scale;
564
- const stepU = m[u] / scale;
565
- const stepV = m[v] / scale;
566
- const sx = (face.minX + .5 - centerX) / scale;
567
- for (let dotY = face.minY; dotY <= face.maxY; dotY++) {
568
- const sy = (dotY + .5 - centerY) / scale;
569
- let directionA = m[a] * sx + m[3 + a] * sy - m[6 + a] * cameraDistance;
570
- let directionU = m[u] * sx + m[3 + u] * sy - m[6 + u] * cameraDistance;
571
- let directionV = m[v] * sx + m[3 + v] * sy - m[6 + v] * cameraDistance;
572
- let index = dotY * dotWidth + face.minX;
573
- for (let dotX = face.minX; dotX <= face.maxX; dotX++, index++) {
574
- const t = (face.plane - originA) / directionA;
575
- if (t > 0 && t < depth[index]) {
576
- const hitU = originU + t * directionU;
577
- const hitV = originV + t * directionV;
578
- if (hitU >= face.uMin && hitU <= face.uMax && hitV >= face.vMin && hitV <= face.vMax) {
579
- depth[index] = t;
580
- faceIds[index] = faceIndex + 1;
581
- }
582
- }
583
- directionA += stepA;
584
- directionU += stepU;
585
- directionV += stepV;
586
- }
587
- }
588
- }
589
- const bits = this.bits;
590
- const counts = this.counts;
591
- const rgb = this.rgb;
592
- let cellMinX = width;
593
- let cellMinY = height;
594
- let cellMaxX = -1;
595
- let cellMaxY = -1;
596
- for (let dotY = minY; dotY <= maxY; dotY++) {
597
- let index = dotY * dotWidth + minX;
598
- for (let dotX = minX; dotX <= maxX; dotX++, index++) {
599
- const id = faceIds[index];
600
- if (id === 0) continue;
601
- const face = faces[id - 1];
602
- const fog = clamp01(.15 - cameraDistance * (1 - depth[index]) * .12) * (light ? .5 : 1);
603
- faceIds[index] = 0;
604
- depth[index] = Infinity;
605
- const cellX = dotX >> 1;
606
- const cellY = dotY >> 2;
607
- const cell = cellY * width + cellX;
608
- bits[cell] |= DOT_BITS[(dotY & 3) * 2 + (dotX & 1)];
609
- counts[cell]++;
610
- rgb[cell * 3] += face.red + (background[0] - face.red) * fog;
611
- rgb[cell * 3 + 1] += face.green + (background[1] - face.green) * fog;
612
- rgb[cell * 3 + 2] += face.blue + (background[2] - face.blue) * fog;
613
- if (cellX < cellMinX) cellMinX = cellX;
614
- if (cellX > cellMaxX) cellMaxX = cellX;
615
- if (cellY < cellMinY) cellMinY = cellY;
616
- if (cellY > cellMaxY) cellMaxY = cellY;
617
- }
618
- }
619
- if (cellMaxX >= 0) this.dirty = {
620
- minX: cellMinX,
621
- minY: cellMinY,
622
- maxX: cellMaxX,
623
- maxY: cellMaxY
624
- };
625
- if (haloStrength > 0) this.renderHalo(haloStrength);
626
- }
627
- /**
628
- * Blur the logo's coverage and color over neighboring cells with a separable tent filter, so the tint falls
629
- * off smoothly past the logo's edges.
630
- */
631
- renderHalo(strength) {
632
- const cells = this.dirty;
633
- if (!cells) return;
634
- const { width, height, counts, rgb } = this;
635
- const minX = Math.max(0, cells.minX - HALO_RADIUS_X);
636
- const maxX = Math.min(width - 1, cells.maxX + HALO_RADIUS_X);
637
- const minY = Math.max(0, cells.minY - HALO_RADIUS_Y);
638
- const maxY = Math.min(height - 1, cells.maxY + HALO_RADIUS_Y);
639
- const regionWidth = maxX - minX + 1;
640
- const tent = (radius) => {
641
- const weights = Array.from({ length: radius * 2 + 1 }, (_, i) => radius + 1 - Math.abs(i - radius));
642
- const total = weights.reduce((sum, weight) => sum + weight, 0);
643
- return weights.map((weight) => weight / total);
644
- };
645
- const weightsX = tent(HALO_RADIUS_X);
646
- const weightsY = tent(HALO_RADIUS_Y);
647
- const rows = cells.maxY - cells.minY + 1;
648
- const horizontal = new Float32Array(rows * regionWidth * 4);
649
- for (let y = cells.minY; y <= cells.maxY; y++) for (let x = minX; x <= maxX; x++) {
650
- let coverage = 0;
651
- let red = 0;
652
- let green = 0;
653
- let blue = 0;
654
- for (let dx = -6; dx <= HALO_RADIUS_X; dx++) {
655
- const sourceX = x + dx;
656
- if (sourceX < cells.minX || sourceX > cells.maxX) continue;
657
- const source = y * width + sourceX;
658
- const count = counts[source];
659
- if (count === 0) continue;
660
- const weight = weightsX[dx + HALO_RADIUS_X] / 8;
661
- coverage += count * weight;
662
- red += rgb[source * 3] * weight;
663
- green += rgb[source * 3 + 1] * weight;
664
- blue += rgb[source * 3 + 2] * weight;
665
- }
666
- const target = ((y - cells.minY) * regionWidth + (x - minX)) * 4;
667
- horizontal[target] = coverage;
668
- horizontal[target + 1] = red;
669
- horizontal[target + 2] = green;
670
- horizontal[target + 3] = blue;
671
- }
672
- for (let y = minY; y <= maxY; y++) for (let x = minX; x <= maxX; x++) {
673
- let coverage = 0;
674
- let red = 0;
675
- let green = 0;
676
- let blue = 0;
677
- for (let dy = -3; dy <= HALO_RADIUS_Y; dy++) {
678
- const sourceY = y + dy;
679
- if (sourceY < cells.minY || sourceY > cells.maxY) continue;
680
- const weight = weightsY[dy + HALO_RADIUS_Y];
681
- const source = ((sourceY - cells.minY) * regionWidth + (x - minX)) * 4;
682
- coverage += horizontal[source] * weight;
683
- red += horizontal[source + 1] * weight;
684
- green += horizontal[source + 2] * weight;
685
- blue += horizontal[source + 3] * weight;
686
- }
687
- const target = y * width + x;
688
- const count = counts[target];
689
- if (count > 0 && count / 8 > coverage) {
690
- coverage = count / 8;
691
- red = rgb[target * 3] / count * coverage;
692
- green = rgb[target * 3 + 1] / count * coverage;
693
- blue = rgb[target * 3 + 2] / count * coverage;
694
- }
695
- if (coverage <= 0) continue;
696
- const amount = Math.round(strength * Math.min(1, coverage) ** .7 * HALO_LEVELS) / HALO_LEVELS;
697
- if (amount <= 0) continue;
698
- this.haloAmount[target] = amount;
699
- this.haloRgb[target * 3] = Math.round(red / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;
700
- this.haloRgb[target * 3 + 1] = Math.round(green / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;
701
- this.haloRgb[target * 3 + 2] = Math.round(blue / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;
702
- }
703
- this.haloDirty = {
704
- minX,
705
- minY,
706
- maxX,
707
- maxY
708
- };
709
- }
710
- visibleFaces(m, origin, pose, boxes, dotWidth, dotHeight, lightBackground) {
711
- const faces = [];
712
- const cameraDistance = this.cameraDistance;
713
- for (const box of boxes) for (let a = 0; a < 3; a++) {
714
- const u = (a + 1) % 3;
715
- const v = (a + 2) % 3;
716
- for (const side of [-1, 1]) {
717
- const plane = side > 0 ? box.max[a] : box.min[a];
718
- if ((origin[a] - plane) * side <= 0) continue;
719
- if (boxes.some((other) => other !== box && (side > 0 ? other.min[a] : other.max[a]) === plane && other.min[u] <= box.min[u] && other.max[u] >= box.max[u] && other.min[v] <= box.min[v] && other.max[v] >= box.max[v])) continue;
720
- let minX = Infinity;
721
- let minY = Infinity;
722
- let maxX = -Infinity;
723
- let maxY = -Infinity;
724
- const corner = [
725
- 0,
726
- 0,
727
- 0
728
- ];
729
- for (const cornerU of [box.min[u], box.max[u]]) for (const cornerV of [box.min[v], box.max[v]]) {
730
- corner[a] = plane;
731
- corner[u] = cornerU;
732
- corner[v] = cornerV;
733
- const x = m[0] * corner[0] + m[1] * corner[1] + m[2] * corner[2];
734
- const y = m[3] * corner[0] + m[4] * corner[1] + m[5] * corner[2];
735
- const z = m[6] * corner[0] + m[7] * corner[1] + m[8] * corner[2];
736
- const perspective = pose.scale * cameraDistance / (cameraDistance - z);
737
- const screenX = pose.centerX + x * perspective;
738
- const screenY = pose.centerY + y * perspective;
739
- minX = Math.min(minX, screenX);
740
- minY = Math.min(minY, screenY);
741
- maxX = Math.max(maxX, screenX);
742
- maxY = Math.max(maxY, screenY);
743
- }
744
- const face = {
745
- minX: Math.max(0, Math.floor(minX)),
746
- minY: Math.max(0, Math.floor(minY)),
747
- maxX: Math.min(dotWidth - 1, Math.ceil(maxX)),
748
- maxY: Math.min(dotHeight - 1, Math.ceil(maxY))
749
- };
750
- if (face.maxX < face.minX || face.maxY < face.minY) continue;
751
- const nx = m[a] * side;
752
- const ny = m[3 + a] * side;
753
- const nz = m[6 + a] * side;
754
- const diffuse = Math.max(0, nx * LIGHT[0] + ny * LIGHT[1] + nz * LIGHT[2]);
755
- const rim = Math.max(0, nx * .8 - nz * .3);
756
- const specular = lightBackground ? 0 : Math.max(0, nx * HALF_VECTOR[0] + ny * HALF_VECTOR[1] + nz * HALF_VECTOR[2]) ** 24 * .6 * 255;
757
- const light = lightBackground ? Math.min(1, .55 + diffuse * .45 + rim * .1) : .45 + diffuse * .78 + rim * .25;
758
- faces.push({
759
- axis: a,
760
- plane,
761
- uMin: box.min[u],
762
- uMax: box.max[u],
763
- vMin: box.min[v],
764
- vMax: box.max[v],
765
- ...face,
766
- red: Math.min(255, box.color[0] * light + specular),
767
- green: Math.min(255, box.color[1] * light + specular),
768
- blue: Math.min(255, box.color[2] * light + specular)
769
- });
770
- }
771
- }
772
- return faces;
773
- }
774
- };
775
- let playing = false;
776
- /**
777
- * Show the animation as a fullscreen overlay until it is dismissed. The overlay takes focus and mouse input and
778
- * returns focus when hidden, so the rest of the UI keeps running underneath untouched.
779
- */
780
- async function playEasterEgg3d(tui, screen, egg) {
781
- if (playing) return;
782
- playing = true;
783
- const reported = await tui.queryTerminalColors({ timeoutMs: 100 });
784
- const dark = theme.appearance === "dark";
785
- const toRgbTuple = (rgb, fallback) => rgb ? [
786
- rgb.r,
787
- rgb.g,
788
- rgb.b
789
- ] : fallback;
790
- const colors = {
791
- foreground: toRgbTuple(reported.foreground, toRgb(theme.colors.text)),
792
- background: toRgbTuple(reported.background, dark ? [
793
- 0,
794
- 0,
795
- 0
796
- ] : [
797
- 255,
798
- 255,
799
- 255
800
- ])
801
- };
802
- if (tui.hasOverlay()) {
803
- playing = false;
804
- return;
805
- }
806
- const animation = new EasterEgg3dAnimation(tui, screen, egg.kind === "armin" ? arminModel(toRgb(theme.colors.accent)) : piLogoModel({
807
- column: egg.column,
808
- row: egg.row
809
- }), colors, () => {
810
- playing = false;
811
- overlay.hide();
812
- });
813
- const overlay = tui.showOverlay(animation, {
814
- anchor: "top-left",
815
- width: "100%",
816
- maxHeight: "100%"
817
- });
818
- }
819
- var EasterEgg3dAnimation = class {
820
- tui;
821
- /** The screen to dissolve, as rendered lines. */
822
- screen;
823
- model;
824
- foreground;
825
- background;
826
- onDone;
827
- startTime = performance.now();
828
- lastRender = performance.now();
829
- timer;
830
- exit;
831
- shuffle;
832
- screenWidth = -1;
833
- screenHeight = -1;
834
- /** Star per cell index, or undefined. */
835
- stars = [];
836
- cells = [];
837
- ansiCache = /* @__PURE__ */ new Map();
838
- raster;
839
- constructor(tui, screen, model, colors, onDone) {
840
- this.tui = tui;
841
- this.screen = screen;
842
- this.model = model;
843
- this.raster = new BlockRaster(model.cameraDistance);
844
- this.foreground = colors.foreground;
845
- this.background = colors.background;
846
- this.onDone = onDone;
847
- this.timer = setInterval(() => {
848
- if (this.exit && this.exitProgress() >= 1 || performance.now() - this.lastRender > 1e3) this.finish();
849
- else this.tui.requestRender();
850
- }, FRAME_MS);
851
- this.timer.unref?.();
852
- }
853
- /** Play the exit animation. A second call skips it. */
854
- close() {
855
- if (this.exit) {
856
- this.finish();
857
- return;
858
- }
859
- const time = this.elapsed();
860
- const yaw = spinAngle(time);
861
- const turn = Math.PI * 2;
862
- this.exit = {
863
- start: performance.now(),
864
- time,
865
- yaw,
866
- targetYaw: Math.ceil(yaw / turn) * turn,
867
- offsets: this.blockOffsets(time)
868
- };
869
- }
870
- handleInput(data) {
871
- const keybindings = getKeybindings();
872
- if (keybindings.matches(data, "tui.select.cancel") || keybindings.matches(data, "app.clear")) this.close();
873
- }
874
- handleMouse(event) {
875
- if (event.type === "click") this.close();
876
- return {
877
- handled: true,
878
- render: false
879
- };
880
- }
881
- invalidate() {
882
- this.screenWidth = -1;
883
- this.screenHeight = -1;
884
- this.ansiCache.clear();
885
- }
886
- render(width) {
887
- const height = Math.max(1, this.tui.terminal.rows);
888
- const foreground = this.foreground;
889
- const background = this.background;
890
- this.lastRender = performance.now();
891
- if (width !== this.screenWidth || height !== this.screenHeight) {
892
- this.screenWidth = width;
893
- this.screenHeight = height;
894
- this.cells = this.prepareCells(width, foreground);
895
- this.stars = this.prepareStars(width, height);
896
- }
897
- let dissolveTime;
898
- let pose;
899
- let hintAlpha;
900
- let starAlpha;
901
- let offsets;
902
- if (this.exit) {
903
- const progress = this.exitProgress();
904
- const landing = clamp01(progress / .8);
905
- const settle = 1 - smooth(landing);
906
- dissolveTime = Math.min(this.exit.time, DISSOLVE_END) * (1 - progress);
907
- pose = this.pose(width, height, this.flyProgress(this.exit.time) * settle, this.exit.time);
908
- pose.yaw = this.exit.yaw + (this.exit.targetYaw - this.exit.yaw) * easeOut(landing);
909
- pose.pitch *= settle;
910
- pose.roll *= settle;
911
- hintAlpha = this.hintAlpha(this.exit.time) * (1 - smooth(progress / .2));
912
- starAlpha = this.starAlpha(this.exit.time) * (1 - smooth(progress / .3));
913
- const gather = 1 - smooth(progress / .5);
914
- offsets = this.exit.offsets.map(([x, y, z]) => [
915
- x * gather,
916
- y * gather,
917
- z * gather
918
- ]);
919
- } else {
920
- const time = this.elapsed();
921
- dissolveTime = time;
922
- pose = this.pose(width, height, this.flyProgress(time), time);
923
- hintAlpha = this.hintAlpha(time);
924
- starAlpha = this.starAlpha(time);
925
- offsets = this.blockOffsets(time);
926
- }
927
- const { columns, rows } = this.model;
928
- const boxes = this.model.blocks.map((block, index) => {
929
- const [dx, dy, dz] = offsets[index];
930
- const x = block.home[0] - columns / 2 + dx;
931
- const y = block.home[1] - rows / 2 + dy;
932
- return {
933
- min: [
934
- x,
935
- y,
936
- dz - DEPTH / 2
937
- ],
938
- max: [
939
- x + 1,
940
- y + 1,
941
- dz + DEPTH / 2
942
- ],
943
- color: block.color
944
- };
945
- });
946
- const raster = this.raster;
947
- raster.render(width, height, pose, boxes, background, isLight(background) ? LIGHT_HALO_STRENGTH : 0);
948
- const halo = (index, base) => {
949
- const amount = raster.haloAmount[index];
950
- if (amount <= 0) return base;
951
- const color = raster.haloRgb;
952
- return mix(base ?? background, [
953
- color[index * 3],
954
- color[index * 3 + 1],
955
- color[index * 3 + 2]
956
- ], amount);
957
- };
958
- const backgroundFade = smooth(dissolveTime / BACKGROUND_FADE);
959
- const textFade = smooth(dissolveTime / .6) * .3;
960
- const textActive = dissolveTime < DISSOLVE_END || backgroundFade < 1;
961
- const hint = this.hint(width, height, hintAlpha, background);
962
- const frame = Math.floor(dissolveTime * 14);
963
- const now = this.elapsed();
964
- const starLevel = Math.round(starAlpha * STAR_ALPHA_LEVELS) / STAR_ALPHA_LEVELS;
965
- const starfield = (index) => {
966
- if (starLevel <= 0) return void 0;
967
- const star = this.stars[index];
968
- if (!star) return void 0;
969
- const flicker = Math.round((.5 + .5 * Math.sin(now * star.speed + star.phase)) * STAR_FLICKER_LEVELS) / STAR_FLICKER_LEVELS;
970
- return {
971
- text: star.glyph,
972
- fg: mix(background, mix(foreground, star.tint, .5), star.strength * (.7 + .3 * flicker) * starLevel)
973
- };
974
- };
975
- const lines = [];
976
- for (let row = 0; row < height; row++) {
977
- const cells = this.cells[row] ?? [];
978
- let line = "";
979
- let currentFg = -1;
980
- let currentBg = -1;
981
- const emit = (text, fg, bg) => {
982
- const fgKey = fg ? this.pack(fg) : -1;
983
- const bgKey = bg ? this.pack(bg) : -1;
984
- if (fgKey !== currentFg && text !== " ") {
985
- line += fg ? this.ansi(fgKey, false) : "\x1B[39m";
986
- currentFg = fgKey;
987
- }
988
- if (bgKey !== currentBg) {
989
- line += bg ? this.ansi(bgKey, true) : "\x1B[49m";
990
- currentBg = bgKey;
991
- }
992
- line += text;
993
- };
994
- for (let column = 0; column < width; column++) {
995
- const index = row * width + column;
996
- const cell = textActive ? cells[column] : void 0;
997
- const cellBg = halo(index, cell?.bg && backgroundFade < 1 ? mix(cell.bg, background, backgroundFade) : void 0);
998
- if (hint && row === hint.row && column >= hint.start && column < hint.start + hint.text.length) {
999
- const offset = column - hint.start;
1000
- emit(hint.text[offset], offset < hint.keyLength ? hint.keyColor : hint.color, cellBg);
1001
- continue;
1002
- }
1003
- const dots = raster.bits[index];
1004
- if (dots) {
1005
- const step = LOGO_COLOR_STEP * raster.counts[index];
1006
- const rgb = raster.rgb;
1007
- const color = [
1008
- Math.round(rgb[index * 3] / step) * LOGO_COLOR_STEP,
1009
- Math.round(rgb[index * 3 + 1] / step) * LOGO_COLOR_STEP,
1010
- Math.round(rgb[index * 3 + 2] / step) * LOGO_COLOR_STEP
1011
- ];
1012
- emit(BRAILLE[dots], color, cellBg);
1013
- continue;
1014
- }
1015
- if (!cell) {
1016
- const star = starfield(index);
1017
- emit(star?.text ?? " ", star?.fg, cellBg);
1018
- continue;
1019
- }
1020
- const dust = (dissolveTime - cell.delay) / DUST_DURATION;
1021
- if (dust < 0 && cell.width === 2 && !raster.bits[index + 1]) {
1022
- emit(cell.text, mix(cell.fg, background, textFade), cellBg);
1023
- column++;
1024
- continue;
1025
- }
1026
- if (dust < 0 && cell.width === 1) {
1027
- emit(cell.text, mix(cell.fg, background, textFade), cellBg);
1028
- continue;
1029
- }
1030
- const dotCount = dust < 0 ? cell.ink : Math.round(cell.ink * (1 - clamp01(dust)));
1031
- if (dotCount <= 0) {
1032
- const star = starfield(index);
1033
- emit(star?.text ?? " ", star?.fg, cellBg);
1034
- continue;
1035
- }
1036
- let bits = 0;
1037
- let placed = 0;
1038
- for (let attempt = 0; placed < dotCount && attempt < 32; attempt++) {
1039
- const bit = DOT_BITS[Math.floor(hash(cell.seed * 7919 + frame * 131 + attempt) * 8)];
1040
- if (bits & bit) continue;
1041
- bits |= bit;
1042
- placed++;
1043
- }
1044
- const fade = textFade + (1 - textFade) * clamp01(dust) ** .8;
1045
- emit(BRAILLE[bits], mix(cell.fg, background, fade), cellBg);
1046
- }
1047
- lines.push(`${line}\x1b[0m`);
1048
- }
1049
- return lines;
1050
- }
1051
- elapsed() {
1052
- return (performance.now() - this.startTime) / 1e3;
1053
- }
1054
- exitProgress() {
1055
- return this.exit ? clamp01((performance.now() - this.exit.start) / 1e3 / EXIT_DURATION) : 0;
1056
- }
1057
- finish() {
1058
- if (!this.timer) return;
1059
- clearInterval(this.timer);
1060
- this.timer = void 0;
1061
- this.onDone();
1062
- }
1063
- /** Each block's displacement from its place in the model at `time`, in grid units. */
1064
- blockOffsets(time) {
1065
- const blocks = this.model.blocks;
1066
- const home = () => blocks.map(() => [
1067
- 0,
1068
- 0,
1069
- 0
1070
- ]);
1071
- if (time < PUZZLE_START) return home();
1072
- const cycle = Math.floor((time - PUZZLE_START) / PUZZLE_CYCLE);
1073
- const local = time - PUZZLE_START - cycle * PUZZLE_CYCLE;
1074
- if (this.shuffle?.cycle !== cycle) this.shuffle = {
1075
- cycle,
1076
- steps: shuffleSteps(this.model, cycle)
1077
- };
1078
- const steps = this.shuffle.steps;
1079
- const offset = (position, index) => {
1080
- const block = blocks[index].home;
1081
- return [
1082
- position[0] - block[0],
1083
- position[1] - block[1],
1084
- position[2] - block[2]
1085
- ];
1086
- };
1087
- const shuffleEnd = PUZZLE_STEP * PUZZLE_STEPS;
1088
- if (local < shuffleEnd) {
1089
- const step = Math.floor(local / PUZZLE_STEP);
1090
- const progress = smooth((local - step * PUZZLE_STEP) / PUZZLE_STEP);
1091
- return steps[step].map((from, index) => {
1092
- const a = offset(from, index);
1093
- const b = offset(steps[step + 1][index], index);
1094
- return [
1095
- a[0] + (b[0] - a[0]) * progress,
1096
- a[1] + (b[1] - a[1]) * progress,
1097
- a[2] + (b[2] - a[2]) * progress
1098
- ];
1099
- });
1100
- }
1101
- if (local < 4.6) {
1102
- const u = (local - shuffleEnd) / PUZZLE_RETURN;
1103
- const remaining = 1 - smooth(u);
1104
- const arc = Math.sin(Math.PI * clamp01(u)) * .8;
1105
- return steps[PUZZLE_STEPS].map((position, index) => {
1106
- const [x, y, z] = offset(position, index);
1107
- return [
1108
- x * remaining,
1109
- y * remaining,
1110
- z * remaining + (index % 2 === 0 ? arc : -arc)
1111
- ];
1112
- });
1113
- }
1114
- return home();
1115
- }
1116
- flyProgress(time) {
1117
- return smooth((time - FLY_START) / FLY_DURATION);
1118
- }
1119
- starAlpha(time) {
1120
- return smooth((time - STARS_START) / STARS_FADE);
1121
- }
1122
- hintAlpha(time) {
1123
- return smooth((time - FLY_START - FLY_DURATION) / HINT_FADE);
1124
- }
1125
- pose(width, height, progress, time) {
1126
- const { columns, rows, cameraDistance, radius, widthShare, origin } = this.model;
1127
- const reach = radius * (cameraDistance / (cameraDistance - radius));
1128
- const startScale = origin ? 2 * (cameraDistance - DEPTH / 2) / cameraDistance : START_SCALE;
1129
- const endScale = Math.max(startScale, Math.min(width * 2 * widthShare, (height * 4 - 8) * .48) / reach);
1130
- const endX = width;
1131
- const endY = height * 2 - 2;
1132
- const startX = origin ? origin.column * 2 + columns : endX;
1133
- const startY = origin ? origin.row * 4 + rows : endY;
1134
- return {
1135
- centerX: startX + (endX - startX) * progress,
1136
- centerY: startY + (endY - startY) * progress,
1137
- scale: startScale * (endScale / startScale) ** progress,
1138
- yaw: spinAngle(time),
1139
- pitch: .3 * Math.sin(spinPhase(time)) * progress,
1140
- roll: .06 * Math.sin(2 * spinPhase(time)) * progress
1141
- };
1142
- }
1143
- hint(width, height, alpha, background) {
1144
- if (alpha <= 0) return void 0;
1145
- const key = formatKeyText(getKeybindings().getKeys("tui.select.cancel")[0] ?? "escape");
1146
- const text = `${key} to return`;
1147
- if (text.length > width) return void 0;
1148
- return {
1149
- row: height - 2,
1150
- start: Math.floor((width - text.length) / 2),
1151
- text,
1152
- keyLength: key.length,
1153
- keyColor: mix(background, toRgb(theme.colors.muted), alpha),
1154
- color: mix(background, toRgb(theme.colors.dim), alpha)
1155
- };
1156
- }
1157
- /** A sparse, deterministic starfield: one braille dot in about STAR_DENSITY of all cells. */
1158
- prepareStars(width, height) {
1159
- const stars = new Array(width * height);
1160
- for (let index = 0; index < width * height; index++) {
1161
- if (hash(index * 3 + 20973) >= STAR_DENSITY) continue;
1162
- const random = (salt) => hash(index * 7 + salt * 40503);
1163
- stars[index] = {
1164
- glyph: BRAILLE[DOT_BITS[Math.floor(random(1) * 8)]],
1165
- tint: STAR_TINTS[Math.floor(random(2) * STAR_TINTS.length)],
1166
- strength: .1 + random(3) * .12,
1167
- phase: random(4) * Math.PI * 2,
1168
- speed: .4 + random(5) * .8
1169
- };
1170
- }
1171
- return stars;
1172
- }
1173
- prepareCells(width, foreground) {
1174
- const cells = parseScreen(this.screen, width, foreground, this.background);
1175
- const height = Math.max(1, this.tui.terminal.rows);
1176
- const { columns, rows, origin } = this.model;
1177
- const centerX = origin ? origin.column + columns / 2 : width / 2;
1178
- const centerY = origin ? origin.row + rows / 4 : height / 2;
1179
- const farthest = Math.hypot(Math.max(centerX, width - centerX), Math.max(centerY, height - centerY) * 2);
1180
- for (let row = 0; row < cells.length; row++) {
1181
- const line = cells[row];
1182
- for (let column = 0; column < line.length; column++) {
1183
- const cell = line[column];
1184
- const owner = cell.width === 0 ? line[column - 1] : cell;
1185
- const seed = hash(row * 65537 + column);
1186
- if (cell.width !== 0) {
1187
- const distance = Math.hypot(column - centerX, (row - centerY) * 2) / farthest;
1188
- cell.delay = FLY_START + distance * WAVE_SPREAD + seed * WAVE_JITTER;
1189
- } else cell.delay = owner.delay;
1190
- cell.seed = row * 65537 + column;
1191
- cell.ink = glyphInk(owner.text, seed);
1192
- }
1193
- }
1194
- if (origin) for (let row = origin.row; row < origin.row + Math.ceil(rows / 2); row++) {
1195
- const line = cells[row];
1196
- if (!line) continue;
1197
- for (let column = origin.column; column < origin.column + columns; column++) {
1198
- const cell = line[column];
1199
- if (cell) {
1200
- cell.text = " ";
1201
- cell.width = 1;
1202
- cell.ink = 0;
1203
- cell.bg = void 0;
1204
- }
1205
- }
1206
- }
1207
- return cells;
1208
- }
1209
- pack(color) {
1210
- return Math.round(color[0]) << 16 | Math.round(color[1]) << 8 | Math.round(color[2]);
1211
- }
1212
- ansi(key, isBackground) {
1213
- const cacheKey = key * 2 + (isBackground ? 1 : 0);
1214
- let value = this.ansiCache.get(cacheKey);
1215
- if (value === void 0) {
1216
- const color = rgbColor(key >> 16 & 255, key >> 8 & 255, key & 255);
1217
- const mode = theme.getColorMode();
1218
- value = isBackground ? backgroundAnsi(color, mode) : foregroundAnsi(color, mode);
1219
- this.ansiCache.set(cacheKey, value);
1220
- }
1221
- return value;
1222
- }
1223
- };
1224
- //#endregion
1225
- export { playEasterEgg3d };