termdock 1.4.354 → 1.4.356

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 (430) hide show
  1. package/THIRD_PARTY_NOTICES.md +56 -0
  2. package/dist/client/assets/{AndroidMirrorView-D9CMPmet.js → AndroidMirrorView-DW9oRr0w.js} +3 -3
  3. package/dist/client/assets/AndroidMirrorView-DW9oRr0w.js.br +0 -0
  4. package/dist/client/assets/AndroidMirrorView-DW9oRr0w.js.gz +0 -0
  5. package/dist/client/assets/App-DEZ2i9ZZ.js +178 -0
  6. package/dist/client/assets/App-DEZ2i9ZZ.js.br +0 -0
  7. package/dist/client/assets/App-DEZ2i9ZZ.js.gz +0 -0
  8. package/dist/client/assets/{ArchitecturePanel-Dlnd9PH-.js → ArchitecturePanel-Bf4b-6An.js} +3 -3
  9. package/dist/client/assets/ArchitecturePanel-Bf4b-6An.js.br +0 -0
  10. package/dist/client/assets/ArchitecturePanel-Bf4b-6An.js.gz +0 -0
  11. package/dist/client/assets/ChangeWalkthroughPanel-DO_zJfZr.js +2 -0
  12. package/dist/client/assets/ChangeWalkthroughPanel-DO_zJfZr.js.br +0 -0
  13. package/dist/client/assets/ChangeWalkthroughPanel-DO_zJfZr.js.gz +0 -0
  14. package/dist/client/assets/ChatRichContent-Cu1E1cJ8.js +277 -0
  15. package/dist/client/assets/ChatRichContent-Cu1E1cJ8.js.br +0 -0
  16. package/dist/client/assets/ChatRichContent-Cu1E1cJ8.js.gz +0 -0
  17. package/dist/client/assets/CollaborationMainWorkspace-BhmpSEbf.js +1 -0
  18. package/dist/client/assets/CollaborationMainWorkspace-BhmpSEbf.js.br +0 -0
  19. package/dist/client/assets/CollaborationMainWorkspace-BhmpSEbf.js.gz +0 -0
  20. package/dist/client/assets/{CollaborationTaskContent-GMhtQgeq.js → CollaborationTaskContent-CX0Aqdi2.js} +1 -1
  21. package/dist/client/assets/{ComputerControlView-VNUyl2Gb.js → ComputerControlView-DjQLzn10.js} +4 -4
  22. package/dist/client/assets/ComputerControlView-DjQLzn10.js.br +0 -0
  23. package/dist/client/assets/ComputerControlView-DjQLzn10.js.gz +0 -0
  24. package/dist/client/assets/DagPlayground-CPYwfryM.js +1 -0
  25. package/dist/client/assets/DagPlayground-CPYwfryM.js.br +0 -0
  26. package/dist/client/assets/DagPlayground-CPYwfryM.js.gz +0 -0
  27. package/dist/client/assets/{DiffLab-CKBHu65J.js → DiffLab-ptw96Q_4.js} +1 -1
  28. package/dist/client/assets/DiffLab-ptw96Q_4.js.br +0 -0
  29. package/dist/client/assets/DiffLab-ptw96Q_4.js.gz +0 -0
  30. package/dist/client/assets/DiffReview-12E2zWyL.js +1 -0
  31. package/dist/client/assets/DiffReview-12E2zWyL.js.br +0 -0
  32. package/dist/client/assets/DiffReview-12E2zWyL.js.gz +0 -0
  33. package/dist/client/assets/{DiffReviewLab--PbhIP71.js → DiffReviewLab-eEi3y-0G.js} +2 -2
  34. package/dist/client/assets/DiffReviewLab-eEi3y-0G.js.br +0 -0
  35. package/dist/client/assets/DiffReviewLab-eEi3y-0G.js.gz +0 -0
  36. package/dist/client/assets/{DiffViewer-Cg3GhKcU.js → DiffViewer-DqcQxp4Q.js} +1 -1
  37. package/dist/client/assets/DiffViewer-DqcQxp4Q.js.br +0 -0
  38. package/dist/client/assets/DiffViewer-DqcQxp4Q.js.gz +0 -0
  39. package/dist/client/assets/GitLoadingSkeleton-DYrDIDF1.js +1 -0
  40. package/dist/client/assets/GitLoadingSkeleton-DYrDIDF1.js.br +0 -0
  41. package/dist/client/assets/GitLoadingSkeleton-DYrDIDF1.js.gz +0 -0
  42. package/dist/client/assets/{MarkdownPreview-b_bwDNcY.js → MarkdownPreview-CsJGsDRL.js} +2 -2
  43. package/dist/client/assets/MarkdownPreview-CsJGsDRL.js.br +0 -0
  44. package/dist/client/assets/MarkdownPreview-CsJGsDRL.js.gz +0 -0
  45. package/dist/client/assets/{ModelPreview-C9nka14O.js → ModelPreview-DjtHLlqP.js} +3 -3
  46. package/dist/client/assets/ModelPreview-DjtHLlqP.js.br +0 -0
  47. package/dist/client/assets/ModelPreview-DjtHLlqP.js.gz +0 -0
  48. package/dist/client/assets/{RecordingSaveDialog-1YvzwTzo.js → RecordingSaveDialog-DUtwgIME.js} +1 -1
  49. package/dist/client/assets/RecordingSaveDialog-DUtwgIME.js.br +0 -0
  50. package/dist/client/assets/RecordingSaveDialog-DUtwgIME.js.gz +0 -0
  51. package/dist/client/assets/{RightSidebar-CCk8ovoK.js → RightSidebar-BltjUFwI.js} +20 -20
  52. package/dist/client/assets/RightSidebar-BltjUFwI.js.br +0 -0
  53. package/dist/client/assets/RightSidebar-BltjUFwI.js.gz +0 -0
  54. package/dist/client/assets/SessionChatView-CdKfHRp8.js +13 -0
  55. package/dist/client/assets/SessionChatView-CdKfHRp8.js.br +0 -0
  56. package/dist/client/assets/SessionChatView-CdKfHRp8.js.gz +0 -0
  57. package/dist/client/assets/SessionResourceSidebar-DmQOydhf.js +2 -0
  58. package/dist/client/assets/SessionResourceSidebar-DmQOydhf.js.br +0 -0
  59. package/dist/client/assets/SessionResourceSidebar-DmQOydhf.js.gz +0 -0
  60. package/dist/client/assets/TodoWorkspace-Bh1C035B.js +1 -0
  61. package/dist/client/assets/TodoWorkspace-Bh1C035B.js.br +0 -0
  62. package/dist/client/assets/TodoWorkspace-Bh1C035B.js.gz +0 -0
  63. package/dist/client/assets/{abnfDiagram-VCTEODGH-CTqKSsYV.js → abnfDiagram-VCTEODGH-Cvf_KWZ0.js} +1 -1
  64. package/dist/client/assets/abnfDiagram-VCTEODGH-Cvf_KWZ0.js.br +0 -0
  65. package/dist/client/assets/abnfDiagram-VCTEODGH-Cvf_KWZ0.js.gz +0 -0
  66. package/dist/client/assets/app-DuUnqxq-.js +37 -0
  67. package/dist/client/assets/app-DuUnqxq-.js.br +0 -0
  68. package/dist/client/assets/app-DuUnqxq-.js.gz +0 -0
  69. package/dist/client/assets/{arc-CcvWcKBR.js → arc-UvdowQOf.js} +1 -1
  70. package/dist/client/assets/arc-UvdowQOf.js.br +0 -0
  71. package/dist/client/assets/arc-UvdowQOf.js.gz +0 -0
  72. package/dist/client/assets/{architectureDiagram-5GKGNRK7-B_2ae8Tt.js → architectureDiagram-5GKGNRK7-DotsbCCA.js} +1 -1
  73. package/dist/client/assets/architectureDiagram-5GKGNRK7-DotsbCCA.js.br +0 -0
  74. package/dist/client/assets/architectureDiagram-5GKGNRK7-DotsbCCA.js.gz +0 -0
  75. package/dist/client/assets/{arrow-down-DaWRHIlh.js → arrow-down-FGzRy9D-.js} +1 -1
  76. package/dist/client/assets/{arrow-up-DE9Z7GTI.js → arrow-up-DNkfesW0.js} +1 -1
  77. package/dist/client/assets/{blockDiagram-I7D4REHJ-CGXUOwJg.js → blockDiagram-I7D4REHJ-CoOfSG4k.js} +1 -1
  78. package/dist/client/assets/blockDiagram-I7D4REHJ-CoOfSG4k.js.br +0 -0
  79. package/dist/client/assets/blockDiagram-I7D4REHJ-CoOfSG4k.js.gz +0 -0
  80. package/dist/client/assets/{c4Diagram-7LVT6UL2-BSU3omYQ.js → c4Diagram-7LVT6UL2-BAfjgs8B.js} +1 -1
  81. package/dist/client/assets/c4Diagram-7LVT6UL2-BAfjgs8B.js.br +0 -0
  82. package/dist/client/assets/c4Diagram-7LVT6UL2-BAfjgs8B.js.gz +0 -0
  83. package/dist/client/assets/channel-BzMU9Wks.js +1 -0
  84. package/dist/client/assets/{chevron-left-ZgHOf4aC.js → chevron-left-xqARwD-7.js} +1 -1
  85. package/dist/client/assets/{chunk-2Q5K7J3B-B67WsCJN.js → chunk-2Q5K7J3B-DiiQ7BvG.js} +1 -1
  86. package/dist/client/assets/{chunk-5VM5RSS4-B8k7JXrn.js → chunk-5VM5RSS4-CczSK8wW.js} +1 -1
  87. package/dist/client/assets/{chunk-F27PBJKO-CP85XeHB.js → chunk-F27PBJKO-BI3Di4Ve.js} +1 -1
  88. package/dist/client/assets/chunk-F27PBJKO-BI3Di4Ve.js.br +0 -0
  89. package/dist/client/assets/chunk-F27PBJKO-BI3Di4Ve.js.gz +0 -0
  90. package/dist/client/assets/{chunk-IMKFNOWR-BjTbac0d.js → chunk-IMKFNOWR-Cvvs1wmn.js} +1 -1
  91. package/dist/client/assets/chunk-IMKFNOWR-Cvvs1wmn.js.br +0 -0
  92. package/dist/client/assets/chunk-IMKFNOWR-Cvvs1wmn.js.gz +0 -0
  93. package/dist/client/assets/{chunk-JWPE2WC7-vEdRTCxh.js → chunk-JWPE2WC7-lrJRD9WA.js} +1 -1
  94. package/dist/client/assets/{chunk-POPQ4Y6H-BI8tSW7F.js → chunk-POPQ4Y6H-CnPC9D8B.js} +1 -1
  95. package/dist/client/assets/{chunk-SVP7TREG-Dde8KTpr.js → chunk-SVP7TREG-BZfMhm64.js} +1 -1
  96. package/dist/client/assets/chunk-SVP7TREG-BZfMhm64.js.br +0 -0
  97. package/dist/client/assets/chunk-SVP7TREG-BZfMhm64.js.gz +0 -0
  98. package/dist/client/assets/{chunk-TICWLB2K-DIBgH5zV.js → chunk-TICWLB2K-DmkEaRK3.js} +1 -1
  99. package/dist/client/assets/chunk-TICWLB2K-DmkEaRK3.js.br +0 -0
  100. package/dist/client/assets/chunk-TICWLB2K-DmkEaRK3.js.gz +0 -0
  101. package/dist/client/assets/{chunk-XXDRQBXY-LSjj35mz.js → chunk-XXDRQBXY-BP9Lccpe.js} +1 -1
  102. package/dist/client/assets/circle-DGZOpG8V.js +1 -0
  103. package/dist/client/assets/classDiagram-ZZMXUADV-DtAtEoWU.js +1 -0
  104. package/dist/client/assets/classDiagram-v2-VYDZK3BY-DtAtEoWU.js +1 -0
  105. package/dist/client/assets/{clipboard-BGpbRBdi.js → clipboard-rLx5CzbY.js} +1 -1
  106. package/dist/client/assets/clipboardText-cZXParp1.js +1 -0
  107. package/dist/client/assets/clipboardText-cZXParp1.js.br +0 -0
  108. package/dist/client/assets/clipboardText-cZXParp1.js.gz +0 -0
  109. package/dist/client/assets/{cose-bilkent-JH36ORCC-v4utSIkX.js → cose-bilkent-JH36ORCC-0xPYMc2z.js} +1 -1
  110. package/dist/client/assets/cose-bilkent-JH36ORCC-0xPYMc2z.js.br +0 -0
  111. package/dist/client/assets/cose-bilkent-JH36ORCC-0xPYMc2z.js.gz +0 -0
  112. package/dist/client/assets/{cynefin-OW5HDTMX-BdbtIufa.js → cynefin-OW5HDTMX-BQ7-lCHm.js} +1 -1
  113. package/dist/client/assets/cynefin-OW5HDTMX-BQ7-lCHm.js.br +0 -0
  114. package/dist/client/assets/cynefin-OW5HDTMX-BQ7-lCHm.js.gz +0 -0
  115. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-B9EVx2-N.js → cynefinDiagram-5FMLGOSQ-CazHuSj1.js} +1 -1
  116. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CazHuSj1.js.br +0 -0
  117. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CazHuSj1.js.gz +0 -0
  118. package/dist/client/assets/{dagre-GXQ25YYZ-Do2YjWuC.js → dagre-GXQ25YYZ-CJNgsyHQ.js} +1 -1
  119. package/dist/client/assets/dagre-GXQ25YYZ-CJNgsyHQ.js.br +0 -0
  120. package/dist/client/assets/dagre-GXQ25YYZ-CJNgsyHQ.js.gz +0 -0
  121. package/dist/client/assets/{diagram-S7CK7UJ4-BnJa3bbo.js → diagram-S7CK7UJ4-D4xXIj1P.js} +1 -1
  122. package/dist/client/assets/diagram-S7CK7UJ4-D4xXIj1P.js.br +0 -0
  123. package/dist/client/assets/diagram-S7CK7UJ4-D4xXIj1P.js.gz +0 -0
  124. package/dist/client/assets/{diagram-UQ7AKVKN-C09N8-nE.js → diagram-UQ7AKVKN-BWhpL-35.js} +1 -1
  125. package/dist/client/assets/diagram-UQ7AKVKN-BWhpL-35.js.br +0 -0
  126. package/dist/client/assets/diagram-UQ7AKVKN-BWhpL-35.js.gz +0 -0
  127. package/dist/client/assets/{diagram-VSXAHHWV-mMv3O2zK.js → diagram-VSXAHHWV-DG9A7EgJ.js} +1 -1
  128. package/dist/client/assets/diagram-VSXAHHWV-DG9A7EgJ.js.br +0 -0
  129. package/dist/client/assets/diagram-VSXAHHWV-DG9A7EgJ.js.gz +0 -0
  130. package/dist/client/assets/{diagram-VX7I27RA-B0aepUKS.js → diagram-VX7I27RA-L5PSvynM.js} +1 -1
  131. package/dist/client/assets/diagram-VX7I27RA-L5PSvynM.js.br +0 -0
  132. package/dist/client/assets/diagram-VX7I27RA-L5PSvynM.js.gz +0 -0
  133. package/dist/client/assets/{diagram-Z3DM3KII-BstqsbCO.js → diagram-Z3DM3KII-moBH7ruR.js} +1 -1
  134. package/dist/client/assets/diagram-Z3DM3KII-moBH7ruR.js.br +0 -0
  135. package/dist/client/assets/diagram-Z3DM3KII-moBH7ruR.js.gz +0 -0
  136. package/dist/client/assets/{ebnfDiagram-PWID7BFC-CPINc9LK.js → ebnfDiagram-PWID7BFC-DEiGgcRP.js} +1 -1
  137. package/dist/client/assets/ebnfDiagram-PWID7BFC-DEiGgcRP.js.br +0 -0
  138. package/dist/client/assets/ebnfDiagram-PWID7BFC-DEiGgcRP.js.gz +0 -0
  139. package/dist/client/assets/{erDiagram-RLTQ6QDP-dUgaGLHP.js → erDiagram-RLTQ6QDP-BboIleYi.js} +1 -1
  140. package/dist/client/assets/erDiagram-RLTQ6QDP-BboIleYi.js.br +0 -0
  141. package/dist/client/assets/erDiagram-RLTQ6QDP-BboIleYi.js.gz +0 -0
  142. package/dist/client/assets/external-link-AZ3wjUg5.js +1 -0
  143. package/dist/client/assets/{flowDiagram-HODETNUW-4ottFlnS.js → flowDiagram-HODETNUW-COxz7Rda.js} +1 -1
  144. package/dist/client/assets/flowDiagram-HODETNUW-COxz7Rda.js.br +0 -0
  145. package/dist/client/assets/flowDiagram-HODETNUW-COxz7Rda.js.gz +0 -0
  146. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CZOkoivd.js → ganttDiagram-EL5Y4UJY-_XdRvgyZ.js} +1 -1
  147. package/dist/client/assets/ganttDiagram-EL5Y4UJY-_XdRvgyZ.js.br +0 -0
  148. package/dist/client/assets/ganttDiagram-EL5Y4UJY-_XdRvgyZ.js.gz +0 -0
  149. package/dist/client/assets/{git-compare-C7n2uha2.js → git-compare-90v75Jal.js} +1 -1
  150. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-kh9xx53r.js → gitGraphDiagram-WWUBYQGX-CBb9xBNW.js} +1 -1
  151. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-CBb9xBNW.js.br +0 -0
  152. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-CBb9xBNW.js.gz +0 -0
  153. package/dist/client/assets/index-ByrWASlZ.js +1 -0
  154. package/dist/client/assets/index-ByrWASlZ.js.br +0 -0
  155. package/dist/client/assets/index-ByrWASlZ.js.gz +0 -0
  156. package/dist/client/assets/{index-bfj9dYEg.css → index-nIgxJ6I3.css} +1 -1
  157. package/dist/client/assets/index-nIgxJ6I3.css.br +0 -0
  158. package/dist/client/assets/{index-bfj9dYEg.css.gz → index-nIgxJ6I3.css.gz} +0 -0
  159. package/dist/client/assets/{infoDiagram-27XIBGKW-zRkMruS-.js → infoDiagram-27XIBGKW-DjLdeNZi.js} +1 -1
  160. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DPntAz12.js → ishikawaDiagram-5VMMS53U-Bcr-lhIE.js} +1 -1
  161. package/dist/client/assets/ishikawaDiagram-5VMMS53U-Bcr-lhIE.js.br +0 -0
  162. package/dist/client/assets/ishikawaDiagram-5VMMS53U-Bcr-lhIE.js.gz +0 -0
  163. package/dist/client/assets/{journeyDiagram-3NMN7TZE-B074bD6a.js → journeyDiagram-3NMN7TZE-3vK6s9Pq.js} +1 -1
  164. package/dist/client/assets/journeyDiagram-3NMN7TZE-3vK6s9Pq.js.br +0 -0
  165. package/dist/client/assets/journeyDiagram-3NMN7TZE-3vK6s9Pq.js.gz +0 -0
  166. package/dist/client/assets/{kanban-definition-UXKFOSKX-wPbpE7ij.js → kanban-definition-UXKFOSKX-DqDYDca0.js} +1 -1
  167. package/dist/client/assets/kanban-definition-UXKFOSKX-DqDYDca0.js.br +0 -0
  168. package/dist/client/assets/kanban-definition-UXKFOSKX-DqDYDca0.js.gz +0 -0
  169. package/dist/client/assets/{layout-D-nTHjVE.js → layout-C7_WwzCP.js} +1 -1
  170. package/dist/client/assets/layout-C7_WwzCP.js.br +0 -0
  171. package/dist/client/assets/layout-C7_WwzCP.js.gz +0 -0
  172. package/dist/client/assets/{linear-BVxgfw5H.js → linear-BQCRhl6P.js} +1 -1
  173. package/dist/client/assets/linear-BQCRhl6P.js.br +0 -0
  174. package/dist/client/assets/linear-BQCRhl6P.js.gz +0 -0
  175. package/dist/client/assets/{link-D-fkBp5k.js → link-Cq14tNBm.js} +3 -3
  176. package/dist/client/assets/link-Cq14tNBm.js.br +0 -0
  177. package/dist/client/assets/link-Cq14tNBm.js.gz +0 -0
  178. package/dist/client/assets/{list-tree-DKTcSR9r.js → list-tree-C281zrdg.js} +1 -1
  179. package/dist/client/assets/{loader-circle-DZn9iP0u.js → loader-circle-Df0zpx5N.js} +1 -1
  180. package/dist/client/assets/{maximize-2-dFjMEqgh.js → maximize-2-CovPxWdw.js} +1 -1
  181. package/dist/client/assets/{mermaid.core-D89ctjDO.js → mermaid.core-DGsccxt-.js} +5 -5
  182. package/dist/client/assets/mermaid.core-DGsccxt-.js.br +0 -0
  183. package/dist/client/assets/mermaid.core-DGsccxt-.js.gz +0 -0
  184. package/dist/client/assets/{mindmap-definition-YA3MSWOX-1TrbOKNK.js → mindmap-definition-YA3MSWOX-l0eF1PQE.js} +1 -1
  185. package/dist/client/assets/mindmap-definition-YA3MSWOX-l0eF1PQE.js.br +0 -0
  186. package/dist/client/assets/mindmap-definition-YA3MSWOX-l0eF1PQE.js.gz +0 -0
  187. package/dist/client/assets/{passwordBootstrap-8XHlXyYk.js → passwordBootstrap-B5VzheZz.js} +2 -2
  188. package/dist/client/assets/passwordBootstrap-B5VzheZz.js.br +0 -0
  189. package/dist/client/assets/passwordBootstrap-B5VzheZz.js.gz +0 -0
  190. package/dist/client/assets/{pegDiagram-XKGWAZYB-CJYo1Bz4.js → pegDiagram-XKGWAZYB-fRrxGIDM.js} +1 -1
  191. package/dist/client/assets/pegDiagram-XKGWAZYB-fRrxGIDM.js.br +0 -0
  192. package/dist/client/assets/pegDiagram-XKGWAZYB-fRrxGIDM.js.gz +0 -0
  193. package/dist/client/assets/{pieDiagram-E7YTZNPT-DyE6_2FS.js → pieDiagram-E7YTZNPT-B-EBa3qN.js} +1 -1
  194. package/dist/client/assets/pieDiagram-E7YTZNPT-B-EBa3qN.js.br +0 -0
  195. package/dist/client/assets/pieDiagram-E7YTZNPT-B-EBa3qN.js.gz +0 -0
  196. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-OgNN7-oZ.js → quadrantDiagram-AXDQQJYC-Dj4e6f4h.js} +1 -1
  197. package/dist/client/assets/quadrantDiagram-AXDQQJYC-Dj4e6f4h.js.br +0 -0
  198. package/dist/client/assets/quadrantDiagram-AXDQQJYC-Dj4e6f4h.js.gz +0 -0
  199. package/dist/client/assets/{quote-QwQvV6RF.js → quote-COQfrXhi.js} +1 -1
  200. package/dist/client/assets/{railroadDiagram-O6MQD6OU-Dmqw_B10.js → railroadDiagram-O6MQD6OU-CEMppxTC.js} +1 -1
  201. package/dist/client/assets/railroadDiagram-O6MQD6OU-CEMppxTC.js.br +0 -0
  202. package/dist/client/assets/railroadDiagram-O6MQD6OU-CEMppxTC.js.gz +0 -0
  203. package/dist/client/assets/{rdpSession-tgxFIJYE.js → rdpSession-C5rS-ImV.js} +1 -1
  204. package/dist/client/assets/rdpSession-C5rS-ImV.js.br +0 -0
  205. package/dist/client/assets/rdpSession-C5rS-ImV.js.gz +0 -0
  206. package/dist/client/assets/{requirementDiagram-BXWQKSXE-nZK7--1f.js → requirementDiagram-BXWQKSXE-Dri1k4_x.js} +1 -1
  207. package/dist/client/assets/requirementDiagram-BXWQKSXE-Dri1k4_x.js.br +0 -0
  208. package/dist/client/assets/requirementDiagram-BXWQKSXE-Dri1k4_x.js.gz +0 -0
  209. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-Db_TVWjx.js → sankeyDiagram-P5KCCOFB-CMsL_tYL.js} +1 -1
  210. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CMsL_tYL.js.br +0 -0
  211. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CMsL_tYL.js.gz +0 -0
  212. package/dist/client/assets/search-Dg6HWygj.js +1 -0
  213. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-B7TK9j0_.js → sequenceDiagram-WJ2MYXX4-4_4hZtOd.js} +1 -1
  214. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-4_4hZtOd.js.br +0 -0
  215. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-4_4hZtOd.js.gz +0 -0
  216. package/dist/client/assets/{settings-2-9tlRImVo.js → settings-2-iGqzPez0.js} +1 -1
  217. package/dist/client/assets/{sizeCapture-INFHLROL-roX-pGgF.js → sizeCapture-INFHLROL-3QA6qj2j.js} +1 -1
  218. package/dist/client/assets/sizeCapture-INFHLROL-3QA6qj2j.js.br +0 -0
  219. package/dist/client/assets/sizeCapture-INFHLROL-3QA6qj2j.js.gz +0 -0
  220. package/dist/client/assets/{stateDiagram-D77RDMKH-BdBm0h1F.js → stateDiagram-D77RDMKH-90IFPhD9.js} +1 -1
  221. package/dist/client/assets/stateDiagram-D77RDMKH-90IFPhD9.js.br +0 -0
  222. package/dist/client/assets/stateDiagram-D77RDMKH-90IFPhD9.js.gz +0 -0
  223. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CH-yvmL4.js +1 -0
  224. package/dist/client/assets/sun-BAMMjiA8.js +1 -0
  225. package/dist/client/assets/{swimlanes-42K2YHIH-DUulb0LD.js → swimlanes-42K2YHIH-BuHieVWC.js} +1 -1
  226. package/dist/client/assets/swimlanes-42K2YHIH-BuHieVWC.js.br +0 -0
  227. package/dist/client/assets/swimlanes-42K2YHIH-BuHieVWC.js.gz +0 -0
  228. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-P_rDqbtg.js +8 -0
  229. package/dist/client/assets/{syntaxHighlight-Bgt0lmWx.js → syntaxHighlight-Cz6TPDW9.js} +1 -1
  230. package/dist/client/assets/syntaxHighlight-Cz6TPDW9.js.br +0 -0
  231. package/dist/client/assets/syntaxHighlight-Cz6TPDW9.js.gz +0 -0
  232. package/dist/client/assets/{timeline-definition-24CTP7MA-CIQuxjVB.js → timeline-definition-24CTP7MA-C7FpaNwf.js} +1 -1
  233. package/dist/client/assets/timeline-definition-24CTP7MA-C7FpaNwf.js.br +0 -0
  234. package/dist/client/assets/timeline-definition-24CTP7MA-C7FpaNwf.js.gz +0 -0
  235. package/dist/client/assets/{triangle-alert-LpKfIn7N.js → triangle-alert-Oj-OsZDw.js} +1 -1
  236. package/dist/client/assets/{unplug-CLBg6VOD.js → unplug-DN2SNXUL.js} +1 -1
  237. package/dist/client/assets/{vennDiagram-4TSXK5OY-CMRFApvJ.js → vennDiagram-4TSXK5OY-CxoHHVcs.js} +1 -1
  238. package/dist/client/assets/vennDiagram-4TSXK5OY-CxoHHVcs.js.br +0 -0
  239. package/dist/client/assets/vennDiagram-4TSXK5OY-CxoHHVcs.js.gz +0 -0
  240. package/dist/client/assets/{videoCompression-DjyAuV3i.js → videoCompression-rr2lu3uy.js} +1 -1
  241. package/dist/client/assets/videoCompression-rr2lu3uy.js.br +0 -0
  242. package/dist/client/assets/videoCompression-rr2lu3uy.js.gz +0 -0
  243. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-BEb3x-zl.js → wardleyDiagram-VM6X3IG4-B4Hsh-Ad.js} +1 -1
  244. package/dist/client/assets/wardleyDiagram-VM6X3IG4-B4Hsh-Ad.js.br +0 -0
  245. package/dist/client/assets/wardleyDiagram-VM6X3IG4-B4Hsh-Ad.js.gz +0 -0
  246. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-DUvoeYl2.js → xychartDiagram-S5SC5T6Z-CghzsxQv.js} +1 -1
  247. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CghzsxQv.js.br +0 -0
  248. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-DUvoeYl2.js.gz → xychartDiagram-S5SC5T6Z-CghzsxQv.js.gz} +0 -0
  249. package/dist/client/index.html +2 -2
  250. package/dist/client/index.html.br +0 -0
  251. package/dist/client/index.html.gz +0 -0
  252. package/dist/client/sw.js +1 -1
  253. package/dist/client/sw.js.br +0 -0
  254. package/dist/client/sw.js.gz +0 -0
  255. package/dist/server/agent/chatUIPrompt.js +14 -0
  256. package/dist/server/agent/collaborationCli.js +8 -2
  257. package/dist/server/agent/collaborationPrompt.js +2 -2
  258. package/dist/server/agent/collaborationStore.js +17 -0
  259. package/dist/server/agent/sessionChatRoutes.js +23 -1
  260. package/dist/server/cli.js +5 -0
  261. package/dist/server/federation/accessPolicy.js +3 -0
  262. package/dist/server/federation/authorization.js +7 -3
  263. package/dist/server/federation/invitations.js +14 -7
  264. package/dist/server/federation/routeInvitations.js +5 -1
  265. package/dist/server/federation/runtime.js +8 -1
  266. package/dist/server/shared/chatPresentation.js +36 -0
  267. package/dist/server/shared/chatUILibrary.js +26 -0
  268. package/dist/server/shared/sessionAppearance.js +17 -0
  269. package/package.json +4 -1
  270. package/runtime-manifest.json +4 -4
  271. package/scripts/ensure-node-pty.cjs +22 -7
  272. package/scripts/postinstall.mjs +5 -4
  273. package/dist/client/assets/AndroidMirrorView-D9CMPmet.js.br +0 -0
  274. package/dist/client/assets/AndroidMirrorView-D9CMPmet.js.gz +0 -0
  275. package/dist/client/assets/App-CqLXOAnv.js +0 -178
  276. package/dist/client/assets/App-CqLXOAnv.js.br +0 -0
  277. package/dist/client/assets/App-CqLXOAnv.js.gz +0 -0
  278. package/dist/client/assets/ArchitecturePanel-Dlnd9PH-.js.br +0 -0
  279. package/dist/client/assets/ArchitecturePanel-Dlnd9PH-.js.gz +0 -0
  280. package/dist/client/assets/ChangeWalkthroughPanel-BYb27GTC.js +0 -2
  281. package/dist/client/assets/ChangeWalkthroughPanel-BYb27GTC.js.br +0 -0
  282. package/dist/client/assets/ChangeWalkthroughPanel-BYb27GTC.js.gz +0 -0
  283. package/dist/client/assets/CollaborationMainWorkspace-BJ_pbIlW.js +0 -1
  284. package/dist/client/assets/CollaborationMainWorkspace-BJ_pbIlW.js.br +0 -0
  285. package/dist/client/assets/CollaborationMainWorkspace-BJ_pbIlW.js.gz +0 -0
  286. package/dist/client/assets/ComputerControlView-VNUyl2Gb.js.br +0 -0
  287. package/dist/client/assets/ComputerControlView-VNUyl2Gb.js.gz +0 -0
  288. package/dist/client/assets/DagPlayground-Bzu6gfYW.js +0 -1
  289. package/dist/client/assets/DagPlayground-Bzu6gfYW.js.br +0 -0
  290. package/dist/client/assets/DagPlayground-Bzu6gfYW.js.gz +0 -0
  291. package/dist/client/assets/DiffLab-CKBHu65J.js.br +0 -0
  292. package/dist/client/assets/DiffLab-CKBHu65J.js.gz +0 -0
  293. package/dist/client/assets/DiffReview-DAUBgpsh.js +0 -1
  294. package/dist/client/assets/DiffReview-DAUBgpsh.js.br +0 -0
  295. package/dist/client/assets/DiffReview-DAUBgpsh.js.gz +0 -0
  296. package/dist/client/assets/DiffReviewLab--PbhIP71.js.br +0 -0
  297. package/dist/client/assets/DiffReviewLab--PbhIP71.js.gz +0 -0
  298. package/dist/client/assets/DiffViewer-Cg3GhKcU.js.br +0 -0
  299. package/dist/client/assets/DiffViewer-Cg3GhKcU.js.gz +0 -0
  300. package/dist/client/assets/GitLoadingSkeleton-ieGTuTuO.js +0 -1
  301. package/dist/client/assets/GitLoadingSkeleton-ieGTuTuO.js.br +0 -0
  302. package/dist/client/assets/GitLoadingSkeleton-ieGTuTuO.js.gz +0 -0
  303. package/dist/client/assets/MarkdownPreview-b_bwDNcY.js.br +0 -0
  304. package/dist/client/assets/MarkdownPreview-b_bwDNcY.js.gz +0 -0
  305. package/dist/client/assets/ModelPreview-C9nka14O.js.br +0 -0
  306. package/dist/client/assets/ModelPreview-C9nka14O.js.gz +0 -0
  307. package/dist/client/assets/RecordingSaveDialog-1YvzwTzo.js.br +0 -0
  308. package/dist/client/assets/RecordingSaveDialog-1YvzwTzo.js.gz +0 -0
  309. package/dist/client/assets/RightSidebar-CCk8ovoK.js.br +0 -0
  310. package/dist/client/assets/RightSidebar-CCk8ovoK.js.gz +0 -0
  311. package/dist/client/assets/SessionChatView-DORRzcNq.js +0 -13
  312. package/dist/client/assets/SessionChatView-DORRzcNq.js.br +0 -0
  313. package/dist/client/assets/SessionChatView-DORRzcNq.js.gz +0 -0
  314. package/dist/client/assets/SessionResourceSidebar-De0sHmdG.js +0 -2
  315. package/dist/client/assets/SessionResourceSidebar-De0sHmdG.js.br +0 -0
  316. package/dist/client/assets/SessionResourceSidebar-De0sHmdG.js.gz +0 -0
  317. package/dist/client/assets/TodoWorkspace-BHHT954s.js +0 -1
  318. package/dist/client/assets/TodoWorkspace-BHHT954s.js.br +0 -0
  319. package/dist/client/assets/TodoWorkspace-BHHT954s.js.gz +0 -0
  320. package/dist/client/assets/abnfDiagram-VCTEODGH-CTqKSsYV.js.br +0 -0
  321. package/dist/client/assets/abnfDiagram-VCTEODGH-CTqKSsYV.js.gz +0 -0
  322. package/dist/client/assets/app-stNRNTO-.js +0 -37
  323. package/dist/client/assets/app-stNRNTO-.js.br +0 -0
  324. package/dist/client/assets/app-stNRNTO-.js.gz +0 -0
  325. package/dist/client/assets/arc-CcvWcKBR.js.br +0 -0
  326. package/dist/client/assets/arc-CcvWcKBR.js.gz +0 -0
  327. package/dist/client/assets/architectureDiagram-5GKGNRK7-B_2ae8Tt.js.br +0 -0
  328. package/dist/client/assets/architectureDiagram-5GKGNRK7-B_2ae8Tt.js.gz +0 -0
  329. package/dist/client/assets/blockDiagram-I7D4REHJ-CGXUOwJg.js.br +0 -0
  330. package/dist/client/assets/blockDiagram-I7D4REHJ-CGXUOwJg.js.gz +0 -0
  331. package/dist/client/assets/c4Diagram-7LVT6UL2-BSU3omYQ.js.br +0 -0
  332. package/dist/client/assets/c4Diagram-7LVT6UL2-BSU3omYQ.js.gz +0 -0
  333. package/dist/client/assets/channel-CREmT4wq.js +0 -1
  334. package/dist/client/assets/chunk-F27PBJKO-CP85XeHB.js.br +0 -0
  335. package/dist/client/assets/chunk-F27PBJKO-CP85XeHB.js.gz +0 -0
  336. package/dist/client/assets/chunk-IMKFNOWR-BjTbac0d.js.br +0 -0
  337. package/dist/client/assets/chunk-IMKFNOWR-BjTbac0d.js.gz +0 -0
  338. package/dist/client/assets/chunk-SVP7TREG-Dde8KTpr.js.br +0 -0
  339. package/dist/client/assets/chunk-SVP7TREG-Dde8KTpr.js.gz +0 -0
  340. package/dist/client/assets/chunk-TICWLB2K-DIBgH5zV.js.br +0 -0
  341. package/dist/client/assets/chunk-TICWLB2K-DIBgH5zV.js.gz +0 -0
  342. package/dist/client/assets/classDiagram-ZZMXUADV-CTHA5GVu.js +0 -1
  343. package/dist/client/assets/classDiagram-v2-VYDZK3BY-CTHA5GVu.js +0 -1
  344. package/dist/client/assets/clipboardText-B0NK9NMn.js +0 -1
  345. package/dist/client/assets/clipboardText-B0NK9NMn.js.br +0 -0
  346. package/dist/client/assets/clipboardText-B0NK9NMn.js.gz +0 -0
  347. package/dist/client/assets/cose-bilkent-JH36ORCC-v4utSIkX.js.br +0 -0
  348. package/dist/client/assets/cose-bilkent-JH36ORCC-v4utSIkX.js.gz +0 -0
  349. package/dist/client/assets/cynefin-OW5HDTMX-BdbtIufa.js.br +0 -0
  350. package/dist/client/assets/cynefin-OW5HDTMX-BdbtIufa.js.gz +0 -0
  351. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-B9EVx2-N.js.br +0 -0
  352. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-B9EVx2-N.js.gz +0 -0
  353. package/dist/client/assets/dagre-GXQ25YYZ-Do2YjWuC.js.br +0 -0
  354. package/dist/client/assets/dagre-GXQ25YYZ-Do2YjWuC.js.gz +0 -0
  355. package/dist/client/assets/diagram-S7CK7UJ4-BnJa3bbo.js.br +0 -0
  356. package/dist/client/assets/diagram-S7CK7UJ4-BnJa3bbo.js.gz +0 -0
  357. package/dist/client/assets/diagram-UQ7AKVKN-C09N8-nE.js.br +0 -0
  358. package/dist/client/assets/diagram-UQ7AKVKN-C09N8-nE.js.gz +0 -0
  359. package/dist/client/assets/diagram-VSXAHHWV-mMv3O2zK.js.br +0 -0
  360. package/dist/client/assets/diagram-VSXAHHWV-mMv3O2zK.js.gz +0 -0
  361. package/dist/client/assets/diagram-VX7I27RA-B0aepUKS.js.br +0 -0
  362. package/dist/client/assets/diagram-VX7I27RA-B0aepUKS.js.gz +0 -0
  363. package/dist/client/assets/diagram-Z3DM3KII-BstqsbCO.js.br +0 -0
  364. package/dist/client/assets/diagram-Z3DM3KII-BstqsbCO.js.gz +0 -0
  365. package/dist/client/assets/ebnfDiagram-PWID7BFC-CPINc9LK.js.br +0 -0
  366. package/dist/client/assets/ebnfDiagram-PWID7BFC-CPINc9LK.js.gz +0 -0
  367. package/dist/client/assets/erDiagram-RLTQ6QDP-dUgaGLHP.js.br +0 -0
  368. package/dist/client/assets/erDiagram-RLTQ6QDP-dUgaGLHP.js.gz +0 -0
  369. package/dist/client/assets/flowDiagram-HODETNUW-4ottFlnS.js.br +0 -0
  370. package/dist/client/assets/flowDiagram-HODETNUW-4ottFlnS.js.gz +0 -0
  371. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CZOkoivd.js.br +0 -0
  372. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CZOkoivd.js.gz +0 -0
  373. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-kh9xx53r.js.br +0 -0
  374. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-kh9xx53r.js.gz +0 -0
  375. package/dist/client/assets/index-bfj9dYEg.css.br +0 -0
  376. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DPntAz12.js.br +0 -0
  377. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DPntAz12.js.gz +0 -0
  378. package/dist/client/assets/journeyDiagram-3NMN7TZE-B074bD6a.js.br +0 -0
  379. package/dist/client/assets/journeyDiagram-3NMN7TZE-B074bD6a.js.gz +0 -0
  380. package/dist/client/assets/kanban-definition-UXKFOSKX-wPbpE7ij.js.br +0 -0
  381. package/dist/client/assets/kanban-definition-UXKFOSKX-wPbpE7ij.js.gz +0 -0
  382. package/dist/client/assets/layout-D-nTHjVE.js.br +0 -0
  383. package/dist/client/assets/layout-D-nTHjVE.js.gz +0 -0
  384. package/dist/client/assets/linear-BVxgfw5H.js.br +0 -0
  385. package/dist/client/assets/linear-BVxgfw5H.js.gz +0 -0
  386. package/dist/client/assets/link-D-fkBp5k.js.br +0 -0
  387. package/dist/client/assets/link-D-fkBp5k.js.gz +0 -0
  388. package/dist/client/assets/mermaid.core-D89ctjDO.js.br +0 -0
  389. package/dist/client/assets/mermaid.core-D89ctjDO.js.gz +0 -0
  390. package/dist/client/assets/mindmap-definition-YA3MSWOX-1TrbOKNK.js.br +0 -0
  391. package/dist/client/assets/mindmap-definition-YA3MSWOX-1TrbOKNK.js.gz +0 -0
  392. package/dist/client/assets/passwordBootstrap-8XHlXyYk.js.br +0 -0
  393. package/dist/client/assets/passwordBootstrap-8XHlXyYk.js.gz +0 -0
  394. package/dist/client/assets/pegDiagram-XKGWAZYB-CJYo1Bz4.js.br +0 -0
  395. package/dist/client/assets/pegDiagram-XKGWAZYB-CJYo1Bz4.js.gz +0 -0
  396. package/dist/client/assets/pieDiagram-E7YTZNPT-DyE6_2FS.js.br +0 -0
  397. package/dist/client/assets/pieDiagram-E7YTZNPT-DyE6_2FS.js.gz +0 -0
  398. package/dist/client/assets/quadrantDiagram-AXDQQJYC-OgNN7-oZ.js.br +0 -0
  399. package/dist/client/assets/quadrantDiagram-AXDQQJYC-OgNN7-oZ.js.gz +0 -0
  400. package/dist/client/assets/railroadDiagram-O6MQD6OU-Dmqw_B10.js.br +0 -0
  401. package/dist/client/assets/railroadDiagram-O6MQD6OU-Dmqw_B10.js.gz +0 -0
  402. package/dist/client/assets/rdpSession-tgxFIJYE.js.br +0 -0
  403. package/dist/client/assets/rdpSession-tgxFIJYE.js.gz +0 -0
  404. package/dist/client/assets/requirementDiagram-BXWQKSXE-nZK7--1f.js.br +0 -0
  405. package/dist/client/assets/requirementDiagram-BXWQKSXE-nZK7--1f.js.gz +0 -0
  406. package/dist/client/assets/sankeyDiagram-P5KCCOFB-Db_TVWjx.js.br +0 -0
  407. package/dist/client/assets/sankeyDiagram-P5KCCOFB-Db_TVWjx.js.gz +0 -0
  408. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-B7TK9j0_.js.br +0 -0
  409. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-B7TK9j0_.js.gz +0 -0
  410. package/dist/client/assets/sizeCapture-INFHLROL-roX-pGgF.js.br +0 -0
  411. package/dist/client/assets/sizeCapture-INFHLROL-roX-pGgF.js.gz +0 -0
  412. package/dist/client/assets/sparkles-B64EiCUM.js +0 -1
  413. package/dist/client/assets/stateDiagram-D77RDMKH-BdBm0h1F.js.br +0 -0
  414. package/dist/client/assets/stateDiagram-D77RDMKH-BdBm0h1F.js.gz +0 -0
  415. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-ClZ2Tfz8.js +0 -1
  416. package/dist/client/assets/sun-BFxiDkET.js +0 -1
  417. package/dist/client/assets/swimlanes-42K2YHIH-DUulb0LD.js.br +0 -0
  418. package/dist/client/assets/swimlanes-42K2YHIH-DUulb0LD.js.gz +0 -0
  419. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-CGI6rSok.js +0 -8
  420. package/dist/client/assets/syntaxHighlight-Bgt0lmWx.js.br +0 -0
  421. package/dist/client/assets/syntaxHighlight-Bgt0lmWx.js.gz +0 -0
  422. package/dist/client/assets/timeline-definition-24CTP7MA-CIQuxjVB.js.br +0 -0
  423. package/dist/client/assets/timeline-definition-24CTP7MA-CIQuxjVB.js.gz +0 -0
  424. package/dist/client/assets/vennDiagram-4TSXK5OY-CMRFApvJ.js.br +0 -0
  425. package/dist/client/assets/vennDiagram-4TSXK5OY-CMRFApvJ.js.gz +0 -0
  426. package/dist/client/assets/videoCompression-DjyAuV3i.js.br +0 -0
  427. package/dist/client/assets/videoCompression-DjyAuV3i.js.gz +0 -0
  428. package/dist/client/assets/wardleyDiagram-VM6X3IG4-BEb3x-zl.js.br +0 -0
  429. package/dist/client/assets/wardleyDiagram-VM6X3IG4-BEb3x-zl.js.gz +0 -0
  430. package/dist/client/assets/xychartDiagram-S5SC5T6Z-DUvoeYl2.js.br +0 -0
