termdock 1.4.325 → 1.4.326

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 (347) hide show
  1. package/dist/client/assets/App-DrnLToMO.js +186 -0
  2. package/dist/client/assets/App-DrnLToMO.js.br +0 -0
  3. package/dist/client/assets/App-DrnLToMO.js.gz +0 -0
  4. package/dist/client/assets/ArchitecturePanel-CGjioSu0.js +9 -0
  5. package/dist/client/assets/ArchitecturePanel-CGjioSu0.js.br +0 -0
  6. package/dist/client/assets/ArchitecturePanel-CGjioSu0.js.gz +0 -0
  7. package/dist/client/assets/{ChangeWalkthroughPanel-ChPZVfRz.js → ChangeWalkthroughPanel-BsG5tR4F.js} +1 -1
  8. package/dist/client/assets/ChangeWalkthroughPanel-BsG5tR4F.js.br +0 -0
  9. package/dist/client/assets/ChangeWalkthroughPanel-BsG5tR4F.js.gz +0 -0
  10. package/dist/client/assets/{CollaborationMainWorkspace-DkNhqCj4.js → CollaborationMainWorkspace-KMTTUtsp.js} +1 -1
  11. package/dist/client/assets/CollaborationMainWorkspace-KMTTUtsp.js.br +0 -0
  12. package/dist/client/assets/CollaborationMainWorkspace-KMTTUtsp.js.gz +0 -0
  13. package/dist/client/assets/CollaborationTaskContent-D-qPRh4f.js +2 -0
  14. package/dist/client/assets/ComputerControlView-Bh3aWVA-.js +5 -0
  15. package/dist/client/assets/ComputerControlView-Bh3aWVA-.js.br +0 -0
  16. package/dist/client/assets/ComputerControlView-Bh3aWVA-.js.gz +0 -0
  17. package/dist/client/assets/{DagPlayground-BIL5vjer.js → DagPlayground-761ejCr8.js} +1 -1
  18. package/dist/client/assets/DagPlayground-761ejCr8.js.br +0 -0
  19. package/dist/client/assets/DagPlayground-761ejCr8.js.gz +0 -0
  20. package/dist/client/assets/{DiffLab-CX1AwU2v.js → DiffLab-yWG9ju3P.js} +1 -1
  21. package/dist/client/assets/DiffLab-yWG9ju3P.js.br +0 -0
  22. package/dist/client/assets/DiffLab-yWG9ju3P.js.gz +0 -0
  23. package/dist/client/assets/{DiffReview-CLc1hwO7.js → DiffReview-02640ofg.js} +1 -1
  24. package/dist/client/assets/DiffReview-02640ofg.js.br +0 -0
  25. package/dist/client/assets/DiffReview-02640ofg.js.gz +0 -0
  26. package/dist/client/assets/{DiffReviewLab-DE6m1o4p.js → DiffReviewLab-D0W0SEIG.js} +1 -1
  27. package/dist/client/assets/DiffReviewLab-D0W0SEIG.js.br +0 -0
  28. package/dist/client/assets/DiffReviewLab-D0W0SEIG.js.gz +0 -0
  29. package/dist/client/assets/{DiffViewer-BDwtwbQM.js → DiffViewer-CLjrE1oE.js} +1 -1
  30. package/dist/client/assets/DiffViewer-CLjrE1oE.js.br +0 -0
  31. package/dist/client/assets/DiffViewer-CLjrE1oE.js.gz +0 -0
  32. package/dist/client/assets/{ModelPreview-DEwATnxi.js → ModelPreview-BnIvn0Fn.js} +1 -1
  33. package/dist/client/assets/ModelPreview-BnIvn0Fn.js.br +0 -0
  34. package/dist/client/assets/ModelPreview-BnIvn0Fn.js.gz +0 -0
  35. package/dist/client/assets/{RightSidebar-jOQJePDV.js → RightSidebar-Dx4Jf94o.js} +27 -27
  36. package/dist/client/assets/RightSidebar-Dx4Jf94o.js.br +0 -0
  37. package/dist/client/assets/RightSidebar-Dx4Jf94o.js.gz +0 -0
  38. package/dist/client/assets/{abnfDiagram-VCTEODGH-GBSf8AEr.js → abnfDiagram-VCTEODGH-C-k_lOuF.js} +1 -1
  39. package/dist/client/assets/abnfDiagram-VCTEODGH-C-k_lOuF.js.br +0 -0
  40. package/dist/client/assets/abnfDiagram-VCTEODGH-C-k_lOuF.js.gz +0 -0
  41. package/dist/client/assets/{app-VCmiASzh.js → app-DNdmWYEJ.js} +13 -13
  42. package/dist/client/assets/app-DNdmWYEJ.js.br +0 -0
  43. package/dist/client/assets/app-DNdmWYEJ.js.gz +0 -0
  44. package/dist/client/assets/{arc-BecvFgjf.js → arc-DvBgO2ML.js} +1 -1
  45. package/dist/client/assets/arc-DvBgO2ML.js.br +0 -0
  46. package/dist/client/assets/arc-DvBgO2ML.js.gz +0 -0
  47. package/dist/client/assets/{architectureDiagram-5GKGNRK7-Cfk47zEF.js → architectureDiagram-5GKGNRK7-BrZRHTn8.js} +1 -1
  48. package/dist/client/assets/architectureDiagram-5GKGNRK7-BrZRHTn8.js.br +0 -0
  49. package/dist/client/assets/architectureDiagram-5GKGNRK7-BrZRHTn8.js.gz +0 -0
  50. package/dist/client/assets/{blockDiagram-I7D4REHJ-BHYgsLvx.js → blockDiagram-I7D4REHJ-DuvUrrD4.js} +1 -1
  51. package/dist/client/assets/blockDiagram-I7D4REHJ-DuvUrrD4.js.br +0 -0
  52. package/dist/client/assets/blockDiagram-I7D4REHJ-DuvUrrD4.js.gz +0 -0
  53. package/dist/client/assets/{c4Diagram-7LVT6UL2-ClWWjTyz.js → c4Diagram-7LVT6UL2-BHM4QTZx.js} +1 -1
  54. package/dist/client/assets/c4Diagram-7LVT6UL2-BHM4QTZx.js.br +0 -0
  55. package/dist/client/assets/c4Diagram-7LVT6UL2-BHM4QTZx.js.gz +0 -0
  56. package/dist/client/assets/channel-BqA2i16W.js +1 -0
  57. package/dist/client/assets/{chunk-2Q5K7J3B-Cat1Dsqx.js → chunk-2Q5K7J3B-TnQro6-_.js} +1 -1
  58. package/dist/client/assets/{chunk-5VM5RSS4-CT0S2-E8.js → chunk-5VM5RSS4-Vl8qqZf_.js} +1 -1
  59. package/dist/client/assets/{chunk-F27PBJKO-7o5_yA1b.js → chunk-F27PBJKO-DH6GfEdY.js} +1 -1
  60. package/dist/client/assets/chunk-F27PBJKO-DH6GfEdY.js.br +0 -0
  61. package/dist/client/assets/chunk-F27PBJKO-DH6GfEdY.js.gz +0 -0
  62. package/dist/client/assets/{chunk-IMKFNOWR-iAZxGMup.js → chunk-IMKFNOWR-DpKvDckf.js} +1 -1
  63. package/dist/client/assets/chunk-IMKFNOWR-DpKvDckf.js.br +0 -0
  64. package/dist/client/assets/chunk-IMKFNOWR-DpKvDckf.js.gz +0 -0
  65. package/dist/client/assets/{chunk-JWPE2WC7-DLvwOWZm.js → chunk-JWPE2WC7-DP773yal.js} +1 -1
  66. package/dist/client/assets/{chunk-POPQ4Y6H-BpiRuG56.js → chunk-POPQ4Y6H-BoR9GKji.js} +1 -1
  67. package/dist/client/assets/{chunk-SVP7TREG-DpB7xpqI.js → chunk-SVP7TREG-DFbN0Uvp.js} +1 -1
  68. package/dist/client/assets/chunk-SVP7TREG-DFbN0Uvp.js.br +0 -0
  69. package/dist/client/assets/chunk-SVP7TREG-DFbN0Uvp.js.gz +0 -0
  70. package/dist/client/assets/{chunk-TICWLB2K-Z_Sti6yX.js → chunk-TICWLB2K-BCoshST2.js} +1 -1
  71. package/dist/client/assets/{chunk-TICWLB2K-Z_Sti6yX.js.br → chunk-TICWLB2K-BCoshST2.js.br} +0 -0
  72. package/dist/client/assets/chunk-TICWLB2K-BCoshST2.js.gz +0 -0
  73. package/dist/client/assets/{chunk-XXDRQBXY-DKngx1rf.js → chunk-XXDRQBXY-DMAOtV4y.js} +1 -1
  74. package/dist/client/assets/classDiagram-ZZMXUADV-ChnKE-K2.js +1 -0
  75. package/dist/client/assets/classDiagram-v2-VYDZK3BY-ChnKE-K2.js +1 -0
  76. package/dist/client/assets/{cose-bilkent-JH36ORCC-CDo8eUXo.js → cose-bilkent-JH36ORCC-BlsyBXEx.js} +1 -1
  77. package/dist/client/assets/cose-bilkent-JH36ORCC-BlsyBXEx.js.br +0 -0
  78. package/dist/client/assets/cose-bilkent-JH36ORCC-BlsyBXEx.js.gz +0 -0
  79. package/dist/client/assets/{cynefin-OW5HDTMX-R6vltrl4.js → cynefin-OW5HDTMX-Btg93pC8.js} +1 -1
  80. package/dist/client/assets/cynefin-OW5HDTMX-Btg93pC8.js.br +0 -0
  81. package/dist/client/assets/cynefin-OW5HDTMX-Btg93pC8.js.gz +0 -0
  82. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-BTGMG-zO.js → cynefinDiagram-5FMLGOSQ-TenkE0c6.js} +1 -1
  83. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-TenkE0c6.js.br +0 -0
  84. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-TenkE0c6.js.gz +0 -0
  85. package/dist/client/assets/{dagre-GXQ25YYZ-D67dNSHU.js → dagre-GXQ25YYZ-BPYSZagf.js} +1 -1
  86. package/dist/client/assets/dagre-GXQ25YYZ-BPYSZagf.js.br +0 -0
  87. package/dist/client/assets/dagre-GXQ25YYZ-BPYSZagf.js.gz +0 -0
  88. package/dist/client/assets/{diagram-S7CK7UJ4-CxZmcHs4.js → diagram-S7CK7UJ4-BrJ04LYZ.js} +1 -1
  89. package/dist/client/assets/diagram-S7CK7UJ4-BrJ04LYZ.js.br +0 -0
  90. package/dist/client/assets/diagram-S7CK7UJ4-BrJ04LYZ.js.gz +0 -0
  91. package/dist/client/assets/{diagram-UQ7AKVKN-BErivsDz.js → diagram-UQ7AKVKN-DFHufHof.js} +1 -1
  92. package/dist/client/assets/diagram-UQ7AKVKN-DFHufHof.js.br +0 -0
  93. package/dist/client/assets/diagram-UQ7AKVKN-DFHufHof.js.gz +0 -0
  94. package/dist/client/assets/{diagram-VSXAHHWV-BQWEvK9d.js → diagram-VSXAHHWV-CFidKRGl.js} +1 -1
  95. package/dist/client/assets/diagram-VSXAHHWV-CFidKRGl.js.br +0 -0
  96. package/dist/client/assets/diagram-VSXAHHWV-CFidKRGl.js.gz +0 -0
  97. package/dist/client/assets/{diagram-VX7I27RA-COR5k4JL.js → diagram-VX7I27RA-C8arbI7W.js} +1 -1
  98. package/dist/client/assets/diagram-VX7I27RA-C8arbI7W.js.br +0 -0
  99. package/dist/client/assets/diagram-VX7I27RA-C8arbI7W.js.gz +0 -0
  100. package/dist/client/assets/{diagram-Z3DM3KII-Cx6oTlVi.js → diagram-Z3DM3KII-fMLMbGcS.js} +1 -1
  101. package/dist/client/assets/diagram-Z3DM3KII-fMLMbGcS.js.br +0 -0
  102. package/dist/client/assets/diagram-Z3DM3KII-fMLMbGcS.js.gz +0 -0
  103. package/dist/client/assets/{ebnfDiagram-PWID7BFC-dKNZki9k.js → ebnfDiagram-PWID7BFC-BjBUR2zi.js} +1 -1
  104. package/dist/client/assets/ebnfDiagram-PWID7BFC-BjBUR2zi.js.br +0 -0
  105. package/dist/client/assets/ebnfDiagram-PWID7BFC-BjBUR2zi.js.gz +0 -0
  106. package/dist/client/assets/{erDiagram-RLTQ6QDP-DD06d9Gl.js → erDiagram-RLTQ6QDP-BVDyIbY-.js} +1 -1
  107. package/dist/client/assets/{erDiagram-RLTQ6QDP-DD06d9Gl.js.br → erDiagram-RLTQ6QDP-BVDyIbY-.js.br} +0 -0
  108. package/dist/client/assets/erDiagram-RLTQ6QDP-BVDyIbY-.js.gz +0 -0
  109. package/dist/client/assets/{flowDiagram-HODETNUW-DXNAvw1d.js → flowDiagram-HODETNUW-Dej14Ugo.js} +1 -1
  110. package/dist/client/assets/flowDiagram-HODETNUW-Dej14Ugo.js.br +0 -0
  111. package/dist/client/assets/flowDiagram-HODETNUW-Dej14Ugo.js.gz +0 -0
  112. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-BSMu3Rsd.js → ganttDiagram-EL5Y4UJY-4q8Cv5Jl.js} +1 -1
  113. package/dist/client/assets/ganttDiagram-EL5Y4UJY-4q8Cv5Jl.js.br +0 -0
  114. package/dist/client/assets/ganttDiagram-EL5Y4UJY-4q8Cv5Jl.js.gz +0 -0
  115. package/dist/client/assets/{gestureArbiter-D1TteC76.js → gestureArbiter-q3jASYgN.js} +1 -1
  116. package/dist/client/assets/gestureArbiter-q3jASYgN.js.br +0 -0
  117. package/dist/client/assets/gestureArbiter-q3jASYgN.js.gz +0 -0
  118. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-DNDKI803.js → gitGraphDiagram-WWUBYQGX-DnE330VW.js} +1 -1
  119. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DnE330VW.js.br +0 -0
  120. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DnE330VW.js.gz +0 -0
  121. package/dist/client/assets/index-Dd_3ISCb.css +1 -0
  122. package/dist/client/assets/index-Dd_3ISCb.css.br +0 -0
  123. package/dist/client/assets/{index-Ctz-IDjR.css.gz → index-Dd_3ISCb.css.gz} +0 -0
  124. package/dist/client/assets/{infoDiagram-27XIBGKW-BRmB1D5B.js → infoDiagram-27XIBGKW-BJyKPHsP.js} +1 -1
  125. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DXU4nnZ6.js → ishikawaDiagram-5VMMS53U-CJV8ONjw.js} +1 -1
  126. package/dist/client/assets/ishikawaDiagram-5VMMS53U-CJV8ONjw.js.br +0 -0
  127. package/dist/client/assets/ishikawaDiagram-5VMMS53U-CJV8ONjw.js.gz +0 -0
  128. package/dist/client/assets/{journeyDiagram-3NMN7TZE-DFx7AfiP.js → journeyDiagram-3NMN7TZE-C_dzPksa.js} +1 -1
  129. package/dist/client/assets/journeyDiagram-3NMN7TZE-C_dzPksa.js.br +0 -0
  130. package/dist/client/assets/journeyDiagram-3NMN7TZE-C_dzPksa.js.gz +0 -0
  131. package/dist/client/assets/{kanban-definition-UXKFOSKX-B1ikfXJe.js → kanban-definition-UXKFOSKX-05lEbrKo.js} +1 -1
  132. package/dist/client/assets/kanban-definition-UXKFOSKX-05lEbrKo.js.br +0 -0
  133. package/dist/client/assets/kanban-definition-UXKFOSKX-05lEbrKo.js.gz +0 -0
  134. package/dist/client/assets/{layout-DkyvZr1Y.js → layout-CV4xlefz.js} +1 -1
  135. package/dist/client/assets/layout-CV4xlefz.js.br +0 -0
  136. package/dist/client/assets/layout-CV4xlefz.js.gz +0 -0
  137. package/dist/client/assets/{linear-CECAbRuX.js → linear-Ne3ggM1q.js} +1 -1
  138. package/dist/client/assets/linear-Ne3ggM1q.js.br +0 -0
  139. package/dist/client/assets/linear-Ne3ggM1q.js.gz +0 -0
  140. package/dist/client/assets/{mermaid.core-CYY7Wb75.js → mermaid.core-CAOB7F_V.js} +5 -5
  141. package/dist/client/assets/mermaid.core-CAOB7F_V.js.br +0 -0
  142. package/dist/client/assets/mermaid.core-CAOB7F_V.js.gz +0 -0
  143. package/dist/client/assets/{mindmap-definition-YA3MSWOX-CTs-Y3Lq.js → mindmap-definition-YA3MSWOX-BWwXAlmP.js} +1 -1
  144. package/dist/client/assets/mindmap-definition-YA3MSWOX-BWwXAlmP.js.br +0 -0
  145. package/dist/client/assets/mindmap-definition-YA3MSWOX-BWwXAlmP.js.gz +0 -0
  146. package/dist/client/assets/{passwordBootstrap-CPNGDwv6.js → passwordBootstrap-Cm1ye6eX.js} +1 -1
  147. package/dist/client/assets/passwordBootstrap-Cm1ye6eX.js.br +0 -0
  148. package/dist/client/assets/passwordBootstrap-Cm1ye6eX.js.gz +0 -0
  149. package/dist/client/assets/{pegDiagram-XKGWAZYB-Y1oZrwtK.js → pegDiagram-XKGWAZYB-DKhyr6CD.js} +1 -1
  150. package/dist/client/assets/pegDiagram-XKGWAZYB-DKhyr6CD.js.br +0 -0
  151. package/dist/client/assets/pegDiagram-XKGWAZYB-DKhyr6CD.js.gz +0 -0
  152. package/dist/client/assets/{pieDiagram-E7YTZNPT-DYSm5OxQ.js → pieDiagram-E7YTZNPT-h2Q03QIh.js} +1 -1
  153. package/dist/client/assets/pieDiagram-E7YTZNPT-h2Q03QIh.js.br +0 -0
  154. package/dist/client/assets/pieDiagram-E7YTZNPT-h2Q03QIh.js.gz +0 -0
  155. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-DpibIBz0.js → quadrantDiagram-AXDQQJYC-CWxDTEGF.js} +1 -1
  156. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-DpibIBz0.js.br → quadrantDiagram-AXDQQJYC-CWxDTEGF.js.br} +0 -0
  157. package/dist/client/assets/quadrantDiagram-AXDQQJYC-CWxDTEGF.js.gz +0 -0
  158. package/dist/client/assets/{railroadDiagram-O6MQD6OU-b7jp7C1K.js → railroadDiagram-O6MQD6OU-BY5sm6Td.js} +1 -1
  159. package/dist/client/assets/railroadDiagram-O6MQD6OU-BY5sm6Td.js.br +0 -0
  160. package/dist/client/assets/railroadDiagram-O6MQD6OU-BY5sm6Td.js.gz +0 -0
  161. package/dist/client/assets/rdpSession-CWvrHSd8.js +1 -0
  162. package/dist/client/assets/rdpSession-CWvrHSd8.js.br +0 -0
  163. package/dist/client/assets/rdpSession-CWvrHSd8.js.gz +0 -0
  164. package/dist/client/assets/{referenceLongPress-BPQ_i68g.js → referenceLongPress-5uMCEptL.js} +1 -1
  165. package/dist/client/assets/referenceLongPress-5uMCEptL.js.br +0 -0
  166. package/dist/client/assets/referenceLongPress-5uMCEptL.js.gz +0 -0
  167. package/dist/client/assets/{requirementDiagram-BXWQKSXE-BMinO1mf.js → requirementDiagram-BXWQKSXE-D8IK92YE.js} +1 -1
  168. package/dist/client/assets/requirementDiagram-BXWQKSXE-D8IK92YE.js.br +0 -0
  169. package/dist/client/assets/requirementDiagram-BXWQKSXE-D8IK92YE.js.gz +0 -0
  170. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-CmC977VA.js → sankeyDiagram-P5KCCOFB-NkH3NrGx.js} +1 -1
  171. package/dist/client/assets/sankeyDiagram-P5KCCOFB-NkH3NrGx.js.br +0 -0
  172. package/dist/client/assets/sankeyDiagram-P5KCCOFB-NkH3NrGx.js.gz +0 -0
  173. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-D6eGbgK8.js → sequenceDiagram-WJ2MYXX4-DieLFBCA.js} +1 -1
  174. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DieLFBCA.js.br +0 -0
  175. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DieLFBCA.js.gz +0 -0
  176. package/dist/client/assets/{sizeCapture-INFHLROL-CnRvyBd8.js → sizeCapture-INFHLROL-C-rwOQvA.js} +1 -1
  177. package/dist/client/assets/sizeCapture-INFHLROL-C-rwOQvA.js.br +0 -0
  178. package/dist/client/assets/sizeCapture-INFHLROL-C-rwOQvA.js.gz +0 -0
  179. package/dist/client/assets/{sparkles-DzadqrlX.js → sparkles-Cku-tzxx.js} +1 -1
  180. package/dist/client/assets/{stateDiagram-D77RDMKH-DRSalH10.js → stateDiagram-D77RDMKH-C7mgOyy6.js} +1 -1
  181. package/dist/client/assets/stateDiagram-D77RDMKH-C7mgOyy6.js.br +0 -0
  182. package/dist/client/assets/stateDiagram-D77RDMKH-C7mgOyy6.js.gz +0 -0
  183. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BDWPsG19.js +1 -0
  184. package/dist/client/assets/{swimlanes-42K2YHIH-u-NnDSzq.js → swimlanes-42K2YHIH-C4aAuzlE.js} +1 -1
  185. package/dist/client/assets/swimlanes-42K2YHIH-C4aAuzlE.js.br +0 -0
  186. package/dist/client/assets/swimlanes-42K2YHIH-C4aAuzlE.js.gz +0 -0
  187. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DE8jpsjW.js +8 -0
  188. package/dist/client/assets/{timeline-definition-24CTP7MA-DkLijg_J.js → timeline-definition-24CTP7MA-CKntrnOJ.js} +1 -1
  189. package/dist/client/assets/timeline-definition-24CTP7MA-CKntrnOJ.js.br +0 -0
  190. package/dist/client/assets/{timeline-definition-24CTP7MA-DkLijg_J.js.gz → timeline-definition-24CTP7MA-CKntrnOJ.js.gz} +0 -0
  191. package/dist/client/assets/{triangle-alert-D_6xTTiX.js → triangle-alert-DPNiOY7C.js} +1 -1
  192. package/dist/client/assets/{vennDiagram-4TSXK5OY-AWGJtiv3.js → vennDiagram-4TSXK5OY-W9jedFfD.js} +1 -1
  193. package/dist/client/assets/vennDiagram-4TSXK5OY-W9jedFfD.js.br +0 -0
  194. package/dist/client/assets/vennDiagram-4TSXK5OY-W9jedFfD.js.gz +0 -0
  195. package/dist/client/assets/{videoCompression-D3y7Bq8J.js → videoCompression-BYHN4Eba.js} +1 -1
  196. package/dist/client/assets/videoCompression-BYHN4Eba.js.br +0 -0
  197. package/dist/client/assets/videoCompression-BYHN4Eba.js.gz +0 -0
  198. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-DI0aZr_y.js → wardleyDiagram-VM6X3IG4-CzvXMjBC.js} +1 -1
  199. package/dist/client/assets/wardleyDiagram-VM6X3IG4-CzvXMjBC.js.br +0 -0
  200. package/dist/client/assets/wardleyDiagram-VM6X3IG4-CzvXMjBC.js.gz +0 -0
  201. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-CCoIN3uU.js → xychartDiagram-S5SC5T6Z-VD8CKhIU.js} +1 -1
  202. package/dist/client/assets/xychartDiagram-S5SC5T6Z-VD8CKhIU.js.br +0 -0
  203. package/dist/client/assets/xychartDiagram-S5SC5T6Z-VD8CKhIU.js.gz +0 -0
  204. package/dist/client/index.html +2 -2
  205. package/dist/client/index.html.br +0 -0
  206. package/dist/client/index.html.gz +0 -0
  207. package/dist/client/sw.js +1 -1
  208. package/dist/client/sw.js.br +0 -0
  209. package/dist/client/sw.js.gz +0 -0
  210. package/dist/server/agent/integrationServer.js +6 -1
  211. package/dist/server/routes/terminal.js +21 -13
  212. package/dist/server/utils/hostResources.js +35 -0
  213. package/dist/server/utils/tmuxRecoveryOperations.js +72 -18
  214. package/package.json +1 -1
  215. package/runtime-manifest.json +3 -3
  216. package/dist/client/assets/App-D8MWr9xp.js +0 -186
  217. package/dist/client/assets/App-D8MWr9xp.js.br +0 -0
  218. package/dist/client/assets/App-D8MWr9xp.js.gz +0 -0
  219. package/dist/client/assets/ArchitecturePanel-CJXvqmtu.js +0 -9
  220. package/dist/client/assets/ArchitecturePanel-CJXvqmtu.js.br +0 -0
  221. package/dist/client/assets/ArchitecturePanel-CJXvqmtu.js.gz +0 -0
  222. package/dist/client/assets/ChangeWalkthroughPanel-ChPZVfRz.js.br +0 -0
  223. package/dist/client/assets/ChangeWalkthroughPanel-ChPZVfRz.js.gz +0 -0
  224. package/dist/client/assets/CollaborationMainWorkspace-DkNhqCj4.js.br +0 -0
  225. package/dist/client/assets/CollaborationMainWorkspace-DkNhqCj4.js.gz +0 -0
  226. package/dist/client/assets/CollaborationTaskContent-BA3bVNJo.js +0 -2
  227. package/dist/client/assets/ComputerControlView-BTntDI6C.js +0 -5
  228. package/dist/client/assets/ComputerControlView-BTntDI6C.js.br +0 -0
  229. package/dist/client/assets/ComputerControlView-BTntDI6C.js.gz +0 -0
  230. package/dist/client/assets/DagPlayground-BIL5vjer.js.br +0 -0
  231. package/dist/client/assets/DagPlayground-BIL5vjer.js.gz +0 -0
  232. package/dist/client/assets/DiffLab-CX1AwU2v.js.br +0 -0
  233. package/dist/client/assets/DiffLab-CX1AwU2v.js.gz +0 -0
  234. package/dist/client/assets/DiffReview-CLc1hwO7.js.br +0 -0
  235. package/dist/client/assets/DiffReview-CLc1hwO7.js.gz +0 -0
  236. package/dist/client/assets/DiffReviewLab-DE6m1o4p.js.br +0 -0
  237. package/dist/client/assets/DiffReviewLab-DE6m1o4p.js.gz +0 -0
  238. package/dist/client/assets/DiffViewer-BDwtwbQM.js.br +0 -0
  239. package/dist/client/assets/DiffViewer-BDwtwbQM.js.gz +0 -0
  240. package/dist/client/assets/ModelPreview-DEwATnxi.js.br +0 -0
  241. package/dist/client/assets/ModelPreview-DEwATnxi.js.gz +0 -0
  242. package/dist/client/assets/RightSidebar-jOQJePDV.js.br +0 -0
  243. package/dist/client/assets/RightSidebar-jOQJePDV.js.gz +0 -0
  244. package/dist/client/assets/abnfDiagram-VCTEODGH-GBSf8AEr.js.br +0 -0
  245. package/dist/client/assets/abnfDiagram-VCTEODGH-GBSf8AEr.js.gz +0 -0
  246. package/dist/client/assets/app-VCmiASzh.js.br +0 -0
  247. package/dist/client/assets/app-VCmiASzh.js.gz +0 -0
  248. package/dist/client/assets/arc-BecvFgjf.js.br +0 -0
  249. package/dist/client/assets/arc-BecvFgjf.js.gz +0 -0
  250. package/dist/client/assets/architectureDiagram-5GKGNRK7-Cfk47zEF.js.br +0 -0
  251. package/dist/client/assets/architectureDiagram-5GKGNRK7-Cfk47zEF.js.gz +0 -0
  252. package/dist/client/assets/blockDiagram-I7D4REHJ-BHYgsLvx.js.br +0 -0
  253. package/dist/client/assets/blockDiagram-I7D4REHJ-BHYgsLvx.js.gz +0 -0
  254. package/dist/client/assets/c4Diagram-7LVT6UL2-ClWWjTyz.js.br +0 -0
  255. package/dist/client/assets/c4Diagram-7LVT6UL2-ClWWjTyz.js.gz +0 -0
  256. package/dist/client/assets/channel-8F8qxLSK.js +0 -1
  257. package/dist/client/assets/chunk-F27PBJKO-7o5_yA1b.js.br +0 -0
  258. package/dist/client/assets/chunk-F27PBJKO-7o5_yA1b.js.gz +0 -0
  259. package/dist/client/assets/chunk-IMKFNOWR-iAZxGMup.js.br +0 -0
  260. package/dist/client/assets/chunk-IMKFNOWR-iAZxGMup.js.gz +0 -0
  261. package/dist/client/assets/chunk-SVP7TREG-DpB7xpqI.js.br +0 -0
  262. package/dist/client/assets/chunk-SVP7TREG-DpB7xpqI.js.gz +0 -0
  263. package/dist/client/assets/chunk-TICWLB2K-Z_Sti6yX.js.gz +0 -0
  264. package/dist/client/assets/classDiagram-ZZMXUADV-C0AmKz7U.js +0 -1
  265. package/dist/client/assets/classDiagram-v2-VYDZK3BY-C0AmKz7U.js +0 -1
  266. package/dist/client/assets/cose-bilkent-JH36ORCC-CDo8eUXo.js.br +0 -0
  267. package/dist/client/assets/cose-bilkent-JH36ORCC-CDo8eUXo.js.gz +0 -0
  268. package/dist/client/assets/cynefin-OW5HDTMX-R6vltrl4.js.br +0 -0
  269. package/dist/client/assets/cynefin-OW5HDTMX-R6vltrl4.js.gz +0 -0
  270. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BTGMG-zO.js.br +0 -0
  271. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BTGMG-zO.js.gz +0 -0
  272. package/dist/client/assets/dagre-GXQ25YYZ-D67dNSHU.js.br +0 -0
  273. package/dist/client/assets/dagre-GXQ25YYZ-D67dNSHU.js.gz +0 -0
  274. package/dist/client/assets/diagram-S7CK7UJ4-CxZmcHs4.js.br +0 -0
  275. package/dist/client/assets/diagram-S7CK7UJ4-CxZmcHs4.js.gz +0 -0
  276. package/dist/client/assets/diagram-UQ7AKVKN-BErivsDz.js.br +0 -0
  277. package/dist/client/assets/diagram-UQ7AKVKN-BErivsDz.js.gz +0 -0
  278. package/dist/client/assets/diagram-VSXAHHWV-BQWEvK9d.js.br +0 -0
  279. package/dist/client/assets/diagram-VSXAHHWV-BQWEvK9d.js.gz +0 -0
  280. package/dist/client/assets/diagram-VX7I27RA-COR5k4JL.js.br +0 -0
  281. package/dist/client/assets/diagram-VX7I27RA-COR5k4JL.js.gz +0 -0
  282. package/dist/client/assets/diagram-Z3DM3KII-Cx6oTlVi.js.br +0 -0
  283. package/dist/client/assets/diagram-Z3DM3KII-Cx6oTlVi.js.gz +0 -0
  284. package/dist/client/assets/ebnfDiagram-PWID7BFC-dKNZki9k.js.br +0 -0
  285. package/dist/client/assets/ebnfDiagram-PWID7BFC-dKNZki9k.js.gz +0 -0
  286. package/dist/client/assets/erDiagram-RLTQ6QDP-DD06d9Gl.js.gz +0 -0
  287. package/dist/client/assets/flowDiagram-HODETNUW-DXNAvw1d.js.br +0 -0
  288. package/dist/client/assets/flowDiagram-HODETNUW-DXNAvw1d.js.gz +0 -0
  289. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BSMu3Rsd.js.br +0 -0
  290. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BSMu3Rsd.js.gz +0 -0
  291. package/dist/client/assets/gestureArbiter-D1TteC76.js.br +0 -0
  292. package/dist/client/assets/gestureArbiter-D1TteC76.js.gz +0 -0
  293. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DNDKI803.js.br +0 -0
  294. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DNDKI803.js.gz +0 -0
  295. package/dist/client/assets/index-Ctz-IDjR.css +0 -1
  296. package/dist/client/assets/index-Ctz-IDjR.css.br +0 -0
  297. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DXU4nnZ6.js.br +0 -0
  298. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DXU4nnZ6.js.gz +0 -0
  299. package/dist/client/assets/journeyDiagram-3NMN7TZE-DFx7AfiP.js.br +0 -0
  300. package/dist/client/assets/journeyDiagram-3NMN7TZE-DFx7AfiP.js.gz +0 -0
  301. package/dist/client/assets/kanban-definition-UXKFOSKX-B1ikfXJe.js.br +0 -0
  302. package/dist/client/assets/kanban-definition-UXKFOSKX-B1ikfXJe.js.gz +0 -0
  303. package/dist/client/assets/layout-DkyvZr1Y.js.br +0 -0
  304. package/dist/client/assets/layout-DkyvZr1Y.js.gz +0 -0
  305. package/dist/client/assets/linear-CECAbRuX.js.br +0 -0
  306. package/dist/client/assets/linear-CECAbRuX.js.gz +0 -0
  307. package/dist/client/assets/mermaid.core-CYY7Wb75.js.br +0 -0
  308. package/dist/client/assets/mermaid.core-CYY7Wb75.js.gz +0 -0
  309. package/dist/client/assets/mindmap-definition-YA3MSWOX-CTs-Y3Lq.js.br +0 -0
  310. package/dist/client/assets/mindmap-definition-YA3MSWOX-CTs-Y3Lq.js.gz +0 -0
  311. package/dist/client/assets/passwordBootstrap-CPNGDwv6.js.br +0 -0
  312. package/dist/client/assets/passwordBootstrap-CPNGDwv6.js.gz +0 -0
  313. package/dist/client/assets/pegDiagram-XKGWAZYB-Y1oZrwtK.js.br +0 -0
  314. package/dist/client/assets/pegDiagram-XKGWAZYB-Y1oZrwtK.js.gz +0 -0
  315. package/dist/client/assets/pieDiagram-E7YTZNPT-DYSm5OxQ.js.br +0 -0
  316. package/dist/client/assets/pieDiagram-E7YTZNPT-DYSm5OxQ.js.gz +0 -0
  317. package/dist/client/assets/quadrantDiagram-AXDQQJYC-DpibIBz0.js.gz +0 -0
  318. package/dist/client/assets/railroadDiagram-O6MQD6OU-b7jp7C1K.js.br +0 -0
  319. package/dist/client/assets/railroadDiagram-O6MQD6OU-b7jp7C1K.js.gz +0 -0
  320. package/dist/client/assets/rdpSession-DU_OJfX5.js +0 -1
  321. package/dist/client/assets/rdpSession-DU_OJfX5.js.br +0 -0
  322. package/dist/client/assets/rdpSession-DU_OJfX5.js.gz +0 -0
  323. package/dist/client/assets/referenceLongPress-BPQ_i68g.js.br +0 -0
  324. package/dist/client/assets/referenceLongPress-BPQ_i68g.js.gz +0 -0
  325. package/dist/client/assets/requirementDiagram-BXWQKSXE-BMinO1mf.js.br +0 -0
  326. package/dist/client/assets/requirementDiagram-BXWQKSXE-BMinO1mf.js.gz +0 -0
  327. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CmC977VA.js.br +0 -0
  328. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CmC977VA.js.gz +0 -0
  329. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-D6eGbgK8.js.br +0 -0
  330. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-D6eGbgK8.js.gz +0 -0
  331. package/dist/client/assets/sizeCapture-INFHLROL-CnRvyBd8.js.br +0 -0
  332. package/dist/client/assets/sizeCapture-INFHLROL-CnRvyBd8.js.gz +0 -0
  333. package/dist/client/assets/stateDiagram-D77RDMKH-DRSalH10.js.br +0 -0
  334. package/dist/client/assets/stateDiagram-D77RDMKH-DRSalH10.js.gz +0 -0
  335. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-DKe8v_ic.js +0 -1
  336. package/dist/client/assets/swimlanes-42K2YHIH-u-NnDSzq.js.br +0 -0
  337. package/dist/client/assets/swimlanes-42K2YHIH-u-NnDSzq.js.gz +0 -0
  338. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-ei5b8ZYx.js +0 -8
  339. package/dist/client/assets/timeline-definition-24CTP7MA-DkLijg_J.js.br +0 -0
  340. package/dist/client/assets/vennDiagram-4TSXK5OY-AWGJtiv3.js.br +0 -0
  341. package/dist/client/assets/vennDiagram-4TSXK5OY-AWGJtiv3.js.gz +0 -0
  342. package/dist/client/assets/videoCompression-D3y7Bq8J.js.br +0 -0
  343. package/dist/client/assets/videoCompression-D3y7Bq8J.js.gz +0 -0
  344. package/dist/client/assets/wardleyDiagram-VM6X3IG4-DI0aZr_y.js.br +0 -0
  345. package/dist/client/assets/wardleyDiagram-VM6X3IG4-DI0aZr_y.js.gz +0 -0
  346. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CCoIN3uU.js.br +0 -0
  347. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CCoIN3uU.js.gz +0 -0
