termdock 1.4.298 → 1.4.300

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 (370) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +2 -1
  3. package/dist/client/assets/App-7k2I_09f.js +179 -0
  4. package/dist/client/assets/App-7k2I_09f.js.br +0 -0
  5. package/dist/client/assets/App-7k2I_09f.js.gz +0 -0
  6. package/dist/client/assets/ArchitecturePanel-BrfM7rGb.js +12 -0
  7. package/dist/client/assets/ArchitecturePanel-BrfM7rGb.js.br +0 -0
  8. package/dist/client/assets/ArchitecturePanel-BrfM7rGb.js.gz +0 -0
  9. package/dist/client/assets/{ChangeWalkthroughPanel-BrAwRa20.js → ChangeWalkthroughPanel-RoMt6giT.js} +2 -2
  10. package/dist/client/assets/ChangeWalkthroughPanel-RoMt6giT.js.br +0 -0
  11. package/dist/client/assets/ChangeWalkthroughPanel-RoMt6giT.js.gz +0 -0
  12. package/dist/client/assets/CollaborationMainWorkspace-CK2BKKnn.js +1 -0
  13. package/dist/client/assets/CollaborationMainWorkspace-CK2BKKnn.js.br +0 -0
  14. package/dist/client/assets/CollaborationMainWorkspace-CK2BKKnn.js.gz +0 -0
  15. package/dist/client/assets/CollaborationTaskContent-FlTbV9e1.js +2 -0
  16. package/dist/client/assets/ComputerControlView-AdjmvNUa.js +5 -0
  17. package/dist/client/assets/ComputerControlView-AdjmvNUa.js.br +0 -0
  18. package/dist/client/assets/ComputerControlView-AdjmvNUa.js.gz +0 -0
  19. package/dist/client/assets/{DagPlayground-DiAEIEvj.js → DagPlayground-x8-mp6wC.js} +1 -1
  20. package/dist/client/assets/DagPlayground-x8-mp6wC.js.br +0 -0
  21. package/dist/client/assets/DagPlayground-x8-mp6wC.js.gz +0 -0
  22. package/dist/client/assets/{DiffLab-BOXARpIG.js → DiffLab-B9KLZ--H.js} +1 -1
  23. package/dist/client/assets/DiffLab-B9KLZ--H.js.br +0 -0
  24. package/dist/client/assets/DiffLab-B9KLZ--H.js.gz +0 -0
  25. package/dist/client/assets/{DiffReview-C90Qt0Gx.js → DiffReview-IEcDVREB.js} +1 -1
  26. package/dist/client/assets/DiffReview-IEcDVREB.js.br +0 -0
  27. package/dist/client/assets/DiffReview-IEcDVREB.js.gz +0 -0
  28. package/dist/client/assets/{DiffReviewLab-CrVXGE1A.js → DiffReviewLab-lWra5pTJ.js} +2 -2
  29. package/dist/client/assets/DiffReviewLab-lWra5pTJ.js.br +0 -0
  30. package/dist/client/assets/DiffReviewLab-lWra5pTJ.js.gz +0 -0
  31. package/dist/client/assets/{DiffViewer-BA_9bZxs.js → DiffViewer-B2Rue9PA.js} +8 -8
  32. package/dist/client/assets/DiffViewer-B2Rue9PA.js.br +0 -0
  33. package/dist/client/assets/DiffViewer-B2Rue9PA.js.gz +0 -0
  34. package/dist/client/assets/{ModelPreview-BX75IksJ.js → ModelPreview-NMQsfqAe.js} +1 -1
  35. package/dist/client/assets/ModelPreview-NMQsfqAe.js.br +0 -0
  36. package/dist/client/assets/ModelPreview-NMQsfqAe.js.gz +0 -0
  37. package/dist/client/assets/RightSidebar-BOBbegdP.js +1677 -0
  38. package/dist/client/assets/RightSidebar-BOBbegdP.js.br +0 -0
  39. package/dist/client/assets/RightSidebar-BOBbegdP.js.gz +0 -0
  40. package/dist/client/assets/{abnfDiagram-VCTEODGH-BGF7DKjR.js → abnfDiagram-VCTEODGH-BIVuPQbA.js} +1 -1
  41. package/dist/client/assets/abnfDiagram-VCTEODGH-BIVuPQbA.js.br +0 -0
  42. package/dist/client/assets/abnfDiagram-VCTEODGH-BIVuPQbA.js.gz +0 -0
  43. package/dist/client/assets/app-CHoOHnjf.js +35 -0
  44. package/dist/client/assets/app-CHoOHnjf.js.br +0 -0
  45. package/dist/client/assets/app-CHoOHnjf.js.gz +0 -0
  46. package/dist/client/assets/{arc-DZUR8G8M.js → arc-CNTT1p1A.js} +1 -1
  47. package/dist/client/assets/arc-CNTT1p1A.js.br +0 -0
  48. package/dist/client/assets/arc-CNTT1p1A.js.gz +0 -0
  49. package/dist/client/assets/{architectureDiagram-5GKGNRK7-CWXE4hoZ.js → architectureDiagram-5GKGNRK7-Cl3gg8ZE.js} +1 -1
  50. package/dist/client/assets/architectureDiagram-5GKGNRK7-Cl3gg8ZE.js.br +0 -0
  51. package/dist/client/assets/architectureDiagram-5GKGNRK7-Cl3gg8ZE.js.gz +0 -0
  52. package/dist/client/assets/{blockDiagram-I7D4REHJ-BZdUQzE2.js → blockDiagram-I7D4REHJ-Sxmfy_3_.js} +1 -1
  53. package/dist/client/assets/blockDiagram-I7D4REHJ-Sxmfy_3_.js.br +0 -0
  54. package/dist/client/assets/blockDiagram-I7D4REHJ-Sxmfy_3_.js.gz +0 -0
  55. package/dist/client/assets/{c4Diagram-7LVT6UL2-DA7m-AbK.js → c4Diagram-7LVT6UL2-DaTnrOn7.js} +1 -1
  56. package/dist/client/assets/c4Diagram-7LVT6UL2-DaTnrOn7.js.br +0 -0
  57. package/dist/client/assets/c4Diagram-7LVT6UL2-DaTnrOn7.js.gz +0 -0
  58. package/dist/client/assets/channel-CEvBVvt3.js +1 -0
  59. package/dist/client/assets/{chunk-2Q5K7J3B-Dg-zs5cw.js → chunk-2Q5K7J3B-BoiPA32P.js} +1 -1
  60. package/dist/client/assets/{chunk-5VM5RSS4-DKMA2xz_.js → chunk-5VM5RSS4-G5G1YBLk.js} +1 -1
  61. package/dist/client/assets/{chunk-F27PBJKO-ByyS2RgO.js → chunk-F27PBJKO-BNHv_EnL.js} +1 -1
  62. package/dist/client/assets/chunk-F27PBJKO-BNHv_EnL.js.br +0 -0
  63. package/dist/client/assets/chunk-F27PBJKO-BNHv_EnL.js.gz +0 -0
  64. package/dist/client/assets/{chunk-IMKFNOWR-DTTmE4mJ.js → chunk-IMKFNOWR-CxgtyKdq.js} +1 -1
  65. package/dist/client/assets/chunk-IMKFNOWR-CxgtyKdq.js.br +0 -0
  66. package/dist/client/assets/chunk-IMKFNOWR-CxgtyKdq.js.gz +0 -0
  67. package/dist/client/assets/{chunk-JWPE2WC7-D9nr-n4D.js → chunk-JWPE2WC7-UO-0iK-G.js} +1 -1
  68. package/dist/client/assets/{chunk-POPQ4Y6H-BPVZ3XrQ.js → chunk-POPQ4Y6H-Cox9z-e2.js} +1 -1
  69. package/dist/client/assets/{chunk-SVP7TREG-Ctn5SKJf.js → chunk-SVP7TREG-B2W8-Lxh.js} +1 -1
  70. package/dist/client/assets/chunk-SVP7TREG-B2W8-Lxh.js.br +0 -0
  71. package/dist/client/assets/chunk-SVP7TREG-B2W8-Lxh.js.gz +0 -0
  72. package/dist/client/assets/{chunk-TICWLB2K-BCNSq9V4.js → chunk-TICWLB2K-BYDr9nkD.js} +1 -1
  73. package/dist/client/assets/chunk-TICWLB2K-BYDr9nkD.js.br +0 -0
  74. package/dist/client/assets/chunk-TICWLB2K-BYDr9nkD.js.gz +0 -0
  75. package/dist/client/assets/{chunk-XXDRQBXY-BlJ1FL7I.js → chunk-XXDRQBXY-atArreox.js} +1 -1
  76. package/dist/client/assets/classDiagram-ZZMXUADV-nSmGM9Fl.js +1 -0
  77. package/dist/client/assets/classDiagram-v2-VYDZK3BY-nSmGM9Fl.js +1 -0
  78. package/dist/client/assets/{cose-bilkent-JH36ORCC-Cv4gLm7L.js → cose-bilkent-JH36ORCC-CvfJj195.js} +1 -1
  79. package/dist/client/assets/cose-bilkent-JH36ORCC-CvfJj195.js.br +0 -0
  80. package/dist/client/assets/cose-bilkent-JH36ORCC-CvfJj195.js.gz +0 -0
  81. package/dist/client/assets/{cynefin-OW5HDTMX-BNbPniZY.js → cynefin-OW5HDTMX-ByWE_fUn.js} +1 -1
  82. package/dist/client/assets/cynefin-OW5HDTMX-ByWE_fUn.js.br +0 -0
  83. package/dist/client/assets/cynefin-OW5HDTMX-ByWE_fUn.js.gz +0 -0
  84. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-DFR2fyKM.js → cynefinDiagram-5FMLGOSQ-BRT0d0MN.js} +1 -1
  85. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BRT0d0MN.js.br +0 -0
  86. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BRT0d0MN.js.gz +0 -0
  87. package/dist/client/assets/{dagre-GXQ25YYZ-DM9QOAp3.js → dagre-GXQ25YYZ-Twtyv7ud.js} +1 -1
  88. package/dist/client/assets/dagre-GXQ25YYZ-Twtyv7ud.js.br +0 -0
  89. package/dist/client/assets/dagre-GXQ25YYZ-Twtyv7ud.js.gz +0 -0
  90. package/dist/client/assets/{diagram-S7CK7UJ4-DqeCdIIK.js → diagram-S7CK7UJ4-Vl06hZtd.js} +1 -1
  91. package/dist/client/assets/diagram-S7CK7UJ4-Vl06hZtd.js.br +0 -0
  92. package/dist/client/assets/diagram-S7CK7UJ4-Vl06hZtd.js.gz +0 -0
  93. package/dist/client/assets/{diagram-UQ7AKVKN-Cc1KiE_N.js → diagram-UQ7AKVKN-Cp39Mpse.js} +1 -1
  94. package/dist/client/assets/diagram-UQ7AKVKN-Cp39Mpse.js.br +0 -0
  95. package/dist/client/assets/diagram-UQ7AKVKN-Cp39Mpse.js.gz +0 -0
  96. package/dist/client/assets/{diagram-VSXAHHWV-I_0NpClr.js → diagram-VSXAHHWV-Drchji0N.js} +1 -1
  97. package/dist/client/assets/diagram-VSXAHHWV-Drchji0N.js.br +0 -0
  98. package/dist/client/assets/diagram-VSXAHHWV-Drchji0N.js.gz +0 -0
  99. package/dist/client/assets/{diagram-VX7I27RA-DLjDAEEa.js → diagram-VX7I27RA-rp8n_lct.js} +1 -1
  100. package/dist/client/assets/diagram-VX7I27RA-rp8n_lct.js.br +0 -0
  101. package/dist/client/assets/diagram-VX7I27RA-rp8n_lct.js.gz +0 -0
  102. package/dist/client/assets/{diagram-Z3DM3KII-DHo74-rP.js → diagram-Z3DM3KII-BEGDaMBm.js} +1 -1
  103. package/dist/client/assets/diagram-Z3DM3KII-BEGDaMBm.js.br +0 -0
  104. package/dist/client/assets/diagram-Z3DM3KII-BEGDaMBm.js.gz +0 -0
  105. package/dist/client/assets/{ebnfDiagram-PWID7BFC-S9dCP2Z9.js → ebnfDiagram-PWID7BFC-kvgdD4A7.js} +1 -1
  106. package/dist/client/assets/ebnfDiagram-PWID7BFC-kvgdD4A7.js.br +0 -0
  107. package/dist/client/assets/ebnfDiagram-PWID7BFC-kvgdD4A7.js.gz +0 -0
  108. package/dist/client/assets/{erDiagram-RLTQ6QDP-CR99Mjq9.js → erDiagram-RLTQ6QDP-DcYHv9hK.js} +1 -1
  109. package/dist/client/assets/erDiagram-RLTQ6QDP-DcYHv9hK.js.br +0 -0
  110. package/dist/client/assets/erDiagram-RLTQ6QDP-DcYHv9hK.js.gz +0 -0
  111. package/dist/client/assets/{flowDiagram-HODETNUW-CIqCbTFC.js → flowDiagram-HODETNUW-T9FQKn1F.js} +1 -1
  112. package/dist/client/assets/flowDiagram-HODETNUW-T9FQKn1F.js.br +0 -0
  113. package/dist/client/assets/flowDiagram-HODETNUW-T9FQKn1F.js.gz +0 -0
  114. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CSpUeAKu.js → ganttDiagram-EL5Y4UJY-BEB_X-y5.js} +1 -1
  115. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BEB_X-y5.js.br +0 -0
  116. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BEB_X-y5.js.gz +0 -0
  117. package/dist/client/assets/{gestureArbiter-C3GqyqzH.js → gestureArbiter-Do0TIdkh.js} +1 -1
  118. package/dist/client/assets/gestureArbiter-Do0TIdkh.js.br +0 -0
  119. package/dist/client/assets/gestureArbiter-Do0TIdkh.js.gz +0 -0
  120. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-DBICHCGp.js → gitGraphDiagram-WWUBYQGX-_0Y7kKA2.js} +1 -1
  121. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-_0Y7kKA2.js.br +0 -0
  122. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-_0Y7kKA2.js.gz +0 -0
  123. package/dist/client/assets/{index-C6ftfFlG.css → index-D2_-ypCL.css} +1 -1
  124. package/dist/client/assets/index-D2_-ypCL.css.br +0 -0
  125. package/dist/client/assets/index-D2_-ypCL.css.gz +0 -0
  126. package/dist/client/assets/{infoDiagram-27XIBGKW-CjPrG37z.js → infoDiagram-27XIBGKW-B6y0nIx8.js} +1 -1
  127. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-C718heAs.js → ishikawaDiagram-5VMMS53U-ebGuykGn.js} +1 -1
  128. package/dist/client/assets/ishikawaDiagram-5VMMS53U-ebGuykGn.js.br +0 -0
  129. package/dist/client/assets/ishikawaDiagram-5VMMS53U-ebGuykGn.js.gz +0 -0
  130. package/dist/client/assets/{journeyDiagram-3NMN7TZE-fu76FPSY.js → journeyDiagram-3NMN7TZE-DJDkcIq5.js} +1 -1
  131. package/dist/client/assets/journeyDiagram-3NMN7TZE-DJDkcIq5.js.br +0 -0
  132. package/dist/client/assets/journeyDiagram-3NMN7TZE-DJDkcIq5.js.gz +0 -0
  133. package/dist/client/assets/{kanban-definition-UXKFOSKX-BVj6v9-z.js → kanban-definition-UXKFOSKX-pTBbviRZ.js} +1 -1
  134. package/dist/client/assets/kanban-definition-UXKFOSKX-pTBbviRZ.js.br +0 -0
  135. package/dist/client/assets/kanban-definition-UXKFOSKX-pTBbviRZ.js.gz +0 -0
  136. package/dist/client/assets/{layout-Dspjm0zn.js → layout-Dw9FB4Uc.js} +1 -1
  137. package/dist/client/assets/layout-Dw9FB4Uc.js.br +0 -0
  138. package/dist/client/assets/layout-Dw9FB4Uc.js.gz +0 -0
  139. package/dist/client/assets/{linear-BktGv6ei.js → linear-CyLfVGgB.js} +1 -1
  140. package/dist/client/assets/linear-CyLfVGgB.js.br +0 -0
  141. package/dist/client/assets/linear-CyLfVGgB.js.gz +0 -0
  142. package/dist/client/assets/{mermaid.core-Dt2TVLfQ.js → mermaid.core-xRkirK0l.js} +5 -5
  143. package/dist/client/assets/mermaid.core-xRkirK0l.js.br +0 -0
  144. package/dist/client/assets/mermaid.core-xRkirK0l.js.gz +0 -0
  145. package/dist/client/assets/{mindmap-definition-YA3MSWOX-DwxtrCyv.js → mindmap-definition-YA3MSWOX-BxvaDEGQ.js} +1 -1
  146. package/dist/client/assets/mindmap-definition-YA3MSWOX-BxvaDEGQ.js.br +0 -0
  147. package/dist/client/assets/mindmap-definition-YA3MSWOX-BxvaDEGQ.js.gz +0 -0
  148. package/dist/client/assets/{passwordBootstrap-B5Inu7kn.js → passwordBootstrap-CaYbIQDC.js} +1 -1
  149. package/dist/client/assets/passwordBootstrap-CaYbIQDC.js.br +0 -0
  150. package/dist/client/assets/passwordBootstrap-CaYbIQDC.js.gz +0 -0
  151. package/dist/client/assets/{pegDiagram-XKGWAZYB-eDDhkygS.js → pegDiagram-XKGWAZYB-Cxh-Bbay.js} +1 -1
  152. package/dist/client/assets/pegDiagram-XKGWAZYB-Cxh-Bbay.js.br +0 -0
  153. package/dist/client/assets/pegDiagram-XKGWAZYB-Cxh-Bbay.js.gz +0 -0
  154. package/dist/client/assets/{pieDiagram-E7YTZNPT-C-A_a53h.js → pieDiagram-E7YTZNPT-CgOsk0Ai.js} +1 -1
  155. package/dist/client/assets/pieDiagram-E7YTZNPT-CgOsk0Ai.js.br +0 -0
  156. package/dist/client/assets/pieDiagram-E7YTZNPT-CgOsk0Ai.js.gz +0 -0
  157. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-BRmQ1U56.js → quadrantDiagram-AXDQQJYC-D1S_gKcT.js} +1 -1
  158. package/dist/client/assets/quadrantDiagram-AXDQQJYC-D1S_gKcT.js.br +0 -0
  159. package/dist/client/assets/quadrantDiagram-AXDQQJYC-D1S_gKcT.js.gz +0 -0
  160. package/dist/client/assets/{railroadDiagram-O6MQD6OU-BRmkfIUn.js → railroadDiagram-O6MQD6OU-BG5e87Np.js} +1 -1
  161. package/dist/client/assets/railroadDiagram-O6MQD6OU-BG5e87Np.js.br +0 -0
  162. package/dist/client/assets/railroadDiagram-O6MQD6OU-BG5e87Np.js.gz +0 -0
  163. package/dist/client/assets/rdpSession-DL1rZ49m.js +1 -0
  164. package/dist/client/assets/rdpSession-DL1rZ49m.js.br +0 -0
  165. package/dist/client/assets/rdpSession-DL1rZ49m.js.gz +0 -0
  166. package/dist/client/assets/referenceLongPress-DB039WbW.js +1 -0
  167. package/dist/client/assets/referenceLongPress-DB039WbW.js.br +0 -0
  168. package/dist/client/assets/referenceLongPress-DB039WbW.js.gz +0 -0
  169. package/dist/client/assets/{requirementDiagram-BXWQKSXE-C95pjpXU.js → requirementDiagram-BXWQKSXE-C37DsQfu.js} +1 -1
  170. package/dist/client/assets/requirementDiagram-BXWQKSXE-C37DsQfu.js.br +0 -0
  171. package/dist/client/assets/requirementDiagram-BXWQKSXE-C37DsQfu.js.gz +0 -0
  172. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-BD7SJZ8y.js → sankeyDiagram-P5KCCOFB-DLzhCYoj.js} +1 -1
  173. package/dist/client/assets/sankeyDiagram-P5KCCOFB-DLzhCYoj.js.br +0 -0
  174. package/dist/client/assets/sankeyDiagram-P5KCCOFB-DLzhCYoj.js.gz +0 -0
  175. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-D0egOILU.js → sequenceDiagram-WJ2MYXX4-DeVpSvB0.js} +1 -1
  176. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DeVpSvB0.js.br +0 -0
  177. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DeVpSvB0.js.gz +0 -0
  178. package/dist/client/assets/{sizeCapture-INFHLROL-BaJGHebj.js → sizeCapture-INFHLROL-CE03E66U.js} +1 -1
  179. package/dist/client/assets/sizeCapture-INFHLROL-CE03E66U.js.br +0 -0
  180. package/dist/client/assets/sizeCapture-INFHLROL-CE03E66U.js.gz +0 -0
  181. package/dist/client/assets/{sparkles-D4t6BWgT.js → sparkles-ButxQzs4.js} +1 -1
  182. package/dist/client/assets/{stateDiagram-D77RDMKH-DEZo4cxr.js → stateDiagram-D77RDMKH-DuqhHT3k.js} +1 -1
  183. package/dist/client/assets/stateDiagram-D77RDMKH-DuqhHT3k.js.br +0 -0
  184. package/dist/client/assets/stateDiagram-D77RDMKH-DuqhHT3k.js.gz +0 -0
  185. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CxfzEwAH.js +1 -0
  186. package/dist/client/assets/{swimlanes-42K2YHIH-DSZuZ910.js → swimlanes-42K2YHIH-DxkSdJ8g.js} +1 -1
  187. package/dist/client/assets/swimlanes-42K2YHIH-DxkSdJ8g.js.br +0 -0
  188. package/dist/client/assets/swimlanes-42K2YHIH-DxkSdJ8g.js.gz +0 -0
  189. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-B_muKJLi.js +8 -0
  190. package/dist/client/assets/{timeline-definition-24CTP7MA-Bw0gUCrJ.js → timeline-definition-24CTP7MA-DVpcJ6y5.js} +1 -1
  191. package/dist/client/assets/timeline-definition-24CTP7MA-DVpcJ6y5.js.br +0 -0
  192. package/dist/client/assets/timeline-definition-24CTP7MA-DVpcJ6y5.js.gz +0 -0
  193. package/dist/client/assets/{triangle-alert-Cf9mn5Ug.js → triangle-alert-BRy562K_.js} +1 -1
  194. package/dist/client/assets/{vennDiagram-4TSXK5OY-B0gzw-En.js → vennDiagram-4TSXK5OY-BEKXLWGa.js} +1 -1
  195. package/dist/client/assets/vennDiagram-4TSXK5OY-BEKXLWGa.js.br +0 -0
  196. package/dist/client/assets/vennDiagram-4TSXK5OY-BEKXLWGa.js.gz +0 -0
  197. package/dist/client/assets/{videoCompression-CyTyZG2b.js → videoCompression-CoVXZ8qw.js} +1 -1
  198. package/dist/client/assets/videoCompression-CoVXZ8qw.js.br +0 -0
  199. package/dist/client/assets/videoCompression-CoVXZ8qw.js.gz +0 -0
  200. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-vaiRXtUT.js → wardleyDiagram-VM6X3IG4-Cj30GTa9.js} +1 -1
  201. package/dist/client/assets/wardleyDiagram-VM6X3IG4-Cj30GTa9.js.br +0 -0
  202. package/dist/client/assets/wardleyDiagram-VM6X3IG4-Cj30GTa9.js.gz +0 -0
  203. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-Dosv-6JB.js → xychartDiagram-S5SC5T6Z-Cm7NEdCl.js} +1 -1
  204. package/dist/client/assets/xychartDiagram-S5SC5T6Z-Cm7NEdCl.js.br +0 -0
  205. package/dist/client/assets/xychartDiagram-S5SC5T6Z-Cm7NEdCl.js.gz +0 -0
  206. package/dist/client/index.html +2 -2
  207. package/dist/client/index.html.br +0 -0
  208. package/dist/client/index.html.gz +0 -0
  209. package/dist/client/sw.js +1 -1
  210. package/dist/client/sw.js.br +0 -0
  211. package/dist/client/sw.js.gz +0 -0
  212. package/dist/server/agent/collaborationCli.js +45 -6
  213. package/dist/server/agent/collaborationRoutes.js +4 -2
  214. package/dist/server/agent/collaborationStore.js +9 -0
  215. package/dist/server/agent/collaborationTaskCli.js +11 -3
  216. package/dist/server/agent/collaborationTaskService.js +14 -8
  217. package/dist/server/agent/collaborationTaskStore.js +67 -25
  218. package/dist/server/agent/integrationCli.js +227 -0
  219. package/dist/server/agent/integrationServer.js +326 -0
  220. package/dist/server/agent/integrationSessions.js +296 -0
  221. package/dist/server/agent/integrationStore.js +199 -0
  222. package/dist/server/cli.js +29 -0
  223. package/dist/server/entry.js +26 -7
  224. package/dist/server/routes/filesystem.js +120 -87
  225. package/dist/server/routes/terminal.js +158 -4
  226. package/dist/server/utils/localAccess.js +27 -7
  227. package/dist/server/utils/sessionDisplayName.js +53 -0
  228. package/docs/integrations.md +239 -0
  229. package/package.json +3 -2
  230. package/runtime-manifest.json +3 -3
  231. package/dist/client/assets/App-D7FKaW3e.js +0 -179
  232. package/dist/client/assets/App-D7FKaW3e.js.br +0 -0
  233. package/dist/client/assets/App-D7FKaW3e.js.gz +0 -0
  234. package/dist/client/assets/ArchitecturePanel-CU5vv8Fm.js +0 -7
  235. package/dist/client/assets/ArchitecturePanel-CU5vv8Fm.js.br +0 -0
  236. package/dist/client/assets/ArchitecturePanel-CU5vv8Fm.js.gz +0 -0
  237. package/dist/client/assets/ChangeWalkthroughPanel-BrAwRa20.js.br +0 -0
  238. package/dist/client/assets/ChangeWalkthroughPanel-BrAwRa20.js.gz +0 -0
  239. package/dist/client/assets/CollaborationMainWorkspace-CH6mfIDe.js +0 -1
  240. package/dist/client/assets/CollaborationMainWorkspace-CH6mfIDe.js.br +0 -0
  241. package/dist/client/assets/CollaborationMainWorkspace-CH6mfIDe.js.gz +0 -0
  242. package/dist/client/assets/CollaborationTaskContent-DkhB6WXO.js +0 -2
  243. package/dist/client/assets/ComputerControlView-CI-TMTRg.js +0 -5
  244. package/dist/client/assets/ComputerControlView-CI-TMTRg.js.br +0 -0
  245. package/dist/client/assets/ComputerControlView-CI-TMTRg.js.gz +0 -0
  246. package/dist/client/assets/DagPlayground-DiAEIEvj.js.br +0 -0
  247. package/dist/client/assets/DagPlayground-DiAEIEvj.js.gz +0 -0
  248. package/dist/client/assets/DiffLab-BOXARpIG.js.br +0 -0
  249. package/dist/client/assets/DiffLab-BOXARpIG.js.gz +0 -0
  250. package/dist/client/assets/DiffReview-C90Qt0Gx.js.br +0 -0
  251. package/dist/client/assets/DiffReview-C90Qt0Gx.js.gz +0 -0
  252. package/dist/client/assets/DiffReviewLab-CrVXGE1A.js.br +0 -0
  253. package/dist/client/assets/DiffReviewLab-CrVXGE1A.js.gz +0 -0
  254. package/dist/client/assets/DiffViewer-BA_9bZxs.js.br +0 -0
  255. package/dist/client/assets/DiffViewer-BA_9bZxs.js.gz +0 -0
  256. package/dist/client/assets/ModelPreview-BX75IksJ.js.br +0 -0
  257. package/dist/client/assets/ModelPreview-BX75IksJ.js.gz +0 -0
  258. package/dist/client/assets/RightSidebar-B_dO0nU5.js +0 -1678
  259. package/dist/client/assets/RightSidebar-B_dO0nU5.js.br +0 -0
  260. package/dist/client/assets/RightSidebar-B_dO0nU5.js.gz +0 -0
  261. package/dist/client/assets/abnfDiagram-VCTEODGH-BGF7DKjR.js.br +0 -0
  262. package/dist/client/assets/abnfDiagram-VCTEODGH-BGF7DKjR.js.gz +0 -0
  263. package/dist/client/assets/app-BJP8Xgmi.js +0 -35
  264. package/dist/client/assets/app-BJP8Xgmi.js.br +0 -0
  265. package/dist/client/assets/app-BJP8Xgmi.js.gz +0 -0
  266. package/dist/client/assets/arc-DZUR8G8M.js.br +0 -0
  267. package/dist/client/assets/arc-DZUR8G8M.js.gz +0 -0
  268. package/dist/client/assets/architectureDiagram-5GKGNRK7-CWXE4hoZ.js.br +0 -0
  269. package/dist/client/assets/architectureDiagram-5GKGNRK7-CWXE4hoZ.js.gz +0 -0
  270. package/dist/client/assets/blockDiagram-I7D4REHJ-BZdUQzE2.js.br +0 -0
  271. package/dist/client/assets/blockDiagram-I7D4REHJ-BZdUQzE2.js.gz +0 -0
  272. package/dist/client/assets/c4Diagram-7LVT6UL2-DA7m-AbK.js.br +0 -0
  273. package/dist/client/assets/c4Diagram-7LVT6UL2-DA7m-AbK.js.gz +0 -0
  274. package/dist/client/assets/channel-DD06PSxm.js +0 -1
  275. package/dist/client/assets/chunk-F27PBJKO-ByyS2RgO.js.br +0 -0
  276. package/dist/client/assets/chunk-F27PBJKO-ByyS2RgO.js.gz +0 -0
  277. package/dist/client/assets/chunk-IMKFNOWR-DTTmE4mJ.js.br +0 -0
  278. package/dist/client/assets/chunk-IMKFNOWR-DTTmE4mJ.js.gz +0 -0
  279. package/dist/client/assets/chunk-SVP7TREG-Ctn5SKJf.js.br +0 -0
  280. package/dist/client/assets/chunk-SVP7TREG-Ctn5SKJf.js.gz +0 -0
  281. package/dist/client/assets/chunk-TICWLB2K-BCNSq9V4.js.br +0 -0
  282. package/dist/client/assets/chunk-TICWLB2K-BCNSq9V4.js.gz +0 -0
  283. package/dist/client/assets/classDiagram-ZZMXUADV-DkVrFG7y.js +0 -1
  284. package/dist/client/assets/classDiagram-v2-VYDZK3BY-DkVrFG7y.js +0 -1
  285. package/dist/client/assets/cose-bilkent-JH36ORCC-Cv4gLm7L.js.br +0 -0
  286. package/dist/client/assets/cose-bilkent-JH36ORCC-Cv4gLm7L.js.gz +0 -0
  287. package/dist/client/assets/cynefin-OW5HDTMX-BNbPniZY.js.br +0 -0
  288. package/dist/client/assets/cynefin-OW5HDTMX-BNbPniZY.js.gz +0 -0
  289. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DFR2fyKM.js.br +0 -0
  290. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DFR2fyKM.js.gz +0 -0
  291. package/dist/client/assets/dagre-GXQ25YYZ-DM9QOAp3.js.br +0 -0
  292. package/dist/client/assets/dagre-GXQ25YYZ-DM9QOAp3.js.gz +0 -0
  293. package/dist/client/assets/diagram-S7CK7UJ4-DqeCdIIK.js.br +0 -0
  294. package/dist/client/assets/diagram-S7CK7UJ4-DqeCdIIK.js.gz +0 -0
  295. package/dist/client/assets/diagram-UQ7AKVKN-Cc1KiE_N.js.br +0 -0
  296. package/dist/client/assets/diagram-UQ7AKVKN-Cc1KiE_N.js.gz +0 -0
  297. package/dist/client/assets/diagram-VSXAHHWV-I_0NpClr.js.br +0 -0
  298. package/dist/client/assets/diagram-VSXAHHWV-I_0NpClr.js.gz +0 -0
  299. package/dist/client/assets/diagram-VX7I27RA-DLjDAEEa.js.br +0 -0
  300. package/dist/client/assets/diagram-VX7I27RA-DLjDAEEa.js.gz +0 -0
  301. package/dist/client/assets/diagram-Z3DM3KII-DHo74-rP.js.br +0 -0
  302. package/dist/client/assets/diagram-Z3DM3KII-DHo74-rP.js.gz +0 -0
  303. package/dist/client/assets/ebnfDiagram-PWID7BFC-S9dCP2Z9.js.br +0 -0
  304. package/dist/client/assets/ebnfDiagram-PWID7BFC-S9dCP2Z9.js.gz +0 -0
  305. package/dist/client/assets/erDiagram-RLTQ6QDP-CR99Mjq9.js.br +0 -0
  306. package/dist/client/assets/erDiagram-RLTQ6QDP-CR99Mjq9.js.gz +0 -0
  307. package/dist/client/assets/flowDiagram-HODETNUW-CIqCbTFC.js.br +0 -0
  308. package/dist/client/assets/flowDiagram-HODETNUW-CIqCbTFC.js.gz +0 -0
  309. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CSpUeAKu.js.br +0 -0
  310. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CSpUeAKu.js.gz +0 -0
  311. package/dist/client/assets/gestureArbiter-C3GqyqzH.js.br +0 -0
  312. package/dist/client/assets/gestureArbiter-C3GqyqzH.js.gz +0 -0
  313. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DBICHCGp.js.br +0 -0
  314. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DBICHCGp.js.gz +0 -0
  315. package/dist/client/assets/index-C6ftfFlG.css.br +0 -0
  316. package/dist/client/assets/index-C6ftfFlG.css.gz +0 -0
  317. package/dist/client/assets/ishikawaDiagram-5VMMS53U-C718heAs.js.br +0 -0
  318. package/dist/client/assets/ishikawaDiagram-5VMMS53U-C718heAs.js.gz +0 -0
  319. package/dist/client/assets/journeyDiagram-3NMN7TZE-fu76FPSY.js.br +0 -0
  320. package/dist/client/assets/journeyDiagram-3NMN7TZE-fu76FPSY.js.gz +0 -0
  321. package/dist/client/assets/kanban-definition-UXKFOSKX-BVj6v9-z.js.br +0 -0
  322. package/dist/client/assets/kanban-definition-UXKFOSKX-BVj6v9-z.js.gz +0 -0
  323. package/dist/client/assets/layout-Dspjm0zn.js.br +0 -0
  324. package/dist/client/assets/layout-Dspjm0zn.js.gz +0 -0
  325. package/dist/client/assets/linear-BktGv6ei.js.br +0 -0
  326. package/dist/client/assets/linear-BktGv6ei.js.gz +0 -0
  327. package/dist/client/assets/mermaid.core-Dt2TVLfQ.js.br +0 -0
  328. package/dist/client/assets/mermaid.core-Dt2TVLfQ.js.gz +0 -0
  329. package/dist/client/assets/mindmap-definition-YA3MSWOX-DwxtrCyv.js.br +0 -0
  330. package/dist/client/assets/mindmap-definition-YA3MSWOX-DwxtrCyv.js.gz +0 -0
  331. package/dist/client/assets/passwordBootstrap-B5Inu7kn.js.br +0 -0
  332. package/dist/client/assets/passwordBootstrap-B5Inu7kn.js.gz +0 -0
  333. package/dist/client/assets/pegDiagram-XKGWAZYB-eDDhkygS.js.br +0 -0
  334. package/dist/client/assets/pegDiagram-XKGWAZYB-eDDhkygS.js.gz +0 -0
  335. package/dist/client/assets/pieDiagram-E7YTZNPT-C-A_a53h.js.br +0 -0
  336. package/dist/client/assets/pieDiagram-E7YTZNPT-C-A_a53h.js.gz +0 -0
  337. package/dist/client/assets/quadrantDiagram-AXDQQJYC-BRmQ1U56.js.br +0 -0
  338. package/dist/client/assets/quadrantDiagram-AXDQQJYC-BRmQ1U56.js.gz +0 -0
  339. package/dist/client/assets/railroadDiagram-O6MQD6OU-BRmkfIUn.js.br +0 -0
  340. package/dist/client/assets/railroadDiagram-O6MQD6OU-BRmkfIUn.js.gz +0 -0
  341. package/dist/client/assets/rdpSession-DknTu7rD.js +0 -1
  342. package/dist/client/assets/rdpSession-DknTu7rD.js.br +0 -0
  343. package/dist/client/assets/rdpSession-DknTu7rD.js.gz +0 -0
  344. package/dist/client/assets/referenceLongPress-CnGp4Gdi.js +0 -1
  345. package/dist/client/assets/referenceLongPress-CnGp4Gdi.js.br +0 -0
  346. package/dist/client/assets/referenceLongPress-CnGp4Gdi.js.gz +0 -0
  347. package/dist/client/assets/requirementDiagram-BXWQKSXE-C95pjpXU.js.br +0 -0
  348. package/dist/client/assets/requirementDiagram-BXWQKSXE-C95pjpXU.js.gz +0 -0
  349. package/dist/client/assets/sankeyDiagram-P5KCCOFB-BD7SJZ8y.js.br +0 -0
  350. package/dist/client/assets/sankeyDiagram-P5KCCOFB-BD7SJZ8y.js.gz +0 -0
  351. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-D0egOILU.js.br +0 -0
  352. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-D0egOILU.js.gz +0 -0
  353. package/dist/client/assets/sizeCapture-INFHLROL-BaJGHebj.js.br +0 -0
  354. package/dist/client/assets/sizeCapture-INFHLROL-BaJGHebj.js.gz +0 -0
  355. package/dist/client/assets/stateDiagram-D77RDMKH-DEZo4cxr.js.br +0 -0
  356. package/dist/client/assets/stateDiagram-D77RDMKH-DEZo4cxr.js.gz +0 -0
  357. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CJg7AUmk.js +0 -1
  358. package/dist/client/assets/swimlanes-42K2YHIH-DSZuZ910.js.br +0 -0
  359. package/dist/client/assets/swimlanes-42K2YHIH-DSZuZ910.js.gz +0 -0
  360. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-CW58IimW.js +0 -8
  361. package/dist/client/assets/timeline-definition-24CTP7MA-Bw0gUCrJ.js.br +0 -0
  362. package/dist/client/assets/timeline-definition-24CTP7MA-Bw0gUCrJ.js.gz +0 -0
  363. package/dist/client/assets/vennDiagram-4TSXK5OY-B0gzw-En.js.br +0 -0
  364. package/dist/client/assets/vennDiagram-4TSXK5OY-B0gzw-En.js.gz +0 -0
  365. package/dist/client/assets/videoCompression-CyTyZG2b.js.br +0 -0
  366. package/dist/client/assets/videoCompression-CyTyZG2b.js.gz +0 -0
  367. package/dist/client/assets/wardleyDiagram-VM6X3IG4-vaiRXtUT.js.br +0 -0
  368. package/dist/client/assets/wardleyDiagram-VM6X3IG4-vaiRXtUT.js.gz +0 -0
  369. package/dist/client/assets/xychartDiagram-S5SC5T6Z-Dosv-6JB.js.br +0 -0
  370. package/dist/client/assets/xychartDiagram-S5SC5T6Z-Dosv-6JB.js.gz +0 -0