@@ -0,0 +1 @@
1
+ import{e9 as $,cn as B,bh as U,bK as Y,dR as q,cg as e,z as F,c3 as k,R as C,S as H}from"./app-DuUnqxq-.js";import{b as s}from"./dnd-BCFAPC0L.js";import{m as n,c as J,k as Q,P as X,W as Z,C as ee,o as te,e as se}from"./App-DEZ2i9ZZ.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./link-Cq14tNBm.js";import"./AndroidMirrorView-DW9oRr0w.js";import"./v4-EwEgHOG0.js";import"./RecordingSaveDialog-DUtwgIME.js";import"./use-gesture-react.esm-DYpdiE_k.js";import"./gestureArbiter-DszagC-d.js";import"./arrow-up-DNkfesW0.js";import"./unplug-DN2SNXUL.js";import"./circle-DGZOpG8V.js";import"./swiper-DJjq1TYT.js";import"./loader-circle-Df0zpx5N.js";import"./clipboardText-cZXParp1.js";import"./GitLoadingSkeleton-DYrDIDF1.js";import"./clipboard-rLx5CzbY.js";import"./triangle-alert-Oj-OsZDw.js";import"./search-Dg6HWygj.js";import"./external-link-AZ3wjUg5.js";import"./maximize-2-CovPxWdw.js";import"./git-compare-90v75Jal.js";import"./arrow-down-FGzRy9D-.js";import"./sun-BAMMjiA8.js";function Pe({groupId:a,activeSessionId:u,onOpenSidebar:w,leftSidebarVisible:S=!1,onToggleRightSidebar:p,rightSidebarOpen:x=!1,defaultSessionMode:E}){const b=s.useRef(null);s.useEffect(()=>{b.current?.focus()},[]);const[i,h]=s.useState(null),[R,P]=s.useState([]),[l,d]=s.useState(null),[g,D]=s.useState(null),[f,z]=s.useState(null),[G,T]=s.useState(null),r=$(),[L,j]=s.useState(!1);s.useEffect(()=>{if(r==="ready"){j(!1);return}const t=setTimeout(()=>j(!0),1e3);return()=>clearTimeout(t)},[r]);const V=n(t=>t.view),W=n(t=>t.drafts),y=n(t=>t.setDraft),[A,M]=s.useState(a),c=s.useCallback(async()=>{try{const t=await B();h(t),d(null)}catch(t){d(t instanceof Error?t.message:"协作组加载失败")}},[]);s.useEffect(()=>{let t=!1;U().then(o=>{t||P(o)}).catch(()=>{}),Y().then(o=>{if(t)return;const O=o.collaborationPanels?.[J()]?.drafts;for(const[N,_]of Object.entries(O??{}))n.getState().drafts[N]||y(N,_)}).catch(()=>{});const I=q(o=>{t||(h(o),d(null))}),K=Q(()=>{navigator.onLine!==!1&&c()},1e4,[H,"pageshow"]);return()=>{t=!0,I(),K()}},[c]);const m=i?.groups.find(t=>t.id===a),v=async t=>{await se(t),n.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",{"data-termdock-window-header":"true",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:[!S&&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:w,children:e.jsx(X,{size:17})}),e.jsx(Z,{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:m?.name??"协作工作区"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:m?`${m.sessionIds.length} 位成员`:"正在连接工作组"})]}),p&&e.jsx("button",{type:"button","aria-label":"文件侧栏",title:"文件侧栏","aria-pressed":x,className:`inline-flex min-h-11 min-w-11 items-center justify-center rounded-lg ${x?"bg-surface-2 text-primary":"text-muted-foreground hover:bg-surface-2"}`,onClick:p,children:e.jsx(F,{size:17})})]}),e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col px-4 py-2 sm:px-6",children:[(L||k(l))&&e.jsxs("div",{role:"status",className:"mb-2 flex shrink-0 items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(C,{size:13,className:r==="offline"?"":"animate-spin"}),e.jsx("span",{children:r==="offline"?"网络已断开,联网后自动恢复":"正在恢复连接,当前结果和草稿已保留"})]}),(g||l&&r==="ready"&&!k(l))&&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||l}),e.jsx("button",{type:"button","aria-label":"重新加载协作组",className:"min-h-11 px-3",onClick:()=>{c()},children:e.jsx(C,{size:14})})]}),f&&e.jsx("p",{role:"status",className:"mb-3 shrink-0 text-xs text-primary",children:f}),i?m?e.jsx(ee,{fullWorkspace:!0,initialView:V,active:!0,notice:f,groups:i.groups,sessions:i.sessions,agents:R,sessionsState:"loaded",selectedGroupId:A,setSelectedGroupId:M,initialGroupId:a,activeSessionId:u,initialDrafts:W,onDraftChange:y,docked:!1,inputKeySuffix:"main",floatingVisible:!0,floating:!1,onOpenSession:v,onOpenTaskSession:v,onDockMessages:u?async()=>{await te(a,u)}:void 0,defaultSessionMode:E,busy:G,setBusy:T,setError:D,setNotice:z,refresh:c}):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{Pe as default};
@@ -1,2 +1,2 @@
1
- import{cc as o}from"./app-stNRNTO-.js";import{b as s}from"./dnd-BCFAPC0L.js";import{c as i}from"./MarkdownPreview-b_bwDNcY.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./use-gesture-react.esm-DYpdiE_k.js";import"./swiper-DJjq1TYT.js";import"./syntaxHighlight-Bgt0lmWx.js";import"./list-tree-DKTcSR9r.js";function w({content:e}){const r=s.useMemo(()=>i(e.split(`
1
+ import{cg as o}from"./app-DuUnqxq-.js";import{b as s}from"./dnd-BCFAPC0L.js";import{c as i}from"./MarkdownPreview-CsJGsDRL.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./use-gesture-react.esm-DYpdiE_k.js";import"./swiper-DJjq1TYT.js";import"./syntaxHighlight-Cz6TPDW9.js";import"./list-tree-C281zrdg.js";function w({content:e}){const r=s.useMemo(()=>i(e.split(`
2
2
  `),null,null),[e]);return o.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:r.map((t,n)=>o.jsx("div",{className:"min-w-0",children:typeof t.content=="function"?t.content(null):t.content},n))})}export{w as default};
@@ -1,6 +1,6 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/rdpSession-tgxFIJYE.js","assets/app-stNRNTO-.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-Dea8wJF3.js","assets/index-bfj9dYEg.css","assets/chevron-left-ZgHOf4aC.js","assets/loader-circle-DZn9iP0u.js","assets/unplug-CLBg6VOD.js","assets/clipboard-BGpbRBdi.js","assets/maximize-2-dFjMEqgh.js","assets/settings-2-9tlRImVo.js"])))=>i.map(i=>d[i]);
2
- import{aR as it,ee as Mt,aV as rt,aG as jt,aF as Rt,dk as qt,e6 as Pt,cc as r,az as Gt,di as Be,cb as nt,_ as Nt,I as St,w as Zt,a0 as Jt,a1 as Tt}from"./app-stNRNTO-.js";import{b as c,r as ot}from"./dnd-BCFAPC0L.js";import{C as Qt}from"./chevron-left-ZgHOf4aC.js";import{L as Lt}from"./loader-circle-DZn9iP0u.js";import{U as At,K as He}from"./unplug-CLBg6VOD.js";import{C as st}from"./clipboard-BGpbRBdi.js";import{M as er}from"./maximize-2-dFjMEqgh.js";import{S as tr}from"./settings-2-9tlRImVo.js";const rr=[["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"}]],nr=it("mouse-pointer-2",rr);const or=[["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"}]],sr=it("zoom-in",or);const ar=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],cr=it("zoom-out",ar);function ir(n){const o=Mt(),s=o?.computers?.[0],t=JSON.stringify(s),[p,v]=c.useState(rt),[i,x]=c.useState(!1),[k,f]=c.useState("loading"),[E,y]=c.useState(0),[b,h]=c.useState([]),[X,B]=c.useState("idle"),g=c.useRef(p),R=c.useRef(0),N=c.useRef(0),T=c.useRef(""),z=c.useRef(null),j=c.useRef(new Set),O=c.useCallback(S=>{g.current=S(g.current),R.current++,v(g.current),f("saving")},[]);c.useEffect(()=>{const S=++N.current;R.current=0,T.current="",z.current=null,g.current=rt(),v(g.current),x(!1),f("loading"),h([]),B("idle");const M=new AbortController;if(o){const C=rt();return s&&(C.target="remote",C.remote={...C.remote,...s,port:String(s.port),platform:s.protocol==="vnc"?"mac":"windows",rememberLogin:!1},C.viewOnly=s.access!=="control"),g.current=C,T.current=JSON.stringify(C),v(C),x(!0),f("saved"),()=>{++N.current}}return fetch("/api/computer/preferences",{signal:M.signal}).then(async C=>{if(!C.ok)throw new Error("PREFERENCES_LOAD_FAILED");return await C.json()}).then(C=>{if(S!==N.current||M.signal.aborted)return;let F=jt(C.preferences);const w=R.current>0;if(!C.configured&&!w)try{const K=localStorage.getItem(`termdock:computer-host:${n}`);if(K){const te=/^(127\.0\.0\.1|localhost|::1|\[::1\])$/i.test(K)?"local":"remote";F=jt({...F,target:te,[te]:{...F[te],host:K,platform:localStorage.getItem(`termdock:computer-platform:${n}`)||F[te].platform,protocol:localStorage.getItem(`termdock:computer-protocol:${n}`)||"vnc",port:localStorage.getItem(`termdock:computer-rdp-port:${n}`)||"3389"}}),R.current++}}catch{}w||(g.current=F),T.current=C.configured?JSON.stringify(F):"",v(g.current),x(!0),f(C.configured?"saved":"saving"),h(Array.isArray(C.credentialKeys)?C.credentialKeys.filter(K=>typeof K=="string"):[]),B(C.credentialError?"error":"idle")}).catch(()=>{!M.signal.aborted&&S===N.current&&f("error")}),()=>{++N.current,M.abort();for(const C of j.current)C.abort();j.current.clear()}},[n,E,t,!!o]);const m=c.useCallback(()=>{if(o)return T.current=JSON.stringify(g.current),f("saved"),Promise.resolve(!0);if(z.current)return z.current;if(!i)return Promise.resolve(!1);const S=N.current,M=(async()=>{for(;T.current!==JSON.stringify(g.current);){const C=JSON.stringify(g.current),F=new AbortController;j.current.add(F),f("saving");try{if(!(await fetch("/api/computer/preferences",{method:"PUT",headers:{"Content-Type":"application/json"},body:C,signal:F.signal})).ok)throw new Error("PREFERENCES_SAVE_FAILED");if(S!==N.current)return!1;T.current=C}catch{return S===N.current&&f("error"),!1}finally{j.current.delete(F)}}return S===N.current&&f("saved"),!0})();return z.current=M,M.finally(()=>{z.current===M&&(z.current=null)}),M},[i,!!o]);c.useEffect(()=>{if(!i||T.current===JSON.stringify(p))return;const S=setTimeout(()=>{m()},300);return()=>clearTimeout(S)},[i,p,m]);const V=c.useCallback(async(S,M,C)=>{const F=N.current,w=new AbortController;S!=="use"&&B("saving");try{if(!await m()||F!==N.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");j.current.add(w);const K=await fetch(`/api/computer/credentials/${S}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({profile:M,...S==="save"?{password:C}:{}}),signal:w.signal});if(F!==N.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");if(!K.ok)throw new Error(S==="use"&&K.status===404?"COMPUTER_CREDENTIALS_MISSING":"COMPUTER_CREDENTIALS_FAILED");const H=await K.json();if(F!==N.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");const te=Rt(M);if(S==="save"&&h(ce=>[...new Set([...ce,te])]),S==="forget"&&h(ce=>ce.filter(Le=>Le!==te)),S==="use"&&(typeof H.password!="string"||!H.password))throw new Error("COMPUTER_CREDENTIALS_MISSING");return B("idle"),H.password}catch(K){throw F===N.current&&!w.signal.aborted&&B("error"),K}finally{j.current.delete(w)}},[m]);return{preferences:p,change:O,loaded:i,saveState:k,flush:m,credentialKeys:b,loginState:X,credentialRequest:V,retry:()=>i?void m():y(S=>S+1)}}const lr=1464686180;function ur(n){if(n.length<4||n[0]!==2)return n;const o=new DataView(n.buffer,n.byteOffset,n.byteLength),s=o.getUint16(2);if(n.length!==4+s*4)return n;const t=[];for(let i=4;i<n.length;i+=4){const x=o.getInt32(i);x!==lr&&t.push(x)}if(t.length===s)return n;const p=new Uint8Array(4+t.length*4),v=new DataView(p.buffer);return p.set(n.subarray(0,2)),v.setUint16(2,t.length),t.forEach((i,x)=>v.setInt32(4+x*4,i)),p}function dr(n,o){const s=n,t=s._sendEncodings;s._sendEncodings=()=>o.withMacCursorEncodings(()=>t.call(n))}class pr{binaryType="arraybuffer";protocol="";CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;onopen=null;onmessage=null;onerror=null;onclose=null;socket;sendingMacEncodings=!1;withMacCursorEncodings(o){const s=this.sendingMacEncodings;this.sendingMacEncodings=!0;try{o()}finally{this.sendingMacEncodings=s}}get readyState(){return this.socket.readyState}constructor(o,s){this.socket=qt(`/api/computer/ws?host=${encodeURIComponent(o)}`),this.socket.onopen=t=>this.onopen?.(t),this.socket.onerror=t=>this.onerror?.(t),this.socket.onclose=t=>{(t.code!==1e3||t.reason)&&s(t.reason||"COMPUTER_DISCONNECTED"),this.onclose?.(t)},this.socket.onmessage=t=>{try{const p=JSON.parse(t.data);if(p.type!=="data"||typeof p.data!="string"||!Number.isSafeInteger(p.seq))throw new Error("Invalid VNC record");const v=Uint8Array.from(atob(p.data),i=>i.charCodeAt(0));this.onmessage?.(new MessageEvent("message",{data:v.buffer})),this.socket.readyState===1&&this.socket.send(JSON.stringify({type:"ack",seq:p.seq}))}catch{s("COMPUTER_INVALID_MESSAGE"),this.close(),this.onclose?.(new CloseEvent("close",{code:4400}))}}}send(o){let s=ArrayBuffer.isView(o)?new Uint8Array(o.buffer,o.byteOffset,o.byteLength):new Uint8Array(o);this.sendingMacEncodings&&(s=ur(s));for(let t=0;t<s.length;t+=32*1024){const p=s.subarray(t,t+32768);let v="";for(const i of p)v+=String.fromCharCode(i);this.socket.send(JSON.stringify({type:"data",data:btoa(v)}))}}close(){this.socket.close()}}function mr(n){return n==="mac"||n==="linux"||n==="windows"}function fr(n){const o=n==="mac"?[65513,"MetaLeft"]:[65507,"ControlLeft"],s=n==="mac"?o:[65515,"MetaLeft"];return{escape:[[65307,"Escape"]],enter:[[65293,"Enter"]],backspace:[[65288,"Backspace"]],tab:[n==="mac"?o:[65513,"AltLeft"],[65289,"Tab"]],search:n==="mac"?[s,[32,"Space"]]:[s],copy:[o,[99,"KeyC"]],paste:[o,[118,"KeyV"]],up:[[65362,"ArrowUp"]],down:[[65364,"ArrowDown"]],left:[[65361,"ArrowLeft"]],right:[[65363,"ArrowRight"]]}}function hr(n){n._cursor?._hideCursor?.()}function gr(n){const o=n;return{position:()=>({x:Number.isFinite(o._mousePos.x)?o._display.absX(o._mousePos.x):o._fbWidth/2,y:Number.isFinite(o._mousePos.y)?o._display.absY(o._mousePos.y):o._fbHeight/2}),size:()=>({width:o._fbWidth,height:o._fbHeight}),surface:()=>o._canvas,send:(s,t,p)=>{const v=o._display.scale,i=(s-o._display.absX(0))*v,x=(t-o._display.absY(0))*v;o._mousePos={x:i,y:x},o._mouseMoveTimer!==null&&clearTimeout(o._mouseMoveTimer),o._mouseMoveTimer=null,o._mouseButtonMask=p,o._mouseLastMoveTime=Date.now(),o._sendMouse(i,x,p);const k=o._canvas.getBoundingClientRect();o._cursor?.move(k.left+i,k.top+x)}}}function xr(n,o,s){const t=new AbortController,p=new Set,v=new Set;let i,x,k=!1,f=performance.now();const E=()=>p.size>0||v.size>0,y=g=>{i=void 0,!(k||!E())&&(performance.now()-f>1e3||(s.record("browser-frame",{time:g,interval:x===void 0?null:g-x,logical:o.position?.(),renderer:o.observeCursor?.()}),x=g,i=requestAnimationFrame(y)))},b=()=>{E()?i===void 0&&(x=void 0,i=requestAnimationFrame(y)):(i!==void 0&&cancelAnimationFrame(i),i=void 0,x=void 0)},h=g=>{if(g.pointerType!=="touch"&&g.pointerType!=="pen")return;f=performance.now(),g.type==="pointerdown"?p.add(g.pointerId):(g.type==="pointerup"||g.type==="pointercancel"||g.type==="lostpointercapture")&&p.delete(g.pointerId);const R=g.getCoalescedEvents?.()??[];s.record("raw-pointer",{type:g.type,time:g.timeStamp,id:g.pointerId,pointerType:g.pointerType,client:[g.clientX,g.clientY],trusted:g.isTrusted,coalesced:R.slice(-16).map(N=>[N.timeStamp,N.clientX,N.clientY])}),b()},X=g=>{f=performance.now(),v.clear();for(const R of Array.from(g.touches))v.add(R.identifier);s.record("raw-touch",{type:g.type,time:g.timeStamp,trusted:g.isTrusted,touches:Array.from(g.touches,R=>[R.identifier,R.clientX,R.clientY]),changed:Array.from(g.changedTouches,R=>[R.identifier,R.clientX,R.clientY])}),b()},B={capture:!0,passive:!0,signal:t.signal};for(const g of["pointerdown","pointermove","pointerup","pointercancel","lostpointercapture"])n.addEventListener(g,h,B);for(const g of["touchstart","touchmove","touchend","touchcancel"])n.addEventListener(g,X,B);return s.record("observation-start",{version:2,pointerEvents:typeof PointerEvent<"u",touchEvents:"ontouchstart"in window}),()=>{k=!0,t.abort(),i!==void 0&&cancelAnimationFrame(i),s.record("observation-stop"),s.flush("observation-stop")}}const Dt="termdock:computer-touch-mode:v1";function br(){try{const n=localStorage.getItem(Dt);if(n==="trackpad"||n==="direct")return n}catch{}return navigator.maxTouchPoints>0&&window.matchMedia("(any-pointer: coarse)").matches?"trackpad":"direct"}function yr(n){try{localStorage.setItem(Dt,n)}catch{}}const Fe=8,vr=300,wr=450,at=18,Cr=50,Ye=(n,o)=>Math.max(0,Math.min(n,Math.max(0,o-1)));function Er(n,o,s,t={}){const p=new AbortController,v=t.trace?xr(n,o,t.trace):void 0,i=new Map;let x=0,k=0,f=!1,E=!1,y=!1,b=!1,h=0,X=1,B="pending",g=[],R={x:0,y:0},N={x:0,y:0},T,z=0,j=0,O,m=!0,V,S=!1;const M=()=>{const a=o.size(),u=s.current??={x:a.width/2,y:a.height/2};return u.x=Ye(u.x,a.width),u.y=Ye(u.y,a.height),u};let C;const F=()=>{const a=o.size();if((!C||C.width!==a.width||C.height!==a.height)&&(m=!0),!m&&C)return C;const u=o.surface(),d=n.getBoundingClientRect(),A=u.getBoundingClientRect(),D=[];for(let I=u.parentElement;I&&I!==n;I=I.parentElement){const ne=getComputedStyle(I),Y=/auto|scroll/.test(ne.overflowX)?Math.max(0,I.scrollWidth-I.clientWidth):0,be=/auto|scroll/.test(ne.overflowY)?Math.max(0,I.scrollHeight-I.clientHeight):0;if(!Y&&!be)continue;const Re=I.getBoundingClientRect();D.push({element:I,left:Re.left-d.left,top:Re.top-d.top,right:Re.right-d.left,bottom:Re.bottom-d.top,maxX:Y,maxY:be})}return C={...a,left:A.left-d.left,top:A.top-d.top,scaleX:a.width&&A.width?A.width/a.width:1,scaleY:a.height&&A.height?A.height/a.height:1,viewportWidth:d.width,viewportHeight:d.height,clientLeft:d.left,clientTop:d.top,scrollers:D},m=!1,C},w=(a,u)=>{if(!t.trace)return;const d=C;t.trace.record(a,{mode:t.mode,pointerType:u?.pointerType,pointerId:u?.pointerId,client:u?[u.clientX,u.clientY]:void 0,inputTime:u?.timeStamp,target:s.current?[s.current.x,s.current.y]:null,actual:o.position?.(),buttons:j,fingers:i.size,moved:f,pinching:b,scrolling:y,zoom:t.zoom?.get(),scale:d?[d.scaleX,d.scaleY]:void 0,surface:d?[d.left,d.top,d.width,d.height]:void 0,viewport:d?[d.clientLeft,d.clientTop,d.viewportWidth,d.viewportHeight]:void 0})};t.trace?.record("touchpad-attached",{mode:t.mode,viewOnly:t.viewOnly});const K=()=>{const a=F(),u=M();if(!a.width||!a.height||b||t.viewOnly)return;let d=a.left+u.x*a.scaleX,A=a.top+u.y*a.scaleY;for(const D of a.scrollers){if(D.maxX){const I=D.element.scrollLeft,ne=d<D.left+20?d-D.left-20:d>D.right-20?d-D.right+20:0,Y=Math.max(0,Math.min(D.maxX,I+ne));I!==Y&&(D.element.scrollLeft=Y,d-=Y-I,a.left-=Y-I)}if(D.maxY){const I=D.element.scrollTop,ne=A<D.top+20?A-D.top-20:A>D.bottom-20?A-D.bottom+20:0,Y=Math.max(0,Math.min(D.maxY,I+ne));I!==Y&&(D.element.scrollTop=Y,A-=Y-I,a.top-=Y-I)}}},H=(a=j)=>{if(t.viewOnly)return;const u=M(),d=t.trace?o.position?.():void 0;o.send(Math.round(u.x),Math.round(u.y),a),t.trace?.record("send",{target:[Math.round(u.x),Math.round(u.y)],buttons:a,before:d,after:o.position?.()})},te=()=>{O=void 0,K();let a=0;for(;Math.abs(z)>=at&&a++<8;){const u=z>0?16:8;H(u),H(0),z-=Math.sign(z)*at}},ce=(a=!1)=>{S||!a&&Math.abs(z)<at&&!C?.scrollers.length||(O??=requestAnimationFrame(te))},Le=()=>{O!==void 0&&(cancelAnimationFrame(O),te())},Ke=()=>{O!==void 0&&cancelAnimationFrame(O),O=void 0,z=0},Ae=()=>{clearTimeout(V),Le(),j&&(j=0,H())},ke=a=>{a.cancelable&&a.preventDefault(),a.stopImmediatePropagation()},_e=()=>{const[a,u]=[...i.values()];return{distance:Math.hypot(a.x-u.x,a.y-u.y),x:(a.x+u.x)/2,y:(a.y+u.y)/2}},W=(a=!1)=>{if(S||E||i.size!==2||k!==2)return;const u=_e();if(B==="pending"){const d=[...i.values()].map((Y,be)=>({x:Y.x-g[be].x,y:Y.y-g[be].y})),A=d.map(Y=>Math.hypot(Y.x,Y.y));if(Math.max(...A)<Fe)return;if(!a&&Math.min(...A)<Fe){T??=setTimeout(()=>{T=void 0,W(!0)},Cr);return}clearTimeout(T),T=void 0;const D=Math.abs(u.distance-h),I=d[0].x*d[1].x+d[0].y*d[1].y<0,ne=Math.min(...A)>=Fe?I:D>Math.max(Math.abs(u.x-R.x),Math.abs(u.y-R.y));B=t.zoom&&D>=Fe&&ne?"pinch":t.mode==="direct"&&t.zoom&&t.zoom.get()>1?"pan":"scroll",b=B==="pinch",f=!0,w("two-finger-classified")}B==="pinch"&&h>0?(t.zoom?.set(X*u.distance/h,u),t.zoom?.pan(u.x-N.x,u.y-N.y),m=!0):B==="pan"?(t.zoom?.pan(u.x-N.x,u.y-N.y),m=!0):z+=N.y-u.y,N=u,ce()},Me=a=>{const u=F();s.current={x:Ye((a.clientX-u.clientLeft-u.left)/u.scaleX,u.width),y:Ye((a.clientY-u.clientTop-u.top)/u.scaleY,u.height)}},xe=a=>{if(!(a.pointerType!=="touch"&&a.pointerType!=="pen")){ke(a),i.size||(m=!0,clearTimeout(T),T=void 0,x=performance.now(),k=0,f=!1,E=!1,y=!1,b=!1,z=0,t.mode==="direct"?Me(a):o.position&&(s.current={...o.position()},M())),i.set(a.pointerId,{x:a.clientX,y:a.clientY,startX:a.clientX,startY:a.clientY}),k=Math.max(k,i.size),w("down",a);try{n.setPointerCapture(a.pointerId)}catch{}if(clearTimeout(V),i.size===1&&k===1)V=setTimeout(()=>{!S&&i.size===1&&!f&&!E&&(j=1,H())},wr);else if(Ae(),y=!0,i.size===2&&k===2){const u=_e();h=u.distance,X=t.zoom?.get()??1,R=N=u,B="pending",g=[...i.values()].map(({x:d,y:A})=>({x:d,y:A}))}else E=!0,clearTimeout(T),T=void 0}},re=a=>{if(a.pointerType==="mouse")return;const u=i.get(a.pointerId);if(!u)return;ke(a);const d=a.clientX-u.x,A=a.clientY-u.y;if(u.x=a.clientX,u.y=a.clientY,w("move-input",a),Math.hypot(u.x-u.startX,u.y-u.startY)>Fe&&(f=!0,clearTimeout(V)),i.size===2&&!E)W();else if(i.size===1&&!y&&!E){if(t.mode==="direct"){Me(a),f&&(j=1),H(),ce();return}const D=M(),I=F();D.x+=d/I.scaleX,D.y+=A/I.scaleY,M(),H(),ce()}},U=a=>{if(!i.has(a.pointerId))return;ke(a),w(a.type,a),clearTimeout(T),T=void 0;const u=j!==0;a.type!=="pointerup"&&(E=!0,Ke()),Ae(),i.delete(a.pointerId);try{n.hasPointerCapture(a.pointerId)&&n.releasePointerCapture(a.pointerId)}catch{}i.size||(z=0,!E&&!u&&!f&&k<=2&&performance.now()-x<=vr&&(t.mode!=="direct"||k===1)&&(H(k===2?4:1),H(0)),w("gesture-end",a),t.trace?.flush("gesture-end"))},ee=()=>{E=!0,Ke(),clearTimeout(T),T=void 0,Ae();const a=[...i.keys()];i.clear(),z=0;for(const u of a)try{n.hasPointerCapture(u)&&n.releasePointerCapture(u)}catch{}},J={capture:!0,passive:!1,signal:p.signal};n.addEventListener("pointerdown",xe,J),n.addEventListener("pointermove",re,J),n.addEventListener("pointerup",U,J),n.addEventListener("pointercancel",U,J),n.addEventListener("lostpointercapture",U,J);for(const a of["touchstart","touchmove","touchend","touchcancel","contextmenu"])n.addEventListener(a,ke,J);const ie=()=>{m=!0,ce(!0)};n.addEventListener("scroll",ie,{capture:!0,signal:p.signal}),window.addEventListener("blur",ee,{signal:p.signal});const qe=()=>{document.hidden&&ee()};document.addEventListener("visibilitychange",qe,{signal:p.signal});const je=new ResizeObserver(ie);return je.observe(n),je.observe(o.surface()),!s.current&&o.position&&(s.current={...o.position()}),K(),()=>{S||(S=!0,w("touchpad-detached"),p.abort(),ee(),je.disconnect(),v?.(),t.trace?.flush("touchpad-detached"))}}function kr(n,o){n=Math.max(1,n||1280),o=Math.max(1,o||800);const s=Math.max(1,640/n,480/o);return{width:Math.max(640,Math.min(2560,Math.round(n*s))),height:Math.max(480,Math.min(1600,Math.round(o*s)))}}function jr(n,o){const s=Array.from(n),t=Array.from(o);let p=0;for(;p<s.length&&p<t.length&&s[p]===t[p];)p++;return{backspaces:s.length-p,text:t.slice(p).join("")}}const ct="​",Nr={Enter:"enter",Backspace:"backspace",Delete:"delete",Tab:"tab",ArrowUp:"up",ArrowDown:"down",ArrowLeft:"left",ArrowRight:"right"};function Sr({sendText:n,sendKey:o,sendChord:s,pasteText:t,commandKey:p=[65515,"MetaLeft"],inputRef:v,onFocusChange:i}){const{t:x}=Pt(),k=c.useRef(null),f=c.useRef(!1),E=v??k,y=c.useRef({sendText:n,sendKey:o});y.current={sendText:n,sendKey:o};const b=c.useRef(""),h=c.useRef(!1),X=c.useRef(),[B,g]=c.useState(!1),R=()=>(E.current?.value||"").replace(/^\u200b/,""),N=m=>{if(b.current=Array.from(m).slice(-256).join(""),E.current){E.current.value=ct+b.current;const V=E.current.value.length;E.current.setSelectionRange(V,V)}g(!!b.current)},T=()=>N(""),z=()=>{if(f.current)return;const m=R(),V=jr(b.current,m);N(m);for(let S=0;S<V.backspaces;S++)y.current.sendKey("backspace");V.text&&y.current.sendText(V.text)},j=()=>{f.current||z()},O=m=>{j(),m==="backspace"?N(Array.from(b.current).slice(0,-1).join("")):T(),y.current.sendKey(m)};return c.useLayoutEffect(()=>{const m=E.current;m.value=ct,m.setSelectionRange(1,1),m.focus({preventScroll:!0});const V=M=>{if(f.current||M.isComposing)return;const C=M.inputType==="deleteContentBackward"?"backspace":M.inputType==="deleteContentForward"?"delete":null;if(C){if(C==="backspace"&&b.current)return;M.preventDefault(),O(C);return}["insertLineBreak","insertParagraph"].includes(M.inputType)&&(M.preventDefault(),h.current||O("enter"),h.current=!1)},S=()=>{f.current||T()};return m.addEventListener("beforeinput",V),m.addEventListener("termdock:computer-input-reset",S),()=>{m.removeEventListener("beforeinput",V),m.removeEventListener("termdock:computer-input-reset",S),clearTimeout(X.current)}},[]),r.jsxs("div",{className:"relative shrink-0 border-t border-border bg-surface px-2 py-1",children:[!B&&r.jsx("span",{"aria-hidden":"true",className:"pointer-events-none absolute inset-y-1 left-5 flex items-center truncate pr-5 text-sm text-muted-foreground",children:x("computer.keyboardPlaceholder")}),r.jsx("input",{ref:E,className:"min-h-11 w-full rounded-md border border-border bg-background px-3 text-base outline-none focus:border-primary","aria-label":x("computer.keyboardInput"),autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",spellCheck:!1,inputMode:"text",enterKeyHint:"enter",maxLength:1025,defaultValue:ct,onPaste:m=>{if(f.current||!m.clipboardData.types.includes("text/plain"))return;m.preventDefault(),j(),T();const V=m.clipboardData.getData("text/plain");t?t(V):y.current.sendText(V)},onChange:m=>{g(!!m.target.value.replace(/^\u200b/,"")),!(f.current||m.nativeEvent.isComposing)&&(m.nativeEvent.inputType==="deleteContentBackward"&&!b.current&&!m.target.value?O("backspace"):z())},onCompositionStart:()=>{f.current=!0,h.current=!1},onCompositionEnd:()=>{f.current=!1,z(),h.current=!0,clearTimeout(X.current),X.current=setTimeout(()=>{h.current=!1},0)},onFocus:()=>i?.(!0),onBlur:()=>{f.current||(j(),T()),i?.(!1)},onKeyDown:m=>{if(f.current||m.nativeEvent.isComposing||m.keyCode===229)return;const V=m.ctrlKey||m.altKey||m.metaKey,S=(m.ctrlKey||m.metaKey)&&!m.altKey&&m.key.toLowerCase()==="v";if(s&&!S&&!m.getModifierState("AltGraph")&&(V||m.shiftKey)){const F={Enter:65293,Backspace:65288,Delete:65535,Tab:65289,ArrowUp:65362,ArrowDown:65364,ArrowLeft:65361,ArrowRight:65363,Home:65360,End:65367,PageUp:65365,PageDown:65366}[m.key]??(V&&m.key.length===1?m.key.toLowerCase().codePointAt(0):void 0);if(F!==void 0){m.preventDefault(),j();const w=[];m.ctrlKey&&w.push([65507,"ControlLeft"]),m.altKey&&w.push([65513,"AltLeft"]),m.metaKey&&!w.some(([K])=>K===p[0])&&w.push(p),m.shiftKey&&w.push([65505,"ShiftLeft"]),w.push([F,m.code||m.key]),T(),s(w);return}}const M=Nr[m.key];M&&(m.preventDefault(),O(M))}})]})}function Tr(n){let o=[],s=null;const t=new Map,p=()=>{s=null,o.splice(0,32).forEach(v=>{n(v),v[2]?t.set(v[0],v):t.delete(v[0])}),o.length&&(s=requestAnimationFrame(p))};return{send(v){o.push(...v),s===null&&p()},clear(){s!==null&&cancelAnimationFrame(s),s=null,o=[];const v=[...t.values()].reverse();t.clear();for(const[i,x]of v)try{n([i,x,!1])}catch{}}}}const Lr=n=>Math.max(1,Math.min(8,Number.isFinite(n)?n:1));function Ar(n,o){let s=1;const t="viewportZoom"in n,p=n,v=()=>t?n.pointerTarget.surface():p._canvas,i=()=>t?n.viewportScroller:p._screen,x=t?void 0:p._updateScale;return x&&(p._updateScale=function(){x.call(p),p._display.scale*=s}),{get:()=>s,set(k,f){const E=Lr(k),y=v(),b=i(),h=y.getBoundingClientRect(),X=b.getBoundingClientRect(),B=f??{x:X.left+X.width/2,y:X.top+X.height/2},g={x:(B.x-h.left)/(h.width||1),y:(B.y-h.top)/(h.height||1)};s=E,t?n.viewportZoom=s:p._updateScale();const R=y.getBoundingClientRect();b.scrollLeft+=R.left+g.x*R.width-B.x,b.scrollTop+=R.top+g.y*R.height-B.y,s===1&&(b.scrollLeft=0,b.scrollTop=0),o(s)},pan(k,f){const E=i();E.scrollLeft-=k,E.scrollTop-=f},dispose(){x&&(p._updateScale=x)}}}function _r(n,o){const s=n,t=s._keyboard,p=t._target,v=n.focus,i=document.createElement("textarea");i.tabIndex=-1,i.setAttribute("aria-label","Remote desktop keyboard"),i.autocapitalize="off",i.autocomplete="off",i.spellcheck=!1,Object.assign(i.style,{position:"absolute",left:"0",top:"0",width:"1px",height:"1px",fontSize:"16px",opacity:"0",pointerEvents:"none"}),s._screen.append(i);const x=new AbortController;let k=!1,f=null,E=!1;const y=()=>{s._mouseMoveTimer!==null&&clearTimeout(s._mouseMoveTimer),s._mouseMoveTimer=null,s._mouseButtonMask&&(s._mouseButtonMask=0,s._sendMouse(s._mousePos.x,s._mousePos.y,0))};window.addEventListener("blur",y,{signal:x.signal}),document.addEventListener("visibilitychange",()=>{document.hidden&&(t._allKeysUp(),y())},{signal:x.signal});const b=()=>{f!==null&&cancelAnimationFrame(f),f=null;const h=i.value;i.value="",h&&!n.viewOnly&&o(h)};return i.addEventListener("keydown",h=>{(k||h.isComposing||h.keyCode===229)&&h.stopImmediatePropagation()},{capture:!0,signal:x.signal}),i.addEventListener("compositionstart",()=>{f!==null&&b(),k=!0,t._allKeysUp()},{signal:x.signal}),i.addEventListener("compositionend",()=>{k=!1,f!==null&&cancelAnimationFrame(f),f=requestAnimationFrame(b)},{signal:x.signal}),i.addEventListener("input",h=>{!k&&!h.isComposing&&f===null&&b()},{signal:x.signal}),i.addEventListener("blur",()=>{!k&&f!==null&&b(),t._allKeysUp()},{signal:x.signal}),t.ungrab(),t._target=i,n.viewOnly||t.grab(),n.focus=h=>{!E&&!n.viewOnly&&i.focus(h)},document.activeElement===p&&n.focus({preventScroll:!0}),()=>{E||(E=!0,f!==null&&(k?cancelAnimationFrame(f):b()),y(),x.abort(),t.ungrab(),t._target=p,n.viewOnly||t.grab(),n.focus=v,i.remove())}}function*_t(n){for(const o of n.replace(/\r\n?/g,`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/rdpSession-C5rS-ImV.js","assets/app-DuUnqxq-.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-Dea8wJF3.js","assets/index-nIgxJ6I3.css","assets/chevron-left-xqARwD-7.js","assets/loader-circle-Df0zpx5N.js","assets/unplug-DN2SNXUL.js","assets/clipboard-rLx5CzbY.js","assets/maximize-2-CovPxWdw.js","assets/settings-2-iGqzPez0.js"])))=>i.map(i=>d[i]);
2
+ import{aV as it,ei as Mt,aZ as rt,aK as jt,aJ as Rt,dp as qt,ea as Pt,cg as r,aD as Zt,dm as Be,cf as nt,a2 as Nt,N as St,y as Gt,a4 as Jt,a5 as Tt}from"./app-DuUnqxq-.js";import{b as c,r as ot}from"./dnd-BCFAPC0L.js";import{C as Qt}from"./chevron-left-xqARwD-7.js";import{L as Lt}from"./loader-circle-Df0zpx5N.js";import{U as At,K as He}from"./unplug-DN2SNXUL.js";import{C as st}from"./clipboard-rLx5CzbY.js";import{M as er}from"./maximize-2-CovPxWdw.js";import{S as tr}from"./settings-2-iGqzPez0.js";const rr=[["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"}]],nr=it("mouse-pointer-2",rr);const or=[["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"}]],sr=it("zoom-in",or);const ar=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],cr=it("zoom-out",ar);function ir(n){const o=Mt(),s=o?.computers?.[0],t=JSON.stringify(s),[p,v]=c.useState(rt),[i,x]=c.useState(!1),[k,f]=c.useState("loading"),[E,y]=c.useState(0),[b,h]=c.useState([]),[X,B]=c.useState("idle"),g=c.useRef(p),R=c.useRef(0),N=c.useRef(0),T=c.useRef(""),z=c.useRef(null),j=c.useRef(new Set),O=c.useCallback(S=>{g.current=S(g.current),R.current++,v(g.current),f("saving")},[]);c.useEffect(()=>{const S=++N.current;R.current=0,T.current="",z.current=null,g.current=rt(),v(g.current),x(!1),f("loading"),h([]),B("idle");const M=new AbortController;if(o){const C=rt();return s&&(C.target="remote",C.remote={...C.remote,...s,port:String(s.port),platform:s.protocol==="vnc"?"mac":"windows",rememberLogin:!1},C.viewOnly=s.access!=="control"),g.current=C,T.current=JSON.stringify(C),v(C),x(!0),f("saved"),()=>{++N.current}}return fetch("/api/computer/preferences",{signal:M.signal}).then(async C=>{if(!C.ok)throw new Error("PREFERENCES_LOAD_FAILED");return await C.json()}).then(C=>{if(S!==N.current||M.signal.aborted)return;let F=jt(C.preferences);const w=R.current>0;if(!C.configured&&!w)try{const K=localStorage.getItem(`termdock:computer-host:${n}`);if(K){const te=/^(127\.0\.0\.1|localhost|::1|\[::1\])$/i.test(K)?"local":"remote";F=jt({...F,target:te,[te]:{...F[te],host:K,platform:localStorage.getItem(`termdock:computer-platform:${n}`)||F[te].platform,protocol:localStorage.getItem(`termdock:computer-protocol:${n}`)||"vnc",port:localStorage.getItem(`termdock:computer-rdp-port:${n}`)||"3389"}}),R.current++}}catch{}w||(g.current=F),T.current=C.configured?JSON.stringify(F):"",v(g.current),x(!0),f(C.configured?"saved":"saving"),h(Array.isArray(C.credentialKeys)?C.credentialKeys.filter(K=>typeof K=="string"):[]),B(C.credentialError?"error":"idle")}).catch(()=>{!M.signal.aborted&&S===N.current&&f("error")}),()=>{++N.current,M.abort();for(const C of j.current)C.abort();j.current.clear()}},[n,E,t,!!o]);const m=c.useCallback(()=>{if(o)return T.current=JSON.stringify(g.current),f("saved"),Promise.resolve(!0);if(z.current)return z.current;if(!i)return Promise.resolve(!1);const S=N.current,M=(async()=>{for(;T.current!==JSON.stringify(g.current);){const C=JSON.stringify(g.current),F=new AbortController;j.current.add(F),f("saving");try{if(!(await fetch("/api/computer/preferences",{method:"PUT",headers:{"Content-Type":"application/json"},body:C,signal:F.signal})).ok)throw new Error("PREFERENCES_SAVE_FAILED");if(S!==N.current)return!1;T.current=C}catch{return S===N.current&&f("error"),!1}finally{j.current.delete(F)}}return S===N.current&&f("saved"),!0})();return z.current=M,M.finally(()=>{z.current===M&&(z.current=null)}),M},[i,!!o]);c.useEffect(()=>{if(!i||T.current===JSON.stringify(p))return;const S=setTimeout(()=>{m()},300);return()=>clearTimeout(S)},[i,p,m]);const V=c.useCallback(async(S,M,C)=>{const F=N.current,w=new AbortController;S!=="use"&&B("saving");try{if(!await m()||F!==N.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");j.current.add(w);const K=await fetch(`/api/computer/credentials/${S}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({profile:M,...S==="save"?{password:C}:{}}),signal:w.signal});if(F!==N.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");if(!K.ok)throw new Error(S==="use"&&K.status===404?"COMPUTER_CREDENTIALS_MISSING":"COMPUTER_CREDENTIALS_FAILED");const H=await K.json();if(F!==N.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");const te=Rt(M);if(S==="save"&&h(ce=>[...new Set([...ce,te])]),S==="forget"&&h(ce=>ce.filter(Le=>Le!==te)),S==="use"&&(typeof H.password!="string"||!H.password))throw new Error("COMPUTER_CREDENTIALS_MISSING");return B("idle"),H.password}catch(K){throw F===N.current&&!w.signal.aborted&&B("error"),K}finally{j.current.delete(w)}},[m]);return{preferences:p,change:O,loaded:i,saveState:k,flush:m,credentialKeys:b,loginState:X,credentialRequest:V,retry:()=>i?void m():y(S=>S+1)}}const lr=1464686180;function ur(n){if(n.length<4||n[0]!==2)return n;const o=new DataView(n.buffer,n.byteOffset,n.byteLength),s=o.getUint16(2);if(n.length!==4+s*4)return n;const t=[];for(let i=4;i<n.length;i+=4){const x=o.getInt32(i);x!==lr&&t.push(x)}if(t.length===s)return n;const p=new Uint8Array(4+t.length*4),v=new DataView(p.buffer);return p.set(n.subarray(0,2)),v.setUint16(2,t.length),t.forEach((i,x)=>v.setInt32(4+x*4,i)),p}function dr(n,o){const s=n,t=s._sendEncodings;s._sendEncodings=()=>o.withMacCursorEncodings(()=>t.call(n))}class pr{binaryType="arraybuffer";protocol="";CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;onopen=null;onmessage=null;onerror=null;onclose=null;socket;sendingMacEncodings=!1;withMacCursorEncodings(o){const s=this.sendingMacEncodings;this.sendingMacEncodings=!0;try{o()}finally{this.sendingMacEncodings=s}}get readyState(){return this.socket.readyState}constructor(o,s){this.socket=qt(`/api/computer/ws?host=${encodeURIComponent(o)}`),this.socket.onopen=t=>this.onopen?.(t),this.socket.onerror=t=>this.onerror?.(t),this.socket.onclose=t=>{(t.code!==1e3||t.reason)&&s(t.reason||"COMPUTER_DISCONNECTED"),this.onclose?.(t)},this.socket.onmessage=t=>{try{const p=JSON.parse(t.data);if(p.type!=="data"||typeof p.data!="string"||!Number.isSafeInteger(p.seq))throw new Error("Invalid VNC record");const v=Uint8Array.from(atob(p.data),i=>i.charCodeAt(0));this.onmessage?.(new MessageEvent("message",{data:v.buffer})),this.socket.readyState===1&&this.socket.send(JSON.stringify({type:"ack",seq:p.seq}))}catch{s("COMPUTER_INVALID_MESSAGE"),this.close(),this.onclose?.(new CloseEvent("close",{code:4400}))}}}send(o){let s=ArrayBuffer.isView(o)?new Uint8Array(o.buffer,o.byteOffset,o.byteLength):new Uint8Array(o);this.sendingMacEncodings&&(s=ur(s));for(let t=0;t<s.length;t+=32*1024){const p=s.subarray(t,t+32768);let v="";for(const i of p)v+=String.fromCharCode(i);this.socket.send(JSON.stringify({type:"data",data:btoa(v)}))}}close(){this.socket.close()}}function mr(n){return n==="mac"||n==="linux"||n==="windows"}function fr(n){const o=n==="mac"?[65513,"MetaLeft"]:[65507,"ControlLeft"],s=n==="mac"?o:[65515,"MetaLeft"];return{escape:[[65307,"Escape"]],enter:[[65293,"Enter"]],backspace:[[65288,"Backspace"]],tab:[n==="mac"?o:[65513,"AltLeft"],[65289,"Tab"]],search:n==="mac"?[s,[32,"Space"]]:[s],copy:[o,[99,"KeyC"]],paste:[o,[118,"KeyV"]],up:[[65362,"ArrowUp"]],down:[[65364,"ArrowDown"]],left:[[65361,"ArrowLeft"]],right:[[65363,"ArrowRight"]]}}function hr(n){n._cursor?._hideCursor?.()}function gr(n){const o=n;return{position:()=>({x:Number.isFinite(o._mousePos.x)?o._display.absX(o._mousePos.x):o._fbWidth/2,y:Number.isFinite(o._mousePos.y)?o._display.absY(o._mousePos.y):o._fbHeight/2}),size:()=>({width:o._fbWidth,height:o._fbHeight}),surface:()=>o._canvas,send:(s,t,p)=>{const v=o._display.scale,i=(s-o._display.absX(0))*v,x=(t-o._display.absY(0))*v;o._mousePos={x:i,y:x},o._mouseMoveTimer!==null&&clearTimeout(o._mouseMoveTimer),o._mouseMoveTimer=null,o._mouseButtonMask=p,o._mouseLastMoveTime=Date.now(),o._sendMouse(i,x,p);const k=o._canvas.getBoundingClientRect();o._cursor?.move(k.left+i,k.top+x)}}}function xr(n,o,s){const t=new AbortController,p=new Set,v=new Set;let i,x,k=!1,f=performance.now();const E=()=>p.size>0||v.size>0,y=g=>{i=void 0,!(k||!E())&&(performance.now()-f>1e3||(s.record("browser-frame",{time:g,interval:x===void 0?null:g-x,logical:o.position?.(),renderer:o.observeCursor?.()}),x=g,i=requestAnimationFrame(y)))},b=()=>{E()?i===void 0&&(x=void 0,i=requestAnimationFrame(y)):(i!==void 0&&cancelAnimationFrame(i),i=void 0,x=void 0)},h=g=>{if(g.pointerType!=="touch"&&g.pointerType!=="pen")return;f=performance.now(),g.type==="pointerdown"?p.add(g.pointerId):(g.type==="pointerup"||g.type==="pointercancel"||g.type==="lostpointercapture")&&p.delete(g.pointerId);const R=g.getCoalescedEvents?.()??[];s.record("raw-pointer",{type:g.type,time:g.timeStamp,id:g.pointerId,pointerType:g.pointerType,client:[g.clientX,g.clientY],trusted:g.isTrusted,coalesced:R.slice(-16).map(N=>[N.timeStamp,N.clientX,N.clientY])}),b()},X=g=>{f=performance.now(),v.clear();for(const R of Array.from(g.touches))v.add(R.identifier);s.record("raw-touch",{type:g.type,time:g.timeStamp,trusted:g.isTrusted,touches:Array.from(g.touches,R=>[R.identifier,R.clientX,R.clientY]),changed:Array.from(g.changedTouches,R=>[R.identifier,R.clientX,R.clientY])}),b()},B={capture:!0,passive:!0,signal:t.signal};for(const g of["pointerdown","pointermove","pointerup","pointercancel","lostpointercapture"])n.addEventListener(g,h,B);for(const g of["touchstart","touchmove","touchend","touchcancel"])n.addEventListener(g,X,B);return s.record("observation-start",{version:2,pointerEvents:typeof PointerEvent<"u",touchEvents:"ontouchstart"in window}),()=>{k=!0,t.abort(),i!==void 0&&cancelAnimationFrame(i),s.record("observation-stop"),s.flush("observation-stop")}}const Dt="termdock:computer-touch-mode:v1";function br(){try{const n=localStorage.getItem(Dt);if(n==="trackpad"||n==="direct")return n}catch{}return navigator.maxTouchPoints>0&&window.matchMedia("(any-pointer: coarse)").matches?"trackpad":"direct"}function yr(n){try{localStorage.setItem(Dt,n)}catch{}}const Fe=8,vr=300,wr=450,at=18,Cr=50,Ye=(n,o)=>Math.max(0,Math.min(n,Math.max(0,o-1)));function Er(n,o,s,t={}){const p=new AbortController,v=t.trace?xr(n,o,t.trace):void 0,i=new Map;let x=0,k=0,f=!1,E=!1,y=!1,b=!1,h=0,X=1,B="pending",g=[],R={x:0,y:0},N={x:0,y:0},T,z=0,j=0,O,m=!0,V,S=!1;const M=()=>{const a=o.size(),u=s.current??={x:a.width/2,y:a.height/2};return u.x=Ye(u.x,a.width),u.y=Ye(u.y,a.height),u};let C;const F=()=>{const a=o.size();if((!C||C.width!==a.width||C.height!==a.height)&&(m=!0),!m&&C)return C;const u=o.surface(),d=n.getBoundingClientRect(),A=u.getBoundingClientRect(),D=[];for(let I=u.parentElement;I&&I!==n;I=I.parentElement){const ne=getComputedStyle(I),Y=/auto|scroll/.test(ne.overflowX)?Math.max(0,I.scrollWidth-I.clientWidth):0,be=/auto|scroll/.test(ne.overflowY)?Math.max(0,I.scrollHeight-I.clientHeight):0;if(!Y&&!be)continue;const Re=I.getBoundingClientRect();D.push({element:I,left:Re.left-d.left,top:Re.top-d.top,right:Re.right-d.left,bottom:Re.bottom-d.top,maxX:Y,maxY:be})}return C={...a,left:A.left-d.left,top:A.top-d.top,scaleX:a.width&&A.width?A.width/a.width:1,scaleY:a.height&&A.height?A.height/a.height:1,viewportWidth:d.width,viewportHeight:d.height,clientLeft:d.left,clientTop:d.top,scrollers:D},m=!1,C},w=(a,u)=>{if(!t.trace)return;const d=C;t.trace.record(a,{mode:t.mode,pointerType:u?.pointerType,pointerId:u?.pointerId,client:u?[u.clientX,u.clientY]:void 0,inputTime:u?.timeStamp,target:s.current?[s.current.x,s.current.y]:null,actual:o.position?.(),buttons:j,fingers:i.size,moved:f,pinching:b,scrolling:y,zoom:t.zoom?.get(),scale:d?[d.scaleX,d.scaleY]:void 0,surface:d?[d.left,d.top,d.width,d.height]:void 0,viewport:d?[d.clientLeft,d.clientTop,d.viewportWidth,d.viewportHeight]:void 0})};t.trace?.record("touchpad-attached",{mode:t.mode,viewOnly:t.viewOnly});const K=()=>{const a=F(),u=M();if(!a.width||!a.height||b||t.viewOnly)return;let d=a.left+u.x*a.scaleX,A=a.top+u.y*a.scaleY;for(const D of a.scrollers){if(D.maxX){const I=D.element.scrollLeft,ne=d<D.left+20?d-D.left-20:d>D.right-20?d-D.right+20:0,Y=Math.max(0,Math.min(D.maxX,I+ne));I!==Y&&(D.element.scrollLeft=Y,d-=Y-I,a.left-=Y-I)}if(D.maxY){const I=D.element.scrollTop,ne=A<D.top+20?A-D.top-20:A>D.bottom-20?A-D.bottom+20:0,Y=Math.max(0,Math.min(D.maxY,I+ne));I!==Y&&(D.element.scrollTop=Y,A-=Y-I,a.top-=Y-I)}}},H=(a=j)=>{if(t.viewOnly)return;const u=M(),d=t.trace?o.position?.():void 0;o.send(Math.round(u.x),Math.round(u.y),a),t.trace?.record("send",{target:[Math.round(u.x),Math.round(u.y)],buttons:a,before:d,after:o.position?.()})},te=()=>{O=void 0,K();let a=0;for(;Math.abs(z)>=at&&a++<8;){const u=z>0?16:8;H(u),H(0),z-=Math.sign(z)*at}},ce=(a=!1)=>{S||!a&&Math.abs(z)<at&&!C?.scrollers.length||(O??=requestAnimationFrame(te))},Le=()=>{O!==void 0&&(cancelAnimationFrame(O),te())},Ke=()=>{O!==void 0&&cancelAnimationFrame(O),O=void 0,z=0},Ae=()=>{clearTimeout(V),Le(),j&&(j=0,H())},ke=a=>{a.cancelable&&a.preventDefault(),a.stopImmediatePropagation()},_e=()=>{const[a,u]=[...i.values()];return{distance:Math.hypot(a.x-u.x,a.y-u.y),x:(a.x+u.x)/2,y:(a.y+u.y)/2}},W=(a=!1)=>{if(S||E||i.size!==2||k!==2)return;const u=_e();if(B==="pending"){const d=[...i.values()].map((Y,be)=>({x:Y.x-g[be].x,y:Y.y-g[be].y})),A=d.map(Y=>Math.hypot(Y.x,Y.y));if(Math.max(...A)<Fe)return;if(!a&&Math.min(...A)<Fe){T??=setTimeout(()=>{T=void 0,W(!0)},Cr);return}clearTimeout(T),T=void 0;const D=Math.abs(u.distance-h),I=d[0].x*d[1].x+d[0].y*d[1].y<0,ne=Math.min(...A)>=Fe?I:D>Math.max(Math.abs(u.x-R.x),Math.abs(u.y-R.y));B=t.zoom&&D>=Fe&&ne?"pinch":t.mode==="direct"&&t.zoom&&t.zoom.get()>1?"pan":"scroll",b=B==="pinch",f=!0,w("two-finger-classified")}B==="pinch"&&h>0?(t.zoom?.set(X*u.distance/h,u),t.zoom?.pan(u.x-N.x,u.y-N.y),m=!0):B==="pan"?(t.zoom?.pan(u.x-N.x,u.y-N.y),m=!0):z+=N.y-u.y,N=u,ce()},Me=a=>{const u=F();s.current={x:Ye((a.clientX-u.clientLeft-u.left)/u.scaleX,u.width),y:Ye((a.clientY-u.clientTop-u.top)/u.scaleY,u.height)}},xe=a=>{if(!(a.pointerType!=="touch"&&a.pointerType!=="pen")){ke(a),i.size||(m=!0,clearTimeout(T),T=void 0,x=performance.now(),k=0,f=!1,E=!1,y=!1,b=!1,z=0,t.mode==="direct"?Me(a):o.position&&(s.current={...o.position()},M())),i.set(a.pointerId,{x:a.clientX,y:a.clientY,startX:a.clientX,startY:a.clientY}),k=Math.max(k,i.size),w("down",a);try{n.setPointerCapture(a.pointerId)}catch{}if(clearTimeout(V),i.size===1&&k===1)V=setTimeout(()=>{!S&&i.size===1&&!f&&!E&&(j=1,H())},wr);else if(Ae(),y=!0,i.size===2&&k===2){const u=_e();h=u.distance,X=t.zoom?.get()??1,R=N=u,B="pending",g=[...i.values()].map(({x:d,y:A})=>({x:d,y:A}))}else E=!0,clearTimeout(T),T=void 0}},re=a=>{if(a.pointerType==="mouse")return;const u=i.get(a.pointerId);if(!u)return;ke(a);const d=a.clientX-u.x,A=a.clientY-u.y;if(u.x=a.clientX,u.y=a.clientY,w("move-input",a),Math.hypot(u.x-u.startX,u.y-u.startY)>Fe&&(f=!0,clearTimeout(V)),i.size===2&&!E)W();else if(i.size===1&&!y&&!E){if(t.mode==="direct"){Me(a),f&&(j=1),H(),ce();return}const D=M(),I=F();D.x+=d/I.scaleX,D.y+=A/I.scaleY,M(),H(),ce()}},U=a=>{if(!i.has(a.pointerId))return;ke(a),w(a.type,a),clearTimeout(T),T=void 0;const u=j!==0;a.type!=="pointerup"&&(E=!0,Ke()),Ae(),i.delete(a.pointerId);try{n.hasPointerCapture(a.pointerId)&&n.releasePointerCapture(a.pointerId)}catch{}i.size||(z=0,!E&&!u&&!f&&k<=2&&performance.now()-x<=vr&&(t.mode!=="direct"||k===1)&&(H(k===2?4:1),H(0)),w("gesture-end",a),t.trace?.flush("gesture-end"))},ee=()=>{E=!0,Ke(),clearTimeout(T),T=void 0,Ae();const a=[...i.keys()];i.clear(),z=0;for(const u of a)try{n.hasPointerCapture(u)&&n.releasePointerCapture(u)}catch{}},J={capture:!0,passive:!1,signal:p.signal};n.addEventListener("pointerdown",xe,J),n.addEventListener("pointermove",re,J),n.addEventListener("pointerup",U,J),n.addEventListener("pointercancel",U,J),n.addEventListener("lostpointercapture",U,J);for(const a of["touchstart","touchmove","touchend","touchcancel","contextmenu"])n.addEventListener(a,ke,J);const ie=()=>{m=!0,ce(!0)};n.addEventListener("scroll",ie,{capture:!0,signal:p.signal}),window.addEventListener("blur",ee,{signal:p.signal});const qe=()=>{document.hidden&&ee()};document.addEventListener("visibilitychange",qe,{signal:p.signal});const je=new ResizeObserver(ie);return je.observe(n),je.observe(o.surface()),!s.current&&o.position&&(s.current={...o.position()}),K(),()=>{S||(S=!0,w("touchpad-detached"),p.abort(),ee(),je.disconnect(),v?.(),t.trace?.flush("touchpad-detached"))}}function kr(n,o){n=Math.max(1,n||1280),o=Math.max(1,o||800);const s=Math.max(1,640/n,480/o);return{width:Math.max(640,Math.min(2560,Math.round(n*s))),height:Math.max(480,Math.min(1600,Math.round(o*s)))}}function jr(n,o){const s=Array.from(n),t=Array.from(o);let p=0;for(;p<s.length&&p<t.length&&s[p]===t[p];)p++;return{backspaces:s.length-p,text:t.slice(p).join("")}}const ct="​",Nr={Enter:"enter",Backspace:"backspace",Delete:"delete",Tab:"tab",ArrowUp:"up",ArrowDown:"down",ArrowLeft:"left",ArrowRight:"right"};function Sr({sendText:n,sendKey:o,sendChord:s,pasteText:t,commandKey:p=[65515,"MetaLeft"],inputRef:v,onFocusChange:i}){const{t:x}=Pt(),k=c.useRef(null),f=c.useRef(!1),E=v??k,y=c.useRef({sendText:n,sendKey:o});y.current={sendText:n,sendKey:o};const b=c.useRef(""),h=c.useRef(!1),X=c.useRef(),[B,g]=c.useState(!1),R=()=>(E.current?.value||"").replace(/^\u200b/,""),N=m=>{if(b.current=Array.from(m).slice(-256).join(""),E.current){E.current.value=ct+b.current;const V=E.current.value.length;E.current.setSelectionRange(V,V)}g(!!b.current)},T=()=>N(""),z=()=>{if(f.current)return;const m=R(),V=jr(b.current,m);N(m);for(let S=0;S<V.backspaces;S++)y.current.sendKey("backspace");V.text&&y.current.sendText(V.text)},j=()=>{f.current||z()},O=m=>{j(),m==="backspace"?N(Array.from(b.current).slice(0,-1).join("")):T(),y.current.sendKey(m)};return c.useLayoutEffect(()=>{const m=E.current;m.value=ct,m.setSelectionRange(1,1),m.focus({preventScroll:!0});const V=M=>{if(f.current||M.isComposing)return;const C=M.inputType==="deleteContentBackward"?"backspace":M.inputType==="deleteContentForward"?"delete":null;if(C){if(C==="backspace"&&b.current)return;M.preventDefault(),O(C);return}["insertLineBreak","insertParagraph"].includes(M.inputType)&&(M.preventDefault(),h.current||O("enter"),h.current=!1)},S=()=>{f.current||T()};return m.addEventListener("beforeinput",V),m.addEventListener("termdock:computer-input-reset",S),()=>{m.removeEventListener("beforeinput",V),m.removeEventListener("termdock:computer-input-reset",S),clearTimeout(X.current)}},[]),r.jsxs("div",{className:"relative shrink-0 border-t border-border bg-surface px-2 py-1",children:[!B&&r.jsx("span",{"aria-hidden":"true",className:"pointer-events-none absolute inset-y-1 left-5 flex items-center truncate pr-5 text-sm text-muted-foreground",children:x("computer.keyboardPlaceholder")}),r.jsx("input",{ref:E,className:"min-h-11 w-full rounded-md border border-border bg-background px-3 text-base outline-none focus:border-primary","aria-label":x("computer.keyboardInput"),autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",spellCheck:!1,inputMode:"text",enterKeyHint:"enter",maxLength:1025,defaultValue:ct,onPaste:m=>{if(f.current||!m.clipboardData.types.includes("text/plain"))return;m.preventDefault(),j(),T();const V=m.clipboardData.getData("text/plain");t?t(V):y.current.sendText(V)},onChange:m=>{g(!!m.target.value.replace(/^\u200b/,"")),!(f.current||m.nativeEvent.isComposing)&&(m.nativeEvent.inputType==="deleteContentBackward"&&!b.current&&!m.target.value?O("backspace"):z())},onCompositionStart:()=>{f.current=!0,h.current=!1},onCompositionEnd:()=>{f.current=!1,z(),h.current=!0,clearTimeout(X.current),X.current=setTimeout(()=>{h.current=!1},0)},onFocus:()=>i?.(!0),onBlur:()=>{f.current||(j(),T()),i?.(!1)},onKeyDown:m=>{if(f.current||m.nativeEvent.isComposing||m.keyCode===229)return;const V=m.ctrlKey||m.altKey||m.metaKey,S=(m.ctrlKey||m.metaKey)&&!m.altKey&&m.key.toLowerCase()==="v";if(s&&!S&&!m.getModifierState("AltGraph")&&(V||m.shiftKey)){const F={Enter:65293,Backspace:65288,Delete:65535,Tab:65289,ArrowUp:65362,ArrowDown:65364,ArrowLeft:65361,ArrowRight:65363,Home:65360,End:65367,PageUp:65365,PageDown:65366}[m.key]??(V&&m.key.length===1?m.key.toLowerCase().codePointAt(0):void 0);if(F!==void 0){m.preventDefault(),j();const w=[];m.ctrlKey&&w.push([65507,"ControlLeft"]),m.altKey&&w.push([65513,"AltLeft"]),m.metaKey&&!w.some(([K])=>K===p[0])&&w.push(p),m.shiftKey&&w.push([65505,"ShiftLeft"]),w.push([F,m.code||m.key]),T(),s(w);return}}const M=Nr[m.key];M&&(m.preventDefault(),O(M))}})]})}function Tr(n){let o=[],s=null;const t=new Map,p=()=>{s=null,o.splice(0,32).forEach(v=>{n(v),v[2]?t.set(v[0],v):t.delete(v[0])}),o.length&&(s=requestAnimationFrame(p))};return{send(v){o.push(...v),s===null&&p()},clear(){s!==null&&cancelAnimationFrame(s),s=null,o=[];const v=[...t.values()].reverse();t.clear();for(const[i,x]of v)try{n([i,x,!1])}catch{}}}}const Lr=n=>Math.max(1,Math.min(8,Number.isFinite(n)?n:1));function Ar(n,o){let s=1;const t="viewportZoom"in n,p=n,v=()=>t?n.pointerTarget.surface():p._canvas,i=()=>t?n.viewportScroller:p._screen,x=t?void 0:p._updateScale;return x&&(p._updateScale=function(){x.call(p),p._display.scale*=s}),{get:()=>s,set(k,f){const E=Lr(k),y=v(),b=i(),h=y.getBoundingClientRect(),X=b.getBoundingClientRect(),B=f??{x:X.left+X.width/2,y:X.top+X.height/2},g={x:(B.x-h.left)/(h.width||1),y:(B.y-h.top)/(h.height||1)};s=E,t?n.viewportZoom=s:p._updateScale();const R=y.getBoundingClientRect();b.scrollLeft+=R.left+g.x*R.width-B.x,b.scrollTop+=R.top+g.y*R.height-B.y,s===1&&(b.scrollLeft=0,b.scrollTop=0),o(s)},pan(k,f){const E=i();E.scrollLeft-=k,E.scrollTop-=f},dispose(){x&&(p._updateScale=x)}}}function _r(n,o){const s=n,t=s._keyboard,p=t._target,v=n.focus,i=document.createElement("textarea");i.tabIndex=-1,i.setAttribute("aria-label","Remote desktop keyboard"),i.autocapitalize="off",i.autocomplete="off",i.spellcheck=!1,Object.assign(i.style,{position:"absolute",left:"0",top:"0",width:"1px",height:"1px",fontSize:"16px",opacity:"0",pointerEvents:"none"}),s._screen.append(i);const x=new AbortController;let k=!1,f=null,E=!1;const y=()=>{s._mouseMoveTimer!==null&&clearTimeout(s._mouseMoveTimer),s._mouseMoveTimer=null,s._mouseButtonMask&&(s._mouseButtonMask=0,s._sendMouse(s._mousePos.x,s._mousePos.y,0))};window.addEventListener("blur",y,{signal:x.signal}),document.addEventListener("visibilitychange",()=>{document.hidden&&(t._allKeysUp(),y())},{signal:x.signal});const b=()=>{f!==null&&cancelAnimationFrame(f),f=null;const h=i.value;i.value="",h&&!n.viewOnly&&o(h)};return i.addEventListener("keydown",h=>{(k||h.isComposing||h.keyCode===229)&&h.stopImmediatePropagation()},{capture:!0,signal:x.signal}),i.addEventListener("compositionstart",()=>{f!==null&&b(),k=!0,t._allKeysUp()},{signal:x.signal}),i.addEventListener("compositionend",()=>{k=!1,f!==null&&cancelAnimationFrame(f),f=requestAnimationFrame(b)},{signal:x.signal}),i.addEventListener("input",h=>{!k&&!h.isComposing&&f===null&&b()},{signal:x.signal}),i.addEventListener("blur",()=>{!k&&f!==null&&b(),t._allKeysUp()},{signal:x.signal}),t.ungrab(),t._target=i,n.viewOnly||t.grab(),n.focus=h=>{!E&&!n.viewOnly&&i.focus(h)},document.activeElement===p&&n.focus({preventScroll:!0}),()=>{E||(E=!0,f!==null&&(k?cancelAnimationFrame(f):b()),y(),x.abort(),t.ungrab(),t._target=p,n.viewOnly||t.grab(),n.focus=v,i.remove())}}function*_t(n){for(const o of n.replace(/\r\n?/g,`
3
3
  `)){const s=o.codePointAt(0);yield o===`
4
- `?65293:o===" "?65289:s<256?s:16777216|s}}const We=1048576,It="termdock:computer-copy";function Mr(n,o,s){const t=new AbortController;let p=!1,v=-1/0,i=!0;const x=new Set,k=b=>{if(!(b.ctrlKey||b.metaKey)||b.altKey||b.isComposing)return;const h=b.key.toLowerCase();h==="v"?(p=b.shiftKey,x.add(b.code||b.key),b.stopImmediatePropagation()):(h==="c"||h==="x")&&(v=performance.now())},f=b=>{b.preventDefault(),b.stopImmediatePropagation();const h=b.clipboardData;if(!h||!Array.from(h.types).includes("text/plain")){s.failed();return}const X=h.getData("text/plain");if(X.length>We){s.failed();return}try{s.paste(X,p)}catch{s.failed()}p=!1},E=b=>{const h=b.detail?.text;if(typeof h!="string"||h.length>We){s.failed();return}s.receive(h),performance.now()-v<2e3&&(v=-1/0,navigator.clipboard?.writeText?navigator.clipboard.writeText(h).catch(()=>{i&&s.failed()}):s.failed())},y={capture:!0,signal:t.signal};return n.addEventListener(It,()=>{v=performance.now()},y),n.addEventListener("keydown",k,y),n.addEventListener("keyup",b=>{x.delete(b.code||b.key)&&b.stopImmediatePropagation()},y),n.addEventListener("paste",f,y),o.addEventListener("clipboard",E,{signal:t.signal}),o.addEventListener("clipboarderror",s.failed,{signal:t.signal}),window.addEventListener("blur",()=>{x.clear(),p=!1,v=-1/0},{signal:t.signal}),()=>{i=!1,t.abort()}}function Rr(){try{if(sessionStorage.getItem("termdock:computer-motion-trace")==="1")return Pr()}catch{}}function Pr(){const n=performance.now(),o=n+15*6e4,s=`motion-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;let t=[],p=0,v=0,i=!1,x;const k=f=>{if(clearTimeout(x),x=void 0,!t.length)return;const E=t;t=[];for(let y=0;y<E.length;y+=64)Gt("info","COMPUTER_MOTION_TRACE",{version:2,id:s,sequence:++v,startedAt:performance.timeOrigin+n,reason:f,dropped:y?0:p,samples:E.slice(y,y+64)});p=0};return{record(f,E={}){if(i)return;const y=performance.now()-n;if(performance.now()>=o){k("expired"),i=!0;return}t.length>=8192&&(t.splice(2048,1),p++),t.push([Math.round(y*10)/10,f,E]),clearTimeout(x),x=setTimeout(()=>k("idle"),750)},flush:k,dispose(){i||(i=!0,k("dispose"))}}}const he="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",ge="min-h-11 w-full rounded-md border border-border bg-background px-2 text-sm outline-none focus:border-primary";function Xe(n){return/API_NOT_ALLOWED|AUTHORIZATION|revoked|PAIRING/.test(n)?"computer.permission":n.includes("READ_ONLY_PROTOCOL")?"computer.sharedViewUnsupported":n.includes("RDP_BACKEND_UNAVAILABLE")?"computer.rdpBackendUnavailable":n.includes("RDP_CERTIFICATE")?"computer.rdpCertificate":n.includes("CREDENTIALS_MISSING")?"computer.loginExpired":n.includes("CREDENTIALS_FAILED")?"computer.loginSaveFailed":n.includes("AUTH_FAILED")?"computer.authFailed":n.includes("RDP_FAILED")?"computer.rdpFailed":n.includes("SCREEN_SHARING_OFF")?"computer.sharingOff":n.includes("PRIVATE_HOST_ONLY")?"computer.privateOnly":n.includes("INVALID_HOST")?"computer.invalidHost":n.includes("TIMEOUT")?"computer.timeout":n.includes("UNREACHABLE")?"computer.unreachable":n.includes("DISCONNECTED")?"computer.disconnected":"computer.failed"}const Ot=30*6e4;function Dr({active:n=!0}){const o=Mt(),s=!!o&&o.computers?.[0]?.access!=="control",{t}=Pt(),p=c.useMemo(()=>Rr(),[]);c.useEffect(()=>(p?.record("panel-open",{viewport:[window.innerWidth,window.innerHeight],dpr:window.devicePixelRatio}),p?.flush("panel-open"),()=>p?.dispose()),[p]);const[v,i]=c.useState(()=>Be()?.targetPeerId??""),[x,k]=c.useState(null),{preferences:f,change:E,loaded:y,saveState:b,flush:h,retry:X,credentialKeys:B,loginState:g,credentialRequest:R}=ir(v),N=f.target==="local",T=f[f.target],{host:z,platform:j,protocol:O,port:m,domain:V,ignoreCert:S,username:M}=T,C=O==="rdp"&&x?.rdpAvailable===!1,{fit:F}=f,w=s||f.viewOnly,K=T.rememberLogin&&B.includes(Rt(T)),H=e=>E(l=>({...l,[l.target]:{...l[l.target],...e}})),te=e=>H({username:e}),ce=e=>H({domain:e}),Le=e=>{H({ignoreCert:e}),h()},Ke=e=>H({port:e}),Ae=e=>{s&&!e||(e&&(me.current(),Se.clear(),A(null)),E(l=>({...l,viewOnly:e})),h())},[ke,_e]=c.useState(!1),W=fr(j),Me=j==="mac"?"⌘V":"Ctrl+V",[xe,re]=c.useState(""),[U,ee]=c.useState("idle"),[J,ie]=c.useState(null),[qe,je]=c.useState(""),[a,u]=c.useState(!1),[d,A]=c.useState(null),D=c.useRef(null),[I,ne]=c.useState([]);c.useEffect(()=>{ne([])},[d,w,v]);const[Y,be]=c.useState(!1),[Re,lt]=c.useState(!1),ut=c.useRef(0),[Z,zt]=c.useState(()=>navigator.maxTouchPoints>0||window.innerWidth<=640);c.useEffect(()=>{const e=()=>zt(navigator.maxTouchPoints>0||window.innerWidth<=640);return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const Ue=d==="keyboard"&&Y&&(!Z||!window.visualViewport||Re),[Oe,dt]=c.useState(1),le=c.useRef(null),pt=c.useRef(null),[Ne,mt]=c.useState(""),[Ft,ye]=c.useState(!1),[Ge,ft]=c.useState(null),[Kt,oe]=c.useState(!1),[Ut,Ze]=c.useState(!1),[Vt,$t]=c.useState(!1),[pe,Bt]=c.useState(br),ht=c.useRef(null),me=c.useRef(()=>{}),Pe=c.useRef(()=>{}),[G,Ht]=c.useState(nt),De=c.useRef(!1),ve=c.useRef(""),gt=c.useRef(()=>{}),xt=c.useRef(null),Ve=c.useRef(null),ue=c.useMemo(()=>{const e=document.createElement("div");return e.className="h-full w-full min-h-0 overflow-hidden",e},[]),$=c.useRef(null),Je=c.useRef(!1);Je.current=n&&G&&U==="connected"&&!w;const Se=c.useMemo(()=>Tr(([e,l,L])=>$.current?.sendKey(e,l,L)),[]),Qe=c.useRef(null),fe=c.useRef(0),et=c.useRef(void 0),de=c.useCallback(()=>{me.current(),Pe.current(),le.current?.dispose(),le.current=null,Se.clear(),ht.current=null,fe.current++,clearTimeout(et.current);const e=$.current;$.current=null,e?.disconnect(),Qe.current?.close(),Qe.current=null,ue.replaceChildren()},[ue,Se]);c.useLayoutEffect(()=>(Ve.current?.appendChild(ue),()=>{ue.remove()}),[ue,a]),c.useEffect(()=>()=>de(),[de]),c.useEffect(()=>{const e=()=>{const l=nt();Ht(l),!l&&(u(!1),A(null))};return window.addEventListener(Nt,e),()=>window.removeEventListener(Nt,e)},[]),c.useEffect(()=>{if(n&&G||(me.current(),Pe.current(),Se.clear(),u(!1),A(null),U==="idle"||U==="error"))return;const e=setTimeout(()=>{De.current=!1,ve.current="",de(),ee("idle"),re("")},Ot);return()=>clearTimeout(e)},[n,G,U,de,Se]),c.useEffect(()=>{const e=()=>i(Be()?.targetPeerId??"");return window.addEventListener(St,e),()=>window.removeEventListener(St,e)},[]),c.useEffect(()=>{de(),De.current=!1,ve.current="",ee("idle"),ie(null),re(""),k(null),u(!1),A(null),_e(!1),je(""),mt(""),ye(!1);const e=new AbortController;return fetch("/api/computer/status",{signal:e.signal}).then(async l=>{if(!l.ok)throw new Error(l.status===403?"API_NOT_ALLOWED":"COMPUTER_FAILED");return await l.json()}).then(l=>{e.signal.aborted||k(l)}).catch(l=>{e.signal.aborted||ie(Xe(String(l)))}),()=>{e.abort(),de()}},[v,de]),c.useEffect(()=>{const e=$.current;(w||!n||!G)&&Pe.current(),e&&((!n||!G)&&!("pointerTarget"in e)&&hr(e),e.viewOnly=w||!n||!G)},[w,n,G,U]),c.useEffect(()=>{$.current&&($.current.scaleViewport=F)},[F]),c.useEffect(()=>{$.current&&"pauseResize"in $.current&&($.current.pauseResize=!!d||!n||!G)},[d,n,G,U]),c.useEffect(()=>{const e=$.current;e&&("keyboardActive"in e?e.keyboardActive=d==="keyboard":e.focusOnClick=d!=="keyboard")},[d]);const bt=e=>{e===N||Q||!y||(re(""),ie(null),E(l=>({...l,target:e?"local":"remote"})),h())},yt=()=>{De.current=!0,ve.current="",de(),ee("idle"),re(""),u(!1),A(null),ye(!1)},vt=async e=>{if(e?.preventDefault(),C)return;if(De.current=!0,U==="credentials"&&$.current&&"sendCredentials"in $.current){ve.current=xe,$.current.sendCredentials({username:M,password:xe}),ee("connecting");return}if(!n||!nt()||!y||!xe&&!K)return;h(),ft(null),oe(!1),Ze(!1),de(),ie(null),je(""),ee("connecting"),ye(!1);const l=fe.current,L=_=>{l===fe.current&&(de(),ee("error"),ie(_),A(null),ve.current="",(_==="computer.authFailed"||_==="computer.permission"||_==="computer.loginExpired")&&re(""),K&&(_==="computer.authFailed"||_==="computer.loginExpired")&&R("forget",T).catch(()=>{}))};et.current=setTimeout(()=>L("computer.timeout"),6e4);try{let _=xe||await R("use",T);if(l!==fe.current)return;ve.current=_||"";let q;if(O==="rdp"){const{RdpSession:se}=await Tt(async()=>{const{RdpSession:Te}=await import("./rdpSession-tgxFIJYE.js");return{RdpSession:Te}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]));if(l!==fe.current)return;document.activeElement?.blur?.(),ot.flushSync(()=>{ee("connecting")});const Ce=Ve.current?.getBoundingClientRect(),Ee=kr(Ce?.width||1280,Ce?.height||800);q=new se(ue,{host:z.trim(),port:Number(m),username:M.trim(),password:_||"",domain:V.trim(),ignoreCert:S,...Ee},Te=>L(Xe(Te)),p)}else{const{default:se}=await Tt(async()=>{const{default:Te}=await import("./rfb-CxsXsMUX.js");return{default:Te}},[]);if(l!==fe.current)return;const Ce=new pr(z.trim(),Te=>L(Xe(Te)));Qe.current=Ce;const Ee=new se(ue,Ce,{shared:!0,credentials:{username:M.trim()||void 0,password:_}});j==="mac"&&dr(Ee,Ce),Ee.background="var(--chrome-bg)",Ee.resizeSession=!1,Ee.qualityLevel=6,Ee.compressionLevel=2,q=Ee}_=void 0,$.current=q,q.scaleViewport=F,q.viewOnly=w,q.addEventListener("connect",()=>{if(l!==fe.current)return;clearTimeout(et.current),ee("connected"),re(""),window.innerWidth<=640&&document.activeElement?.blur?.();const se=ve.current;ve.current="",T.rememberLogin&&se&&R("save",T,se).catch(()=>{})}),q.addEventListener("credentialsrequired",se=>{if(l!==fe.current)return;const Ce=se.detail.types;$t(Ce.includes("username")),ee("credentials")}),q.addEventListener("securityfailure",()=>L("computer.authFailed")),q.addEventListener("disconnect",()=>L("computer.disconnected")),q.addEventListener("desktopname",se=>{l===fe.current&&je(se.detail.name)})}catch(_){L(Xe(String(_)))}},ze=e=>{const l=$.current;!n||!G||!l||U!=="connected"||w||(d==="keyboard"?D.current?.focus({preventScroll:!0}):d!=="clipboard"&&!Z&&l.focus?.({preventScroll:!0}),Se.send([...e.map(([L,_])=>[L,_,!0]),...[...e].reverse().map(([L,_])=>[L,_,!1])]))},P=U==="connected",Q=U==="connecting"||U==="credentials",$e=P||U==="connecting";c.useEffect(()=>{const e=$.current;if(!P||!e||!("viewportZoom"in e)&&!("_display"in e))return;const l=Ar(e,dt);return le.current=l,dt(1),()=>{l.dispose(),le.current===l&&(le.current=null)}},[P]),c.useEffect(()=>{const e=$.current,l=Ve.current;if(!n||!G||!P||d&&d!=="keyboard"||pe!=="trackpad"&&!(navigator.maxTouchPoints>0)||!e||!l)return;const L="pointerTarget"in e?e.pointerTarget:gr(e),_=Er(l,L,ht,{mode:pe,zoom:le.current??void 0,viewOnly:w,trace:p});return me.current=_,()=>{_(),me.current===_&&(me.current=()=>{})}},[n,G,P,w,pe,a,d,p]),c.useEffect(()=>{const e=$.current;if(!(!n||!G||!P||w||!e))return Mr(ue,e,{paste:(l,L)=>{e.clipboardPasteFrom(l),ze(L?[...W.paste.slice(0,1),[65505,"ShiftLeft"],...W.paste.slice(1)]:W.paste),ye(!0),oe(!1)},receive:l=>{ft(l),Ze(!1)},failed:()=>{oe(!0),A("clipboard")}})},[n,G,P,w,j,ue]),c.useEffect(()=>{const e=$.current;if(!n||!G||!P||w||!e||"pointerTarget"in e||!("_keyboard"in e))return;const l=_r(e,tt);return Pe.current=l,()=>{l(),Pe.current===l&&(Pe.current=()=>{})}},[n,G,P,w]);const wt=e=>{e!==pe&&(me.current(),Bt(e),yr(e))};gt.current=()=>{vt()},c.useEffect(()=>{n&&G&&y&&x&&!C&&f.autoConnect&&K&&U==="idle"&&!De.current&&gt.current()},[n,G,y,x,C,f.autoConnect,K,U]);const Ct=()=>{De.current=!0,R("forget",T).catch(()=>{})},we=e=>{if(e==="keyboard"){if(d==="keyboard"&&!Ue){D.current?.blur(),D.current?.focus({preventScroll:!0});return}me.current(),ut.current=window.visualViewport?.height??window.innerHeight,ot.flushSync(()=>{be(!1),lt(!1),A(l=>l===e?null:e)})}else me.current(),A(l=>l===e?null:e)},ae=e=>{D.current?.dispatchEvent(new Event("termdock:computer-input-reset"));const l=[...I,...e].filter(([L],_,q)=>q.findIndex(([se])=>se===L)===_);l.some(([L])=>L===W.copy[0][0])&&l.some(([L])=>L===99||L===120)&&ue.dispatchEvent(new Event(It)),ne([]),ze(l)},Yt=()=>{le.current?.set(1),E(e=>({...e,fit:!0})),h()},tt=e=>{if(!$.current||!Je.current)return;const l=[];for(const L of _t(e))l.push([L,null,!0],[L,null,!1]);Se.send(l)},Xt=e=>{if(!(!$.current||!Je.current))try{if(e.length>We)throw new Error("Clipboard limit");$.current.clipboardPasteFrom(e),ae(W.paste),oe(!1),ye(!0)}catch{oe(!0),A("clipboard")}},Wt=e=>{if(!I.length){tt(e);return}const[l,...L]=Array.from(e);l&&ae([[Array.from(_t(l))[0],""]]),L.length&&tt(L.join(""))};c.useEffect(()=>{if(!P||d!=="keyboard"&&d!=="clipboard"||!window.visualViewport)return;const e=window.visualViewport,l=pt.current,L=()=>{if(d==="keyboard"&&lt(Y&&ut.current-e.height>100),l&&e.height>=160)if(a)l.style.height=`${e.height}px`,l.style.top=`${e.offsetTop}px`;else{const _=e.offsetTop+e.height,q=Math.max(0,_-l.getBoundingClientRect().top);l.style.height=`${Math.min(l.parentElement?.clientHeight||q,q)}px`}};return L(),e.addEventListener("resize",L),e.addEventListener("scroll",L),()=>{e.removeEventListener("resize",L),e.removeEventListener("scroll",L),l&&(l.style.height="",l.style.top="")}},[P,d,a,Y]);const Et=r.jsxs("div",{className:"flex shrink-0 items-center text-xs",role:"group","aria-label":t("computer.desktopZoom"),title:Z?t("computer.pinchHint"):void 0,children:[r.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center","aria-label":t("computer.zoomOut"),disabled:!P||Oe<=1,onPointerDown:e=>e.preventDefault(),onClick:()=>le.current?.set(Oe/1.25),children:r.jsx(cr,{size:16})}),r.jsxs("button",{type:"button",className:"min-h-11 min-w-11","aria-label":t("computer.resetZoom"),disabled:!P,onPointerDown:e=>e.preventDefault(),onClick:Yt,children:[Math.round(Oe*100),"%"]}),r.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center","aria-label":t("computer.zoomIn"),disabled:!P||Oe>=8,onPointerDown:e=>e.preventDefault(),onClick:()=>le.current?.set(Oe*1.25),children:r.jsx(sr,{size:16})}),Z&&r.jsx("span",{className:"hidden pr-2 text-[10px] text-muted-foreground sm:inline",children:t("computer.pinchHint")})]}),Ie=`flex shrink-0 items-center justify-center rounded-md hover:bg-surface-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary ${Z?"min-h-11 min-w-11":"h-8 min-w-8"}`,kt=r.jsxs("div",{ref:pt,className:`flex min-h-0 flex-col bg-surface text-foreground ${a?"fixed inset-0 z-modal-panel h-dvh pb-[env(safe-area-inset-bottom)] pt-[env(safe-area-inset-top)]":"relative h-full"}`,role:a?"dialog":void 0,"aria-modal":a||void 0,"aria-label":t("computer.title"),onKeyDown:e=>{e.stopPropagation(),e.key==="Escape"&&!e.nativeEvent.isComposing&&d&&(e.preventDefault(),A(null))},onKeyUp:e=>e.stopPropagation(),children:[r.jsxs("div",{className:`relative z-30 flex shrink-0 items-center gap-2 border-b border-border bg-surface px-2 ${Z?"min-h-12":"min-h-8"}`,children:[a&&r.jsx("button",{type:"button",className:Ie,onClick:()=>{u(!1),A(null)},"aria-label":t("computer.exitFullscreen"),children:r.jsx(Qt,{size:20})}),r.jsx(Zt,{size:16,className:"shrink-0 text-muted-foreground"}),r.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium",children:P&&(qe||(N?x?.hostname||Be()?.serviceName:z))||t("computer.title")}),P&&r.jsx("span",{className:"text-[11px] text-primary",children:t("computer.connected")}),P&&g==="error"&&r.jsx("span",{role:"alert",className:"text-[11px] text-destructive",children:t("computer.loginSaveFailed")}),P&&b==="saving"&&r.jsx("span",{role:"status","aria-label":t("computer.settingsSaving"),title:t("computer.settingsSaving"),children:r.jsx(Lt,{size:12,className:"animate-spin text-muted-foreground"})}),P&&b==="error"&&r.jsxs("button",{type:"button",className:he,title:t("computer.settingsSaveFailed"),"aria-label":t("computer.settingsSaveFailed"),onClick:X,children:["! ",t("computer.retry")]}),Q&&r.jsxs("button",{type:"button",className:`${Ie} gap-1 px-1 text-xs`,onClick:yt,children:[r.jsx(At,{size:14}),t("computer.cancel")]}),P&&!Z&&d==="keyboard"&&r.jsx("button",{type:"button",className:Ie,onPointerDown:e=>e.preventDefault(),onClick:()=>we("keyboard"),"aria-label":t("computer.keyboard"),"aria-pressed":Ue,children:r.jsx(He,{size:18})}),P&&!Z&&r.jsx("button",{type:"button",className:`${Ie} ${d==="clipboard"?"bg-surface-2 text-primary":""}`,disabled:w,onClick:()=>we("clipboard"),"aria-label":t("computer.clipboardTool"),title:t("computer.clipboardTool"),"aria-pressed":d==="clipboard",children:r.jsx(st,{size:18})}),P&&!a&&r.jsxs("button",{type:"button",className:`${Ie} gap-1 px-1 text-xs`,onClick:()=>u(!0),"aria-label":t("computer.fullscreen"),children:[r.jsx(er,{size:16}),t("computer.expand")]}),P&&r.jsx("button",{type:"button",className:Ie,onClick:()=>we("tools"),"aria-label":t("computer.tools"),"aria-expanded":d==="tools",children:r.jsx(tr,{size:18})})]}),!$e&&r.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto p-4 sm:p-6",children:r.jsxs("div",{className:"mx-auto w-full max-w-md",children:[r.jsxs("form",{className:"space-y-3",onSubmit:e=>{vt(e)},children:[r.jsxs("div",{hidden:!!o,className:"grid grid-cols-2 gap-1 rounded-lg bg-background p-1",role:"group","aria-label":t("computer.target"),children:[r.jsx("button",{type:"button",className:`min-h-11 rounded-md px-3 text-sm font-medium ${N?"bg-surface-2 text-foreground":"text-muted-foreground hover:bg-surface"}`,"aria-pressed":N,disabled:Q||!x||!y,onClick:()=>bt(!0),children:t("computer.thisComputer")}),r.jsx("button",{type:"button",className:`min-h-11 rounded-md px-3 text-sm font-medium ${N?"text-muted-foreground hover:bg-surface":"bg-surface-2 text-foreground"}`,"aria-pressed":!N,disabled:Q||!y,onClick:()=>bt(!1),children:t("computer.otherComputer")})]}),N?r.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",role:"status",children:x?t("computer.localService",{name:Be()?.serviceName||x.hostname}):t("computer.loading")}):r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t("computer.host")}),r.jsx("input",{className:ge,value:z,disabled:!!o||Q||!y,onChange:e=>{H({host:e.target.value,domain:"",ignoreCert:!1}),re(""),ie(null)},placeholder:t("computer.hostPlaceholder"),onBlur:()=>{h()},autoCapitalize:"none",autoCorrect:"off",spellCheck:!1,required:!0,maxLength:253})]}),r.jsxs("p",{className:"text-xs text-muted-foreground",children:[j==="mac"?"macOS":j==="linux"?"Ubuntu / Linux":"Windows"," · ",O.toUpperCase()," · ",O==="rdp"?m||"3389":"5900",w?` · ${t("computer.viewOnly")}`:""]}),r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t(O==="rdp"?"computer.rdpUsername":"computer.username")}),r.jsx("input",{className:ge,value:M,disabled:!y,onChange:e=>te(e.target.value),onBlur:()=>{h()},autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",required:O==="rdp"||U==="credentials"&&Vt,maxLength:255})]}),r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t("computer.password")}),r.jsx("input",{className:ge,type:"password",value:xe,disabled:!y,onChange:e=>re(e.target.value),placeholder:K&&U!=="credentials"?t("computer.savedPassword"):void 0,autoComplete:"new-password",required:!K||U==="credentials",maxLength:1024})]}),r.jsx("p",{className:"text-[11px] leading-relaxed text-muted-foreground",children:t(O==="rdp"?"computer.rdpLoginHint":"computer.vncLoginHint")}),r.jsxs("div",{hidden:!!o,className:"flex min-h-11 items-center justify-between gap-2 text-xs",children:[r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:T.rememberLogin,disabled:!!o||Q||!y||g==="saving",onChange:e=>{const l=e.target.checked;H({rememberLogin:l}),!l&&K?R("forget",{...T,rememberLogin:l}).catch(()=>{}):h()}}),t("computer.rememberLogin")]}),K&&r.jsx("button",{type:"button",className:"min-h-11 text-muted-foreground underline",disabled:Q||g==="saving",onClick:Ct,children:t("computer.forgetLogin")})]}),g==="error"&&!J&&r.jsx("p",{role:"alert",className:"text-xs text-destructive",children:t("computer.loginSaveFailed")}),C&&r.jsxs("div",{role:"status",className:"space-y-1 text-xs leading-relaxed text-muted-foreground",children:[r.jsx("p",{children:t("computer.rdpBackendUnavailable")}),r.jsx("p",{children:t("computer.rdpBackendRecovery")})]}),U==="credentials"&&r.jsx("p",{className:"text-xs text-primary",children:t("computer.credentials")}),J&&r.jsxs("div",{role:"alert",className:"rounded-md bg-surface-2 p-3 text-xs leading-relaxed text-destructive",children:[t(J),J==="computer.rdpCertificate"&&r.jsxs("label",{className:"mt-1 flex min-h-11 items-center gap-2 text-foreground",children:[r.jsx("input",{type:"checkbox",checked:S,onChange:e=>Le(e.target.checked)}),t("computer.trustCertificateHere")]}),U==="error"&&J!=="computer.rdpCertificate"&&r.jsx("button",{type:"button",className:"mt-1 block min-h-9 text-foreground underline",onClick:()=>{_e(!0),requestAnimationFrame(()=>xt.current?.scrollIntoView?.({block:"nearest",behavior:"smooth"}))},children:t("computer.checkSettings")})]}),r.jsx("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:!y||C||g==="saving"||N&&!x||!z.trim()||!xe&&(!K||U==="credentials")||O==="rdp"&&(!M.trim()||!Number.isInteger(Number(m))||Number(m)<1||Number(m)>65535),children:t(U==="credentials"?"computer.authenticate":U==="error"?"computer.retryConnect":"computer.connect")}),r.jsxs("details",{hidden:!!o,ref:xt,className:"border-b border-border text-xs",open:ke,onToggle:e=>_e(e.currentTarget.open),children:[r.jsxs("summary",{className:"flex min-h-11 cursor-pointer list-none items-center justify-between text-muted-foreground",children:[r.jsx("span",{children:t("computer.advanced")}),r.jsx("span",{"aria-hidden":"true",children:ke?"−":"+"})]}),r.jsxs("div",{className:"space-y-3 pb-4",children:[r.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.platform")}),r.jsxs("select",{className:ge,value:j,disabled:Q||!y,onChange:e=>{mr(e.target.value)&&H({platform:e.target.value,protocol:e.target.value==="mac"?"vnc":"rdp",ignoreCert:!1}),re(""),h()},children:[r.jsx("option",{value:"mac",children:"macOS"}),r.jsx("option",{value:"linux",children:"Ubuntu / Linux"}),r.jsx("option",{value:"windows",children:"Windows"})]})]}),r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.protocol")}),r.jsxs("select",{className:ge,value:O,disabled:Q||!y,onChange:e=>{H({protocol:e.target.value==="rdp"?"rdp":"vnc"}),re(""),ie(null),h()},children:[r.jsx("option",{value:"rdp",children:"RDP"}),r.jsx("option",{value:"vnc",children:"VNC"})]})]})]}),O==="rdp"&&r.jsxs(r.Fragment,{children:[r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.port")}),r.jsx("input",{className:ge,type:"number",min:1,max:65535,step:1,value:m,disabled:Q||!y,onBlur:()=>{h()},onChange:e=>Ke(e.target.value)})]}),r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.domain")}),r.jsx("input",{className:ge,value:V,disabled:Q||!y,onBlur:()=>{h()},onChange:e=>ce(e.target.value),autoComplete:"off",maxLength:255})]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:S,disabled:Q||!y,onChange:e=>Le(e.target.checked)}),t("computer.trustCertificate")]})]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:w,disabled:s||Q||!y,onChange:e=>Ae(e.target.checked)}),t("computer.viewOnly")]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:f.autoConnect,disabled:Q||!y,onChange:e=>{E(l=>({...l,autoConnect:e.target.checked})),h()}}),t("computer.autoConnect")]})]})]})]}),r.jsxs("p",{role:"status",className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:[t(b==="saved"?"computer.settingsSaved":b==="error"?y?"computer.settingsSaveFailed":"computer.settingsLoadFailed":b==="loading"?"computer.settingsLoading":"computer.settingsSaving"),b==="error"&&r.jsx("button",{type:"button",className:"ml-2 min-h-9 text-primary underline",onClick:X,children:t("computer.retry")})]}),r.jsxs("details",{className:"text-xs",children:[r.jsx("summary",{className:"flex min-h-11 cursor-pointer items-center text-muted-foreground",children:t("computer.setup")}),r.jsxs("ol",{className:"ml-4 list-decimal space-y-2 pt-2 leading-relaxed text-muted-foreground",children:[r.jsx("li",{children:t(O==="rdp"?j==="linux"?"computer.rdpLinuxStep1":"computer.rdpStep1":j==="mac"?"computer.step1":j==="linux"?"computer.linuxStep1":"computer.windowsStep1")}),r.jsx("li",{children:t(O==="rdp"?"computer.rdpStep2":j==="mac"?"computer.step2":j==="linux"?"computer.linuxStep2":"computer.windowsStep2")}),r.jsx("li",{children:t("computer.step3")})]}),O==="vnc"&&j==="linux"&&r.jsxs(r.Fragment,{children:[r.jsx("p",{className:"mt-3 leading-relaxed text-muted-foreground",children:t("computer.linuxCommandHint")}),r.jsx("pre",{className:"mt-2 overflow-x-auto rounded-md bg-background p-2 text-[11px]",children:r.jsx("code",{children:`sudo apt install x11vnc
4
+ `?65293:o===" "?65289:s<256?s:16777216|s}}const We=1048576,It="termdock:computer-copy";function Mr(n,o,s){const t=new AbortController;let p=!1,v=-1/0,i=!0;const x=new Set,k=b=>{if(!(b.ctrlKey||b.metaKey)||b.altKey||b.isComposing)return;const h=b.key.toLowerCase();h==="v"?(p=b.shiftKey,x.add(b.code||b.key),b.stopImmediatePropagation()):(h==="c"||h==="x")&&(v=performance.now())},f=b=>{b.preventDefault(),b.stopImmediatePropagation();const h=b.clipboardData;if(!h||!Array.from(h.types).includes("text/plain")){s.failed();return}const X=h.getData("text/plain");if(X.length>We){s.failed();return}try{s.paste(X,p)}catch{s.failed()}p=!1},E=b=>{const h=b.detail?.text;if(typeof h!="string"||h.length>We){s.failed();return}s.receive(h),performance.now()-v<2e3&&(v=-1/0,navigator.clipboard?.writeText?navigator.clipboard.writeText(h).catch(()=>{i&&s.failed()}):s.failed())},y={capture:!0,signal:t.signal};return n.addEventListener(It,()=>{v=performance.now()},y),n.addEventListener("keydown",k,y),n.addEventListener("keyup",b=>{x.delete(b.code||b.key)&&b.stopImmediatePropagation()},y),n.addEventListener("paste",f,y),o.addEventListener("clipboard",E,{signal:t.signal}),o.addEventListener("clipboarderror",s.failed,{signal:t.signal}),window.addEventListener("blur",()=>{x.clear(),p=!1,v=-1/0},{signal:t.signal}),()=>{i=!1,t.abort()}}function Rr(){try{if(sessionStorage.getItem("termdock:computer-motion-trace")==="1")return Pr()}catch{}}function Pr(){const n=performance.now(),o=n+15*6e4,s=`motion-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;let t=[],p=0,v=0,i=!1,x;const k=f=>{if(clearTimeout(x),x=void 0,!t.length)return;const E=t;t=[];for(let y=0;y<E.length;y+=64)Zt("info","COMPUTER_MOTION_TRACE",{version:2,id:s,sequence:++v,startedAt:performance.timeOrigin+n,reason:f,dropped:y?0:p,samples:E.slice(y,y+64)});p=0};return{record(f,E={}){if(i)return;const y=performance.now()-n;if(performance.now()>=o){k("expired"),i=!0;return}t.length>=8192&&(t.splice(2048,1),p++),t.push([Math.round(y*10)/10,f,E]),clearTimeout(x),x=setTimeout(()=>k("idle"),750)},flush:k,dispose(){i||(i=!0,k("dispose"))}}}const he="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",ge="min-h-11 w-full rounded-md border border-border bg-background px-2 text-sm outline-none focus:border-primary";function Xe(n){return/API_NOT_ALLOWED|AUTHORIZATION|revoked|PAIRING/.test(n)?"computer.permission":n.includes("READ_ONLY_PROTOCOL")?"computer.sharedViewUnsupported":n.includes("RDP_BACKEND_UNAVAILABLE")?"computer.rdpBackendUnavailable":n.includes("RDP_CERTIFICATE")?"computer.rdpCertificate":n.includes("CREDENTIALS_MISSING")?"computer.loginExpired":n.includes("CREDENTIALS_FAILED")?"computer.loginSaveFailed":n.includes("AUTH_FAILED")?"computer.authFailed":n.includes("RDP_FAILED")?"computer.rdpFailed":n.includes("SCREEN_SHARING_OFF")?"computer.sharingOff":n.includes("PRIVATE_HOST_ONLY")?"computer.privateOnly":n.includes("INVALID_HOST")?"computer.invalidHost":n.includes("TIMEOUT")?"computer.timeout":n.includes("UNREACHABLE")?"computer.unreachable":n.includes("DISCONNECTED")?"computer.disconnected":"computer.failed"}const Ot=30*6e4;function Dr({active:n=!0}){const o=Mt(),s=!!o&&o.computers?.[0]?.access!=="control",{t}=Pt(),p=c.useMemo(()=>Rr(),[]);c.useEffect(()=>(p?.record("panel-open",{viewport:[window.innerWidth,window.innerHeight],dpr:window.devicePixelRatio}),p?.flush("panel-open"),()=>p?.dispose()),[p]);const[v,i]=c.useState(()=>Be()?.targetPeerId??""),[x,k]=c.useState(null),{preferences:f,change:E,loaded:y,saveState:b,flush:h,retry:X,credentialKeys:B,loginState:g,credentialRequest:R}=ir(v),N=f.target==="local",T=f[f.target],{host:z,platform:j,protocol:O,port:m,domain:V,ignoreCert:S,username:M}=T,C=O==="rdp"&&x?.rdpAvailable===!1,{fit:F}=f,w=s||f.viewOnly,K=T.rememberLogin&&B.includes(Rt(T)),H=e=>E(l=>({...l,[l.target]:{...l[l.target],...e}})),te=e=>H({username:e}),ce=e=>H({domain:e}),Le=e=>{H({ignoreCert:e}),h()},Ke=e=>H({port:e}),Ae=e=>{s&&!e||(e&&(me.current(),Se.clear(),A(null)),E(l=>({...l,viewOnly:e})),h())},[ke,_e]=c.useState(!1),W=fr(j),Me=j==="mac"?"⌘V":"Ctrl+V",[xe,re]=c.useState(""),[U,ee]=c.useState("idle"),[J,ie]=c.useState(null),[qe,je]=c.useState(""),[a,u]=c.useState(!1),[d,A]=c.useState(null),D=c.useRef(null),[I,ne]=c.useState([]);c.useEffect(()=>{ne([])},[d,w,v]);const[Y,be]=c.useState(!1),[Re,lt]=c.useState(!1),ut=c.useRef(0),[G,zt]=c.useState(()=>navigator.maxTouchPoints>0||window.innerWidth<=640);c.useEffect(()=>{const e=()=>zt(navigator.maxTouchPoints>0||window.innerWidth<=640);return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const Ue=d==="keyboard"&&Y&&(!G||!window.visualViewport||Re),[Oe,dt]=c.useState(1),le=c.useRef(null),pt=c.useRef(null),[Ne,mt]=c.useState(""),[Ft,ye]=c.useState(!1),[Ze,ft]=c.useState(null),[Kt,oe]=c.useState(!1),[Ut,Ge]=c.useState(!1),[Vt,$t]=c.useState(!1),[pe,Bt]=c.useState(br),ht=c.useRef(null),me=c.useRef(()=>{}),Pe=c.useRef(()=>{}),[Z,Ht]=c.useState(nt),De=c.useRef(!1),ve=c.useRef(""),gt=c.useRef(()=>{}),xt=c.useRef(null),Ve=c.useRef(null),ue=c.useMemo(()=>{const e=document.createElement("div");return e.className="h-full w-full min-h-0 overflow-hidden",e},[]),$=c.useRef(null),Je=c.useRef(!1);Je.current=n&&Z&&U==="connected"&&!w;const Se=c.useMemo(()=>Tr(([e,l,L])=>$.current?.sendKey(e,l,L)),[]),Qe=c.useRef(null),fe=c.useRef(0),et=c.useRef(void 0),de=c.useCallback(()=>{me.current(),Pe.current(),le.current?.dispose(),le.current=null,Se.clear(),ht.current=null,fe.current++,clearTimeout(et.current);const e=$.current;$.current=null,e?.disconnect(),Qe.current?.close(),Qe.current=null,ue.replaceChildren()},[ue,Se]);c.useLayoutEffect(()=>(Ve.current?.appendChild(ue),()=>{ue.remove()}),[ue,a]),c.useEffect(()=>()=>de(),[de]),c.useEffect(()=>{const e=()=>{const l=nt();Ht(l),!l&&(u(!1),A(null))};return window.addEventListener(Nt,e),()=>window.removeEventListener(Nt,e)},[]),c.useEffect(()=>{if(n&&Z||(me.current(),Pe.current(),Se.clear(),u(!1),A(null),U==="idle"||U==="error"))return;const e=setTimeout(()=>{De.current=!1,ve.current="",de(),ee("idle"),re("")},Ot);return()=>clearTimeout(e)},[n,Z,U,de,Se]),c.useEffect(()=>{const e=()=>i(Be()?.targetPeerId??"");return window.addEventListener(St,e),()=>window.removeEventListener(St,e)},[]),c.useEffect(()=>{de(),De.current=!1,ve.current="",ee("idle"),ie(null),re(""),k(null),u(!1),A(null),_e(!1),je(""),mt(""),ye(!1);const e=new AbortController;return fetch("/api/computer/status",{signal:e.signal}).then(async l=>{if(!l.ok)throw new Error(l.status===403?"API_NOT_ALLOWED":"COMPUTER_FAILED");return await l.json()}).then(l=>{e.signal.aborted||k(l)}).catch(l=>{e.signal.aborted||ie(Xe(String(l)))}),()=>{e.abort(),de()}},[v,de]),c.useEffect(()=>{const e=$.current;(w||!n||!Z)&&Pe.current(),e&&((!n||!Z)&&!("pointerTarget"in e)&&hr(e),e.viewOnly=w||!n||!Z)},[w,n,Z,U]),c.useEffect(()=>{$.current&&($.current.scaleViewport=F)},[F]),c.useEffect(()=>{$.current&&"pauseResize"in $.current&&($.current.pauseResize=!!d||!n||!Z)},[d,n,Z,U]),c.useEffect(()=>{const e=$.current;e&&("keyboardActive"in e?e.keyboardActive=d==="keyboard":e.focusOnClick=d!=="keyboard")},[d]);const bt=e=>{e===N||Q||!y||(re(""),ie(null),E(l=>({...l,target:e?"local":"remote"})),h())},yt=()=>{De.current=!0,ve.current="",de(),ee("idle"),re(""),u(!1),A(null),ye(!1)},vt=async e=>{if(e?.preventDefault(),C)return;if(De.current=!0,U==="credentials"&&$.current&&"sendCredentials"in $.current){ve.current=xe,$.current.sendCredentials({username:M,password:xe}),ee("connecting");return}if(!n||!nt()||!y||!xe&&!K)return;h(),ft(null),oe(!1),Ge(!1),de(),ie(null),je(""),ee("connecting"),ye(!1);const l=fe.current,L=_=>{l===fe.current&&(de(),ee("error"),ie(_),A(null),ve.current="",(_==="computer.authFailed"||_==="computer.permission"||_==="computer.loginExpired")&&re(""),K&&(_==="computer.authFailed"||_==="computer.loginExpired")&&R("forget",T).catch(()=>{}))};et.current=setTimeout(()=>L("computer.timeout"),6e4);try{let _=xe||await R("use",T);if(l!==fe.current)return;ve.current=_||"";let q;if(O==="rdp"){const{RdpSession:se}=await Tt(async()=>{const{RdpSession:Te}=await import("./rdpSession-C5rS-ImV.js");return{RdpSession:Te}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]));if(l!==fe.current)return;document.activeElement?.blur?.(),ot.flushSync(()=>{ee("connecting")});const Ce=Ve.current?.getBoundingClientRect(),Ee=kr(Ce?.width||1280,Ce?.height||800);q=new se(ue,{host:z.trim(),port:Number(m),username:M.trim(),password:_||"",domain:V.trim(),ignoreCert:S,...Ee},Te=>L(Xe(Te)),p)}else{const{default:se}=await Tt(async()=>{const{default:Te}=await import("./rfb-CxsXsMUX.js");return{default:Te}},[]);if(l!==fe.current)return;const Ce=new pr(z.trim(),Te=>L(Xe(Te)));Qe.current=Ce;const Ee=new se(ue,Ce,{shared:!0,credentials:{username:M.trim()||void 0,password:_}});j==="mac"&&dr(Ee,Ce),Ee.background="var(--chrome-bg)",Ee.resizeSession=!1,Ee.qualityLevel=6,Ee.compressionLevel=2,q=Ee}_=void 0,$.current=q,q.scaleViewport=F,q.viewOnly=w,q.addEventListener("connect",()=>{if(l!==fe.current)return;clearTimeout(et.current),ee("connected"),re(""),window.innerWidth<=640&&document.activeElement?.blur?.();const se=ve.current;ve.current="",T.rememberLogin&&se&&R("save",T,se).catch(()=>{})}),q.addEventListener("credentialsrequired",se=>{if(l!==fe.current)return;const Ce=se.detail.types;$t(Ce.includes("username")),ee("credentials")}),q.addEventListener("securityfailure",()=>L("computer.authFailed")),q.addEventListener("disconnect",()=>L("computer.disconnected")),q.addEventListener("desktopname",se=>{l===fe.current&&je(se.detail.name)})}catch(_){L(Xe(String(_)))}},ze=e=>{const l=$.current;!n||!Z||!l||U!=="connected"||w||(d==="keyboard"?D.current?.focus({preventScroll:!0}):d!=="clipboard"&&!G&&l.focus?.({preventScroll:!0}),Se.send([...e.map(([L,_])=>[L,_,!0]),...[...e].reverse().map(([L,_])=>[L,_,!1])]))},P=U==="connected",Q=U==="connecting"||U==="credentials",$e=P||U==="connecting";c.useEffect(()=>{const e=$.current;if(!P||!e||!("viewportZoom"in e)&&!("_display"in e))return;const l=Ar(e,dt);return le.current=l,dt(1),()=>{l.dispose(),le.current===l&&(le.current=null)}},[P]),c.useEffect(()=>{const e=$.current,l=Ve.current;if(!n||!Z||!P||d&&d!=="keyboard"||pe!=="trackpad"&&!(navigator.maxTouchPoints>0)||!e||!l)return;const L="pointerTarget"in e?e.pointerTarget:gr(e),_=Er(l,L,ht,{mode:pe,zoom:le.current??void 0,viewOnly:w,trace:p});return me.current=_,()=>{_(),me.current===_&&(me.current=()=>{})}},[n,Z,P,w,pe,a,d,p]),c.useEffect(()=>{const e=$.current;if(!(!n||!Z||!P||w||!e))return Mr(ue,e,{paste:(l,L)=>{e.clipboardPasteFrom(l),ze(L?[...W.paste.slice(0,1),[65505,"ShiftLeft"],...W.paste.slice(1)]:W.paste),ye(!0),oe(!1)},receive:l=>{ft(l),Ge(!1)},failed:()=>{oe(!0),A("clipboard")}})},[n,Z,P,w,j,ue]),c.useEffect(()=>{const e=$.current;if(!n||!Z||!P||w||!e||"pointerTarget"in e||!("_keyboard"in e))return;const l=_r(e,tt);return Pe.current=l,()=>{l(),Pe.current===l&&(Pe.current=()=>{})}},[n,Z,P,w]);const wt=e=>{e!==pe&&(me.current(),Bt(e),yr(e))};gt.current=()=>{vt()},c.useEffect(()=>{n&&Z&&y&&x&&!C&&f.autoConnect&&K&&U==="idle"&&!De.current&&gt.current()},[n,Z,y,x,C,f.autoConnect,K,U]);const Ct=()=>{De.current=!0,R("forget",T).catch(()=>{})},we=e=>{if(e==="keyboard"){if(d==="keyboard"&&!Ue){D.current?.blur(),D.current?.focus({preventScroll:!0});return}me.current(),ut.current=window.visualViewport?.height??window.innerHeight,ot.flushSync(()=>{be(!1),lt(!1),A(l=>l===e?null:e)})}else me.current(),A(l=>l===e?null:e)},ae=e=>{D.current?.dispatchEvent(new Event("termdock:computer-input-reset"));const l=[...I,...e].filter(([L],_,q)=>q.findIndex(([se])=>se===L)===_);l.some(([L])=>L===W.copy[0][0])&&l.some(([L])=>L===99||L===120)&&ue.dispatchEvent(new Event(It)),ne([]),ze(l)},Yt=()=>{le.current?.set(1),E(e=>({...e,fit:!0})),h()},tt=e=>{if(!$.current||!Je.current)return;const l=[];for(const L of _t(e))l.push([L,null,!0],[L,null,!1]);Se.send(l)},Xt=e=>{if(!(!$.current||!Je.current))try{if(e.length>We)throw new Error("Clipboard limit");$.current.clipboardPasteFrom(e),ae(W.paste),oe(!1),ye(!0)}catch{oe(!0),A("clipboard")}},Wt=e=>{if(!I.length){tt(e);return}const[l,...L]=Array.from(e);l&&ae([[Array.from(_t(l))[0],""]]),L.length&&tt(L.join(""))};c.useEffect(()=>{if(!P||d!=="keyboard"&&d!=="clipboard"||!window.visualViewport)return;const e=window.visualViewport,l=pt.current,L=()=>{if(d==="keyboard"&&lt(Y&&ut.current-e.height>100),l&&e.height>=160)if(a)l.style.height=`${e.height}px`,l.style.top=`${e.offsetTop}px`;else{const _=e.offsetTop+e.height,q=Math.max(0,_-l.getBoundingClientRect().top);l.style.height=`${Math.min(l.parentElement?.clientHeight||q,q)}px`}};return L(),e.addEventListener("resize",L),e.addEventListener("scroll",L),()=>{e.removeEventListener("resize",L),e.removeEventListener("scroll",L),l&&(l.style.height="",l.style.top="")}},[P,d,a,Y]);const Et=r.jsxs("div",{className:"flex shrink-0 items-center text-xs",role:"group","aria-label":t("computer.desktopZoom"),title:G?t("computer.pinchHint"):void 0,children:[r.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center","aria-label":t("computer.zoomOut"),disabled:!P||Oe<=1,onPointerDown:e=>e.preventDefault(),onClick:()=>le.current?.set(Oe/1.25),children:r.jsx(cr,{size:16})}),r.jsxs("button",{type:"button",className:"min-h-11 min-w-11","aria-label":t("computer.resetZoom"),disabled:!P,onPointerDown:e=>e.preventDefault(),onClick:Yt,children:[Math.round(Oe*100),"%"]}),r.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center","aria-label":t("computer.zoomIn"),disabled:!P||Oe>=8,onPointerDown:e=>e.preventDefault(),onClick:()=>le.current?.set(Oe*1.25),children:r.jsx(sr,{size:16})}),G&&r.jsx("span",{className:"hidden pr-2 text-[10px] text-muted-foreground sm:inline",children:t("computer.pinchHint")})]}),Ie=`flex shrink-0 items-center justify-center rounded-md hover:bg-surface-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary ${G?"min-h-11 min-w-11":"h-8 min-w-8"}`,kt=r.jsxs("div",{ref:pt,className:`flex min-h-0 flex-col bg-surface text-foreground ${a?"fixed inset-0 z-modal-panel h-dvh pb-[env(safe-area-inset-bottom)] pt-[env(safe-area-inset-top)]":"relative h-full"}`,role:a?"dialog":void 0,"aria-modal":a||void 0,"aria-label":t("computer.title"),onKeyDown:e=>{e.stopPropagation(),e.key==="Escape"&&!e.nativeEvent.isComposing&&d&&(e.preventDefault(),A(null))},onKeyUp:e=>e.stopPropagation(),children:[r.jsxs("div",{className:`relative z-30 flex shrink-0 items-center gap-2 border-b border-border bg-surface px-2 ${G?"min-h-12":"min-h-8"}`,children:[a&&r.jsx("button",{type:"button",className:Ie,onClick:()=>{u(!1),A(null)},"aria-label":t("computer.exitFullscreen"),children:r.jsx(Qt,{size:20})}),r.jsx(Gt,{size:16,className:"shrink-0 text-muted-foreground"}),r.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium",children:P&&(qe||(N?x?.hostname||Be()?.serviceName:z))||t("computer.title")}),P&&r.jsx("span",{className:"text-[11px] text-primary",children:t("computer.connected")}),P&&g==="error"&&r.jsx("span",{role:"alert",className:"text-[11px] text-destructive",children:t("computer.loginSaveFailed")}),P&&b==="saving"&&r.jsx("span",{role:"status","aria-label":t("computer.settingsSaving"),title:t("computer.settingsSaving"),children:r.jsx(Lt,{size:12,className:"animate-spin text-muted-foreground"})}),P&&b==="error"&&r.jsxs("button",{type:"button",className:he,title:t("computer.settingsSaveFailed"),"aria-label":t("computer.settingsSaveFailed"),onClick:X,children:["! ",t("computer.retry")]}),Q&&r.jsxs("button",{type:"button",className:`${Ie} gap-1 px-1 text-xs`,onClick:yt,children:[r.jsx(At,{size:14}),t("computer.cancel")]}),P&&!G&&d==="keyboard"&&r.jsx("button",{type:"button",className:Ie,onPointerDown:e=>e.preventDefault(),onClick:()=>we("keyboard"),"aria-label":t("computer.keyboard"),"aria-pressed":Ue,children:r.jsx(He,{size:18})}),P&&!G&&r.jsx("button",{type:"button",className:`${Ie} ${d==="clipboard"?"bg-surface-2 text-primary":""}`,disabled:w,onClick:()=>we("clipboard"),"aria-label":t("computer.clipboardTool"),title:t("computer.clipboardTool"),"aria-pressed":d==="clipboard",children:r.jsx(st,{size:18})}),P&&!a&&r.jsxs("button",{type:"button",className:`${Ie} gap-1 px-1 text-xs`,onClick:()=>u(!0),"aria-label":t("computer.fullscreen"),children:[r.jsx(er,{size:16}),t("computer.expand")]}),P&&r.jsx("button",{type:"button",className:Ie,onClick:()=>we("tools"),"aria-label":t("computer.tools"),"aria-expanded":d==="tools",children:r.jsx(tr,{size:18})})]}),!$e&&r.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto p-4 sm:p-6",children:r.jsxs("div",{className:"mx-auto w-full max-w-md",children:[r.jsxs("form",{className:"space-y-3",onSubmit:e=>{vt(e)},children:[r.jsxs("div",{hidden:!!o,className:"grid grid-cols-2 gap-1 rounded-lg bg-background p-1",role:"group","aria-label":t("computer.target"),children:[r.jsx("button",{type:"button",className:`min-h-11 rounded-md px-3 text-sm font-medium ${N?"bg-surface-2 text-foreground":"text-muted-foreground hover:bg-surface"}`,"aria-pressed":N,disabled:Q||!x||!y,onClick:()=>bt(!0),children:t("computer.thisComputer")}),r.jsx("button",{type:"button",className:`min-h-11 rounded-md px-3 text-sm font-medium ${N?"text-muted-foreground hover:bg-surface":"bg-surface-2 text-foreground"}`,"aria-pressed":!N,disabled:Q||!y,onClick:()=>bt(!1),children:t("computer.otherComputer")})]}),N?r.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",role:"status",children:x?t("computer.localService",{name:Be()?.serviceName||x.hostname}):t("computer.loading")}):r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t("computer.host")}),r.jsx("input",{className:ge,value:z,disabled:!!o||Q||!y,onChange:e=>{H({host:e.target.value,domain:"",ignoreCert:!1}),re(""),ie(null)},placeholder:t("computer.hostPlaceholder"),onBlur:()=>{h()},autoCapitalize:"none",autoCorrect:"off",spellCheck:!1,required:!0,maxLength:253})]}),r.jsxs("p",{className:"text-xs text-muted-foreground",children:[j==="mac"?"macOS":j==="linux"?"Ubuntu / Linux":"Windows"," · ",O.toUpperCase()," · ",O==="rdp"?m||"3389":"5900",w?` · ${t("computer.viewOnly")}`:""]}),r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t(O==="rdp"?"computer.rdpUsername":"computer.username")}),r.jsx("input",{className:ge,value:M,disabled:!y,onChange:e=>te(e.target.value),onBlur:()=>{h()},autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",required:O==="rdp"||U==="credentials"&&Vt,maxLength:255})]}),r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t("computer.password")}),r.jsx("input",{className:ge,type:"password",value:xe,disabled:!y,onChange:e=>re(e.target.value),placeholder:K&&U!=="credentials"?t("computer.savedPassword"):void 0,autoComplete:"new-password",required:!K||U==="credentials",maxLength:1024})]}),r.jsx("p",{className:"text-[11px] leading-relaxed text-muted-foreground",children:t(O==="rdp"?"computer.rdpLoginHint":"computer.vncLoginHint")}),r.jsxs("div",{hidden:!!o,className:"flex min-h-11 items-center justify-between gap-2 text-xs",children:[r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:T.rememberLogin,disabled:!!o||Q||!y||g==="saving",onChange:e=>{const l=e.target.checked;H({rememberLogin:l}),!l&&K?R("forget",{...T,rememberLogin:l}).catch(()=>{}):h()}}),t("computer.rememberLogin")]}),K&&r.jsx("button",{type:"button",className:"min-h-11 text-muted-foreground underline",disabled:Q||g==="saving",onClick:Ct,children:t("computer.forgetLogin")})]}),g==="error"&&!J&&r.jsx("p",{role:"alert",className:"text-xs text-destructive",children:t("computer.loginSaveFailed")}),C&&r.jsxs("div",{role:"status",className:"space-y-1 text-xs leading-relaxed text-muted-foreground",children:[r.jsx("p",{children:t("computer.rdpBackendUnavailable")}),r.jsx("p",{children:t("computer.rdpBackendRecovery")})]}),U==="credentials"&&r.jsx("p",{className:"text-xs text-primary",children:t("computer.credentials")}),J&&r.jsxs("div",{role:"alert",className:"rounded-md bg-surface-2 p-3 text-xs leading-relaxed text-destructive",children:[t(J),J==="computer.rdpCertificate"&&r.jsxs("label",{className:"mt-1 flex min-h-11 items-center gap-2 text-foreground",children:[r.jsx("input",{type:"checkbox",checked:S,onChange:e=>Le(e.target.checked)}),t("computer.trustCertificateHere")]}),U==="error"&&J!=="computer.rdpCertificate"&&r.jsx("button",{type:"button",className:"mt-1 block min-h-9 text-foreground underline",onClick:()=>{_e(!0),requestAnimationFrame(()=>xt.current?.scrollIntoView?.({block:"nearest",behavior:"smooth"}))},children:t("computer.checkSettings")})]}),r.jsx("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:!y||C||g==="saving"||N&&!x||!z.trim()||!xe&&(!K||U==="credentials")||O==="rdp"&&(!M.trim()||!Number.isInteger(Number(m))||Number(m)<1||Number(m)>65535),children:t(U==="credentials"?"computer.authenticate":U==="error"?"computer.retryConnect":"computer.connect")}),r.jsxs("details",{hidden:!!o,ref:xt,className:"border-b border-border text-xs",open:ke,onToggle:e=>_e(e.currentTarget.open),children:[r.jsxs("summary",{className:"flex min-h-11 cursor-pointer list-none items-center justify-between text-muted-foreground",children:[r.jsx("span",{children:t("computer.advanced")}),r.jsx("span",{"aria-hidden":"true",children:ke?"−":"+"})]}),r.jsxs("div",{className:"space-y-3 pb-4",children:[r.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.platform")}),r.jsxs("select",{className:ge,value:j,disabled:Q||!y,onChange:e=>{mr(e.target.value)&&H({platform:e.target.value,protocol:e.target.value==="mac"?"vnc":"rdp",ignoreCert:!1}),re(""),h()},children:[r.jsx("option",{value:"mac",children:"macOS"}),r.jsx("option",{value:"linux",children:"Ubuntu / Linux"}),r.jsx("option",{value:"windows",children:"Windows"})]})]}),r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.protocol")}),r.jsxs("select",{className:ge,value:O,disabled:Q||!y,onChange:e=>{H({protocol:e.target.value==="rdp"?"rdp":"vnc"}),re(""),ie(null),h()},children:[r.jsx("option",{value:"rdp",children:"RDP"}),r.jsx("option",{value:"vnc",children:"VNC"})]})]})]}),O==="rdp"&&r.jsxs(r.Fragment,{children:[r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.port")}),r.jsx("input",{className:ge,type:"number",min:1,max:65535,step:1,value:m,disabled:Q||!y,onBlur:()=>{h()},onChange:e=>Ke(e.target.value)})]}),r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.domain")}),r.jsx("input",{className:ge,value:V,disabled:Q||!y,onBlur:()=>{h()},onChange:e=>ce(e.target.value),autoComplete:"off",maxLength:255})]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:S,disabled:Q||!y,onChange:e=>Le(e.target.checked)}),t("computer.trustCertificate")]})]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:w,disabled:s||Q||!y,onChange:e=>Ae(e.target.checked)}),t("computer.viewOnly")]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:f.autoConnect,disabled:Q||!y,onChange:e=>{E(l=>({...l,autoConnect:e.target.checked})),h()}}),t("computer.autoConnect")]})]})]})]}),r.jsxs("p",{role:"status",className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:[t(b==="saved"?"computer.settingsSaved":b==="error"?y?"computer.settingsSaveFailed":"computer.settingsLoadFailed":b==="loading"?"computer.settingsLoading":"computer.settingsSaving"),b==="error"&&r.jsx("button",{type:"button",className:"ml-2 min-h-9 text-primary underline",onClick:X,children:t("computer.retry")})]}),r.jsxs("details",{className:"text-xs",children:[r.jsx("summary",{className:"flex min-h-11 cursor-pointer items-center text-muted-foreground",children:t("computer.setup")}),r.jsxs("ol",{className:"ml-4 list-decimal space-y-2 pt-2 leading-relaxed text-muted-foreground",children:[r.jsx("li",{children:t(O==="rdp"?j==="linux"?"computer.rdpLinuxStep1":"computer.rdpStep1":j==="mac"?"computer.step1":j==="linux"?"computer.linuxStep1":"computer.windowsStep1")}),r.jsx("li",{children:t(O==="rdp"?"computer.rdpStep2":j==="mac"?"computer.step2":j==="linux"?"computer.linuxStep2":"computer.windowsStep2")}),r.jsx("li",{children:t("computer.step3")})]}),O==="vnc"&&j==="linux"&&r.jsxs(r.Fragment,{children:[r.jsx("p",{className:"mt-3 leading-relaxed text-muted-foreground",children:t("computer.linuxCommandHint")}),r.jsx("pre",{className:"mt-2 overflow-x-auto rounded-md bg-background p-2 text-[11px]",children:r.jsx("code",{children:`sudo apt install x11vnc
5
5
  x11vnc -storepasswd
