termdock 1.4.350 → 1.4.352
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.
- package/dist/client/assets/AndroidMirrorView-DkOZxYLg.js +3 -0
- package/dist/client/assets/AndroidMirrorView-DkOZxYLg.js.br +0 -0
- package/dist/client/assets/AndroidMirrorView-DkOZxYLg.js.gz +0 -0
- package/dist/client/assets/App-DqRkfVSm.js +178 -0
- package/dist/client/assets/App-DqRkfVSm.js.br +0 -0
- package/dist/client/assets/App-DqRkfVSm.js.gz +0 -0
- package/dist/client/assets/ArchitecturePanel-m9GKl3cl.js +9 -0
- package/dist/client/assets/ArchitecturePanel-m9GKl3cl.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-m9GKl3cl.js.gz +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-HZ0zvFvi.js +2 -0
- package/dist/client/assets/ChangeWalkthroughPanel-HZ0zvFvi.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-HZ0zvFvi.js.gz +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-B4OMk92m.js +1 -0
- package/dist/client/assets/CollaborationMainWorkspace-B4OMk92m.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-B4OMk92m.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-Cbg3iH6E.js +2 -0
- package/dist/client/assets/ComputerControlView-CSs54lf0.js +6 -0
- package/dist/client/assets/ComputerControlView-CSs54lf0.js.br +0 -0
- package/dist/client/assets/ComputerControlView-CSs54lf0.js.gz +0 -0
- package/dist/client/assets/DagPlayground-yoS2llnB.js +1 -0
- package/dist/client/assets/DagPlayground-yoS2llnB.js.br +0 -0
- package/dist/client/assets/DagPlayground-yoS2llnB.js.gz +0 -0
- package/dist/client/assets/{DiffLab-DEw4y4Hk.js → DiffLab-Dj1MT9pY.js} +2 -2
- package/dist/client/assets/DiffLab-Dj1MT9pY.js.br +0 -0
- package/dist/client/assets/DiffLab-Dj1MT9pY.js.gz +0 -0
- package/dist/client/assets/DiffReview-BX2S9hNp.js +1 -0
- package/dist/client/assets/DiffReview-BX2S9hNp.js.br +0 -0
- package/dist/client/assets/DiffReview-BX2S9hNp.js.gz +0 -0
- package/dist/client/assets/{DiffReviewLab-CDXsy0jE.js → DiffReviewLab-DqI14GEk.js} +2 -2
- package/dist/client/assets/DiffReviewLab-DqI14GEk.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-DqI14GEk.js.gz +0 -0
- package/dist/client/assets/DiffViewer-AZvdDGfH.js +34 -0
- package/dist/client/assets/DiffViewer-AZvdDGfH.js.br +0 -0
- package/dist/client/assets/DiffViewer-AZvdDGfH.js.gz +0 -0
- package/dist/client/assets/GitLoadingSkeleton-CBPykkZP.js +1 -0
- package/dist/client/assets/GitLoadingSkeleton-CBPykkZP.js.br +0 -0
- package/dist/client/assets/GitLoadingSkeleton-CBPykkZP.js.gz +0 -0
- package/dist/client/assets/MarkdownPreview-DpvTnKkj.js +19 -0
- package/dist/client/assets/MarkdownPreview-DpvTnKkj.js.br +0 -0
- package/dist/client/assets/MarkdownPreview-DpvTnKkj.js.gz +0 -0
- package/dist/client/assets/{ModelPreview-BEiOgE0G.js → ModelPreview-Du_AyPr9.js} +166 -166
- package/dist/client/assets/ModelPreview-Du_AyPr9.js.br +0 -0
- package/dist/client/assets/ModelPreview-Du_AyPr9.js.gz +0 -0
- package/dist/client/assets/RecordingSaveDialog-CtXaGgIo.js +1 -0
- package/dist/client/assets/RecordingSaveDialog-CtXaGgIo.js.br +0 -0
- package/dist/client/assets/RecordingSaveDialog-CtXaGgIo.js.gz +0 -0
- package/dist/client/assets/RightSidebar-DU3gwdzg.js +1662 -0
- package/dist/client/assets/RightSidebar-DU3gwdzg.js.br +0 -0
- package/dist/client/assets/RightSidebar-DU3gwdzg.js.gz +0 -0
- package/dist/client/assets/SessionChatView-CxfwJMuK.js +13 -0
- package/dist/client/assets/SessionChatView-CxfwJMuK.js.br +0 -0
- package/dist/client/assets/SessionChatView-CxfwJMuK.js.gz +0 -0
- package/dist/client/assets/SessionChatView-D8GoESjb.css +1 -0
- package/dist/client/assets/SessionChatView-D8GoESjb.css.br +0 -0
- package/dist/client/assets/SessionChatView-D8GoESjb.css.gz +0 -0
- package/dist/client/assets/SessionResourceSidebar-B31PU57J.js +2 -0
- package/dist/client/assets/SessionResourceSidebar-B31PU57J.js.br +0 -0
- package/dist/client/assets/SessionResourceSidebar-B31PU57J.js.gz +0 -0
- package/dist/client/assets/TodoWorkspace-j9BLgk94.js +1 -0
- package/dist/client/assets/TodoWorkspace-j9BLgk94.js.br +0 -0
- package/dist/client/assets/TodoWorkspace-j9BLgk94.js.gz +0 -0
- package/dist/client/assets/{abnfDiagram-VCTEODGH-ByzlUu_B.js → abnfDiagram-VCTEODGH-LfmMIpPX.js} +1 -1
- package/dist/client/assets/abnfDiagram-VCTEODGH-LfmMIpPX.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-LfmMIpPX.js.gz +0 -0
- package/dist/client/assets/app-BMJesFDU.js +36 -0
- package/dist/client/assets/app-BMJesFDU.js.br +0 -0
- package/dist/client/assets/app-BMJesFDU.js.gz +0 -0
- package/dist/client/assets/{arc-BA6JM6vl.js → arc-DMzcmH2U.js} +1 -1
- package/dist/client/assets/arc-DMzcmH2U.js.br +0 -0
- package/dist/client/assets/arc-DMzcmH2U.js.gz +0 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-hCHxOfKw.js → architectureDiagram-5GKGNRK7-CphS_S5Q.js} +1 -1
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CphS_S5Q.js.br +0 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-hCHxOfKw.js.gz → architectureDiagram-5GKGNRK7-CphS_S5Q.js.gz} +0 -0
- package/dist/client/assets/arrow-down-D-WZS308.js +1 -0
- package/dist/client/assets/arrow-up-CelbB9FE.js +1 -0
- package/dist/client/assets/{blockDiagram-I7D4REHJ-OmEN9hUB.js → blockDiagram-I7D4REHJ-Dx_4qkcL.js} +1 -1
- package/dist/client/assets/blockDiagram-I7D4REHJ-Dx_4qkcL.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-Dx_4qkcL.js.gz +0 -0
- package/dist/client/assets/{c4Diagram-7LVT6UL2-DfLTv8zh.js → c4Diagram-7LVT6UL2-DiGdnPo4.js} +1 -1
- package/dist/client/assets/c4Diagram-7LVT6UL2-DiGdnPo4.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-DiGdnPo4.js.gz +0 -0
- package/dist/client/assets/channel-BxAJ9Qmh.js +1 -0
- package/dist/client/assets/chevron-left-5sk7gL3u.js +1 -0
- package/dist/client/assets/{chunk-2Q5K7J3B-C3O76PNZ.js → chunk-2Q5K7J3B-M50KNmR8.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-CsWZd30k.js → chunk-5VM5RSS4-wXVM-Max.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-yxCv2Uqk.js → chunk-F27PBJKO-BfQILS9u.js} +1 -1
- package/dist/client/assets/chunk-F27PBJKO-BfQILS9u.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-BfQILS9u.js.gz +0 -0
- package/dist/client/assets/{chunk-IMKFNOWR-CdPjlb9f.js → chunk-IMKFNOWR-D111Jpl3.js} +1 -1
- package/dist/client/assets/chunk-IMKFNOWR-D111Jpl3.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-D111Jpl3.js.gz +0 -0
- package/dist/client/assets/{chunk-JWPE2WC7-BiiOLq2R.js → chunk-JWPE2WC7-BBDyly5c.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-BOu_1Brt.js → chunk-POPQ4Y6H-BaI-_yc7.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-D1tOJung.js → chunk-SVP7TREG-BvQafCMJ.js} +1 -1
- package/dist/client/assets/chunk-SVP7TREG-BvQafCMJ.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-BvQafCMJ.js.gz +0 -0
- package/dist/client/assets/{chunk-TICWLB2K-DZjDfYNw.js → chunk-TICWLB2K-CQXPwGBz.js} +1 -1
- package/dist/client/assets/chunk-TICWLB2K-CQXPwGBz.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-CQXPwGBz.js.gz +0 -0
- package/dist/client/assets/{chunk-XXDRQBXY-CtGPyXWh.js → chunk-XXDRQBXY-CmwZc4xV.js} +1 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-D0oXVFxd.js +1 -0
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-D0oXVFxd.js +1 -0
- package/dist/client/assets/clipboard-uSv3AiJM.js +1 -0
- package/dist/client/assets/clipboardText-5puxqqm_.js +1 -0
- package/dist/client/assets/clipboardText-5puxqqm_.js.br +0 -0
- package/dist/client/assets/clipboardText-5puxqqm_.js.gz +0 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-C4Wb5lqD.js → cose-bilkent-JH36ORCC-CqWarkUj.js} +1 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-CqWarkUj.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-CqWarkUj.js.gz +0 -0
- package/dist/client/assets/{cynefin-OW5HDTMX-BvWKB1Xk.js → cynefin-OW5HDTMX-CFW2ifig.js} +1 -1
- package/dist/client/assets/cynefin-OW5HDTMX-CFW2ifig.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-CFW2ifig.js.gz +0 -0
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-7tAkHD2P.js → cynefinDiagram-5FMLGOSQ-yggxM55S.js} +1 -1
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-yggxM55S.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-yggxM55S.js.gz +0 -0
- package/dist/client/assets/{dagre-GXQ25YYZ-Bs6IPwks.js → dagre-GXQ25YYZ-inq7o--x.js} +1 -1
- package/dist/client/assets/dagre-GXQ25YYZ-inq7o--x.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-inq7o--x.js.gz +0 -0
- package/dist/client/assets/{diagram-S7CK7UJ4-CmYXaTya.js → diagram-S7CK7UJ4-BUXMnyQN.js} +1 -1
- package/dist/client/assets/diagram-S7CK7UJ4-BUXMnyQN.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-BUXMnyQN.js.gz +0 -0
- package/dist/client/assets/{diagram-UQ7AKVKN-CqxoefB7.js → diagram-UQ7AKVKN-BJbw-Imf.js} +1 -1
- package/dist/client/assets/diagram-UQ7AKVKN-BJbw-Imf.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-BJbw-Imf.js.gz +0 -0
- package/dist/client/assets/{diagram-VSXAHHWV-Dxp1MKPT.js → diagram-VSXAHHWV-CSfl8yS7.js} +1 -1
- package/dist/client/assets/diagram-VSXAHHWV-CSfl8yS7.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-CSfl8yS7.js.gz +0 -0
- package/dist/client/assets/{diagram-VX7I27RA-BKbWvvEr.js → diagram-VX7I27RA-zV-Vrv89.js} +1 -1
- package/dist/client/assets/diagram-VX7I27RA-zV-Vrv89.js.br +0 -0
- package/dist/client/assets/{diagram-VX7I27RA-BKbWvvEr.js.gz → diagram-VX7I27RA-zV-Vrv89.js.gz} +0 -0
- package/dist/client/assets/{diagram-Z3DM3KII-BZnNaP7F.js → diagram-Z3DM3KII-CRnE-snw.js} +1 -1
- package/dist/client/assets/diagram-Z3DM3KII-CRnE-snw.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-CRnE-snw.js.gz +0 -0
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-BXVlN_P7.js → ebnfDiagram-PWID7BFC-CE30oImc.js} +1 -1
- package/dist/client/assets/ebnfDiagram-PWID7BFC-CE30oImc.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-CE30oImc.js.gz +0 -0
- package/dist/client/assets/{erDiagram-RLTQ6QDP-CEdYDZU7.js → erDiagram-RLTQ6QDP-D-5bIySI.js} +1 -1
- package/dist/client/assets/erDiagram-RLTQ6QDP-D-5bIySI.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-D-5bIySI.js.gz +0 -0
- package/dist/client/assets/{flowDiagram-HODETNUW-Bbw8GPCZ.js → flowDiagram-HODETNUW-E_jPKtQR.js} +1 -1
- package/dist/client/assets/flowDiagram-HODETNUW-E_jPKtQR.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-E_jPKtQR.js.gz +0 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CcFbtP2y.js → ganttDiagram-EL5Y4UJY-BWvLOUzC.js} +1 -1
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-BWvLOUzC.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-BWvLOUzC.js.gz +0 -0
- package/dist/client/assets/gestureArbiter-DszagC-d.js +1 -0
- package/dist/client/assets/gestureArbiter-DszagC-d.js.br +0 -0
- package/dist/client/assets/gestureArbiter-DszagC-d.js.gz +0 -0
- package/dist/client/assets/git-compare-BlcHEuBI.js +1 -0
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-Eiust154.js → gitGraphDiagram-WWUBYQGX-nOlVCBmL.js} +1 -1
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-nOlVCBmL.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-nOlVCBmL.js.gz +0 -0
- package/dist/client/assets/index-CA1fR_jI.css +1 -0
- package/dist/client/assets/index-CA1fR_jI.css.br +0 -0
- package/dist/client/assets/index-CA1fR_jI.css.gz +0 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-DUmaNZJW.js → infoDiagram-27XIBGKW-CjVm9Lzz.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-qTwgXfx_.js → ishikawaDiagram-5VMMS53U-DmVMaGVp.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-qTwgXfx_.js.br → ishikawaDiagram-5VMMS53U-DmVMaGVp.js.br} +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-DmVMaGVp.js.gz +0 -0
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-DKy1msWo.js → journeyDiagram-3NMN7TZE-DLwkoAy9.js} +1 -1
- package/dist/client/assets/journeyDiagram-3NMN7TZE-DLwkoAy9.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-DLwkoAy9.js.gz +0 -0
- package/dist/client/assets/{kanban-definition-UXKFOSKX-BxibybDd.js → kanban-definition-UXKFOSKX-GWkp_QiO.js} +1 -1
- package/dist/client/assets/kanban-definition-UXKFOSKX-GWkp_QiO.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-GWkp_QiO.js.gz +0 -0
- package/dist/client/assets/{layout-Bh6fKHRM.js → layout-DFg5a61y.js} +1 -1
- package/dist/client/assets/layout-DFg5a61y.js.br +0 -0
- package/dist/client/assets/layout-DFg5a61y.js.gz +0 -0
- package/dist/client/assets/{linear-SRlL3VWX.js → linear-B0OdJLe1.js} +1 -1
- package/dist/client/assets/{linear-SRlL3VWX.js.br → linear-B0OdJLe1.js.br} +0 -0
- package/dist/client/assets/linear-B0OdJLe1.js.gz +0 -0
- package/dist/client/assets/link-BnxdKJ7b.js +8 -0
- package/dist/client/assets/link-BnxdKJ7b.js.br +0 -0
- package/dist/client/assets/link-BnxdKJ7b.js.gz +0 -0
- package/dist/client/assets/list-tree-Bou8VSzi.js +1 -0
- package/dist/client/assets/loader-circle-q7h8uwFI.js +1 -0
- package/dist/client/assets/maximize-2-BGTBw-Ku.js +1 -0
- package/dist/client/assets/{mermaid.core-D0bcNdw3.js → mermaid.core-DQA3ykXv.js} +5 -5
- package/dist/client/assets/mermaid.core-DQA3ykXv.js.br +0 -0
- package/dist/client/assets/mermaid.core-DQA3ykXv.js.gz +0 -0
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-CImZ_aI0.js → mindmap-definition-YA3MSWOX-DsZAVAGP.js} +2 -2
- package/dist/client/assets/mindmap-definition-YA3MSWOX-DsZAVAGP.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-DsZAVAGP.js.gz +0 -0
- package/dist/client/assets/passwordBootstrap-CEZSL94g.js +2 -0
- package/dist/client/assets/passwordBootstrap-CEZSL94g.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-CEZSL94g.js.gz +0 -0
- package/dist/client/assets/{pegDiagram-XKGWAZYB-BT4pTf8O.js → pegDiagram-XKGWAZYB-C3ar01Lf.js} +1 -1
- package/dist/client/assets/pegDiagram-XKGWAZYB-C3ar01Lf.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-C3ar01Lf.js.gz +0 -0
- package/dist/client/assets/{pieDiagram-E7YTZNPT-C5K58ien.js → pieDiagram-E7YTZNPT-C8LIa9gE.js} +1 -1
- package/dist/client/assets/pieDiagram-E7YTZNPT-C8LIa9gE.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-C8LIa9gE.js.gz +0 -0
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-DzSugYXz.js → quadrantDiagram-AXDQQJYC-BuRJ1f9F.js} +1 -1
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-BuRJ1f9F.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-BuRJ1f9F.js.gz +0 -0
- package/dist/client/assets/quote-qXNI_NTi.js +1 -0
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-BY07SouQ.js → railroadDiagram-O6MQD6OU-D7iZy3dO.js} +1 -1
- package/dist/client/assets/railroadDiagram-O6MQD6OU-D7iZy3dO.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-D7iZy3dO.js.gz +0 -0
- package/dist/client/assets/rdpSession-DUBlG26K.js +1 -0
- package/dist/client/assets/rdpSession-DUBlG26K.js.br +0 -0
- package/dist/client/assets/rdpSession-DUBlG26K.js.gz +0 -0
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-C7WieVuE.js → requirementDiagram-BXWQKSXE-DhY8g8qK.js} +1 -1
- package/dist/client/assets/requirementDiagram-BXWQKSXE-DhY8g8qK.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-DhY8g8qK.js.gz +0 -0
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-BJsDWNs4.js → sankeyDiagram-P5KCCOFB-DDA_LQcg.js} +1 -1
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-DDA_LQcg.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-DDA_LQcg.js.gz +0 -0
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BeJ_7853.js → sequenceDiagram-WJ2MYXX4-bWgfdfwY.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BeJ_7853.js.br → sequenceDiagram-WJ2MYXX4-bWgfdfwY.js.br} +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-bWgfdfwY.js.gz +0 -0
- package/dist/client/assets/settings-2-B-sr3wQM.js +1 -0
- package/dist/client/assets/{sizeCapture-INFHLROL-DOsjXKPV.js → sizeCapture-INFHLROL-BYxi7e0R.js} +1 -1
- package/dist/client/assets/sizeCapture-INFHLROL-BYxi7e0R.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-BYxi7e0R.js.gz +0 -0
- package/dist/client/assets/{sparkles-e9SkpP7a.js → sparkles-CCLflSFy.js} +1 -1
- package/dist/client/assets/{stateDiagram-D77RDMKH-6s709_RT.js → stateDiagram-D77RDMKH-6vqC2h36.js} +1 -1
- package/dist/client/assets/stateDiagram-D77RDMKH-6vqC2h36.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-6vqC2h36.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-Bb23lB9W.js +1 -0
- package/dist/client/assets/sun-B9_TfxlA.js +1 -0
- package/dist/client/assets/{swimlanes-42K2YHIH-5R5dw9_R.js → swimlanes-42K2YHIH-B4qrXam7.js} +1 -1
- package/dist/client/assets/swimlanes-42K2YHIH-B4qrXam7.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH-B4qrXam7.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-CQ1XJUVU.js +8 -0
- package/dist/client/assets/swiper-DJjq1TYT.js +1 -0
- package/dist/client/assets/swiper-DJjq1TYT.js.br +0 -0
- package/dist/client/assets/swiper-DJjq1TYT.js.gz +0 -0
- package/dist/client/assets/syntaxHighlight-bcOB6oww.js +4 -0
- package/dist/client/assets/syntaxHighlight-bcOB6oww.js.br +0 -0
- package/dist/client/assets/syntaxHighlight-bcOB6oww.js.gz +0 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-B4YN0lsx.js → timeline-definition-24CTP7MA-D0_004MF.js} +1 -1
- package/dist/client/assets/timeline-definition-24CTP7MA-D0_004MF.js.br +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-D0_004MF.js.gz +0 -0
- package/dist/client/assets/triangle-alert-D3w7mA17.js +1 -0
- package/dist/client/assets/unplug-BSblgecr.js +1 -0
- package/dist/client/assets/use-gesture-react.esm-DYpdiE_k.js +1 -0
- package/dist/client/assets/use-gesture-react.esm-DYpdiE_k.js.br +0 -0
- package/dist/client/assets/use-gesture-react.esm-DYpdiE_k.js.gz +0 -0
- package/dist/client/assets/v4-EwEgHOG0.js +1 -0
- package/dist/client/assets/{vennDiagram-4TSXK5OY-Wd83SmWI.js → vennDiagram-4TSXK5OY-Bqrx-47p.js} +1 -1
- package/dist/client/assets/vennDiagram-4TSXK5OY-Bqrx-47p.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-Bqrx-47p.js.gz +0 -0
- package/dist/client/assets/videoCompression-df1Ej3AR.js +3 -0
- package/dist/client/assets/videoCompression-df1Ej3AR.js.br +0 -0
- package/dist/client/assets/videoCompression-df1Ej3AR.js.gz +0 -0
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-CGsYvqWN.js → wardleyDiagram-VM6X3IG4-C4LCUdfd.js} +1 -1
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-C4LCUdfd.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-C4LCUdfd.js.gz +0 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-ednJq1_u.js → xychartDiagram-S5SC5T6Z-E5AQcZVI.js} +1 -1
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-ednJq1_u.js.br → xychartDiagram-S5SC5T6Z-E5AQcZVI.js.br} +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-E5AQcZVI.js.gz +0 -0
- package/dist/client/index.html +2 -2
- package/dist/client/index.html.br +0 -0
- package/dist/client/index.html.gz +0 -0
- package/dist/client/sw-encrypted-background.js +1 -1
- package/dist/client/sw-encrypted-background.js.br +0 -0
- package/dist/client/sw-encrypted-background.js.gz +0 -0
- package/dist/client/sw.js +1 -1
- package/dist/client/sw.js.br +0 -0
- package/dist/client/sw.js.gz +0 -0
- package/dist/server/agent/collaborationDeliveryWorker.js +11 -0
- package/dist/server/agent/collaborationPrompt.js +4 -2
- package/dist/server/agent/collaborationRoutes.js +2 -0
- package/dist/server/agent/collaborationStore.js +7 -1
- package/dist/server/agent/sessionAttachmentRoutes.js +39 -0
- package/dist/server/agent/sessionChatRoutes.js +64 -0
- package/dist/server/agent/sessionViewModeRoutes.js +72 -0
- package/dist/server/android/recording.js +19 -17
- package/dist/server/cli.js +34 -0
- package/dist/server/entry.js +26 -17
- package/dist/server/federation/accessPolicy.js +8 -3
- package/dist/server/federation/authorization.js +26 -3
- package/dist/server/federation/invitations.js +27 -6
- package/dist/server/federation/relay.js +21 -3
- package/dist/server/federation/requestContext.js +5 -1
- package/dist/server/federation/resourceAccess.js +63 -0
- package/dist/server/federation/runtime.js +67 -18
- package/dist/server/federation/sessionSharing.js +39 -0
- package/dist/server/federation/socketDuplex.js +3 -3
- package/dist/server/routes/android.js +36 -7
- package/dist/server/routes/computer.js +14 -4
- package/dist/server/routes/filesystem.js +6 -3
- package/dist/server/routes/rdp.js +4 -3
- package/dist/server/routes/sharedFiles.js +51 -0
- package/dist/server/routes/terminal.js +83 -14
- package/dist/server/routes/vncReadOnly.js +134 -0
- package/dist/server/shared/shareResources.js +37 -0
- package/dist/server/todos/cli.js +91 -0
- package/dist/server/todos/routes.js +73 -0
- package/dist/server/todos/store.js +240 -0
- package/dist/server/todos/types.js +1 -0
- package/dist/server/utils/autoUpdate.js +7 -2
- package/dist/server/utils/clientSnapshotMaintenance.js +200 -0
- package/dist/server/utils/runtimeClient.js +79 -0
- package/dist/server/utils/serverCleanup.js +24 -0
- package/dist/server/utils/storageMaintenance.js +60 -0
- package/dist/server/utils/version.js +2 -0
- package/dist/server/utils/workspaceCacheMaintenance.js +158 -0
- package/docs/integrations.md +23 -0
- package/package.json +1 -1
- package/runtime-manifest.json +3 -3
- package/dist/client/assets/App-TPJoJbGD.js +0 -187
- package/dist/client/assets/App-TPJoJbGD.js.br +0 -0
- package/dist/client/assets/App-TPJoJbGD.js.gz +0 -0
- package/dist/client/assets/ArchitecturePanel-DzVy71gM.js +0 -9
- package/dist/client/assets/ArchitecturePanel-DzVy71gM.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-DzVy71gM.js.gz +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-DN7BCzqC.js +0 -2
- package/dist/client/assets/ChangeWalkthroughPanel-DN7BCzqC.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-DN7BCzqC.js.gz +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-B1PZuCC6.js +0 -1
- package/dist/client/assets/CollaborationMainWorkspace-B1PZuCC6.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-B1PZuCC6.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-CG7g1LMH.js +0 -2
- package/dist/client/assets/ComputerControlView-BlI9Ai_k.js +0 -6
- package/dist/client/assets/ComputerControlView-BlI9Ai_k.js.br +0 -0
- package/dist/client/assets/ComputerControlView-BlI9Ai_k.js.gz +0 -0
- package/dist/client/assets/DagPlayground-V0hTKB-S.js +0 -1
- package/dist/client/assets/DagPlayground-V0hTKB-S.js.br +0 -0
- package/dist/client/assets/DagPlayground-V0hTKB-S.js.gz +0 -0
- package/dist/client/assets/DiffLab-DEw4y4Hk.js.br +0 -0
- package/dist/client/assets/DiffLab-DEw4y4Hk.js.gz +0 -0
- package/dist/client/assets/DiffReview-Cnnt3TMK.js +0 -1
- package/dist/client/assets/DiffReview-Cnnt3TMK.js.br +0 -0
- package/dist/client/assets/DiffReview-Cnnt3TMK.js.gz +0 -0
- package/dist/client/assets/DiffReviewLab-CDXsy0jE.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-CDXsy0jE.js.gz +0 -0
- package/dist/client/assets/DiffViewer-Dh40XiCM.js +0 -37
- package/dist/client/assets/DiffViewer-Dh40XiCM.js.br +0 -0
- package/dist/client/assets/DiffViewer-Dh40XiCM.js.gz +0 -0
- package/dist/client/assets/ModelPreview-BEiOgE0G.js.br +0 -0
- package/dist/client/assets/ModelPreview-BEiOgE0G.js.gz +0 -0
- package/dist/client/assets/RightSidebar-DiECnX5D.js +0 -1679
- package/dist/client/assets/RightSidebar-DiECnX5D.js.br +0 -0
- package/dist/client/assets/RightSidebar-DiECnX5D.js.gz +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-ByzlUu_B.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-ByzlUu_B.js.gz +0 -0
- package/dist/client/assets/app-CKAFlgMD.js +0 -35
- package/dist/client/assets/app-CKAFlgMD.js.br +0 -0
- package/dist/client/assets/app-CKAFlgMD.js.gz +0 -0
- package/dist/client/assets/arc-BA6JM6vl.js.br +0 -0
- package/dist/client/assets/arc-BA6JM6vl.js.gz +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-hCHxOfKw.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-OmEN9hUB.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-OmEN9hUB.js.gz +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-DfLTv8zh.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-DfLTv8zh.js.gz +0 -0
- package/dist/client/assets/channel-gcmN0N0m.js +0 -1
- package/dist/client/assets/chunk-F27PBJKO-yxCv2Uqk.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-yxCv2Uqk.js.gz +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-CdPjlb9f.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-CdPjlb9f.js.gz +0 -0
- package/dist/client/assets/chunk-SVP7TREG-D1tOJung.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-D1tOJung.js.gz +0 -0
- package/dist/client/assets/chunk-TICWLB2K-DZjDfYNw.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-DZjDfYNw.js.gz +0 -0
- package/dist/client/assets/classDiagram-ZZMXUADV-k4BRymfG.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-k4BRymfG.js +0 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-C4Wb5lqD.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-C4Wb5lqD.js.gz +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-BvWKB1Xk.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-BvWKB1Xk.js.gz +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-7tAkHD2P.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-7tAkHD2P.js.gz +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-Bs6IPwks.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-Bs6IPwks.js.gz +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-CmYXaTya.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-CmYXaTya.js.gz +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-CqxoefB7.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-CqxoefB7.js.gz +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-Dxp1MKPT.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-Dxp1MKPT.js.gz +0 -0
- package/dist/client/assets/diagram-VX7I27RA-BKbWvvEr.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-BZnNaP7F.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-BZnNaP7F.js.gz +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-BXVlN_P7.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-BXVlN_P7.js.gz +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-CEdYDZU7.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-CEdYDZU7.js.gz +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-Bbw8GPCZ.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-Bbw8GPCZ.js.gz +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CcFbtP2y.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CcFbtP2y.js.gz +0 -0
- package/dist/client/assets/gestureArbiter-sdzs-66-.js +0 -1
- package/dist/client/assets/gestureArbiter-sdzs-66-.js.br +0 -0
- package/dist/client/assets/gestureArbiter-sdzs-66-.js.gz +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-Eiust154.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-Eiust154.js.gz +0 -0
- package/dist/client/assets/index-DtPsPZ7W.css +0 -1
- package/dist/client/assets/index-DtPsPZ7W.css.br +0 -0
- package/dist/client/assets/index-DtPsPZ7W.css.gz +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-qTwgXfx_.js.gz +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-DKy1msWo.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-DKy1msWo.js.gz +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-BxibybDd.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-BxibybDd.js.gz +0 -0
- package/dist/client/assets/layout-Bh6fKHRM.js.br +0 -0
- package/dist/client/assets/layout-Bh6fKHRM.js.gz +0 -0
- package/dist/client/assets/linear-SRlL3VWX.js.gz +0 -0
- package/dist/client/assets/mermaid.core-D0bcNdw3.js.br +0 -0
- package/dist/client/assets/mermaid.core-D0bcNdw3.js.gz +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-CImZ_aI0.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-CImZ_aI0.js.gz +0 -0
- package/dist/client/assets/passwordBootstrap-f7-mFb1b.js +0 -2
- package/dist/client/assets/passwordBootstrap-f7-mFb1b.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-f7-mFb1b.js.gz +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-BT4pTf8O.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-BT4pTf8O.js.gz +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-C5K58ien.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-C5K58ien.js.gz +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-DzSugYXz.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-DzSugYXz.js.gz +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-BY07SouQ.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-BY07SouQ.js.gz +0 -0
- package/dist/client/assets/rdpSession-RNjO6yLw.js +0 -1
- package/dist/client/assets/rdpSession-RNjO6yLw.js.br +0 -0
- package/dist/client/assets/rdpSession-RNjO6yLw.js.gz +0 -0
- package/dist/client/assets/referenceLongPress-B9K9yPKR.js +0 -1
- package/dist/client/assets/referenceLongPress-B9K9yPKR.js.br +0 -0
- package/dist/client/assets/referenceLongPress-B9K9yPKR.js.gz +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-C7WieVuE.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-C7WieVuE.js.gz +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-BJsDWNs4.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-BJsDWNs4.js.gz +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BeJ_7853.js.gz +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-DOsjXKPV.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-DOsjXKPV.js.gz +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-6s709_RT.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-6s709_RT.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-B43A9Hsz.js +0 -1
- package/dist/client/assets/swimlanes-42K2YHIH-5R5dw9_R.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH-5R5dw9_R.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DoFbqN_4.js +0 -8
- package/dist/client/assets/timeline-definition-24CTP7MA-B4YN0lsx.js.br +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-B4YN0lsx.js.gz +0 -0
- package/dist/client/assets/triangle-alert-BzBDJvJX.js +0 -1
- package/dist/client/assets/vennDiagram-4TSXK5OY-Wd83SmWI.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-Wd83SmWI.js.gz +0 -0
- package/dist/client/assets/videoCompression-Bsw--tMn.js +0 -3
- package/dist/client/assets/videoCompression-Bsw--tMn.js.br +0 -0
- package/dist/client/assets/videoCompression-Bsw--tMn.js.gz +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-CGsYvqWN.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-CGsYvqWN.js.gz +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-ednJq1_u.js.gz +0 -0
- /package/dist/client/assets/{gestureArbiter-C2J0D0kV.css → swiper-C2J0D0kV.css} +0 -0
- /package/dist/client/assets/{gestureArbiter-C2J0D0kV.css.br → swiper-C2J0D0kV.css.br} +0 -0
- /package/dist/client/assets/{gestureArbiter-C2J0D0kV.css.gz → swiper-C2J0D0kV.css.gz} +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MarkdownPreview-DpvTnKkj.js","assets/app-BMJesFDU.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-Dea8wJF3.js","assets/index-CA1fR_jI.css","assets/use-gesture-react.esm-DYpdiE_k.js","assets/swiper-DJjq1TYT.js","assets/swiper-C2J0D0kV.css","assets/syntaxHighlight-bcOB6oww.js","assets/list-tree-Bou8VSzi.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{aQ as gt,bn as At,e5 as he,cb as e,a1 as Dt,l as Ge,dg as et,dh as Mt,e6 as We,H as yt,a0 as Se,ee as tt,C as Tt,L as Ft,R as jt,o as Lt,q as Pt,j as It,g as Fe,e as Ot,c as Ht,f as vt,ej as Bt}from"./app-BMJesFDU.js";import{b as s,r as wt}from"./dnd-BCFAPC0L.js";import{k as Je,p as Le,A as Nt,g as _t,H as qt,h as Ut,c as qe,a as xe,b as kt,d as Wt,f as nt,l as Jt,n as Vt,i as Kt,D as Ee,e as Xt}from"./link-BnxdKJ7b.js";import{U as Zt}from"./RecordingSaveDialog-CtXaGgIo.js";import{L as Yt}from"./DiffViewer-AZvdDGfH.js";import Qt from"./purify.es-4eNOHKSq.js";import{l as Gt,i as er}from"./MarkdownPreview-DpvTnKkj.js";import{f as tr,H as rr}from"./AndroidMirrorView-DkOZxYLg.js";import{S as sr}from"./RightSidebar-DU3gwdzg.js";import{A as nr}from"./arrow-up-CelbB9FE.js";import{S as St}from"./sparkles-CCLflSFy.js";import{N as mt}from"./GitLoadingSkeleton-CBPykkZP.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./use-gesture-react.esm-DYpdiE_k.js";import"./gestureArbiter-DszagC-d.js";import"./syntaxHighlight-bcOB6oww.js";import"./git-compare-BlcHEuBI.js";import"./swiper-DJjq1TYT.js";import"./list-tree-Bou8VSzi.js";import"./v4-EwEgHOG0.js";import"./unplug-BSblgecr.js";import"./DiffReview-BX2S9hNp.js";import"./triangle-alert-D3w7mA17.js";import"./ChangeWalkthroughPanel-HZ0zvFvi.js";import"./chevron-left-5sk7gL3u.js";import"./maximize-2-BGTBw-Ku.js";import"./loader-circle-q7h8uwFI.js";import"./arrow-down-D-WZS308.js";const ir=[["path",{d:"M17 7 7 17",key:"15tmo1"}],["path",{d:"M17 17H7V7",key:"1org7z"}]],ar=gt("arrow-down-left",ir);const lr=[["path",{d:"m15 15 6 6",key:"1s409w"}],["path",{d:"m15 9 6-6",key:"ko1vev"}],["path",{d:"M21 16v5h-5",key:"1ck2sf"}],["path",{d:"M21 8V3h-5",key:"1qoq8a"}],["path",{d:"M3 16v5h5",key:"1t08am"}],["path",{d:"m3 21 6-6",key:"wwnumi"}],["path",{d:"M3 8V3h5",key:"1ln10m"}],["path",{d:"M9 9 3 3",key:"v551iv"}]],cr=gt("expand",lr);function or(r,o){const a=new Map,d={id:"all-perspectives",title:o,summary:r.summary,nodes:[],edges:[]};return r.perspectives.forEach((x,n)=>{const p=`perspective${n}`,g=new Map(x.nodes.map((u,c)=>[u.id,`${p}_node${c}`]));a.set(p,{perspective:x.id}),d.nodes.push({id:p,title:x.title,summary:x.summary,files:[],description:x.description});for(const u of x.nodes){const c=g.get(u.id);a.set(c,{perspective:x.id,node:u.id}),d.nodes.push({...u,id:c,parentId:u.parentId?g.get(u.parentId):p})}d.edges.push(...x.edges.map(u=>({...u,from:g.get(u.from),to:g.get(u.to)})))}),{view:d,references:a}}async function $e(r,o,a,d){const x=new URLSearchParams({root:r}),n=await fetch(`/api/terminal/architecture/${o}${d?"":`${o.includes("?")?"&":"?"}${x}`}`,{signal:a,cache:"no-store",...d?{method:"PUT",headers:{"Content-Type":"application/json","X-XSRF-TOKEN":await At()},body:JSON.stringify({root:r,...d})}:{}}),p=await n.json();if(!n.ok)throw new Error(p.error||`HTTP ${n.status}`);return p}async function ur(r,o){const a=await $e(r,"documents",o);if(!Array.isArray(a.files))throw new Error("Invalid architecture library");return[...new Set(a.files.filter(d=>typeof d=="string"&&Je(d)))].sort()}async function Ue(r,o,a){if(!Je(o))throw new Error("Invalid architecture file");const d=await $e(r,`document?${new URLSearchParams({file:o})}`,a);if(!("document"in d)||d.revision!==null&&typeof d.revision!="string")throw new Error("Invalid architecture response");return{document:d.document?Le(JSON.stringify(d.document)):null,revision:typeof d.revision=="string"?d.revision:null}}async function dr(r,o,a,d,x,n,p){const g=await $e(r,"field",void 0,{file:o,perspective:a,node:d,field:x,value:n,revision:p});return Le(JSON.stringify(g.document))}async function mr(r,o,a){const d=await $e(r,`history?${new URLSearchParams({file:o})}`,a);if(!Array.isArray(d.versions))throw new Error("Invalid architecture history");return d.versions}async function hr(r,o){return $e(r,`bundle?${new URLSearchParams({file:o})}`)}async function pr(r,o,a){const d=await $e(r,"bundle",void 0,{bundle:o,revision:a});return Le(JSON.stringify(d.document))}async function xr(r,o,a,d){const x=await $e(r,"document",void 0,{file:o,document:a,...d!==void 0?{revision:d}:{}});return Le(JSON.stringify(x.document))}const fr=s.lazy(()=>Dt(()=>import("./MarkdownPreview-DpvTnKkj.js").then(r=>r.b),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])).then(r=>({default:r.MarkdownPreview})));function rt(r,o){return o?{description:"说明",diagram:"关系图源码",context:"上下文",constraint:"约束",concern:"问题与风险",todo:"待办",note:"备注"}[r]:{description:"Description",diagram:"Diagram source",context:"Context",constraint:"Constraints",concern:"Concerns",todo:"To do",note:"Notes"}[r]}function st({value:r,rootPath:o,onEdit:a,onOpenFile:d}){const{locale:x}=he(),n=x==="zh",p=r.description?.replace(/^#\s+([^\n]+)\n\s*/,(u,c)=>c.trim()===r.title?"":u),g=u=>e.jsx(s.Suspense,{fallback:e.jsx("p",{className:"whitespace-pre-wrap text-sm",children:u}),children:e.jsx(fr,{referenceLines:!1,content:u,filePath:null,rootPath:o??null,lineRange:null,onLineRangeClick:()=>{},scrollTop:0,outlineOpen:!1,lightboxOpen:!1,onLocalLinkOpen:c=>d?.({path:o&&c.path.startsWith(`${o}/`)?c.path.slice(o.length+1):c.path})})});return e.jsxs("div",{className:"space-y-2",children:[p&&e.jsx("div",{className:"min-w-0 overflow-x-auto",children:g(p)}),Nt.filter(u=>u!=="description"&&r[u]).map(u=>e.jsxs("details",{className:"rounded-lg border border-border/15 px-2",children:[e.jsx("summary",{className:"min-h-11 cursor-pointer py-3 text-xs font-medium",children:rt(u,n)}),e.jsxs("div",{className:"min-w-0 overflow-x-auto pb-2",children:[u==="diagram"?e.jsx("pre",{className:"whitespace-pre-wrap break-all text-xs",children:r[u]}):g(r[u]),a&&e.jsx("button",{type:"button",className:"min-h-11 rounded px-2 text-xs text-primary hover:bg-surface-elevated",onClick:()=>a(u),children:n?"编辑此字段":"Edit field"})]})]},u)),a&&e.jsx("button",{type:"button",className:"min-h-11 rounded-lg px-3 text-xs text-primary hover:bg-surface-elevated",onClick:()=>a("description"),children:n?"编辑文档":"Edit document"}),r.meta&&e.jsxs("details",{children:[e.jsx("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:n?"版本信息":"Version information"}),e.jsx("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 break-all pb-3 text-xs text-muted-foreground",children:Object.entries(r.meta).filter(([u])=>u!=="previousDiagram").map(([u,c])=>e.jsxs("div",{className:"contents",children:[e.jsx("dt",{children:{created:n?"创建":"Created",updated:n?"更新":"Updated",updateCount:n?"更新次数":"Updates",gitCommit:"Commit",gitBranch:n?"分支":"Branch"}[u]??u}),e.jsx("dd",{children:String(c)})]},u))})]})]})}function Qe({root:r,file:o,perspective:a,node:d,initialField:x,onSaved:n,onCancel:p}){const{locale:g}=he(),u=g==="zh",[c,F]=s.useState(null),[M,k]=s.useState(x),[C,R]=s.useState(""),[N,E]=s.useState(""),[z,$]=s.useState(""),[l,b]=s.useState(!1),h=s.useRef(!0),j=s.useRef(0);s.useEffect(()=>{h.current=!0;const f=++j.current;F(null),$("");const H=new AbortController;return Ue(r,o,H.signal).then(P=>{!H.signal.aborted&&f===j.current&&F(P)}).catch(P=>{!H.signal.aborted&&f===j.current&&$(String(P.message))}),()=>{h.current=!1,++j.current,H.abort()}},[r,o]),s.useEffect(()=>{const f=c?.document?.perspectives.find(U=>U.id===a),H=d?f?.nodes.find(U=>U.id===d):f;if(!H||!f)return;const P=H[M]??(M==="description"?H.summary:M==="diagram"?_t(f,d):"");R(P),E(P)},[c,a,d,M]);const B=C!==N;return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col gap-3",onSubmit:f=>{if(f.preventDefault(),!c||l||!B)return;const H=j.current;b(!0),$(""),dr(r,o,a,d,M,C,c.revision).then(P=>{h.current&&H===j.current&&n(P)}).catch(P=>{h.current&&H===j.current&&$(P.message)}).finally(()=>{h.current&&H===j.current&&b(!1)})},children:[e.jsxs("label",{className:"flex items-center gap-2 text-xs",children:[u?"字段":"Field",e.jsx("select",{"aria-label":u?"文档字段":"Document field",className:"min-h-11 min-w-0 flex-1 rounded bg-surface-2 px-2",value:M,disabled:l||B,onChange:f=>k(f.target.value),children:Nt.map(f=>e.jsx("option",{value:f,children:rt(f,u)},f))})]}),B&&e.jsx("p",{className:"text-xs text-muted-foreground",children:u?"保存当前字段后可切换字段。":"Save this field before switching fields."}),!c&&!z&&e.jsx("p",{role:"status",className:"text-xs",children:u?"读取最新文档…":"Loading the latest document…"}),e.jsx("textarea",{"aria-label":rt(M,u),spellCheck:!1,className:"min-h-56 w-full flex-1 resize-y rounded-lg border border-border/30 bg-surface-2 p-3 font-mono text-sm focus-visible:ring-2 focus-visible:ring-ring",disabled:!c||l,maxLength:1e5,value:C,onChange:f=>R(f.target.value)}),z&&e.jsx("p",{role:"alert",className:"break-words text-xs text-destructive",children:z}),e.jsxs("div",{className:"sticky bottom-0 flex gap-2 bg-surface py-2",children:[e.jsx("button",{type:"submit",className:"min-h-11 rounded-lg bg-primary/15 px-4 text-sm text-primary disabled:opacity-40",disabled:!c||l||!B,children:l?u?"保存中…":"Saving…":u?"保存":"Save"}),e.jsx("button",{type:"button",className:"min-h-11 rounded-lg px-4 text-sm hover:bg-surface-elevated",disabled:l,onClick:p,children:u?"取消":"Cancel"})]})]})}function br({root:r,file:o,document:a,onLoaded:d}){const{locale:x}=he(),n=x==="zh",[p,g]=s.useState(""),[u,c]=s.useState(""),[F,M]=s.useState(!1),[k,C]=s.useState(null),[R,N]=s.useState(null),E=s.useRef(null),z=s.useRef(0);s.useEffect(()=>(z.current++,N(null),C(null),g(""),c(""),M(!1),()=>{z.current++}),[r,o]);async function $(b){const h=++z.current;M(!0),g(""),c("");try{await b(()=>h===z.current)}catch(j){h===z.current&&g(j instanceof Error?j.message:String(j))}finally{h===z.current&&M(!1)}}const l="inline-flex min-h-11 items-center gap-1.5 rounded-lg px-3 text-xs hover:bg-surface-elevated disabled:opacity-40";return e.jsxs("details",{className:"rounded-lg border border-border/15 px-3",children:[e.jsx("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:n?"历史、导入与分享":"History, import and sharing"}),e.jsxs("div",{className:"flex flex-wrap gap-1",children:[e.jsxs("button",{className:l,type:"button",disabled:F||!a,onClick:()=>{$(async b=>{const h=await mr(r,o);b()&&C(h)})},children:[e.jsx(qt,{size:14}),n?"更新差异":"Changes"]}),e.jsxs("button",{className:l,type:"button",disabled:F||!a,onClick:()=>{$(async()=>{await et(new Blob([JSON.stringify(a,null,2)],{type:"application/json"}),"termdock-architecture.json")})},children:[e.jsx(Ge,{size:14}),"JSON"]}),e.jsxs("button",{className:l,type:"button",disabled:F||!a,onClick:()=>{$(async()=>{const b=await hr(r,o);await et(new Blob([JSON.stringify(b,null,2)],{type:"application/json"}),"architecture.omm.json")})},children:[e.jsx(Ge,{size:14}),".omm"]}),e.jsxs("button",{className:l,type:"button",disabled:F,onClick:()=>E.current?.click(),children:[e.jsx(Zt,{size:14}),n?"导入":"Import"]}),e.jsxs("button",{className:l,type:"button",disabled:F||!a,onClick:()=>{$(async()=>{const b=Mt(),h=Ut(window.location.origin,{root:r,file:o,...b?{peerId:b.targetPeerId,serviceName:b.serviceName}:{}});await navigator.clipboard.writeText(h),c(n?"链接已复制,打开时需要登录此 Termdock 服务。":"Link copied. Sign in to this Termdock service to view it.")})},children:[e.jsx(Yt,{size:14}),n?"复制查看链接":"Copy viewer link"]})]}),e.jsx("input",{ref:E,hidden:!0,type:"file",accept:".json,application/json",onChange:b=>{const h=b.target.files?.[0];b.target.value="",h&&$(async j=>{if(h.size>5e6)throw new Error(n?"文档超过 5 MB。":"Document exceeds 5 MB.");const B=await h.text();if(!j())return;const f=JSON.parse(B);if(f?.format==="termdock-omm-bundle"){const Q=await Ue(r,".omm");if(!j())return;N({name:h.name,value:f,file:".omm",revision:Q.revision});return}const H=Le(B),P=H.analysis?qe(H.analysis):xe,U=await Ue(r,P);j()&&N({name:h.name,value:H,file:P,revision:U.revision})})}}),R&&e.jsxs("div",{className:"my-2 rounded-lg bg-surface-2 p-3 text-xs",children:[e.jsxs("p",{className:"break-all",children:[R.name," → ",R.file]}),e.jsx("p",{className:"mt-1 text-muted-foreground",children:R.file===".omm"?n?"合并文档中的目录和字段;同名字段将更新。":"Merge bundled directories and fields; matching fields are updated.":n?"保存为此范围的架构,并保留此前的版本。":"Save this scope and retain its previous version."}),e.jsxs("div",{className:"mt-2 flex gap-2",children:[e.jsx("button",{className:`${l} text-primary`,disabled:F,type:"button",onClick:()=>{$(async b=>{const h=R.file===".omm"?await pr(r,R.value,R.revision):await xr(r,R.file,R.value,R.revision);b()&&(N(null),d(R.file,h))})},children:n?"确认导入":"Import document"}),e.jsx("button",{className:l,disabled:F,type:"button",onClick:()=>N(null),children:n?"取消":"Cancel"})]})]}),F&&e.jsx("p",{role:"status",className:"py-2 text-xs",children:n?"处理中…":"Working…"}),p&&e.jsx("p",{role:"alert",className:"break-words py-2 text-xs text-destructive",children:p}),u&&e.jsx("p",{role:"status",className:"py-2 text-xs text-muted-foreground",children:u}),k&&e.jsxs("div",{className:"space-y-2 pb-3",children:[k.length===0&&e.jsx("p",{className:"text-xs text-muted-foreground",children:n?"还没有历史版本。使用原生命令或文档编辑保存后会保留版本。":"No previous versions. Native saves and document edits retain history."}),k.map(b=>e.jsxs("details",{children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs",children:[new Date(b.savedAt).toLocaleString()," · ",b.changes.length," ",n?"处差异":"changes"]}),e.jsx("ul",{className:"space-y-1 text-xs text-muted-foreground",children:b.changes.map((h,j)=>e.jsxs("li",{className:"break-words",children:[h.kind==="added"?"+":h.kind==="removed"?"−":"~"," ",h.perspective?h.title:n?"项目总览":h.title," · ",h.fields.join(", ")]},j))})]},b.id))]})]})}async function gr(r,o,a=xe){const{document:d}=await Ue(r,a,o);if(d?.analysis&&qe(d.analysis)!==a)throw new kt("Architecture scope does not match its file");return d}async function yr(r,o){return ur(r,o)}function jr({view:r,parentId:o,selectedId:a,onSelect:d,active:x=!0,referenceWidth:n,inspector:p,inspectorStage:g="details",onDismissInspector:u,onExpandedChange:c,navigation:F,heading:M}){const{t:k,locale:C}=he(),[R,N]=s.useState(1),E=s.useId().replace(/[^a-zA-Z0-9]/g,""),z=s.useRef(null),$=s.useRef(null),l=s.useRef(null),b=s.useRef(null),h=s.useRef(null),[j,B]=s.useState(""),[f,H]=s.useState(!1),[P,U]=s.useState(1),Q=s.useRef(1),[T,ne]=s.useState(!1),fe=s.useRef(!0),V=s.useRef({inspector:p,onDismissInspector:u});V.current={inspector:p,onDismissInspector:u};const _=s.useRef(c);_.current=c;const ee=s.useRef({left:0,top:0}),[ie,oe]=s.useState(!1),[ae,pe]=s.useState({width:320,height:320,clipHeight:0}),v=s.useRef(new Map),O=s.useRef(!1),K=s.useRef(0),le=s.useMemo(()=>Wt(r,o,R),[r,o,R]),Y=s.useMemo(()=>nt(r,o).edges,[r,o]),W=s.useMemo(()=>{const i=j.match(/viewBox="([^"]+)"/)?.[1].split(/\s+/).map(Number),S=i?.[2]||320,m=i?.[3]||240,A=T?window.innerWidth:n||ae.width,w=Math.max(1,Math.min(1.4,Math.max(160,A-24)/S));return{width:S,height:m,scale:w}},[j,ae.width,T,n]),ce={width:W.width*W.scale*P,height:W.height*W.scale*P},ue=(i,S,m)=>{const A=Math.max(.01,Math.min(4,i)),w=$.current;if(w){const J=w.getBoundingClientRect(),be=S===void 0?w.clientWidth/2:S-J.left,me=m===void 0?w.clientHeight/2:m-J.top,Z=A/Q.current,ve=(w.scrollLeft+be)*Z-be,ge=(w.scrollTop+me)*Z-me,Ie=()=>{$.current===w&&(w.scrollLeft=ve,w.scrollTop=ge)};window.requestAnimationFrame?window.requestAnimationFrame(Ie):window.setTimeout(Ie,0)}Q.current=A,U(A)},se=()=>{Q.current=1,U(1),$.current&&($.current.scrollLeft=0,$.current.scrollTop=0)};s.useEffect(()=>{let i=!1;return B(""),H(!1),se(),oe(!1),v.current.clear(),le.nodes.length>300?(H(!0),()=>{i=!0}):(Gt().then(async S=>{er(S);const m=await S.render(`td-architecture-${E}`,le.code);i||B(Qt.sanitize(m.svg,{USE_PROFILES:{svg:!0,svgFilters:!0}}))}).catch(()=>{i||H(!0)}),()=>{i=!0})},[le.code,E]),s.useEffect(()=>{x||ne(!1)},[x]),s.useEffect(()=>{_.current?.(T)},[T]),s.useEffect(()=>()=>_.current?.(!1),[]),s.useLayoutEffect(()=>{const i=$.current;if(i)return i.scrollLeft=ee.current.left,i.scrollTop=ee.current.top,()=>{ee.current={left:i.scrollLeft,top:i.scrollTop}}},[T,!!j]),s.useEffect(()=>{const i=$.current;if(!i)return;const S=i.closest("[data-architecture-content]"),m=()=>{pe({width:i.clientWidth||320,height:i.clientHeight||320,clipHeight:S?.clientHeight||0})};m();const A=new ResizeObserver(m);return A.observe(i),S&&A.observe(S),()=>A.disconnect()},[j,T]),We(l,T&&x,()=>{V.current.inspector?V.current.onDismissInspector?.():ne(!1)},()=>fe.current?h.current:null),s.useEffect(()=>{if(!T)return;const i=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=i,v.current.clear()}},[T]),s.useLayoutEffect(()=>{const i=z.current?.querySelector("svg"),S=i?.querySelector("g");if(!(!i||!S||typeof S.getBBox!="function"))try{const m=S.getBBox();if(![m.x,m.y,m.width,m.height].every(Number.isFinite)||m.width<=0||m.height<=0)return;const A=`${m.x-16} ${m.y-16} ${m.width+32} ${m.height+32}`;if(i.getAttribute("viewBox")===A)return;i.setAttribute("viewBox",A),B(i.outerHTML)}catch{}},[j,T]),s.useLayoutEffect(()=>{z.current?.querySelectorAll("g.node, g.cluster").forEach(i=>{const S=Number(i.id.match(/(?:^|-)n(\d+)(?:-|$)/)?.[1]),m=le.nodes[S];if(!m)return;i.dataset.architectureRole=m.role,i.dataset.architectureNode=m.id,i.dataset.architectureRelated=String(!!a&&Y.some(w=>w.from===a&&w.to===m.id||w.to===a&&w.from===m.id));const A=i.matches("g.cluster")?i.querySelector("g.cluster-label")??i:i;A!==i&&(i.removeAttribute("role"),i.removeAttribute("tabindex")),A.dataset.architectureNode=m.id,A.setAttribute("role","button"),A.setAttribute("tabindex","0"),A.setAttribute("aria-label",m.title),A.setAttribute("aria-pressed",String(a===m.id)),i.setAttribute("aria-pressed",String(a===m.id))})}),s.useLayoutEffect(()=>{if(!a||g==="source"||g==="analysis")return;const i=$.current,S=[...z.current?.querySelectorAll("[data-architecture-node]")??[]].find(Z=>Z.dataset.architectureNode===a);if(!i||!S)return;let m=i.getBoundingClientRect();const A=i.closest("[data-architecture-content]");if(!T&&A&&m.width>24&&m.height>24){const Z=A.getBoundingClientRect();Z.height>160&&m.height<=Z.height&&(m.top<Z.top?A.scrollTop+=m.top-Z.top:m.bottom>Z.bottom&&(A.scrollTop+=m.bottom-Z.bottom),m=i.getBoundingClientRect());const ve=Math.max(m.top,Z.top),ge=Math.min(m.bottom,Z.bottom);m=new DOMRect(m.left,ve,m.width,Math.max(0,ge-ve))}const w=S.getBoundingClientRect();if(m.width<=24||m.height<=24||w.width<=0||w.height<=0)return;const J=12,be=w.width>m.width-2*J?(w.left+w.right-m.left-m.right)/2:w.left<m.left+J?w.left-m.left-J:w.right>m.right-J?w.right-m.right+J:0,me=w.height>m.height-2*J?(w.top+w.bottom-m.top-m.bottom)/2:w.top<m.top+J?w.top-m.top-J:w.bottom>m.bottom-J?w.bottom-m.bottom+J:0;i.scrollLeft+=be,i.scrollTop+=me},[a,ae.width,ae.height,ae.clipHeight,T,g,j]);const D=i=>{[...z.current?.querySelectorAll("[data-architecture-node]")??[]].find(S=>S.dataset.architectureNode===i)?.focus?.({preventScroll:!0}),d(i)},X="flex h-11 min-w-11 items-center justify-center rounded-lg px-2 hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40",q=e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:X,"aria-label":k("architecture.zoomOut"),disabled:P<=.01,onClick:()=>ue(Q.current/1.25),children:e.jsx(tr,{size:17})}),e.jsxs("button",{type:"button",className:`${X} text-xs tabular-nums`,"aria-label":k("architecture.resetZoom"),title:k("architecture.resetZoom"),onClick:se,children:[Math.round(W.scale*P*100),"%"]}),e.jsx("button",{type:"button",className:X,"aria-label":k("architecture.zoomIn"),disabled:P>=4,onClick:()=>ue(Q.current*1.25),children:e.jsx(yt,{size:17})}),e.jsx("button",{type:"button",className:X,"aria-label":k("architecture.fitGraph"),onClick:()=>ue(Math.min((ae.width-24)/W.width,(ae.height-24)/W.height)/W.scale),children:e.jsx(sr,{size:17})}),!T&&e.jsx("button",{ref:h,type:"button",className:X,"aria-label":k("architecture.fullscreen"),onClick:()=>{fe.current=!0,ne(!0)},children:e.jsx(cr,{size:17})}),e.jsx("button",{type:"button",className:X,"aria-label":k("architecture.download"),disabled:!j,onClick:()=>{oe(!1),et(new Blob([j],{type:"image/svg+xml"}),`architecture-${r.id}.svg`).catch(()=>oe(!0))},children:e.jsx(Ge,{size:17})})]}),Ce=r.nodes.find(i=>i.id===o)?.title??r.title,Pe=e.jsxs(e.Fragment,{children:[T?e.jsxs("header",{className:"shrink-0 border-b border-border/15 px-2 py-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"min-w-0 flex-1 px-1",children:M??e.jsx("h2",{className:"truncate text-xs font-semibold",title:Ce,children:Ce})}),e.jsxs("label",{className:"flex shrink-0 items-center gap-1 text-xs text-muted-foreground",children:[C==="zh"?"展开":"Levels",e.jsx("select",{"aria-label":C==="zh"?"展开层级":"Expand levels",className:"h-11 max-w-20 rounded bg-surface px-1 text-foreground",value:R,onChange:i=>N(Number(i.target.value)),children:[0,1,2,6].map(i=>e.jsx("option",{value:i,children:i===0?C==="zh"?"当前层":"Current":i===6?C==="zh"?"全部":"All":`${i}`},i))})]}),e.jsx("button",{ref:b,type:"button",className:X,"aria-label":k("architecture.closeFullscreen"),onClick:()=>ne(!1),children:e.jsx(Se,{size:18})})]}),e.jsx("div",{className:"flex items-center justify-between gap-1",title:k("architecture.panHint"),children:q})]}):e.jsxs("div",{className:"shrink-0 border-b border-border/15 bg-surface-2 px-2 py-1",children:[e.jsx("div",{className:"flex items-center justify-between gap-1",children:q}),e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-1 px-1 text-xs text-muted-foreground",children:[e.jsx("span",{children:k("architecture.panHint")}),e.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[C==="zh"?"展开层级":"Expand levels",e.jsx("select",{"aria-label":C==="zh"?"展开层级":"Expand levels",className:"min-h-8 rounded bg-surface-2 px-2 text-foreground",value:R,onChange:i=>N(Number(i.target.value)),children:[0,1,2,6].map(i=>e.jsx("option",{value:i,children:i===0?C==="zh"?"当前层":"Current level":i===6?C==="zh"?"全部":"All":`${i}`},i))})]})]})]}),T&&F&&e.jsx("div",{className:"shrink-0 px-2",children:F}),ie&&e.jsx("p",{role:"alert",className:"px-3 py-2 text-xs text-destructive",children:k("architecture.downloadFailed")}),e.jsxs("div",{className:T?"relative flex min-h-0 flex-1 flex-col overflow-hidden min-[768px]:flex-row":"relative",children:[f?e.jsx("p",{role:"alert",className:"p-4 text-sm text-muted-foreground",children:le.nodes.length>300?C==="zh"?"图中模块较多,请减少展开层级或选择单个视角。":"This graph has many modules. Expand fewer levels or select one perspective.":k("architecture.diagramFailed")}):j?e.jsx("div",{ref:$,"data-sidebar-gesture-ignore":!0,className:`termdock-architecture-viewport overflow-auto overscroll-contain p-3 ${T?"min-h-0 min-w-0 flex-1":"h-[min(50dvh,26rem)]"}`,style:{touchAction:"none",maxHeight:!T&&ae.clipHeight?Math.max(160,ae.clipHeight-150):void 0},onPointerDown:i=>{if(i.button!==0)return;v.current.size||(O.current=!1,K.current=0);const S=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node")??void 0;v.current.set(i.pointerId,{x:i.clientX,y:i.clientY,nodeId:S}),v.current.size>1&&(O.current=!0);try{i.currentTarget.setPointerCapture?.(i.pointerId)}catch{}},onPointerMove:i=>{const S=v.current.get(i.pointerId);if(!S)return;const m=[...v.current.values()];v.current.set(i.pointerId,{...S,x:i.clientX,y:i.clientY});const A=[...v.current.values()];if(A.length>=2){const w=me=>Math.hypot(me[0].x-me[1].x,me[0].y-me[1].y),J=w(m),be=w(A);J>0&&ue(Q.current*be/J,(A[0].x+A[1].x)/2,(A[0].y+A[1].y)/2),O.current=!0}else{const w=S.x-i.clientX,J=S.y-i.clientY;K.current+=Math.hypot(w,J),K.current>5&&(O.current=!0),i.currentTarget.scrollLeft+=w,i.currentTarget.scrollTop+=J}},onPointerUp:i=>{const S=v.current.get(i.pointerId),m=v.current.size===1&&!O.current&&S?.nodeId;v.current.delete(i.pointerId),m&&(O.current=!0,D(m))},onPointerCancel:i=>{v.current.delete(i.pointerId),O.current=!0},onLostPointerCapture:i=>{v.current.delete(i.pointerId)},children:e.jsx("div",{ref:z,role:"group","aria-label":k("architecture.modules"),className:"termdock-architecture-diagram mx-auto",style:ce,onClick:i=>{if(O.current)return;const m=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node");m&&D(m)},onKeyDown:i=>{if(i.key!=="Enter"&&i.key!==" ")return;const S=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node");S&&(i.preventDefault(),D(S))},dangerouslySetInnerHTML:{__html:j}})}):e.jsx("p",{role:"status",className:"p-4 text-sm text-muted-foreground",children:k("architecture.rendering")}),T&&p]})]});return T?wt.createPortal(e.jsx("section",{ref:l,tabIndex:-1,role:"dialog","aria-modal":"true","aria-label":k("architecture.diagram"),"data-sidebar-gesture-ignore":!0,className:"fixed inset-0 z-modal-panel flex flex-col overflow-hidden bg-surface text-foreground pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]",children:Pe}),document.body):e.jsx("section",{className:"overflow-clip rounded-xl border border-border/20 bg-surface-2","aria-label":k("architecture.diagram"),children:Pe})}function je(r,o){let a=r.trim().replace(/^@/,"");/^([`"']).*\1$/.test(a)&&(a=a.slice(1,-1)),a=a.replace(/\\ /g," ").replace(/:\d+(?:-\d+)?$/,"").replace(/\/+$/,""),/^([`"']).*\1$/.test(a)&&(a=a.slice(1,-1));const d=o.replace(/\/+$/,"");if(a.startsWith("/")){if(!a.startsWith(`${d}/`))return null;a=a.slice(d.length+1)}return a=a.replace(/^\.\//,""),a.length<=1024&&Jt(a)?a:null}function ht(r,o){const a=[...r.matchAll(/^# (.+?): hunk \d+,/gm)].map(p=>p[1]),x=(a.length?a:r.split(/\r?\n/).map(p=>p.trim()).filter(Boolean)).map(p=>je(p,o));if(x.some(p=>p===null))return null;const n=[...new Set(x)];return n.length<=20?n:null}function $t({rootPath:r,initialDirectory:o,selected:a,onChange:d,selectionDisabled:x=!1,compact:n=!1}){const{t:p}=he(),g=r.replace(/\/+$/,"")||"/",[u,c]=s.useState(()=>o&&je(o,g)?o.replace(/\/+$/,""):g),[F,M]=s.useState(""),[k,C]=s.useState(null),[R,N]=s.useState(0),[E,z]=s.useState(null);s.useEffect(()=>{if(!E)return;const f=window.setTimeout(()=>z(null),1800);return()=>window.clearTimeout(f)},[E]);const $=tt(f=>f.invalidateDirectoryCache),l=new Set(a.map(f=>`${g==="/"?"":g}/${f}`)),b=f=>{const H=je(f,g);x||!H||a.includes(H)||a.length>=20||d([...a,H])},h=f=>{f!==g&&!je(f,g)||(c(f),M(""),C(null))},j=`inline-flex shrink-0 items-center justify-center rounded-lg text-xs hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40 ${n?"h-8 w-8 [@media(pointer:coarse)]:h-11 [@media(pointer:coarse)]:w-11":"h-11 w-11"}`,B=je(u,g);return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"shrink-0 px-2 py-1",children:e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("button",{type:"button",className:j,disabled:u===g,"aria-label":p("rightSidebar.parentFolder"),onClick:()=>h(u.slice(0,u.lastIndexOf("/"))||g),children:e.jsx(nr,{size:17})}),e.jsx("button",{type:"button",className:j,disabled:u===g,"aria-label":p("rightSidebar.backToProjectRoot"),onClick:()=>h(g),children:e.jsx(rr,{size:16})}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium",title:u,children:B??(u.split("/").pop()||"/")}),B&&e.jsx("button",{type:"button",className:`${j} text-primary`,disabled:x||!a.includes(B)&&a.length>=20,"aria-label":`${p("architecture.addScopeReference")}: ${u.split("/").pop()}`,title:B,"aria-pressed":a.includes(B),onClick:()=>b(u),children:a.includes(B)?e.jsx(Tt,{size:15}):e.jsx(Ft,{size:15})}),e.jsx("button",{type:"button",className:j,"aria-label":p("rightSidebar.refreshFiles"),onClick:()=>{$(u,!0),N(f=>f+1)},children:e.jsx(jt,{size:15})})]})}),x&&e.jsx("p",{role:"alert",className:"shrink-0 px-3 pb-2 text-xs text-muted-foreground",children:p("architecture.correctPathsFirst")}),e.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 pb-2",children:e.jsx("input",{"aria-label":p("architecture.searchScopePaths"),placeholder:p("architecture.searchScopePaths"),value:F,onChange:f=>M(f.target.value),className:`${n?"h-9 [@media(pointer:coarse)]:h-11":"h-11"} w-full rounded-lg border border-border/20 bg-surface-2 px-3 text-sm focus-visible:ring-2 focus-visible:ring-ring`})}),e.jsx("div",{className:"min-h-0 flex-1 overflow-auto overscroll-contain bg-surface",children:e.jsx(Lt,{rootPath:u,selectedFilePath:k,onFileSelect:f=>{C(f),b(f)},onDirectoryRoot:h,onPathReference:b,getReferenceText:f=>je(f,g)??f,query:F,onReferenceCopied:z,copiedReferenceKey:E,onSearchFromDirectory:h,referenceSelection:{paths:l,label:p("architecture.addScopeReference"),disabled:x||a.length>=20}},`${u}:${R}`)})]})}function vr({rootPath:r,initialDirectory:o,initial:a,onConfirm:d,onCancel:x}){const{t:n}=he(),p=s.useRef(null);We(p,!0,x);const g=s.useId(),[u,c]=s.useState(a);s.useEffect(()=>{const M=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=M}},[]);const F="inline-flex min-h-11 items-center justify-center gap-1.5 rounded-lg px-3 text-xs hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40";return wt.createPortal(e.jsxs("div",{className:"fixed inset-0 z-popover flex items-center justify-center p-[max(0.75rem,env(safe-area-inset-top))]",children:[e.jsx("button",{type:"button",className:"absolute inset-0 z-10 cursor-default bg-[var(--app-backdrop)]","aria-label":n("common.cancel"),onClick:x}),e.jsxs("section",{ref:p,id:`${g}-dialog`,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":g,"aria-describedby":`${g}-hint`,className:"relative z-20 flex h-full max-h-[42rem] w-full max-w-xl flex-col overflow-hidden rounded-xl border border-border/20 bg-surface text-foreground shadow-xl",children:[e.jsxs("header",{className:"shrink-0 px-3 py-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{id:g,className:"min-w-0 flex-1 text-sm font-semibold",title:n("architecture.browsePathsHint"),children:n("architecture.choosePaths")}),e.jsx("button",{type:"button",className:F,"aria-label":n("common.close"),onClick:x,children:e.jsx(Se,{size:17})})]}),e.jsx("p",{id:`${g}-hint`,className:"sr-only",children:n("architecture.browsePathsHint")})]}),e.jsx($t,{rootPath:r,initialDirectory:o,selected:u,onChange:c}),e.jsxs("footer",{className:"shrink-0 space-y-2 border-t border-border/15 p-3",children:[e.jsxs("p",{className:"text-xs text-muted-foreground",children:[n("architecture.selectedPaths")," ",u.length," / 20"]}),u.length>0&&e.jsx("div",{className:"flex max-h-24 flex-wrap gap-1 overflow-y-auto",children:u.map(M=>e.jsxs("button",{type:"button",className:`${F} min-w-0 max-w-full bg-surface-2`,"aria-label":`${n("architecture.removePath")}: ${M}`,onClick:()=>c(k=>k.filter(C=>C!==M)),children:[e.jsx("span",{className:"truncate font-mono",children:M}),e.jsx(Se,{size:13,className:"shrink-0"})]},M))}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{type:"button",className:F,onClick:x,children:n("common.cancel")}),e.jsx("button",{type:"button",className:`${F} bg-primary/15 text-primary`,onClick:()=>d(u),children:n("architecture.usePaths")})]})]})]})]}),document.body)}function pt({rootPath:r,initial:o,outputFile:a,currentFile:d,currentDirectory:x,active:n=!0,onInsertPrompt:p,onPrepared:g,onClose:u}){const{t:c,locale:F}=he(),M=s.useRef(null),k=s.useRef(null);We(k,n,u),s.useLayoutEffect(()=>{n&&k.current?.scrollIntoView?.({block:"start"})},[n]);const[C,R]=s.useState(!1);s.useLayoutEffect(()=>{const D=k.current;if(!n||!D)return;const X=()=>R(D.clientWidth>=900);if(X(),typeof ResizeObserver>"u")return;const q=new ResizeObserver(X);return q.observe(D),()=>q.disconnect()},[n]);const N=s.useId(),[E,z]=s.useState(o.kind),[$,l]=s.useState(o.target),[b,h]=s.useState(o.paths.join(`
|
|
3
|
+
`)),[j,B]=s.useState(o.depth),[f,H]=s.useState(o.focus),[P,U]=s.useState(null),[Q,T]=s.useState(!1),[ne,fe]=s.useState(!1),V=s.useRef(0);s.useEffect(()=>()=>{V.current++},[]),s.useEffect(()=>{n||(V.current++,T(!1),fe(!1))},[n]);const _=ht(b,r),ee=d?je(d,r):null,ie=x?je(x,r):null,oe=ie?x:ee?d.slice(0,d.lastIndexOf("/")):r,pe=n&&C&&E!=="project"&&!a&&!ne;let v=null;try{(E==="project"||_)&&(v=Vt({kind:E,target:$,paths:_??[],depth:j,focus:f}))}catch{}const O=v?Kt(r,F,v,a):"",K="inline-flex min-h-11 items-center justify-center gap-1.5 rounded-lg text-xs font-medium transition hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40",le=`${K} px-3`,Y=`${K} px-1`,W="min-h-10 w-full min-w-0 rounded-lg border border-border/20 bg-surface px-2 py-2 text-sm text-foreground focus-visible:ring-2 focus-visible:ring-ring",ce=()=>{V.current++,T(!1),U(null)},ue=D=>{h(_?[...new Set([..._,D])].join(`
|
|
4
|
+
`):`${b.trim()}
|
|
5
|
+
${D}`),ce()},se=v;return e.jsxs("div",{ref:k,id:`${N}-workspace`,tabIndex:-1,className:pe?"grid min-h-0 min-w-0 flex-1 grid-cols-[20rem_minmax(0,1fr)] grid-rows-[minmax(0,1fr)] items-start gap-3":"min-w-0 shrink-0",children:[pe&&e.jsxs("section",{"aria-label":c("architecture.choosePaths"),"aria-describedby":`${N}-browser-hint`,className:"flex h-full min-h-0 min-w-0 flex-col overflow-hidden rounded-xl border border-border/20 bg-surface-2",children:[e.jsxs("header",{className:"flex min-h-9 shrink-0 items-center gap-2 px-3",children:[e.jsx("h3",{className:"min-w-0 flex-1 truncate text-xs font-medium",title:c("architecture.browsePathsHint"),children:c("architecture.choosePaths")}),e.jsxs("p",{role:"status","aria-label":`${c("architecture.selectedPaths")} ${_?.length??0} / 20`,className:"shrink-0 text-xs tabular-nums text-muted-foreground",children:[_?.length??0," / 20"]}),e.jsx("p",{id:`${N}-browser-hint`,className:"sr-only",children:c("architecture.browsePathsHint")})]}),e.jsx($t,{compact:!0,rootPath:r,initialDirectory:oe,selected:_??[],selectionDisabled:!_,onChange:D=>{h(D.join(`
|
|
6
|
+
`)),ce()}})]}),e.jsxs("form",{ref:M,tabIndex:-1,className:`min-w-0 space-y-2.5 rounded-xl border border-border/20 bg-surface-2 p-3 ${pe?"max-h-full overflow-y-auto overscroll-contain":""}`,onSubmit:D=>{if(D.preventDefault(),!se||Q||!n||!M.current)return;const X=++V.current,q=M.current;q.focus({preventScroll:!0}),T(!0),U(null),Promise.resolve().then(()=>X===V.current&&q.isConnected?p(O,q):!1).then(Ce=>{X===V.current&&(Ce===!0?(g(a??qe(se),se),U("inserted")):U("insertFailed"))}).catch(()=>{X===V.current&&U("insertFailed")}).finally(()=>{X===V.current&&T(!1)})},children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("h2",{className:"text-sm font-medium",children:c(a?"architecture.updateAnalysis":"architecture.prepare")}),e.jsx("button",{type:"button",className:`${le} px-2`,"aria-label":c("architecture.closePreparation"),onClick:u,children:e.jsx(Se,{size:16})})]}),e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${N}-kind`,children:[e.jsx("span",{children:c("architecture.analysisRange")}),e.jsxs("select",{id:`${N}-kind`,className:W,value:E,disabled:!!a,onChange:D=>{z(D.target.value),ce()},children:[e.jsx("option",{value:"project",children:c("architecture.projectRange")}),e.jsx("option",{value:"module",children:c("architecture.moduleRange")}),e.jsx("option",{value:"feature",children:c("architecture.featureRange")})]})]}),E==="feature"&&e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${N}-target`,children:[e.jsx("span",{children:c("architecture.featureTarget")}),e.jsx("input",{id:`${N}-target`,className:W,value:$,readOnly:!!a,maxLength:1e3,placeholder:c("architecture.featurePlaceholder"),onChange:D=>{l(D.target.value),ce()},"aria-describedby":`${N}-validation`})]}),E!=="project"&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"block text-xs",htmlFor:`${N}-paths`,children:c(E==="module"?"architecture.modulePaths":"architecture.startPaths")}),e.jsx("textarea",{id:`${N}-paths`,className:`${W} resize-y font-mono text-xs`,rows:2,value:b,readOnly:!!a,placeholder:c("architecture.modulePlaceholder"),onChange:D=>{h(D.target.value),ce()},onBlur:()=>{!a&&_&&h(_.join(`
|
|
7
|
+
`))},onPaste:D=>{if(a)return;const X=ht(D.clipboardData.getData("text/plain"),r);if(!X?.length||!_)return;const q=[...new Set([..._,...X])];q.length>20||(D.preventDefault(),h(q.join(`
|
|
8
|
+
`)),ce())},"aria-describedby":`${N}-paths-hint ${N}-validation`}),!a&&e.jsxs("div",{className:"flex flex-wrap gap-1",children:[!pe&&e.jsxs("button",{type:"button",className:`${Y} text-primary`,"aria-label":c("architecture.choosePaths"),onClick:()=>fe(!0),children:[e.jsx(Pt,{size:14}),c("architecture.browsePaths")]}),ie&&e.jsx("button",{type:"button",className:Y,disabled:!!_?.includes(ie)||(_?.length??0)>=20,title:ie,onClick:()=>ue(ie),children:c("architecture.useCurrentDirectory")}),ee&&e.jsx("button",{type:"button",className:Y,disabled:!!_?.includes(ee)||(_?.length??0)>=20,title:ee,onClick:()=>ue(ee),children:c("architecture.useCurrentFile")})]}),e.jsx("p",{id:`${N}-paths-hint`,className:"text-xs leading-relaxed text-muted-foreground",title:r,children:c("architecture.pathsHint")})]}),!v&&(b.trim()||$.trim())&&e.jsx("p",{id:`${N}-validation`,role:"alert",className:"text-xs text-muted-foreground",children:c(E==="module"?"architecture.invalidPaths":"architecture.requiredFeature")}),e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${N}-focus`,children:[e.jsx("span",{children:c("architecture.focus")}),e.jsx("textarea",{id:`${N}-focus`,className:`${W} resize-y`,rows:2,maxLength:2e3,value:f,placeholder:c("architecture.focusPlaceholder"),onChange:D=>{H(D.target.value),ce()}})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("button",{type:"submit",disabled:!v||Q,className:`${le} bg-primary/15 text-primary`,children:c(Q?"architecture.inserting":"architecture.insertPrompt")}),e.jsxs("button",{type:"button",disabled:!v||Q,className:le,onClick:()=>{if(!se)return;const D=++V.current;Promise.resolve().then(()=>navigator.clipboard.writeText(O)).then(()=>{D===V.current&&(g(a??qe(se),se),U("copied"))}).catch(()=>{D===V.current&&U("failed")})},children:[e.jsx(It,{size:14}),c("architecture.copyPrompt")]})]}),P&&e.jsx("p",{role:"status",className:"text-xs text-muted-foreground",children:c(`architecture.${P}`)}),e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer py-2 text-xs text-muted-foreground",children:c("architecture.analysisOptions")}),e.jsxs("div",{className:"space-y-3 pt-1",children:[e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${N}-depth`,children:[e.jsx("span",{children:c("architecture.dependencyDepth")}),e.jsxs("select",{id:`${N}-depth`,className:W,value:j,onChange:D=>{B(D.target.value),ce()},children:[e.jsx("option",{value:"boundary",children:c("architecture.boundaryDepth")}),e.jsx("option",{value:"dependencies",children:c("architecture.followDepth")})]})]}),E==="feature"&&e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:c("architecture.featureScopeHint")}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:c(a?"architecture.updateOnly":"architecture.independentHint")})]})]}),e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer py-2 text-xs text-muted-foreground",children:c("architecture.previewPrompt")}),e.jsx("textarea",{readOnly:!0,"aria-label":c("architecture.previewPrompt"),value:O,className:`${W} mt-2 h-52 resize-y font-mono text-xs`})]}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:c("architecture.promptHint")})]}),n&&ne&&e.jsx(vr,{rootPath:r,initialDirectory:oe,initial:_??[],onCancel:()=>fe(!1),onConfirm:D=>{h(D.join(`
|
|
9
|
+
`)),fe(!1),ce()}})]})}function wr({node:r,view:o,parentId:a,onSelect:d,onExplore:x,onAnalyze:n,onOpenFile:p,onClose:g,document:u,rootPath:c,onEdit:F,onReference:M,embedded:k=!1}){const{t:C,locale:R}=he(),N=[...r.references??[],...u?.perspectives.flatMap(l=>l.nodes.filter(b=>b.references?.some(h=>h.perspective===o.id&&(!h.node||h.node===r.id))).map(b=>({perspective:l.id,node:b.id})))??[]],E=nt(o,a),z=E.edges.filter(l=>l.from===r.id||l.to===r.id),$="inline-flex min-h-11 items-center justify-center gap-1.5 rounded-lg px-3 text-xs font-medium transition hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring";return e.jsxs("section",{className:k?"space-y-3":"space-y-3 rounded-xl border border-primary/30 bg-surface-2 p-3","aria-label":r.title,children:[!k&&e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("h3",{className:"pt-2 text-sm font-semibold",children:r.title}),e.jsx("button",{type:"button",className:`${$} shrink-0 px-2`,"aria-label":C("architecture.closeDetail"),onClick:g,children:e.jsx(Se,{size:16})})]}),e.jsxs(e.Fragment,{children:[!r.description&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed",children:r.summary}),e.jsx(st,{value:r,rootPath:c,onEdit:F,onOpenFile:p})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[o.nodes.some(l=>l.parentId===r.id)&&e.jsxs("button",{type:"button",className:`${$} bg-primary/15 text-primary`,onClick:x,children:[C("architecture.explore"),e.jsx(Fe,{size:14})]}),r.files.length>0&&e.jsxs("button",{type:"button",className:`${$} text-primary`,onClick:n,children:[e.jsx(St,{size:14}),C("architecture.analyzeModule")]})]}),N.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground",children:R==="zh"?"跨视角引用":"Cross-perspective references"}),N.map((l,b)=>e.jsxs("button",{type:"button","aria-label":`${R==="zh"?"打开引用":"Open reference"}: ${u?.perspectives.find(h=>h.id===l.perspective)?.nodes.find(h=>h.id===l.node)?.title??u?.perspectives.find(h=>h.id===l.perspective)?.title??l.perspective}`,className:`${$} block w-full text-left text-primary`,onClick:()=>M?.(l),children:[u?.perspectives.find(h=>h.id===l.perspective)?.nodes.find(h=>h.id===l.node)?.title??u?.perspectives.find(h=>h.id===l.perspective)?.title??l.perspective,e.jsx(Fe,{size:14})]},b))]}),z.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"mb-1 text-xs font-semibold text-muted-foreground",children:C("architecture.connections")}),e.jsx("div",{className:"space-y-1",children:z.map((l,b)=>{const h=l.from===r.id,j=E.nodes.find(B=>B.id===(h?l.to:l.from));return j?e.jsxs("button",{type:"button",className:"flex min-h-11 w-full items-center gap-2 rounded-lg bg-surface px-3 py-2 text-left text-xs hover:bg-surface-elevated",onClick:()=>d(j.id),"aria-label":`${C(h?"architecture.outgoing":"architecture.incoming")}: ${j.title} · ${l.label}`,children:[h?e.jsx(Ot,{size:15,className:"shrink-0 text-primary"}):e.jsx(ar,{size:15,className:"shrink-0 text-muted-foreground"}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block font-medium",children:j.title}),e.jsxs("span",{className:"mt-0.5 block break-words text-muted-foreground",children:[C(h?"architecture.outgoing":"architecture.incoming")," · ",l.label]})]}),e.jsx(Fe,{size:14,className:"shrink-0"})]},`${l.from}:${l.to}:${b}`):null})})]}),r.files.length>0&&e.jsxs("details",{open:r.files.length<=4,children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs font-semibold text-muted-foreground",children:[C("architecture.sourceFiles")," (",r.files.length,")"]}),r.files.map(l=>e.jsxs("button",{type:"button",className:"block min-h-11 w-full break-all rounded-lg px-2 py-2 text-left font-mono text-xs text-primary hover:bg-surface-elevated",onClick:()=>p(l),children:[l.path,l.line?`:${l.line}`:""]},`${l.path}:${l.line??""}`))]})]})}function xt({title:r,stageKey:o,source:a=!1,fullHeight:d=!1,inGraph:x=!1,docked:n=!1,side:p=!1,active:g=!0,onBack:u,backLabel:c,onClose:F,onDismiss:M,onCollapse:k,children:C}){const{t:R}=he(),N=s.useRef(null),E=s.useRef(null),z=s.useRef(new Map);We(N,g&&!x&&(!n||d),M),s.useLayoutEffect(()=>{E.current&&(E.current.scrollTop=z.current.get(o)??0),g&&N.current?.querySelector("button:not(:disabled)")?.focus({preventScroll:!0})},[o,g]);const $=n?d?"relative h-full w-full flex-1":p?"relative h-full w-[22rem] max-w-[40%] shrink-0":"relative h-[48%] max-h-96 w-full shrink-0":x?`${a||d?"inset-0":"inset-x-0 bottom-0 max-h-[48%]"} min-[768px]:inset-y-0 min-[768px]:left-auto min-[768px]:right-0 min-[768px]:max-h-none ${a||d?"min-[768px]:w-[min(50vw,40rem)]":"min-[768px]:w-[22rem]"}`:p?"inset-y-0 right-0 w-[22rem] max-w-full":"inset-0",l="inline-flex min-h-11 shrink-0 items-center justify-center gap-1.5 rounded-lg px-2 text-xs text-primary hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring",b=()=>{E.current&&z.current.set(o,E.current.scrollTop)};return e.jsxs("aside",{ref:N,tabIndex:-1,role:x||n&&!d?void 0:"dialog","aria-modal":x?void 0:!1,"aria-label":r,"data-architecture-inspector":!0,"data-sidebar-gesture-ignore":!0,onClickCapture:b,className:`${n?"":"absolute"} z-20 flex min-h-0 flex-col overflow-hidden border border-border/30 bg-surface ${n?"":"shadow-xl"} ${$}`,children:[e.jsxs("header",{className:"flex shrink-0 items-center gap-2 border-b border-border/15 px-2 py-1",children:[e.jsxs("button",{type:"button",className:l,"aria-label":u?c:R("architecture.closeDetail"),onClick:u??F,children:[e.jsx(Ht,{size:17}),e.jsx("span",{children:u?c:R("architecture.backToMap")})]}),e.jsx("h2",{className:"min-w-0 flex-1 truncate text-sm font-semibold",title:r,children:r}),k&&e.jsx("button",{type:"button",className:l,"aria-label":R("architecture.collapseDetail"),onClick:k,children:e.jsx(vt,{size:17})}),u&&e.jsx("button",{type:"button",className:l,"aria-label":R("architecture.closeDetail"),onClick:F,children:e.jsx(Se,{size:17})})]}),e.jsx("div",{ref:E,onScroll:b,className:`min-h-0 flex-1 ${a?"overflow-hidden":"overflow-y-auto overscroll-contain p-3"}`,children:C})]})}function Nr({node:r,onExpand:o,onClose:a}){const{t:d}=he(),x=s.useRef(null),n=s.useRef(null);s.useLayoutEffect(()=>{document.activeElement!==x.current&&(n.current=document.activeElement),x.current?.focus({preventScroll:!0})},[r.id]),s.useLayoutEffect(()=>()=>{n.current?.isConnected&&n.current.focus({preventScroll:!0})},[]);const p="inline-flex min-h-11 shrink-0 items-center justify-center rounded-lg px-2 text-xs hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring";return e.jsxs("section",{ref:x,tabIndex:-1,"aria-label":r.title,"data-architecture-inspector":!0,"data-sidebar-gesture-ignore":!0,className:"shrink-0 border-t border-border/30 bg-surface px-3 pb-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"min-w-0 flex-1 truncate text-sm font-semibold",title:r.title,children:r.title}),e.jsx("button",{type:"button",className:`${p} text-primary`,onClick:o,children:d("architecture.expandDetail")}),e.jsx("button",{type:"button",className:p,"aria-label":d("architecture.closeDetail"),onClick:a,children:e.jsx(Se,{size:17})})]}),e.jsx("p",{className:"line-clamp-2 break-words text-xs leading-relaxed text-muted-foreground",children:r.summary})]})}function it(r){return`termdock.architecture.selection:${r}`}function ft(r){try{const o=r?sessionStorage.getItem(it(r)):null;return o&&Je(o)?o:xe}catch{return xe}}function bt(r){try{const o=r?sessionStorage.getItem(it(r)):null;return!!o&&Je(o)}catch{return!1}}function Gr({rootPath:r,active:o,onInsertPrompt:a,onOpenFile:d,renderSource:x}){const{t:n,locale:p}=he(),g=tt(t=>t.rootPath===r?t.selectedFilePath:null),u=tt(t=>t.rootPath===r?t.explorerRoot:null),[c,F]=s.useState(()=>ft(r)),[M,k]=s.useState([]),[C,R]=s.useState(!1),[N,E]=s.useState(Ee),[z,$]=s.useState(null),[l,b]=s.useState(null),[h,j]=s.useState(!0),[B,f]=s.useState(null),[H,P]=s.useState(0),[U,Q]=s.useState(!1),[T,ne]=s.useState(!1),[fe,V]=s.useState(""),[_,ee]=s.useState([]),[ie,oe]=s.useState(null),[ae,pe]=s.useState([]),[v,O]=s.useState(null),[K,le]=s.useState(null),[Y,W]=s.useState(null),[ce,ue]=s.useState(null),[se,D]=s.useState(!1),[X,q]=s.useState(!1),[Ce,Pe]=s.useState(()=>typeof window<"u"&&window.innerWidth>=768),i=s.useRef(0),S=s.useRef(bt(r)),m=s.useRef(null),A=s.useRef(null),[w,J]=s.useState(0),[be,me]=s.useState("auto"),Z=be==="auto"?w>=560?"graph":"outline":be,ve=s.useRef(null),ge=t=>{S.current=!0,F(t);try{r&&sessionStorage.setItem(it(r),t)}catch{}},Ie=()=>{$(null),ve.current?.focus({preventScroll:!0})};s.useEffect(()=>{const t=()=>Pe(window.innerWidth>=768);return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]),s.useEffect(()=>{const t=m.current;if(!t||!o||typeof ResizeObserver>"u")return;const y=()=>{t.clientWidth>0&&J(t.clientWidth)};y();const I=new ResizeObserver(y);return I.observe(t),()=>I.disconnect()},[o]),s.useEffect(()=>{b(null),f(null),j(!0),ne(!1),V(""),ee([]),re(),$(null),F(ft(r)),k([]),R(!1),E(Ee),S.current=bt(r)},[r]),s.useEffect(()=>{b(null),f(null),j(!0),ne(!1),V(""),ee([]),re()},[c]),s.useEffect(()=>{if(!o||!r)return;let t=!1,y=null,I;const G=async Me=>{const Ye=++i.current,_e=new AbortController;y=_e,Me&&(j(!0),f(null));const Et=window.setTimeout(()=>_e.abort(),15e3);try{const[ke,Te]=await Promise.allSettled([gr(r,_e.signal,c),yr(r,_e.signal)]);if(t||i.current!==Ye)return;if(Te.status==="fulfilled"?(k(Te.value),R(!1)):R(!0),ke.status==="rejected")throw ke.reason;b(dt=>JSON.stringify(dt)===JSON.stringify(ke.value)?dt:ke.value),f(null),!ke.value&&c===xe&&!S.current&&Te.status==="fulfilled"&&Te.value.length===1&&ge(Te.value[0])}catch(ke){if(t||i.current!==Ye)return;f(ke instanceof kt?"format":"load")}finally{window.clearTimeout(Et),!t&&i.current===Ye&&(j(!1),I=setTimeout(()=>{t||G(!1)},1e4))}};return G(!0),()=>{t=!0,++i.current,y?.abort(),clearTimeout(I)}},[r,o,H,c]);const at=JSON.stringify(r?[...new Set([`${r}/.termdock`,`${r}/.termdock/architectures`,`${r}/.omm`,...c===".omm"?l?.perspectives.flatMap(t=>[`${r}/.omm/${t.id}`,...t.nodes.flatMap(y=>y.documentPath?[`${r}/.omm/${y.documentPath}`]:[])])??[]:[]])].slice(0,128).sort():[]);s.useEffect(()=>{if(!o||!r)return;const t=new AbortController;let y;return Bt(JSON.parse(at),I=>{I.some(G=>G.type==="rescan-required"||G.path?.includes("/.omm/")||G.path?.includes("/.termdock/"))&&(clearTimeout(y),y=setTimeout(()=>P(G=>G+1),300))},t.signal).catch(()=>{}),()=>{t.abort(),clearTimeout(y)}},[r,o,at]);const L=l?.perspectives.find(t=>t.id===fe)??l?.perspectives[0],ze=s.useMemo(()=>l?or(l,p==="zh"?"全部视角":"All perspectives"):null,[l,p]),Ve=t=>{t==="all-perspectives"?(ne(!0),Ne([])):(ne(!1),V(t),Ne([]))},we=s.useMemo(()=>{const t=[];for(const y of _){if(!L?.nodes.some(I=>I.id===y&&I.parentId===t[t.length-1]))break;t.push(y)}return t},[_,L]),Oe=we[we.length-1],He=s.useMemo(()=>L?nt(L,Oe):null,[L,Oe]),te=L?.nodes.find(t=>t.id===ie),ye=L?.nodes.find(t=>t.id===Oe),Ct=[...new Set([xe,...M,c])],Be=l?.analysis??(c===xe||c===".omm"?Ee:N.kind==="project"?null:N),re=()=>{Q(!1),O(null),oe(null),q(!1),pe([]),le(null),W(null),ue(null)},Ae=(t,y=!1)=>{pe(I=>y&&ie?[...I,ie]:[]),q(y),Q(!1),O(null),le(null),W(null),ue(null),oe(t)},Ne=t=>{t.length&&ne(!1),ee(t),re(),A.current&&(A.current.scrollTop=0)},lt=t=>{x?(q(!0),le(t)):d(t)},zt=t=>{W({...Ee,kind:"module",paths:[...new Set(t.files.map(y=>y.path))].slice(0,20)}),ue(null)},ct=v?()=>O(null):K?()=>le(null):Y?()=>W(null):ae.length?()=>{oe(ae[ae.length-1]),pe(t=>t.slice(0,-1))}:void 0,Rt=n(K||Y||v?"architecture.backToModule":"architecture.previousModule"),Re=se?Ce:w>=900,Ke=!Re&&!X&&!K&&!Y&&!v,De=!se&&(!!te||U)&&(!!K||!!Y||!!v||Z==="outline"),Xe=t=>{const y=[];let I=L?.nodes.find(G=>G.id===t);for(;I?.parentId;)y.unshift(I.parentId),I=L?.nodes.find(G=>G.id===I.parentId);return y},ot=t=>{const y=l?.perspectives.find(I=>I.id===t.perspective);if(y)if(re(),V(y.id),t.node){const I=[];let G=y.nodes.find(Me=>Me.id===t.node);for(;G?.parentId;)I.unshift(G.parentId),G=y.nodes.find(Me=>Me.id===G.parentId);ee(I),oe(t.node),q(!0)}else ee([]),Q(!0)},de="inline-flex min-h-11 items-center justify-center gap-1.5 rounded-lg px-3 text-xs font-medium transition hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40",Ze=Ke?re:ct??(!Re&&Z==="graph"?()=>q(!1):re),ut=t=>U&&L?e.jsx(xt,{active:o,docked:!0,title:L.title,stageKey:`${L.id}:${v?"edit":"view-document"}`,source:!1,fullHeight:De||!!v,inGraph:t,side:Re,onBack:v?()=>O(null):void 0,backLabel:n("architecture.backToModule"),onClose:re,onDismiss:v?()=>O(null):re,children:v?e.jsx(Qe,{root:r,file:c,perspective:L.id,initialField:v.field,onSaved:y=>{++i.current,b(y),O(null),P(I=>I+1)},onCancel:()=>O(null)}):e.jsxs(e.Fragment,{children:[e.jsx(st,{value:L,rootPath:r,onEdit:y=>O({field:y}),onOpenFile:d}),e.jsx("button",{type:"button",className:`${de} text-primary`,onClick:()=>{ne(!1),Ne([])},children:p==="zh"?"进入此视角":"Explore this perspective"})]})}):te&&((t||Z==="graph")&&Ke?e.jsx(Nr,{node:te,onExpand:()=>q(!0),onClose:re}):e.jsx(xt,{active:o&&!Y,docked:!t||!K&&!Y,title:te.title,stageKey:`${te.id}:${K?`${K.path}:${K.line}`:Y?"analysis":v?`edit:${v.field}`:"details"}`,source:!!K,fullHeight:t?!!Y||!!v:De,inGraph:t,side:Re,onBack:ct,backLabel:Rt,onClose:re,onDismiss:Ze,onCollapse:!Re&&!De&&!K&&!Y&&!v?()=>q(!1):void 0,children:v?e.jsx(Qe,{root:r,file:c,perspective:L.id,node:v.node,initialField:v.field,onSaved:y=>{++i.current,b(y),O(null),P(I=>I+1)},onCancel:()=>O(null)},`${c}:${L.id}:${v.node??"view"}:${v.field}`):K&&x?x(K):Y?e.jsxs(e.Fragment,{children:[e.jsx(pt,{active:o,rootPath:r,currentFile:g,currentDirectory:u,initial:Y,onInsertPrompt:a,onPrepared:ue,onClose:()=>W(null)},te.id),ce&&e.jsx("button",{type:"button",className:`${de} mt-3 bg-primary/15 text-primary`,onClick:()=>{E(Y),ge(ce),re()},children:n("architecture.viewPrepared")})]}):e.jsx(wr,{embedded:!0,document:l,rootPath:r,onReference:ot,onEdit:y=>{q(!0),O({node:te.id,field:y})},node:te,view:L,parentId:te.parentId,onSelect:y=>Ae(y,!0),onExplore:()=>Ne([...Xe(te.id),te.id]),onAnalyze:()=>zt(te),onOpenFile:lt,onClose:re})}));return r?e.jsxs("div",{ref:m,className:"relative flex h-full min-h-0 flex-col",onKeyDown:t=>{!se&&(te||U)&&t.key==="Escape"&&!t.defaultPrevented&&!t.nativeEvent.isComposing&&(t.preventDefault(),t.stopPropagation(),Ze())},children:[e.jsxs("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b border-border/15 px-3 py-2",children:[e.jsxs("span",{className:"flex items-center gap-2 text-sm font-semibold",children:[e.jsx(mt,{size:16}),n("architecture.title")]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsxs("button",{ref:ve,type:"button",className:de,disabled:!Be,onClick:()=>{Be&&(re(),$(z?null:{initial:Be,...l?{outputFile:c}:{}}))},"aria-expanded":!!z,children:[e.jsx(St,{size:14}),n(l?"architecture.update":"architecture.generate")]}),(l||c!==xe)&&e.jsx("button",{type:"button",className:`${de} px-2`,"aria-label":n("architecture.newAnalysis"),onClick:()=>{re(),$({initial:Ee})},children:e.jsx(yt,{size:16})}),e.jsx("button",{type:"button",className:`${de} px-2`,"aria-label":n("architecture.refresh"),disabled:h,onClick:()=>P(t=>t+1),children:e.jsx(jt,{size:15,className:h?"animate-spin":""})})]})]}),e.jsxs("div",{className:`relative flex min-h-0 flex-1 ${Re&&!De?"flex-row":"flex-col"}`,"data-architecture-workspace":!0,children:[e.jsx("div",{ref:A,hidden:De,"data-architecture-content":!0,className:`min-h-0 min-w-0 flex-1 overflow-y-auto p-3 [overflow-anchor:none] ${z?"flex flex-col":""}`,children:v&&!te&&!U?e.jsxs("div",{className:"flex min-h-full flex-col gap-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:L?.title}),e.jsx(Qe,{root:r,file:c,perspective:L.id,initialField:v.field,onSaved:t=>{++i.current,b(t),O(null),P(y=>y+1)},onCancel:()=>O(null)},`${c}:${L?.id}:${v.field}`)]}):z?e.jsx(pt,{active:o,rootPath:r,currentFile:g,currentDirectory:u,initial:z.initial,outputFile:z.outputFile,onInsertPrompt:a,onPrepared:(t,y)=>{E(y),ge(t)},onClose:Ie},`${z.outputFile??"new"}:${JSON.stringify(z.initial)}`):e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"mb-3 flex items-center gap-2 text-xs text-muted-foreground",children:[n("architecture.savedAnalyses"),e.jsx("select",{"aria-label":n("architecture.savedAnalyses"),value:c,onChange:t=>{E(Ee),ge(t.target.value)},className:"min-h-10 min-w-0 flex-1 rounded-lg border border-border/20 bg-surface-2 px-2 text-sm text-foreground",children:Ct.map(t=>e.jsx("option",{value:t,children:t===".omm"?".omm · oh-my-mermaid":t===xe?n("architecture.projectRange"):`${n(t.includes("/module-")?"architecture.moduleRange":"architecture.featureRange")}: ${t===c&&l?.analysis?l.analysis.target.replace(/\n/g,", "):Xt(t)}`},t))})]}),C&&e.jsx("p",{role:"alert",className:"mb-3 text-xs text-muted-foreground",children:n("architecture.libraryFailed")}),h&&!l&&e.jsx("p",{role:"status",className:"py-4 text-sm text-muted-foreground",children:n("architecture.loading")}),B&&e.jsxs("div",{role:"alert",className:"mb-3 rounded-lg border border-destructive/30 p-3 text-sm",children:[e.jsx("p",{children:n(B==="format"?"architecture.invalid":"architecture.loadFailed")}),l&&e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:n("architecture.previous")}),e.jsx("button",{type:"button",className:`${de} mt-2 bg-surface-2`,onClick:()=>P(t=>t+1),children:n("architecture.retry")})]}),!h&&!B&&!l&&e.jsxs("div",{className:"flex flex-col items-center gap-3 px-4 py-8 text-center",children:[e.jsx(mt,{size:32,className:"text-muted-foreground"}),e.jsx("h2",{className:"text-base font-medium",children:n("architecture.empty")}),e.jsx("p",{className:"max-w-sm text-sm leading-relaxed text-muted-foreground",children:n(c===xe?"architecture.emptyHint":"architecture.awaitingFile")})]}),l&&L&&He&&e.jsxs("div",{className:"space-y-3",children:[!Be&&e.jsx("p",{className:"text-xs text-muted-foreground",children:n("architecture.scopeUnavailable")}),l.analysis&&e.jsxs("p",{className:"break-words text-xs text-muted-foreground",children:[n(`architecture.${l.analysis.kind}Range`),l.analysis.target?` · ${l.analysis.target.replace(/\n/g,", ")}`:""," · ",n(l.analysis.depth==="boundary"?"architecture.boundaryDepth":"architecture.followDepth")]}),l.summary.length<=240&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:l.summary}),e.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[n("architecture.perspective"),e.jsxs("select",{"aria-label":n("architecture.perspective"),value:T?"all-perspectives":L.id,onChange:t=>Ve(t.target.value),className:"min-h-11 min-w-0 flex-1 rounded-lg border border-border/20 bg-surface-2 px-2 text-sm text-foreground",children:[e.jsx("option",{value:"all-perspectives",children:p==="zh"?"全部视角":"All perspectives"}),l.perspectives.map(t=>e.jsx("option",{value:t.id,children:t.title},t.id))]})]}),we.length>0&&e.jsxs("nav",{className:"flex flex-wrap items-center gap-1 text-xs","aria-label":n("architecture.breadcrumb"),children:[e.jsx("button",{type:"button",className:`${de} px-2`,onClick:()=>Ne([]),children:L.title}),we.map((t,y)=>e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(Fe,{size:12}),e.jsx("button",{type:"button",className:`${de} px-2`,onClick:()=>Ne(we.slice(0,y+1)),children:L.nodes.find(I=>I.id===t)?.title})]},t))]}),e.jsx("p",{className:"line-clamp-3 whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:ye?.summary??L.summary}),e.jsxs("details",{children:[e.jsx("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:p==="zh"?"视角文档与模块目录":"Perspective documents and module tree"}),e.jsx(st,{value:ye??L,rootPath:r,onOpenFile:lt,onEdit:t=>{ye?(oe(ye.id),q(!0),O({node:ye.id,field:t})):O({field:t})}}),e.jsx("nav",{"aria-label":p==="zh"?"模块目录":"Module tree",className:"my-2 border-l border-border/20",children:L.nodes.map(t=>e.jsx("button",{type:"button","aria-label":`${p==="zh"?"定位模块":"Go to module"}: ${t.title}`,className:`${de} flex w-full justify-start text-left ${ie===t.id?"text-primary":""}`,style:{paddingInlineStart:12+Xe(t.id).length*16},onClick:()=>{ee(Xe(t.id)),Ae(t.id),q(!0)},children:t.title},t.id))})]}),e.jsx("div",{role:"group","aria-label":n("architecture.browseMode"),className:"flex gap-1 rounded-lg bg-surface-2 p-1",children:["outline","graph"].map(t=>e.jsx("button",{type:"button","aria-pressed":Z===t,className:`${de} flex-1 ${Z===t?"bg-surface text-primary":"text-muted-foreground"}`,onClick:()=>me(t),children:n(t==="outline"?"architecture.outlineMode":"architecture.graphMode")},t))}),Z==="graph"?e.jsxs(e.Fragment,{children:[e.jsx(jr,{view:T&&ze?ze.view:L,parentId:T?void 0:Oe,selectedId:T&&ze?[...ze.references].find(([,t])=>t.perspective===L.id&&t.node===ie)?.[0]??null:ie,onSelect:t=>{if(T&&ze){const y=ze.references.get(t);y&&ot(y)}else Ae(t)},active:o,referenceWidth:w,inspector:ut(!0),inspectorStage:K?"source":Y||v?"analysis":Ke?"preview":"details",onDismissInspector:U?v?()=>O(null):re:Ze,onExpandedChange:t=>{D(t),!t&&se&&re()},heading:e.jsxs("div",{className:"relative",children:[e.jsxs("select",{"aria-label":n("architecture.perspective"),title:L.title,value:T?"all-perspectives":L.id,onChange:t=>Ve(t.target.value),className:"h-11 w-full min-w-0 appearance-none truncate bg-surface pr-4 text-xs font-semibold focus-visible:ring-2 focus-visible:ring-ring",children:[e.jsx("option",{value:"all-perspectives",children:p==="zh"?"全部视角":"All perspectives"}),l.perspectives.map(t=>e.jsx("option",{value:t.id,children:t.title},t.id))]}),e.jsx(vt,{size:12,className:"pointer-events-none absolute right-0 top-1/2 -translate-y-1/2 text-muted-foreground"})]}),navigation:we.length>0?e.jsxs("nav",{"aria-label":n("architecture.breadcrumb"),className:"flex items-center gap-1 px-2",children:[e.jsx("button",{type:"button",className:`${de} shrink-0 px-2`,onClick:()=>Ne(we.slice(0,-1)),children:n("architecture.parentModule")}),e.jsxs("span",{className:"truncate text-xs text-muted-foreground",children:[L.title," / ",ye?.title]})]}):void 0}),e.jsxs("details",{children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:[n("architecture.modules")," (",He.nodes.length,")"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:He.nodes.map(t=>e.jsx("button",{type:"button","aria-pressed":te?.id===t.id,className:`${de} bg-surface-2`,onClick:()=>Ae(t.id),children:t.title},t.id))})]})]}):e.jsx("div",{className:"space-y-2",role:"group","aria-label":n("architecture.modules"),children:T?l.perspectives.map(t=>e.jsxs("button",{type:"button",className:"block min-h-16 w-full rounded-xl bg-surface-2 p-3 text-left",onClick:()=>Ve(t.id),children:[e.jsx("span",{className:"text-sm font-medium",children:t.title}),e.jsx("span",{className:"mt-1 block text-xs text-muted-foreground",children:t.summary})]},t.id)):He.nodes.map(t=>e.jsx("div",{children:e.jsxs("button",{type:"button","aria-label":t.title,"aria-expanded":te?.id===t.id,className:"block min-h-16 w-full rounded-xl border border-border/20 bg-surface-2 p-3 text-left transition hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring",onClick:()=>Ae(t.id),children:[e.jsxs("span",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-sm font-medium",children:t.title}),e.jsx(Fe,{size:16,className:"shrink-0 text-muted-foreground"})]}),e.jsx("span",{className:"mt-1.5 line-clamp-2 break-words text-xs leading-relaxed text-muted-foreground",children:t.summary})]})},t.id))}),e.jsxs("details",{className:"rounded-lg border border-border/15 px-3",children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:[n("architecture.analysisNotes")," · ",n("architecture.savedAt")," ",new Date(l.generatedAt).toLocaleString(p==="zh"?"zh-CN":"en-US")]}),e.jsxs("div",{className:"space-y-3 pb-3",children:[l.summary.length>240&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:l.summary}),l.details?.limitations.length?e.jsxs("div",{children:[e.jsx("h3",{className:"mb-1 text-xs font-semibold",children:n("architecture.limitations")}),e.jsx("ul",{className:"list-disc space-y-1 pl-4 text-xs leading-relaxed text-muted-foreground",children:l.details.limitations.map((t,y)=>e.jsx("li",{children:t},y))})]}):null,l.details?.analyzedPaths.length?e.jsxs("details",{children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:[n("architecture.analyzedPaths")," (",l.details.analyzedPaths.length,")"]}),l.details.analyzedPaths.map(t=>e.jsx("button",{type:"button",className:"block min-h-11 w-full break-all rounded px-2 py-2 text-left font-mono text-xs text-primary hover:bg-surface-elevated",onClick:()=>d({path:t}),children:t},t))]}):null]})]}),ye&&ye.files.length>0&&e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer py-2 text-xs text-muted-foreground",children:n("architecture.sourceFiles")}),ye.files.map(t=>e.jsxs("button",{type:"button",className:"block min-h-10 w-full break-all rounded px-2 py-2 text-left font-mono text-xs text-primary hover:bg-surface-2",onClick:()=>d(t),children:[t.path,t.line?`:${t.line}`:""]},`${t.path}:${t.line??""}`))]})]}),e.jsx(br,{root:r,file:c,document:l,onLoaded:(t,y)=>{ge(t),b(y),P(I=>I+1)}})]})}),o&&!se&&ut(!1)]})]}):e.jsx("p",{className:"p-5 text-sm text-muted-foreground",children:n("fileTree.noWorkingDir")})}export{Gr as ArchitecturePanel};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{aQ as ie,e5 as ce,cb as s,g as le,L as de}from"./app-BMJesFDU.js";import{b as D}from"./dnd-BCFAPC0L.js";import{S as me}from"./sparkles-CCLflSFy.js";import{C as he}from"./chevron-left-5sk7gL3u.js";import{M as ue}from"./maximize-2-BGTBw-Ku.js";import{G as xe,T as fe,C as pe}from"./triangle-alert-D3w7mA17.js";const ye=[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]],ge=ie("minimize-2",ye);function be(t,d){return(d?t.filter(o=>o.repoRoot===d):t).slice().sort((o,r)=>r.injectedAt-o.injectedAt)[0]??null}function ke(t){switch(t){case"entry":case"source":return"bg-sky-400";case"ui":return"bg-fuchsia-400";case"risk":return"bg-destructive";case"test":return"bg-emerald-400";default:return"bg-primary"}}function ve(t){if(!t)return;const d=typeof t.sectionIndex=="number"?` section ${t.sectionIndex+1}`:"",i=typeof t.hunkIndex=="number"?` hunk ${t.hunkIndex+1}`:"";return`${t.filePath}${i}${d}`}function Z({anchor:t,children:d,onNavigate:i,className:o,style:r,elementRef:g,onActivate:l}){return!t&&!l?s.jsx("span",{ref:g,className:o,style:r,children:d}):s.jsx("button",{ref:g,type:"button",onClick:()=>{l?.(),t&&i(t)},title:ve(t),className:`${o} text-left transition hover:border-primary/35 hover:bg-primary/15 active:scale-[0.99]`,style:r,children:d})}const H=190,X=92,q=132,Ne=28,C=16,J=18,T=54,ee=24,re=18,we=8,B=24,z=["rgb(var(--primary-rgb))","rgb(var(--accent-rgb))","rgb(var(--warning-rgb))","rgb(var(--success-rgb))","rgb(192 132 252)"];function te(t){return z[t%z.length]}function je(t,d){return`${t.from}->${t.to}:${d}`}function Me(t,d,i){const o=Math.max(d.get(t)?.length??0,i.get(t)?.length??0);return Math.max(X,36+Math.max(0,o-1)*re)}function ne(t,d,i){if(i<=1)return t.y+t.height/2;const o=Math.max(0,t.height-36),r=Math.min(o,(i-1)*re);return t.y+t.height/2-r/2+r/(i-1)*d}function se(t,d,i){return t.slice().sort((o,r)=>{const g=d[o],l=d[r],a=i==="from"?g.toNode:g.fromNode,h=i==="from"?l.toNode:l.fromNode;return a.y-h.y||a.index-h.index||g.index-l.index})}function Ee(t,d){const i=new Map;for(const o of t){if(Math.abs(o.toNode.layer-o.fromNode.layer)!==1)continue;const r=`${o.fromNode.layer}:${o.toNode.layer}`,g=i.get(r)??[];g.push(o),i.set(r,g)}for(const o of i.values()){o.sort((h,x)=>(h.fromY+h.toY)/2-(x.fromY+x.toY)/2||h.index-x.index);const r=[];o.forEach((h,x)=>{const N=(h.fromY+h.toY)/2,M=Math.max(B,d[h.key]??0)/2;if(x===0){r.push(N);return}const w=o[x-1],E=Math.max(B,d[w.key]??0)/2;r.push(Math.max(N,r[x-1]+E+M+we))});const g=r.reduce((h,x,N)=>h+x-(o[N].fromY+o[N].toY)/2,0)/Math.max(1,r.length),l=Math.min(...r.map((h,x)=>h-g-Math.max(B,d[o[x].key]??0)/2)),a=Math.max(0,C-l);o.forEach((h,x)=>{h.laneY=r[x]-g+a})}}function $e(t,d,i={},o={}){const r=new Map(t.map((n,m)=>[n.id,{node:n,index:m}])),g=d.filter(n=>r.has(n.from)&&r.has(n.to)),l=new Map,a=new Map;for(const n of t)l.set(n.id,[]),a.set(n.id,[]);for(const n of g)l.get(n.to)?.push(n.from),a.get(n.from)?.push(n.to);const h=new Map,x=new Set,N=n=>{const m=h.get(n);if(m!==void 0)return m;if(x.has(n))return 0;x.add(n);const c=l.get(n)??[],u=c.length===0?0:Math.max(...c.map(N))+1;return x.delete(n),h.set(n,u),u};for(const n of t)N(n.id);const M=new Map;for(const n of t){const m=h.get(n.id)??0,c=M.get(m)??[],u=r.get(n.id);u&&c.push(u),M.set(m,c)}const w=[];for(const[n,m]of M.entries()){m.sort((u,f)=>u.index-f.index);let c=C+T;m.forEach(({node:u,index:f},j)=>{const I=Math.max(Me(u.id,l,a),Math.ceil(i[u.id]??X));w.push({node:u,index:f,layer:n,row:j,x:C+n*(H+q),y:c,height:I}),c+=I+Ne})}const E=new Map(w.map(n=>[n.node.id,n])),v=g.flatMap((n,m)=>{const c=E.get(n.from),u=E.get(n.to);return!c||!u?[]:[{...n,key:je(n,m),index:m,fromNode:c,toNode:u,routeIndex:m,fromPortIndex:0,toPortIndex:0,fromY:c.y+c.height/2,toY:u.y+u.height/2,laneY:(c.y+c.height/2+u.y+u.height/2)/2}]}),$=new Map,G=new Map;v.forEach((n,m)=>{$.set(n.from,[...$.get(n.from)??[],m]),G.set(n.to,[...G.get(n.to)??[],m])});for(const[n,m]of $){const c=se(m,v,"from");c.forEach((u,f)=>{const j=v[u];j.fromPortIndex=f,j.fromY=ne(E.get(n),f,c.length)})}for(const[n,m]of G){const c=se(m,v,"to");c.forEach((u,f)=>{const j=v[u];j.toPortIndex=f,j.toY=ne(E.get(n),f,c.length)})}Ee(v,o);let Y=0;v.forEach(n=>{const m=Math.min(n.fromNode.layer,n.toNode.layer),c=Math.max(n.fromNode.layer,n.toNode.layer);if(c-m<=1)return;const f=Y;Y+=1,n.routeIndex=f;const j=w.filter(A=>A.layer>=m&&A.layer<=c),I=Math.min(...j.map(A=>A.y))-ee-(Math.floor(f/2)+1)*J,S=Math.max(...j.map(A=>A.y+A.height))+ee+(Math.floor(f/2)+1)*J;n.laneY=f%2===0?Math.max(C,I):S});const O=Math.max(0,...w.map(n=>n.layer)),W=Math.max(C+T+X,...w.map(n=>n.y+n.height),...v.map(n=>n.laneY+Math.max(B,o[n.key]??0)/2));return{nodes:w,edges:v,width:C*2+(O+1)*H+O*q,height:W+C+T}}function oe(t,d=12){const i=t[0];if(!i)return"";const o=[`M ${i.x} ${i.y}`];for(let r=1;r<t.length;r+=1){const g=t[r-1],l=t[r],a=t[r+1];if(!a){o.push(`L ${l.x} ${l.y}`);continue}const h=l.x-g.x,x=l.y-g.y,N=a.x-l.x,M=a.y-l.y,w=Math.abs(h)+Math.abs(x),E=Math.abs(N)+Math.abs(M);if(w===0||E===0||h&&N||x&&M){o.push(`L ${l.x} ${l.y}`);continue}const v=Math.min(d,w/2,E/2),$={x:l.x-Math.sign(h)*v,y:l.y-Math.sign(x)*v},G={x:l.x+Math.sign(N)*v,y:l.y+Math.sign(M)*v};o.push(`L ${$.x} ${$.y}`),o.push(`Q ${l.x} ${l.y} ${G.x} ${G.y}`)}return o.join(" ")}function _e(t){const d=t.fromNode.x+H+8,i=t.fromY,o=t.toNode.x-8,r=t.toY,g=Math.abs(t.toNode.layer-t.fromNode.layer),l=d+22+t.fromPortIndex*5,a=o-22-t.toPortIndex*5;return g<=1?oe([{x:d,y:i},{x:l,y:i},{x:l,y:t.laneY},{x:a,y:t.laneY},{x:a,y:r},{x:o,y:r}]):oe([{x:d,y:i},{x:l,y:i},{x:l,y:t.laneY},{x:a,y:t.laneY},{x:a,y:r},{x:o,y:r}])}function De(t){const d=t.fromNode.x+H+8,i=t.toNode.x-8,o=Math.abs(t.toNode.layer-t.fromNode.layer),r=Math.max(34,Math.abs(i-d));return o<=1?{x:(d+i)/2,y:t.laneY,maxWidth:Math.max(72,Math.min(108,r-34))}:{x:(d+i)/2,y:t.laneY,maxWidth:Math.max(84,Math.min(120,r*.3))}}function Ce({walkthroughs:t,repoRoot:d,onNavigate:i,fullscreen:o=!1,onToggleFullscreen:r}){const{t:g}=ce(),l=D.useId(),a=be(t,d),h=D.useRef(new Map),x=D.useRef(new Map),[N,M]=D.useState({}),[w,E]=D.useState({}),[v,$]=D.useState(null),[G,Y]=D.useState(null),[O,W]=D.useState(null),[n,m]=D.useState(null),c=D.useMemo(()=>a?$e(a.nodes,a.edges,N,w):null,[N,w,a]);if(D.useLayoutEffect(()=>{if(!a)return;const e={};for(const p of a.nodes){const b=h.current.get(p.id);b&&(e[p.id]=b.offsetHeight)}M(p=>{const b=Object.keys(p),_=Object.keys(e);return b.length===_.length&&_.every(k=>p[k]===e[k])?p:e});const y={};for(const[p,b]of x.current)y[p]=b.offsetHeight;E(p=>{const b=Object.keys(p),_=Object.keys(y);return b.length===_.length&&_.every(k=>p[k]===y[k])?p:y})},[a]),!a||!c)return null;const u=`walkthrough-arrow-${l.replace(/[^a-zA-Z0-9_-]/g,"")||"default"}`,f=O??n,j=f?null:v??G,I=c.edges.some(e=>e.key===j)?j:null,S=c.edges.find(e=>e.key===I),A=f?c.edges.filter(e=>e.from===f||e.to===f):[],U=f?new Set(A.map(e=>e.key)):null,F=f?new Set([f,...A.flatMap(e=>[e.from,e.to])]):S?new Set([S.from,S.to]):null,K=new Map(a.sections.filter(e=>e.nodeId&&e.anchor).map(e=>[e.nodeId,e.anchor])),L=a.nodes.filter(e=>e.anchor??K.get(e.id)),R=L.findIndex(e=>e.id===n),Q=e=>{if(L.length===0)return;const y=R<0?e<0?L.length-1:0:Math.min(L.length-1,Math.max(0,R+e)),p=L[y],b=p.anchor??K.get(p.id);b&&(m(p.id),Y(null),i(b))};return s.jsxs("section",{className:"mb-2 px-0 py-0",children:[s.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[s.jsx("span",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-primary/12 text-primary",children:s.jsx(me,{size:14})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("div",{className:"whitespace-normal break-words text-[12px] font-semibold leading-snug text-foreground",children:a.title}),a.summary&&s.jsx("div",{className:"mt-0.5 text-[10px] leading-snug text-muted-foreground",children:a.summary})]}),s.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[o&&L.length>0&&s.jsxs(s.Fragment,{children:[s.jsx("button",{type:"button",onClick:()=>Q(-1),disabled:R===0,className:"inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition hover:bg-surface-2 hover:text-foreground active:scale-95 disabled:pointer-events-none disabled:opacity-30",title:"Previous change","aria-label":"Previous change",children:s.jsx(he,{size:15})}),s.jsxs("span",{className:"min-w-8 text-center text-[10px] tabular-nums text-muted-foreground",children:[R<0?"—":R+1,"/",L.length]}),s.jsx("button",{type:"button",onClick:()=>Q(1),disabled:R===L.length-1,className:"inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition hover:bg-surface-2 hover:text-foreground active:scale-95 disabled:pointer-events-none disabled:opacity-30",title:"Next change","aria-label":"Next change",children:s.jsx(le,{size:15})})]}),r&&s.jsx("button",{type:"button",onClick:r,className:"inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition hover:bg-surface-2 hover:text-foreground active:scale-95",title:o?"Exit full-screen DAG review":"Review from DAG in full screen","aria-label":o?"Exit full-screen DAG review":"Review from DAG in full screen",children:o?s.jsx(ge,{size:15}):s.jsx(ue,{size:15})})]})]}),a.highlights.length>0&&s.jsx("div",{className:"mt-2 grid gap-1.5",children:a.highlights.slice(0,4).map((e,y)=>s.jsxs("div",{className:"rounded-md bg-surface-2 px-2 py-1.5",children:[s.jsxs("div",{className:"flex min-w-0 items-center gap-1.5",children:[e.tag&&s.jsx("span",{className:"shrink-0 rounded bg-surface-elevated px-1.5 py-0.5 text-[9px] font-semibold text-primary",children:e.tag}),s.jsx("span",{className:"min-w-0 flex-1 whitespace-normal break-words text-[11px] font-semibold leading-snug text-foreground",children:e.what})]}),s.jsx("div",{className:"mt-0.5 text-[10px] leading-snug text-muted-foreground",children:e.effect})]},`${e.what}-${y}`))}),a.nodes.length>0&&s.jsxs("div",{className:"mt-2",children:[s.jsxs("div",{className:"mb-1 flex items-center justify-between gap-2 text-[10px] text-muted-foreground",children:[s.jsxs("div",{className:"flex items-center gap-1.5 font-semibold uppercase tracking-[0.12em]",children:[s.jsx(xe,{size:11}),"DAG"]}),a.edges.some(e=>e.label?.trim())&&s.jsx("span",{className:"normal-case tracking-normal",children:g("diffViewer.focusPathHint")})]}),s.jsx("div",{className:"overflow-x-auto rounded-md border border-border/15 bg-surface-2 p-1.5",onWheel:e=>e.stopPropagation(),children:s.jsxs("div",{className:"relative",style:{width:c.width,height:c.height},children:[s.jsxs("svg",{className:"absolute inset-0",width:c.width,height:c.height,"aria-hidden":"true",children:[s.jsx("defs",{children:z.map((e,y)=>s.jsx("marker",{id:`${u}-${y}`,viewBox:"0 0 10 10",refX:"8.5",refY:"5",markerWidth:"5",markerHeight:"5",orient:"auto",markerUnits:"strokeWidth",children:s.jsx("path",{d:"M0,0 L10,5 L0,10 Z",fill:e})},e))}),c.edges.map(e=>{const y=_e(e),p=te(e.index),b=I===e.key||!!U?.has(e.key),_=!!((I||f)&&!b);return s.jsxs("g",{className:"transition-opacity duration-150",style:{opacity:_?.3:1},children:[s.jsx("path",{className:"pointer-events-none",d:y,fill:"none",stroke:"var(--surface-2)",strokeWidth:b?7:5,strokeLinecap:"round"}),s.jsx("path",{className:"pointer-events-none transition-[stroke-width,opacity] duration-150",d:y,fill:"none",stroke:p,strokeWidth:b?3:1.8,strokeLinecap:"round",markerEnd:`url(#${u}-${e.index%z.length})`}),s.jsx("path",{"data-dag-edge":e.key,d:y,fill:"none",stroke:"transparent",strokeWidth:"14",className:"cursor-pointer",onPointerEnter:()=>$(e.key),onPointerLeave:()=>$(k=>k===e.key?null:k),onClick:()=>{m(null),Y(k=>k===e.key?null:e.key)}}),s.jsx("circle",{className:"pointer-events-none",cx:e.fromNode.x+H+8,cy:e.fromY,r:b?4:3,fill:p,stroke:"var(--surface-2)",strokeWidth:"2"}),s.jsx("circle",{className:"pointer-events-none",cx:e.toNode.x-8,cy:e.toY,r:b?4:3,fill:p,stroke:"var(--surface-2)",strokeWidth:"2"})]},e.key)})]}),c.edges.map(e=>{const y=e.label?.trim();if(!y)return null;const{x:p,y:b,maxWidth:_}=De(e),k=te(e.index),V=I===e.key||!!U?.has(e.key),ae=!!((I||f)&&!V);return s.jsxs("button",{ref:P=>{P?x.current.set(e.key,P):x.current.delete(e.key)},type:"button","data-dag-edge-label":e.key,className:"absolute -translate-x-1/2 -translate-y-1/2 whitespace-normal break-words rounded-md border bg-surface-elevated px-1.5 py-1 text-center text-[9px] leading-[11px] shadow-sm transition-[opacity,box-shadow,transform] duration-150 [overflow-wrap:anywhere] hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/60",style:{left:p,top:b,maxWidth:_,width:"max-content",borderColor:k,color:k,opacity:ae?.38:1,boxShadow:V?`0 0 0 2px ${k}, 0 6px 18px rgb(0 0 0 / 0.24)`:void 0},title:`${e.fromNode.index+1} ${e.fromNode.node.title} → ${e.toNode.index+1} ${e.toNode.node.title}${e.desc?`
|
|
2
|
+
${e.desc}`:""}`,"aria-pressed":G===e.key,onPointerEnter:()=>$(e.key),onPointerLeave:()=>$(P=>P===e.key?null:P),onClick:()=>{m(null),Y(P=>P===e.key?null:e.key)},children:[s.jsxs("span",{className:"block font-bold tabular-nums",children:[e.fromNode.index+1," → ",e.toNode.index+1]}),s.jsx("span",{className:"block text-muted-foreground",children:y})]},`${e.key}-label`)}),c.nodes.map(({node:e,index:y,x:p,y:b,height:_})=>s.jsxs(Z,{elementRef:k=>{k?h.current.set(e.id,k):h.current.delete(e.id)},anchor:e.anchor??K.get(e.id),onActivate:()=>{m(e.id),Y(null)},onNavigate:i,className:`absolute overflow-hidden rounded-lg border bg-surface/95 px-2.5 py-2 text-foreground shadow-[0_10px_24px_rgba(0,0,0,0.18)] transition-[opacity,border-color,box-shadow] duration-150 ${F?.has(e.id)?"border-primary/60 shadow-[0_0_0_1px_rgb(var(--primary-rgb)/0.28),0_10px_24px_rgba(0,0,0,0.22)]":F?"border-border/15 opacity-40":"border-border/25"}`,style:{left:p,top:b,width:H,minHeight:_},children:[s.jsx("span",{className:"absolute inset-0",onPointerEnter:()=>W(e.id),onPointerLeave:()=>W(k=>k===e.id?null:k)}),s.jsx("span",{className:`pointer-events-none absolute bottom-2 left-0 top-2 w-[3px] rounded-r-full ${ke(e.kind)}`}),s.jsxs("div",{className:"pointer-events-none relative flex min-w-0 items-center gap-1.5",children:[s.jsx("span",{className:"flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-primary/15 text-[9px] font-bold text-primary",children:y+1}),s.jsx("span",{className:"min-w-0 flex-1 whitespace-normal break-words text-[11px] font-semibold leading-snug text-foreground",children:e.title}),e.anchor&&s.jsx(de,{size:11,className:"shrink-0 opacity-70"})]}),e.kind&&s.jsx("div",{className:"pointer-events-none relative mt-0.5 truncate text-[9px] font-semibold uppercase tracking-[0.08em] text-muted-foreground/80",children:e.kind}),s.jsx("div",{className:"pointer-events-none relative mt-0.5 whitespace-normal break-words text-[10px] leading-snug text-muted-foreground",children:e.business})]},e.id))]})})]}),(a.risks.length>0||a.checks.length>0)&&s.jsxs("div",{className:"mt-2 grid gap-1.5",children:[a.risks.slice(0,3).map((e,y)=>s.jsxs(Z,{anchor:e.anchor,onNavigate:i,className:"flex w-full items-start gap-1.5 rounded-md border border-[rgb(var(--warning-rgb)_/_0.25)] bg-[rgb(var(--warning-rgb)_/_0.10)] px-2 py-1.5 text-[10px] text-muted-foreground",children:[s.jsx(fe,{size:12,className:"mt-0.5 shrink-0 text-[color:var(--warning)]"}),s.jsx("span",{className:"min-w-0 whitespace-normal break-words leading-snug",children:e.title})]},`${e.title}-${y}`)),a.checks.slice(0,3).map((e,y)=>s.jsxs("div",{className:"flex items-start gap-1.5 rounded-md bg-surface-2 px-2 py-1.5 text-[10px] text-muted-foreground",children:[s.jsx(pe,{size:12,className:"mt-0.5 shrink-0 text-primary"}),s.jsx("span",{className:"min-w-0 whitespace-normal break-words leading-snug",children:e})]},`${e}-${y}`))]})]})}export{Ce as C,ge as M};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e4 as B,ci as F,bc as K,bF as U,dM as Y,cb as e,x as q,b_ as k,R as C,S as H}from"./app-BMJesFDU.js";import{b as s}from"./dnd-BCFAPC0L.js";import{m as a,c as J,k as Q,P as X,W as Z,C as ee,o as te,e as se}from"./App-DqRkfVSm.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./link-BnxdKJ7b.js";import"./AndroidMirrorView-DkOZxYLg.js";import"./v4-EwEgHOG0.js";import"./RecordingSaveDialog-CtXaGgIo.js";import"./use-gesture-react.esm-DYpdiE_k.js";import"./gestureArbiter-DszagC-d.js";import"./arrow-up-CelbB9FE.js";import"./unplug-BSblgecr.js";import"./swiper-DJjq1TYT.js";import"./loader-circle-q7h8uwFI.js";import"./clipboardText-5puxqqm_.js";import"./GitLoadingSkeleton-CBPykkZP.js";import"./clipboard-uSv3AiJM.js";import"./triangle-alert-D3w7mA17.js";import"./sun-B9_TfxlA.js";import"./maximize-2-BGTBw-Ku.js";import"./git-compare-BlcHEuBI.js";import"./arrow-down-D-WZS308.js";function Se({groupId:n,activeSessionId:u,onOpenSidebar:w,leftSidebarVisible:S=!1,onToggleRightSidebar:x,rightSidebarOpen:p=!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=B(),[L,j]=s.useState(!1);s.useEffect(()=>{if(r==="ready"){j(!1);return}const t=setTimeout(()=>j(!0),1e3);return()=>clearTimeout(t)},[r]);const M=a(t=>t.view),V=a(t=>t.drafts),y=a(t=>t.setDraft),[W,A]=s.useState(n),c=s.useCallback(async()=>{try{const t=await F();h(t),d(null)}catch(t){d(t instanceof Error?t.message:"协作组加载失败")}},[]);s.useEffect(()=>{let t=!1;K().then(o=>{t||P(o)}).catch(()=>{}),U().then(o=>{if(t)return;const O=o.collaborationPanels?.[J()]?.drafts;for(const[N,$]of Object.entries(O??{}))a.getState().drafts[N]||y(N,$)}).catch(()=>{});const _=Y(o=>{t||(h(o),d(null))}),I=Q(()=>{navigator.onLine!==!1&&c()},1e4,[H,"pageshow"]);return()=>{t=!0,_(),I()}},[c]);const m=i?.groups.find(t=>t.id===n),v=async t=>{await se(t),a.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} 位成员`:"正在连接工作组"})]}),x&&e.jsx("button",{type:"button","aria-label":"文件侧栏",title:"文件侧栏","aria-pressed":p,className:`inline-flex min-h-11 min-w-11 items-center justify-center rounded-lg ${p?"bg-surface-2 text-primary":"text-muted-foreground hover:bg-surface-2"}`,onClick:x,children:e.jsx(q,{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:M,active:!0,notice:f,groups:i.groups,sessions:i.sessions,agents:R,sessionsState:"loaded",selectedGroupId:W,setSelectedGroupId:A,initialGroupId:n,activeSessionId:u,initialDrafts:V,onDraftChange:y,docked:!1,inputKeySuffix:"main",floatingVisible:!0,floating:!1,onOpenSession:v,onOpenTaskSession:v,onDockMessages:u?async()=>{await te(n,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{Se as default};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cb as o}from"./app-BMJesFDU.js";import{b as s}from"./dnd-BCFAPC0L.js";import{c as i}from"./MarkdownPreview-DpvTnKkj.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./use-gesture-react.esm-DYpdiE_k.js";import"./swiper-DJjq1TYT.js";import"./syntaxHighlight-bcOB6oww.js";import"./list-tree-Bou8VSzi.js";function b({content:e}){const r=s.useMemo(()=>i(e.split(`
|
|
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{b as default};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/rdpSession-DUBlG26K.js","assets/app-BMJesFDU.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-Dea8wJF3.js","assets/index-CA1fR_jI.css","assets/chevron-left-5sk7gL3u.js","assets/loader-circle-q7h8uwFI.js","assets/unplug-BSblgecr.js","assets/clipboard-uSv3AiJM.js","assets/maximize-2-BGTBw-Ku.js","assets/settings-2-B-sr3wQM.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{aQ as it,ed as Mt,aU as rt,aF as jt,aE as Rt,dj as qt,e5 as Pt,cb as r,ay as Gt,dh as Be,ca as nt,_ as Nt,I as St,w as Zt,a0 as Jt,a1 as Tt}from"./app-BMJesFDU.js";import{b as c,r as ot}from"./dnd-BCFAPC0L.js";import{C as Qt}from"./chevron-left-5sk7gL3u.js";import{L as Lt}from"./loader-circle-q7h8uwFI.js";import{U as At,K as He}from"./unplug-BSblgecr.js";import{C as st}from"./clipboard-uSv3AiJM.js";import{M as er}from"./maximize-2-BGTBw-Ku.js";import{S as tr}from"./settings-2-B-sr3wQM.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
|
+
`)){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-DUBlG26K.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&>.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"&<(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
|
|
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};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{cb as t}from"./app-BMJesFDU.js";import{C as s}from"./ChangeWalkthroughPanel-HZ0zvFvi.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-Dea8wJF3.js";import"./sparkles-CCLflSFy.js";import"./chevron-left-5sk7gL3u.js";import"./maximize-2-BGTBw-Ku.js";import"./triangle-alert-D3w7mA17.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 m(){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{m as DagPlayground};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{cb as e}from"./app-BMJesFDU.js";import{b as a}from"./dnd-BCFAPC0L.js";import{c as M,S as _,D as T}from"./DiffViewer-AZvdDGfH.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./syntaxHighlight-bcOB6oww.js";import"./git-compare-BlcHEuBI.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 @@
|
|
@@ -452,4 +452,4 @@ new file mode 100644
|
|
|
452
452
|
+++ b/Second.ts
|
|
453
453
|
@@ -0,0 +1,2 @@
|
|
454
454
|
+export const second = true;
|
|
455
|
-
+announce(second);`}};function v(){if(typeof window>"u")return"kotlin";const r=new URLSearchParams(window.location.search).get("fixture");return r&&r in p?r:"kotlin"}function k(){return typeof window>"u"?"unified":new URLSearchParams(window.location.search).get("view")==="split"?"split":"unified"}function S(){if(typeof window>"u")return"words";const i=new URLSearchParams(window.location.search).get("inline");return i==="none"||i==="chars"||i==="words"?i:"words"}function y(){return typeof window>"u"?!0:new URLSearchParams(window.location.search).get("wrap")!=="off"}function C(){if(typeof window>"u")return"default";const i=new URLSearchParams(window.location.search).get("whitespace");return i==="ignore"||i==="trim"||i==="ignore-blank-lines"?i:"default"}function
|
|
455
|
+
+announce(second);`}};function v(){if(typeof window>"u")return"kotlin";const r=new URLSearchParams(window.location.search).get("fixture");return r&&r in p?r:"kotlin"}function k(){return typeof window>"u"?"unified":new URLSearchParams(window.location.search).get("view")==="split"?"split":"unified"}function S(){if(typeof window>"u")return"words";const i=new URLSearchParams(window.location.search).get("inline");return i==="none"||i==="chars"||i==="words"?i:"words"}function y(){return typeof window>"u"?!0:new URLSearchParams(window.location.search).get("wrap")!=="off"}function C(){if(typeof window>"u")return"default";const i=new URLSearchParams(window.location.search).get("whitespace");return i==="ignore"||i==="trim"||i==="ignore-blank-lines"?i:"default"}function A(){const[i,r]=a.useState(()=>v()),[d,c]=a.useState(()=>k()),[m,I]=a.useState(()=>M()),[f,g]=a.useState(()=>S()),[u,h]=a.useState(()=>C()),[l,b]=a.useState(()=>y()),[x,N]=a.useState(null),s=p[i],R=a.useMemo(()=>Object.entries(p),[]),o=d==="split"&&!m?"unified":d;return a.useEffect(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return;const t=window.matchMedia(_),n=()=>I(t.matches);return n(),t.addEventListener?.("change",n),()=>t.removeEventListener?.("change",n)},[]),a.useEffect(()=>{if(typeof window>"u")return;let t=window.location.search;const n=()=>{window.location.search!==t&&(t=window.location.search,r(v()),c(k()),g(S()),b(y()),h(C()))};window.addEventListener("popstate",n),window.addEventListener("pageshow",n),window.addEventListener("focus",n);const L=window.setInterval(n,250);return()=>{window.removeEventListener("popstate",n),window.removeEventListener("pageshow",n),window.removeEventListener("focus",n),window.clearInterval(L)}},[]),e.jsx("div",{className:"min-h-screen bg-background-subtle text-foreground","data-diff-lab":!0,"data-diff-lab-fixture":i,"data-diff-lab-view":o,"data-diff-lab-requested-view":d,"data-diff-lab-inline":f,"data-diff-lab-whitespace":u,"data-diff-lab-wrap":l?"on":"off",children:e.jsxs("div",{className:"mx-auto flex min-h-screen max-w-[1180px] flex-col px-4 py-4",children:[e.jsxs("header",{className:"mb-3 flex flex-wrap items-center justify-between gap-3 border-b border-border/20 pb-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-semibold",children:"Diff Lab"}),e.jsx("div",{className:"mt-0.5 text-[11px] text-muted-foreground",children:"Fixed fixtures for iterating diff rendering without app auth, PWA state, or live Git data."})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("select",{value:i,onChange:t=>r(t.target.value),"aria-label":"Fixture",className:"h-8 rounded-md border border-border/30 bg-surface px-2 text-xs text-foreground outline-none",children:R.map(([t,n])=>e.jsx("option",{value:t,children:n.label},t))}),e.jsxs("div",{className:"inline-flex h-8 overflow-hidden rounded-full bg-surface-2 p-0.5",children:[e.jsx("button",{type:"button",onClick:()=>c("unified"),"aria-pressed":o==="unified",className:`rounded-full px-3 text-xs font-semibold ${o==="unified"?"bg-surface-elevated text-foreground":"text-muted-foreground"}`,children:"Unified"}),e.jsx("button",{type:"button",onClick:()=>c("split"),disabled:!m,"aria-pressed":o==="split",className:`rounded-full px-3 text-xs font-semibold ${o==="split"?"bg-surface-elevated text-foreground":"text-muted-foreground"} disabled:cursor-not-allowed disabled:opacity-40`,children:"Split"})]}),e.jsx("div",{className:"inline-flex h-8 overflow-hidden rounded-full bg-surface-2 p-0.5",children:["none","words","chars"].map(t=>e.jsx("button",{type:"button",onClick:()=>g(t),className:`rounded-full px-3 text-xs font-semibold ${f===t?"bg-surface-elevated text-foreground":"text-muted-foreground"}`,children:t},t))}),e.jsxs("select",{"aria-label":"Inline whitespace",value:u,onChange:t=>h(t.target.value),className:"h-8 rounded-md bg-surface-2 px-2 text-xs text-foreground",children:[e.jsx("option",{value:"default",children:"Compare whitespace"}),e.jsx("option",{value:"trim",children:"Ignore trailing spaces"}),e.jsx("option",{value:"ignore",children:"Ignore whitespace"})]}),e.jsxs("button",{type:"button",onClick:()=>b(t=>!t),className:`h-8 rounded-full px-3 text-xs font-semibold ${l?"bg-primary/15 text-primary":"bg-surface-2 text-muted-foreground"}`,children:["Wrap ",l?"on":"off"]})]})]}),e.jsx("main",{className:"min-h-0 flex-1 overflow-auto rounded-lg border border-border/20 bg-surface",children:e.jsx(T,{onInsertDiffReference:(t,n)=>N({label:t,text:n}),filePath:s.path,repoRoot:"/tmp/termdock-diff-lab",changedFile:{path:s.path,absolutePath:`/tmp/termdock-diff-lab/${s.path}`,repoRoot:"/tmp/termdock-diff-lab",status:"modified",staged:!1,unstaged:!0,untracked:!1,tracked:!0,canStage:!1,canUnstage:!1,canStash:!1,canRestoreWorktree:!1},diffOverride:s.diff,diffOptions:{whitespace:u},oldSourceOverride:s.oldSource,active:!0,wrap:l,embedded:new URLSearchParams(window.location.search).get("embedded")==="1",viewType:o,inlineMode:f})}),e.jsxs("section",{className:"mt-3 rounded-lg border border-border/20 bg-surface p-3",children:[e.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-[0.12em] text-muted-foreground",children:"Inserted reference"}),e.jsx("div",{className:"mt-1 font-mono text-[11px] text-foreground","data-diff-lab-inserted-label":!0,children:x?.label??""}),e.jsx("pre",{className:"mt-1 max-h-64 overflow-auto whitespace-pre-wrap break-all rounded border border-border/20 bg-surface-2 p-2 font-mono text-[11px] text-foreground","data-diff-lab-inserted":!0,children:x?.text??""})]})]})})}export{p as DIFF_FIXTURES,A as DiffLab};
|
|
Binary file
|
|
Binary file
|