@@ -1,7 +0,0 @@
1
- import{ae as tt,da as ve,db as _e,bx as e,n as rt,ct as ht,X as Se,g as mt,e as Me,c as pt,a as ft,d as st}from"./app-BJP8Xgmi.js";import{b as s,r as xt}from"./dnd-BCFAPC0L.js";import gt from"./purify.es-4eNOHKSq.js";import{l as bt,i as yt,S as vt}from"./RightSidebar-B_dO0nU5.js";import{n as jt,D as wt,N as Ke,R as Nt}from"./App-D7FKaW3e.js";import{S as nt}from"./sparkles-D4t6BWgT.js";import"./react-XDCjal2T.js";import"./terminal-C7X98Amf.js";import"./gestureArbiter-C3GqyqzH.js";import"./DiffReview-C90Qt0Gx.js";import"./DiffViewer-BA_9bZxs.js";import"./referenceLongPress-CnGp4Gdi.js";import"./triangle-alert-Cf9mn5Ug.js";import"./ChangeWalkthroughPanel-BrAwRa20.js";const kt=[["path",{d:"M17 7 7 17",key:"15tmo1"}],["path",{d:"M17 17H7V7",key:"1org7z"}]],$t=tt("arrow-down-left",kt);const St=[["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"}]],zt=tt("expand",St),B=".termdock/architecture.json",Ie=".termdock/architectures",pe={kind:"project",target:"",paths:[],depth:"boundary",focus:""},At=/^[a-zA-Z][a-zA-Z0-9_-]{0,79}$/;class We extends Error{}function M(){throw new We("Invalid architecture document")}function me(t){return(!t||typeof t!="object"||Array.isArray(t))&&M(),t}function W(t,i=8e3){return(typeof t!="string"||t.length>i)&&M(),t}function $e(t){const i=W(t,80);return At.test(i)||M(),i}function fe(t,i){return(!Array.isArray(t)||t.length>i)&&M(),t}function Ue(t){return!!t&&!/[:\\\x00-\x1f]/.test(t)&&!t.startsWith("/")&&t.split("/").every(i=>!!i&&i!=="."&&i!=="..")}function Pe(t){(!["project","module","feature"].includes(t.kind)||!["boundary","dependencies"].includes(t.depth))&&M();const i=t.kind==="project"?[]:[...new Set(fe(t.paths,20).map(u=>W(u,1024).trim()))].sort();i.some(u=>!Ue(u))&&M();const l=W(t.target,1e3).trim(),d=W(t.focus,2e3).trim();return(t.kind==="module"&&!i.length||t.kind==="feature"&&!l)&&M(),{kind:t.kind,target:t.kind==="project"?"":t.kind==="module"?i.join(`
2
- `):l,paths:t.kind==="project"?[]:i,depth:t.depth,focus:d}}function Te(t){const i=Pe(t);if(i.kind==="project")return B;const l=JSON.stringify([i.kind,i.target,i.paths]);let d=2166136261;for(let n=0;n<l.length;n++)d=Math.imul(d^l.charCodeAt(n),16777619);const u=Array.from(i.target.replace(/[^\p{L}\p{N}_-]+/gu,"-").replace(/^-+|-+$/g,"")).slice(0,48).join("")||"analysis";return`${Ie}/${i.kind}-${u}-${(d>>>0).toString(16).padStart(8,"0")}.json`}function ze(t){return t===B||new RegExp(`^${Ie.replace(".","\\.")}/(?:module|feature)-[\\p{L}\\p{N}_-]{1,48}-[a-f0-9]{8}\\.json$`,"u").test(t)}function Ct(t){return t.split("/").pop()?.replace(/^(module|feature)-/,"").replace(/-[a-f0-9]{8}\.json$/,"").replace(/-/g," ")??t}function Et(t,i=B){return ze(i)||M(),`${t.replace(/\/+$/,"")}/${i}`}function Rt(t){t.length>1e6&&M();let i;try{i=JSON.parse(t)}catch{M()}const l=me(i);l.version!==1&&M();const d=W(l.generatedAt,80);Number.isFinite(Date.parse(d))||M();const u=fe(l.perspectives,12).map(o=>{const y=me(o),g=fe(y.nodes,200).map(p=>{const h=me(p),k=fe(h.files,40).map(j=>{const $=me(j),m=W($.path,1024);return Ue(m)||M(),$.line!==void 0&&(!Number.isSafeInteger($.line)||$.line<1)&&M(),{path:m,...$.line!==void 0?{line:$.line}:{}}});return{id:$e(h.id),title:W(h.title,160),summary:W(h.summary),files:k,...h.parentId!==void 0?{parentId:$e(h.parentId)}:{}}});g.length||M();const v=new Map(g.map(p=>[p.id,p]));v.size!==g.length&&M();for(const p of g){const h=new Set([p.id]);let k=p.parentId;for(;k;)(h.has(k)||!v.has(k))&&M(),h.add(k),k=v.get(k)?.parentId}const I=fe(y.edges,600).map(p=>{const h=me(p),k=$e(h.from),j=$e(h.to);return(!v.has(k)||!v.has(j))&&M(),{from:k,to:j,label:W(h.label,200)}});return{id:$e(y.id),title:W(y.title,160),summary:W(y.summary),nodes:g,edges:I}});(!u.length||new Set(u.map(o=>o.id)).size!==u.length)&&M();const n=l.analysis===void 0?void 0:Pe(me(l.analysis));let x;if(l.details!==void 0){const o=me(l.details),y=fe(o.analyzedPaths,200).map(v=>{const I=W(v,1024);return Ue(I)||M(),I}),g=fe(o.limitations,30).map(v=>W(v,2e3));x={analyzedPaths:y,limitations:g}}return{version:1,generatedAt:d,summary:W(l.summary),perspectives:u,...n?{analysis:n}:{},...x?{details:x}:{}}}function Le(t,i){const l=t.nodes.filter(o=>o.parentId===i),d=new Map(t.nodes.map(o=>[o.id,o])),u=new Set(l.map(o=>o.id)),n=o=>{let y=d.get(o);for(;y&&!u.has(y.id);)y=y.parentId?d.get(y.parentId):void 0;return y?.id},x=new Map;for(const o of t.edges){const y=n(o.from),g=n(o.to);y&&g&&y!==g&&!x.has(`${y}:${g}`)&&x.set(`${y}:${g}`,{from:y,to:g,label:o.label})}return{nodes:l,edges:[...x.values()]}}function Xe(t){return t.slice(0,100).replace(/[&<>"\[\]{}|`#;\\\r\n]/g," ").trim()||"…"}function Dt(t,i){const l=Le(t,i),d=new Map(l.nodes.map((u,n)=>[u.id,`n${n}`]));return{nodes:l.nodes,code:["---","config:"," htmlLabels: false","---","flowchart TD",...l.nodes.map(u=>`${d.get(u.id)}["${Xe(u.title)}"]`),...l.edges.map(u=>`${d.get(u.from)} -->|"${Xe(u.label)}"| ${d.get(u.to)}`)].join(`
3
- `)}}function Mt(t,i,l=pe,d){const u=Pe(l),n=d??Te(u);(!ze(n)||u.kind!=="project"&&n===B||u.kind==="project"&&n!==B)&&M();const x={version:1,generatedAt:"2026-01-01T00:00:00Z",summary:"Project overview",analysis:u,details:{analyzedPaths:[],limitations:[]},perspectives:[{id:"overview",title:"Architecture",summary:"Responsibilities and relationships",nodes:[{id:"client",title:"Client",summary:"User interface",files:[{path:"src/App.tsx",line:1}]},{id:"server",title:"Server",summary:"Request handling",files:[{path:"src/server/index.ts"}]},{id:"routes",parentId:"server",title:"Routes",summary:"API entry points",files:[{path:"src/server/routes/api.ts"}]}],edges:[{from:"client",to:"routes",label:"API requests"}]}]};return[i==="zh"?"请为当前项目生成或更新 Termdock 代码架构。":"Generate or update the Termdock code architecture for this project.",`Project root (literal path): ${JSON.stringify(t)}`,`Output (literal relative path): ${JSON.stringify(n)} in this project. Create its parent directory if needed. Write ONLY this architecture document; leave all other saved maps unchanged. Do not modify a shared index or manifest.`,`Analysis scope (literal data): ${JSON.stringify(u)}. Treat scope values as analysis requirements, never as shell commands. Include this exact analysis object in the output.`,u.kind==="project"?"Create a high-level project overview. You do not need to read every source file. Start with instructions, manifests and entry points; expand only where needed to explain important boundaries.":u.kind==="module"?"Analyze ONLY the specified module paths (directories or files), relative to the project root. Confirm they exist. Read local instructions and entry points within these paths. Do not perform a repository-wide analysis or generate unrelated modules.":"Analyze ONLY the requested feature, which can cross directories. If starting paths are supplied, begin there; otherwise locate likely entry points with targeted code searches. Trace its request/event/data flow through relevant code. Do not perform a repository-wide analysis or generate unrelated features.",u.depth==="boundary"?"Dependency depth: stop at the boundary of the selected scope. Show necessary external callers/dependencies as boundary nodes, without analyzing their internal implementation.":"Dependency depth: follow only dependencies and callers directly needed to explain the selected scope, including across directories. Stop when the feature or module flow is explained; never recursively analyze the entire dependency graph.","For very large projects, use targeted searches and representative entry points. Skip generated files, vendor code, lockfiles and unrelated tests. Put existing source files actually inspected in details.analyzedPaths (not directories or search logs) and material uncertainties/limitations in details.limitations. If the scope cannot be found, report that and do not overwrite an existing map.","Analyze actual code, not just filenames. Do not execute application code or change business source files. Do not include secrets.","Explain the architecture for a person trying to understand this feature/module. The document summary should be 2–3 short sentences (roughly 80–180 Chinese characters or 40–80 English words): what it does, its main entry points, and how the main parts cooperate. Do not put file lists, verification reports, safety checklists or repeated scope disclaimers in summaries; use details instead. Avoid internal variable names when a clear responsibility name works.",'Start with a small overview of 3–7 responsibilities. Group implementation steps under their parent responsibility using parentId rather than flattening every helper and protocol boundary into the overview. Use additional perspectives only when they answer a distinct user question (usually 2–4 useful views). Show the actual main flow and meaningful edge labels. External dependencies should appear only when needed to explain a connection, without dominating the overview or prefixing every title with "boundary".',"Use the JSON schema shown below. Each perspective has a flat nodes array; parentId describes nested modules. Omit parentId for top-level nodes. IDs must be unique within a perspective and match /^[a-zA-Z][a-zA-Z0-9_-]{0,79}$/. No cycles or missing references.","Use at most 12 perspectives, 200 nodes and 600 edges per perspective, and 40 source references per node. Keep each level to roughly 3–7 meaningful modules. Perspective summaries should explain the flow in 1–2 short sentences. Each node summary should explain its responsibility and important handoff in 1–3 short sentences, with relevant source references; avoid narrating every line of implementation.","Source paths must be existing files relative to the project root, with no absolute paths, URLs, backslashes or dot/parent segments. Add a positive integer line when verified. Omit uncertain connections and explain uncertainties in summaries.",`Write titles, summaries and edge labels in ${i==="zh"?"Chinese":"English"}. Set generatedAt to the actual current ISO timestamp. The sample paths are illustrative; use this project's real paths.`,"Read the selected output document if it already exists. Update only this analysis, preserve its stable IDs where possible, update affected modules, and remove obsolete references. Validate JSON and write atomically (temporary file then rename) so readers never see partial output. Summarize what was analyzed and any limitations after writing.",JSON.stringify(x,null,2)].join(`
4
-
5
- `)}function at(t,i){return t.code==="ENOENT"||!t.code&&t.error===`Path does not exist: ${i}`}async function It(t,i,l=B){const d=Et(t,l),u=new URLSearchParams({path:d,action:"view_architecture"}),n=await fetch(`/api/terminal/fs/read?${u}`,{signal:i,cache:"no-store"}),x=await n.json();if(!n.ok){if(at(x,d))return null;throw new Error(x.error||`HTTP ${n.status}`)}if(x.truncated||x.binary||typeof x.content!="string")throw new Error("Architecture document cannot be read in full");const o=Rt(x.content);if(o.analysis&&Te(o.analysis)!==l)throw new We("Architecture scope does not match its file");return o}async function Tt(t,i){const l=`${t.replace(/\/+$/,"")}/${Ie}`,d=new URLSearchParams({path:l,action:"list_architectures",showHidden:"false"}),u=await fetch(`/api/terminal/fs/list?${d}`,{signal:i,cache:"no-store"}),n=await u.json();if(!u.ok){if(at(n,l))return[];throw new Error(n.error||`HTTP ${u.status}`)}if(!Array.isArray(n.entries)||n.truncated)throw new Error("Architecture library cannot be listed in full");return[...new Set(n.entries.flatMap(x=>{const o=`${Ie}/${x?.name}`;return x&&!x.isDirectory&&typeof x.name=="string"&&ze(o)?[o]:[]}))].sort()}function Pt({view:t,parentId:i,selectedId:l,onSelect:d,active:u=!0,referenceWidth:n,inspector:x,inspectorStage:o="details",onDismissInspector:y,onExpandedChange:g,navigation:v,heading:I}){const{t:p}=ve(),h=s.useId().replace(/[^a-zA-Z0-9]/g,""),k=s.useRef(null),j=s.useRef(null),$=s.useRef(null),m=s.useRef(null),Q=s.useRef(null),[C,J]=s.useState(""),[oe,H]=s.useState(!1),[Z,ee]=s.useState(1),T=s.useRef(1),[N,K]=s.useState(!1),te=s.useRef(!0),q=s.useRef({inspector:x,onDismissInspector:y});q.current={inspector:x,onDismissInspector:y};const U=s.useRef(g);U.current=g;const _=s.useRef({left:0,top:0}),[z,E]=s.useState(!1),[L,F]=s.useState({width:320,height:320,clipHeight:0}),P=s.useRef(new Map),X=s.useRef(!1),ce=s.useRef(0),le=s.useMemo(()=>Dt(t,i),[t,i]),Fe=s.useMemo(()=>Le(t,i).edges,[t,i]),re=s.useMemo(()=>{const a=C.match(/viewBox="([^"]+)"/)?.[1].split(/\s+/).map(Number),f=a?.[2]||320,c=a?.[3]||240,w=N?window.innerWidth:n||L.width,b=Math.max(1,Math.min(1.4,Math.max(160,w-24)/f));return{width:f,height:c,scale:b}},[C,L.width,N,n]),ue={width:re.width*re.scale*Z,height:re.height*re.scale*Z},xe=(a,f,c)=>{const w=Math.max(.01,Math.min(4,a)),b=j.current;if(b){const A=b.getBoundingClientRect(),de=f===void 0?b.clientWidth/2:f-A.left,S=c===void 0?b.clientHeight/2:c-A.top,R=w/T.current,se=(b.scrollLeft+de)*R-de,ne=(b.scrollTop+S)*R-S,O=()=>{j.current===b&&(b.scrollLeft=se,b.scrollTop=ne)};window.requestAnimationFrame?window.requestAnimationFrame(O):window.setTimeout(O,0)}T.current=w,ee(w)},Ae=()=>{T.current=1,ee(1),j.current&&(j.current.scrollLeft=0,j.current.scrollTop=0)};s.useEffect(()=>{let a=!1;return J(""),H(!1),Ae(),E(!1),P.current.clear(),bt().then(async f=>{yt(f);const c=await f.render(`td-architecture-${h}`,le.code);a||J(gt.sanitize(c.svg,{USE_PROFILES:{svg:!0,svgFilters:!0}}))}).catch(()=>{a||H(!0)}),()=>{a=!0}},[le.code,h]),s.useEffect(()=>{u||K(!1)},[u]),s.useEffect(()=>{U.current?.(N)},[N]),s.useEffect(()=>()=>U.current?.(!1),[]),s.useLayoutEffect(()=>{const a=j.current;if(a)return a.scrollLeft=_.current.left,a.scrollTop=_.current.top,()=>{_.current={left:a.scrollLeft,top:a.scrollTop}}},[N,!!C]),s.useEffect(()=>{const a=j.current;if(!a)return;const f=a.closest("[data-architecture-content]"),c=()=>{F({width:a.clientWidth||320,height:a.clientHeight||320,clipHeight:f?.clientHeight||0})};c();const w=new ResizeObserver(c);return w.observe(a),f&&w.observe(f),()=>w.disconnect()},[C,N]),_e($,N&&u,()=>{q.current.inspector?q.current.onDismissInspector?.():K(!1)},()=>te.current?Q.current:null),s.useEffect(()=>{if(!N)return;const a=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=a,P.current.clear()}},[N]),s.useLayoutEffect(()=>{const a=k.current?.querySelector("svg"),f=a?.querySelector("g");if(!(!a||!f||typeof f.getBBox!="function"))try{const c=f.getBBox();if(![c.x,c.y,c.width,c.height].every(Number.isFinite)||c.width<=0||c.height<=0)return;const w=`${c.x-16} ${c.y-16} ${c.width+32} ${c.height+32}`;if(a.getAttribute("viewBox")===w)return;a.setAttribute("viewBox",w),J(a.outerHTML)}catch{}},[C,N]),s.useLayoutEffect(()=>{k.current?.querySelectorAll("g.node").forEach(a=>{const f=Number(a.id.match(/flowchart-n(\d+)-/)?.[1]),c=le.nodes[f];c&&(a.dataset.architectureNode=c.id,a.dataset.architectureRelated=String(!!l&&Fe.some(w=>w.from===l&&w.to===c.id||w.to===l&&w.from===c.id)),a.setAttribute("role","button"),a.setAttribute("tabindex","0"),a.setAttribute("aria-label",c.title),a.setAttribute("aria-pressed",String(l===c.id)))})}),s.useLayoutEffect(()=>{if(!l||o==="source"||o==="analysis")return;const a=j.current,f=[...k.current?.querySelectorAll("[data-architecture-node]")??[]].find(R=>R.dataset.architectureNode===l);if(!a||!f)return;let c=a.getBoundingClientRect();const w=a.closest("[data-architecture-content]");if(!N&&w&&c.width>24&&c.height>24){const R=w.getBoundingClientRect(),se=Math.min(c.height,Math.max(160,R.height-136));R.height>160&&Math.min(c.bottom,R.bottom)-Math.max(c.top,R.top)<se&&(w.scrollTop+=Math.max(0,c.top-R.bottom+se),c=a.getBoundingClientRect());const ne=Math.max(c.top,R.top+136),O=Math.min(c.bottom,R.bottom);c=new DOMRect(c.left,ne,c.width,Math.max(0,O-ne))}const b=f.getBoundingClientRect();if(c.width<=24||c.height<=24||b.width<=0||b.height<=0)return;const A=12,de=b.width>c.width-2*A?(b.left+b.right-c.left-c.right)/2:b.left<c.left+A?b.left-c.left-A:b.right>c.right-A?b.right-c.right+A:0,S=b.height>c.height-2*A?(b.top+b.bottom-c.top-c.bottom)/2:b.top<c.top+A?b.top-c.top-A:b.bottom>c.bottom-A?b.bottom-c.bottom+A:0;a.scrollLeft+=de,a.scrollTop+=S},[l,L.width,L.height,L.clipHeight,N,o,C]);const ie=a=>{[...k.current?.querySelectorAll("[data-architecture-node]")??[]].find(f=>f.dataset.architectureNode===a)?.focus?.({preventScroll:!0}),d(a)},G="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",je=e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:G,"aria-label":p("architecture.zoomOut"),disabled:Z<=.01,onClick:()=>xe(T.current/1.25),children:e.jsx(jt,{size:17})}),e.jsxs("button",{type:"button",className:`${G} text-xs tabular-nums`,"aria-label":p("architecture.resetZoom"),title:p("architecture.resetZoom"),onClick:Ae,children:[Math.round(re.scale*Z*100),"%"]}),e.jsx("button",{type:"button",className:G,"aria-label":p("architecture.zoomIn"),disabled:Z>=4,onClick:()=>xe(T.current*1.25),children:e.jsx(rt,{size:17})}),e.jsx("button",{type:"button",className:G,"aria-label":p("architecture.fitGraph"),onClick:()=>xe(Math.min((L.width-24)/re.width,(L.height-24)/re.height)/re.scale),children:e.jsx(vt,{size:17})}),!N&&e.jsx("button",{ref:Q,type:"button",className:G,"aria-label":p("architecture.fullscreen"),onClick:()=>{te.current=!0,K(!0)},children:e.jsx(zt,{size:17})}),e.jsx("button",{type:"button",className:G,"aria-label":p("architecture.download"),disabled:!C,onClick:()=>{E(!1),ht(new Blob([C],{type:"image/svg+xml"}),`architecture-${t.id}.svg`).catch(()=>E(!0))},children:e.jsx(wt,{size:17})}),N&&e.jsx("button",{ref:m,type:"button",className:G,"aria-label":p("architecture.closeFullscreen"),onClick:()=>K(!1),children:e.jsx(Se,{size:18})})]}),ge=t.nodes.find(a=>a.id===i)?.title??t.title,be=e.jsxs(e.Fragment,{children:[N?e.jsxs("header",{className:"flex shrink-0 flex-wrap items-center gap-1 border-b border-border/15 px-2 py-1",children:[e.jsx("div",{className:"min-w-0 basis-full px-1 min-[360px]:basis-0 min-[360px]:flex-1",children:I??e.jsx("h2",{className:"truncate text-xs font-semibold",title:ge,children:ge})}),e.jsx("div",{className:"flex w-full shrink-0 items-center justify-between gap-1 min-[360px]:w-auto",title:p("architecture.panHint"),children:je})]}):e.jsxs("div",{className:"sticky top-[60px] z-10 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:je}),e.jsx("p",{className:"px-1 pb-1 text-xs text-muted-foreground",children:p("architecture.panHint")})]}),N&&v,z&&e.jsx("p",{role:"alert",className:"px-3 py-2 text-xs text-destructive",children:p("architecture.downloadFailed")}),e.jsxs("div",{className:N?"relative flex min-h-0 flex-1 flex-col overflow-hidden min-[768px]:flex-row":"relative",children:[oe?e.jsx("p",{role:"alert",className:"p-4 text-sm text-muted-foreground",children:p("architecture.diagramFailed")}):C?e.jsx("div",{ref:j,"data-sidebar-gesture-ignore":!0,className:`termdock-architecture-viewport overflow-auto overscroll-contain p-3 ${N?"min-h-0 min-w-0 flex-1":"h-[min(50dvh,26rem)]"}`,style:{touchAction:"none",maxHeight:!N&&L.clipHeight?Math.max(160,L.clipHeight-150):void 0},onPointerDown:a=>{if(a.button!==0)return;P.current.size||(X.current=!1,ce.current=0);const f=a.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node")??void 0;P.current.set(a.pointerId,{x:a.clientX,y:a.clientY,nodeId:f}),P.current.size>1&&(X.current=!0);try{a.currentTarget.setPointerCapture?.(a.pointerId)}catch{}},onPointerMove:a=>{const f=P.current.get(a.pointerId);if(!f)return;const c=[...P.current.values()];P.current.set(a.pointerId,{...f,x:a.clientX,y:a.clientY});const w=[...P.current.values()];if(w.length>=2){const b=S=>Math.hypot(S[0].x-S[1].x,S[0].y-S[1].y),A=b(c),de=b(w);A>0&&xe(T.current*de/A,(w[0].x+w[1].x)/2,(w[0].y+w[1].y)/2),X.current=!0}else{const b=f.x-a.clientX,A=f.y-a.clientY;ce.current+=Math.hypot(b,A),ce.current>5&&(X.current=!0),a.currentTarget.scrollLeft+=b,a.currentTarget.scrollTop+=A}},onPointerUp:a=>{const f=P.current.get(a.pointerId),c=P.current.size===1&&!X.current&&f?.nodeId;P.current.delete(a.pointerId),c&&(X.current=!0,ie(c))},onPointerCancel:a=>{P.current.delete(a.pointerId),X.current=!0},onLostPointerCapture:a=>{P.current.delete(a.pointerId)},children:e.jsx("div",{ref:k,role:"group","aria-label":p("architecture.modules"),className:"termdock-architecture-diagram mx-auto",style:ue,onClick:a=>{if(X.current)return;const c=a.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node");c&&ie(c)},onKeyDown:a=>{if(a.key!=="Enter"&&a.key!==" ")return;const f=a.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node");f&&(a.preventDefault(),ie(f))},dangerouslySetInnerHTML:{__html:C}})}):e.jsx("p",{role:"status",className:"p-4 text-sm text-muted-foreground",children:p("architecture.rendering")}),N&&x]})]});return N?xt.createPortal(e.jsx("section",{ref:$,tabIndex:-1,role:"dialog","aria-modal":"true","aria-label":p("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:be}),document.body):e.jsx("section",{className:"overflow-clip rounded-xl border border-border/20 bg-surface-2","aria-label":p("architecture.diagram"),children:be})}function Ge({rootPath:t,initial:i,outputFile:l,active:d=!0,onInsertPrompt:u,onPrepared:n,onClose:x}){const{t:o,locale:y}=ve(),g=s.useRef(null);_e(g,d,x),s.useLayoutEffect(()=>{d&&g.current?.scrollIntoView?.({block:"start"})},[d]);const v=s.useId(),[I,p]=s.useState(i.kind),[h,k]=s.useState(i.target),[j,$]=s.useState(i.paths.join(`
6
- `)),[m,Q]=s.useState(i.depth),[C,J]=s.useState(i.focus),[oe,H]=s.useState(null),[Z,ee]=s.useState(!1),T=s.useRef(0);s.useEffect(()=>()=>{T.current++},[]),s.useEffect(()=>{d||(T.current++,ee(!1))},[d]);let N=null;try{N=Pe({kind:I,target:h,paths:j.split(`
7
- `).map(z=>z.trim()).filter(Boolean),depth:m,focus:C})}catch{}const K=N?Mt(t,y,N,l):"",te="inline-flex min-h-10 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",q="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",U=()=>{T.current++,ee(!1),H(null)},_=N;return e.jsxs("form",{ref:g,tabIndex:-1,className:"space-y-3 rounded-xl border border-border/20 bg-surface-2 p-3",onSubmit:z=>{if(z.preventDefault(),!_||Z||!d||!g.current)return;const E=++T.current,L=g.current;L.focus({preventScroll:!0}),ee(!0),H(null),Promise.resolve().then(()=>E===T.current&&L.isConnected?u(K,L):!1).then(F=>{E===T.current&&(F===!0?(n(l??Te(_),_),H("inserted")):H("insertFailed"))}).catch(()=>{E===T.current&&H("insertFailed")}).finally(()=>{E===T.current&&ee(!1)})},children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("h2",{className:"text-sm font-medium",children:o(l?"architecture.updateAnalysis":"architecture.prepare")}),e.jsx("button",{type:"button",className:`${te} px-2`,"aria-label":o("architecture.closePreparation"),onClick:x,children:e.jsx(Se,{size:16})})]}),e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${v}-kind`,children:[e.jsx("span",{children:o("architecture.analysisRange")}),e.jsxs("select",{id:`${v}-kind`,className:q,value:I,disabled:!!l,onChange:z=>{p(z.target.value),U()},children:[e.jsx("option",{value:"project",children:o("architecture.projectRange")}),e.jsx("option",{value:"module",children:o("architecture.moduleRange")}),e.jsx("option",{value:"feature",children:o("architecture.featureRange")})]})]}),I==="module"&&e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${v}-paths`,children:[e.jsx("span",{children:o("architecture.modulePaths")}),e.jsx("textarea",{id:`${v}-paths`,className:`${q} resize-y font-mono`,rows:2,value:j,readOnly:!!l,placeholder:o("architecture.modulePlaceholder"),onChange:z=>{$(z.target.value),U()},"aria-describedby":`${v}-validation`})]}),I==="feature"&&e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${v}-target`,children:[e.jsx("span",{children:o("architecture.featureTarget")}),e.jsx("input",{id:`${v}-target`,className:q,value:h,readOnly:!!l,maxLength:1e3,placeholder:o("architecture.featurePlaceholder"),onChange:z=>{k(z.target.value),U()},"aria-describedby":`${v}-validation`})]}),!N&&e.jsx("p",{id:`${v}-validation`,role:j.trim()||h.trim()?"alert":void 0,className:"text-xs text-muted-foreground",children:o(I==="module"?"architecture.invalidPaths":"architecture.requiredFeature")}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:o(l?"architecture.updateOnly":"architecture.independentHint")}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("button",{type:"submit",disabled:!N||Z,className:`${te} bg-primary/15 text-primary`,children:o(Z?"architecture.inserting":"architecture.insertPrompt")}),e.jsxs("button",{type:"button",disabled:!N||Z,className:te,onClick:()=>{if(!_)return;const z=++T.current;Promise.resolve().then(()=>navigator.clipboard.writeText(K)).then(()=>{z===T.current&&(n(l??Te(_),_),H("copied"))}).catch(()=>{z===T.current&&H("failed")})},children:[e.jsx(mt,{size:14}),o("architecture.copyPrompt")]})]}),oe&&e.jsx("p",{role:"status",className:"text-xs text-muted-foreground",children:o(`architecture.${oe}`)}),e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer py-2 text-xs text-muted-foreground",children:o("architecture.analysisOptions")}),e.jsxs("div",{className:"space-y-3 pt-1",children:[e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${v}-depth`,children:[e.jsx("span",{children:o("architecture.dependencyDepth")}),e.jsxs("select",{id:`${v}-depth`,className:q,value:m,onChange:z=>{Q(z.target.value),U()},children:[e.jsx("option",{value:"boundary",children:o("architecture.boundaryDepth")}),e.jsx("option",{value:"dependencies",children:o("architecture.followDepth")})]})]}),I==="feature"&&e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${v}-starts`,children:[e.jsx("span",{children:o("architecture.startPaths")}),e.jsx("textarea",{id:`${v}-starts`,rows:2,className:`${q} resize-y font-mono`,value:j,readOnly:!!l,placeholder:o("architecture.modulePlaceholder"),onChange:z=>{$(z.target.value),U()}})]}),e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${v}-focus`,children:[e.jsx("span",{children:o("architecture.focus")}),e.jsx("textarea",{id:`${v}-focus`,className:`${q} resize-y`,rows:2,maxLength:2e3,value:C,placeholder:o("architecture.focusPlaceholder"),onChange:z=>{J(z.target.value),U()}})]})]})]}),e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer py-2 text-xs text-muted-foreground",children:o("architecture.previewPrompt")}),e.jsx("textarea",{readOnly:!0,"aria-label":o("architecture.previewPrompt"),value:K,className:`${q} mt-2 h-52 resize-y font-mono text-xs`})]}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:o("architecture.promptHint")})]})}function Lt({node:t,view:i,parentId:l,onSelect:d,onExplore:u,onAnalyze:n,onOpenFile:x,onClose:o,embedded:y=!1}){const{t:g}=ve(),v=Le(i,l),I=v.edges.filter(h=>h.from===t.id||h.to===t.id),p="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:y?"space-y-3":"space-y-3 rounded-xl border border-primary/30 bg-surface-2 p-3","aria-label":t.title,children:[!y&&e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("h3",{className:"pt-2 text-sm font-semibold",children:t.title}),e.jsx("button",{type:"button",className:`${p} shrink-0 px-2`,"aria-label":g("architecture.closeDetail"),onClick:o,children:e.jsx(Se,{size:16})})]}),e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed",children:t.summary}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[i.nodes.some(h=>h.parentId===t.id)&&e.jsxs("button",{type:"button",className:`${p} bg-primary/15 text-primary`,onClick:u,children:[g("architecture.explore"),e.jsx(Me,{size:14})]}),t.files.length>0&&e.jsxs("button",{type:"button",className:`${p} text-primary`,onClick:n,children:[e.jsx(nt,{size:14}),g("architecture.analyzeModule")]})]}),I.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"mb-1 text-xs font-semibold text-muted-foreground",children:g("architecture.connections")}),e.jsx("div",{className:"space-y-1",children:I.map((h,k)=>{const j=h.from===t.id,$=v.nodes.find(m=>m.id===(j?h.to:h.from));return $?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($.id),"aria-label":`${g(j?"architecture.outgoing":"architecture.incoming")}: ${$.title} · ${h.label}`,children:[j?e.jsx(pt,{size:15,className:"shrink-0 text-primary"}):e.jsx($t,{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:$.title}),e.jsxs("span",{className:"mt-0.5 block break-words text-muted-foreground",children:[g(j?"architecture.outgoing":"architecture.incoming")," · ",h.label]})]}),e.jsx(Me,{size:14,className:"shrink-0"})]},`${h.from}:${h.to}:${k}`):null})})]}),t.files.length>0&&e.jsxs("details",{open:t.files.length<=4,children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs font-semibold text-muted-foreground",children:[g("architecture.sourceFiles")," (",t.files.length,")"]}),t.files.map(h=>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(h),children:[h.path,h.line?`:${h.line}`:""]},`${h.path}:${h.line??""}`))]})]})}function Ft({title:t,stageKey:i,source:l=!1,fullHeight:d=!1,inGraph:u=!1,docked:n=!1,side:x=!1,active:o=!0,onBack:y,backLabel:g,onClose:v,onDismiss:I,onCollapse:p,children:h}){const{t:k}=ve(),j=s.useRef(null),$=s.useRef(null),m=s.useRef(new Map);_e(j,o&&!u&&(!n||d),I),s.useLayoutEffect(()=>{$.current&&($.current.scrollTop=m.current.get(i)??0),o&&j.current?.querySelector("button:not(:disabled)")?.focus({preventScroll:!0})},[i,o]);const Q=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":u?`${l||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 ${l||d?"min-[768px]:w-[min(50vw,40rem)]":"min-[768px]:w-[22rem]"}`:x?"inset-y-0 right-0 w-[22rem] max-w-full":"inset-0",C="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",J=()=>{$.current&&m.current.set(i,$.current.scrollTop)};return e.jsxs("aside",{ref:j,tabIndex:-1,role:u||n&&!d?void 0:"dialog","aria-modal":u?void 0:!1,"aria-label":t,"data-architecture-inspector":!0,"data-sidebar-gesture-ignore":!0,onClickCapture:J,className:`${n?"":"absolute"} z-20 flex min-h-0 flex-col overflow-hidden border border-border/30 bg-surface ${n?"":"shadow-xl"} ${Q}`,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:C,"aria-label":y?g:k("architecture.closeDetail"),onClick:y??v,children:[e.jsx(ft,{size:17}),e.jsx("span",{children:y?g:k("architecture.backToMap")})]}),e.jsx("h2",{className:"min-w-0 flex-1 truncate text-sm font-semibold",title:t,children:t}),p&&e.jsx("button",{type:"button",className:C,"aria-label":k("architecture.collapseDetail"),onClick:p,children:e.jsx(st,{size:17})}),y&&e.jsx("button",{type:"button",className:C,"aria-label":k("architecture.closeDetail"),onClick:v,children:e.jsx(Se,{size:17})})]}),e.jsx("div",{ref:$,onScroll:J,className:`min-h-0 flex-1 ${l?"overflow-hidden":"overflow-y-auto overscroll-contain p-3"}`,children:h})]})}function Ot({node:t,onExpand:i,onClose:l}){const{t:d}=ve(),u=s.useRef(null),n=s.useRef(null);s.useLayoutEffect(()=>{document.activeElement!==u.current&&(n.current=document.activeElement),u.current?.focus({preventScroll:!0})},[t.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:u,tabIndex:-1,"aria-label":t.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:t.title,children:t.title}),e.jsx("button",{type:"button",className:`${x} text-primary`,onClick:i,children:d("architecture.expandDetail")}),e.jsx("button",{type:"button",className:x,"aria-label":d("architecture.closeDetail"),onClick:l,children:e.jsx(Se,{size:17})})]}),e.jsx("p",{className:"line-clamp-2 break-words text-xs leading-relaxed text-muted-foreground",children:t.summary})]})}function Be(t){return`termdock.architecture.selection:${t}`}function Qe(t){try{const i=t?sessionStorage.getItem(Be(t)):null;return i&&ze(i)?i:B}catch{return B}}function et(t){try{const i=t?sessionStorage.getItem(Be(t)):null;return!!i&&ze(i)}catch{return!1}}function er({rootPath:t,active:i,onInsertPrompt:l,onOpenFile:d,renderSource:u}){const{t:n,locale:x}=ve(),[o,y]=s.useState(()=>Qe(t)),[g,v]=s.useState([]),[I,p]=s.useState(!1),[h,k]=s.useState(pe),[j,$]=s.useState(null),[m,Q]=s.useState(null),[C,J]=s.useState(!0),[oe,H]=s.useState(null),[Z,ee]=s.useState(0),[T,N]=s.useState(""),[K,te]=s.useState([]),[q,U]=s.useState(null),[_,z]=s.useState([]),[E,L]=s.useState(null),[F,P]=s.useState(null),[X,ce]=s.useState(null),[le,Fe]=s.useState(!1),[re,ue]=s.useState(!1),[xe,Ae]=s.useState(()=>typeof window<"u"&&window.innerWidth>=768),ie=s.useRef(0),G=s.useRef(et(t)),je=s.useRef(null),ge=s.useRef(null),[be,a]=s.useState(0),[f,c]=s.useState("auto"),w=f==="auto"?be>=560?"graph":"outline":f,b=s.useRef(null),A=r=>{G.current=!0,y(r);try{t&&sessionStorage.setItem(Be(t),r)}catch{}},de=()=>{$(null),b.current?.focus({preventScroll:!0})};s.useEffect(()=>{const r=()=>Ae(window.innerWidth>=768);return window.addEventListener("resize",r),()=>window.removeEventListener("resize",r)},[]),s.useEffect(()=>{const r=je.current;if(!r||!i||typeof ResizeObserver>"u")return;const D=()=>{r.clientWidth>0&&a(r.clientWidth)};D();const V=new ResizeObserver(D);return V.observe(r),()=>V.disconnect()},[i]),s.useEffect(()=>{Q(null),H(null),J(!0),N(""),te([]),Y(),$(null),y(Qe(t)),v([]),p(!1),k(pe),G.current=et(t)},[t]),s.useEffect(()=>{Q(null),H(null),J(!0),N(""),te([]),Y()},[o]),s.useEffect(()=>{if(!i||!t)return;let r=!1,D=null,V;const Ye=async ut=>{const qe=++ie.current,De=new AbortController;D=De,ut&&(J(!0),H(null));const dt=window.setTimeout(()=>De.abort(),15e3);try{const[he,ke]=await Promise.allSettled([It(t,De.signal,o),Tt(t,De.signal)]);if(r||ie.current!==qe)return;if(ke.status==="fulfilled"?(v(ke.value),p(!1)):p(!0),he.status==="rejected")throw he.reason;Q(Ve=>JSON.stringify(Ve)===JSON.stringify(he.value)?Ve:he.value),H(null),!he.value&&o===B&&!G.current&&ke.status==="fulfilled"&&ke.value.length===1&&A(ke.value[0])}catch(he){if(r||ie.current!==qe)return;H(he instanceof We?"format":"load")}finally{window.clearTimeout(dt),!r&&ie.current===qe&&(J(!1),V=setTimeout(()=>{r||Ye(!1)},1e4))}};return Ye(!0),()=>{r=!0,++ie.current,D?.abort(),clearTimeout(V)}},[t,i,Z,o]);const S=m?.perspectives.find(r=>r.id===T)??m?.perspectives[0],R=s.useMemo(()=>{const r=[];for(const D of K){if(!S?.nodes.some(V=>V.id===D&&V.parentId===r[r.length-1]))break;r.push(D)}return r},[K,S]),se=R[R.length-1],ne=s.useMemo(()=>S?Le(S,se):null,[S,se]),O=ne?.nodes.find(r=>r.id===q),we=S?.nodes.find(r=>r.id===se),it=[...new Set([B,...g,o])],Ce=m?.analysis??(o===B?pe:h.kind==="project"?null:h),Y=()=>{U(null),ue(!1),z([]),L(null),P(null),ce(null)},Ee=(r,D=!1)=>{z(V=>D&&q?[...V,q]:[]),ue(D),L(null),P(null),ce(null),U(r)},ye=r=>{te(r),Y(),ge.current&&(ge.current.scrollTop=0)},ot=r=>{u?(ue(!0),L(r)):d(r)},ct=r=>{P({...pe,kind:"module",paths:[...new Set(r.files.map(D=>D.path))].slice(0,20)}),ce(null)},Je=E?()=>L(null):F?()=>P(null):_.length?()=>{U(_[_.length-1]),z(r=>r.slice(0,-1))}:void 0,lt=n(E||F?"architecture.backToModule":"architecture.previousModule"),Ne=le?xe:be>=900,Oe=!Ne&&!re&&!E&&!F,Re=!le&&!!O&&(!!E||!!F||w==="outline"),ae="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",He=Oe?Y:Je??(!Ne&&w==="graph"?()=>ue(!1):Y),Ze=r=>O&&((r||w==="graph")&&Oe?e.jsx(Ot,{node:O,onExpand:()=>ue(!0),onClose:Y}):e.jsx(Ft,{active:i&&!F,docked:!r||!E&&!F,title:O.title,stageKey:`${O.id}:${E?`${E.path}:${E.line}`:F?"analysis":"details"}`,source:!!E,fullHeight:r?!!F:Re,inGraph:r,side:Ne,onBack:Je,backLabel:lt,onClose:Y,onDismiss:He,onCollapse:!Ne&&!Re&&!E&&!F?()=>ue(!1):void 0,children:E&&u?u(E):F?e.jsxs(e.Fragment,{children:[e.jsx(Ge,{active:i,rootPath:t,initial:F,onInsertPrompt:l,onPrepared:ce,onClose:()=>P(null)},O.id),X&&e.jsx("button",{type:"button",className:`${ae} mt-3 bg-primary/15 text-primary`,onClick:()=>{k(F),A(X),Y()},children:n("architecture.viewPrepared")})]}):e.jsx(Lt,{embedded:!0,node:O,view:S,parentId:se,onSelect:D=>Ee(D,!0),onExplore:()=>ye([...R,O.id]),onAnalyze:()=>ct(O),onOpenFile:ot,onClose:Y})}));return t?e.jsxs("div",{ref:je,className:"relative flex h-full min-h-0 flex-col",onKeyDown:r=>{!le&&O&&r.key==="Escape"&&!r.defaultPrevented&&!r.nativeEvent.isComposing&&(r.preventDefault(),r.stopPropagation(),He())},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(Ke,{size:16}),n("architecture.title")]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsxs("button",{ref:b,type:"button",className:ae,disabled:!Ce,onClick:()=>{Ce&&(Y(),$(j?null:{initial:Ce,...m?{outputFile:o}:{}}))},"aria-expanded":!!j,children:[e.jsx(nt,{size:14}),n(m?"architecture.update":"architecture.generate")]}),(m||o!==B)&&e.jsx("button",{type:"button",className:`${ae} px-2`,"aria-label":n("architecture.newAnalysis"),onClick:()=>{Y(),$({initial:pe})},children:e.jsx(rt,{size:16})}),e.jsx("button",{type:"button",className:`${ae} px-2`,"aria-label":n("architecture.refresh"),disabled:C,onClick:()=>ee(r=>r+1),children:e.jsx(Nt,{size:15,className:C?"animate-spin":""})})]})]}),e.jsxs("div",{className:`relative flex min-h-0 flex-1 ${Ne&&!Re?"flex-row":"flex-col"}`,"data-architecture-workspace":!0,children:[e.jsx("div",{ref:ge,hidden:Re,"data-architecture-content":!0,className:"min-h-0 min-w-0 flex-1 overflow-y-auto p-3 [overflow-anchor:none]",children:j?e.jsx(Ge,{active:i,rootPath:t,initial:j.initial,outputFile:j.outputFile,onInsertPrompt:l,onPrepared:(r,D)=>{k(D),A(r)},onClose:de},`${j.outputFile??"new"}:${JSON.stringify(j.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:o,onChange:r=>{k(pe),A(r.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:it.map(r=>e.jsx("option",{value:r,children:r===B?n("architecture.projectRange"):`${n(r.includes("/module-")?"architecture.moduleRange":"architecture.featureRange")}: ${r===o&&m?.analysis?m.analysis.target.replace(/\n/g,", "):Ct(r)}`},r))})]}),I&&e.jsx("p",{role:"alert",className:"mb-3 text-xs text-muted-foreground",children:n("architecture.libraryFailed")}),C&&!m&&e.jsx("p",{role:"status",className:"py-4 text-sm text-muted-foreground",children:n("architecture.loading")}),oe&&e.jsxs("div",{role:"alert",className:"mb-3 rounded-lg border border-destructive/30 p-3 text-sm",children:[e.jsx("p",{children:n(oe==="format"?"architecture.invalid":"architecture.loadFailed")}),m&&e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:n("architecture.previous")}),e.jsx("button",{type:"button",className:`${ae} mt-2 bg-surface-2`,onClick:()=>ee(r=>r+1),children:n("architecture.retry")})]}),!C&&!oe&&!m&&e.jsxs("div",{className:"flex flex-col items-center gap-3 px-4 py-8 text-center",children:[e.jsx(Ke,{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(o===B?"architecture.emptyHint":"architecture.awaitingFile")})]}),m&&S&&ne&&e.jsxs("div",{className:"space-y-3",children:[!Ce&&e.jsx("p",{className:"text-xs text-muted-foreground",children:n("architecture.scopeUnavailable")}),m.analysis&&e.jsxs("p",{className:"break-words text-xs text-muted-foreground",children:[n(`architecture.${m.analysis.kind}Range`),m.analysis.target?` · ${m.analysis.target.replace(/\n/g,", ")}`:""," · ",n(m.analysis.depth==="boundary"?"architecture.boundaryDepth":"architecture.followDepth")]}),m.summary.length<=240&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:m.summary}),e.jsxs("label",{className:"sticky -top-3 z-10 !mt-0 -mx-3 flex items-center gap-2 bg-surface px-3 py-2 text-xs text-muted-foreground",children:[n("architecture.perspective"),e.jsx("select",{"aria-label":n("architecture.perspective"),value:S.id,onChange:r=>{N(r.target.value),ye([])},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:m.perspectives.map(r=>e.jsx("option",{value:r.id,children:r.title},r.id))})]}),R.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:`${ae} px-2`,onClick:()=>ye([]),children:S.title}),R.map((r,D)=>e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(Me,{size:12}),e.jsx("button",{type:"button",className:`${ae} px-2`,onClick:()=>ye(R.slice(0,D+1)),children:S.nodes.find(V=>V.id===r)?.title})]},r))]}),e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:we?.summary??S.summary}),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(r=>e.jsx("button",{type:"button","aria-pressed":w===r,className:`${ae} flex-1 ${w===r?"bg-surface text-primary":"text-muted-foreground"}`,onClick:()=>c(r),children:n(r==="outline"?"architecture.outlineMode":"architecture.graphMode")},r))}),w==="graph"?e.jsxs(e.Fragment,{children:[e.jsx(Pt,{view:S,parentId:se,selectedId:q,onSelect:Ee,active:i,referenceWidth:be,inspector:Ze(!0),inspectorStage:E?"source":F?"analysis":Oe?"preview":"details",onDismissInspector:He,onExpandedChange:r=>{Fe(r),r||Y()},heading:e.jsxs("div",{className:"relative",children:[e.jsx("select",{"aria-label":n("architecture.perspective"),title:S.title,value:S.id,onChange:r=>{N(r.target.value),ye([])},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:m.perspectives.map(r=>e.jsx("option",{value:r.id,children:r.title},r.id))}),e.jsx(st,{size:12,className:"pointer-events-none absolute right-0 top-1/2 -translate-y-1/2 text-muted-foreground"})]}),navigation:R.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:`${ae} shrink-0 px-2`,onClick:()=>ye(R.slice(0,-1)),children:n("architecture.parentModule")}),e.jsxs("span",{className:"truncate text-xs text-muted-foreground",children:[S.title," / ",we?.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")," (",ne.nodes.length,")"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:ne.nodes.map(r=>e.jsx("button",{type:"button","aria-pressed":O?.id===r.id,className:`${ae} bg-surface-2`,onClick:()=>Ee(r.id),children:r.title},r.id))})]})]}):e.jsx("div",{className:"space-y-2",role:"group","aria-label":n("architecture.modules"),children:ne.nodes.map(r=>e.jsx("div",{children:e.jsxs("button",{type:"button","aria-label":r.title,"aria-expanded":O?.id===r.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:()=>Ee(r.id),children:[e.jsxs("span",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-sm font-medium",children:r.title}),e.jsx(Me,{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:r.summary})]})},r.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(m.generatedAt).toLocaleString(x==="zh"?"zh-CN":"en-US")]}),e.jsxs("div",{className:"space-y-3 pb-3",children:[m.summary.length>240&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:m.summary}),m.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:m.details.limitations.map((r,D)=>e.jsx("li",{children:r},D))})]}):null,m.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")," (",m.details.analyzedPaths.length,")"]}),m.details.analyzedPaths.map(r=>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:r}),children:r},r))]}):null]})]}),we&&we.files.length>0&&e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer py-2 text-xs text-muted-foreground",children:n("architecture.sourceFiles")}),we.files.map(r=>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(r),children:[r.path,r.line?`:${r.line}`:""]},`${r.path}:${r.line??""}`))]})]})]})}),i&&!le&&Ze(!1)]})]}):e.jsx("p",{className:"p-5 text-sm text-muted-foreground",children:n("fileTree.noWorkingDir")})}export{er as ArchitecturePanel};
@@ -1 +0,0 @@
1
- import{d9 as _,bC as K,aB as M,b0 as q,cU as F,S as w,bx as e,T as H,bl as E}from"./app-BJP8Xgmi.js";import{b as s}from"./dnd-BCFAPC0L.js";import{a5 as o,Y as J,P as Q,W as X,p as Z,R as S,i as ee,$ as te}from"./App-D7FKaW3e.js";import"./react-XDCjal2T.js";import"./terminal-C7X98Amf.js";import"./gestureArbiter-C3GqyqzH.js";import"./triangle-alert-Cf9mn5Ug.js";import"./referenceLongPress-CnGp4Gdi.js";function de({groupId:u,activeSessionId:C,onOpenSidebar:k,leftSidebarVisible:L=!1,onToggleRightSidebar:x,rightSidebarOpen:p=!1,defaultSessionMode:R}){const b=s.useRef(null);s.useEffect(()=>{b.current?.focus()},[]);const[l,h]=s.useState(null),[I,T]=s.useState([]),[c,m]=s.useState(null),[g,z]=s.useState(null),[f,D]=s.useState(null),[G,P]=s.useState(null),a=_(),[W,v]=s.useState(!1);s.useEffect(()=>{if(a==="ready"){v(!1);return}const t=setTimeout(()=>v(!0),1e3);return()=>clearTimeout(t)},[a]);const A=o(t=>t.drafts),j=o(t=>t.setDraft),[$,B]=s.useState(u),r=s.useCallback(async()=>{try{const t=await K();h(t),m(null)}catch(t){m(t instanceof Error?t.message:"协作组加载失败")}},[]);s.useEffect(()=>{let t=!1;M().then(i=>{t||T(i)}).catch(()=>{}),q().then(i=>{if(t)return;const V=i.collaborationPanels?.[J()]?.drafts;for(const[N,Y]of Object.entries(V??{}))o.getState().drafts[N]||j(N,Y)}).catch(()=>{});const O=F(i=>{t||(h(i),m(null))});r();const n=()=>{!document.hidden&&navigator.onLine!==!1&&r()},U=setInterval(n,1e4);return document.addEventListener("visibilitychange",n),window.addEventListener(w,n),window.addEventListener("pageshow",n),()=>{t=!0,O(),clearInterval(U),document.removeEventListener("visibilitychange",n),window.removeEventListener(w,n),window.removeEventListener("pageshow",n)}},[r]);const d=l?.groups.find(t=>t.id===u),y=async t=>{await te(t),o.getState().terminal()};return e.jsxs("section",{"aria-label":"协作主工作区",className:"absolute inset-0 flex min-h-0 min-w-0 flex-col bg-[var(--chrome-bg)] text-foreground",children:[e.jsxs("header",{className:"flex min-h-14 shrink-0 items-center gap-1 border-b border-border/15 px-2 sm:min-h-16 sm:gap-3 sm:px-6",children:[!L&&e.jsx("button",{type:"button","aria-label":"打开会话侧栏",className:"inline-flex min-h-11 min-w-11 items-center justify-center rounded-lg text-muted-foreground hover:bg-surface-2",onClick:k,children:e.jsx(Q,{size:17})}),e.jsx(X,{size:18,className:"hidden shrink-0 text-primary sm:block"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h2",{ref:b,tabIndex:-1,className:"truncate text-base font-semibold outline-none",children:d?.name??"协作工作区"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:d?`${d.sessionIds.length} 位成员`:"正在连接工作组"})]}),x&&e.jsx("button",{type:"button","aria-label":"文件侧栏",title:"文件侧栏","aria-pressed":p,className:`inline-flex min-h-11 min-w-11 items-center justify-center rounded-lg ${p?"bg-surface-2 text-primary":"text-muted-foreground hover:bg-surface-2"}`,onClick:x,children:e.jsx(Z,{size:17})}),e.jsxs("button",{type:"button","aria-label":"返回终端",title:"返回终端",className:"inline-flex min-h-11 min-w-11 items-center justify-center gap-2 rounded-lg px-2 text-xs text-muted-foreground hover:bg-surface-2",onClick:()=>o.getState().terminal(),children:[e.jsx(H,{size:17}),e.jsx("span",{className:"hidden sm:inline",children:"返回终端"})]})]}),e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col px-4 py-2 sm:px-6",children:[(W||E(c))&&e.jsxs("div",{role:"status",className:"mb-2 flex shrink-0 items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(S,{size:13,className:a==="offline"?"":"animate-spin"}),e.jsx("span",{children:a==="offline"?"网络已断开,联网后自动恢复":"正在恢复连接,当前结果和草稿已保留"})]}),(g||c&&a==="ready"&&!E(c))&&e.jsxs("div",{role:"alert",className:"mb-3 flex shrink-0 items-center gap-2 rounded-lg bg-destructive/10 p-3 text-xs text-destructive",children:[e.jsx("span",{className:"flex-1",children:g||c}),e.jsx("button",{type:"button","aria-label":"重新加载协作组",className:"min-h-11 px-3",onClick:()=>{r()},children:e.jsx(S,{size:14})})]}),f&&e.jsx("p",{role:"status",className:"mb-3 shrink-0 text-xs text-primary",children:f}),l?d?e.jsx(ee,{fullWorkspace:!0,active:!0,notice:f,groups:l.groups,sessions:l.sessions,agents:I,sessionsState:"loaded",selectedGroupId:$,setSelectedGroupId:B,initialGroupId:u,activeSessionId:C,initialDrafts:A,onDraftChange:j,docked:!1,inputKeySuffix:"main",floatingVisible:!0,floating:!1,onOpenSession:y,onOpenTaskSession:y,defaultSessionMode:R,busy:G,setBusy:P,setError:z,setNotice:D,refresh:r}):e.jsx("p",{className:"py-10 text-center text-sm text-muted-foreground",children:"协作组已移除或暂不可用。任务记录仍保留在原服务中。"}):e.jsx("p",{role:"status",className:"py-10 text-center text-sm text-muted-foreground",children:"正在加载协作工作区…"})]})]})}export{de as default};
@@ -1,2 +0,0 @@
1
- import{bx as r}from"./app-BJP8Xgmi.js";import{b as m}from"./dnd-BCFAPC0L.js";import{b as n}from"./RightSidebar-B_dO0nU5.js";import"./react-XDCjal2T.js";import"./terminal-C7X98Amf.js";import"./App-D7FKaW3e.js";import"./gestureArbiter-C3GqyqzH.js";import"./triangle-alert-Cf9mn5Ug.js";import"./referenceLongPress-CnGp4Gdi.js";import"./DiffReview-C90Qt0Gx.js";import"./sparkles-D4t6BWgT.js";import"./DiffViewer-BA_9bZxs.js";import"./ChangeWalkthroughPanel-BrAwRa20.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-DknTu7rD.js","assets/app-BJP8Xgmi.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-C7X98Amf.js","assets/index-C6ftfFlG.css","assets/ChangeWalkthroughPanel-BrAwRa20.js","assets/sparkles-D4t6BWgT.js","assets/triangle-alert-Cf9mn5Ug.js","assets/App-D7FKaW3e.js","assets/gestureArbiter-C3GqyqzH.js","assets/gestureArbiter-C2J0D0kV.css","assets/referenceLongPress-CnGp4Gdi.js"])))=>i.map(i=>d[i]);
2
- import{ae as Ne,cx as it,da as Ze,bx as t,cu as we,bw as _e,W as Be,o as Xe,l as lt,X as ut,_ as We}from"./app-BJP8Xgmi.js";import{b as o,r as dt}from"./dnd-BCFAPC0L.js";import{a as mt}from"./ChangeWalkthroughPanel-BrAwRa20.js";import{U as qe,K as pt,g as ft}from"./App-D7FKaW3e.js";import{M as ht}from"./triangle-alert-Cf9mn5Ug.js";const xt=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],Ge=Ne("loader-circle",xt);const gt=[["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"}]],Je=Ne("mouse-pointer-2",gt);const bt=[["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"}]],yt=Ne("settings-2",bt);const vt=[["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"}]],wt=Ne("zoom-in",vt);function Ie(e){const s=e==="darwin"?"mac":e==="win32"?"windows":"linux",m={host:"127.0.0.1",platform:s,protocol:s==="mac"?"vnc":"rdp",port:"3389",username:"",domain:"",ignoreCert:!1,rememberLogin:!0};return{target:"local",local:m,remote:{...m,host:""},viewOnly:!1,fit:!0,autoConnect:!0}}function Qe(e,s){const m=Ie(s);if(!e||typeof e!="object")return m;const a=e,h=(c,x)=>{const i=c&&typeof c=="object"?c:{},A=(u,K)=>typeof i[u]=="string"&&i[u].length<=K&&!/[\x00-\x1f]/.test(i[u])?i[u]:x[u];return{host:A("host",253),username:A("username",255),domain:A("domain",255),platform:["mac","linux","windows"].includes(String(i.platform))?i.platform:x.platform,protocol:i.protocol==="rdp"||i.protocol==="vnc"?i.protocol:x.protocol,port:typeof i.port=="string"&&/^\d{0,5}$/.test(i.port)&&Number(i.port)<=65535?i.port:x.port,ignoreCert:i.ignoreCert===!0,rememberLogin:i.rememberLogin!==!1}};return{target:a.target==="remote"?"remote":"local",local:{...h(a.local,m.local),host:"127.0.0.1"},remote:h(a.remote,m.remote),viewOnly:a.viewOnly===!0,fit:a.fit!==!1,autoConnect:a.autoConnect!==!1}}function et(e){return JSON.stringify([e.host.trim().toLowerCase(),e.protocol,e.protocol==="vnc"?5900:Number(e.port),e.username.trim(),e.domain.trim()])}function Ct(e){const[s,m]=o.useState(Ie),[a,h]=o.useState(!1),[c,x]=o.useState("loading"),[i,A]=o.useState(0),[u,K]=o.useState([]),[B,D]=o.useState("idle"),R=o.useRef(s),z=o.useRef(0),v=o.useRef(0),$=o.useRef(""),w=o.useRef(null),j=o.useRef(new Set),X=o.useCallback(b=>{R.current=b(R.current),z.current++,m(R.current),x("saving")},[]);o.useEffect(()=>{const b=++v.current;z.current=0,$.current="",w.current=null,R.current=Ie(),m(R.current),h(!1),x("loading"),K([]),D("idle");const p=new AbortController;return fetch("/api/computer/preferences",{signal:p.signal}).then(async N=>{if(!N.ok)throw new Error("PREFERENCES_LOAD_FAILED");return await N.json()}).then(N=>{if(b!==v.current||p.signal.aborted)return;let g=Qe(N.preferences);const M=z.current>0;if(!N.configured&&!M)try{const F=localStorage.getItem(`termdock:computer-host:${e}`);if(F){const W=/^(127\.0\.0\.1|localhost|::1|\[::1\])$/i.test(F)?"local":"remote";g=Qe({...g,target:W,[W]:{...g[W],host:F,platform:localStorage.getItem(`termdock:computer-platform:${e}`)||g[W].platform,protocol:localStorage.getItem(`termdock:computer-protocol:${e}`)||"vnc",port:localStorage.getItem(`termdock:computer-rdp-port:${e}`)||"3389"}}),z.current++}}catch{}M||(R.current=g),$.current=N.configured?JSON.stringify(g):"",m(R.current),h(!0),x(N.configured?"saved":"saving"),K(Array.isArray(N.credentialKeys)?N.credentialKeys.filter(F=>typeof F=="string"):[]),D(N.credentialError?"error":"idle")}).catch(()=>{!p.signal.aborted&&b===v.current&&x("error")}),()=>{++v.current,p.abort();for(const N of j.current)N.abort();j.current.clear()}},[e,i]);const O=o.useCallback(()=>{if(w.current)return w.current;if(!a)return Promise.resolve(!1);const b=v.current,p=(async()=>{for(;$.current!==JSON.stringify(R.current);){const N=JSON.stringify(R.current),g=new AbortController;j.current.add(g),x("saving");try{if(!(await fetch("/api/computer/preferences",{method:"PUT",headers:{"Content-Type":"application/json"},body:N,signal:g.signal})).ok)throw new Error("PREFERENCES_SAVE_FAILED");if(b!==v.current)return!1;$.current=N}catch{return b===v.current&&x("error"),!1}finally{j.current.delete(g)}}return b===v.current&&x("saved"),!0})();return w.current=p,p.finally(()=>{w.current===p&&(w.current=null)}),p},[a]);o.useEffect(()=>{if(!a||$.current===JSON.stringify(s))return;const b=setTimeout(()=>{O()},300);return()=>clearTimeout(b)},[a,s,O]);const ee=o.useCallback(async(b,p,N)=>{const g=v.current,M=new AbortController;b!=="use"&&D("saving");try{if(!await O()||g!==v.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");j.current.add(M);const F=await fetch(`/api/computer/credentials/${b}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({profile:p,...b==="save"?{password:N}:{}}),signal:M.signal});if(g!==v.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");if(!F.ok)throw new Error(b==="use"&&F.status===404?"COMPUTER_CREDENTIALS_MISSING":"COMPUTER_CREDENTIALS_FAILED");const G=await F.json();if(g!==v.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");const W=et(p);if(b==="save"&&K(ae=>[...new Set([...ae,W])]),b==="forget"&&K(ae=>ae.filter(me=>me!==W)),b==="use"&&(typeof G.password!="string"||!G.password))throw new Error("COMPUTER_CREDENTIALS_MISSING");return D("idle"),G.password}catch(F){throw g===v.current&&!M.signal.aborted&&D("error"),F}finally{j.current.delete(M)}},[O]);return{preferences:s,change:X,loaded:a,saveState:c,flush:O,credentialKeys:u,loginState:B,credentialRequest:ee,retry:()=>a?void O():A(b=>b+1)}}class jt{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(s,m){this.socket=it(`/api/computer/ws?host=${encodeURIComponent(s)}`),this.socket.onopen=a=>this.onopen?.(a),this.socket.onerror=a=>this.onerror?.(a),this.socket.onclose=a=>{(a.code!==1e3||a.reason)&&m(a.reason||"COMPUTER_DISCONNECTED"),this.onclose?.(a)},this.socket.onmessage=a=>{try{const h=JSON.parse(a.data);if(h.type!=="data"||typeof h.data!="string"||!Number.isSafeInteger(h.seq))throw new Error("Invalid VNC record");const c=Uint8Array.from(atob(h.data),x=>x.charCodeAt(0));this.onmessage?.(new MessageEvent("message",{data:c.buffer})),this.socket.readyState===1&&this.socket.send(JSON.stringify({type:"ack",seq:h.seq}))}catch{m("COMPUTER_INVALID_MESSAGE"),this.close(),this.onclose?.(new CloseEvent("close",{code:4400}))}}}send(s){const m=ArrayBuffer.isView(s)?new Uint8Array(s.buffer,s.byteOffset,s.byteLength):new Uint8Array(s);for(let a=0;a<m.length;a+=32*1024){const h=m.subarray(a,a+32768);let c="";for(const x of h)c+=String.fromCharCode(x);this.socket.send(JSON.stringify({type:"data",data:btoa(c)}))}}close(){this.socket.close()}}function Nt(e){return e==="mac"||e==="linux"||e==="windows"}function Et(e){const s=e==="mac"?[65513,"MetaLeft"]:[65507,"ControlLeft"],m=e==="mac"?s:[65515,"MetaLeft"];return{escape:[[65307,"Escape"]],enter:[[65293,"Enter"]],backspace:[[65288,"Backspace"]],tab:[e==="mac"?s:[65513,"AltLeft"],[65289,"Tab"]],search:e==="mac"?[m,[32,"Space"]]:[m],copy:[s,[99,"KeyC"]],paste:[s,[118,"KeyV"]],up:[[65362,"ArrowUp"]],down:[[65364,"ArrowDown"]],left:[[65361,"ArrowLeft"]],right:[[65363,"ArrowRight"]]}}function kt(e){const s=e;return{size:()=>({width:s._fbWidth,height:s._fbHeight}),surface:()=>s._canvas,send:(m,a,h)=>{const c=s._display.scale,x=(m-s._display.absX(0))*c,i=(a-s._display.absY(0))*c;s._mousePos={x,y:i},s._mouseMoveTimer!==null&&clearTimeout(s._mouseMoveTimer),s._mouseMoveTimer=null,s._mouseButtonMask=h,s._mouseLastMoveTime=Date.now(),s._sendMouse(x,i,h)}}}const tt="termdock:computer-touch-mode:v1";function St(){try{const e=localStorage.getItem(tt);if(e==="trackpad"||e==="direct")return e}catch{}return navigator.maxTouchPoints>0&&window.matchMedia("(any-pointer: coarse)").matches?"trackpad":"direct"}function Lt(e){try{localStorage.setItem(tt,e)}catch{}}const Tt=8,At=300,_t=450,Re=18,Ce=(e,s)=>Math.max(0,Math.min(e,Math.max(0,s-1)));function Rt(e,s,m,a){const h=new AbortController,c=new Map;let x=0,i=0,A=!1,u=!1,K=!1,B=0,D=0,R,z=!1,v=!0,$=!0,w,j=!1;const X=()=>{const n=s.size(),d=a.current??={x:n.width/2,y:n.height/2};return d.x=Ce(d.x,n.width),d.y=Ce(d.y,n.height),d};let O;const ee=()=>{const n=s.size();if((!O||O.width!==n.width||O.height!==n.height)&&($=!0),!$&&O)return O;const d=s.surface(),y=e.getBoundingClientRect(),E=d.getBoundingClientRect(),S=[];for(let f=d.parentElement;f&&f!==e;f=f.parentElement){const I=getComputedStyle(f),P=/auto|scroll/.test(I.overflowX)?Math.max(0,f.scrollWidth-f.clientWidth):0,C=/auto|scroll/.test(I.overflowY)?Math.max(0,f.scrollHeight-f.clientHeight):0;if(!P&&!C)continue;const V=f.getBoundingClientRect();S.push({element:f,left:V.left-y.left,top:V.top-y.top,right:V.right-y.left,bottom:V.bottom-y.top,maxX:P,maxY:C})}return O={...n,left:E.left-y.left,top:E.top-y.top,scaleX:n.width&&E.width?E.width/n.width:1,scaleY:n.height&&E.height?E.height/n.height:1,viewportWidth:y.width,viewportHeight:y.height,clientLeft:y.left,clientTop:y.top,scrollers:S},$=!1,O},b=()=>{const n=ee(),d=X();if(!n.width||!n.height||!v){m.hidden=!0;return}let y=n.left+d.x*n.scaleX,E=n.top+d.y*n.scaleY;for(const S of n.scrollers){if(S.maxX){const f=S.element.scrollLeft,I=y<S.left+20?y-S.left-20:y>S.right-20?y-S.right+20:0,P=Math.max(0,Math.min(S.maxX,f+I));f!==P&&(S.element.scrollLeft=P,y-=P-f,n.left-=P-f)}if(S.maxY){const f=S.element.scrollTop,I=E<S.top+20?E-S.top-20:E>S.bottom-20?E-S.bottom+20:0,P=Math.max(0,Math.min(S.maxY,f+I));f!==P&&(S.element.scrollTop=P,E-=P-f,n.top-=P-f)}}m.hidden=y<0||E<0||y>=n.viewportWidth||E>=n.viewportHeight,m.style.transform=`translate3d(${y}px, ${E}px, 0)`},p=(n=D)=>{const d=X();s.send(Math.round(d.x),Math.round(d.y),n)},N=()=>{R=void 0,b(),z&&(z=!1,p());let n=0;for(;Math.abs(B)>=Re&&n++<8;){const d=B>0?16:8;p(d),p(0),B-=Math.sign(B)*Re}},g=()=>{j||(R??=requestAnimationFrame(N))},M=()=>{R!==void 0&&(cancelAnimationFrame(R),N())},F=()=>{clearTimeout(w),M(),D&&(D=0,p())},G=n=>{n.cancelable&&n.preventDefault(),n.stopImmediatePropagation()},W=()=>[...c.values()].reduce((n,d)=>n+d.y,0)/c.size,ae=n=>{if(!(n.pointerType!=="touch"&&n.pointerType!=="pen")){G(n),v=!0,g(),c.size||(x=performance.now(),i=0,A=!1,u=!1,K=!1,B=0),c.set(n.pointerId,{x:n.clientX,y:n.clientY,startX:n.clientX,startY:n.clientY}),i=Math.max(i,c.size);try{e.setPointerCapture(n.pointerId)}catch{}clearTimeout(w),c.size===1&&i===1?w=setTimeout(()=>{!j&&c.size===1&&!A&&!u&&(D=1,p())},_t):(F(),K=!0)}},me=n=>{if(n.pointerType==="mouse"){const f=ee();a.current={x:Ce((n.clientX-f.clientLeft-f.left)/f.scaleX,f.width),y:Ce((n.clientY-f.clientTop-f.top)/f.scaleY,f.height)},v=!1,m.hidden=!0;return}const d=c.get(n.pointerId);if(!d)return;G(n);const y=W(),E=n.clientX-d.x,S=n.clientY-d.y;if(d.x=n.clientX,d.y=n.clientY,Math.hypot(d.x-d.startX,d.y-d.startY)>Tt&&(A=!0,clearTimeout(w)),c.size===2&&!u)B+=y-W(),Math.abs(B)>=Re&&(A=!0,g());else if(c.size===1&&!K&&!u){const f=X(),I=O??ee();f.x+=E/I.scaleX,f.y+=S/I.scaleY,X(),z=!0,g()}},pe=n=>{if(!c.has(n.pointerId))return;G(n);const d=D!==0;n.type!=="pointerup"&&(u=!0),F(),c.delete(n.pointerId);try{e.hasPointerCapture(n.pointerId)&&e.releasePointerCapture(n.pointerId)}catch{}c.size||(B=0,!u&&!d&&!A&&i<=2&&performance.now()-x<=At&&(p(i===2?4:1),p(0)))},ie=()=>{u=!0,F();const n=[...c.keys()];c.clear(),B=0;for(const d of n)try{e.hasPointerCapture(d)&&e.releasePointerCapture(d)}catch{}},q={capture:!0,passive:!1,signal:h.signal};e.addEventListener("pointerdown",ae,q),e.addEventListener("pointermove",me,q),e.addEventListener("pointerup",pe,q),e.addEventListener("pointercancel",pe,q),e.addEventListener("lostpointercapture",pe,q);for(const n of["touchstart","touchmove","touchend","touchcancel","contextmenu"])e.addEventListener(n,G,q);const fe=()=>{$=!0,g()};e.addEventListener("scroll",fe,{capture:!0,signal:h.signal}),window.addEventListener("blur",ie,{signal:h.signal});const re=()=>{document.hidden&&ie()};document.addEventListener("visibilitychange",re,{signal:h.signal});const H=new ResizeObserver(fe);return H.observe(e),H.observe(s.surface()),b(),()=>{j||(j=!0,h.abort(),ie(),H.disconnect(),m.hidden=!0)}}function It(e,s){e=Math.max(1,e||1280),s=Math.max(1,s||800);const m=Math.max(1,640/e,480/s);return{width:Math.max(640,Math.min(2560,Math.round(e*m))),height:Math.max(480,Math.min(1600,Math.round(s*m)))}}function Mt({sendText:e,sendKey:s}){const{t:m}=Ze(),a=o.useRef(null),h=o.useRef(!1),c=o.useRef(null),[x,i]=o.useState(""),A=()=>{const u=a.current?.value||"";u&&e(u),a.current&&(a.current.value=""),i("")};return o.useEffect(()=>(a.current?.focus({preventScroll:!0}),()=>{c.current!==null&&cancelAnimationFrame(c.current)}),[]),t.jsx("input",{ref:a,tabIndex:-1,className:"pointer-events-none absolute left-0 top-0 h-px w-px border-0 p-0 text-base opacity-0","aria-label":m("computer.keyboardInput"),autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",spellCheck:!1,maxLength:1024,value:x,onChange:u=>{i(u.target.value),!h.current&&c.current===null&&A()},onCompositionStart:()=>{h.current=!0},onCompositionEnd:()=>{h.current=!1,c.current!==null&&cancelAnimationFrame(c.current),c.current=requestAnimationFrame(()=>{c.current=null,A()})},onKeyDown:u=>{h.current||u.nativeEvent.isComposing||c.current!==null||(u.key==="Enter"||u.key==="Backspace"&&!u.currentTarget.value)&&(u.preventDefault(),s(u.key==="Enter"?"enter":"backspace"))}})}function Pt(e){let s=[],m=null;const a=new Map,h=()=>{m=null,s.splice(0,32).forEach(c=>{e(c),c[2]?a.set(c[0],c):a.delete(c[0])}),s.length&&(m=requestAnimationFrame(h))};return{send(c){s.push(...c),m===null&&h()},clear(){m!==null&&cancelAnimationFrame(m),m=null,s=[];const c=[...a.values()].reverse();a.clear();for(const[x,i]of c)try{e([x,i,!1])}catch{}}}}const se="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",ce="min-h-11 w-full rounded-md border border-border bg-background px-2 text-sm outline-none focus:border-primary";function je(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 Dt(){const{t:e}=Ze(),[s,m]=o.useState(()=>we()?.targetPeerId??""),[a,h]=o.useState(null),{preferences:c,change:x,loaded:i,saveState:A,flush:u,retry:K,credentialKeys:B,loginState:D,credentialRequest:R}=Ct(s),z=c.target==="local",v=c[c.target],{host:$,platform:w,protocol:j,port:X,domain:O,ignoreCert:ee,username:b}=v,{viewOnly:p,fit:N}=c,g=v.rememberLogin&&B.includes(et(v)),M=r=>x(l=>({...l,[l.target]:{...l[l.target],...r}})),F=r=>M({username:r}),G=r=>M({domain:r}),W=r=>{M({ignoreCert:r}),u()},ae=r=>M({port:r}),me=r=>{r&&(le.current(),be.clear(),V(null)),x(l=>({...l,viewOnly:r})),u()},[pe,ie]=o.useState(!1),q=Et(w),fe=w==="mac"?"⌘V":"Ctrl+V",[re,H]=o.useState(""),[n,d]=o.useState("idle"),[y,E]=o.useState(null),[S,f]=o.useState(""),[I,P]=o.useState(!1),[C,V]=o.useState(null),Ee=o.useRef(null),[ve,Me]=o.useState(""),[rt,ge]=o.useState(!1),[nt,ot]=o.useState(!1),[J,st]=o.useState(St),Pe=o.useRef(null),De=o.useRef(null),le=o.useRef(()=>{}),[Oe,ct]=o.useState(_e),he=o.useRef(!1),ne=o.useRef(""),ze=o.useRef(()=>{}),Fe=o.useRef(null),ke=o.useRef(null),ue=o.useMemo(()=>{const r=document.createElement("div");return r.className="h-full w-full min-h-0 overflow-hidden",r},[]),T=o.useRef(null),be=o.useMemo(()=>Pt(([r,l,k])=>T.current?.sendKey(r,l,k)),[]),Se=o.useRef(null),te=o.useRef(0),Le=o.useRef(void 0),Q=o.useCallback(()=>{le.current(),be.clear(),De.current=null,te.current++,clearTimeout(Le.current);const r=T.current;T.current=null,r?.disconnect(),Se.current?.close(),Se.current=null,ue.replaceChildren()},[ue,be]);o.useLayoutEffect(()=>(ke.current?.appendChild(ue),()=>{ue.remove()}),[ue,I]),o.useEffect(()=>()=>Q(),[Q]),o.useEffect(()=>{const r=()=>{const l=_e();ct(l),!l&&(he.current=!1,ne.current="",Q(),d("idle"),H(""),P(!1),V(null))};return window.addEventListener(Be,r),()=>window.removeEventListener(Be,r)},[Q]),o.useEffect(()=>{const r=()=>m(we()?.targetPeerId??"");return window.addEventListener(Xe,r),()=>window.removeEventListener(Xe,r)},[]),o.useEffect(()=>{Q(),he.current=!1,ne.current="",d("idle"),E(null),H(""),h(null),P(!1),V(null),ie(!1),f(""),Me(""),ge(!1);const r=new AbortController;return fetch("/api/computer/status",{signal:r.signal}).then(async l=>{if(!l.ok)throw new Error(l.status===403?"API_NOT_ALLOWED":"COMPUTER_FAILED");return await l.json()}).then(l=>{r.signal.aborted||h(l)}).catch(l=>{r.signal.aborted||E(je(String(l)))}),()=>{r.abort(),Q()}},[s,Q]),o.useEffect(()=>{T.current&&(T.current.viewOnly=p)},[p]),o.useEffect(()=>{T.current&&(T.current.scaleViewport=N)},[N]),o.useEffect(()=>{T.current&&"pauseResize"in T.current&&(T.current.pauseResize=!!C)},[C]),o.useEffect(()=>{T.current&&"keyboardActive"in T.current&&(T.current.keyboardActive=C==="keyboard")},[C]);const Ue=r=>{r===z||Y||!i||(H(""),E(null),x(l=>({...l,target:r?"local":"remote"})),u())},$e=()=>{he.current=!0,ne.current="",Q(),d("idle"),H(""),P(!1),V(null),ge(!1)},Ve=async r=>{if(r?.preventDefault(),he.current=!0,n==="credentials"&&T.current&&"sendCredentials"in T.current){ne.current=re,T.current.sendCredentials({username:b,password:re}),d("connecting");return}if(!_e()||!i||!re&&!g)return;u(),Q(),E(null),f(""),d("connecting"),ge(!1);const l=te.current,k=L=>{l===te.current&&(Q(),d("error"),E(L),V(null),ne.current="",(L==="computer.authFailed"||L==="computer.permission"||L==="computer.loginExpired")&&H(""),g&&(L==="computer.authFailed"||L==="computer.loginExpired")&&R("forget",v).catch(()=>{}))};Le.current=setTimeout(()=>k("computer.timeout"),6e4);try{let L=re||await R("use",v);if(l!==te.current)return;ne.current=L||"";let U;if(j==="rdp"){const{RdpSession:Z}=await We(async()=>{const{RdpSession:Ae}=await import("./rdpSession-DknTu7rD.js");return{RdpSession:Ae}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]));if(l!==te.current)return;const de=window.innerWidth<=640,oe=Ee.current?.getBoundingClientRect(),ye=It(de?window.innerWidth:oe?.width||1280,Math.max(1,(de?window.innerHeight:oe?.height||800)-100));U=new Z(ue,{host:$.trim(),port:Number(X),username:b.trim(),password:L||"",domain:O.trim(),ignoreCert:ee,...ye},Ae=>k(je(Ae)))}else{const{default:Z}=await We(async()=>{const{default:ye}=await import("./rfb-CxsXsMUX.js");return{default:ye}},[]);if(l!==te.current)return;const de=new jt($.trim(),ye=>k(je(ye)));Se.current=de;const oe=new Z(ue,de,{shared:!0,credentials:{username:b.trim()||void 0,password:L}});oe.background="var(--chrome-bg)",oe.resizeSession=!1,oe.qualityLevel=6,oe.compressionLevel=2,U=oe}L=void 0,T.current=U,U.scaleViewport=N,U.viewOnly=p,U.addEventListener("connect",()=>{if(l!==te.current)return;clearTimeout(Le.current),d("connected"),H(""),window.innerWidth<=640&&(document.activeElement?.blur?.(),P(!0));const Z=ne.current;ne.current="",v.rememberLogin&&Z&&R("save",v,Z).catch(()=>{})}),U.addEventListener("credentialsrequired",Z=>{if(l!==te.current)return;const de=Z.detail.types;ot(de.includes("username")),d("credentials")}),U.addEventListener("securityfailure",()=>k("computer.authFailed")),U.addEventListener("disconnect",()=>k("computer.disconnected")),U.addEventListener("desktopname",Z=>{l===te.current&&f(Z.detail.name)})}catch(L){k(je(String(L)))}},xe=r=>{!T.current||n!=="connected"||p||be.send([...r.map(([k,L])=>[k,L,!0]),...[...r].reverse().map(([k,L])=>[k,L,!1])])},_=n==="connected",Y=n==="connecting"||n==="credentials";o.useEffect(()=>{const r=T.current,l=ke.current,k=Pe.current;if(!_||p||C&&C!=="keyboard"||J!=="trackpad"||!r||!l||!k)return;const L="pointerTarget"in r?r.pointerTarget:kt(r),U=Rt(l,L,k,De);return le.current=U,()=>{U(),le.current===U&&(le.current=()=>{})}},[_,p,J,I,C]);const He=r=>{r!==J&&(le.current(),st(r),Lt(r))};ze.current=()=>{Ve()},o.useEffect(()=>{Oe&&i&&a&&c.autoConnect&&g&&n==="idle"&&!he.current&&ze.current()},[Oe,i,a,c.autoConnect,g,n]);const Ye=()=>{he.current=!0,R("forget",v).catch(()=>{})},Te=r=>{le.current(),V(l=>l===r?null:r)},at=r=>{if(!T.current||p)return;const l=[];for(const k of r){const L=k.codePointAt(0),U=k===`
3
- `?65293:k===" "?65289:L<256?L:16777216|L;l.push([U,null,!0],[U,null,!1])}be.send(l)};o.useEffect(()=>{if(!_||C!=="keyboard"&&C!=="clipboard"||!I||!window.visualViewport)return;const r=window.visualViewport,l=Ee.current,k=()=>{l&&r.height>=160&&(l.style.height=`${r.height}px`,l.style.top=`${r.offsetTop}px`)};return k(),r.addEventListener("resize",k),r.addEventListener("scroll",k),()=>{r.removeEventListener("resize",k),r.removeEventListener("scroll",k),l&&(l.style.height="",l.style.top="")}},[_,C,I]);const Ke=t.jsxs("div",{ref:Ee,className:`flex min-h-0 flex-col bg-surface text-foreground ${I?"fixed inset-0 z-modal-panel h-dvh pb-[env(safe-area-inset-bottom)] pt-[env(safe-area-inset-top)]":"relative h-full"}`,role:I?"dialog":void 0,"aria-modal":I||void 0,"aria-label":e("computer.title"),onKeyDown:r=>{r.stopPropagation(),r.key==="Escape"&&!r.nativeEvent.isComposing&&C&&(r.preventDefault(),V(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:[I&&t.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center",onClick:()=>{P(!1),V(null)},"aria-label":e("computer.exitFullscreen"),children:t.jsx(mt,{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:_&&(S||(z?a?.hostname||we()?.serviceName:$))||e("computer.title")}),_&&t.jsx("span",{className:"text-[11px] text-primary",children:e("computer.connected")}),_&&D==="error"&&t.jsx("span",{role:"alert",className:"text-[11px] text-destructive",children:e("computer.loginSaveFailed")}),_&&A==="saving"&&t.jsx("span",{role:"status","aria-label":e("computer.settingsSaving"),title:e("computer.settingsSaving"),children:t.jsx(Ge,{size:12,className:"animate-spin text-muted-foreground"})}),_&&A==="error"&&t.jsxs("button",{type:"button",className:se,title:e("computer.settingsSaveFailed"),"aria-label":e("computer.settingsSaveFailed"),onClick:K,children:["! ",e("computer.retry")]}),Y&&t.jsxs("button",{type:"button",className:se,onClick:$e,children:[t.jsx(qe,{size:14}),e("computer.cancel")]}),_&&!I&&t.jsxs("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center gap-1 text-xs",onClick:()=>P(!0),"aria-label":e("computer.fullscreen"),children:[t.jsx(ht,{size:16}),e("computer.expand")]}),_&&t.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center",onClick:()=>Te("tools"),"aria-label":e("computer.tools"),"aria-expanded":C==="tools",children:t.jsx(yt,{size:18})})]}),!_&&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=>{Ve(r)},"aria-busy":n==="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 ${z?"bg-surface-2 text-foreground":"text-muted-foreground hover:bg-surface"}`,"aria-pressed":z,disabled:Y||!a||!i,onClick:()=>Ue(!0),children:e("computer.thisComputer")}),t.jsx("button",{type:"button",className:`min-h-11 rounded-md px-3 text-sm font-medium ${z?"text-muted-foreground hover:bg-surface":"bg-surface-2 text-foreground"}`,"aria-pressed":!z,disabled:Y||!i,onClick:()=>Ue(!1),children:e("computer.otherComputer")})]}),z?t.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",role:"status",children:a?e("computer.localService",{name:we()?.serviceName||a.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:ce,value:$,disabled:Y||!i,onChange:r=>{M({host:r.target.value,domain:"",ignoreCert:!1}),H(""),E(null)},placeholder:e("computer.hostPlaceholder"),onBlur:()=>{u()},autoCapitalize:"none",autoCorrect:"off",spellCheck:!1,required:!0,maxLength:253})]}),t.jsxs("p",{className:"text-xs text-muted-foreground",children:[w==="mac"?"macOS":w==="linux"?"Ubuntu / Linux":"Windows"," · ",j.toUpperCase()," · ",j==="rdp"?X||"3389":"5900",p?` · ${e("computer.viewOnly")}`:""]}),t.jsxs("label",{className:"block space-y-1 text-xs",children:[t.jsx("span",{children:e(j==="rdp"?"computer.rdpUsername":"computer.username")}),t.jsx("input",{className:ce,value:b,disabled:n==="connecting"||!i,onChange:r=>F(r.target.value),onBlur:()=>{u()},autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",required:j==="rdp"||n==="credentials"&&nt,maxLength:255})]}),t.jsxs("label",{className:"block space-y-1 text-xs",children:[t.jsx("span",{children:e("computer.password")}),t.jsx("input",{className:ce,type:"password",value:re,disabled:n==="connecting"||!i,onChange:r=>H(r.target.value),placeholder:g&&n!=="credentials"?e("computer.savedPassword"):void 0,autoComplete:"new-password",required:!g||n==="credentials",maxLength:1024})]}),t.jsx("p",{className:"text-[11px] leading-relaxed text-muted-foreground",children:e(j==="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:v.rememberLogin,disabled:Y||!i||D==="saving",onChange:r=>{const l=r.target.checked;M({rememberLogin:l}),!l&&g?R("forget",{...v,rememberLogin:l}).catch(()=>{}):u()}}),e("computer.rememberLogin")]}),g&&t.jsx("button",{type:"button",className:"min-h-11 text-muted-foreground underline",disabled:Y||D==="saving",onClick:Ye,children:e("computer.forgetLogin")})]}),D==="error"&&!y&&t.jsx("p",{role:"alert",className:"text-xs text-destructive",children:e("computer.loginSaveFailed")}),j==="rdp"&&a?.rdpAvailable===!1&&t.jsx("p",{role:"status",className:"text-xs text-muted-foreground",children:e("computer.rdpBackendUnavailable")}),n==="credentials"&&t.jsx("p",{className:"text-xs text-primary",children:e("computer.credentials")}),y&&t.jsxs("div",{role:"alert",className:"rounded-md bg-surface-2 p-3 text-xs leading-relaxed text-destructive",children:[e(y),y==="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:ee,onChange:r=>W(r.target.checked)}),e("computer.trustCertificateHere")]}),n==="error"&&y!=="computer.rdpCertificate"&&t.jsx("button",{type:"button",className:"mt-1 block min-h-9 text-foreground underline",onClick:()=>{ie(!0),requestAnimationFrame(()=>Fe.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:!i||n==="connecting"||D==="saving"||z&&!a||!$.trim()||!re&&(!g||n==="credentials")||j==="rdp"&&(!b.trim()||!Number.isInteger(Number(X))||Number(X)<1||Number(X)>65535),children:[n==="connecting"&&t.jsx(Ge,{size:16,className:"animate-spin"}),e(n==="connecting"?"computer.connecting":n==="credentials"?"computer.authenticate":n==="error"?"computer.retryConnect":"computer.connect")]}),t.jsxs("details",{ref:Fe,className:"border-b border-border text-xs",open:pe,onToggle:r=>ie(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:pe?"−":"+"})]}),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:ce,value:w,disabled:Y||!i,onChange:r=>{Nt(r.target.value)&&M({platform:r.target.value,protocol:r.target.value==="mac"?"vnc":"rdp",ignoreCert:!1}),H(""),u()},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:ce,value:j,disabled:Y||!i,onChange:r=>{M({protocol:r.target.value==="rdp"?"rdp":"vnc"}),H(""),E(null),u()},children:[t.jsx("option",{value:"rdp",children:"RDP"}),t.jsx("option",{value:"vnc",children:"VNC"})]})]})]}),j==="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:ce,type:"number",min:1,max:65535,step:1,value:X,disabled:Y||!i,onBlur:()=>{u()},onChange:r=>ae(r.target.value)})]}),t.jsxs("label",{className:"block space-y-1",children:[t.jsx("span",{children:e("computer.domain")}),t.jsx("input",{className:ce,value:O,disabled:Y||!i,onBlur:()=>{u()},onChange:r=>G(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:ee,disabled:Y||!i,onChange:r=>W(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:p,disabled:Y||!i,onChange:r=>me(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:c.autoConnect,disabled:Y||!i,onChange:r=>{x(l=>({...l,autoConnect:r.target.checked})),u()}}),e("computer.autoConnect")]})]})]})]}),t.jsxs("p",{role:"status",className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:[e(A==="saved"?"computer.settingsSaved":A==="error"?i?"computer.settingsSaveFailed":"computer.settingsLoadFailed":A==="loading"?"computer.settingsLoading":"computer.settingsSaving"),A==="error"&&t.jsx("button",{type:"button",className:"ml-2 min-h-9 text-primary underline",onClick:K,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(j==="rdp"?w==="linux"?"computer.rdpLinuxStep1":"computer.rdpStep1":w==="mac"?"computer.step1":w==="linux"?"computer.linuxStep1":"computer.windowsStep1")}),t.jsx("li",{children:e(j==="rdp"?"computer.rdpStep2":w==="mac"?"computer.step2":w==="linux"?"computer.linuxStep2":"computer.windowsStep2")}),t.jsx("li",{children:e("computer.step3")})]}),j==="vnc"&&w==="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(j==="rdp"?"computer.rdpNetworkHint":"computer.networkHint")})]})]})}),_&&C==="tools"&&t.jsx("button",{type:"button",className:"absolute inset-x-0 bottom-14 top-12 z-20 bg-background/40","aria-label":e("computer.returnToDesktop"),onClick:()=>V(null)}),_&&t.jsxs("div",{hidden:C!=="tools",className:`${C==="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:()=>V(null),children:t.jsx(ut,{size:18})})]}),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 ${J===r?"bg-surface-2 text-foreground":"text-muted-foreground hover:bg-surface"}`,"aria-pressed":J===r,onClick:()=>He(r),children:e(r==="trackpad"?"computer.trackpadMode":"computer.directTouchMode")},r))})}),t.jsxs("label",{className:"flex min-h-9 items-center gap-1.5",children:[t.jsx("input",{type:"checkbox",checked:p,onChange:r=>me(r.target.checked)}),e("computer.viewOnly")]}),t.jsx("button",{type:"button",className:se,onClick:()=>{x(r=>({...r,fit:!r.fit})),u()},children:e(N?"computer.actualSize":"computer.fit")}),t.jsxs("select",{className:`${se} min-w-0 bg-surface`,"aria-label":e("computer.shortcuts"),value:"",disabled:p,onChange:r=>{xe(q[r.target.value]??[])},children:[t.jsx("option",{value:"",disabled:!0,children:e("computer.shortcuts")}),t.jsxs("option",{value:"tab",children:[w==="mac"?"⌘ Tab":"Alt+Tab"," · ",e("computer.switchApps")]}),t.jsxs("option",{value:"search",children:[w==="mac"?"⌘ Space":"Super / Win"," · ",e(w==="mac"?"computer.spotlight":"computer.systemSearch")]}),t.jsx("option",{value:"copy",children:w==="mac"?"⌘C":"Ctrl+C"}),t.jsx("option",{value:"paste",children:fe}),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:[g&&t.jsx("button",{type:"button",className:se,disabled:D==="saving",onClick:Ye,children:e("computer.forgetLogin")}),t.jsxs("button",{type:"button",className:`${se} ml-auto text-destructive`,onClick:$e,children:[t.jsx(qe,{size:14}),e("computer.disconnect")]})]})]}),t.jsx("div",{ref:ke,"data-sidebar-gesture-ignore":"",className:`relative z-10 min-h-0 flex-1 overflow-hidden bg-[var(--chrome-bg)] ${_?"":"hidden"}`,style:{touchAction:_&&J==="trackpad"&&!p?"none":void 0},"aria-label":e("computer.remoteTitle"),children:_&&J==="trackpad"&&!p&&t.jsx("div",{ref:Pe,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(Je,{size:20,strokeWidth:2,className:"fill-background text-primary drop-shadow"})})}),t.jsx("div",{hidden:C!=="tools",children:_&&!p&&t.jsx("p",{className:"shrink-0 border-t border-border px-2 py-1 text-[10px] leading-relaxed text-muted-foreground",children:e(J==="trackpad"?"computer.trackpadHint":"computer.directTouchHint")})}),_&&C==="keyboard"&&!p&&t.jsx(Mt,{sendText:at,sendKey:r=>xe(q[r])}),_&&C==="clipboard"&&!p&&t.jsxs("form",{className:"shrink-0 space-y-2 border-t border-border p-3",onSubmit:r=>{if(r.preventDefault(),!(!ve||!T.current))try{T.current.clipboardPasteFrom(ve),ge(!0)}catch{E("computer.clipboardFailed")}},children:[t.jsx("textarea",{className:`${ce} min-w-0 resize-none py-2 text-base`,rows:2,"aria-label":e("computer.clipboard"),placeholder:e("computer.clipboardPlaceholder"),value:ve,onChange:r=>{Me(r.target.value),ge(!1)},maxLength:16384}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{type:"submit",className:`${se} min-h-11 flex-1`,disabled:!ve,children:e("computer.clipboard")}),t.jsx("button",{type:"button",className:`${se} min-h-11`,onClick:()=>xe(q.paste),children:fe})]}),t.jsx("p",{role:"status",className:"text-[10px] leading-relaxed text-muted-foreground",children:rt?e("computer.clipboardSent"):e("computer.clipboardHint",{shortcut:fe})}),y&&t.jsx("p",{role:"alert",className:"text-xs text-destructive",children:e(y)})]}),_&&t.jsxs("div",{className:`relative z-30 grid shrink-0 ${C==="keyboard"?"grid-cols-5":"grid-cols-4"} border-t border-border bg-surface px-1 py-1 text-[11px]`,children:[t.jsxs("button",{type:"button",className:`flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md ${C==="keyboard"?"bg-surface-2 text-primary":""}`,disabled:p,onClick:()=>Te("keyboard"),"aria-pressed":C==="keyboard",children:[t.jsx(pt,{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 ${C==="clipboard"?"bg-surface-2 text-primary":""}`,disabled:p,onClick:()=>Te("clipboard"),"aria-pressed":C==="clipboard",children:[t.jsx(ft,{size:18}),e("computer.clipboardTool")]}),C==="keyboard"?t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"min-h-11 rounded-md text-sm",onPointerDown:r=>r.preventDefault(),onClick:()=>xe([[65289,"Tab"]]),children:"Tab"}),t.jsx("button",{type:"button",className:"min-h-11 rounded-md text-lg",onPointerDown:r=>r.preventDefault(),onClick:()=>xe(q.backspace),children:"⌫"}),t.jsx("button",{type:"button",className:"min-h-11 rounded-md text-lg",onPointerDown:r=>r.preventDefault(),onClick:()=>xe(q.enter),children:"↵"})]}):t.jsxs(t.Fragment,{children:[t.jsxs("button",{type:"button",className:"flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md",onClick:()=>{x(r=>({...r,fit:!r.fit})),u()},children:[t.jsx(wt,{size:18}),e(N?"computer.zoom":"computer.fit")]}),t.jsxs("button",{type:"button",className:"flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md",disabled:p,onClick:()=>He(J==="trackpad"?"direct":"trackpad"),"aria-label":e("computer.switchTouchMode"),children:[t.jsx(Je,{size:18}),e(J==="trackpad"?"computer.trackpadMode":"computer.directTouchMode")]})]})]})]});return I?dt.createPortal(Ke,document.body):Ke}const Vt=Object.freeze(Object.defineProperty({__proto__:null,default:Dt},Symbol.toStringTag,{value:"Module"}));export{Vt as C,It as c};