@@ -1,9 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RightSidebar-jOQJePDV.js","assets/app-VCmiASzh.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-C7X98Amf.js","assets/index-Ctz-IDjR.css","assets/App-D8MWr9xp.js","assets/gestureArbiter-D1TteC76.js","assets/gestureArbiter-C2J0D0kV.css","assets/triangle-alert-D_6xTTiX.js","assets/referenceLongPress-BPQ_i68g.js","assets/DiffReview-CLc1hwO7.js","assets/sparkles-DzadqrlX.js","assets/DiffViewer-BDwtwbQM.js","assets/DiffViewer-T3uj2-aP.css","assets/ChangeWalkthroughPanel-ChPZVfRz.js","assets/RightSidebar-DW-JEgm2.css"])))=>i.map(i=>d[i]);
2
- import{ah as gt,aO as At,df as he,bA as e,_ as Dt,cv as Ge,cw as Mt,dg as We,n as yt,X as Se,dl as et,C as Tt,g as Ft,e as Fe,c as Lt,a as Pt,d as jt,dr as It}from"./app-VCmiASzh.js";import{b as s,r as vt}from"./dnd-BCFAPC0L.js";import{ab as Je,ag as Le,a as wt,a2 as Ot,H as Ht,n as tt,a3 as Bt,_ as Ue,b as pe,e as Nt,$ as _t,a1 as nt,t as Ut,ac as qt,i as Wt,r as Jt,R as kt,o as Vt,ad as Kt,a4 as Xt,p as Zt,D as Ee,N as mt,a0 as Yt}from"./App-D8MWr9xp.js";import{U as Qt,l as Gt,i as er,S as tr}from"./RightSidebar-jOQJePDV.js";import{L as rr}from"./DiffViewer-BDwtwbQM.js";import sr from"./purify.es-4eNOHKSq.js";import{L as nr}from"./triangle-alert-D_6xTTiX.js";import{S as St}from"./sparkles-DzadqrlX.js";import"./react-XDCjal2T.js";import"./terminal-C7X98Amf.js";import"./gestureArbiter-D1TteC76.js";import"./referenceLongPress-BPQ_i68g.js";import"./DiffReview-CLc1hwO7.js";import"./ChangeWalkthroughPanel-ChPZVfRz.js";const ir=[["path",{d:"M17 7 7 17",key:"15tmo1"}],["path",{d:"M17 17H7V7",key:"1org7z"}]],ar=gt("arrow-down-left",ir);const lr=[["path",{d:"m15 15 6 6",key:"1s409w"}],["path",{d:"m15 9 6-6",key:"ko1vev"}],["path",{d:"M21 16v5h-5",key:"1ck2sf"}],["path",{d:"M21 8V3h-5",key:"1qoq8a"}],["path",{d:"M3 16v5h5",key:"1t08am"}],["path",{d:"m3 21 6-6",key:"wwnumi"}],["path",{d:"M3 8V3h5",key:"1ln10m"}],["path",{d:"M9 9 3 3",key:"v551iv"}]],cr=gt("expand",lr);function or(r,o){const a=new Map,d={id:"all-perspectives",title:o,summary:r.summary,nodes:[],edges:[]};return r.perspectives.forEach((p,n)=>{const x=`perspective${n}`,g=new Map(p.nodes.map((u,c)=>[u.id,`${x}_node${c}`]));a.set(x,{perspective:p.id}),d.nodes.push({id:x,title:p.title,summary:p.summary,files:[],description:p.description});for(const u of p.nodes){const c=g.get(u.id);a.set(c,{perspective:p.id,node:u.id}),d.nodes.push({...u,id:c,parentId:u.parentId?g.get(u.parentId):x})}d.edges.push(...p.edges.map(u=>({...u,from:g.get(u.from),to:g.get(u.to)})))}),{view:d,references:a}}async function $e(r,o,a,d){const p=new URLSearchParams({root:r}),n=await fetch(`/api/terminal/architecture/${o}${d?"":`${o.includes("?")?"&":"?"}${p}`}`,{signal:a,cache:"no-store",...d?{method:"PUT",headers:{"Content-Type":"application/json","X-XSRF-TOKEN":await At()},body:JSON.stringify({root:r,...d})}:{}}),x=await n.json();if(!n.ok)throw new Error(x.error||`HTTP ${n.status}`);return x}async function ur(r,o){const a=await $e(r,"documents",o);if(!Array.isArray(a.files))throw new Error("Invalid architecture library");return[...new Set(a.files.filter(d=>typeof d=="string"&&Je(d)))].sort()}async function qe(r,o,a){if(!Je(o))throw new Error("Invalid architecture file");const d=await $e(r,`document?${new URLSearchParams({file:o})}`,a);if(!("document"in d)||d.revision!==null&&typeof d.revision!="string")throw new Error("Invalid architecture response");return{document:d.document?Le(JSON.stringify(d.document)):null,revision:typeof d.revision=="string"?d.revision:null}}async function dr(r,o,a,d,p,n,x){const g=await $e(r,"field",void 0,{file:o,perspective:a,node:d,field:p,value:n,revision:x});return Le(JSON.stringify(g.document))}async function mr(r,o,a){const d=await $e(r,`history?${new URLSearchParams({file:o})}`,a);if(!Array.isArray(d.versions))throw new Error("Invalid architecture history");return d.versions}async function hr(r,o){return $e(r,`bundle?${new URLSearchParams({file:o})}`)}async function xr(r,o,a){const d=await $e(r,"bundle",void 0,{bundle:o,revision:a});return Le(JSON.stringify(d.document))}async function pr(r,o,a,d){const p=await $e(r,"document",void 0,{file:o,document:a,...d!==void 0?{revision:d}:{}});return Le(JSON.stringify(p.document))}const fr=s.lazy(()=>Dt(()=>import("./RightSidebar-jOQJePDV.js").then(r=>r.R),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(r=>({default:r.MarkdownPreview})));function rt(r,o){return o?{description:"说明",diagram:"关系图源码",context:"上下文",constraint:"约束",concern:"问题与风险",todo:"待办",note:"备注"}[r]:{description:"Description",diagram:"Diagram source",context:"Context",constraint:"Constraints",concern:"Concerns",todo:"To do",note:"Notes"}[r]}function st({value:r,rootPath:o,onEdit:a,onOpenFile:d}){const{locale:p}=he(),n=p==="zh",x=r.description?.replace(/^#\s+([^\n]+)\n\s*/,(u,c)=>c.trim()===r.title?"":u),g=u=>e.jsx(s.Suspense,{fallback:e.jsx("p",{className:"whitespace-pre-wrap text-sm",children:u}),children:e.jsx(fr,{referenceLines:!1,content:u,filePath:null,rootPath:o??null,lineRange:null,onLineRangeClick:()=>{},scrollTop:0,outlineOpen:!1,lightboxOpen:!1,onLocalLinkOpen:c=>d?.({path:o&&c.path.startsWith(`${o}/`)?c.path.slice(o.length+1):c.path})})});return e.jsxs("div",{className:"space-y-2",children:[x&&e.jsx("div",{className:"min-w-0 overflow-x-auto",children:g(x)}),wt.filter(u=>u!=="description"&&r[u]).map(u=>e.jsxs("details",{className:"rounded-lg border border-border/15 px-2",children:[e.jsx("summary",{className:"min-h-11 cursor-pointer py-3 text-xs font-medium",children:rt(u,n)}),e.jsxs("div",{className:"min-w-0 overflow-x-auto pb-2",children:[u==="diagram"?e.jsx("pre",{className:"whitespace-pre-wrap break-all text-xs",children:r[u]}):g(r[u]),a&&e.jsx("button",{type:"button",className:"min-h-11 rounded px-2 text-xs text-primary hover:bg-surface-elevated",onClick:()=>a(u),children:n?"编辑此字段":"Edit field"})]})]},u)),a&&e.jsx("button",{type:"button",className:"min-h-11 rounded-lg px-3 text-xs text-primary hover:bg-surface-elevated",onClick:()=>a("description"),children:n?"编辑文档":"Edit document"}),r.meta&&e.jsxs("details",{children:[e.jsx("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:n?"版本信息":"Version information"}),e.jsx("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 break-all pb-3 text-xs text-muted-foreground",children:Object.entries(r.meta).filter(([u])=>u!=="previousDiagram").map(([u,c])=>e.jsxs("div",{className:"contents",children:[e.jsx("dt",{children:{created:n?"创建":"Created",updated:n?"更新":"Updated",updateCount:n?"更新次数":"Updates",gitCommit:"Commit",gitBranch:n?"分支":"Branch"}[u]??u}),e.jsx("dd",{children:String(c)})]},u))})]})]})}function Qe({root:r,file:o,perspective:a,node:d,initialField:p,onSaved:n,onCancel:x}){const{locale:g}=he(),u=g==="zh",[c,F]=s.useState(null),[M,k]=s.useState(p),[C,R]=s.useState(""),[N,E]=s.useState(""),[z,$]=s.useState(""),[l,b]=s.useState(!1),h=s.useRef(!0),j=s.useRef(0);s.useEffect(()=>{h.current=!0;const f=++j.current;F(null),$("");const H=new AbortController;return qe(r,o,H.signal).then(P=>{!H.signal.aborted&&f===j.current&&F(P)}).catch(P=>{!H.signal.aborted&&f===j.current&&$(String(P.message))}),()=>{h.current=!1,++j.current,H.abort()}},[r,o]),s.useEffect(()=>{const f=c?.document?.perspectives.find(q=>q.id===a),H=d?f?.nodes.find(q=>q.id===d):f;if(!H||!f)return;const P=H[M]??(M==="description"?H.summary:M==="diagram"?Ot(f,d):"");R(P),E(P)},[c,a,d,M]);const B=C!==N;return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col gap-3",onSubmit:f=>{if(f.preventDefault(),!c||l||!B)return;const H=j.current;b(!0),$(""),dr(r,o,a,d,M,C,c.revision).then(P=>{h.current&&H===j.current&&n(P)}).catch(P=>{h.current&&H===j.current&&$(P.message)}).finally(()=>{h.current&&H===j.current&&b(!1)})},children:[e.jsxs("label",{className:"flex items-center gap-2 text-xs",children:[u?"字段":"Field",e.jsx("select",{"aria-label":u?"文档字段":"Document field",className:"min-h-11 min-w-0 flex-1 rounded bg-surface-2 px-2",value:M,disabled:l||B,onChange:f=>k(f.target.value),children:wt.map(f=>e.jsx("option",{value:f,children:rt(f,u)},f))})]}),B&&e.jsx("p",{className:"text-xs text-muted-foreground",children:u?"保存当前字段后可切换字段。":"Save this field before switching fields."}),!c&&!z&&e.jsx("p",{role:"status",className:"text-xs",children:u?"读取最新文档…":"Loading the latest document…"}),e.jsx("textarea",{"aria-label":rt(M,u),spellCheck:!1,className:"min-h-56 w-full flex-1 resize-y rounded-lg border border-border/30 bg-surface-2 p-3 font-mono text-sm focus-visible:ring-2 focus-visible:ring-ring",disabled:!c||l,maxLength:1e5,value:C,onChange:f=>R(f.target.value)}),z&&e.jsx("p",{role:"alert",className:"break-words text-xs text-destructive",children:z}),e.jsxs("div",{className:"sticky bottom-0 flex gap-2 bg-surface py-2",children:[e.jsx("button",{type:"submit",className:"min-h-11 rounded-lg bg-primary/15 px-4 text-sm text-primary disabled:opacity-40",disabled:!c||l||!B,children:l?u?"保存中…":"Saving…":u?"保存":"Save"}),e.jsx("button",{type:"button",className:"min-h-11 rounded-lg px-4 text-sm hover:bg-surface-elevated",disabled:l,onClick:x,children:u?"取消":"Cancel"})]})]})}function br({root:r,file:o,document:a,onLoaded:d}){const{locale:p}=he(),n=p==="zh",[x,g]=s.useState(""),[u,c]=s.useState(""),[F,M]=s.useState(!1),[k,C]=s.useState(null),[R,N]=s.useState(null),E=s.useRef(null),z=s.useRef(0);s.useEffect(()=>(z.current++,N(null),C(null),g(""),c(""),M(!1),()=>{z.current++}),[r,o]);async function $(b){const h=++z.current;M(!0),g(""),c("");try{await b(()=>h===z.current)}catch(j){h===z.current&&g(j instanceof Error?j.message:String(j))}finally{h===z.current&&M(!1)}}const l="inline-flex min-h-11 items-center gap-1.5 rounded-lg px-3 text-xs hover:bg-surface-elevated disabled:opacity-40";return e.jsxs("details",{className:"rounded-lg border border-border/15 px-3",children:[e.jsx("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:n?"历史、导入与分享":"History, import and sharing"}),e.jsxs("div",{className:"flex flex-wrap gap-1",children:[e.jsxs("button",{className:l,type:"button",disabled:F||!a,onClick:()=>{$(async b=>{const h=await mr(r,o);b()&&C(h)})},children:[e.jsx(Ht,{size:14}),n?"更新差异":"Changes"]}),e.jsxs("button",{className:l,type:"button",disabled:F||!a,onClick:()=>{$(async()=>{await Ge(new Blob([JSON.stringify(a,null,2)],{type:"application/json"}),"termdock-architecture.json")})},children:[e.jsx(tt,{size:14}),"JSON"]}),e.jsxs("button",{className:l,type:"button",disabled:F||!a,onClick:()=>{$(async()=>{const b=await hr(r,o);await Ge(new Blob([JSON.stringify(b,null,2)],{type:"application/json"}),"architecture.omm.json")})},children:[e.jsx(tt,{size:14}),".omm"]}),e.jsxs("button",{className:l,type:"button",disabled:F,onClick:()=>E.current?.click(),children:[e.jsx(Qt,{size:14}),n?"导入":"Import"]}),e.jsxs("button",{className:l,type:"button",disabled:F||!a,onClick:()=>{$(async()=>{const b=Mt(),h=Bt(window.location.origin,{root:r,file:o,...b?{peerId:b.targetPeerId,serviceName:b.serviceName}:{}});await navigator.clipboard.writeText(h),c(n?"链接已复制,打开时需要登录此 Termdock 服务。":"Link copied. Sign in to this Termdock service to view it.")})},children:[e.jsx(rr,{size:14}),n?"复制查看链接":"Copy viewer link"]})]}),e.jsx("input",{ref:E,hidden:!0,type:"file",accept:".json,application/json",onChange:b=>{const h=b.target.files?.[0];b.target.value="",h&&$(async j=>{if(h.size>5e6)throw new Error(n?"文档超过 5 MB。":"Document exceeds 5 MB.");const B=await h.text();if(!j())return;const f=JSON.parse(B);if(f?.format==="termdock-omm-bundle"){const Q=await qe(r,".omm");if(!j())return;N({name:h.name,value:f,file:".omm",revision:Q.revision});return}const H=Le(B),P=H.analysis?Ue(H.analysis):pe,q=await qe(r,P);j()&&N({name:h.name,value:H,file:P,revision:q.revision})})}}),R&&e.jsxs("div",{className:"my-2 rounded-lg bg-surface-2 p-3 text-xs",children:[e.jsxs("p",{className:"break-all",children:[R.name," → ",R.file]}),e.jsx("p",{className:"mt-1 text-muted-foreground",children:R.file===".omm"?n?"合并文档中的目录和字段;同名字段将更新。":"Merge bundled directories and fields; matching fields are updated.":n?"保存为此范围的架构,并保留此前的版本。":"Save this scope and retain its previous version."}),e.jsxs("div",{className:"mt-2 flex gap-2",children:[e.jsx("button",{className:`${l} text-primary`,disabled:F,type:"button",onClick:()=>{$(async b=>{const h=R.file===".omm"?await xr(r,R.value,R.revision):await pr(r,R.file,R.value,R.revision);b()&&(N(null),d(R.file,h))})},children:n?"确认导入":"Import document"}),e.jsx("button",{className:l,disabled:F,type:"button",onClick:()=>N(null),children:n?"取消":"Cancel"})]})]}),F&&e.jsx("p",{role:"status",className:"py-2 text-xs",children:n?"处理中…":"Working…"}),x&&e.jsx("p",{role:"alert",className:"break-words py-2 text-xs text-destructive",children:x}),u&&e.jsx("p",{role:"status",className:"py-2 text-xs text-muted-foreground",children:u}),k&&e.jsxs("div",{className:"space-y-2 pb-3",children:[k.length===0&&e.jsx("p",{className:"text-xs text-muted-foreground",children:n?"还没有历史版本。使用原生命令或文档编辑保存后会保留版本。":"No previous versions. Native saves and document edits retain history."}),k.map(b=>e.jsxs("details",{children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs",children:[new Date(b.savedAt).toLocaleString()," · ",b.changes.length," ",n?"处差异":"changes"]}),e.jsx("ul",{className:"space-y-1 text-xs text-muted-foreground",children:b.changes.map((h,j)=>e.jsxs("li",{className:"break-words",children:[h.kind==="added"?"+":h.kind==="removed"?"−":"~"," ",h.perspective?h.title:n?"项目总览":h.title," · ",h.fields.join(", ")]},j))})]},b.id))]})]})}async function gr(r,o,a=pe){const{document:d}=await qe(r,a,o);if(d?.analysis&&Ue(d.analysis)!==a)throw new Nt("Architecture scope does not match its file");return d}async function yr(r,o){return ur(r,o)}function jr({view:r,parentId:o,selectedId:a,onSelect:d,active:p=!0,referenceWidth:n,inspector:x,inspectorStage:g="details",onDismissInspector:u,onExpandedChange:c,navigation:F,heading:M}){const{t:k,locale:C}=he(),[R,N]=s.useState(1),E=s.useId().replace(/[^a-zA-Z0-9]/g,""),z=s.useRef(null),$=s.useRef(null),l=s.useRef(null),b=s.useRef(null),h=s.useRef(null),[j,B]=s.useState(""),[f,H]=s.useState(!1),[P,q]=s.useState(1),Q=s.useRef(1),[T,ne]=s.useState(!1),fe=s.useRef(!0),V=s.useRef({inspector:x,onDismissInspector:u});V.current={inspector:x,onDismissInspector:u};const _=s.useRef(c);_.current=c;const ee=s.useRef({left:0,top:0}),[ie,oe]=s.useState(!1),[ae,xe]=s.useState({width:320,height:320,clipHeight:0}),v=s.useRef(new Map),O=s.useRef(!1),K=s.useRef(0),le=s.useMemo(()=>_t(r,o,R),[r,o,R]),Y=s.useMemo(()=>nt(r,o).edges,[r,o]),W=s.useMemo(()=>{const i=j.match(/viewBox="([^"]+)"/)?.[1].split(/\s+/).map(Number),S=i?.[2]||320,m=i?.[3]||240,A=T?window.innerWidth:n||ae.width,w=Math.max(1,Math.min(1.4,Math.max(160,A-24)/S));return{width:S,height:m,scale:w}},[j,ae.width,T,n]),ce={width:W.width*W.scale*P,height:W.height*W.scale*P},ue=(i,S,m)=>{const A=Math.max(.01,Math.min(4,i)),w=$.current;if(w){const J=w.getBoundingClientRect(),be=S===void 0?w.clientWidth/2:S-J.left,me=m===void 0?w.clientHeight/2:m-J.top,Z=A/Q.current,ve=(w.scrollLeft+be)*Z-be,ge=(w.scrollTop+me)*Z-me,Ie=()=>{$.current===w&&(w.scrollLeft=ve,w.scrollTop=ge)};window.requestAnimationFrame?window.requestAnimationFrame(Ie):window.setTimeout(Ie,0)}Q.current=A,q(A)},se=()=>{Q.current=1,q(1),$.current&&($.current.scrollLeft=0,$.current.scrollTop=0)};s.useEffect(()=>{let i=!1;return B(""),H(!1),se(),oe(!1),v.current.clear(),le.nodes.length>300?(H(!0),()=>{i=!0}):(Gt().then(async S=>{er(S);const m=await S.render(`td-architecture-${E}`,le.code);i||B(sr.sanitize(m.svg,{USE_PROFILES:{svg:!0,svgFilters:!0}}))}).catch(()=>{i||H(!0)}),()=>{i=!0})},[le.code,E]),s.useEffect(()=>{p||ne(!1)},[p]),s.useEffect(()=>{_.current?.(T)},[T]),s.useEffect(()=>()=>_.current?.(!1),[]),s.useLayoutEffect(()=>{const i=$.current;if(i)return i.scrollLeft=ee.current.left,i.scrollTop=ee.current.top,()=>{ee.current={left:i.scrollLeft,top:i.scrollTop}}},[T,!!j]),s.useEffect(()=>{const i=$.current;if(!i)return;const S=i.closest("[data-architecture-content]"),m=()=>{xe({width:i.clientWidth||320,height:i.clientHeight||320,clipHeight:S?.clientHeight||0})};m();const A=new ResizeObserver(m);return A.observe(i),S&&A.observe(S),()=>A.disconnect()},[j,T]),We(l,T&&p,()=>{V.current.inspector?V.current.onDismissInspector?.():ne(!1)},()=>fe.current?h.current:null),s.useEffect(()=>{if(!T)return;const i=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=i,v.current.clear()}},[T]),s.useLayoutEffect(()=>{const i=z.current?.querySelector("svg"),S=i?.querySelector("g");if(!(!i||!S||typeof S.getBBox!="function"))try{const m=S.getBBox();if(![m.x,m.y,m.width,m.height].every(Number.isFinite)||m.width<=0||m.height<=0)return;const A=`${m.x-16} ${m.y-16} ${m.width+32} ${m.height+32}`;if(i.getAttribute("viewBox")===A)return;i.setAttribute("viewBox",A),B(i.outerHTML)}catch{}},[j,T]),s.useLayoutEffect(()=>{z.current?.querySelectorAll("g.node, g.cluster").forEach(i=>{const S=Number(i.id.match(/(?:^|-)n(\d+)(?:-|$)/)?.[1]),m=le.nodes[S];if(!m)return;i.dataset.architectureRole=m.role,i.dataset.architectureNode=m.id,i.dataset.architectureRelated=String(!!a&&Y.some(w=>w.from===a&&w.to===m.id||w.to===a&&w.from===m.id));const A=i.matches("g.cluster")?i.querySelector("g.cluster-label")??i:i;A!==i&&(i.removeAttribute("role"),i.removeAttribute("tabindex")),A.dataset.architectureNode=m.id,A.setAttribute("role","button"),A.setAttribute("tabindex","0"),A.setAttribute("aria-label",m.title),A.setAttribute("aria-pressed",String(a===m.id)),i.setAttribute("aria-pressed",String(a===m.id))})}),s.useLayoutEffect(()=>{if(!a||g==="source"||g==="analysis")return;const i=$.current,S=[...z.current?.querySelectorAll("[data-architecture-node]")??[]].find(Z=>Z.dataset.architectureNode===a);if(!i||!S)return;let m=i.getBoundingClientRect();const A=i.closest("[data-architecture-content]");if(!T&&A&&m.width>24&&m.height>24){const Z=A.getBoundingClientRect();Z.height>160&&m.height<=Z.height&&(m.top<Z.top?A.scrollTop+=m.top-Z.top:m.bottom>Z.bottom&&(A.scrollTop+=m.bottom-Z.bottom),m=i.getBoundingClientRect());const ve=Math.max(m.top,Z.top),ge=Math.min(m.bottom,Z.bottom);m=new DOMRect(m.left,ve,m.width,Math.max(0,ge-ve))}const w=S.getBoundingClientRect();if(m.width<=24||m.height<=24||w.width<=0||w.height<=0)return;const J=12,be=w.width>m.width-2*J?(w.left+w.right-m.left-m.right)/2:w.left<m.left+J?w.left-m.left-J:w.right>m.right-J?w.right-m.right+J:0,me=w.height>m.height-2*J?(w.top+w.bottom-m.top-m.bottom)/2:w.top<m.top+J?w.top-m.top-J:w.bottom>m.bottom-J?w.bottom-m.bottom+J:0;i.scrollLeft+=be,i.scrollTop+=me},[a,ae.width,ae.height,ae.clipHeight,T,g,j]);const D=i=>{[...z.current?.querySelectorAll("[data-architecture-node]")??[]].find(S=>S.dataset.architectureNode===i)?.focus?.({preventScroll:!0}),d(i)},X="flex h-11 min-w-11 items-center justify-center rounded-lg px-2 hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40",U=e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:X,"aria-label":k("architecture.zoomOut"),disabled:P<=.01,onClick:()=>ue(Q.current/1.25),children:e.jsx(Ut,{size:17})}),e.jsxs("button",{type:"button",className:`${X} text-xs tabular-nums`,"aria-label":k("architecture.resetZoom"),title:k("architecture.resetZoom"),onClick:se,children:[Math.round(W.scale*P*100),"%"]}),e.jsx("button",{type:"button",className:X,"aria-label":k("architecture.zoomIn"),disabled:P>=4,onClick:()=>ue(Q.current*1.25),children:e.jsx(yt,{size:17})}),e.jsx("button",{type:"button",className:X,"aria-label":k("architecture.fitGraph"),onClick:()=>ue(Math.min((ae.width-24)/W.width,(ae.height-24)/W.height)/W.scale),children:e.jsx(tr,{size:17})}),!T&&e.jsx("button",{ref:h,type:"button",className:X,"aria-label":k("architecture.fullscreen"),onClick:()=>{fe.current=!0,ne(!0)},children:e.jsx(cr,{size:17})}),e.jsx("button",{type:"button",className:X,"aria-label":k("architecture.download"),disabled:!j,onClick:()=>{oe(!1),Ge(new Blob([j],{type:"image/svg+xml"}),`architecture-${r.id}.svg`).catch(()=>oe(!0))},children:e.jsx(tt,{size:17})})]}),Ce=r.nodes.find(i=>i.id===o)?.title??r.title,Pe=e.jsxs(e.Fragment,{children:[T?e.jsxs("header",{className:"shrink-0 border-b border-border/15 px-2 py-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"min-w-0 flex-1 px-1",children:M??e.jsx("h2",{className:"truncate text-xs font-semibold",title:Ce,children:Ce})}),e.jsxs("label",{className:"flex shrink-0 items-center gap-1 text-xs text-muted-foreground",children:[C==="zh"?"展开":"Levels",e.jsx("select",{"aria-label":C==="zh"?"展开层级":"Expand levels",className:"h-11 max-w-20 rounded bg-surface px-1 text-foreground",value:R,onChange:i=>N(Number(i.target.value)),children:[0,1,2,6].map(i=>e.jsx("option",{value:i,children:i===0?C==="zh"?"当前层":"Current":i===6?C==="zh"?"全部":"All":`${i}`},i))})]}),e.jsx("button",{ref:b,type:"button",className:X,"aria-label":k("architecture.closeFullscreen"),onClick:()=>ne(!1),children:e.jsx(Se,{size:18})})]}),e.jsx("div",{className:"flex items-center justify-between gap-1",title:k("architecture.panHint"),children:U})]}):e.jsxs("div",{className:"shrink-0 border-b border-border/15 bg-surface-2 px-2 py-1",children:[e.jsx("div",{className:"flex items-center justify-between gap-1",children:U}),e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-1 px-1 text-xs text-muted-foreground",children:[e.jsx("span",{children:k("architecture.panHint")}),e.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[C==="zh"?"展开层级":"Expand levels",e.jsx("select",{"aria-label":C==="zh"?"展开层级":"Expand levels",className:"min-h-8 rounded bg-surface-2 px-2 text-foreground",value:R,onChange:i=>N(Number(i.target.value)),children:[0,1,2,6].map(i=>e.jsx("option",{value:i,children:i===0?C==="zh"?"当前层":"Current level":i===6?C==="zh"?"全部":"All":`${i}`},i))})]})]})]}),T&&F&&e.jsx("div",{className:"shrink-0 px-2",children:F}),ie&&e.jsx("p",{role:"alert",className:"px-3 py-2 text-xs text-destructive",children:k("architecture.downloadFailed")}),e.jsxs("div",{className:T?"relative flex min-h-0 flex-1 flex-col overflow-hidden min-[768px]:flex-row":"relative",children:[f?e.jsx("p",{role:"alert",className:"p-4 text-sm text-muted-foreground",children:le.nodes.length>300?C==="zh"?"图中模块较多,请减少展开层级或选择单个视角。":"This graph has many modules. Expand fewer levels or select one perspective.":k("architecture.diagramFailed")}):j?e.jsx("div",{ref:$,"data-sidebar-gesture-ignore":!0,className:`termdock-architecture-viewport overflow-auto overscroll-contain p-3 ${T?"min-h-0 min-w-0 flex-1":"h-[min(50dvh,26rem)]"}`,style:{touchAction:"none",maxHeight:!T&&ae.clipHeight?Math.max(160,ae.clipHeight-150):void 0},onPointerDown:i=>{if(i.button!==0)return;v.current.size||(O.current=!1,K.current=0);const S=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node")??void 0;v.current.set(i.pointerId,{x:i.clientX,y:i.clientY,nodeId:S}),v.current.size>1&&(O.current=!0);try{i.currentTarget.setPointerCapture?.(i.pointerId)}catch{}},onPointerMove:i=>{const S=v.current.get(i.pointerId);if(!S)return;const m=[...v.current.values()];v.current.set(i.pointerId,{...S,x:i.clientX,y:i.clientY});const A=[...v.current.values()];if(A.length>=2){const w=me=>Math.hypot(me[0].x-me[1].x,me[0].y-me[1].y),J=w(m),be=w(A);J>0&&ue(Q.current*be/J,(A[0].x+A[1].x)/2,(A[0].y+A[1].y)/2),O.current=!0}else{const w=S.x-i.clientX,J=S.y-i.clientY;K.current+=Math.hypot(w,J),K.current>5&&(O.current=!0),i.currentTarget.scrollLeft+=w,i.currentTarget.scrollTop+=J}},onPointerUp:i=>{const S=v.current.get(i.pointerId),m=v.current.size===1&&!O.current&&S?.nodeId;v.current.delete(i.pointerId),m&&(O.current=!0,D(m))},onPointerCancel:i=>{v.current.delete(i.pointerId),O.current=!0},onLostPointerCapture:i=>{v.current.delete(i.pointerId)},children:e.jsx("div",{ref:z,role:"group","aria-label":k("architecture.modules"),className:"termdock-architecture-diagram mx-auto",style:ce,onClick:i=>{if(O.current)return;const m=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node");m&&D(m)},onKeyDown:i=>{if(i.key!=="Enter"&&i.key!==" ")return;const S=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node");S&&(i.preventDefault(),D(S))},dangerouslySetInnerHTML:{__html:j}})}):e.jsx("p",{role:"status",className:"p-4 text-sm text-muted-foreground",children:k("architecture.rendering")}),T&&x]})]});return T?vt.createPortal(e.jsx("section",{ref:l,tabIndex:-1,role:"dialog","aria-modal":"true","aria-label":k("architecture.diagram"),"data-sidebar-gesture-ignore":!0,className:"fixed inset-0 z-modal-panel flex flex-col overflow-hidden bg-surface text-foreground pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]",children:Pe}),document.body):e.jsx("section",{className:"overflow-clip rounded-xl border border-border/20 bg-surface-2","aria-label":k("architecture.diagram"),children:Pe})}function je(r,o){let a=r.trim().replace(/^@/,"");/^([`"']).*\1$/.test(a)&&(a=a.slice(1,-1)),a=a.replace(/\\ /g," ").replace(/:\d+(?:-\d+)?$/,"").replace(/\/+$/,""),/^([`"']).*\1$/.test(a)&&(a=a.slice(1,-1));const d=o.replace(/\/+$/,"");if(a.startsWith("/")){if(!a.startsWith(`${d}/`))return null;a=a.slice(d.length+1)}return a=a.replace(/^\.\//,""),a.length<=1024&&qt(a)?a:null}function ht(r,o){const a=[...r.matchAll(/^# (.+?): hunk \d+,/gm)].map(x=>x[1]),p=(a.length?a:r.split(/\r?\n/).map(x=>x.trim()).filter(Boolean)).map(x=>je(x,o));if(p.some(x=>x===null))return null;const n=[...new Set(p)];return n.length<=20?n:null}function $t({rootPath:r,initialDirectory:o,selected:a,onChange:d,selectionDisabled:p=!1,compact:n=!1}){const{t:x}=he(),g=r.replace(/\/+$/,"")||"/",[u,c]=s.useState(()=>o&&je(o,g)?o.replace(/\/+$/,""):g),[F,M]=s.useState(""),[k,C]=s.useState(null),[R,N]=s.useState(0),[E,z]=s.useState(null);s.useEffect(()=>{if(!E)return;const f=window.setTimeout(()=>z(null),1800);return()=>window.clearTimeout(f)},[E]);const $=et(f=>f.invalidateDirectoryCache),l=new Set(a.map(f=>`${g==="/"?"":g}/${f}`)),b=f=>{const H=je(f,g);p||!H||a.includes(H)||a.length>=20||d([...a,H])},h=f=>{f!==g&&!je(f,g)||(c(f),M(""),C(null))},j=`inline-flex shrink-0 items-center justify-center rounded-lg text-xs hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40 ${n?"h-8 w-8 [@media(pointer:coarse)]:h-11 [@media(pointer:coarse)]:w-11":"h-11 w-11"}`,B=je(u,g);return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"shrink-0 px-2 py-1",children:e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("button",{type:"button",className:j,disabled:u===g,"aria-label":x("rightSidebar.parentFolder"),onClick:()=>h(u.slice(0,u.lastIndexOf("/"))||g),children:e.jsx(Wt,{size:17})}),e.jsx("button",{type:"button",className:j,disabled:u===g,"aria-label":x("rightSidebar.backToProjectRoot"),onClick:()=>h(g),children:e.jsx(Jt,{size:16})}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium",title:u,children:B??(u.split("/").pop()||"/")}),B&&e.jsx("button",{type:"button",className:`${j} text-primary`,disabled:p||!a.includes(B)&&a.length>=20,"aria-label":`${x("architecture.addScopeReference")}: ${u.split("/").pop()}`,title:B,"aria-pressed":a.includes(B),onClick:()=>b(u),children:a.includes(B)?e.jsx(Tt,{size:15}):e.jsx(nr,{size:15})}),e.jsx("button",{type:"button",className:j,"aria-label":x("rightSidebar.refreshFiles"),onClick:()=>{$(u,!0),N(f=>f+1)},children:e.jsx(kt,{size:15})})]})}),p&&e.jsx("p",{role:"alert",className:"shrink-0 px-3 pb-2 text-xs text-muted-foreground",children:x("architecture.correctPathsFirst")}),e.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 pb-2",children:e.jsx("input",{"aria-label":x("architecture.searchScopePaths"),placeholder:x("architecture.searchScopePaths"),value:F,onChange:f=>M(f.target.value),className:`${n?"h-9 [@media(pointer:coarse)]:h-11":"h-11"} w-full rounded-lg border border-border/20 bg-surface-2 px-3 text-sm focus-visible:ring-2 focus-visible:ring-ring`})}),e.jsx("div",{className:"min-h-0 flex-1 overflow-auto overscroll-contain bg-surface",children:e.jsx(Vt,{rootPath:u,selectedFilePath:k,onFileSelect:f=>{C(f),b(f)},onDirectoryRoot:h,onPathReference:b,getReferenceText:f=>je(f,g)??f,query:F,onReferenceCopied:z,copiedReferenceKey:E,onSearchFromDirectory:h,referenceSelection:{paths:l,label:x("architecture.addScopeReference"),disabled:p||a.length>=20}},`${u}:${R}`)})]})}function vr({rootPath:r,initialDirectory:o,initial:a,onConfirm:d,onCancel:p}){const{t:n}=he(),x=s.useRef(null);We(x,!0,p);const g=s.useId(),[u,c]=s.useState(a);s.useEffect(()=>{const M=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=M}},[]);const F="inline-flex min-h-11 items-center justify-center gap-1.5 rounded-lg px-3 text-xs hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40";return vt.createPortal(e.jsxs("div",{className:"fixed inset-0 z-popover flex items-center justify-center p-[max(0.75rem,env(safe-area-inset-top))]",children:[e.jsx("button",{type:"button",className:"absolute inset-0 z-10 cursor-default bg-[var(--app-backdrop)]","aria-label":n("common.cancel"),onClick:p}),e.jsxs("section",{ref:x,id:`${g}-dialog`,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":g,"aria-describedby":`${g}-hint`,className:"relative z-20 flex h-full max-h-[42rem] w-full max-w-xl flex-col overflow-hidden rounded-xl border border-border/20 bg-surface text-foreground shadow-xl",children:[e.jsxs("header",{className:"shrink-0 px-3 py-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{id:g,className:"min-w-0 flex-1 text-sm font-semibold",title:n("architecture.browsePathsHint"),children:n("architecture.choosePaths")}),e.jsx("button",{type:"button",className:F,"aria-label":n("common.close"),onClick:p,children:e.jsx(Se,{size:17})})]}),e.jsx("p",{id:`${g}-hint`,className:"sr-only",children:n("architecture.browsePathsHint")})]}),e.jsx($t,{rootPath:r,initialDirectory:o,selected:u,onChange:c}),e.jsxs("footer",{className:"shrink-0 space-y-2 border-t border-border/15 p-3",children:[e.jsxs("p",{className:"text-xs text-muted-foreground",children:[n("architecture.selectedPaths")," ",u.length," / 20"]}),u.length>0&&e.jsx("div",{className:"flex max-h-24 flex-wrap gap-1 overflow-y-auto",children:u.map(M=>e.jsxs("button",{type:"button",className:`${F} min-w-0 max-w-full bg-surface-2`,"aria-label":`${n("architecture.removePath")}: ${M}`,onClick:()=>c(k=>k.filter(C=>C!==M)),children:[e.jsx("span",{className:"truncate font-mono",children:M}),e.jsx(Se,{size:13,className:"shrink-0"})]},M))}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{type:"button",className:F,onClick:p,children:n("common.cancel")}),e.jsx("button",{type:"button",className:`${F} bg-primary/15 text-primary`,onClick:()=>d(u),children:n("architecture.usePaths")})]})]})]})]}),document.body)}function xt({rootPath:r,initial:o,outputFile:a,currentFile:d,currentDirectory:p,active:n=!0,onInsertPrompt:x,onPrepared:g,onClose:u}){const{t:c,locale:F}=he(),M=s.useRef(null),k=s.useRef(null);We(k,n,u),s.useLayoutEffect(()=>{n&&k.current?.scrollIntoView?.({block:"start"})},[n]);const[C,R]=s.useState(!1);s.useLayoutEffect(()=>{const D=k.current;if(!n||!D)return;const X=()=>R(D.clientWidth>=900);if(X(),typeof ResizeObserver>"u")return;const U=new ResizeObserver(X);return U.observe(D),()=>U.disconnect()},[n]);const N=s.useId(),[E,z]=s.useState(o.kind),[$,l]=s.useState(o.target),[b,h]=s.useState(o.paths.join(`
3
- `)),[j,B]=s.useState(o.depth),[f,H]=s.useState(o.focus),[P,q]=s.useState(null),[Q,T]=s.useState(!1),[ne,fe]=s.useState(!1),V=s.useRef(0);s.useEffect(()=>()=>{V.current++},[]),s.useEffect(()=>{n||(V.current++,T(!1),fe(!1))},[n]);const _=ht(b,r),ee=d?je(d,r):null,ie=p?je(p,r):null,oe=ie?p:ee?d.slice(0,d.lastIndexOf("/")):r,xe=n&&C&&E!=="project"&&!a&&!ne;let v=null;try{(E==="project"||_)&&(v=Kt({kind:E,target:$,paths:_??[],depth:j,focus:f}))}catch{}const O=v?Xt(r,F,v,a):"",K="inline-flex min-h-11 items-center justify-center gap-1.5 rounded-lg text-xs font-medium transition hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40",le=`${K} px-3`,Y=`${K} px-1`,W="min-h-10 w-full min-w-0 rounded-lg border border-border/20 bg-surface px-2 py-2 text-sm text-foreground focus-visible:ring-2 focus-visible:ring-ring",ce=()=>{V.current++,T(!1),q(null)},ue=D=>{h(_?[...new Set([..._,D])].join(`
4
- `):`${b.trim()}
5
- ${D}`),ce()},se=v;return e.jsxs("div",{ref:k,id:`${N}-workspace`,tabIndex:-1,className:xe?"grid min-h-0 min-w-0 flex-1 grid-cols-[20rem_minmax(0,1fr)] grid-rows-[minmax(0,1fr)] items-start gap-3":"min-w-0 shrink-0",children:[xe&&e.jsxs("section",{"aria-label":c("architecture.choosePaths"),"aria-describedby":`${N}-browser-hint`,className:"flex h-full min-h-0 min-w-0 flex-col overflow-hidden rounded-xl border border-border/20 bg-surface-2",children:[e.jsxs("header",{className:"flex min-h-9 shrink-0 items-center gap-2 px-3",children:[e.jsx("h3",{className:"min-w-0 flex-1 truncate text-xs font-medium",title:c("architecture.browsePathsHint"),children:c("architecture.choosePaths")}),e.jsxs("p",{role:"status","aria-label":`${c("architecture.selectedPaths")} ${_?.length??0} / 20`,className:"shrink-0 text-xs tabular-nums text-muted-foreground",children:[_?.length??0," / 20"]}),e.jsx("p",{id:`${N}-browser-hint`,className:"sr-only",children:c("architecture.browsePathsHint")})]}),e.jsx($t,{compact:!0,rootPath:r,initialDirectory:oe,selected:_??[],selectionDisabled:!_,onChange:D=>{h(D.join(`
6
- `)),ce()}})]}),e.jsxs("form",{ref:M,tabIndex:-1,className:`min-w-0 space-y-2.5 rounded-xl border border-border/20 bg-surface-2 p-3 ${xe?"max-h-full overflow-y-auto overscroll-contain":""}`,onSubmit:D=>{if(D.preventDefault(),!se||Q||!n||!M.current)return;const X=++V.current,U=M.current;U.focus({preventScroll:!0}),T(!0),q(null),Promise.resolve().then(()=>X===V.current&&U.isConnected?x(O,U):!1).then(Ce=>{X===V.current&&(Ce===!0?(g(a??Ue(se),se),q("inserted")):q("insertFailed"))}).catch(()=>{X===V.current&&q("insertFailed")}).finally(()=>{X===V.current&&T(!1)})},children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("h2",{className:"text-sm font-medium",children:c(a?"architecture.updateAnalysis":"architecture.prepare")}),e.jsx("button",{type:"button",className:`${le} px-2`,"aria-label":c("architecture.closePreparation"),onClick:u,children:e.jsx(Se,{size:16})})]}),e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${N}-kind`,children:[e.jsx("span",{children:c("architecture.analysisRange")}),e.jsxs("select",{id:`${N}-kind`,className:W,value:E,disabled:!!a,onChange:D=>{z(D.target.value),ce()},children:[e.jsx("option",{value:"project",children:c("architecture.projectRange")}),e.jsx("option",{value:"module",children:c("architecture.moduleRange")}),e.jsx("option",{value:"feature",children:c("architecture.featureRange")})]})]}),E==="feature"&&e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${N}-target`,children:[e.jsx("span",{children:c("architecture.featureTarget")}),e.jsx("input",{id:`${N}-target`,className:W,value:$,readOnly:!!a,maxLength:1e3,placeholder:c("architecture.featurePlaceholder"),onChange:D=>{l(D.target.value),ce()},"aria-describedby":`${N}-validation`})]}),E!=="project"&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"block text-xs",htmlFor:`${N}-paths`,children:c(E==="module"?"architecture.modulePaths":"architecture.startPaths")}),e.jsx("textarea",{id:`${N}-paths`,className:`${W} resize-y font-mono text-xs`,rows:2,value:b,readOnly:!!a,placeholder:c("architecture.modulePlaceholder"),onChange:D=>{h(D.target.value),ce()},onBlur:()=>{!a&&_&&h(_.join(`
7
- `))},onPaste:D=>{if(a)return;const X=ht(D.clipboardData.getData("text/plain"),r);if(!X?.length||!_)return;const U=[...new Set([..._,...X])];U.length>20||(D.preventDefault(),h(U.join(`
8
- `)),ce())},"aria-describedby":`${N}-paths-hint ${N}-validation`}),!a&&e.jsxs("div",{className:"flex flex-wrap gap-1",children:[!xe&&e.jsxs("button",{type:"button",className:`${Y} text-primary`,"aria-label":c("architecture.choosePaths"),onClick:()=>fe(!0),children:[e.jsx(Zt,{size:14}),c("architecture.browsePaths")]}),ie&&e.jsx("button",{type:"button",className:Y,disabled:!!_?.includes(ie)||(_?.length??0)>=20,title:ie,onClick:()=>ue(ie),children:c("architecture.useCurrentDirectory")}),ee&&e.jsx("button",{type:"button",className:Y,disabled:!!_?.includes(ee)||(_?.length??0)>=20,title:ee,onClick:()=>ue(ee),children:c("architecture.useCurrentFile")})]}),e.jsx("p",{id:`${N}-paths-hint`,className:"text-xs leading-relaxed text-muted-foreground",title:r,children:c("architecture.pathsHint")})]}),!v&&(b.trim()||$.trim())&&e.jsx("p",{id:`${N}-validation`,role:"alert",className:"text-xs text-muted-foreground",children:c(E==="module"?"architecture.invalidPaths":"architecture.requiredFeature")}),e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${N}-focus`,children:[e.jsx("span",{children:c("architecture.focus")}),e.jsx("textarea",{id:`${N}-focus`,className:`${W} resize-y`,rows:2,maxLength:2e3,value:f,placeholder:c("architecture.focusPlaceholder"),onChange:D=>{H(D.target.value),ce()}})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("button",{type:"submit",disabled:!v||Q,className:`${le} bg-primary/15 text-primary`,children:c(Q?"architecture.inserting":"architecture.insertPrompt")}),e.jsxs("button",{type:"button",disabled:!v||Q,className:le,onClick:()=>{if(!se)return;const D=++V.current;Promise.resolve().then(()=>navigator.clipboard.writeText(O)).then(()=>{D===V.current&&(g(a??Ue(se),se),q("copied"))}).catch(()=>{D===V.current&&q("failed")})},children:[e.jsx(Ft,{size:14}),c("architecture.copyPrompt")]})]}),P&&e.jsx("p",{role:"status",className:"text-xs text-muted-foreground",children:c(`architecture.${P}`)}),e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer py-2 text-xs text-muted-foreground",children:c("architecture.analysisOptions")}),e.jsxs("div",{className:"space-y-3 pt-1",children:[e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${N}-depth`,children:[e.jsx("span",{children:c("architecture.dependencyDepth")}),e.jsxs("select",{id:`${N}-depth`,className:W,value:j,onChange:D=>{B(D.target.value),ce()},children:[e.jsx("option",{value:"boundary",children:c("architecture.boundaryDepth")}),e.jsx("option",{value:"dependencies",children:c("architecture.followDepth")})]})]}),E==="feature"&&e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:c("architecture.featureScopeHint")}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:c(a?"architecture.updateOnly":"architecture.independentHint")})]})]}),e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer py-2 text-xs text-muted-foreground",children:c("architecture.previewPrompt")}),e.jsx("textarea",{readOnly:!0,"aria-label":c("architecture.previewPrompt"),value:O,className:`${W} mt-2 h-52 resize-y font-mono text-xs`})]}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:c("architecture.promptHint")})]}),n&&ne&&e.jsx(vr,{rootPath:r,initialDirectory:oe,initial:_??[],onCancel:()=>fe(!1),onConfirm:D=>{h(D.join(`
9
- `)),fe(!1),ce()}})]})}function wr({node:r,view:o,parentId:a,onSelect:d,onExplore:p,onAnalyze:n,onOpenFile:x,onClose:g,document:u,rootPath:c,onEdit:F,onReference:M,embedded:k=!1}){const{t:C,locale:R}=he(),N=[...r.references??[],...u?.perspectives.flatMap(l=>l.nodes.filter(b=>b.references?.some(h=>h.perspective===o.id&&(!h.node||h.node===r.id))).map(b=>({perspective:l.id,node:b.id})))??[]],E=nt(o,a),z=E.edges.filter(l=>l.from===r.id||l.to===r.id),$="inline-flex min-h-11 items-center justify-center gap-1.5 rounded-lg px-3 text-xs font-medium transition hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring";return e.jsxs("section",{className:k?"space-y-3":"space-y-3 rounded-xl border border-primary/30 bg-surface-2 p-3","aria-label":r.title,children:[!k&&e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("h3",{className:"pt-2 text-sm font-semibold",children:r.title}),e.jsx("button",{type:"button",className:`${$} shrink-0 px-2`,"aria-label":C("architecture.closeDetail"),onClick:g,children:e.jsx(Se,{size:16})})]}),e.jsxs(e.Fragment,{children:[!r.description&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed",children:r.summary}),e.jsx(st,{value:r,rootPath:c,onEdit:F,onOpenFile:x})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[o.nodes.some(l=>l.parentId===r.id)&&e.jsxs("button",{type:"button",className:`${$} bg-primary/15 text-primary`,onClick:p,children:[C("architecture.explore"),e.jsx(Fe,{size:14})]}),r.files.length>0&&e.jsxs("button",{type:"button",className:`${$} text-primary`,onClick:n,children:[e.jsx(St,{size:14}),C("architecture.analyzeModule")]})]}),N.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground",children:R==="zh"?"跨视角引用":"Cross-perspective references"}),N.map((l,b)=>e.jsxs("button",{type:"button","aria-label":`${R==="zh"?"打开引用":"Open reference"}: ${u?.perspectives.find(h=>h.id===l.perspective)?.nodes.find(h=>h.id===l.node)?.title??u?.perspectives.find(h=>h.id===l.perspective)?.title??l.perspective}`,className:`${$} block w-full text-left text-primary`,onClick:()=>M?.(l),children:[u?.perspectives.find(h=>h.id===l.perspective)?.nodes.find(h=>h.id===l.node)?.title??u?.perspectives.find(h=>h.id===l.perspective)?.title??l.perspective,e.jsx(Fe,{size:14})]},b))]}),z.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"mb-1 text-xs font-semibold text-muted-foreground",children:C("architecture.connections")}),e.jsx("div",{className:"space-y-1",children:z.map((l,b)=>{const h=l.from===r.id,j=E.nodes.find(B=>B.id===(h?l.to:l.from));return j?e.jsxs("button",{type:"button",className:"flex min-h-11 w-full items-center gap-2 rounded-lg bg-surface px-3 py-2 text-left text-xs hover:bg-surface-elevated",onClick:()=>d(j.id),"aria-label":`${C(h?"architecture.outgoing":"architecture.incoming")}: ${j.title} · ${l.label}`,children:[h?e.jsx(Lt,{size:15,className:"shrink-0 text-primary"}):e.jsx(ar,{size:15,className:"shrink-0 text-muted-foreground"}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block font-medium",children:j.title}),e.jsxs("span",{className:"mt-0.5 block break-words text-muted-foreground",children:[C(h?"architecture.outgoing":"architecture.incoming")," · ",l.label]})]}),e.jsx(Fe,{size:14,className:"shrink-0"})]},`${l.from}:${l.to}:${b}`):null})})]}),r.files.length>0&&e.jsxs("details",{open:r.files.length<=4,children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs font-semibold text-muted-foreground",children:[C("architecture.sourceFiles")," (",r.files.length,")"]}),r.files.map(l=>e.jsxs("button",{type:"button",className:"block min-h-11 w-full break-all rounded-lg px-2 py-2 text-left font-mono text-xs text-primary hover:bg-surface-elevated",onClick:()=>x(l),children:[l.path,l.line?`:${l.line}`:""]},`${l.path}:${l.line??""}`))]})]})}function pt({title:r,stageKey:o,source:a=!1,fullHeight:d=!1,inGraph:p=!1,docked:n=!1,side:x=!1,active:g=!0,onBack:u,backLabel:c,onClose:F,onDismiss:M,onCollapse:k,children:C}){const{t:R}=he(),N=s.useRef(null),E=s.useRef(null),z=s.useRef(new Map);We(N,g&&!p&&(!n||d),M),s.useLayoutEffect(()=>{E.current&&(E.current.scrollTop=z.current.get(o)??0),g&&N.current?.querySelector("button:not(:disabled)")?.focus({preventScroll:!0})},[o,g]);const $=n?d?"relative h-full w-full flex-1":x?"relative h-full w-[22rem] max-w-[40%] shrink-0":"relative h-[48%] max-h-96 w-full shrink-0":p?`${a||d?"inset-0":"inset-x-0 bottom-0 max-h-[48%]"} min-[768px]:inset-y-0 min-[768px]:left-auto min-[768px]:right-0 min-[768px]:max-h-none ${a||d?"min-[768px]:w-[min(50vw,40rem)]":"min-[768px]:w-[22rem]"}`:x?"inset-y-0 right-0 w-[22rem] max-w-full":"inset-0",l="inline-flex min-h-11 shrink-0 items-center justify-center gap-1.5 rounded-lg px-2 text-xs text-primary hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring",b=()=>{E.current&&z.current.set(o,E.current.scrollTop)};return e.jsxs("aside",{ref:N,tabIndex:-1,role:p||n&&!d?void 0:"dialog","aria-modal":p?void 0:!1,"aria-label":r,"data-architecture-inspector":!0,"data-sidebar-gesture-ignore":!0,onClickCapture:b,className:`${n?"":"absolute"} z-20 flex min-h-0 flex-col overflow-hidden border border-border/30 bg-surface ${n?"":"shadow-xl"} ${$}`,children:[e.jsxs("header",{className:"flex shrink-0 items-center gap-2 border-b border-border/15 px-2 py-1",children:[e.jsxs("button",{type:"button",className:l,"aria-label":u?c:R("architecture.closeDetail"),onClick:u??F,children:[e.jsx(Pt,{size:17}),e.jsx("span",{children:u?c:R("architecture.backToMap")})]}),e.jsx("h2",{className:"min-w-0 flex-1 truncate text-sm font-semibold",title:r,children:r}),k&&e.jsx("button",{type:"button",className:l,"aria-label":R("architecture.collapseDetail"),onClick:k,children:e.jsx(jt,{size:17})}),u&&e.jsx("button",{type:"button",className:l,"aria-label":R("architecture.closeDetail"),onClick:F,children:e.jsx(Se,{size:17})})]}),e.jsx("div",{ref:E,onScroll:b,className:`min-h-0 flex-1 ${a?"overflow-hidden":"overflow-y-auto overscroll-contain p-3"}`,children:C})]})}function Nr({node:r,onExpand:o,onClose:a}){const{t:d}=he(),p=s.useRef(null),n=s.useRef(null);s.useLayoutEffect(()=>{document.activeElement!==p.current&&(n.current=document.activeElement),p.current?.focus({preventScroll:!0})},[r.id]),s.useLayoutEffect(()=>()=>{n.current?.isConnected&&n.current.focus({preventScroll:!0})},[]);const x="inline-flex min-h-11 shrink-0 items-center justify-center rounded-lg px-2 text-xs hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring";return e.jsxs("section",{ref:p,tabIndex:-1,"aria-label":r.title,"data-architecture-inspector":!0,"data-sidebar-gesture-ignore":!0,className:"shrink-0 border-t border-border/30 bg-surface px-3 pb-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"min-w-0 flex-1 truncate text-sm font-semibold",title:r.title,children:r.title}),e.jsx("button",{type:"button",className:`${x} text-primary`,onClick:o,children:d("architecture.expandDetail")}),e.jsx("button",{type:"button",className:x,"aria-label":d("architecture.closeDetail"),onClick:a,children:e.jsx(Se,{size:17})})]}),e.jsx("p",{className:"line-clamp-2 break-words text-xs leading-relaxed text-muted-foreground",children:r.summary})]})}function it(r){return`termdock.architecture.selection:${r}`}function ft(r){try{const o=r?sessionStorage.getItem(it(r)):null;return o&&Je(o)?o:pe}catch{return pe}}function bt(r){try{const o=r?sessionStorage.getItem(it(r)):null;return!!o&&Je(o)}catch{return!1}}function Ir({rootPath:r,active:o,onInsertPrompt:a,onOpenFile:d,renderSource:p}){const{t:n,locale:x}=he(),g=et(t=>t.rootPath===r?t.selectedFilePath:null),u=et(t=>t.rootPath===r?t.explorerRoot:null),[c,F]=s.useState(()=>ft(r)),[M,k]=s.useState([]),[C,R]=s.useState(!1),[N,E]=s.useState(Ee),[z,$]=s.useState(null),[l,b]=s.useState(null),[h,j]=s.useState(!0),[B,f]=s.useState(null),[H,P]=s.useState(0),[q,Q]=s.useState(!1),[T,ne]=s.useState(!1),[fe,V]=s.useState(""),[_,ee]=s.useState([]),[ie,oe]=s.useState(null),[ae,xe]=s.useState([]),[v,O]=s.useState(null),[K,le]=s.useState(null),[Y,W]=s.useState(null),[ce,ue]=s.useState(null),[se,D]=s.useState(!1),[X,U]=s.useState(!1),[Ce,Pe]=s.useState(()=>typeof window<"u"&&window.innerWidth>=768),i=s.useRef(0),S=s.useRef(bt(r)),m=s.useRef(null),A=s.useRef(null),[w,J]=s.useState(0),[be,me]=s.useState("auto"),Z=be==="auto"?w>=560?"graph":"outline":be,ve=s.useRef(null),ge=t=>{S.current=!0,F(t);try{r&&sessionStorage.setItem(it(r),t)}catch{}},Ie=()=>{$(null),ve.current?.focus({preventScroll:!0})};s.useEffect(()=>{const t=()=>Pe(window.innerWidth>=768);return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]),s.useEffect(()=>{const t=m.current;if(!t||!o||typeof ResizeObserver>"u")return;const y=()=>{t.clientWidth>0&&J(t.clientWidth)};y();const I=new ResizeObserver(y);return I.observe(t),()=>I.disconnect()},[o]),s.useEffect(()=>{b(null),f(null),j(!0),ne(!1),V(""),ee([]),re(),$(null),F(ft(r)),k([]),R(!1),E(Ee),S.current=bt(r)},[r]),s.useEffect(()=>{b(null),f(null),j(!0),ne(!1),V(""),ee([]),re()},[c]),s.useEffect(()=>{if(!o||!r)return;let t=!1,y=null,I;const G=async Me=>{const Ye=++i.current,_e=new AbortController;y=_e,Me&&(j(!0),f(null));const Et=window.setTimeout(()=>_e.abort(),15e3);try{const[ke,Te]=await Promise.allSettled([gr(r,_e.signal,c),yr(r,_e.signal)]);if(t||i.current!==Ye)return;if(Te.status==="fulfilled"?(k(Te.value),R(!1)):R(!0),ke.status==="rejected")throw ke.reason;b(dt=>JSON.stringify(dt)===JSON.stringify(ke.value)?dt:ke.value),f(null),!ke.value&&c===pe&&!S.current&&Te.status==="fulfilled"&&Te.value.length===1&&ge(Te.value[0])}catch(ke){if(t||i.current!==Ye)return;f(ke instanceof Nt?"format":"load")}finally{window.clearTimeout(Et),!t&&i.current===Ye&&(j(!1),I=setTimeout(()=>{t||G(!1)},1e4))}};return G(!0),()=>{t=!0,++i.current,y?.abort(),clearTimeout(I)}},[r,o,H,c]);const at=JSON.stringify(r?[...new Set([`${r}/.termdock`,`${r}/.termdock/architectures`,`${r}/.omm`,...c===".omm"?l?.perspectives.flatMap(t=>[`${r}/.omm/${t.id}`,...t.nodes.flatMap(y=>y.documentPath?[`${r}/.omm/${y.documentPath}`]:[])])??[]:[]])].slice(0,128).sort():[]);s.useEffect(()=>{if(!o||!r)return;const t=new AbortController;let y;return It(JSON.parse(at),I=>{I.some(G=>G.type==="rescan-required"||G.path?.includes("/.omm/")||G.path?.includes("/.termdock/"))&&(clearTimeout(y),y=setTimeout(()=>P(G=>G+1),300))},t.signal).catch(()=>{}),()=>{t.abort(),clearTimeout(y)}},[r,o,at]);const L=l?.perspectives.find(t=>t.id===fe)??l?.perspectives[0],ze=s.useMemo(()=>l?or(l,x==="zh"?"全部视角":"All perspectives"):null,[l,x]),Ve=t=>{t==="all-perspectives"?(ne(!0),Ne([])):(ne(!1),V(t),Ne([]))},we=s.useMemo(()=>{const t=[];for(const y of _){if(!L?.nodes.some(I=>I.id===y&&I.parentId===t[t.length-1]))break;t.push(y)}return t},[_,L]),Oe=we[we.length-1],He=s.useMemo(()=>L?nt(L,Oe):null,[L,Oe]),te=L?.nodes.find(t=>t.id===ie),ye=L?.nodes.find(t=>t.id===Oe),Ct=[...new Set([pe,...M,c])],Be=l?.analysis??(c===pe||c===".omm"?Ee:N.kind==="project"?null:N),re=()=>{Q(!1),O(null),oe(null),U(!1),xe([]),le(null),W(null),ue(null)},Ae=(t,y=!1)=>{xe(I=>y&&ie?[...I,ie]:[]),U(y),Q(!1),O(null),le(null),W(null),ue(null),oe(t)},Ne=t=>{t.length&&ne(!1),ee(t),re(),A.current&&(A.current.scrollTop=0)},lt=t=>{p?(U(!0),le(t)):d(t)},zt=t=>{W({...Ee,kind:"module",paths:[...new Set(t.files.map(y=>y.path))].slice(0,20)}),ue(null)},ct=v?()=>O(null):K?()=>le(null):Y?()=>W(null):ae.length?()=>{oe(ae[ae.length-1]),xe(t=>t.slice(0,-1))}:void 0,Rt=n(K||Y||v?"architecture.backToModule":"architecture.previousModule"),Re=se?Ce:w>=900,Ke=!Re&&!X&&!K&&!Y&&!v,De=!se&&(!!te||q)&&(!!K||!!Y||!!v||Z==="outline"),Xe=t=>{const y=[];let I=L?.nodes.find(G=>G.id===t);for(;I?.parentId;)y.unshift(I.parentId),I=L?.nodes.find(G=>G.id===I.parentId);return y},ot=t=>{const y=l?.perspectives.find(I=>I.id===t.perspective);if(y)if(re(),V(y.id),t.node){const I=[];let G=y.nodes.find(Me=>Me.id===t.node);for(;G?.parentId;)I.unshift(G.parentId),G=y.nodes.find(Me=>Me.id===G.parentId);ee(I),oe(t.node),U(!0)}else ee([]),Q(!0)},de="inline-flex min-h-11 items-center justify-center gap-1.5 rounded-lg px-3 text-xs font-medium transition hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40",Ze=Ke?re:ct??(!Re&&Z==="graph"?()=>U(!1):re),ut=t=>q&&L?e.jsx(pt,{active:o,docked:!0,title:L.title,stageKey:`${L.id}:${v?"edit":"view-document"}`,source:!1,fullHeight:De||!!v,inGraph:t,side:Re,onBack:v?()=>O(null):void 0,backLabel:n("architecture.backToModule"),onClose:re,onDismiss:v?()=>O(null):re,children:v?e.jsx(Qe,{root:r,file:c,perspective:L.id,initialField:v.field,onSaved:y=>{++i.current,b(y),O(null),P(I=>I+1)},onCancel:()=>O(null)}):e.jsxs(e.Fragment,{children:[e.jsx(st,{value:L,rootPath:r,onEdit:y=>O({field:y}),onOpenFile:d}),e.jsx("button",{type:"button",className:`${de} text-primary`,onClick:()=>{ne(!1),Ne([])},children:x==="zh"?"进入此视角":"Explore this perspective"})]})}):te&&((t||Z==="graph")&&Ke?e.jsx(Nr,{node:te,onExpand:()=>U(!0),onClose:re}):e.jsx(pt,{active:o&&!Y,docked:!t||!K&&!Y,title:te.title,stageKey:`${te.id}:${K?`${K.path}:${K.line}`:Y?"analysis":v?`edit:${v.field}`:"details"}`,source:!!K,fullHeight:t?!!Y||!!v:De,inGraph:t,side:Re,onBack:ct,backLabel:Rt,onClose:re,onDismiss:Ze,onCollapse:!Re&&!De&&!K&&!Y&&!v?()=>U(!1):void 0,children:v?e.jsx(Qe,{root:r,file:c,perspective:L.id,node:v.node,initialField:v.field,onSaved:y=>{++i.current,b(y),O(null),P(I=>I+1)},onCancel:()=>O(null)},`${c}:${L.id}:${v.node??"view"}:${v.field}`):K&&p?p(K):Y?e.jsxs(e.Fragment,{children:[e.jsx(xt,{active:o,rootPath:r,currentFile:g,currentDirectory:u,initial:Y,onInsertPrompt:a,onPrepared:ue,onClose:()=>W(null)},te.id),ce&&e.jsx("button",{type:"button",className:`${de} mt-3 bg-primary/15 text-primary`,onClick:()=>{E(Y),ge(ce),re()},children:n("architecture.viewPrepared")})]}):e.jsx(wr,{embedded:!0,document:l,rootPath:r,onReference:ot,onEdit:y=>{U(!0),O({node:te.id,field:y})},node:te,view:L,parentId:te.parentId,onSelect:y=>Ae(y,!0),onExplore:()=>Ne([...Xe(te.id),te.id]),onAnalyze:()=>zt(te),onOpenFile:lt,onClose:re})}));return r?e.jsxs("div",{ref:m,className:"relative flex h-full min-h-0 flex-col",onKeyDown:t=>{!se&&(te||q)&&t.key==="Escape"&&!t.defaultPrevented&&!t.nativeEvent.isComposing&&(t.preventDefault(),t.stopPropagation(),Ze())},children:[e.jsxs("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b border-border/15 px-3 py-2",children:[e.jsxs("span",{className:"flex items-center gap-2 text-sm font-semibold",children:[e.jsx(mt,{size:16}),n("architecture.title")]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsxs("button",{ref:ve,type:"button",className:de,disabled:!Be,onClick:()=>{Be&&(re(),$(z?null:{initial:Be,...l?{outputFile:c}:{}}))},"aria-expanded":!!z,children:[e.jsx(St,{size:14}),n(l?"architecture.update":"architecture.generate")]}),(l||c!==pe)&&e.jsx("button",{type:"button",className:`${de} px-2`,"aria-label":n("architecture.newAnalysis"),onClick:()=>{re(),$({initial:Ee})},children:e.jsx(yt,{size:16})}),e.jsx("button",{type:"button",className:`${de} px-2`,"aria-label":n("architecture.refresh"),disabled:h,onClick:()=>P(t=>t+1),children:e.jsx(kt,{size:15,className:h?"animate-spin":""})})]})]}),e.jsxs("div",{className:`relative flex min-h-0 flex-1 ${Re&&!De?"flex-row":"flex-col"}`,"data-architecture-workspace":!0,children:[e.jsx("div",{ref:A,hidden:De,"data-architecture-content":!0,className:`min-h-0 min-w-0 flex-1 overflow-y-auto p-3 [overflow-anchor:none] ${z?"flex flex-col":""}`,children:v&&!te&&!q?e.jsxs("div",{className:"flex min-h-full flex-col gap-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:L?.title}),e.jsx(Qe,{root:r,file:c,perspective:L.id,initialField:v.field,onSaved:t=>{++i.current,b(t),O(null),P(y=>y+1)},onCancel:()=>O(null)},`${c}:${L?.id}:${v.field}`)]}):z?e.jsx(xt,{active:o,rootPath:r,currentFile:g,currentDirectory:u,initial:z.initial,outputFile:z.outputFile,onInsertPrompt:a,onPrepared:(t,y)=>{E(y),ge(t)},onClose:Ie},`${z.outputFile??"new"}:${JSON.stringify(z.initial)}`):e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"mb-3 flex items-center gap-2 text-xs text-muted-foreground",children:[n("architecture.savedAnalyses"),e.jsx("select",{"aria-label":n("architecture.savedAnalyses"),value:c,onChange:t=>{E(Ee),ge(t.target.value)},className:"min-h-10 min-w-0 flex-1 rounded-lg border border-border/20 bg-surface-2 px-2 text-sm text-foreground",children:Ct.map(t=>e.jsx("option",{value:t,children:t===".omm"?".omm · oh-my-mermaid":t===pe?n("architecture.projectRange"):`${n(t.includes("/module-")?"architecture.moduleRange":"architecture.featureRange")}: ${t===c&&l?.analysis?l.analysis.target.replace(/\n/g,", "):Yt(t)}`},t))})]}),C&&e.jsx("p",{role:"alert",className:"mb-3 text-xs text-muted-foreground",children:n("architecture.libraryFailed")}),h&&!l&&e.jsx("p",{role:"status",className:"py-4 text-sm text-muted-foreground",children:n("architecture.loading")}),B&&e.jsxs("div",{role:"alert",className:"mb-3 rounded-lg border border-destructive/30 p-3 text-sm",children:[e.jsx("p",{children:n(B==="format"?"architecture.invalid":"architecture.loadFailed")}),l&&e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:n("architecture.previous")}),e.jsx("button",{type:"button",className:`${de} mt-2 bg-surface-2`,onClick:()=>P(t=>t+1),children:n("architecture.retry")})]}),!h&&!B&&!l&&e.jsxs("div",{className:"flex flex-col items-center gap-3 px-4 py-8 text-center",children:[e.jsx(mt,{size:32,className:"text-muted-foreground"}),e.jsx("h2",{className:"text-base font-medium",children:n("architecture.empty")}),e.jsx("p",{className:"max-w-sm text-sm leading-relaxed text-muted-foreground",children:n(c===pe?"architecture.emptyHint":"architecture.awaitingFile")})]}),l&&L&&He&&e.jsxs("div",{className:"space-y-3",children:[!Be&&e.jsx("p",{className:"text-xs text-muted-foreground",children:n("architecture.scopeUnavailable")}),l.analysis&&e.jsxs("p",{className:"break-words text-xs text-muted-foreground",children:[n(`architecture.${l.analysis.kind}Range`),l.analysis.target?` · ${l.analysis.target.replace(/\n/g,", ")}`:""," · ",n(l.analysis.depth==="boundary"?"architecture.boundaryDepth":"architecture.followDepth")]}),l.summary.length<=240&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:l.summary}),e.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[n("architecture.perspective"),e.jsxs("select",{"aria-label":n("architecture.perspective"),value:T?"all-perspectives":L.id,onChange:t=>Ve(t.target.value),className:"min-h-11 min-w-0 flex-1 rounded-lg border border-border/20 bg-surface-2 px-2 text-sm text-foreground",children:[e.jsx("option",{value:"all-perspectives",children:x==="zh"?"全部视角":"All perspectives"}),l.perspectives.map(t=>e.jsx("option",{value:t.id,children:t.title},t.id))]})]}),we.length>0&&e.jsxs("nav",{className:"flex flex-wrap items-center gap-1 text-xs","aria-label":n("architecture.breadcrumb"),children:[e.jsx("button",{type:"button",className:`${de} px-2`,onClick:()=>Ne([]),children:L.title}),we.map((t,y)=>e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(Fe,{size:12}),e.jsx("button",{type:"button",className:`${de} px-2`,onClick:()=>Ne(we.slice(0,y+1)),children:L.nodes.find(I=>I.id===t)?.title})]},t))]}),e.jsx("p",{className:"line-clamp-3 whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:ye?.summary??L.summary}),e.jsxs("details",{children:[e.jsx("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:x==="zh"?"视角文档与模块目录":"Perspective documents and module tree"}),e.jsx(st,{value:ye??L,rootPath:r,onOpenFile:lt,onEdit:t=>{ye?(oe(ye.id),U(!0),O({node:ye.id,field:t})):O({field:t})}}),e.jsx("nav",{"aria-label":x==="zh"?"模块目录":"Module tree",className:"my-2 border-l border-border/20",children:L.nodes.map(t=>e.jsx("button",{type:"button","aria-label":`${x==="zh"?"定位模块":"Go to module"}: ${t.title}`,className:`${de} flex w-full justify-start text-left ${ie===t.id?"text-primary":""}`,style:{paddingInlineStart:12+Xe(t.id).length*16},onClick:()=>{ee(Xe(t.id)),Ae(t.id),U(!0)},children:t.title},t.id))})]}),e.jsx("div",{role:"group","aria-label":n("architecture.browseMode"),className:"flex gap-1 rounded-lg bg-surface-2 p-1",children:["outline","graph"].map(t=>e.jsx("button",{type:"button","aria-pressed":Z===t,className:`${de} flex-1 ${Z===t?"bg-surface text-primary":"text-muted-foreground"}`,onClick:()=>me(t),children:n(t==="outline"?"architecture.outlineMode":"architecture.graphMode")},t))}),Z==="graph"?e.jsxs(e.Fragment,{children:[e.jsx(jr,{view:T&&ze?ze.view:L,parentId:T?void 0:Oe,selectedId:T&&ze?[...ze.references].find(([,t])=>t.perspective===L.id&&t.node===ie)?.[0]??null:ie,onSelect:t=>{if(T&&ze){const y=ze.references.get(t);y&&ot(y)}else Ae(t)},active:o,referenceWidth:w,inspector:ut(!0),inspectorStage:K?"source":Y||v?"analysis":Ke?"preview":"details",onDismissInspector:q?v?()=>O(null):re:Ze,onExpandedChange:t=>{D(t),!t&&se&&re()},heading:e.jsxs("div",{className:"relative",children:[e.jsxs("select",{"aria-label":n("architecture.perspective"),title:L.title,value:T?"all-perspectives":L.id,onChange:t=>Ve(t.target.value),className:"h-11 w-full min-w-0 appearance-none truncate bg-surface pr-4 text-xs font-semibold focus-visible:ring-2 focus-visible:ring-ring",children:[e.jsx("option",{value:"all-perspectives",children:x==="zh"?"全部视角":"All perspectives"}),l.perspectives.map(t=>e.jsx("option",{value:t.id,children:t.title},t.id))]}),e.jsx(jt,{size:12,className:"pointer-events-none absolute right-0 top-1/2 -translate-y-1/2 text-muted-foreground"})]}),navigation:we.length>0?e.jsxs("nav",{"aria-label":n("architecture.breadcrumb"),className:"flex items-center gap-1 px-2",children:[e.jsx("button",{type:"button",className:`${de} shrink-0 px-2`,onClick:()=>Ne(we.slice(0,-1)),children:n("architecture.parentModule")}),e.jsxs("span",{className:"truncate text-xs text-muted-foreground",children:[L.title," / ",ye?.title]})]}):void 0}),e.jsxs("details",{children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:[n("architecture.modules")," (",He.nodes.length,")"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:He.nodes.map(t=>e.jsx("button",{type:"button","aria-pressed":te?.id===t.id,className:`${de} bg-surface-2`,onClick:()=>Ae(t.id),children:t.title},t.id))})]})]}):e.jsx("div",{className:"space-y-2",role:"group","aria-label":n("architecture.modules"),children:T?l.perspectives.map(t=>e.jsxs("button",{type:"button",className:"block min-h-16 w-full rounded-xl bg-surface-2 p-3 text-left",onClick:()=>Ve(t.id),children:[e.jsx("span",{className:"text-sm font-medium",children:t.title}),e.jsx("span",{className:"mt-1 block text-xs text-muted-foreground",children:t.summary})]},t.id)):He.nodes.map(t=>e.jsx("div",{children:e.jsxs("button",{type:"button","aria-label":t.title,"aria-expanded":te?.id===t.id,className:"block min-h-16 w-full rounded-xl border border-border/20 bg-surface-2 p-3 text-left transition hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring",onClick:()=>Ae(t.id),children:[e.jsxs("span",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-sm font-medium",children:t.title}),e.jsx(Fe,{size:16,className:"shrink-0 text-muted-foreground"})]}),e.jsx("span",{className:"mt-1.5 line-clamp-2 break-words text-xs leading-relaxed text-muted-foreground",children:t.summary})]})},t.id))}),e.jsxs("details",{className:"rounded-lg border border-border/15 px-3",children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:[n("architecture.analysisNotes")," · ",n("architecture.savedAt")," ",new Date(l.generatedAt).toLocaleString(x==="zh"?"zh-CN":"en-US")]}),e.jsxs("div",{className:"space-y-3 pb-3",children:[l.summary.length>240&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:l.summary}),l.details?.limitations.length?e.jsxs("div",{children:[e.jsx("h3",{className:"mb-1 text-xs font-semibold",children:n("architecture.limitations")}),e.jsx("ul",{className:"list-disc space-y-1 pl-4 text-xs leading-relaxed text-muted-foreground",children:l.details.limitations.map((t,y)=>e.jsx("li",{children:t},y))})]}):null,l.details?.analyzedPaths.length?e.jsxs("details",{children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:[n("architecture.analyzedPaths")," (",l.details.analyzedPaths.length,")"]}),l.details.analyzedPaths.map(t=>e.jsx("button",{type:"button",className:"block min-h-11 w-full break-all rounded px-2 py-2 text-left font-mono text-xs text-primary hover:bg-surface-elevated",onClick:()=>d({path:t}),children:t},t))]}):null]})]}),ye&&ye.files.length>0&&e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer py-2 text-xs text-muted-foreground",children:n("architecture.sourceFiles")}),ye.files.map(t=>e.jsxs("button",{type:"button",className:"block min-h-10 w-full break-all rounded px-2 py-2 text-left font-mono text-xs text-primary hover:bg-surface-2",onClick:()=>d(t),children:[t.path,t.line?`:${t.line}`:""]},`${t.path}:${t.line??""}`))]})]}),e.jsx(br,{root:r,file:c,document:l,onLoaded:(t,y)=>{ge(t),b(y),P(I=>I+1)}})]})}),o&&!se&&ut(!1)]})]}):e.jsx("p",{className:"p-5 text-sm text-muted-foreground",children:n("fileTree.noWorkingDir")})}export{Ir as ArchitecturePanel};
@@ -1,2 +0,0 @@
1
- import{bA as r}from"./app-VCmiASzh.js";import{b as m}from"./dnd-BCFAPC0L.js";import{b as n}from"./RightSidebar-jOQJePDV.js";import"./react-XDCjal2T.js";import"./terminal-C7X98Amf.js";import"./App-D8MWr9xp.js";import"./gestureArbiter-D1TteC76.js";import"./triangle-alert-D_6xTTiX.js";import"./referenceLongPress-BPQ_i68g.js";import"./DiffReview-CLc1hwO7.js";import"./sparkles-DzadqrlX.js";import"./DiffViewer-BDwtwbQM.js";import"./ChangeWalkthroughPanel-ChPZVfRz.js";function g({content:o}){const e=m.useMemo(()=>n(o.split(`
2
- `),null,null),[o]);return r.jsx("div",{className:"min-w-0 space-y-3 break-words text-sm leading-6 text-foreground [&_h1]:text-lg [&_h2]:text-base [&_h3]:text-sm [&_pre]:max-w-full [&_table]:text-xs",children:e.map((t,i)=>r.jsx("div",{className:"min-w-0",children:typeof t.content=="function"?t.content(null):t.content},i))})}export{g as default};
@@ -1,5 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/rdpSession-DU_OJfX5.js","assets/app-VCmiASzh.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-C7X98Amf.js","assets/index-Ctz-IDjR.css","assets/ChangeWalkthroughPanel-ChPZVfRz.js","assets/sparkles-DzadqrlX.js","assets/triangle-alert-D_6xTTiX.js","assets/RightSidebar-jOQJePDV.js","assets/App-D8MWr9xp.js","assets/gestureArbiter-D1TteC76.js","assets/gestureArbiter-C2J0D0kV.css","assets/referenceLongPress-BPQ_i68g.js","assets/DiffReview-CLc1hwO7.js","assets/DiffViewer-BDwtwbQM.js","assets/DiffViewer-T3uj2-aP.css","assets/RightSidebar-DW-JEgm2.css"])))=>i.map(i=>d[i]);
2
- import{ah as Pe,cz as St,df as xt,bA as t,cw as Me,bz as Ue,W as at,o as it,l as Lt,X as Tt,_ as lt}from"./app-VCmiASzh.js";import{b as o,r as ut}from"./dnd-BCFAPC0L.js";import{a as At}from"./ChangeWalkthroughPanel-ChPZVfRz.js";import{L as dt}from"./RightSidebar-jOQJePDV.js";import{X as mt,K as Ve,j as pt}from"./App-D8MWr9xp.js";import{M as Rt}from"./triangle-alert-D_6xTTiX.js";const _t=[["path",{d:"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z",key:"edeuup"}]],ft=Pe("mouse-pointer-2",_t);const Mt=[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]],It=Pe("settings-2",Mt);const Pt=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],Dt=Pe("zoom-in",Pt);const zt=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],Ot=Pe("zoom-out",zt);function Ke(e){const c=e==="darwin"?"mac":e==="win32"?"windows":"linux",f={host:"127.0.0.1",platform:c,protocol:c==="mac"?"vnc":"rdp",port:"3389",username:"",domain:"",ignoreCert:!1,rememberLogin:!0};return{target:"local",local:f,remote:{...f,host:""},viewOnly:!1,fit:!0,autoConnect:!0}}function ht(e,c){const f=Ke(c);if(!e||typeof e!="object")return f;const u=e,p=(x,d)=>{const s=x&&typeof x=="object"?x:{},v=(g,P)=>typeof s[g]=="string"&&s[g].length<=P&&!/[\x00-\x1f]/.test(s[g])?s[g]:d[g];return{host:v("host",253),username:v("username",255),domain:v("domain",255),platform:["mac","linux","windows"].includes(String(s.platform))?s.platform:d.platform,protocol:s.protocol==="rdp"||s.protocol==="vnc"?s.protocol:d.protocol,port:typeof s.port=="string"&&/^\d{0,5}$/.test(s.port)&&Number(s.port)<=65535?s.port:d.port,ignoreCert:s.ignoreCert===!0,rememberLogin:s.rememberLogin!==!1}};return{target:u.target==="remote"?"remote":"local",local:{...p(u.local,f.local),host:"127.0.0.1"},remote:p(u.remote,f.remote),viewOnly:u.viewOnly===!0,fit:u.fit!==!1,autoConnect:u.autoConnect!==!1}}function gt(e){return JSON.stringify([e.host.trim().toLowerCase(),e.protocol,e.protocol==="vnc"?5900:Number(e.port),e.username.trim(),e.domain.trim()])}function Ft(e){const[c,f]=o.useState(Ke),[u,p]=o.useState(!1),[x,d]=o.useState("loading"),[s,v]=o.useState(0),[g,P]=o.useState([]),[W,T]=o.useState("idle"),k=o.useRef(c),A=o.useRef(0),a=o.useRef(0),N=o.useRef(""),b=o.useRef(null),C=o.useRef(new Set),K=o.useCallback(w=>{k.current=w(k.current),A.current++,f(k.current),d("saving")},[]);o.useEffect(()=>{const w=++a.current;A.current=0,N.current="",b.current=null,k.current=Ke(),f(k.current),p(!1),d("loading"),P([]),T("idle");const D=new AbortController;return fetch("/api/computer/preferences",{signal:D.signal}).then(async h=>{if(!h.ok)throw new Error("PREFERENCES_LOAD_FAILED");return await h.json()}).then(h=>{if(w!==a.current||D.signal.aborted)return;let R=ht(h.preferences);const O=A.current>0;if(!h.configured&&!O)try{const E=localStorage.getItem(`termdock:computer-host:${e}`);if(E){const U=/^(127\.0\.0\.1|localhost|::1|\[::1\])$/i.test(E)?"local":"remote";R=ht({...R,target:U,[U]:{...R[U],host:E,platform:localStorage.getItem(`termdock:computer-platform:${e}`)||R[U].platform,protocol:localStorage.getItem(`termdock:computer-protocol:${e}`)||"vnc",port:localStorage.getItem(`termdock:computer-rdp-port:${e}`)||"3389"}}),A.current++}}catch{}O||(k.current=R),N.current=h.configured?JSON.stringify(R):"",f(k.current),p(!0),d(h.configured?"saved":"saving"),P(Array.isArray(h.credentialKeys)?h.credentialKeys.filter(E=>typeof E=="string"):[]),T(h.credentialError?"error":"idle")}).catch(()=>{!D.signal.aborted&&w===a.current&&d("error")}),()=>{++a.current,D.abort();for(const h of C.current)h.abort();C.current.clear()}},[e,s]);const H=o.useCallback(()=>{if(b.current)return b.current;if(!u)return Promise.resolve(!1);const w=a.current,D=(async()=>{for(;N.current!==JSON.stringify(k.current);){const h=JSON.stringify(k.current),R=new AbortController;C.current.add(R),d("saving");try{if(!(await fetch("/api/computer/preferences",{method:"PUT",headers:{"Content-Type":"application/json"},body:h,signal:R.signal})).ok)throw new Error("PREFERENCES_SAVE_FAILED");if(w!==a.current)return!1;N.current=h}catch{return w===a.current&&d("error"),!1}finally{C.current.delete(R)}}return w===a.current&&d("saved"),!0})();return b.current=D,D.finally(()=>{b.current===D&&(b.current=null)}),D},[u]);o.useEffect(()=>{if(!u||N.current===JSON.stringify(c))return;const w=setTimeout(()=>{H()},300);return()=>clearTimeout(w)},[u,c,H]);const q=o.useCallback(async(w,D,h)=>{const R=a.current,O=new AbortController;w!=="use"&&T("saving");try{if(!await H()||R!==a.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");C.current.add(O);const E=await fetch(`/api/computer/credentials/${w}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({profile:D,...w==="save"?{password:h}:{}}),signal:O.signal});if(R!==a.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");if(!E.ok)throw new Error(w==="use"&&E.status===404?"COMPUTER_CREDENTIALS_MISSING":"COMPUTER_CREDENTIALS_FAILED");const ne=await E.json();if(R!==a.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");const U=gt(D);if(w==="save"&&P(ae=>[...new Set([...ae,U])]),w==="forget"&&P(ae=>ae.filter(pe=>pe!==U)),w==="use"&&(typeof ne.password!="string"||!ne.password))throw new Error("COMPUTER_CREDENTIALS_MISSING");return T("idle"),ne.password}catch(E){throw R===a.current&&!O.signal.aborted&&T("error"),E}finally{C.current.delete(O)}},[H]);return{preferences:c,change:K,loaded:u,saveState:x,flush:H,credentialKeys:g,loginState:W,credentialRequest:q,retry:()=>u?void H():v(w=>w+1)}}class $t{binaryType="arraybuffer";protocol="";CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;onopen=null;onmessage=null;onerror=null;onclose=null;socket;get readyState(){return this.socket.readyState}constructor(c,f){this.socket=St(`/api/computer/ws?host=${encodeURIComponent(c)}`),this.socket.onopen=u=>this.onopen?.(u),this.socket.onerror=u=>this.onerror?.(u),this.socket.onclose=u=>{(u.code!==1e3||u.reason)&&f(u.reason||"COMPUTER_DISCONNECTED"),this.onclose?.(u)},this.socket.onmessage=u=>{try{const p=JSON.parse(u.data);if(p.type!=="data"||typeof p.data!="string"||!Number.isSafeInteger(p.seq))throw new Error("Invalid VNC record");const x=Uint8Array.from(atob(p.data),d=>d.charCodeAt(0));this.onmessage?.(new MessageEvent("message",{data:x.buffer})),this.socket.readyState===1&&this.socket.send(JSON.stringify({type:"ack",seq:p.seq}))}catch{f("COMPUTER_INVALID_MESSAGE"),this.close(),this.onclose?.(new CloseEvent("close",{code:4400}))}}}send(c){const f=ArrayBuffer.isView(c)?new Uint8Array(c.buffer,c.byteOffset,c.byteLength):new Uint8Array(c);for(let u=0;u<f.length;u+=32*1024){const p=f.subarray(u,u+32768);let x="";for(const d of p)x+=String.fromCharCode(d);this.socket.send(JSON.stringify({type:"data",data:btoa(x)}))}}close(){this.socket.close()}}function Ut(e){return e==="mac"||e==="linux"||e==="windows"}function Vt(e){const c=e==="mac"?[65513,"MetaLeft"]:[65507,"ControlLeft"],f=e==="mac"?c:[65515,"MetaLeft"];return{escape:[[65307,"Escape"]],enter:[[65293,"Enter"]],backspace:[[65288,"Backspace"]],tab:[e==="mac"?c:[65513,"AltLeft"],[65289,"Tab"]],search:e==="mac"?[f,[32,"Space"]]:[f],copy:[c,[99,"KeyC"]],paste:[c,[118,"KeyV"]],up:[[65362,"ArrowUp"]],down:[[65364,"ArrowDown"]],left:[[65361,"ArrowLeft"]],right:[[65363,"ArrowRight"]]}}function Ht(e){const c=e;return{size:()=>({width:c._fbWidth,height:c._fbHeight}),surface:()=>c._canvas,send:(f,u,p)=>{const x=c._display.scale,d=(f-c._display.absX(0))*x,s=(u-c._display.absY(0))*x;c._mousePos={x:d,y:s},c._mouseMoveTimer!==null&&clearTimeout(c._mouseMoveTimer),c._mouseMoveTimer=null,c._mouseButtonMask=p,c._mouseLastMoveTime=Date.now(),c._sendMouse(d,s,p)}}}const bt="termdock:computer-touch-mode:v1";function Bt(){try{const e=localStorage.getItem(bt);if(e==="trackpad"||e==="direct")return e}catch{}return navigator.maxTouchPoints>0&&window.matchMedia("(any-pointer: coarse)").matches?"trackpad":"direct"}function Kt(e){try{localStorage.setItem(bt,e)}catch{}}const Yt=8,Xt=300,Wt=450,He=18,Ce=(e,c)=>Math.max(0,Math.min(e,Math.max(0,c-1)));function qt(e,c,f,u,p={}){const x=new AbortController,d=new Map;let s=0,v=0,g=!1,P=!1,W=!1,T=!1,k=0,A=1,a=0,N=0,b,C=!1,K=!0,H=!0,q,w=!1;const D=()=>{const n=c.size(),l=u.current??={x:n.width/2,y:n.height/2};return l.x=Ce(l.x,n.width),l.y=Ce(l.y,n.height),l};let h;const R=()=>{const n=c.size();if((!h||h.width!==n.width||h.height!==n.height)&&(H=!0),!H&&h)return h;const l=c.surface(),S=e.getBoundingClientRect(),m=l.getBoundingClientRect(),y=[];for(let L=l.parentElement;L&&L!==e;L=L.parentElement){const j=getComputedStyle(L),$=/auto|scroll/.test(j.overflowX)?Math.max(0,L.scrollWidth-L.clientWidth):0,Ae=/auto|scroll/.test(j.overflowY)?Math.max(0,L.scrollHeight-L.clientHeight):0;if(!$&&!Ae)continue;const xe=L.getBoundingClientRect();y.push({element:L,left:xe.left-S.left,top:xe.top-S.top,right:xe.right-S.left,bottom:xe.bottom-S.top,maxX:$,maxY:Ae})}return h={...n,left:m.left-S.left,top:m.top-S.top,scaleX:n.width&&m.width?m.width/n.width:1,scaleY:n.height&&m.height?m.height/n.height:1,viewportWidth:S.width,viewportHeight:S.height,clientLeft:S.left,clientTop:S.top,scrollers:y},H=!1,h},O=()=>{const n=R(),l=D();if(!n.width||!n.height||!K||T||p.mode==="direct"||p.viewOnly){f.hidden=!0;return}let S=n.left+l.x*n.scaleX,m=n.top+l.y*n.scaleY;for(const y of n.scrollers){if(y.maxX){const L=y.element.scrollLeft,j=S<y.left+20?S-y.left-20:S>y.right-20?S-y.right+20:0,$=Math.max(0,Math.min(y.maxX,L+j));L!==$&&(y.element.scrollLeft=$,S-=$-L,n.left-=$-L)}if(y.maxY){const L=y.element.scrollTop,j=m<y.top+20?m-y.top-20:m>y.bottom-20?m-y.bottom+20:0,$=Math.max(0,Math.min(y.maxY,L+j));L!==$&&(y.element.scrollTop=$,m-=$-L,n.top-=$-L)}}f.hidden=S<0||m<0||S>=n.viewportWidth||m>=n.viewportHeight,f.style.transform=`translate3d(${S}px, ${m}px, 0)`},E=(n=N)=>{if(p.viewOnly)return;const l=D();c.send(Math.round(l.x),Math.round(l.y),n)},ne=()=>{b=void 0,O(),C&&(C=!1,E());let n=0;for(;Math.abs(a)>=He&&n++<8;){const l=a>0?16:8;E(l),E(0),a-=Math.sign(a)*He}},U=()=>{w||(b??=requestAnimationFrame(ne))},ae=()=>{b!==void 0&&(cancelAnimationFrame(b),ne())},pe=()=>{clearTimeout(q),ae(),N&&(N=0,E())},fe=n=>{n.cancelable&&n.preventDefault(),n.stopImmediatePropagation()},je=()=>[...d.values()].reduce((n,l)=>n+l.y,0)/d.size,he=()=>{const[n,l]=[...d.values()];return{distance:Math.hypot(n.x-l.x,n.y-l.y),x:(n.x+l.x)/2,y:(n.y+l.y)/2}},Z=n=>{const l=R();u.current={x:Ce((n.clientX-l.clientLeft-l.left)/l.scaleX,l.width),y:Ce((n.clientY-l.clientTop-l.top)/l.scaleY,l.height)}},ke=n=>{if(!(n.pointerType!=="touch"&&n.pointerType!=="pen")){fe(n),K=!0,U(),d.size||(s=performance.now(),v=0,g=!1,P=!1,W=!1,T=!1,a=0,p.mode==="direct"&&Z(n)),d.set(n.pointerId,{x:n.clientX,y:n.clientY,startX:n.clientX,startY:n.clientY}),v=Math.max(v,d.size);try{e.setPointerCapture(n.pointerId)}catch{}clearTimeout(q),d.size===1&&v===1?q=setTimeout(()=>{!w&&d.size===1&&!g&&!P&&(N=1,E())},Wt):(pe(),W=!0,d.size===2&&(k=he().distance,A=p.zoom?.get()??1))}},ie=n=>{if(n.pointerType==="mouse"){const j=R();u.current={x:Ce((n.clientX-j.clientLeft-j.left)/j.scaleX,j.width),y:Ce((n.clientY-j.clientTop-j.top)/j.scaleY,j.height)},K=!1,f.hidden=!0;return}const l=d.get(n.pointerId);if(!l)return;fe(n);const S=je(),m=d.size===2?he():void 0,y=n.clientX-l.x,L=n.clientY-l.y;if(l.x=n.clientX,l.y=n.clientY,Math.hypot(l.x-l.startX,l.y-l.startY)>Yt&&(g=!0,clearTimeout(q)),d.size===2&&!P){const j=he();if(p.zoom&&k>0&&(T||Math.abs(j.distance/k-1)>.06)){T=!0,g=!0,a=0,p.zoom.set(A*j.distance/k,j),H=!0,m&&p.zoom.pan(j.x-m.x,j.y-m.y),U();return}if(p.mode==="direct"&&p.zoom&&p.zoom.get()>1&&m){g=!0,p.zoom.pan(j.x-m.x,j.y-m.y),H=!0,U();return}a+=S-je(),Math.abs(a)>=He&&(g=!0,U())}else if(d.size===1&&!W&&!P){if(p.mode==="direct"){Z(n),g&&(N=1),C=!0,U();return}const j=D(),$=R();j.x+=y/$.scaleX,j.y+=L/$.scaleY,D(),C=!0,U()}},Y=n=>{if(!d.has(n.pointerId))return;fe(n);const l=N!==0;n.type!=="pointerup"&&(P=!0),pe(),d.delete(n.pointerId);try{e.hasPointerCapture(n.pointerId)&&e.releasePointerCapture(n.pointerId)}catch{}d.size||(a=0,!P&&!l&&!g&&v<=2&&performance.now()-s<=Xt&&(p.mode!=="direct"||v===1)&&(E(v===2?4:1),E(0)))},_=()=>{P=!0,pe();const n=[...d.keys()];d.clear(),a=0;for(const l of n)try{e.hasPointerCapture(l)&&e.releasePointerCapture(l)}catch{}},B={capture:!0,passive:!1,signal:x.signal};e.addEventListener("pointerdown",ke,B),e.addEventListener("pointermove",ie,B),e.addEventListener("pointerup",Y,B),e.addEventListener("pointercancel",Y,B),e.addEventListener("lostpointercapture",Y,B);for(const n of["touchstart","touchmove","touchend","touchcancel","contextmenu"])e.addEventListener(n,fe,B);const G=()=>{H=!0,U()};e.addEventListener("scroll",G,{capture:!0,signal:x.signal}),window.addEventListener("blur",_,{signal:x.signal});const J=()=>{document.hidden&&_()};document.addEventListener("visibilitychange",J,{signal:x.signal});const Ne=new ResizeObserver(G);return Ne.observe(e),Ne.observe(c.surface()),O(),()=>{w||(w=!0,x.abort(),_(),Ne.disconnect(),f.hidden=!0)}}function Zt(e,c){e=Math.max(1,e||1280),c=Math.max(1,c||800);const f=Math.max(1,640/e,480/c);return{width:Math.max(640,Math.min(2560,Math.round(e*f))),height:Math.max(480,Math.min(1600,Math.round(c*f)))}}const Be="​",Gt={Enter:"enter",Backspace:"backspace",Delete:"delete",Tab:"tab",ArrowUp:"up",ArrowDown:"down",ArrowLeft:"left",ArrowRight:"right"};function Jt({sendText:e,sendKey:c,inputRef:f,onFocusChange:u}){const{t:p}=xt(),x=o.useRef(null),d=o.useRef(!1),s=o.useRef(null),v=f??x,g=o.useRef({sendText:e,sendKey:c});g.current={sendText:e,sendKey:c};const[P,W]=o.useState(!1),T=()=>{v.current&&(v.current.value=Be,v.current.setSelectionRange(1,1)),W(!1)},k=()=>{const a=(v.current?.value||"").replace(/^\u200b/,"");a&&g.current.sendText(a),T()},A=()=>{s.current!==null&&(cancelAnimationFrame(s.current),s.current=null),k()};return o.useLayoutEffect(()=>{const a=v.current;a.value=Be,a.setSelectionRange(1,1),a.focus({preventScroll:!0});const N=b=>{if(d.current||b.isComposing)return;const C=b.inputType==="deleteContentBackward"?"backspace":b.inputType==="deleteContentForward"?"delete":["insertLineBreak","insertParagraph"].includes(b.inputType)?"enter":null;if(!C)return;b.preventDefault();const K=C==="enter"&&s.current!==null;A(),K||g.current.sendKey(C)};return a.addEventListener("beforeinput",N),()=>{a.removeEventListener("beforeinput",N),s.current!==null&&cancelAnimationFrame(s.current)}},[]),t.jsxs("div",{className:"relative shrink-0 border-t border-border bg-surface px-3 py-2",children:[!P&&t.jsx("span",{"aria-hidden":"true",className:"pointer-events-none absolute inset-y-2 left-6 flex items-center text-sm text-muted-foreground",children:p("computer.keyboardPlaceholder")}),t.jsx("input",{ref:v,className:"min-h-11 w-full rounded-md border border-border bg-background px-3 text-base outline-none focus:border-primary","aria-label":p("computer.keyboardInput"),autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",spellCheck:!1,inputMode:"text",enterKeyHint:"enter",maxLength:1025,defaultValue:Be,onChange:a=>{if(W(!!a.target.value.replace(/^\u200b/,"")),d.current||a.nativeEvent.isComposing||s.current!==null)return;a.nativeEvent.inputType==="deleteContentBackward"&&!a.target.value?(g.current.sendKey("backspace"),T()):k()},onCompositionStart:()=>{s.current!==null&&A(),d.current=!0},onCompositionEnd:()=>{d.current=!1,s.current!==null&&cancelAnimationFrame(s.current),s.current=requestAnimationFrame(()=>{s.current=null,k()})},onFocus:()=>u?.(!0),onBlur:()=>{!d.current&&s.current!==null&&A(),u?.(!1)},onKeyDown:a=>{if(d.current||a.nativeEvent.isComposing||a.keyCode===229)return;const N=Gt[a.key];N&&(a.preventDefault(),A(),g.current.sendKey(N))}})]})}function Qt(e){let c=[],f=null;const u=new Map,p=()=>{f=null,c.splice(0,32).forEach(x=>{e(x),x[2]?u.set(x[0],x):u.delete(x[0])}),c.length&&(f=requestAnimationFrame(p))};return{send(x){c.push(...x),f===null&&p()},clear(){f!==null&&cancelAnimationFrame(f),f=null,c=[];const x=[...u.values()].reverse();u.clear();for(const[d,s]of x)try{e([d,s,!1])}catch{}}}}const er=e=>Math.max(1,Math.min(8,Number.isFinite(e)?e:1));function tr(e,c){let f=1;const u="viewportZoom"in e,p=e,x=()=>u?e.pointerTarget.surface():p._canvas,d=()=>u?e.viewportScroller:p._screen,s=u?void 0:p._updateScale;return s&&(p._updateScale=function(){s.call(p),p._display.scale*=f}),{get:()=>f,set(v,g){const P=er(v),W=x(),T=d(),k=W.getBoundingClientRect(),A=T.getBoundingClientRect(),a=g??{x:A.left+A.width/2,y:A.top+A.height/2},N={x:(a.x-k.left)/(k.width||1),y:(a.y-k.top)/(k.height||1)};f=P,u?e.viewportZoom=f:p._updateScale();const b=W.getBoundingClientRect();T.scrollLeft+=b.left+N.x*b.width-a.x,T.scrollTop+=b.top+N.y*b.height-a.y,f===1&&(T.scrollLeft=0,T.scrollTop=0),c(f)},pan(v,g){const P=d();P.scrollLeft-=v,P.scrollTop-=g},dispose(){s&&(p._updateScale=s)}}}const ce="inline-flex min-h-9 items-center justify-center gap-1.5 rounded-md border border-border px-2.5 text-xs hover:bg-surface-2 disabled:opacity-40",me="min-h-11 w-full rounded-md border border-border bg-background px-2 text-sm outline-none focus:border-primary";function Ie(e){return/API_NOT_ALLOWED|AUTHORIZATION|revoked|PAIRING/.test(e)?"computer.permission":e.includes("RDP_BACKEND_UNAVAILABLE")?"computer.rdpBackendUnavailable":e.includes("RDP_CERTIFICATE")?"computer.rdpCertificate":e.includes("CREDENTIALS_MISSING")?"computer.loginExpired":e.includes("CREDENTIALS_FAILED")?"computer.loginSaveFailed":e.includes("AUTH_FAILED")?"computer.authFailed":e.includes("RDP_FAILED")?"computer.rdpFailed":e.includes("SCREEN_SHARING_OFF")?"computer.sharingOff":e.includes("PRIVATE_HOST_ONLY")?"computer.privateOnly":e.includes("INVALID_HOST")?"computer.invalidHost":e.includes("TIMEOUT")?"computer.timeout":e.includes("UNREACHABLE")?"computer.unreachable":e.includes("DISCONNECTED")?"computer.disconnected":"computer.failed"}function rr(){const{t:e}=xt(),[c,f]=o.useState(()=>Me()?.targetPeerId??""),[u,p]=o.useState(null),{preferences:x,change:d,loaded:s,saveState:v,flush:g,retry:P,credentialKeys:W,loginState:T,credentialRequest:k}=Ft(c),A=x.target==="local",a=x[x.target],{host:N,platform:b,protocol:C,port:K,domain:H,ignoreCert:q,username:w}=a,D=C==="rdp"&&u?.rdpAvailable===!1,{viewOnly:h,fit:R}=x,O=a.rememberLogin&&W.includes(gt(a)),E=r=>d(i=>({...i,[i.target]:{...i[i.target],...r}})),ne=r=>E({username:r}),U=r=>E({domain:r}),ae=r=>{E({ignoreCert:r}),g()},pe=r=>E({port:r}),fe=r=>{r&&(le.current(),Le.clear(),y(null)),d(i=>({...i,viewOnly:r})),g()},[je,he]=o.useState(!1),Z=Vt(b),ke=b==="mac"?"⌘V":"Ctrl+V",[ie,Y]=o.useState(""),[_,B]=o.useState("idle"),[G,J]=o.useState(null),[Ne,n]=o.useState(""),[l,S]=o.useState(!1),[m,y]=o.useState(null),L=o.useRef(null),[j,$]=o.useState(!1),[Ae,xe]=o.useState(!1),Ye=o.useRef(0),[Q,yt]=o.useState(()=>navigator.maxTouchPoints>0||window.innerWidth<=640);o.useEffect(()=>{const r=()=>yt(navigator.maxTouchPoints>0||window.innerWidth<=640);return window.addEventListener("resize",r),()=>window.removeEventListener("resize",r)},[]);const Re=m==="keyboard"&&j&&(!Q||!window.visualViewport||Ae),[Ee,Xe]=o.useState(1),ee=o.useRef(null),De=o.useRef(null),[_e,We]=o.useState(""),[vt,Se]=o.useState(!1),[wt,Ct]=o.useState(!1),[oe,jt]=o.useState(Bt),qe=o.useRef(null),Ze=o.useRef(null),le=o.useRef(()=>{}),[Ge,kt]=o.useState(Ue),ve=o.useRef(!1),ue=o.useRef(""),Je=o.useRef(()=>{}),Qe=o.useRef(null),ze=o.useRef(null),ge=o.useMemo(()=>{const r=document.createElement("div");return r.className="h-full w-full min-h-0 overflow-hidden",r},[]),F=o.useRef(null),Le=o.useMemo(()=>Qt(([r,i,I])=>F.current?.sendKey(r,i,I)),[]),Oe=o.useRef(null),se=o.useRef(0),Fe=o.useRef(void 0),te=o.useCallback(()=>{le.current(),ee.current?.dispose(),ee.current=null,Le.clear(),Ze.current=null,se.current++,clearTimeout(Fe.current);const r=F.current;F.current=null,r?.disconnect(),Oe.current?.close(),Oe.current=null,ge.replaceChildren()},[ge,Le]);o.useLayoutEffect(()=>(ze.current?.appendChild(ge),()=>{ge.remove()}),[ge,l]),o.useEffect(()=>()=>te(),[te]),o.useEffect(()=>{const r=()=>{const i=Ue();kt(i),!i&&(ve.current=!1,ue.current="",te(),B("idle"),Y(""),S(!1),y(null))};return window.addEventListener(at,r),()=>window.removeEventListener(at,r)},[te]),o.useEffect(()=>{const r=()=>f(Me()?.targetPeerId??"");return window.addEventListener(it,r),()=>window.removeEventListener(it,r)},[]),o.useEffect(()=>{te(),ve.current=!1,ue.current="",B("idle"),J(null),Y(""),p(null),S(!1),y(null),he(!1),n(""),We(""),Se(!1);const r=new AbortController;return fetch("/api/computer/status",{signal:r.signal}).then(async i=>{if(!i.ok)throw new Error(i.status===403?"API_NOT_ALLOWED":"COMPUTER_FAILED");return await i.json()}).then(i=>{r.signal.aborted||p(i)}).catch(i=>{r.signal.aborted||J(Ie(String(i)))}),()=>{r.abort(),te()}},[c,te]),o.useEffect(()=>{F.current&&(F.current.viewOnly=h)},[h]),o.useEffect(()=>{F.current&&(F.current.scaleViewport=R)},[R]),o.useEffect(()=>{F.current&&"pauseResize"in F.current&&(F.current.pauseResize=!!m)},[m]),o.useEffect(()=>{const r=F.current;r&&("keyboardActive"in r?r.keyboardActive=m==="keyboard":r.focusOnClick=m!=="keyboard")},[m]);const et=r=>{r===A||X||!s||(Y(""),J(null),d(i=>({...i,target:r?"local":"remote"})),g())},tt=()=>{ve.current=!0,ue.current="",te(),B("idle"),Y(""),S(!1),y(null),Se(!1)},rt=async r=>{if(r?.preventDefault(),D)return;if(ve.current=!0,_==="credentials"&&F.current&&"sendCredentials"in F.current){ue.current=ie,F.current.sendCredentials({username:w,password:ie}),B("connecting");return}if(!Ue()||!s||!ie&&!O)return;g(),te(),J(null),n(""),B("connecting"),Se(!1);const i=se.current,I=z=>{i===se.current&&(te(),B("error"),J(z),y(null),ue.current="",(z==="computer.authFailed"||z==="computer.permission"||z==="computer.loginExpired")&&Y(""),O&&(z==="computer.authFailed"||z==="computer.loginExpired")&&k("forget",a).catch(()=>{}))};Fe.current=setTimeout(()=>I("computer.timeout"),6e4);try{let z=ie||await k("use",a);if(i!==se.current)return;ue.current=z||"";let V;if(C==="rdp"){const{RdpSession:re}=await lt(async()=>{const{RdpSession:$e}=await import("./rdpSession-DU_OJfX5.js");return{RdpSession:$e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]));if(i!==se.current)return;const ye=window.innerWidth<=640,de=De.current?.getBoundingClientRect(),Te=Zt(ye?window.innerWidth:de?.width||1280,Math.max(1,(ye?window.innerHeight:de?.height||800)-100));V=new re(ge,{host:N.trim(),port:Number(K),username:w.trim(),password:z||"",domain:H.trim(),ignoreCert:q,...Te},$e=>I(Ie($e)))}else{const{default:re}=await lt(async()=>{const{default:Te}=await import("./rfb-CxsXsMUX.js");return{default:Te}},[]);if(i!==se.current)return;const ye=new $t(N.trim(),Te=>I(Ie(Te)));Oe.current=ye;const de=new re(ge,ye,{shared:!0,credentials:{username:w.trim()||void 0,password:z}});de.background="var(--chrome-bg)",de.resizeSession=!1,de.qualityLevel=6,de.compressionLevel=2,V=de}z=void 0,F.current=V,V.scaleViewport=R,V.viewOnly=h,V.addEventListener("connect",()=>{if(i!==se.current)return;clearTimeout(Fe.current),B("connected"),Y(""),window.innerWidth<=640&&(document.activeElement?.blur?.(),S(!0));const re=ue.current;ue.current="",a.rememberLogin&&re&&k("save",a,re).catch(()=>{})}),V.addEventListener("credentialsrequired",re=>{if(i!==se.current)return;const ye=re.detail.types;Ct(ye.includes("username")),B("credentials")}),V.addEventListener("securityfailure",()=>I("computer.authFailed")),V.addEventListener("disconnect",()=>I("computer.disconnected")),V.addEventListener("desktopname",re=>{i===se.current&&n(re.detail.name)})}catch(z){I(Ie(String(z)))}},be=r=>{!F.current||_!=="connected"||h||Le.send([...r.map(([I,z])=>[I,z,!0]),...[...r].reverse().map(([I,z])=>[I,z,!1])])},M=_==="connected",X=_==="connecting"||_==="credentials";o.useEffect(()=>{const r=F.current;if(!M||!r||!("viewportZoom"in r)&&!("_display"in r))return;const i=tr(r,Xe);return ee.current=i,Xe(1),()=>{i.dispose(),ee.current===i&&(ee.current=null)}},[M]),o.useEffect(()=>{const r=F.current,i=ze.current,I=qe.current;if(!M||m&&m!=="keyboard"||oe!=="trackpad"&&!(navigator.maxTouchPoints>0)||!r||!i||!I)return;const z="pointerTarget"in r?r.pointerTarget:Ht(r),V=qt(i,z,I,Ze,{mode:oe,zoom:ee.current??void 0,viewOnly:h});return le.current=V,()=>{V(),le.current===V&&(le.current=()=>{})}},[M,h,oe,l,m]);const nt=r=>{r!==oe&&(le.current(),jt(r),Kt(r))};Je.current=()=>{rt()},o.useEffect(()=>{Ge&&s&&u&&!D&&x.autoConnect&&O&&_==="idle"&&!ve.current&&Je.current()},[Ge,s,u,D,x.autoConnect,O,_]);const ot=()=>{ve.current=!0,k("forget",a).catch(()=>{})},we=r=>{if(r==="keyboard"){if(m==="keyboard"&&!Re){L.current?.blur(),L.current?.focus({preventScroll:!0});return}le.current(),Ye.current=window.visualViewport?.height??window.innerHeight,ut.flushSync(()=>{$(!1),xe(!1),y(i=>i===r?null:r)})}else le.current(),y(i=>i===r?null:r)},Nt=()=>{ee.current?.set(1),d(r=>({...r,fit:!0})),g()},Et=r=>{if(!F.current||h)return;const i=[];for(const I of r){const z=I.codePointAt(0),V=I===`
3
- `?65293:I===" "?65289:z<256?z:16777216|z;i.push([V,null,!0],[V,null,!1])}Le.send(i)};o.useEffect(()=>{if(!M||m!=="keyboard"&&m!=="clipboard"||!window.visualViewport)return;const r=window.visualViewport,i=De.current,I=()=>{m==="keyboard"&&xe(j&&Ye.current-r.height>100),l&&i&&r.height>=160&&(i.style.height=`${r.height}px`,i.style.top=`${r.offsetTop}px`)};return I(),r.addEventListener("resize",I),r.addEventListener("scroll",I),()=>{r.removeEventListener("resize",I),r.removeEventListener("scroll",I),i&&(i.style.height="",i.style.top="")}},[M,m,l,j]);const st=t.jsxs("div",{className:"flex shrink-0 items-center text-xs",role:"group","aria-label":e("computer.desktopZoom"),title:Q?e("computer.pinchHint"):void 0,children:[t.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center","aria-label":e("computer.zoomOut"),disabled:Ee<=1,onPointerDown:r=>r.preventDefault(),onClick:()=>ee.current?.set(Ee/1.25),children:t.jsx(Ot,{size:16})}),t.jsxs("button",{type:"button",className:"min-h-11 min-w-11","aria-label":e("computer.resetZoom"),onPointerDown:r=>r.preventDefault(),onClick:Nt,children:[Math.round(Ee*100),"%"]}),t.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center","aria-label":e("computer.zoomIn"),disabled:Ee>=8,onPointerDown:r=>r.preventDefault(),onClick:()=>ee.current?.set(Ee*1.25),children:t.jsx(Dt,{size:16})}),Q&&t.jsx("span",{className:"hidden pr-2 text-[10px] text-muted-foreground sm:inline",children:e("computer.pinchHint")})]}),ct=t.jsxs("div",{ref:De,className:`flex min-h-0 flex-col bg-surface text-foreground ${l?"fixed inset-0 z-modal-panel h-dvh pb-[env(safe-area-inset-bottom)] pt-[env(safe-area-inset-top)]":"relative h-full"}`,role:l?"dialog":void 0,"aria-modal":l||void 0,"aria-label":e("computer.title"),onKeyDown:r=>{r.stopPropagation(),r.key==="Escape"&&!r.nativeEvent.isComposing&&m&&(r.preventDefault(),y(null))},onKeyUp:r=>r.stopPropagation(),children:[t.jsxs("div",{className:"relative z-30 flex min-h-12 shrink-0 items-center gap-2 border-b border-border bg-surface px-3",children:[l&&t.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center",onClick:()=>{S(!1),y(null)},"aria-label":e("computer.exitFullscreen"),children:t.jsx(At,{size:20})}),t.jsx(Lt,{size:16,className:"shrink-0 text-muted-foreground"}),t.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium",children:M&&(Ne||(A?u?.hostname||Me()?.serviceName:N))||e("computer.title")}),M&&t.jsx("span",{className:"text-[11px] text-primary",children:e("computer.connected")}),M&&T==="error"&&t.jsx("span",{role:"alert",className:"text-[11px] text-destructive",children:e("computer.loginSaveFailed")}),M&&v==="saving"&&t.jsx("span",{role:"status","aria-label":e("computer.settingsSaving"),title:e("computer.settingsSaving"),children:t.jsx(dt,{size:12,className:"animate-spin text-muted-foreground"})}),M&&v==="error"&&t.jsxs("button",{type:"button",className:ce,title:e("computer.settingsSaveFailed"),"aria-label":e("computer.settingsSaveFailed"),onClick:P,children:["! ",e("computer.retry")]}),X&&t.jsxs("button",{type:"button",className:ce,onClick:tt,children:[t.jsx(mt,{size:14}),e("computer.cancel")]}),M&&!Q&&m==="keyboard"&&t.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center",onClick:()=>we("keyboard"),"aria-label":e("computer.keyboard"),"aria-pressed":Re,children:t.jsx(Ve,{size:18})}),M&&!Q&&t.jsx("button",{type:"button",className:`flex min-h-11 min-w-11 items-center justify-center rounded-md ${m==="clipboard"?"bg-surface-2 text-primary":""}`,disabled:h,onClick:()=>we("clipboard"),"aria-label":e("computer.clipboardTool"),title:e("computer.clipboardTool"),"aria-pressed":m==="clipboard",children:t.jsx(pt,{size:18})}),M&&!l&&t.jsxs("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center gap-1 text-xs",onClick:()=>S(!0),"aria-label":e("computer.fullscreen"),children:[t.jsx(Rt,{size:16}),e("computer.expand")]}),M&&t.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center",onClick:()=>we("tools"),"aria-label":e("computer.tools"),"aria-expanded":m==="tools",children:t.jsx(It,{size:18})})]}),!M&&t.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto p-4 sm:p-6",children:t.jsxs("div",{className:"mx-auto w-full max-w-md",children:[t.jsxs("form",{className:"space-y-3",onSubmit:r=>{rt(r)},"aria-busy":_==="connecting",children:[t.jsxs("div",{className:"grid grid-cols-2 gap-1 rounded-lg bg-background p-1",role:"group","aria-label":e("computer.target"),children:[t.jsx("button",{type:"button",className:`min-h-11 rounded-md px-3 text-sm font-medium ${A?"bg-surface-2 text-foreground":"text-muted-foreground hover:bg-surface"}`,"aria-pressed":A,disabled:X||!u||!s,onClick:()=>et(!0),children:e("computer.thisComputer")}),t.jsx("button",{type:"button",className:`min-h-11 rounded-md px-3 text-sm font-medium ${A?"text-muted-foreground hover:bg-surface":"bg-surface-2 text-foreground"}`,"aria-pressed":!A,disabled:X||!s,onClick:()=>et(!1),children:e("computer.otherComputer")})]}),A?t.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",role:"status",children:u?e("computer.localService",{name:Me()?.serviceName||u.hostname}):e("computer.loading")}):t.jsxs("label",{className:"block space-y-1 text-xs",children:[t.jsx("span",{children:e("computer.host")}),t.jsx("input",{className:me,value:N,disabled:X||!s,onChange:r=>{E({host:r.target.value,domain:"",ignoreCert:!1}),Y(""),J(null)},placeholder:e("computer.hostPlaceholder"),onBlur:()=>{g()},autoCapitalize:"none",autoCorrect:"off",spellCheck:!1,required:!0,maxLength:253})]}),t.jsxs("p",{className:"text-xs text-muted-foreground",children:[b==="mac"?"macOS":b==="linux"?"Ubuntu / Linux":"Windows"," · ",C.toUpperCase()," · ",C==="rdp"?K||"3389":"5900",h?` · ${e("computer.viewOnly")}`:""]}),t.jsxs("label",{className:"block space-y-1 text-xs",children:[t.jsx("span",{children:e(C==="rdp"?"computer.rdpUsername":"computer.username")}),t.jsx("input",{className:me,value:w,disabled:_==="connecting"||!s,onChange:r=>ne(r.target.value),onBlur:()=>{g()},autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",required:C==="rdp"||_==="credentials"&&wt,maxLength:255})]}),t.jsxs("label",{className:"block space-y-1 text-xs",children:[t.jsx("span",{children:e("computer.password")}),t.jsx("input",{className:me,type:"password",value:ie,disabled:_==="connecting"||!s,onChange:r=>Y(r.target.value),placeholder:O&&_!=="credentials"?e("computer.savedPassword"):void 0,autoComplete:"new-password",required:!O||_==="credentials",maxLength:1024})]}),t.jsx("p",{className:"text-[11px] leading-relaxed text-muted-foreground",children:e(C==="rdp"?"computer.rdpLoginHint":"computer.vncLoginHint")}),t.jsxs("div",{className:"flex min-h-11 items-center justify-between gap-2 text-xs",children:[t.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[t.jsx("input",{type:"checkbox",checked:a.rememberLogin,disabled:X||!s||T==="saving",onChange:r=>{const i=r.target.checked;E({rememberLogin:i}),!i&&O?k("forget",{...a,rememberLogin:i}).catch(()=>{}):g()}}),e("computer.rememberLogin")]}),O&&t.jsx("button",{type:"button",className:"min-h-11 text-muted-foreground underline",disabled:X||T==="saving",onClick:ot,children:e("computer.forgetLogin")})]}),T==="error"&&!G&&t.jsx("p",{role:"alert",className:"text-xs text-destructive",children:e("computer.loginSaveFailed")}),D&&t.jsxs("div",{role:"status",className:"space-y-1 text-xs leading-relaxed text-muted-foreground",children:[t.jsx("p",{children:e("computer.rdpBackendUnavailable")}),t.jsx("p",{children:e("computer.rdpBackendRecovery")})]}),_==="credentials"&&t.jsx("p",{className:"text-xs text-primary",children:e("computer.credentials")}),G&&t.jsxs("div",{role:"alert",className:"rounded-md bg-surface-2 p-3 text-xs leading-relaxed text-destructive",children:[e(G),G==="computer.rdpCertificate"&&t.jsxs("label",{className:"mt-1 flex min-h-11 items-center gap-2 text-foreground",children:[t.jsx("input",{type:"checkbox",checked:q,onChange:r=>ae(r.target.checked)}),e("computer.trustCertificateHere")]}),_==="error"&&G!=="computer.rdpCertificate"&&t.jsx("button",{type:"button",className:"mt-1 block min-h-9 text-foreground underline",onClick:()=>{he(!0),requestAnimationFrame(()=>Qe.current?.scrollIntoView?.({block:"nearest",behavior:"smooth"}))},children:e("computer.checkSettings")})]}),t.jsxs("button",{type:"submit",className:"inline-flex min-h-11 w-full items-center justify-center gap-2 rounded-md bg-primary px-3 text-sm font-medium text-primary-foreground disabled:opacity-40",disabled:!s||D||_==="connecting"||T==="saving"||A&&!u||!N.trim()||!ie&&(!O||_==="credentials")||C==="rdp"&&(!w.trim()||!Number.isInteger(Number(K))||Number(K)<1||Number(K)>65535),children:[_==="connecting"&&t.jsx(dt,{size:16,className:"animate-spin"}),e(_==="connecting"?"computer.connecting":_==="credentials"?"computer.authenticate":_==="error"?"computer.retryConnect":"computer.connect")]}),t.jsxs("details",{ref:Qe,className:"border-b border-border text-xs",open:je,onToggle:r=>he(r.currentTarget.open),children:[t.jsxs("summary",{className:"flex min-h-11 cursor-pointer list-none items-center justify-between text-muted-foreground",children:[t.jsx("span",{children:e("computer.advanced")}),t.jsx("span",{"aria-hidden":"true",children:je?"−":"+"})]}),t.jsxs("div",{className:"space-y-3 pb-4",children:[t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("label",{className:"block space-y-1",children:[t.jsx("span",{children:e("computer.platform")}),t.jsxs("select",{className:me,value:b,disabled:X||!s,onChange:r=>{Ut(r.target.value)&&E({platform:r.target.value,protocol:r.target.value==="mac"?"vnc":"rdp",ignoreCert:!1}),Y(""),g()},children:[t.jsx("option",{value:"mac",children:"macOS"}),t.jsx("option",{value:"linux",children:"Ubuntu / Linux"}),t.jsx("option",{value:"windows",children:"Windows"})]})]}),t.jsxs("label",{className:"block space-y-1",children:[t.jsx("span",{children:e("computer.protocol")}),t.jsxs("select",{className:me,value:C,disabled:X||!s,onChange:r=>{E({protocol:r.target.value==="rdp"?"rdp":"vnc"}),Y(""),J(null),g()},children:[t.jsx("option",{value:"rdp",children:"RDP"}),t.jsx("option",{value:"vnc",children:"VNC"})]})]})]}),C==="rdp"&&t.jsxs(t.Fragment,{children:[t.jsxs("label",{className:"block space-y-1",children:[t.jsx("span",{children:e("computer.port")}),t.jsx("input",{className:me,type:"number",min:1,max:65535,step:1,value:K,disabled:X||!s,onBlur:()=>{g()},onChange:r=>pe(r.target.value)})]}),t.jsxs("label",{className:"block space-y-1",children:[t.jsx("span",{children:e("computer.domain")}),t.jsx("input",{className:me,value:H,disabled:X||!s,onBlur:()=>{g()},onChange:r=>U(r.target.value),autoComplete:"off",maxLength:255})]}),t.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[t.jsx("input",{type:"checkbox",checked:q,disabled:X||!s,onChange:r=>ae(r.target.checked)}),e("computer.trustCertificate")]})]}),t.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[t.jsx("input",{type:"checkbox",checked:h,disabled:X||!s,onChange:r=>fe(r.target.checked)}),e("computer.viewOnly")]}),t.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[t.jsx("input",{type:"checkbox",checked:x.autoConnect,disabled:X||!s,onChange:r=>{d(i=>({...i,autoConnect:r.target.checked})),g()}}),e("computer.autoConnect")]})]})]})]}),t.jsxs("p",{role:"status",className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:[e(v==="saved"?"computer.settingsSaved":v==="error"?s?"computer.settingsSaveFailed":"computer.settingsLoadFailed":v==="loading"?"computer.settingsLoading":"computer.settingsSaving"),v==="error"&&t.jsx("button",{type:"button",className:"ml-2 min-h-9 text-primary underline",onClick:P,children:e("computer.retry")})]}),t.jsxs("details",{className:"text-xs",children:[t.jsx("summary",{className:"flex min-h-11 cursor-pointer items-center text-muted-foreground",children:e("computer.setup")}),t.jsxs("ol",{className:"ml-4 list-decimal space-y-2 pt-2 leading-relaxed text-muted-foreground",children:[t.jsx("li",{children:e(C==="rdp"?b==="linux"?"computer.rdpLinuxStep1":"computer.rdpStep1":b==="mac"?"computer.step1":b==="linux"?"computer.linuxStep1":"computer.windowsStep1")}),t.jsx("li",{children:e(C==="rdp"?"computer.rdpStep2":b==="mac"?"computer.step2":b==="linux"?"computer.linuxStep2":"computer.windowsStep2")}),t.jsx("li",{children:e("computer.step3")})]}),C==="vnc"&&b==="linux"&&t.jsxs(t.Fragment,{children:[t.jsx("p",{className:"mt-3 leading-relaxed text-muted-foreground",children:e("computer.linuxCommandHint")}),t.jsx("pre",{className:"mt-2 overflow-x-auto rounded-md bg-background p-2 text-[11px]",children:t.jsx("code",{children:`sudo apt install x11vnc
4
- x11vnc -storepasswd
5
- x11vnc -display "$DISPLAY" -auth guess -localhost -usepw -forever -shared -rfbport 5900`})}),t.jsx("p",{className:"mt-2 leading-relaxed text-muted-foreground",children:e("computer.linuxProtocolHint")})]}),t.jsx("p",{className:"mt-3 leading-relaxed text-muted-foreground",children:e(C==="rdp"?"computer.rdpNetworkHint":"computer.networkHint")})]})]})}),M&&m==="tools"&&t.jsx("button",{type:"button",className:`absolute inset-x-0 ${Q?"bottom-14":"bottom-0"} top-12 z-20 bg-background/40`,"aria-label":e("computer.returnToDesktop"),onClick:()=>y(null)}),M&&t.jsxs("div",{hidden:m!=="tools",className:`${m==="tools"?"flex":"hidden"} absolute inset-x-3 top-14 z-30 max-h-[calc(100%-7rem)] flex-wrap items-center gap-3 overflow-y-auto rounded-lg border border-border bg-surface px-4 py-3 text-xs shadow-lg [&_button]:min-h-11 [&_select]:min-h-11 [&_label]:min-h-11`,role:"region","aria-label":e("computer.tools"),children:[t.jsxs("div",{className:"flex w-full items-center justify-between",children:[t.jsx("span",{className:"font-medium",children:e("computer.tools")}),t.jsx("button",{type:"button",className:"flex min-w-11 items-center justify-center","aria-label":e("computer.closeTools"),onClick:()=>y(null),children:t.jsx(Tt,{size:18})})]}),Q&&t.jsx("div",{className:"flex w-full items-center gap-2",children:t.jsx("div",{className:"inline-flex rounded-md bg-background p-0.5",role:"group","aria-label":e("computer.touchMode"),children:["trackpad","direct"].map(r=>t.jsx("button",{type:"button",className:`min-h-9 rounded px-3 text-xs ${oe===r?"bg-surface-2 text-foreground":"text-muted-foreground hover:bg-surface"}`,"aria-pressed":oe===r,onClick:()=>nt(r),children:e(r==="trackpad"?"computer.trackpadMode":"computer.directTouchMode")},r))})}),!Q&&t.jsxs(t.Fragment,{children:[st,t.jsxs("button",{type:"button",className:ce,disabled:h,onClick:()=>we("keyboard"),children:[t.jsx(Ve,{size:14}),e("computer.keyboard")]})]}),t.jsxs("label",{className:"flex min-h-9 items-center gap-1.5",children:[t.jsx("input",{type:"checkbox",checked:h,onChange:r=>fe(r.target.checked)}),e("computer.viewOnly")]}),t.jsx("button",{type:"button",className:ce,onClick:()=>{ee.current?.set(1),d(r=>({...r,fit:!r.fit})),g()},children:e(R?"computer.actualSize":"computer.fit")}),t.jsxs("select",{className:`${ce} min-w-0 bg-surface`,"aria-label":e("computer.shortcuts"),value:"",disabled:h,onChange:r=>{be(Z[r.target.value]??[])},children:[t.jsx("option",{value:"",disabled:!0,children:e("computer.shortcuts")}),t.jsxs("option",{value:"tab",children:[b==="mac"?"⌘ Tab":"Alt+Tab"," · ",e("computer.switchApps")]}),t.jsxs("option",{value:"search",children:[b==="mac"?"⌘ Space":"Super / Win"," · ",e(b==="mac"?"computer.spotlight":"computer.systemSearch")]}),t.jsx("option",{value:"copy",children:b==="mac"?"⌘C":"Ctrl+C"}),t.jsx("option",{value:"paste",children:ke}),t.jsx("option",{value:"escape",children:"Esc"}),t.jsx("option",{value:"enter",children:"Enter"}),t.jsx("option",{value:"backspace",children:"⌫"}),t.jsx("option",{value:"up",children:"↑"}),t.jsx("option",{value:"down",children:"↓"}),t.jsx("option",{value:"left",children:"←"}),t.jsx("option",{value:"right",children:"→"})]}),t.jsxs("div",{className:"flex w-full items-center justify-between border-t border-border pt-2",children:[O&&t.jsx("button",{type:"button",className:ce,disabled:T==="saving",onClick:ot,children:e("computer.forgetLogin")}),t.jsxs("button",{type:"button",className:`${ce} ml-auto text-destructive`,onClick:tt,children:[t.jsx(mt,{size:14}),e("computer.disconnect")]})]})]}),t.jsx("div",{ref:ze,"data-sidebar-gesture-ignore":"",className:`relative z-10 min-h-0 flex-1 overflow-hidden bg-[var(--chrome-bg)] ${M?"":"hidden"}`,onMouseDownCapture:r=>{m==="keyboard"&&r.preventDefault()},style:{touchAction:M?"none":void 0},"aria-label":e("computer.remoteTitle"),children:M&&t.jsx("div",{ref:qe,hidden:!0,"aria-hidden":"true",className:"pointer-events-none absolute left-0 top-0 z-20 h-5 w-5 will-change-transform",children:t.jsx(ft,{size:20,strokeWidth:2,className:"fill-background text-primary drop-shadow"})})}),t.jsx("div",{hidden:m!=="tools",children:M&&Q&&!h&&t.jsx("p",{className:"shrink-0 border-t border-border px-2 py-1 text-[10px] leading-relaxed text-muted-foreground",children:e(oe==="trackpad"?"computer.trackpadHint":"computer.directTouchHint")})}),M&&m==="keyboard"&&!h&&t.jsxs(t.Fragment,{children:[t.jsx(Jt,{inputRef:L,onFocusChange:$,sendText:Et,sendKey:r=>be(r==="tab"?[[65289,"Tab"]]:r==="delete"?[[65535,"Delete"]]:Z[r])}),t.jsx("div",{className:"grid shrink-0 grid-cols-6 gap-1 bg-surface px-1",role:"group","aria-label":e("computer.keyboardNavigation"),children:["escape","left","down","up","right","selectAll"].map(r=>t.jsx("button",{type:"button",className:"min-h-11 rounded-md text-sm hover:bg-surface-2","aria-label":e(`computer.key${r[0].toUpperCase()}${r.slice(1)}`),onPointerDown:i=>i.preventDefault(),onClick:()=>be(r==="selectAll"?[...Z.copy.slice(0,1),[97,"KeyA"]]:Z[r]),children:{escape:"Esc",left:"←",down:"↓",up:"↑",right:"→",selectAll:b==="mac"?"⌘A":"Ctrl+A"}[r]},r))})]}),M&&m==="clipboard"&&!h&&t.jsxs("form",{className:"shrink-0 space-y-2 border-t border-border p-3",onSubmit:r=>{if(r.preventDefault(),!(!_e||!F.current))try{F.current.clipboardPasteFrom(_e),Se(!0)}catch{J("computer.clipboardFailed")}},children:[t.jsx("textarea",{className:`${me} min-w-0 resize-none py-2 text-base`,rows:2,"aria-label":e("computer.clipboard"),placeholder:e("computer.clipboardPlaceholder"),value:_e,onChange:r=>{We(r.target.value),Se(!1)},maxLength:16384}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{type:"submit",className:`${ce} min-h-11 flex-1`,disabled:!_e,children:e("computer.clipboard")}),t.jsx("button",{type:"button",className:`${ce} min-h-11`,onClick:()=>be(Z.paste),children:ke})]}),t.jsx("p",{role:"status",className:"text-[10px] leading-relaxed text-muted-foreground",children:vt?e("computer.clipboardSent"):e("computer.clipboardHint",{shortcut:ke})}),G&&t.jsx("p",{role:"alert",className:"text-xs text-destructive",children:e(G)})]}),M&&Q&&t.jsxs("div",{className:"relative z-30 flex shrink-0 items-center border-t border-border bg-surface px-1 py-1 text-[11px]",children:[t.jsxs("div",{className:`grid min-w-0 flex-1 ${m==="keyboard"?"grid-cols-5":"grid-cols-3"}`,children:[t.jsxs("button",{type:"button",className:`flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md ${Re?"bg-surface-2 text-primary":""}`,disabled:h,onClick:()=>we("keyboard"),"aria-pressed":Re,children:[t.jsx(Ve,{size:18}),e("computer.keyboard")]}),t.jsxs("button",{type:"button",className:`flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md ${m==="clipboard"?"bg-surface-2 text-primary":""}`,disabled:h,onClick:()=>we("clipboard"),"aria-pressed":m==="clipboard",children:[t.jsx(pt,{size:18}),e("computer.clipboardTool")]}),m==="keyboard"?t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"min-h-11 rounded-md text-sm",onPointerDown:r=>r.preventDefault(),onClick:()=>be([[65289,"Tab"]]),children:"Tab"}),t.jsx("button",{type:"button",className:"min-h-11 rounded-md text-lg",onPointerDown:r=>r.preventDefault(),onClick:()=>be(Z.backspace),children:"⌫"}),t.jsx("button",{type:"button",className:"min-h-11 rounded-md text-lg",onPointerDown:r=>r.preventDefault(),onClick:()=>be(Z.enter),children:"↵"})]}):t.jsx(t.Fragment,{children:t.jsxs("button",{type:"button",className:"flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md",disabled:h,onClick:()=>nt(oe==="trackpad"?"direct":"trackpad"),"aria-label":e("computer.switchTouchMode"),children:[t.jsx(ft,{size:18}),e(oe==="trackpad"?"computer.trackpadMode":"computer.directTouchMode")]})})]}),st]})]});return l?ut.createPortal(ct,document.body):ct}const lr=Object.freeze(Object.defineProperty({__proto__:null,default:rr},Symbol.toStringTag,{value:"Module"}));export{lr as C,Zt as c};
@@ -1 +0,0 @@
1
- import{c as a,C as n}from"./mermaid.core-CYY7Wb75.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as t,C as e}from"./chunk-TICWLB2K-Z_Sti6yX.js";import{d as i}from"./mermaid.core-CYY7Wb75.js";import"./chunk-5VM5RSS4-CT0S2-E8.js";import"./chunk-XXDRQBXY-DKngx1rf.js";import"./chunk-POPQ4Y6H-BpiRuG56.js";import"./chunk-F27PBJKO-7o5_yA1b.js";import"./purify.es-4eNOHKSq.js";import"./app-VCmiASzh.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-C7X98Amf.js";var g={parser:t,get db(){return new e},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{g as diagram};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as t,C as e}from"./chunk-TICWLB2K-Z_Sti6yX.js";import{d as i}from"./mermaid.core-CYY7Wb75.js";import"./chunk-5VM5RSS4-CT0S2-E8.js";import"./chunk-XXDRQBXY-DKngx1rf.js";import"./chunk-POPQ4Y6H-BpiRuG56.js";import"./chunk-F27PBJKO-7o5_yA1b.js";import"./purify.es-4eNOHKSq.js";import"./app-VCmiASzh.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-C7X98Amf.js";var g={parser:t,get db(){return new e},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{g as diagram};