6
- x11vnc -display "$DISPLAY" -auth guess -localhost -usepw -forever -shared -rfbport 5900`})}),r.jsx("p",{className:"mt-2 leading-relaxed text-muted-foreground",children:t("computer.linuxProtocolHint")})]}),r.jsx("p",{className:"mt-3 leading-relaxed text-muted-foreground",children:t(O==="rdp"?"computer.rdpNetworkHint":"computer.networkHint")})]})]})}),P&&d==="tools"&&r.jsx("button",{type:"button",className:`absolute inset-x-0 ${Z?"bottom-14 top-12":"bottom-0 top-8"} z-20 bg-background/40`,"aria-label":t("computer.returnToDesktop"),onClick:()=>A(null)}),P&&r.jsxs("div",{hidden:d!=="tools",className:`${d==="tools"?"flex":"hidden"} absolute inset-x-3 ${Z?"top-14":"top-10"} 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":t("computer.tools"),children:[r.jsxs("div",{className:"flex w-full items-center justify-between",children:[r.jsx("span",{className:"font-medium",children:t("computer.tools")}),r.jsx("button",{type:"button",className:"flex min-w-11 items-center justify-center","aria-label":t("computer.closeTools"),onClick:()=>A(null),children:r.jsx(Jt,{size:18})})]}),Z&&r.jsx("div",{className:"flex w-full items-center gap-2",children:r.jsx("div",{className:"inline-flex rounded-md bg-background p-0.5",role:"group","aria-label":t("computer.touchMode"),children:["trackpad","direct"].map(e=>r.jsx("button",{type:"button",className:`min-h-9 rounded px-3 text-xs ${pe===e?"bg-surface-2 text-foreground":"text-muted-foreground hover:bg-surface"}`,"aria-pressed":pe===e,onClick:()=>wt(e),children:t(e==="trackpad"?"computer.trackpadMode":"computer.directTouchMode")},e))})}),!Z&&r.jsxs(r.Fragment,{children:[Et,r.jsxs("button",{type:"button",className:he,disabled:w,onClick:()=>we("keyboard"),children:[r.jsx(He,{size:14}),t("computer.keyboard")]})]}),r.jsxs("label",{className:"flex min-h-9 items-center gap-1.5",children:[r.jsx("input",{type:"checkbox",checked:w,disabled:s,onChange:e=>Ae(e.target.checked)}),t("computer.viewOnly")]}),r.jsx("button",{type:"button",className:he,onClick:()=>{le.current?.set(1),E(e=>({...e,fit:!e.fit})),h()},children:t(F?"computer.actualSize":"computer.fit")}),r.jsxs("select",{className:`${he} min-w-0 bg-surface`,"aria-label":t("computer.shortcuts"),value:"",disabled:w,onChange:e=>{ze(W[e.target.value]??[])},children:[r.jsx("option",{value:"",disabled:!0,children:t("computer.shortcuts")}),r.jsxs("option",{value:"tab",children:[j==="mac"?"⌘ Tab":"Alt+Tab"," · ",t("computer.switchApps")]}),r.jsxs("option",{value:"search",children:[j==="mac"?"⌘ Space":"Super / Win"," · ",t(j==="mac"?"computer.spotlight":"computer.systemSearch")]}),r.jsx("option",{value:"copy",children:j==="mac"?"⌘C":"Ctrl+C"}),r.jsx("option",{value:"paste",children:Me}),r.jsx("option",{value:"escape",children:"Esc"}),r.jsx("option",{value:"enter",children:"Enter"}),r.jsx("option",{value:"backspace",children:"⌫"}),r.jsx("option",{value:"up",children:"↑"}),r.jsx("option",{value:"down",children:"↓"}),r.jsx("option",{value:"left",children:"←"}),r.jsx("option",{value:"right",children:"→"})]}),r.jsxs("div",{className:"flex w-full items-center justify-between border-t border-border pt-2",children:[K&&r.jsx("button",{type:"button",className:he,disabled:g==="saving",onClick:Ct,children:t("computer.forgetLogin")}),r.jsxs("button",{type:"button",className:`${he} ml-auto text-destructive`,onClick:yt,children:[r.jsx(At,{size:14}),t("computer.disconnect")]})]})]}),r.jsx("div",{ref:Ve,"data-sidebar-gesture-ignore":"",className:`relative z-10 min-h-0 flex-1 overflow-hidden bg-[var(--chrome-bg)] ${$e?"":"hidden"}`,onPointerDownCapture:()=>D.current?.dispatchEvent(new Event("termdock:computer-input-reset")),onMouseDownCapture:e=>{d==="keyboard"&&e.preventDefault()},style:{touchAction:P?"none":void 0},"aria-label":t("computer.remoteTitle"),children:!P&&$e&&r.jsxs("div",{role:"status",className:"absolute inset-0 z-20 flex items-center justify-center gap-2 bg-surface text-xs text-muted-foreground",children:[r.jsx(Lt,{size:16,className:"animate-spin"}),t("computer.connecting")]})}),r.jsx("div",{hidden:d!=="tools",children:P&&Z&&!w&&r.jsx("p",{className:"shrink-0 border-t border-border px-2 py-1 text-[10px] leading-relaxed text-muted-foreground",children:t(pe==="trackpad"?"computer.trackpadHint":"computer.directTouchHint")})}),P&&d==="keyboard"&&!w&&r.jsxs(r.Fragment,{children:[r.jsx(Sr,{sendChord:ae,pasteText:Xt,commandKey:W.copy[0],inputRef:D,onFocusChange:be,sendText:Wt,sendKey:e=>(I.length?ae:ze)(e==="tab"?[[65289,"Tab"]]:e==="delete"?[[65535,"Delete"]]:W[e])}),!Z&&r.jsx("div",{className:"grid shrink-0 grid-cols-6 gap-1 bg-surface px-1",role:"group","aria-label":t("computer.keyboardNavigation"),children:["escape","left","down","up","right","selectAll"].map(e=>r.jsx("button",{type:"button",className:"min-h-11 rounded-md text-sm hover:bg-surface-2","aria-label":t(`computer.key${e[0].toUpperCase()}${e.slice(1)}`),onPointerDown:l=>l.preventDefault(),onClick:()=>ae(e==="selectAll"?[...W.copy.slice(0,1),[97,"KeyA"]]:W[e]),children:{escape:"Esc",left:"←",down:"↓",up:"↑",right:"→",selectAll:j==="mac"?"⌘A":"Ctrl+A"}[e]},e))})]}),P&&d==="clipboard"&&!w&&r.jsxs("form",{className:"shrink-0 space-y-2 border-t border-border p-3",onSubmit:e=>{if(e.preventDefault(),!(!Ne||!$.current))try{$.current.clipboardPasteFrom(Ne),ye(!0),oe(!1)}catch{oe(!0)}},children:[r.jsx("textarea",{className:`${ge} min-w-0 resize-none py-2 text-base`,rows:2,"aria-label":t("computer.clipboard"),placeholder:t("computer.clipboardPlaceholder"),value:Ne,onChange:e=>{mt(e.target.value),ye(!1)},maxLength:We}),r.jsxs("div",{className:"flex gap-2",children:[r.jsx("button",{type:"submit",className:`${he} min-h-11 flex-1`,disabled:!Ne,children:t("computer.clipboard")}),r.jsx("button",{type:"button",className:`${he} min-h-11`,onClick:()=>{try{Ne&&$.current?.clipboardPasteFrom(Ne),ze(W.paste),oe(!1),ye(!!Ne)}catch{oe(!0)}},children:Me})]}),r.jsx("p",{role:"status",className:"text-[10px] leading-relaxed text-muted-foreground",children:Ft?t("computer.clipboardSent"):t("computer.clipboardHint",{shortcut:Me})}),Ge!==null&&r.jsxs("div",{className:"space-y-1",children:[r.jsx("textarea",{className:`${ge} resize-none py-2 text-base`,rows:2,readOnly:!0,value:Ge,"aria-label":t("computer.remoteClipboard"),onFocus:e=>e.currentTarget.select()}),r.jsx("button",{type:"button",className:he,onClick:()=>{if(!navigator.clipboard?.writeText){oe(!0);return}navigator.clipboard.writeText(Ge).then(()=>{Ze(!0),oe(!1)},()=>oe(!0))},children:t(Ut?"computer.clipboardCopied":"computer.copyToDevice")})]}),Kt&&r.jsx("p",{role:"alert",className:"text-xs text-destructive",children:t("computer.clipboardAccessFailed")}),J&&r.jsx("p",{role:"alert",className:"text-xs text-destructive",children:t(J)})]}),$e&&Z&&r.jsx("div",{className:"relative z-30 flex shrink-0 items-center gap-1 border-t border-border bg-surface px-1 py-1 text-[11px]",children:d==="keyboard"?r.jsxs(r.Fragment,{children:[r.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center rounded-md bg-surface-2 text-primary",onPointerDown:e=>e.preventDefault(),onClick:()=>we("keyboard"),"aria-label":t("computer.keyboard"),title:t("computer.hideKeyboard"),"aria-pressed":Ue,children:r.jsx(He,{size:18})}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md",onClick:()=>we("clipboard"),"aria-label":t("computer.clipboardTool"),children:r.jsx(st,{size:18,className:"mx-auto"})}),r.jsxs("div",{className:"flex min-w-0 flex-1 items-center overflow-x-auto",role:"group","aria-label":t("computer.keyboardNavigation"),children:[r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm",onPointerDown:e=>e.preventDefault(),onClick:()=>ae([[65289,"Tab"]]),children:"Tab"}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm","aria-label":t("computer.keyEscape"),onPointerDown:e=>e.preventDefault(),onClick:()=>ae(W.escape),children:"Esc"}),[[65507,"ControlLeft","Ctrl"],[65513,"AltLeft","Alt"],[65505,"ShiftLeft","Shift"]].map(([e,l,L])=>r.jsx("button",{type:"button",className:`min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm ${I.some(([_])=>_===e)?"bg-surface-2 text-primary":""}`,"aria-pressed":I.some(([_])=>_===e),onPointerDown:_=>_.preventDefault(),onClick:()=>ne(_=>_.some(([q])=>q===e)?_.filter(([q])=>q!==e):[..._,[e,l]]),children:L},l)),["selectAll","left","down","up","right"].map(e=>r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm hover:bg-surface-2","aria-label":t(`computer.key${e[0].toUpperCase()}${e.slice(1)}`),onPointerDown:l=>l.preventDefault(),onClick:()=>ae(e==="selectAll"?[...W.copy.slice(0,1),[97,"KeyA"]]:W[e]),children:{left:"←",down:"↓",up:"↑",right:"→",selectAll:j==="mac"?"⌘A":"Ctrl+A"}[e]},e)),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2",onPointerDown:e=>e.preventDefault(),onClick:()=>ae(W.copy),children:j==="mac"?"⌘C":"Ctrl+C"})]}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md text-lg",onPointerDown:e=>e.preventDefault(),onClick:()=>ae(W.backspace),children:"⌫"}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md text-lg",onPointerDown:e=>e.preventDefault(),onClick:()=>ae(W.enter),children:"↵"})]}):r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"grid min-w-0 flex-1 grid-cols-3",children:[r.jsxs("button",{type:"button",className:"flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md",disabled:!P||w,onClick:()=>we("keyboard"),"aria-pressed":Ue,children:[r.jsx(He,{size:18}),t("computer.keyboard")]}),r.jsxs("button",{type:"button",className:`flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md ${d==="clipboard"?"bg-surface-2 text-primary":""}`,disabled:!P||w,onClick:()=>we("clipboard"),"aria-pressed":d==="clipboard",children:[r.jsx(st,{size:18}),t("computer.clipboardTool")]}),r.jsxs("button",{type:"button",className:"flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md",disabled:!P||w,onClick:()=>wt(pe==="trackpad"?"direct":"trackpad"),"aria-label":t("computer.switchTouchMode"),children:[r.jsx(nr,{size:18}),t(pe==="trackpad"?"computer.trackpadMode":"computer.directTouchMode")]})]}),Et]})})]});return a?ot.createPortal(kt,document.body):kt}const Br=Object.freeze(Object.defineProperty({__proto__:null,COMPUTER_BACKGROUND_RETENTION_MS:Ot,default:Dr},Symbol.toStringTag,{value:"Module"}));export{We as C,Br as a,_t as b,kr as c};
6
+ x11vnc -display "$DISPLAY" -auth guess -localhost -usepw -forever -shared -rfbport 5900`})}),r.jsx("p",{className:"mt-2 leading-relaxed text-muted-foreground",children:t("computer.linuxProtocolHint")})]}),r.jsx("p",{className:"mt-3 leading-relaxed text-muted-foreground",children:t(O==="rdp"?"computer.rdpNetworkHint":"computer.networkHint")})]})]})}),P&&d==="tools"&&r.jsx("button",{type:"button",className:`absolute inset-x-0 ${G?"bottom-14 top-12":"bottom-0 top-8"} z-20 bg-background/40`,"aria-label":t("computer.returnToDesktop"),onClick:()=>A(null)}),P&&r.jsxs("div",{hidden:d!=="tools",className:`${d==="tools"?"flex":"hidden"} absolute inset-x-3 ${G?"top-14":"top-10"} 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":t("computer.tools"),children:[r.jsxs("div",{className:"flex w-full items-center justify-between",children:[r.jsx("span",{className:"font-medium",children:t("computer.tools")}),r.jsx("button",{type:"button",className:"flex min-w-11 items-center justify-center","aria-label":t("computer.closeTools"),onClick:()=>A(null),children:r.jsx(Jt,{size:18})})]}),G&&r.jsx("div",{className:"flex w-full items-center gap-2",children:r.jsx("div",{className:"inline-flex rounded-md bg-background p-0.5",role:"group","aria-label":t("computer.touchMode"),children:["trackpad","direct"].map(e=>r.jsx("button",{type:"button",className:`min-h-9 rounded px-3 text-xs ${pe===e?"bg-surface-2 text-foreground":"text-muted-foreground hover:bg-surface"}`,"aria-pressed":pe===e,onClick:()=>wt(e),children:t(e==="trackpad"?"computer.trackpadMode":"computer.directTouchMode")},e))})}),!G&&r.jsxs(r.Fragment,{children:[Et,r.jsxs("button",{type:"button",className:he,disabled:w,onClick:()=>we("keyboard"),children:[r.jsx(He,{size:14}),t("computer.keyboard")]})]}),r.jsxs("label",{className:"flex min-h-9 items-center gap-1.5",children:[r.jsx("input",{type:"checkbox",checked:w,disabled:s,onChange:e=>Ae(e.target.checked)}),t("computer.viewOnly")]}),r.jsx("button",{type:"button",className:he,onClick:()=>{le.current?.set(1),E(e=>({...e,fit:!e.fit})),h()},children:t(F?"computer.actualSize":"computer.fit")}),r.jsxs("select",{className:`${he} min-w-0 bg-surface`,"aria-label":t("computer.shortcuts"),value:"",disabled:w,onChange:e=>{ze(W[e.target.value]??[])},children:[r.jsx("option",{value:"",disabled:!0,children:t("computer.shortcuts")}),r.jsxs("option",{value:"tab",children:[j==="mac"?"⌘ Tab":"Alt+Tab"," · ",t("computer.switchApps")]}),r.jsxs("option",{value:"search",children:[j==="mac"?"⌘ Space":"Super / Win"," · ",t(j==="mac"?"computer.spotlight":"computer.systemSearch")]}),r.jsx("option",{value:"copy",children:j==="mac"?"⌘C":"Ctrl+C"}),r.jsx("option",{value:"paste",children:Me}),r.jsx("option",{value:"escape",children:"Esc"}),r.jsx("option",{value:"enter",children:"Enter"}),r.jsx("option",{value:"backspace",children:"⌫"}),r.jsx("option",{value:"up",children:"↑"}),r.jsx("option",{value:"down",children:"↓"}),r.jsx("option",{value:"left",children:"←"}),r.jsx("option",{value:"right",children:"→"})]}),r.jsxs("div",{className:"flex w-full items-center justify-between border-t border-border pt-2",children:[K&&r.jsx("button",{type:"button",className:he,disabled:g==="saving",onClick:Ct,children:t("computer.forgetLogin")}),r.jsxs("button",{type:"button",className:`${he} ml-auto text-destructive`,onClick:yt,children:[r.jsx(At,{size:14}),t("computer.disconnect")]})]})]}),r.jsx("div",{ref:Ve,"data-sidebar-gesture-ignore":"",className:`relative z-10 min-h-0 flex-1 overflow-hidden bg-[var(--chrome-bg)] ${$e?"":"hidden"}`,onPointerDownCapture:()=>D.current?.dispatchEvent(new Event("termdock:computer-input-reset")),onMouseDownCapture:e=>{d==="keyboard"&&e.preventDefault()},style:{touchAction:P?"none":void 0},"aria-label":t("computer.remoteTitle"),children:!P&&$e&&r.jsxs("div",{role:"status",className:"absolute inset-0 z-20 flex items-center justify-center gap-2 bg-surface text-xs text-muted-foreground",children:[r.jsx(Lt,{size:16,className:"animate-spin"}),t("computer.connecting")]})}),r.jsx("div",{hidden:d!=="tools",children:P&&G&&!w&&r.jsx("p",{className:"shrink-0 border-t border-border px-2 py-1 text-[10px] leading-relaxed text-muted-foreground",children:t(pe==="trackpad"?"computer.trackpadHint":"computer.directTouchHint")})}),P&&d==="keyboard"&&!w&&r.jsxs(r.Fragment,{children:[r.jsx(Sr,{sendChord:ae,pasteText:Xt,commandKey:W.copy[0],inputRef:D,onFocusChange:be,sendText:Wt,sendKey:e=>(I.length?ae:ze)(e==="tab"?[[65289,"Tab"]]:e==="delete"?[[65535,"Delete"]]:W[e])}),!G&&r.jsx("div",{className:"grid shrink-0 grid-cols-6 gap-1 bg-surface px-1",role:"group","aria-label":t("computer.keyboardNavigation"),children:["escape","left","down","up","right","selectAll"].map(e=>r.jsx("button",{type:"button",className:"min-h-11 rounded-md text-sm hover:bg-surface-2","aria-label":t(`computer.key${e[0].toUpperCase()}${e.slice(1)}`),onPointerDown:l=>l.preventDefault(),onClick:()=>ae(e==="selectAll"?[...W.copy.slice(0,1),[97,"KeyA"]]:W[e]),children:{escape:"Esc",left:"←",down:"↓",up:"↑",right:"→",selectAll:j==="mac"?"⌘A":"Ctrl+A"}[e]},e))})]}),P&&d==="clipboard"&&!w&&r.jsxs("form",{className:"shrink-0 space-y-2 border-t border-border p-3",onSubmit:e=>{if(e.preventDefault(),!(!Ne||!$.current))try{$.current.clipboardPasteFrom(Ne),ye(!0),oe(!1)}catch{oe(!0)}},children:[r.jsx("textarea",{className:`${ge} min-w-0 resize-none py-2 text-base`,rows:2,"aria-label":t("computer.clipboard"),placeholder:t("computer.clipboardPlaceholder"),value:Ne,onChange:e=>{mt(e.target.value),ye(!1)},maxLength:We}),r.jsxs("div",{className:"flex gap-2",children:[r.jsx("button",{type:"submit",className:`${he} min-h-11 flex-1`,disabled:!Ne,children:t("computer.clipboard")}),r.jsx("button",{type:"button",className:`${he} min-h-11`,onClick:()=>{try{Ne&&$.current?.clipboardPasteFrom(Ne),ze(W.paste),oe(!1),ye(!!Ne)}catch{oe(!0)}},children:Me})]}),r.jsx("p",{role:"status",className:"text-[10px] leading-relaxed text-muted-foreground",children:Ft?t("computer.clipboardSent"):t("computer.clipboardHint",{shortcut:Me})}),Ze!==null&&r.jsxs("div",{className:"space-y-1",children:[r.jsx("textarea",{className:`${ge} resize-none py-2 text-base`,rows:2,readOnly:!0,value:Ze,"aria-label":t("computer.remoteClipboard"),onFocus:e=>e.currentTarget.select()}),r.jsx("button",{type:"button",className:he,onClick:()=>{if(!navigator.clipboard?.writeText){oe(!0);return}navigator.clipboard.writeText(Ze).then(()=>{Ge(!0),oe(!1)},()=>oe(!0))},children:t(Ut?"computer.clipboardCopied":"computer.copyToDevice")})]}),Kt&&r.jsx("p",{role:"alert",className:"text-xs text-destructive",children:t("computer.clipboardAccessFailed")}),J&&r.jsx("p",{role:"alert",className:"text-xs text-destructive",children:t(J)})]}),$e&&G&&r.jsx("div",{className:"relative z-30 flex shrink-0 items-center gap-1 border-t border-border bg-surface px-1 py-1 text-[11px]",children:d==="keyboard"?r.jsxs(r.Fragment,{children:[r.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center rounded-md bg-surface-2 text-primary",onPointerDown:e=>e.preventDefault(),onClick:()=>we("keyboard"),"aria-label":t("computer.keyboard"),title:t("computer.hideKeyboard"),"aria-pressed":Ue,children:r.jsx(He,{size:18})}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md",onClick:()=>we("clipboard"),"aria-label":t("computer.clipboardTool"),children:r.jsx(st,{size:18,className:"mx-auto"})}),r.jsxs("div",{className:"flex min-w-0 flex-1 items-center overflow-x-auto",role:"group","aria-label":t("computer.keyboardNavigation"),children:[r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm",onPointerDown:e=>e.preventDefault(),onClick:()=>ae([[65289,"Tab"]]),children:"Tab"}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm","aria-label":t("computer.keyEscape"),onPointerDown:e=>e.preventDefault(),onClick:()=>ae(W.escape),children:"Esc"}),[[65507,"ControlLeft","Ctrl"],[65513,"AltLeft","Alt"],[65505,"ShiftLeft","Shift"]].map(([e,l,L])=>r.jsx("button",{type:"button",className:`min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm ${I.some(([_])=>_===e)?"bg-surface-2 text-primary":""}`,"aria-pressed":I.some(([_])=>_===e),onPointerDown:_=>_.preventDefault(),onClick:()=>ne(_=>_.some(([q])=>q===e)?_.filter(([q])=>q!==e):[..._,[e,l]]),children:L},l)),["selectAll","left","down","up","right"].map(e=>r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm hover:bg-surface-2","aria-label":t(`computer.key${e[0].toUpperCase()}${e.slice(1)}`),onPointerDown:l=>l.preventDefault(),onClick:()=>ae(e==="selectAll"?[...W.copy.slice(0,1),[97,"KeyA"]]:W[e]),children:{left:"←",down:"↓",up:"↑",right:"→",selectAll:j==="mac"?"⌘A":"Ctrl+A"}[e]},e)),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2",onPointerDown:e=>e.preventDefault(),onClick:()=>ae(W.copy),children:j==="mac"?"⌘C":"Ctrl+C"})]}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md text-lg",onPointerDown:e=>e.preventDefault(),onClick:()=>ae(W.backspace),children:"⌫"}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md text-lg",onPointerDown:e=>e.preventDefault(),onClick:()=>ae(W.enter),children:"↵"})]}):r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"grid min-w-0 flex-1 grid-cols-3",children:[r.jsxs("button",{type:"button",className:"flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md",disabled:!P||w,onClick:()=>we("keyboard"),"aria-pressed":Ue,children:[r.jsx(He,{size:18}),t("computer.keyboard")]}),r.jsxs("button",{type:"button",className:`flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md ${d==="clipboard"?"bg-surface-2 text-primary":""}`,disabled:!P||w,onClick:()=>we("clipboard"),"aria-pressed":d==="clipboard",children:[r.jsx(st,{size:18}),t("computer.clipboardTool")]}),r.jsxs("button",{type:"button",className:"flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md",disabled:!P||w,onClick:()=>wt(pe==="trackpad"?"direct":"trackpad"),"aria-label":t("computer.switchTouchMode"),children:[r.jsx(nr,{size:18}),t(pe==="trackpad"?"computer.trackpadMode":"computer.directTouchMode")]})]}),Et]})})]});return a?ot.createPortal(kt,document.body):kt}const Br=Object.freeze(Object.defineProperty({__proto__:null,COMPUTER_BACKGROUND_RETENTION_MS:Ot,default:Dr},Symbol.toStringTag,{value:"Module"}));export{We as C,Br as a,_t as b,kr as c};
@@ -0,0 +1 @@
1
+ import{cg as t}from"./app-DuUnqxq-.js";import{C as s}from"./ChangeWalkthroughPanel-DO_zJfZr.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-Dea8wJF3.js";import"./chevron-left-xqARwD-7.js";import"./maximize-2-CovPxWdw.js";import"./triangle-alert-Oj-OsZDw.js";const e="/tmp/termdock-dag-playground",i={version:1,id:"dag-playground",repoRoot:e,workspaceRoot:e,title:"改动解释升级为可点击导览",summary:"这是一页免登录 playground,用真实 ChangeWalkthroughPanel 调 DAG 的节点、边、label 和密度。",generatedBy:"dag-playground",injectedAt:Date.now(),highlights:[{what:"先看总览,再看链路",effect:"读者不用先进入 diff,也能理解整批改动目的。",tag:"理解"},{what:"多条链路直接画出来",effect:"分支、汇合、验证路径不再靠 next 文本猜。",tag:"链路"},{what:"点击节点跳回证据",effect:"导览和真实 diff 之间形成闭环。",tag:"导航"}],nodes:[{id:"export",title:"导出 section 级 diff",kind:"source",business:"CLI 把 hunk 拆成多个连续改动 section,并为每个 section 生成稳定 fingerprint。这里故意写长一点,用来验证 DAG 节点是否会按照真实文本高度撑开,而不是被固定高度裁掉。",anchor:{repoRoot:e,filePath:"src/server/cli.ts",hunkIndex:0,sectionIndex:0}},{id:"prompt",title:"约束 AI 输出",kind:"process",business:"提示词要求先写总览,再逐 section 生成解释。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/RightSidebar.tsx",hunkIndex:0}},{id:"schema",title:"校验导览结构",kind:"process",business:"检查节点、边和锚点字段是否完整。",anchor:{repoRoot:e,filePath:"src/server/utils/changeAuditStore.ts",hunkIndex:0}},{id:"fallback",title:"补齐兼容字段",kind:"process",business:"旧版结果缺字段时生成稳定回退值。",anchor:{repoRoot:e,filePath:"src/server/utils/changeAuditStore.ts",hunkIndex:1}},{id:"store",title:"保存整批导览结构",kind:"process",business:"服务端把 walkthrough 作为一等数据持久化。",anchor:{repoRoot:e,filePath:"src/server/utils/changeAuditStore.ts",hunkIndex:0}},{id:"api",title:"前端读取总览",kind:"api",business:"一次请求拿到 records 和 walkthroughs。",anchor:{repoRoot:e,filePath:"src/lib/terminal/api.ts",hunkIndex:0}},{id:"panel",title:"渲染 DAG 导览",kind:"ui",business:"用节点和边表达实现链路,节点可点击。节点内容可能是一两句话,也可能包含较长的业务解释;布局需要先测量 DOM 高度,再重新计算每一行节点的 y 坐标和连线端点。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/ChangeWalkthroughPanel.tsx",hunkIndex:0}},{id:"jump",title:"跳回真实 diff",kind:"ui",business:"点击节点后定位到文件、hunk 或 section。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/RightSidebar.tsx",hunkIndex:1}},{id:"section",title:"贴近改动展示解释",kind:"ui",business:"section 解释跟在对应 diff 块后面,而不是堆在 hunk 顶部。这个节点也故意写得更长,用来观察右侧分支和下方验证节点的连线是否会避让变高后的卡片。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/DiffViewer.tsx",hunkIndex:0,sectionIndex:1}},{id:"verify",title:"验证导出和注入",kind:"test",business:"跑 lint、install、health、资源检查和注入自测。"}],edges:[{from:"export",to:"prompt",label:"提供输入",desc:"sectionFingerprint 让 AI 可以稳定引用。"},{from:"export",to:"schema",label:"结构校验",desc:"先确认输入可以稳定落库。"},{from:"export",to:"fallback",label:"兼容旧数据",desc:"为历史记录补齐必要字段。"},{from:"prompt",to:"store",label:"注入",desc:"AI payload 写回本地服务。"},{from:"schema",to:"store",label:"通过后保存",desc:"合法结构进入存储层。"},{from:"fallback",to:"store",label:"归一化后保存",desc:"兼容数据与新数据走同一链路。"},{from:"store",to:"api",label:"读取",desc:"浏览器从服务端拿到导览。"},{from:"api",to:"panel",label:"渲染",desc:"结构化数据变成导览图。"},{from:"panel",to:"jump",label:"点击",desc:"节点驱动 diff 定位。"},{from:"jump",to:"section",label:"定位",desc:"落到对应 section 解释。"},{from:"export",to:"verify",label:"验证",desc:"导出结构要覆盖 tracked/untracked。"},{from:"section",to:"verify",label:"回归",desc:"确认展示位置和交互。"}],sections:[],risks:[{title:"边和 label 不能遮住节点主体。"},{title:"窄侧栏下横向滚动要可控。"}],checks:["在 360px、560px、900px 宽度下截图检查。","确认边的箭头、label 背板和节点层级清楚。","确认节点点击区域和 hover 状态可感知。"]};function u(){return t.jsx("div",{className:"min-h-screen bg-background p-5 text-foreground","data-dag-playground":!0,children:t.jsxs("div",{className:"mx-auto max-w-[72rem]",children:[t.jsxs("div",{className:"mb-3",children:[t.jsx("h1",{className:"text-sm font-semibold",children:"DAG Playground"}),t.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Auth-free playground for tuning the real ChangeWalkthroughPanel."})]}),t.jsxs("div",{className:"grid gap-4 lg:grid-cols-[360px_minmax(0,1fr)]",children:[t.jsx("div",{className:"min-w-0",children:t.jsx(s,{walkthroughs:[i],repoRoot:e,onNavigate:o=>{console.info("[DagPlayground] navigate",o)}})}),t.jsx("div",{className:"min-w-0",children:t.jsx(s,{walkthroughs:[i],repoRoot:e,onNavigate:o=>{console.info("[DagPlayground] navigate",o)}})})]})]})})}export{u as DagPlayground};
@@ -1,4 +1,4 @@
1
- import{cc as e}from"./app-stNRNTO-.js";import{b as a}from"./dnd-BCFAPC0L.js";import{c as M,S as _,D as T}from"./DiffViewer-Cg3GhKcU.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./syntaxHighlight-Bgt0lmWx.js";import"./git-compare-C7n2uha2.js";const w=`diff --git a/CommentGap.kt b/CommentGap.kt
1
+ import{cg as e}from"./app-DuUnqxq-.js";import{b as a}from"./dnd-BCFAPC0L.js";import{c as M,S as _,D as T}from"./DiffViewer-DqcQxp4Q.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./syntaxHighlight-Cz6TPDW9.js";import"./git-compare-90v75Jal.js";const w=`diff --git a/CommentGap.kt b/CommentGap.kt
2
2
  --- a/CommentGap.kt
3
3
  +++ b/CommentGap.kt
4
4
  @@ -1,4 +1,4 @@
@@ -0,0 +1 @@
1
+ import{aV as ut,cg as r,r as dt,h as ft,g as ht,ea as mt,er as pt,bb as xt,c as gt,eq as vt,cG as bt,V as Ye,a4 as yt}from"./app-DuUnqxq-.js";import{b as o,r as Je}from"./dnd-BCFAPC0L.js";import{h as Ze}from"./gestureArbiter-DszagC-d.js";import{S as wt,a as Ke}from"./swiper-DJjq1TYT.js";import{L as kt}from"./list-tree-C281zrdg.js";import{D as Rt,i as jt}from"./DiffViewer-DqcQxp4Q.js";const Nt=[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]],Tt=ut("list",Nt);function et({selected:t,depth:n=0,title:c,leading:m,children:h,trailing:i,role:y,tabIndex:x,ariaExpanded:g,onClick:f,onKeyDown:b,onPointerDown:z,onPointerUp:M,onPointerCancel:F,dataAttributes:B}){return r.jsxs("div",{role:y,tabIndex:x,"aria-expanded":g,title:c,onClick:f,onKeyDown:b,onPointerDown:z,onPointerUp:M,onPointerCancel:F,...B,className:`group flex w-full cursor-pointer items-center gap-1 rounded px-2 py-1.5 text-left text-[13px] transition active:scale-[0.99] ${t?"bg-surface-elevated text-foreground":"text-muted-foreground hover:bg-surface-2 hover:text-foreground"}`,style:{paddingLeft:`${n*14+8}px`},children:[r.jsx("span",{className:"flex min-w-[14px] shrink-0 items-center justify-center text-muted-foreground/80",children:m}),r.jsx("span",{className:"min-w-0 flex-1",children:h}),i]})}function tt(t){return t.path.replace(/^\/+/,"")}function Mt(t){if(t.displayName!==void 0||t.displayDir!==void 0)return{name:t.displayName||t.path,dir:t.displayDir||""};const n=t.path.split("/").filter(Boolean);return{name:n.pop()||t.path,dir:n.join("/")}}function rt(t,n){const c=new Map,m=(i,y,x,g)=>{const f=i.get(y);if(f)return f;const b={path:x,name:y,childCount:0,directories:[],files:[]};return i.set(y,b),g?.directories.push(b),b};for(const i of t){const y=n(i).split("/").filter(Boolean);if(y.length<=1)continue;let x=c,g=null,f="";for(const b of y.slice(0,-1)){f=f?`${f}/${b}`:b;const z=m(x,b,f,g);g=z,x=new Map(z.directories.map(M=>[M.name,M]))}g?.files.push(i)}const h=i=>{const y=i.directories.map(h).sort((g,f)=>g.name.localeCompare(f.name)),x=i.files.sort((g,f)=>g.path.localeCompare(f.path));return{...i,directories:y,files:x,childCount:y.reduce((g,f)=>g+f.childCount,0)+x.length}};return Array.from(c.values()).map(h).sort((i,y)=>i.name.localeCompare(y.name))}function Pe(t,n,c=0){const m=n.selectedKey===t.key||n.selectedKey===t.path||n.selectedKey===t.absolutePath,h=Mt(t);return r.jsx(et,{selected:m,role:"button",tabIndex:0,title:t.title??t.absolutePath??t.path,onClick:()=>{Ze()||n.onSelectFile(t)},onKeyDown:i=>{i.key!=="Enter"&&i.key!==" "||(i.preventDefault(),n.onSelectFile(t))},leading:n.renderLeading(t),depth:c,trailing:n.renderTrailing?.(t),dataAttributes:{"data-diff-selection-path":t.key,"data-diff-file-path":t.path,"data-diff-absolute-path":t.absolutePath??"","data-diff-status":t.status},children:r.jsxs("span",{className:"select-text","data-sidebar-selectable":!0,children:[r.jsx("span",{className:`block truncate leading-snug ${m?"font-medium":""}`,children:h.name}),n.mode!=="tree"&&h.dir&&r.jsx("span",{className:"block truncate text-[10px] text-muted-foreground/75",children:h.dir}),n.renderSubtitle?.(t)]})},t.key)}function nt(t,n,c,m,h){let i=t;const y=[t.name];for(;i.files.length===0&&i.directories.length===1;)i=i.directories[0],y.push(i.name);const x=y.join("/"),g=`${n}:${i.path}`,f=c.collapsedDirectoryKeys.has(g);return r.jsxs("div",{className:"space-y-px",children:[r.jsx(et,{role:"button",tabIndex:0,onClick:()=>{Ze()||c.onToggleDirectory(g)},onKeyDown:b=>{b.key!=="Enter"&&b.key!==" "||(b.preventDefault(),c.onToggleDirectory(g))},ariaExpanded:!f,depth:m,title:i.path,leading:f?r.jsx(ft,{size:13}):r.jsx(ht,{size:13}),trailing:r.jsxs("span",{className:"flex shrink-0 items-center gap-1",children:[r.jsx("span",{className:"shrink-0 rounded bg-surface-2 px-1.5 py-0.5 text-[10px] text-muted-foreground/60 transition group-hover:text-muted-foreground",children:i.childCount}),c.renderDirectoryTrailing?.(i.path,h)]}),children:r.jsxs("span",{className:"flex min-w-0 items-center gap-1",children:[r.jsx(dt,{size:14,className:"shrink-0 text-[color:var(--folder)]"}),r.jsx("span",{className:"min-w-0 flex-1 truncate leading-snug select-text","data-sidebar-selectable":!0,children:x})]})}),!f&&r.jsxs("div",{className:"space-y-px",children:[i.directories.map(b=>nt(b,n,c,m+1,h)),i.files.length>0&&r.jsx("div",{className:"space-y-px",children:i.files.map(b=>Pe(b,c,m+1))})]})]},g)}function Dt(t,n){const c=n.getFileTreePath??tt,m=t.files.filter(i=>c(i).split("/").filter(Boolean).length<=1),h=rt(t.files,c);return r.jsxs("div",{className:"space-y-px",children:[h.map(i=>nt(i,t.key,n,0,t)),m.length>0&&r.jsx("div",{className:"space-y-px",children:m.map(i=>Pe(i,n))})]})}function St(t,n=tt){const c=[],m=i=>{for(const y of i.directories)m(y);c.push(...i.files)};for(const i of rt(t,n))m(i);const h=new Set(c.map(i=>i.key));return c.push(...t.filter(i=>!h.has(i.key))),c}function It(t){return r.jsx("div",{className:t.mode==="tree"?"space-y-px pt-1":"space-y-2",children:t.groups.map(n=>{const c=!!n.header,m=!!n.collapsed;return r.jsxs("section",{className:c?"overflow-hidden rounded-lg border border-border/15 bg-surface/60":"",children:[n.header,!m&&r.jsx("div",{className:t.mode==="tree"?c?"space-y-px bg-surface/60 p-1":"space-y-px":c?"space-y-px bg-surface/60 p-1.5":"space-y-px",children:t.mode==="tree"?Dt(n,t):n.files.map(h=>Pe(h,t))})]},n.key)})})}const Ce="termdock:diff-review:list-width:v1",Et=120,He=320,qe=220,Ct=560;function Ft(t){return typeof t=="number"&&Number.isFinite(t)}function Ue(t,n){const c=Math.max(qe,n-360),m=Math.min(Ct,c);return Math.min(m,Math.max(qe,t))}function _t(){return bt(Ce,Ft)??He}function At({list:t,detail:n,mobile:c,mobileListHeader:m,mobileDetailHeader:h,desktopListHeader:i,backLabel:y,onMobileSlideChange:x,externalSwiperRef:g,desktopLayout:f="split",onDetailScroll:b,desktopSidePanel:z,desktopListClassName:M,detailOwnsScroll:F=!1}){const{t:B}=mt(),P=o.useRef(null),q=o.useRef(null),I=o.useRef(null),[U,$]=o.useState(_t);o.useEffect(()=>{if(c||f!=="split")return;const p=q.current;p&&$(j=>Ue(j,p.clientWidth))},[f,c]);const ae=o.useCallback(p=>{c||f!=="split"||(p.preventDefault(),I.current={startX:p.clientX,startWidth:U,pointerId:p.pointerId},p.currentTarget.setPointerCapture(p.pointerId))},[f,U,c]),ue=o.useCallback(p=>{const j=I.current;if(!j||j.pointerId!==p.pointerId)return;const D=q.current?.clientWidth??window.innerWidth,_=Ue(j.startWidth+p.clientX-j.startX,D);$(_),pt(Ce,_,Et)},[]),ie=o.useCallback(p=>{const j=I.current;if(!(!j||j.pointerId!==p.pointerId)){I.current=null,xt(Ce);try{p.currentTarget.releasePointerCapture(p.pointerId)}catch{}}},[]);if(c){const p=()=>{const v=P.current;v&&v.slideTo(1)},j=()=>{const v=P.current;v&&v.slideTo(0)},D=typeof t=="function"?t({slideToDetail:p}):t,_=typeof h=="function"?h({slideToList:j,slideToDetail:p}):h;return r.jsxs(wt,{className:"h-full min-h-0 w-full",slidesPerView:1,resistanceRatio:.45,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:".swiper-no-swiping",allowTouchMove:!1,touchAngle:75,touchStartPreventDefault:!1,onSwiper:v=>{P.current=v,g&&(g.current=v)},onSlideChange:v=>{x?.(v.activeIndex)},children:[r.jsx(Ke,{className:"h-full min-h-0",children:r.jsxs("div",{className:"flex h-full min-h-0 flex-col overflow-hidden",children:[m&&r.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 py-2",children:m}),r.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain",children:D})]})}),r.jsx(Ke,{className:"h-full min-h-0",children:r.jsxs("div",{className:"flex h-full min-h-0 flex-col overflow-hidden bg-surface",children:[r.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 py-2",children:_??r.jsxs("button",{type:"button",onClick:j,className:"inline-flex h-9 shrink-0 items-center gap-1.5 rounded-full bg-surface-2 px-3 text-xs font-semibold text-muted-foreground transition hover:bg-surface-elevated hover:text-foreground active:scale-95",children:[r.jsx(gt,{size:14}),y]})}),r.jsx("div",{className:F?"min-h-0 flex-1 overflow-hidden":"termdock-diff-stream-scroller min-h-0 flex-1 overflow-y-auto overscroll-contain",onScroll:F?void 0:v=>b?.(v.currentTarget),children:n})]})})]})}const W=typeof t=="function"?t({slideToDetail:()=>{}}):t;return f==="stacked"?F?r.jsxs("div",{className:"termdock-native-select min-h-0 flex-1 overflow-hidden px-2 pb-[calc(env(safe-area-inset-bottom)+4.5rem)]",children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W,r.jsx("div",{className:"mt-3 h-[calc(100%-3rem)] min-h-0 overflow-hidden rounded-xl border border-border/15 bg-surface",children:n})]}):r.jsxs("div",{className:"termdock-native-select termdock-diff-stream-scroller min-h-0 flex-1 overflow-y-auto overscroll-contain px-2 pb-[calc(env(safe-area-inset-bottom)+4.5rem)]",onScroll:p=>b?.(p.currentTarget),children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W,r.jsx("div",{className:"mt-3 overflow-hidden rounded-xl border border-border/15 bg-surface",children:n})]}):r.jsxs("div",{ref:q,className:"flex h-full min-h-0 overflow-hidden",children:[z,r.jsxs("div",{className:M??"shrink-0 overflow-y-auto overscroll-contain border-r border-border/15 bg-surface",style:{width:U},children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W]}),r.jsx("div",{role:"separator","aria-orientation":"vertical","aria-label":B("diffViewer.resizeNavigation"),title:B("diffViewer.resizeNavigation"),className:"group relative z-10 w-2 shrink-0 cursor-col-resize touch-none border-r border-border/15 bg-surface",onPointerDown:ae,onPointerMove:ue,onPointerUp:ie,onPointerCancel:ie,onDoubleClick:()=>{$(He),vt(Ce,He)},children:r.jsx("span",{className:"pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-border/30 transition group-hover:bg-primary/60"})}),r.jsx("div",{className:F?"min-w-0 flex-1 overflow-hidden":"termdock-diff-stream-scroller min-w-0 flex-1 overflow-y-auto overscroll-contain",onScroll:F?void 0:p=>b?.(p.currentTarget),children:n})]})}function zt({mode:t,onModeChange:n,showAi:c=!1}){return r.jsxs("div",{className:"inline-flex h-7 shrink-0 overflow-hidden rounded-md bg-surface-2 p-0.5",children:[r.jsx("button",{type:"button",onClick:()=>n("list"),"aria-pressed":t==="list",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="list"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(Tt,{size:13})}),r.jsx("button",{type:"button",onClick:()=>n("tree"),"aria-pressed":t==="tree",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="tree"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(kt,{size:13})}),c&&r.jsx("button",{type:"button",onClick:()=>n("ai"),"aria-pressed":t==="ai",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="ai"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(Ye,{size:13})})]})}function Lt({groups:t,mode:n,onModeChange:c,selectedKey:m,collapsedDirectoryKeys:h,onToggleDirectory:i,onSelectFile:y,renderLeading:x,renderTrailing:g,renderDirectoryTrailing:f,renderSubtitle:b,detail:z,mobile:M,backLabel:F,compact:B=!1,emptyContent:P,listPrefix:q,aiContent:I,listContainerClassName:U="px-2 py-2",detailContainerClassName:$="termdock-native-select termdock-diff-stream-scroller min-h-0",renderListHeader:ae,renderMobileDetailHeader:ue,externalSwiperRef:ie,onMobileSlideChange:W,slideToDetailOnMobile:p=!0,desktopLayout:j="split",onDetailScroll:D,desktopSidePanel:_,desktopListClassName:v,detailOwnsScroll:ee}){const[V,O]=o.useState(!1);o.useEffect(()=>{if(!V)return;const A=L=>{L.key==="Escape"&&O(!1)};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[V]);const de=r.jsx(zt,{mode:n,onModeChange:c,showAi:!!I}),pe=n==="tree"?"tree":"list",xe=ae?ae(de):r.jsx("div",{className:"flex justify-end",children:de}),ge=t.some(A=>A.files.length>0),te=r.jsx(At,{mobile:V?!1:M,backLabel:F,externalSwiperRef:ie,onMobileSlideChange:W,desktopLayout:V?"split":j,onDetailScroll:D,desktopSidePanel:_,desktopListClassName:v,detailOwnsScroll:ee,mobileListHeader:M?xe:void 0,desktopListHeader:M?void 0:xe,mobileDetailHeader:ue,list:({slideToDetail:A})=>r.jsx("div",{className:U,children:n==="ai"?typeof I=="function"?I({slideToDetail:A,fullscreen:V,toggleFullscreen:()=>O(L=>!L)}):I??P:r.jsxs(r.Fragment,{children:[q,ge?r.jsx(It,{groups:t,selectedKey:m,mode:pe,mobile:M,compact:B,collapsedDirectoryKeys:h,onToggleDirectory:i,onSelectFile:L=>{y(L),M&&p&&window.requestAnimationFrame(A)},renderLeading:x,renderTrailing:g,renderDirectoryTrailing:f,renderSubtitle:b}):P]})}),detail:r.jsx("div",{className:ee?"h-full min-h-0":$,children:z})});return!V||typeof document>"u"?te:Je.createPortal(r.jsxs("div",{className:"fixed inset-0 z-modal-panel flex min-h-0 flex-col bg-surface text-foreground",children:[r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b border-border/15 bg-[var(--chrome-bg)] px-3",children:[r.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[r.jsx(Ye,{size:15,className:"shrink-0 text-primary"}),r.jsx("span",{className:"truncate text-[12px] font-semibold",children:"DAG Review"}),r.jsx("span",{className:"hidden text-[10px] text-muted-foreground sm:inline",children:"Select a step to inspect its exact change"})]}),r.jsx("button",{type:"button",onClick:()=>O(!1),className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition hover:bg-surface-2 hover:text-foreground active:scale-95",title:"Exit full-screen DAG review (Esc)","aria-label":"Exit full-screen DAG review",children:r.jsx(yt,{size:16})})]}),r.jsx("div",{className:"min-h-0 flex-1",children:te})]}),document.body)}const Ht=96,ze=44;function Pt({file:t,repoRoot:n,selectionPath:c,displayName:m,displayDir:h,selected:i,activePane:y,visible:x,reusableContent:g=!1,estimatedHeight:f,lightweight:b=!1,wrap:z,viewType:M,inlineMode:F,diffOptions:B,reloadKey:P=0,auditRecords:q,diffOverride:I,oldSourceRef:U,preparedDiff:$,renderBadge:ae,onInsertDiffReference:ue,onHunkGitAction:ie,previewReverts:W,onReferenceCopied:p,insertedReferenceKey:j,copiedReferenceKey:D,onClearAuditRecord:_,onContentReady:v,onHeightChange:ee}){const V=o.useRef(null),O=o.useRef(null),de=o.useRef(null),[pe,xe]=o.useState(null),ge=o.useRef(64),te=o.useRef(f??104),A=o.useRef(null),L=o.useRef(null),Q=o.useRef(!1),le=o.useRef(!1),E=o.useRef(null),[re,je]=o.useState(!1),[Ne,Se]=o.useState(!1),ve=t.absolutePath||(n?`${n}/${t.path}`:t.path),N=o.useCallback(()=>{le.current||(le.current=!0,Se(!0),v?.(c))},[v,c]);o.useLayoutEffect(()=>{if(!(I!==void 0&&x&&le.current))return Q.current=!1,le.current=!1,A.current=null,L.current=null,E.current!==null&&(window.clearTimeout(E.current),E.current=null),je(!1),Se(!1),()=>{E.current!==null&&(window.clearTimeout(E.current),E.current=null)}},[I,$,P,g,x]),o.useLayoutEffect(()=>{const X=A.current;!re||X===null||Math.abs((f??104)-X)>=1||(A.current=null,N())},[N,f,re]),o.useLayoutEffect(()=>{if(!x||!re)return;const X=de.current;if(!X)return;const be=()=>{if(!Q.current)return;const Y=X.firstElementChild;if(!Y)return;const K=Math.ceil(Math.max(Y.getBoundingClientRect().height,Y.scrollHeight,64)),he=ge.current;if(K>0&&he!==K&&(ge.current=K,xe(K)),!V.current)return;const C=O.current?.getBoundingClientRect().height??ze,se=Math.ceil(C+K+1);se<=0||L.current===se||(L.current=se,E.current!==null&&window.clearTimeout(E.current),E.current=window.setTimeout(()=>{if(E.current=null,!Q.current)return;const H=L.current;if(H===null)return;const S=te.current;if(le.current){te.current=H,Math.abs(S-H)>=1&&ee?.(c,S,H),v?.(c);return}if(A.current=H,Math.abs(S-H)<1||!ee){te.current=H,A.current=null,N();return}te.current=H,ee(c,S,H)},Ht))};if(be(),typeof ResizeObserver>"u")return;const fe=new ResizeObserver(be);return fe.observe(X),X.firstElementChild&&fe.observe(X.firstElementChild),O.current&&fe.observe(O.current),()=>fe.disconnect()},[N,v,ee,c,re,x,z,M,F]);const G=x&&!Ne;return r.jsxs("div",{ref:V,"data-diff-stream-item":c,"data-diff-selection-path":c,"data-diff-file-path":t.path,"data-diff-absolute-path":ve,className:`scroll-mt-3 border-b border-border/15 last:border-b-0 ${G||!x?"overflow-hidden":""} ${i?"bg-surface-elevated/35":""}`,style:x?G?{height:f??104}:void 0:{height:f??104},children:[r.jsxs("div",{ref:O,"data-diff-stream-header":!0,className:`sticky top-0 z-10 flex min-w-0 items-center gap-2 border-b border-border/15 px-3 py-2 ${i?"bg-surface-elevated":"bg-surface"}`,children:[ae(t.status),r.jsxs("div",{className:"min-w-0 flex-1",title:ve,children:[r.jsx("div",{className:"truncate text-xs font-semibold text-foreground",children:m}),h&&r.jsx("div",{className:"truncate text-[10px] text-muted-foreground",children:h})]})]}),r.jsxs("div",{ref:de,className:"relative","data-diff-stream-body":!0,style:x?{minHeight:Ne?64:Math.max(pe??64,(f??104)-ze)}:{height:Math.max(pe??64,(f??104)-ze)},children:[x?r.jsx(Rt,{active:y,repoRoot:n,filePath:t.path,referenceFilePath:ve,changedFile:t,wrap:z,viewType:M,inlineMode:F,diffOptions:B,reloadKey:P,embedded:!0,lightweight:b,auditRecords:q,diffOverride:I,oldSourceRef:U,preparedDiff:$,onClearAuditRecord:_,onContentReady:()=>{if(g){Q.current=!0,je(!0),N();return}Q.current||(Q.current=!0,je(!0))},onInsertDiffReference:ue,onHunkGitAction:ie,previewReverts:W,onReferenceCopied:p,insertedReferenceKey:j,copiedReferenceKey:D}):r.jsx("div",{className:"flex h-full min-h-16 items-center justify-center bg-surface px-3 py-4 text-center text-xs text-muted-foreground",children:t.path}),x&&re&&!Ne&&r.jsx("div",{"data-diff-measuring-overlay":!0,className:"absolute inset-0 z-20 bg-surface"})]})]})}const Oe=8,Le=1600,Qe=104,Wt=1e3,Re=new Map;function Bt(t,n){for(Re.delete(t),Re.set(t,n);Re.size>Wt;){const c=Re.keys().next().value;if(c===void 0)break;Re.delete(c)}}function $t(t,n){return!!(t&&t.diffOverride===n.diffOverride&&t.oldSourceRef===n.oldSourceRef&&t.reloadKey===n.reloadKey&&t.wrap===n.wrap&&t.viewType===n.viewType&&t.inlineMode===n.inlineMode&&t.algorithm===n.algorithm&&t.whitespace===n.whitespace&&t.context===n.context)}const Vt={added:{label:"A",className:"text-[color:var(--diff-insert-strong)]",title:"Added"},modified:{label:"M",className:"text-[color:var(--diff-hunk-accent)]",title:"Modified"},deleted:{label:"D",className:"text-[color:var(--diff-delete-strong)]",title:"Deleted"},renamed:{label:"R",className:"text-muted-foreground",title:"Renamed"},copied:{label:"C",className:"text-[color:var(--diff-insert-strong)]",title:"Copied"},untracked:{label:"U",className:"text-[color:var(--diff-insert-strong)]",title:"Untracked (new file)"},conflicted:{label:"!",className:"text-destructive",title:"Conflicted"},unknown:{label:"?",className:"text-muted-foreground",title:"Unknown"}};function Zt({status:t}){const n=Vt[t]??{label:"?",className:"text-muted-foreground",title:t};return r.jsx("span",{className:`w-4 shrink-0 text-center text-[10px] font-mono font-bold ${n.className}`,title:n.title,children:n.label})}function er(t,n){return n?{key:n,nonce:t.nonce+1}:t}function tr({files:t,groups:n,selectedKey:c,onSelectFile:m,mode:h,onModeChange:i,collapsedDirectoryKeys:y,onToggleDirectory:x,renderLeading:g,renderTrailing:f,renderDirectoryTrailing:b,renderSubtitle:z,renderStreamBadge:M,onInsertDiffReference:F,onHunkGitAction:B,onReferenceCopied:P,insertedReferenceKey:q,copiedReferenceKey:I,onClearAuditRecord:U,mobile:$,backLabel:ae,compact:ue,desktopLayout:ie,wrap:W,diffViewType:p,inlineMode:j,diffOptions:D,activePane:_,reloadKey:v=0,renderListHeader:ee,renderMobileDetailHeader:V,emptyContent:O,listPrefix:de,aiContent:pe,listContainerClassName:xe,detailContainerClassName:ge,desktopSidePanel:te,desktopListClassName:A,onDetailScroll:L,initialDetailScrollTop:Q,preserveScrollOnUpdate:le=!1,scrollToKey:E,scrollToKeyNonce:re=0,externalSwiperRef:je,onMobileSlideChange:Ne,slideToDetailOnMobile:Se}){const ve=o.useMemo(()=>e=>c===e.key||c===e.path||c===e.absolutePath,[c]),N=o.useMemo(()=>{const e=new Map;for(const a of t)e.set(a.key,a),a.path&&e.set(a.path,a),a.absolutePath&&e.set(a.absolutePath,a);const s=[],l=new Set;for(const a of n){const d=h==="tree"?St(a.files):a.files;for(const w of d){const u=e.get(w.key);!u||l.has(u.key)||(s.push(u),l.add(u.key))}}for(const a of t)l.has(a.key)||s.push(a);return s},[t,n,h]),G=o.useRef(null),X=o.useRef(null),be=o.useRef(null),fe=o.useRef(v),Y=o.useRef(0),K=o.useRef(null),he=o.useRef(new Map(Re)),ne=o.useRef({key:null,top:0}),C=o.useRef(new Set),se=o.useRef(new Map),H=o.useRef(new Map),S=o.useRef(null),We=o.useRef(()=>{}),Te=o.useRef([]),me=o.useRef(new Map),Be=o.useRef({tops:[],heights:[],bottom:0}),[Ie,st]=o.useState(()=>new Set),[ot,ct]=o.useState(0),[J,ye]=o.useState({top:0,height:0}),Me=o.useMemo(()=>N.map(e=>e.key),[N]),Ee=Me.join("");H.current=o.useMemo(()=>new Map(N.map(e=>[e.key,{diffOverride:e.diffOverride,oldSourceRef:e.oldSourceRef,reloadKey:v,wrap:W,viewType:p,inlineMode:j,algorithm:D?.algorithm,whitespace:D?.whitespace,context:D?.context}])),[N,v,W,p,j,D?.algorithm,D?.whitespace,D?.context]),Te.current=Me,me.current=o.useMemo(()=>new Map(Me.map((e,s)=>[e,s])),[Me]);const k=o.useMemo(()=>{const e=Me.map(a=>he.current.get(a)??Qe),s=new Array(e.length);for(let a=0;a<e.length;a+=1)s[a]=a===0?0:s[a-1]+e[a-1];const l=e.length>0?s[e.length-1]+e[e.length-1]:0;return{tops:s,heights:e,bottom:l}},[ot,Ee]);Be.current=k;const oe=o.useMemo(()=>E?N.find(e=>E===e.key||E===e.path||E===e.absolutePath)?.key??null:null,[N,E]),Fe=o.useMemo(()=>c?N.find(e=>c===e.key||c===e.path||c===e.absolutePath)?.key??null:null,[N,c]),De=o.useMemo(()=>{const e=k.tops.length;if(e===0)return-1;let s=0,l=e;for(;s<l;){const a=Math.floor((s+l)/2);k.tops[a]<=J.top+1?s=a+1:l=a}return Math.min(e-1,Math.max(0,s-1))},[k.tops,J.top]),ce=o.useCallback(e=>{C.current=e,st(e)},[]),$e=o.useMemo(()=>{const e=J.top-Le,s=J.top+J.height+Le,l=new Set;let a=0,d=k.tops.length;for(;a<d;){const u=Math.floor((a+d)/2);k.tops[u]<=e?a=u+1:d=u}const w=Math.max(0,a-1);for(let u=w;u<k.tops.length;u+=1){const R=k.tops[u];if(R>s)break;R+k.heights[u]>=e&&R<=s&&l.add(u)}for(let u=De-1;u<=De+1;u+=1)u>=0&&u<k.tops.length&&l.add(u);for(const u of Ie){const R=me.current.get(u);R!==void 0&&l.add(R)}return Array.from(l).sort((u,R)=>u-R)},[k,J,Ie,De]),_e=o.useCallback(()=>{if(!_||S.current)return;const e=Te.current;if(e.length===0)return;const s=ne.current.key,l=Math.min(e.length-1,(s!==null?me.current.get(s):void 0)??Math.max(0,De)),a=u=>Math.abs((me.current.get(u)??0)-l),d=[];C.current.has(e[l])||d.push(e[l]);for(let u=1;u<=Oe;u+=1){const R=l+u,T=l-u;R<e.length&&!C.current.has(e[R])&&d.push(e[R]),T>=0&&!C.current.has(e[T])&&d.push(e[T])}const w=d[0];if(w){if(C.current.size>=Oe){const u=a(w),R=Array.from(C.current).filter(Z=>Z!==S.current).sort((Z,ke)=>a(ke)-a(Z))[0];if(!R||a(R)<=u)return;const T=new Set(C.current);T.delete(R),ce(T)}S.current=w,ce(new Set(C.current).add(w))}},[_,ce,De]);We.current=_e;const we=o.useCallback(e=>{if(C.current.has(e))return;const s=S.current;if(s&&s!==e){const l=new Set(C.current);l.delete(s),ce(l),S.current=null}S.current=e,ce(new Set(C.current).add(e))},[ce]),Ve=o.useCallback(e=>{if(!C.current.has(e))return;const s=H.current.get(e);s&&se.current.set(e,s),S.current===e&&(S.current=null),window.requestAnimationFrame(()=>We.current())},[]),Ge=o.useCallback((e,s,l)=>{if(Math.abs(l-s)<1)return;const a=he.current.get(e);a!==void 0&&Math.abs(a-l)<1||(he.current.set(e,l),Bt(e,l),ct(d=>d+1))},[]);o.useLayoutEffect(()=>{if(fe.current!==v){fe.current=v;for(const e of N){if(e.diffOverride!==void 0)continue;const s=Kt(e.path,e.repoRoot);jt(s,e.repoRoot??void 0,D)}}},[N,D,v]),o.useLayoutEffect(()=>{const e=G.current;if(!e)return;const s=()=>{const a=Math.max(0,Math.ceil(e.clientHeight));if(a===0)return;const d=e.scrollTop;ye(w=>w.height===a&&w.top===d?w:{top:d,height:a})};if(s(),typeof ResizeObserver>"u")return;const l=new ResizeObserver(s);return l.observe(e),()=>l.disconnect()},[$]),o.useEffect(()=>{_&&Fe&&we(Fe)},[_,we,Fe]),o.useEffect(()=>{const e=new Set(Te.current);for(const s of Array.from(he.current.keys()))e.has(s)||he.current.delete(s);for(const s of Array.from(C.current))if(!e.has(s)){const l=new Set(C.current);l.delete(s),ce(l)}for(const s of Array.from(se.current.keys()))e.has(s)||se.current.delete(s);if(S.current&&!e.has(S.current)&&(S.current=null),N.length===0){S.current=null,se.current.clear(),ce(new Set);return}_e()},[N.length,Ee,_e,$e,ce]);const Xe=o.useCallback(e=>{G.current=e;const s=Y.current,l=e.scrollTop;Y.current=l;const a=d=>{const w=Be.current,u=Te.current;let R=0,T=w.tops.length;for(;R<T;){const Ae=Math.floor((R+T)/2);w.tops[Ae]<=d+1?R=Ae+1:T=Ae}const Z=Math.min(u.length-1,Math.max(0,R-1)),ke=u[Z]??null;ne.current={key:ke,top:w.tops[Z]??0},ke&&we(ke)};Math.abs(l-s)>=Le?(Je.flushSync(()=>{ye({top:l,height:e.clientHeight})}),a(l)):K.current===null&&(K.current=window.requestAnimationFrame(()=>{K.current=null;const d=G.current;if(d){const w=d.scrollTop;ye({top:w,height:d.clientHeight}),a(w)}})),L?.(e)},[L,we]);o.useEffect(()=>()=>{K.current!==null&&window.cancelAnimationFrame(K.current)},[]),o.useLayoutEffect(()=>{const e=G.current;if(!e)return;const s=ne.current;if(s.key===null)return;const l=me.current.get(s.key);if(l===void 0)return;const a=(k.tops[l]??s.top)-s.top;if(Math.abs(a)<1)return;const d=e.scrollTop+a;Y.current=d,ye(w=>({top:d,height:w.height})),typeof e.scrollTo=="function"?e.scrollTo({top:d,behavior:"instant"}):e.scrollTop=d},[k]),o.useLayoutEffect(()=>{const e=Te.current,s=k.tops;if(e.length===0){ne.current={key:null,top:0};return}const l=Y.current,a=l+(G.current?.clientHeight??J.height),d=ne.current;if(d.key!==null){const T=me.current.get(d.key);if(T!==void 0){const Z=s[T]??0;if(Z+(k.heights[T]??Qe)>l&&Z<a){ne.current={key:d.key,top:Z};return}}}let w=0,u=s.length;for(;w<u;){const T=Math.floor((w+u)/2);s[T]<=l+1?w=T+1:u=T}const R=Math.min(s.length-1,Math.max(0,w-1));ne.current={key:e[R]??null,top:s[R]??0}}),o.useLayoutEffect(()=>{if(!oe)return;const e=X.current;if(e?.key===oe&&e.nonce===re)return;const s=me.current.get(oe);if(s===void 0)return;we(oe),ne.current={key:oe,top:k.tops[s]??0};const l=G.current;if(!l||l.clientHeight===0||J.height!==l.clientHeight)return;X.current={key:oe,nonce:re};const a=k.tops[s]??0;typeof l.scrollTo=="function"?l.scrollTo({top:a,behavior:"instant"}):l.scrollTop=a;const d=l.scrollTop;Y.current=d,ye({top:d,height:l.clientHeight})},[k,J.height,we,oe,re]),o.useLayoutEffect(()=>{if(Q===void 0||oe)return;const e=Ee;if(be.current===e||le&&be.current!==null)return;const s=G.current;if(!s)return;be.current=e;const l=Math.max(0,k.bottom-s.clientHeight),a=Math.min(Math.max(0,Q),l);typeof s.scrollTo=="function"?s.scrollTo({top:a,behavior:"instant"}):s.scrollTop=a;const d=s.scrollTop;Y.current=d,ye({top:d,height:s.clientHeight})},[k.bottom,Q,Ee,le,oe]);const at=o.useCallback((e,s)=>{const l=ve(e),a=H.current.get(e.key),d=a!==void 0&&$t(se.current.get(e.key),a);return r.jsx(Gt,{item:e,repoRoot:e.repoRoot,selectionPath:e.key,displayName:e.displayName,displayDir:e.displayDir,selected:l,activePane:_,visible:Ie.has(e.key),reusableContent:d,estimatedHeight:s,lightweight:!1,wrap:W,viewType:p,inlineMode:j,diffOptions:D,reloadKey:v,auditRecords:e.auditRecords,diffOverride:e.diffOverride,oldSourceRef:e.oldSourceRef,renderStreamBadge:M,onInsertDiffReference:e.onInsertDiffReference??F,onHunkGitAction:e.onHunkGitAction??B,previewReverts:e.previewReverts,onReferenceCopied:P,insertedReferenceKey:q,copiedReferenceKey:I,onClearAuditRecord:U,onContentReady:Ve,onHeightChange:Ge})},[_,I,D,p,Ve,Ge,j,q,ve,Ie,U,B,F,P,v,M,W]),it=r.jsx("div",{"data-diff-stream-content":!0,"data-diff-stream-canvas":!0,className:"termdock-diff-stream relative overflow-clip bg-surface will-change-transform",style:{height:Math.max(k.bottom,(k.tops.at(-1)??0)+J.height)},children:$e.map(e=>{const s=N[e];return s?r.jsx("div",{"data-diff-canvas-slot":s.key,className:"absolute inset-x-0",style:{top:k.tops[e]},children:at(s,k.heights[e])},s.key):null})}),lt=r.jsx("div",{ref:G,className:"termdock-diff-stream termdock-diff-stream-scroller h-full max-h-full min-h-0 overflow-y-auto overscroll-contain bg-surface [overflow-anchor:none]",onScroll:e=>Xe(e.currentTarget),children:it});return r.jsx(Lt,{groups:n,mode:h,onModeChange:i,selectedKey:c,collapsedDirectoryKeys:y,onToggleDirectory:x,onSelectFile:m,renderLeading:g,renderTrailing:f,renderDirectoryTrailing:b,renderSubtitle:z,detail:lt,mobile:$,backLabel:ae,compact:ue,emptyContent:O,listPrefix:de,aiContent:pe,listContainerClassName:xe,detailContainerClassName:ge,renderListHeader:ee,renderMobileDetailHeader:V,externalSwiperRef:je,onMobileSlideChange:Ne,slideToDetailOnMobile:Se,desktopLayout:ie,onDetailScroll:Xe,desktopSidePanel:te,desktopListClassName:A,detailOwnsScroll:!0})}const Gt=o.memo(function({item:n,renderStreamBadge:c,...m}){return r.jsx(Pt,{...m,file:Xt(n),renderBadge:h=>c(h,n)})});function Xt(t){return{path:t.path,oldPath:t.oldPath,absolutePath:t.absolutePath,status:t.status}}function Kt(t,n){if(t)return n&&t.startsWith(`${n}/`)?t.slice(n.length+1):t}export{Zt as C,tr as D,St as f,er as n};
@@ -1,2 +1,2 @@
1
- import{cc as i}from"./app-stNRNTO-.js";import{b as r}from"./dnd-BCFAPC0L.js";import{D as I}from"./DiffReview-DAUBgpsh.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./gestureArbiter-DszagC-d.js";import"./swiper-DJjq1TYT.js";import"./sparkles-B64EiCUM.js";import"./list-tree-DKTcSR9r.js";import"./DiffViewer-Cg3GhKcU.js";import"./syntaxHighlight-Bgt0lmWx.js";import"./git-compare-C7n2uha2.js";const x=40,b="/tmp/termdock-diff-review-lab";function S(n,c,l=!1){const d=[`diff --git a/${n} b/${n}`,`--- a/${n}`,`+++ b/${n}`,`@@ -1,${c} +1,${c} @@`];for(let t=0;t<c;t+=1)t%5===0&&d.push(`-const removed_${t} = ${t};`),t%3===0&&d.push(`+const added_${t} = ${t} * 2;`),d.push(` context line ${t} in ${n}${l?" long content for repeated wrap and resize checks".repeat(10):""}`);return d.join(`
2
- `)}function T(n,c,l){return Array.from({length:x},(d,t)=>{const f=6+t*7%60,a=`src/module${String(t).padStart(2,"0")}/File${t}.ts`,m=`${b}/${a}`,w=S(a,f,l),o=S(a,1,l);return{key:m,path:a,absolutePath:m,status:"modified",repoRoot:b,displayName:`File${t}.ts`,displayDir:`src/module${String(t).padStart(2,"0")} · ${f} lines`,diffOverride:!c||n.has(t)?w:o,auditRecords:[]}})}function V(){const[n,c]=r.useState(()=>new URLSearchParams(window.location.search).get("wrap")!=="off"),[l,d]=r.useState(()=>new URLSearchParams(window.location.search).get("view")==="split"),t=r.useMemo(()=>new URLSearchParams(window.location.search).get("long")==="1",[]),f=r.useMemo(()=>{if(typeof window>"u")return 0;const e=new URLSearchParams(window.location.search).get("delay"),s=e===null?0:Number.parseInt(e,10);return Number.isInteger(s)&&s>0?s:0},[]),a=f>0,[m,w]=r.useState(()=>new Set);r.useEffect(()=>{if(!a)return;const e=Array.from({length:x},(s,u)=>window.setTimeout(()=>{w(M=>{const g=new Set(M);return g.add(u),g})},f+u*20));return()=>e.forEach(s=>window.clearTimeout(s))},[a,f]);const o=r.useMemo(()=>T(m,a,t),[m,a,t]),k=r.useMemo(()=>[{key:"mock-repo",root:b,label:"diff-review-lab",files:o.map(e=>({key:e.key,path:e.path,absolutePath:e.absolutePath,displayName:e.displayName,displayDir:e.displayDir,status:e.status}))}],[o]),p=r.useMemo(()=>{if(typeof window>"u")return null;const e=new URLSearchParams(window.location.search).get("select");if(e===null)return null;const s=Number.parseInt(e,10);return Number.isInteger(s)&&s>=0&&s<o.length?s:null},[o.length]),[h,$]=r.useState(()=>p!==null?o[p].key:null),[y,R]=r.useState(()=>({key:p!==null?o[p].key:null,nonce:p!==null?1:0})),[N,v]=r.useState("list"),[D,j]=r.useState(new Set),[L,P]=r.useState(p!==null?1:0);return i.jsxs("div",{className:"flex h-screen flex-col bg-background text-foreground","data-diff-review-lab":!0,children:[i.jsxs("div",{className:"shrink-0 border-b border-border/20 px-3 py-2 text-xs text-muted-foreground",children:[i.jsxs("button",{type:"button",className:"mr-2 rounded bg-surface-2 px-2 py-1",onClick:()=>c(e=>!e),"aria-pressed":n,children:["Wrap ",n?"on":"off"]}),i.jsx("button",{type:"button",className:"mr-2 rounded bg-surface-2 px-2 py-1",onClick:()=>d(e=>!e),"aria-pressed":l,children:l?"Split":"Unified"}),"DiffReview Lab · ",o.length," mock files · selected: ",i.jsx("span",{"data-lab-selected":!0,children:h??"none"})," · slide ",L]}),i.jsx("div",{className:"min-h-0 flex-1",children:i.jsx(I,{mobile:!0,backLabel:"Back",files:o,groups:k,selectedKey:h,scrollToKey:y.key,scrollToKeyNonce:y.nonce,mode:N,onModeChange:e=>{e!=="ai"&&v(e)},collapsedDirectoryKeys:D,onToggleDirectory:e=>j(s=>{const u=new Set(s);return u.has(e)?u.delete(e):u.add(e),u}),onSelectFile:e=>{$(e.key),R(s=>({key:e.key,nonce:s.nonce+1}))},onMobileSlideChange:P,renderLeading:()=>null,renderStreamBadge:e=>i.jsx("span",{className:"text-[10px] text-muted-foreground",children:e}),wrap:n,diffViewType:l?"split":"unified",activePane:!0})})]})}export{V as DiffReviewLab};
1
+ import{cg as i}from"./app-DuUnqxq-.js";import{b as r}from"./dnd-BCFAPC0L.js";import{D as I}from"./DiffReview-12E2zWyL.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./gestureArbiter-DszagC-d.js";import"./swiper-DJjq1TYT.js";import"./list-tree-C281zrdg.js";import"./DiffViewer-DqcQxp4Q.js";import"./syntaxHighlight-Cz6TPDW9.js";import"./git-compare-90v75Jal.js";const x=40,b="/tmp/termdock-diff-review-lab";function S(n,c,l=!1){const d=[`diff --git a/${n} b/${n}`,`--- a/${n}`,`+++ b/${n}`,`@@ -1,${c} +1,${c} @@`];for(let t=0;t<c;t+=1)t%5===0&&d.push(`-const removed_${t} = ${t};`),t%3===0&&d.push(`+const added_${t} = ${t} * 2;`),d.push(` context line ${t} in ${n}${l?" long content for repeated wrap and resize checks".repeat(10):""}`);return d.join(`
2
+ `)}function T(n,c,l){return Array.from({length:x},(d,t)=>{const f=6+t*7%60,a=`src/module${String(t).padStart(2,"0")}/File${t}.ts`,m=`${b}/${a}`,w=S(a,f,l),o=S(a,1,l);return{key:m,path:a,absolutePath:m,status:"modified",repoRoot:b,displayName:`File${t}.ts`,displayDir:`src/module${String(t).padStart(2,"0")} · ${f} lines`,diffOverride:!c||n.has(t)?w:o,auditRecords:[]}})}function z(){const[n,c]=r.useState(()=>new URLSearchParams(window.location.search).get("wrap")!=="off"),[l,d]=r.useState(()=>new URLSearchParams(window.location.search).get("view")==="split"),t=r.useMemo(()=>new URLSearchParams(window.location.search).get("long")==="1",[]),f=r.useMemo(()=>{if(typeof window>"u")return 0;const e=new URLSearchParams(window.location.search).get("delay"),s=e===null?0:Number.parseInt(e,10);return Number.isInteger(s)&&s>0?s:0},[]),a=f>0,[m,w]=r.useState(()=>new Set);r.useEffect(()=>{if(!a)return;const e=Array.from({length:x},(s,u)=>window.setTimeout(()=>{w(M=>{const g=new Set(M);return g.add(u),g})},f+u*20));return()=>e.forEach(s=>window.clearTimeout(s))},[a,f]);const o=r.useMemo(()=>T(m,a,t),[m,a,t]),k=r.useMemo(()=>[{key:"mock-repo",root:b,label:"diff-review-lab",files:o.map(e=>({key:e.key,path:e.path,absolutePath:e.absolutePath,displayName:e.displayName,displayDir:e.displayDir,status:e.status}))}],[o]),p=r.useMemo(()=>{if(typeof window>"u")return null;const e=new URLSearchParams(window.location.search).get("select");if(e===null)return null;const s=Number.parseInt(e,10);return Number.isInteger(s)&&s>=0&&s<o.length?s:null},[o.length]),[h,$]=r.useState(()=>p!==null?o[p].key:null),[y,R]=r.useState(()=>({key:p!==null?o[p].key:null,nonce:p!==null?1:0})),[N,v]=r.useState("list"),[D,j]=r.useState(new Set),[L,P]=r.useState(p!==null?1:0);return i.jsxs("div",{className:"flex h-screen flex-col bg-background text-foreground","data-diff-review-lab":!0,children:[i.jsxs("div",{className:"shrink-0 border-b border-border/20 px-3 py-2 text-xs text-muted-foreground",children:[i.jsxs("button",{type:"button",className:"mr-2 rounded bg-surface-2 px-2 py-1",onClick:()=>c(e=>!e),"aria-pressed":n,children:["Wrap ",n?"on":"off"]}),i.jsx("button",{type:"button",className:"mr-2 rounded bg-surface-2 px-2 py-1",onClick:()=>d(e=>!e),"aria-pressed":l,children:l?"Split":"Unified"}),"DiffReview Lab · ",o.length," mock files · selected: ",i.jsx("span",{"data-lab-selected":!0,children:h??"none"})," · slide ",L]}),i.jsx("div",{className:"min-h-0 flex-1",children:i.jsx(I,{mobile:!0,backLabel:"Back",files:o,groups:k,selectedKey:h,scrollToKey:y.key,scrollToKeyNonce:y.nonce,mode:N,onModeChange:e=>{e!=="ai"&&v(e)},collapsedDirectoryKeys:D,onToggleDirectory:e=>j(s=>{const u=new Set(s);return u.has(e)?u.delete(e):u.add(e),u}),onSelectFile:e=>{$(e.key),R(s=>({key:e.key,nonce:s.nonce+1}))},onMobileSlideChange:P,renderLeading:()=>null,renderStreamBadge:e=>i.jsx("span",{className:"text-[10px] text-muted-foreground",children:e}),wrap:n,diffViewType:l?"split":"unified",activePane:!0})})]})}export{z as DiffReviewLab};
@@ -1,4 +1,4 @@
1
- import{aR as Wi,cc as h,em as lr,cC as cr,e6 as Ki,ef as Ui,e9 as Xi,bt as Yi,cH as Ji,an as Zi,s as fs,h as ds,f as hs,c6 as Qi,br as Gs}from"./app-stNRNTO-.js";import{b as S}from"./dnd-BCFAPC0L.js";import{r as qt,h as qi,a as eo}from"./syntaxHighlight-Bgt0lmWx.js";import{G as er}from"./git-compare-C7n2uha2.js";const no=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],to=Wi("link",no);function gs(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),n.push.apply(n,r)}return n}function te(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?gs(Object(n),!0).forEach((function(r){ur(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gs(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function ur(e,t,n){return(t=(function(r){var s=(function(i,o){if(typeof i!="object"||i===null)return i;var a=i[Symbol.toPrimitive];if(a!==void 0){var l=a.call(i,o);if(typeof l!="object")return l;throw new TypeError("@@toPrimitive must return a primitive value.")}return(o==="string"?String:Number)(i)})(r,"string");return typeof s=="symbol"?s:String(s)})(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yn(e,t){if(e==null)return{};var n,r,s=(function(o,a){if(o==null)return{};var l,c,u={},f=Object.keys(o);for(c=0;c<f.length;c++)l=f[c],a.indexOf(l)>=0||(u[l]=o[l]);return u})(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(s[n]=e[n])}return s}function Fe(e,t){return so(e)||(function(n,r){var s=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(s!=null){var i,o,a,l,c=[],u=!0,f=!1;try{if(a=(s=s.call(n)).next,r===0){if(Object(s)!==s)return;u=!1}else for(;!(u=(i=a.call(s)).done)&&(c.push(i.value),c.length!==r);u=!0);}catch(d){f=!0,o=d}finally{try{if(!u&&s.return!=null&&(l=s.return(),Object(l)!==l))return}finally{if(f)throw o}}return c}})(e,t)||_r(e,t)||oo()}function ro(e){return(function(t){if(Array.isArray(t))return fr(t)})(e)||io(e)||_r(e)||(function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
1
+ import{aV as Wi,cg as h,eq as lr,cG as cr,ea as Ki,ej as Ui,ed as Xi,bx as Yi,cL as Ji,ar as Zi,u as fs,i as ds,g as hs,ca as Qi,bv as Gs}from"./app-DuUnqxq-.js";import{b as S}from"./dnd-BCFAPC0L.js";import{r as qt,h as qi,a as eo}from"./syntaxHighlight-Cz6TPDW9.js";import{G as er}from"./git-compare-90v75Jal.js";const no=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],to=Wi("link",no);function gs(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),n.push.apply(n,r)}return n}function te(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?gs(Object(n),!0).forEach((function(r){ur(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gs(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function ur(e,t,n){return(t=(function(r){var s=(function(i,o){if(typeof i!="object"||i===null)return i;var a=i[Symbol.toPrimitive];if(a!==void 0){var l=a.call(i,o);if(typeof l!="object")return l;throw new TypeError("@@toPrimitive must return a primitive value.")}return(o==="string"?String:Number)(i)})(r,"string");return typeof s=="symbol"?s:String(s)})(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yn(e,t){if(e==null)return{};var n,r,s=(function(o,a){if(o==null)return{};var l,c,u={},f=Object.keys(o);for(c=0;c<f.length;c++)l=f[c],a.indexOf(l)>=0||(u[l]=o[l]);return u})(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(s[n]=e[n])}return s}function Fe(e,t){return so(e)||(function(n,r){var s=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(s!=null){var i,o,a,l,c=[],u=!0,f=!1;try{if(a=(s=s.call(n)).next,r===0){if(Object(s)!==s)return;u=!1}else for(;!(u=(i=a.call(s)).done)&&(c.push(i.value),c.length!==r);u=!0);}catch(d){f=!0,o=d}finally{try{if(!u&&s.return!=null&&(l=s.return(),Object(l)!==l))return}finally{if(f)throw o}}return c}})(e,t)||_r(e,t)||oo()}function ro(e){return(function(t){if(Array.isArray(t))return fr(t)})(e)||io(e)||_r(e)||(function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
2
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)})()}function so(e){if(Array.isArray(e))return e}function io(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function _r(e,t){if(e){if(typeof e=="string")return fr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?fr(e,t):void 0}}function fr(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function oo(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
3
3
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ao(e,t){var n=typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=_r(e))||t){n&&(e=n);var r=0,s=function(){};return{s,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(l){throw l},f:s}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
4
4
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i,o=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var l=n.next();return o=l.done,l},e:function(l){a=!0,i=l},f:function(){try{o||n.return==null||n.return()}finally{if(a)throw i}}}}var mt=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Zn(e,t){return e(t={exports:{}},t.exports),t.exports}var we=Zn((function(e){(function(){var t={}.hasOwnProperty;function n(){for(var r=[],s=0;s<arguments.length;s++){var i=arguments[s];if(i){var o=typeof i;if(o==="string"||o==="number")r.push(i);else if(Array.isArray(i)){if(i.length){var a=n.apply(null,i);a&&r.push(a)}}else if(o==="object"){if(i.toString!==Object.prototype.toString&&!i.toString.toString().includes("[native code]")){r.push(i.toString());continue}for(var l in i)t.call(i,l)&&i[l]&&r.push(l)}}}return r.join(" ")}e.exports?(n.default=n,e.exports=n):window.classNames=n})()})),ue={hunkClassName:"",lineClassName:"",gutterClassName:"",codeClassName:"",monotonous:!1,gutterType:"default",viewType:"split",widgets:{},hideGutter:!1,selectedChanges:[],generateAnchorID:function(){},generateLineClassName:function(){},renderGutter:function(e){var t=e.renderDefault;return(0,e.wrapInAnchor)(t())},codeEvents:{},gutterEvents:{}},Ws=S.createContext(ue),lo=Ws.Provider,co=function(){return S.useContext(Ws)};Zn((function(e,t){(function(n){function r(i){var o=i.slice(11),a=null,l=null;switch(o.indexOf('"')){case-1:a=(f=o.split(" "))[0].slice(2),l=f[1].slice(2);break;case 0:var c=o.indexOf('"',2);a=o.slice(3,c);var u=o.indexOf('"',c+1);l=u<0?o.slice(c+4):o.slice(u+3,-1);break;default:var f;a=(f=o.split(" "))[0].slice(2),l=f[1].slice(3,-1)}return{oldPath:a,newPath:l}}var s={parse:function(i){for(var o,a,l,c,u,f=[],d=2,g=i.split(`