termdock 1.4.358 → 1.4.359
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-COoPljXi.js → AndroidMirrorView-SpjoKKYZ.js} +3 -3
- package/dist/client/assets/AndroidMirrorView-SpjoKKYZ.js.br +0 -0
- package/dist/client/assets/AndroidMirrorView-SpjoKKYZ.js.gz +0 -0
- package/dist/client/assets/App-BXyQinZW.js +178 -0
- package/dist/client/assets/App-BXyQinZW.js.br +0 -0
- package/dist/client/assets/App-BXyQinZW.js.gz +0 -0
- package/dist/client/assets/{ArchitecturePanel-B51eVL3I.js → ArchitecturePanel-DUwBHRpo.js} +4 -4
- package/dist/client/assets/ArchitecturePanel-DUwBHRpo.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-DUwBHRpo.js.gz +0 -0
- package/dist/client/assets/{ChangeWalkthroughPanel-ZGMybE0m.js → ChangeWalkthroughPanel-CVBQbHpG.js} +2 -2
- package/dist/client/assets/ChangeWalkthroughPanel-CVBQbHpG.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-CVBQbHpG.js.gz +0 -0
- package/dist/client/assets/{ChatRichContent-KkN7aIGv.js → ChatRichContent-BI5iYvRf.js} +3 -3
- package/dist/client/assets/ChatRichContent-BI5iYvRf.js.br +0 -0
- package/dist/client/assets/ChatRichContent-BI5iYvRf.js.gz +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-qYw6Sv3a.js +1 -0
- package/dist/client/assets/CollaborationMainWorkspace-qYw6Sv3a.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-qYw6Sv3a.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-DLxe6Zyf.js +1 -0
- package/dist/client/assets/{ComputerControlView-CnaeZBuh.js → ComputerControlView-Dmmuxujg.js} +3 -3
- package/dist/client/assets/ComputerControlView-Dmmuxujg.js.br +0 -0
- package/dist/client/assets/ComputerControlView-Dmmuxujg.js.gz +0 -0
- package/dist/client/assets/{DagPlayground-E7wKGgTF.js → DagPlayground-D1FkpA0b.js} +1 -1
- package/dist/client/assets/DagPlayground-D1FkpA0b.js.br +0 -0
- package/dist/client/assets/DagPlayground-D1FkpA0b.js.gz +0 -0
- package/dist/client/assets/{DiffLab-BMXY4mRl.js → DiffLab-C4y3Mu1m.js} +1 -1
- package/dist/client/assets/DiffLab-C4y3Mu1m.js.br +0 -0
- package/dist/client/assets/DiffLab-C4y3Mu1m.js.gz +0 -0
- package/dist/client/assets/{DiffReview-DHi_V-SX.js → DiffReview-DVaOXs0z.js} +1 -1
- package/dist/client/assets/DiffReview-DVaOXs0z.js.br +0 -0
- package/dist/client/assets/DiffReview-DVaOXs0z.js.gz +0 -0
- package/dist/client/assets/{DiffReviewLab-nhoosNZM.js → DiffReviewLab-C49n0eG5.js} +1 -1
- package/dist/client/assets/DiffReviewLab-C49n0eG5.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-C49n0eG5.js.gz +0 -0
- package/dist/client/assets/{DiffViewer-CyDc8WOB.js → DiffViewer-C_YHDsAf.js} +1 -1
- package/dist/client/assets/DiffViewer-C_YHDsAf.js.br +0 -0
- package/dist/client/assets/DiffViewer-C_YHDsAf.js.gz +0 -0
- package/dist/client/assets/{GitLoadingSkeleton-RRbTeMuA.js → GitLoadingSkeleton-Bm1UqrDS.js} +1 -1
- package/dist/client/assets/GitLoadingSkeleton-Bm1UqrDS.js.br +0 -0
- package/dist/client/assets/GitLoadingSkeleton-Bm1UqrDS.js.gz +0 -0
- package/dist/client/assets/{Markdown-Ip0FYCJ1.js → Markdown-CohgsLqO.js} +2 -2
- package/dist/client/assets/Markdown-CohgsLqO.js.br +0 -0
- package/dist/client/assets/Markdown-CohgsLqO.js.gz +0 -0
- package/dist/client/assets/{ModelPreview-DuwBl4st.js → ModelPreview-a0HGTXuA.js} +1 -1
- package/dist/client/assets/ModelPreview-a0HGTXuA.js.br +0 -0
- package/dist/client/assets/ModelPreview-a0HGTXuA.js.gz +0 -0
- package/dist/client/assets/{RecordingSaveDialog-Czkjuaeu.js → RecordingSaveDialog-BKec4LtD.js} +1 -1
- package/dist/client/assets/RecordingSaveDialog-BKec4LtD.js.br +0 -0
- package/dist/client/assets/RecordingSaveDialog-BKec4LtD.js.gz +0 -0
- package/dist/client/assets/{RightSidebar-BvYh2_n2.js → RightSidebar-CxeEK1fi.js} +3 -3
- package/dist/client/assets/RightSidebar-CxeEK1fi.js.br +0 -0
- package/dist/client/assets/RightSidebar-CxeEK1fi.js.gz +0 -0
- package/dist/client/assets/SessionChatView-Bk5DIrLU.js +20 -0
- package/dist/client/assets/SessionChatView-Bk5DIrLU.js.br +0 -0
- package/dist/client/assets/SessionChatView-Bk5DIrLU.js.gz +0 -0
- package/dist/client/assets/{SessionResourceSidebar-D-VXNdmE.js → SessionResourceSidebar-D8kJh4k1.js} +2 -2
- package/dist/client/assets/SessionResourceSidebar-D8kJh4k1.js.br +0 -0
- package/dist/client/assets/SessionResourceSidebar-D8kJh4k1.js.gz +0 -0
- package/dist/client/assets/{TodoWorkspace-CCL-wZTu.js → TodoWorkspace-ByyjDuIT.js} +1 -1
- package/dist/client/assets/TodoWorkspace-ByyjDuIT.js.br +0 -0
- package/dist/client/assets/TodoWorkspace-ByyjDuIT.js.gz +0 -0
- package/dist/client/assets/{abnfDiagram-VCTEODGH-CdEUK_s_.js → abnfDiagram-VCTEODGH-9jetKIey.js} +1 -1
- package/dist/client/assets/abnfDiagram-VCTEODGH-9jetKIey.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-9jetKIey.js.gz +0 -0
- package/dist/client/assets/app-CjIJnhRC.js +37 -0
- package/dist/client/assets/app-CjIJnhRC.js.br +0 -0
- package/dist/client/assets/app-CjIJnhRC.js.gz +0 -0
- package/dist/client/assets/{arc-Dmbeqzc-.js → arc-D_lxie76.js} +1 -1
- package/dist/client/assets/arc-D_lxie76.js.br +0 -0
- package/dist/client/assets/arc-D_lxie76.js.gz +0 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-CZcdXQrP.js → architectureDiagram-5GKGNRK7-IgNQYras.js} +1 -1
- package/dist/client/assets/architectureDiagram-5GKGNRK7-IgNQYras.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-IgNQYras.js.gz +0 -0
- package/dist/client/assets/{arrow-down-Ty3zwcgl.js → arrow-down-Dd0wVXN3.js} +1 -1
- package/dist/client/assets/{blockDiagram-I7D4REHJ-D9jFhXcb.js → blockDiagram-I7D4REHJ-Rzz3EdOw.js} +1 -1
- package/dist/client/assets/blockDiagram-I7D4REHJ-Rzz3EdOw.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-Rzz3EdOw.js.gz +0 -0
- package/dist/client/assets/{c4Diagram-7LVT6UL2-c9o0rNTP.js → c4Diagram-7LVT6UL2-BDooBgn9.js} +1 -1
- package/dist/client/assets/c4Diagram-7LVT6UL2-BDooBgn9.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-BDooBgn9.js.gz +0 -0
- package/dist/client/assets/channel-DCcxp7JL.js +1 -0
- package/dist/client/assets/{chevron-left-CVjGQZf0.js → chevron-left-gddD8oDV.js} +1 -1
- package/dist/client/assets/{chunk-2Q5K7J3B-Bl_5wWZ4.js → chunk-2Q5K7J3B-CaRGzemz.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-D9XQn27m.js → chunk-5VM5RSS4-DwFHSPNj.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-DWyskKWD.js → chunk-F27PBJKO-DURRKDWg.js} +1 -1
- package/dist/client/assets/chunk-F27PBJKO-DURRKDWg.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-DURRKDWg.js.gz +0 -0
- package/dist/client/assets/{chunk-IMKFNOWR-DrWbExPc.js → chunk-IMKFNOWR-DiI7TuKc.js} +1 -1
- package/dist/client/assets/chunk-IMKFNOWR-DiI7TuKc.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-DiI7TuKc.js.gz +0 -0
- package/dist/client/assets/{chunk-JWPE2WC7-B7O1zrh6.js → chunk-JWPE2WC7-Cg9jVt2w.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-D7TlizKK.js → chunk-POPQ4Y6H-BnV4j8Y0.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-DNK10F6v.js → chunk-SVP7TREG-DO0KH1lL.js} +1 -1
- package/dist/client/assets/chunk-SVP7TREG-DO0KH1lL.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-DO0KH1lL.js.gz +0 -0
- package/dist/client/assets/{chunk-TICWLB2K-zVD9YIYY.js → chunk-TICWLB2K-DOcrTdPc.js} +1 -1
- package/dist/client/assets/chunk-TICWLB2K-DOcrTdPc.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-DOcrTdPc.js.gz +0 -0
- package/dist/client/assets/{chunk-XXDRQBXY-bRScHSGz.js → chunk-XXDRQBXY-DR-p5Zy1.js} +1 -1
- package/dist/client/assets/{circle-BIJQEbCa.js → circle-DhTLygNL.js} +1 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-B34NqDOF.js +1 -0
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-B34NqDOF.js +1 -0
- package/dist/client/assets/{clipboard-DV8t7tww.js → clipboard-HGyJkE2L.js} +1 -1
- package/dist/client/assets/clipboardText-DN1ZamHf.js +1 -0
- package/dist/client/assets/clipboardText-DN1ZamHf.js.br +0 -0
- package/dist/client/assets/clipboardText-DN1ZamHf.js.gz +0 -0
- package/dist/client/assets/clipboardText-DfV7Sfy1.css +1 -0
- package/dist/client/assets/clipboardText-DfV7Sfy1.css.br +0 -0
- package/dist/client/assets/clipboardText-DfV7Sfy1.css.gz +0 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-Bf6IObhf.js → cose-bilkent-JH36ORCC-DAd_FgYn.js} +1 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-DAd_FgYn.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-DAd_FgYn.js.gz +0 -0
- package/dist/client/assets/{cynefin-OW5HDTMX-DAtjde93.js → cynefin-OW5HDTMX-gLgHGAg1.js} +1 -1
- package/dist/client/assets/cynefin-OW5HDTMX-gLgHGAg1.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-gLgHGAg1.js.gz +0 -0
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-Bwoin99V.js → cynefinDiagram-5FMLGOSQ-CfZcuwNN.js} +1 -1
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CfZcuwNN.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CfZcuwNN.js.gz +0 -0
- package/dist/client/assets/{dagre-GXQ25YYZ-dxPzSob9.js → dagre-GXQ25YYZ-D4hv95zo.js} +1 -1
- package/dist/client/assets/dagre-GXQ25YYZ-D4hv95zo.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-D4hv95zo.js.gz +0 -0
- package/dist/client/assets/{diagram-S7CK7UJ4-BXdiLivz.js → diagram-S7CK7UJ4-C6QPCa-U.js} +1 -1
- package/dist/client/assets/diagram-S7CK7UJ4-C6QPCa-U.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-C6QPCa-U.js.gz +0 -0
- package/dist/client/assets/{diagram-UQ7AKVKN-DXveP3fg.js → diagram-UQ7AKVKN-BGJFrMY0.js} +1 -1
- package/dist/client/assets/diagram-UQ7AKVKN-BGJFrMY0.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-BGJFrMY0.js.gz +0 -0
- package/dist/client/assets/{diagram-VSXAHHWV-BAZtoQue.js → diagram-VSXAHHWV-N_wUYR-P.js} +1 -1
- package/dist/client/assets/diagram-VSXAHHWV-N_wUYR-P.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-N_wUYR-P.js.gz +0 -0
- package/dist/client/assets/{diagram-VX7I27RA-Bhc7cKpk.js → diagram-VX7I27RA-TTIdEQxJ.js} +1 -1
- package/dist/client/assets/diagram-VX7I27RA-TTIdEQxJ.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-TTIdEQxJ.js.gz +0 -0
- package/dist/client/assets/{diagram-Z3DM3KII-DWIa_F-y.js → diagram-Z3DM3KII-B5T47CF8.js} +1 -1
- package/dist/client/assets/diagram-Z3DM3KII-B5T47CF8.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-B5T47CF8.js.gz +0 -0
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-B3LDILSm.js → ebnfDiagram-PWID7BFC-BCVWN-6S.js} +1 -1
- package/dist/client/assets/ebnfDiagram-PWID7BFC-BCVWN-6S.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-BCVWN-6S.js.gz +0 -0
- package/dist/client/assets/{erDiagram-RLTQ6QDP-Cfu95bMX.js → erDiagram-RLTQ6QDP-carErB-Q.js} +1 -1
- package/dist/client/assets/erDiagram-RLTQ6QDP-carErB-Q.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-carErB-Q.js.gz +0 -0
- package/dist/client/assets/{external-link-DodqgrCc.js → external-link-BB8IuvZq.js} +1 -1
- package/dist/client/assets/{flowDiagram-HODETNUW-DVtO6aQE.js → flowDiagram-HODETNUW-Cntq-S4F.js} +1 -1
- package/dist/client/assets/flowDiagram-HODETNUW-Cntq-S4F.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-Cntq-S4F.js.gz +0 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-Bh1TvYzb.js → ganttDiagram-EL5Y4UJY-CDSctkKx.js} +1 -1
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CDSctkKx.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CDSctkKx.js.gz +0 -0
- package/dist/client/assets/{git-compare-KkbucDhN.js → git-compare-9RABXSu5.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-BKbRxPsF.js → gitGraphDiagram-WWUBYQGX-bQpGwghF.js} +1 -1
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-bQpGwghF.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-bQpGwghF.js.gz +0 -0
- package/dist/client/assets/index-VX_KQ4Kx.css +1 -0
- package/dist/client/assets/index-VX_KQ4Kx.css.br +0 -0
- package/dist/client/assets/index-VX_KQ4Kx.css.gz +0 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-CLhO8B16.js → infoDiagram-27XIBGKW-RiSy10Xu.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-BwchGTP9.js → ishikawaDiagram-5VMMS53U-aIPkdxQG.js} +1 -1
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-aIPkdxQG.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-aIPkdxQG.js.gz +0 -0
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-eWBpuyMm.js → journeyDiagram-3NMN7TZE-B_qkh4CF.js} +1 -1
- package/dist/client/assets/journeyDiagram-3NMN7TZE-B_qkh4CF.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-B_qkh4CF.js.gz +0 -0
- package/dist/client/assets/{kanban-definition-UXKFOSKX-Sik-RHYc.js → kanban-definition-UXKFOSKX-Cqg9G98I.js} +1 -1
- package/dist/client/assets/kanban-definition-UXKFOSKX-Cqg9G98I.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-Cqg9G98I.js.gz +0 -0
- package/dist/client/assets/{layout-BJX2CDWF.js → layout-DsxXkS4m.js} +1 -1
- package/dist/client/assets/layout-DsxXkS4m.js.br +0 -0
- package/dist/client/assets/layout-DsxXkS4m.js.gz +0 -0
- package/dist/client/assets/{linear-0FKHr918.js → linear-YxCELrSW.js} +1 -1
- package/dist/client/assets/linear-YxCELrSW.js.br +0 -0
- package/dist/client/assets/linear-YxCELrSW.js.gz +0 -0
- package/dist/client/assets/{link-DWUQqMDL.js → link-C7B3CQkJ.js} +1 -1
- package/dist/client/assets/link-C7B3CQkJ.js.br +0 -0
- package/dist/client/assets/link-C7B3CQkJ.js.gz +0 -0
- package/dist/client/assets/{list-tree-DxdLnXUB.js → list-tree-CA4WMncL.js} +1 -1
- package/dist/client/assets/{maximize-2-Clx4ktqB.js → maximize-2-C2r-kY_c.js} +1 -1
- package/dist/client/assets/{mermaid.core-DWoaNsig.js → mermaid.core-BX4Yidib.js} +5 -5
- package/dist/client/assets/mermaid.core-BX4Yidib.js.br +0 -0
- package/dist/client/assets/mermaid.core-BX4Yidib.js.gz +0 -0
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-kFqW8-1C.js → mindmap-definition-YA3MSWOX-Bj2fCwN5.js} +1 -1
- package/dist/client/assets/mindmap-definition-YA3MSWOX-Bj2fCwN5.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-Bj2fCwN5.js.gz +0 -0
- package/dist/client/assets/{passwordBootstrap-ZDVK8UPE.js → passwordBootstrap-CPlia7G3.js} +1 -1
- package/dist/client/assets/passwordBootstrap-CPlia7G3.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-CPlia7G3.js.gz +0 -0
- package/dist/client/assets/{pegDiagram-XKGWAZYB-CndGmUtZ.js → pegDiagram-XKGWAZYB-DCJ-5qA2.js} +1 -1
- package/dist/client/assets/pegDiagram-XKGWAZYB-DCJ-5qA2.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-DCJ-5qA2.js.gz +0 -0
- package/dist/client/assets/{pieDiagram-E7YTZNPT-Q550203T.js → pieDiagram-E7YTZNPT-DFxDtRlY.js} +1 -1
- package/dist/client/assets/pieDiagram-E7YTZNPT-DFxDtRlY.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-DFxDtRlY.js.gz +0 -0
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-BrjlUGzZ.js → quadrantDiagram-AXDQQJYC-BlwkSa_A.js} +1 -1
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-BlwkSa_A.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-BlwkSa_A.js.gz +0 -0
- package/dist/client/assets/{quote-B9G-yF_k.js → quote-DYO_qxPl.js} +1 -1
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-CSqOaX_w.js → railroadDiagram-O6MQD6OU-DjtRafKE.js} +1 -1
- package/dist/client/assets/railroadDiagram-O6MQD6OU-DjtRafKE.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-DjtRafKE.js.gz +0 -0
- package/dist/client/assets/{rdpSession-DdqSmi-Z.js → rdpSession-De-iS1CL.js} +1 -1
- package/dist/client/assets/rdpSession-De-iS1CL.js.br +0 -0
- package/dist/client/assets/rdpSession-De-iS1CL.js.gz +0 -0
- package/dist/client/assets/{referenceSelection-0uCpJjt2.js → referenceSelection-Cb24Tb01.js} +1 -1
- package/dist/client/assets/referenceSelection-Cb24Tb01.js.br +0 -0
- package/dist/client/assets/referenceSelection-Cb24Tb01.js.gz +0 -0
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-NGPth3Pf.js → requirementDiagram-BXWQKSXE-B1skd4Aj.js} +1 -1
- package/dist/client/assets/requirementDiagram-BXWQKSXE-B1skd4Aj.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-B1skd4Aj.js.gz +0 -0
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-CbxpJ6iI.js → sankeyDiagram-P5KCCOFB-2hK1yoP1.js} +1 -1
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-2hK1yoP1.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-2hK1yoP1.js.gz +0 -0
- package/dist/client/assets/{search-DAQ_AOVP.js → search-DwVySubQ.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-D3gJOK25.js → sequenceDiagram-WJ2MYXX4-DIqwThjL.js} +1 -1
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DIqwThjL.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DIqwThjL.js.gz +0 -0
- package/dist/client/assets/{sizeCapture-INFHLROL-D4D1KI0n.js → sizeCapture-INFHLROL-CwYlm-u0.js} +1 -1
- package/dist/client/assets/sizeCapture-INFHLROL-CwYlm-u0.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-CwYlm-u0.js.gz +0 -0
- package/dist/client/assets/{stateDiagram-D77RDMKH-BjtgjBg5.js → stateDiagram-D77RDMKH-D8Zz2h7U.js} +1 -1
- package/dist/client/assets/stateDiagram-D77RDMKH-D8Zz2h7U.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-D8Zz2h7U.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-e3_uvNTv.js +1 -0
- package/dist/client/assets/{sun-DvwMJkda.js → sun-E4HSsh7y.js} +1 -1
- package/dist/client/assets/{swimlanes-42K2YHIH-C17jwdFo.js → swimlanes-42K2YHIH-ChciX-e9.js} +1 -1
- package/dist/client/assets/swimlanes-42K2YHIH-ChciX-e9.js.br +0 -0
- package/dist/client/assets/{swimlanes-42K2YHIH-C17jwdFo.js.gz → swimlanes-42K2YHIH-ChciX-e9.js.gz} +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-CnK3uMUF.js +8 -0
- package/dist/client/assets/{swiper-BaumVgFd.js → swiper-CDQegRag.js} +1 -1
- package/dist/client/assets/swiper-CDQegRag.js.br +0 -0
- package/dist/client/assets/swiper-CDQegRag.js.gz +0 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-CtdHmPoC.js → timeline-definition-24CTP7MA-Dm-MR8Y4.js} +1 -1
- package/dist/client/assets/timeline-definition-24CTP7MA-Dm-MR8Y4.js.br +0 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-CtdHmPoC.js.gz → timeline-definition-24CTP7MA-Dm-MR8Y4.js.gz} +0 -0
- package/dist/client/assets/{triangle-alert-D-tt7pA2.js → triangle-alert-BM5V0mRC.js} +1 -1
- package/dist/client/assets/{unplug-BQxOculv.js → unplug-Dp1XvCMt.js} +1 -1
- package/dist/client/assets/{use-gesture-react.esm-CM42s15B.js → use-gesture-react.esm-BHdJ-ZCI.js} +1 -1
- package/dist/client/assets/use-gesture-react.esm-BHdJ-ZCI.js.br +0 -0
- package/dist/client/assets/use-gesture-react.esm-BHdJ-ZCI.js.gz +0 -0
- package/dist/client/assets/{vennDiagram-4TSXK5OY-DhwCFaVe.js → vennDiagram-4TSXK5OY-DIjmm5vd.js} +1 -1
- package/dist/client/assets/vennDiagram-4TSXK5OY-DIjmm5vd.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-DIjmm5vd.js.gz +0 -0
- package/dist/client/assets/{videoCompression-BFhMaMl7.js → videoCompression-DPpn-S8r.js} +1 -1
- package/dist/client/assets/videoCompression-DPpn-S8r.js.br +0 -0
- package/dist/client/assets/videoCompression-DPpn-S8r.js.gz +0 -0
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-BP4Z-QQ4.js → wardleyDiagram-VM6X3IG4-Dxxn-JlX.js} +1 -1
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-Dxxn-JlX.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-Dxxn-JlX.js.gz +0 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-CEPWf1tk.js → xychartDiagram-S5SC5T6Z-B7fqiF5T.js} +1 -1
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-B7fqiF5T.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-B7fqiF5T.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.js +1 -1
- package/dist/client/sw.js.br +0 -0
- package/dist/client/sw.js.gz +0 -0
- package/dist/server/agent/collaborationPrompt.js +2 -0
- package/dist/server/utils/sessionDisplayName.js +7 -0
- package/package.json +2 -2
- package/runtime-manifest.json +3 -3
- package/dist/client/assets/AndroidMirrorView-COoPljXi.js.br +0 -0
- package/dist/client/assets/AndroidMirrorView-COoPljXi.js.gz +0 -0
- package/dist/client/assets/App-7BA7Jt-V.js +0 -178
- package/dist/client/assets/App-7BA7Jt-V.js.br +0 -0
- package/dist/client/assets/App-7BA7Jt-V.js.gz +0 -0
- package/dist/client/assets/ArchitecturePanel-B51eVL3I.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-B51eVL3I.js.gz +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-ZGMybE0m.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-ZGMybE0m.js.gz +0 -0
- package/dist/client/assets/ChatRichContent-KkN7aIGv.js.br +0 -0
- package/dist/client/assets/ChatRichContent-KkN7aIGv.js.gz +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-BVeBgGMT.js +0 -1
- package/dist/client/assets/CollaborationMainWorkspace-BVeBgGMT.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-BVeBgGMT.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-C3Od6xQy.js +0 -1
- package/dist/client/assets/ComputerControlView-CnaeZBuh.js.br +0 -0
- package/dist/client/assets/ComputerControlView-CnaeZBuh.js.gz +0 -0
- package/dist/client/assets/DagPlayground-E7wKGgTF.js.br +0 -0
- package/dist/client/assets/DagPlayground-E7wKGgTF.js.gz +0 -0
- package/dist/client/assets/DiffLab-BMXY4mRl.js.br +0 -0
- package/dist/client/assets/DiffLab-BMXY4mRl.js.gz +0 -0
- package/dist/client/assets/DiffReview-DHi_V-SX.js.br +0 -0
- package/dist/client/assets/DiffReview-DHi_V-SX.js.gz +0 -0
- package/dist/client/assets/DiffReviewLab-nhoosNZM.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-nhoosNZM.js.gz +0 -0
- package/dist/client/assets/DiffViewer-CyDc8WOB.js.br +0 -0
- package/dist/client/assets/DiffViewer-CyDc8WOB.js.gz +0 -0
- package/dist/client/assets/GitLoadingSkeleton-RRbTeMuA.js.br +0 -0
- package/dist/client/assets/GitLoadingSkeleton-RRbTeMuA.js.gz +0 -0
- package/dist/client/assets/Markdown-Ip0FYCJ1.js.br +0 -0
- package/dist/client/assets/Markdown-Ip0FYCJ1.js.gz +0 -0
- package/dist/client/assets/ModelPreview-DuwBl4st.js.br +0 -0
- package/dist/client/assets/ModelPreview-DuwBl4st.js.gz +0 -0
- package/dist/client/assets/RecordingSaveDialog-Czkjuaeu.js.br +0 -0
- package/dist/client/assets/RecordingSaveDialog-Czkjuaeu.js.gz +0 -0
- package/dist/client/assets/RightSidebar-BvYh2_n2.js.br +0 -0
- package/dist/client/assets/RightSidebar-BvYh2_n2.js.gz +0 -0
- package/dist/client/assets/SessionChatView-hFOVLdHC.js +0 -13
- package/dist/client/assets/SessionChatView-hFOVLdHC.js.br +0 -0
- package/dist/client/assets/SessionChatView-hFOVLdHC.js.gz +0 -0
- package/dist/client/assets/SessionResourceSidebar-D-VXNdmE.js.br +0 -0
- package/dist/client/assets/SessionResourceSidebar-D-VXNdmE.js.gz +0 -0
- package/dist/client/assets/TodoWorkspace-CCL-wZTu.js.br +0 -0
- package/dist/client/assets/TodoWorkspace-CCL-wZTu.js.gz +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-CdEUK_s_.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-CdEUK_s_.js.gz +0 -0
- package/dist/client/assets/app-DZ6mCJiW.js +0 -37
- package/dist/client/assets/app-DZ6mCJiW.js.br +0 -0
- package/dist/client/assets/app-DZ6mCJiW.js.gz +0 -0
- package/dist/client/assets/arc-Dmbeqzc-.js.br +0 -0
- package/dist/client/assets/arc-Dmbeqzc-.js.gz +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CZcdXQrP.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CZcdXQrP.js.gz +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-D9jFhXcb.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-D9jFhXcb.js.gz +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-c9o0rNTP.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-c9o0rNTP.js.gz +0 -0
- package/dist/client/assets/channel-BzD84hIE.js +0 -1
- package/dist/client/assets/chunk-F27PBJKO-DWyskKWD.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-DWyskKWD.js.gz +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-DrWbExPc.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-DrWbExPc.js.gz +0 -0
- package/dist/client/assets/chunk-SVP7TREG-DNK10F6v.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-DNK10F6v.js.gz +0 -0
- package/dist/client/assets/chunk-TICWLB2K-zVD9YIYY.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-zVD9YIYY.js.gz +0 -0
- package/dist/client/assets/classDiagram-ZZMXUADV-DNwfONVW.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-DNwfONVW.js +0 -1
- package/dist/client/assets/clipboardText-C4QKbGHg.css +0 -1
- package/dist/client/assets/clipboardText-C4QKbGHg.css.br +0 -0
- package/dist/client/assets/clipboardText-C4QKbGHg.css.gz +0 -0
- package/dist/client/assets/clipboardText-DoB9NjH8.js +0 -1
- package/dist/client/assets/clipboardText-DoB9NjH8.js.br +0 -0
- package/dist/client/assets/clipboardText-DoB9NjH8.js.gz +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-Bf6IObhf.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-Bf6IObhf.js.gz +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-DAtjde93.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-DAtjde93.js.gz +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Bwoin99V.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Bwoin99V.js.gz +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-dxPzSob9.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-dxPzSob9.js.gz +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-BXdiLivz.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-BXdiLivz.js.gz +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-DXveP3fg.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-DXveP3fg.js.gz +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-BAZtoQue.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-BAZtoQue.js.gz +0 -0
- package/dist/client/assets/diagram-VX7I27RA-Bhc7cKpk.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-Bhc7cKpk.js.gz +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-DWIa_F-y.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-DWIa_F-y.js.gz +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-B3LDILSm.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-B3LDILSm.js.gz +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-Cfu95bMX.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-Cfu95bMX.js.gz +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-DVtO6aQE.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-DVtO6aQE.js.gz +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-Bh1TvYzb.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-Bh1TvYzb.js.gz +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BKbRxPsF.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BKbRxPsF.js.gz +0 -0
- package/dist/client/assets/index-DEAMSl55.css +0 -1
- package/dist/client/assets/index-DEAMSl55.css.br +0 -0
- package/dist/client/assets/index-DEAMSl55.css.gz +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-BwchGTP9.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-BwchGTP9.js.gz +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-eWBpuyMm.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-eWBpuyMm.js.gz +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-Sik-RHYc.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-Sik-RHYc.js.gz +0 -0
- package/dist/client/assets/layout-BJX2CDWF.js.br +0 -0
- package/dist/client/assets/layout-BJX2CDWF.js.gz +0 -0
- package/dist/client/assets/linear-0FKHr918.js.br +0 -0
- package/dist/client/assets/linear-0FKHr918.js.gz +0 -0
- package/dist/client/assets/link-DWUQqMDL.js.br +0 -0
- package/dist/client/assets/link-DWUQqMDL.js.gz +0 -0
- package/dist/client/assets/mermaid.core-DWoaNsig.js.br +0 -0
- package/dist/client/assets/mermaid.core-DWoaNsig.js.gz +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-kFqW8-1C.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-kFqW8-1C.js.gz +0 -0
- package/dist/client/assets/passwordBootstrap-ZDVK8UPE.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-ZDVK8UPE.js.gz +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-CndGmUtZ.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-CndGmUtZ.js.gz +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-Q550203T.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-Q550203T.js.gz +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-BrjlUGzZ.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-BrjlUGzZ.js.gz +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-CSqOaX_w.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-CSqOaX_w.js.gz +0 -0
- package/dist/client/assets/rdpSession-DdqSmi-Z.js.br +0 -0
- package/dist/client/assets/rdpSession-DdqSmi-Z.js.gz +0 -0
- package/dist/client/assets/referenceSelection-0uCpJjt2.js.br +0 -0
- package/dist/client/assets/referenceSelection-0uCpJjt2.js.gz +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-NGPth3Pf.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-NGPth3Pf.js.gz +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-CbxpJ6iI.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-CbxpJ6iI.js.gz +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-D3gJOK25.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-D3gJOK25.js.gz +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-D4D1KI0n.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-D4D1KI0n.js.gz +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-BjtgjBg5.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-BjtgjBg5.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BkFsvhZ0.js +0 -1
- package/dist/client/assets/swimlanes-42K2YHIH-C17jwdFo.js.br +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-Bcw2hbFj.js +0 -8
- package/dist/client/assets/swiper-BaumVgFd.js.br +0 -0
- package/dist/client/assets/swiper-BaumVgFd.js.gz +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-CtdHmPoC.js.br +0 -0
- package/dist/client/assets/use-gesture-react.esm-CM42s15B.js.br +0 -0
- package/dist/client/assets/use-gesture-react.esm-CM42s15B.js.gz +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-DhwCFaVe.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-DhwCFaVe.js.gz +0 -0
- package/dist/client/assets/videoCompression-BFhMaMl7.js.br +0 -0
- package/dist/client/assets/videoCompression-BFhMaMl7.js.gz +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-BP4Z-QQ4.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-BP4Z-QQ4.js.gz +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-CEPWf1tk.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-CEPWf1tk.js.gz +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Markdown-
|
|
2
|
-
import{a$ as gt,bz as At,ez as he,cq as e,a9 as Dt,n as et,dC as tt,dD as Mt,eA as Je,O as yt,a8 as Se,cG as Ft,C as Lt,L as Pt,R as jt,s as Tt,u as It,m as Ot,h as Te,Y as vt,e as Bt,c as Ht,g as wt,eK as dt,eP as _t}from"./app-DZ6mCJiW.js";import{b as s,r as Nt}from"./dnd-BCFAPC0L.js";import{k as Ve,p as Ie,A as kt,g as qt,H as Ut,h as Wt,c as Ue,a as fe,b as St,d as Jt,f as nt,l as Vt,n as Kt,i as Xt,D as Re,e as Yt}from"./link-DWUQqMDL.js";import{U as Zt,u as Gt,F as Qt}from"./RecordingSaveDialog-Czkjuaeu.js";import{L as er}from"./DiffViewer-CyDc8WOB.js";import{u as tr}from"./swiper-BaumVgFd.js";import rr from"./purify.es-4eNOHKSq.js";import{l as sr,i as nr}from"./Markdown-Ip0FYCJ1.js";import{e as ir}from"./AndroidMirrorView-COoPljXi.js";import{S as ar}from"./RightSidebar-BvYh2_n2.js";import{N as mt}from"./GitLoadingSkeleton-RRbTeMuA.js";import"./react-XDCjal2T.js";import"./terminal-DaiFCKy_.js";import"./use-gesture-react.esm-CM42s15B.js";import"./gestureArbiter-DszagC-d.js";import"./referenceSelection-0uCpJjt2.js";import"./git-compare-KkbucDhN.js";import"./list-tree-DxdLnXUB.js";import"./v4-EwEgHOG0.js";import"./unplug-BQxOculv.js";import"./circle-BIJQEbCa.js";import"./DiffReview-DHi_V-SX.js";import"./triangle-alert-D-tt7pA2.js";import"./ChangeWalkthroughPanel-ZGMybE0m.js";import"./chevron-left-CVjGQZf0.js";import"./maximize-2-Clx4ktqB.js";import"./search-DAQ_AOVP.js";import"./arrow-down-Ty3zwcgl.js";const lr=[["path",{d:"M17 7 7 17",key:"15tmo1"}],["path",{d:"M17 17H7V7",key:"1org7z"}]],cr=gt("arrow-down-left",lr);const or=[["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"}]],ur=gt("expand",or);function dr(r,o){const a=new Map,d={id:"all-perspectives",title:o,summary:r.summary,nodes:[],edges:[]};return r.perspectives.forEach((p,n)=>{const x=`perspective${n}`,g=new Map(p.nodes.map((u,l)=>[u.id,`${x}_node${l}`]));a.set(x,{perspective:p.id}),d.nodes.push({id:x,title:p.title,summary:p.summary,files:[],description:p.description});for(const u of p.nodes){const l=g.get(u.id);a.set(l,{perspective:p.id,node:u.id}),d.nodes.push({...u,id:l,parentId:u.parentId?g.get(u.parentId):x})}d.edges.push(...p.edges.map(u=>({...u,from:g.get(u.from),to:g.get(u.to)})))}),{view:d,references:a}}async function $e(r,o,a,d){const p=new URLSearchParams({root:r}),n=await fetch(`/api/terminal/architecture/${o}${d?"":`${o.includes("?")?"&":"?"}${p}`}`,{signal:a,cache:"no-store",...d?{method:"PUT",headers:{"Content-Type":"application/json","X-XSRF-TOKEN":await At()},body:JSON.stringify({root:r,...d})}:{}}),x=await n.json();if(!n.ok)throw new Error(x.error||`HTTP ${n.status}`);return x}async function mr(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"&&Ve(d)))].sort()}async function We(r,o,a){if(!Ve(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?Ie(JSON.stringify(d.document)):null,revision:typeof d.revision=="string"?d.revision:null}}async function hr(r,o,a,d,p,n,x){const g=await $e(r,"field",void 0,{file:o,perspective:a,node:d,field:p,value:n,revision:x});return Ie(JSON.stringify(g.document))}async function xr(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 pr(r,o){return $e(r,`bundle?${new URLSearchParams({file:o})}`)}async function fr(r,o,a){const d=await $e(r,"bundle",void 0,{bundle:o,revision:a});return Ie(JSON.stringify(d.document))}async function br(r,o,a,d){const p=await $e(r,"document",void 0,{file:o,document:a,...d!==void 0?{revision:d}:{}});return Ie(JSON.stringify(p.document))}const gr=s.lazy(()=>Dt(()=>import("./Markdown-Ip0FYCJ1.js").then(r=>r.a),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(r=>({default:r.Markdown})));function rt(r,o){return o?{description:"说明",diagram:"关系图源码",context:"上下文",constraint:"约束",concern:"问题与风险",todo:"待办",note:"备注"}[r]:{description:"Description",diagram:"Diagram source",context:"Context",constraint:"Constraints",concern:"Concerns",todo:"To do",note:"Notes"}[r]}function st({value:r,rootPath:o,onEdit:a,onOpenFile:d}){const{locale:p}=he(),n=p==="zh",x=r.description?.replace(/^#\s+([^\n]+)\n\s*/,(u,l)=>l.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(gr,{variant:"document",content:u,rootPath:o,onLocalLinkOpen:l=>d?.({path:o&&l.path.startsWith(`${o}/`)?l.path.slice(o.length+1):l.path})})});return e.jsxs("div",{className:"space-y-2",children:[x&&e.jsx("div",{className:"min-w-0 overflow-x-auto",children:g(x)}),kt.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,l])=>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(l)})]},u))})]})]})}function Qe({root:r,file:o,perspective:a,node:d,initialField:p,onSaved:n,onCancel:x}){const{locale:g}=he(),u=g==="zh",[l,P]=s.useState(null),[M,k]=s.useState(p),[C,E]=s.useState(""),[v,R]=s.useState(""),[z,S]=s.useState(""),[c,f]=s.useState(!1),h=s.useRef(!0),y=s.useRef(0);s.useEffect(()=>{h.current=!0;const A=++y.current;P(null),S("");const _=new AbortController;return We(r,o,_.signal).then(I=>{!_.signal.aborted&&A===y.current&&P(I)}).catch(I=>{!_.signal.aborted&&A===y.current&&S(String(I.message))}),()=>{h.current=!1,++y.current,_.abort()}},[r,o]),s.useEffect(()=>{const A=l?.document?.perspectives.find(W=>W.id===a),_=d?A?.nodes.find(W=>W.id===d):A;if(!_||!A)return;const I=_[M]??(M==="description"?_.summary:M==="diagram"?qt(A,d):"");E(I),R(I)},[l,a,d,M]);const $=C!==v;return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col gap-3",onSubmit:A=>{if(A.preventDefault(),!l||c||!$)return;const _=y.current;f(!0),S(""),hr(r,o,a,d,M,C,l.revision).then(I=>{h.current&&_===y.current&&n(I)}).catch(I=>{h.current&&_===y.current&&S(I.message)}).finally(()=>{h.current&&_===y.current&&f(!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:c||$,onChange:A=>k(A.target.value),children:kt.map(A=>e.jsx("option",{value:A,children:rt(A,u)},A))})]}),$&&e.jsx("p",{className:"text-xs text-muted-foreground",children:u?"保存当前字段后可切换字段。":"Save this field before switching fields."}),!l&&!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:!l||c,maxLength:1e5,value:C,onChange:A=>E(A.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:!l||c||!$,children:c?u?"保存中…":"Saving…":u?"保存":"Save"}),e.jsx("button",{type:"button",className:"min-h-11 rounded-lg px-4 text-sm hover:bg-surface-elevated",disabled:c,onClick:x,children:u?"取消":"Cancel"})]})]})}function yr({root:r,file:o,document:a,onLoaded:d}){const{locale:p}=he(),n=p==="zh",[x,g]=s.useState(""),[u,l]=s.useState(""),[P,M]=s.useState(!1),[k,C]=s.useState(null),[E,v]=s.useState(null),R=s.useRef(null),z=s.useRef(0);s.useEffect(()=>(z.current++,v(null),C(null),g(""),l(""),M(!1),()=>{z.current++}),[r,o]);async function S(f){const h=++z.current;M(!0),g(""),l("");try{await f(()=>h===z.current)}catch(y){h===z.current&&g(y instanceof Error?y.message:String(y))}finally{h===z.current&&M(!1)}}const c="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:c,type:"button",disabled:P||!a,onClick:()=>{S(async f=>{const h=await xr(r,o);f()&&C(h)})},children:[e.jsx(Ut,{size:14}),n?"更新差异":"Changes"]}),e.jsxs("button",{className:c,type:"button",disabled:P||!a,onClick:()=>{S(async()=>{await tt(new Blob([JSON.stringify(a,null,2)],{type:"application/json"}),"termdock-architecture.json")})},children:[e.jsx(et,{size:14}),"JSON"]}),e.jsxs("button",{className:c,type:"button",disabled:P||!a,onClick:()=>{S(async()=>{const f=await pr(r,o);await tt(new Blob([JSON.stringify(f,null,2)],{type:"application/json"}),"architecture.omm.json")})},children:[e.jsx(et,{size:14}),".omm"]}),e.jsxs("button",{className:c,type:"button",disabled:P,onClick:()=>R.current?.click(),children:[e.jsx(Zt,{size:14}),n?"导入":"Import"]}),e.jsxs("button",{className:c,type:"button",disabled:P||!a,onClick:()=>{S(async()=>{const f=Mt(),h=Wt(window.location.origin,{root:r,file:o,...f?{peerId:f.targetPeerId,serviceName:f.serviceName}:{}});await navigator.clipboard.writeText(h),l(n?"链接已复制,打开时需要登录此 Termdock 服务。":"Link copied. Sign in to this Termdock service to view it.")})},children:[e.jsx(er,{size:14}),n?"复制查看链接":"Copy viewer link"]})]}),e.jsx("input",{ref:R,hidden:!0,type:"file",accept:".json,application/json",onChange:f=>{const h=f.target.files?.[0];f.target.value="",h&&S(async y=>{if(h.size>5e6)throw new Error(n?"文档超过 5 MB。":"Document exceeds 5 MB.");const $=await h.text();if(!y())return;const A=JSON.parse($);if(A?.format==="termdock-omm-bundle"){const Y=await We(r,".omm");if(!y())return;v({name:h.name,value:A,file:".omm",revision:Y.revision});return}const _=Ie($),I=_.analysis?Ue(_.analysis):fe,W=await We(r,I);y()&&v({name:h.name,value:_,file:I,revision:W.revision})})}}),E&&e.jsxs("div",{className:"my-2 rounded-lg bg-surface-2 p-3 text-xs",children:[e.jsxs("p",{className:"break-all",children:[E.name," → ",E.file]}),e.jsx("p",{className:"mt-1 text-muted-foreground",children:E.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:`${c} text-primary`,disabled:P,type:"button",onClick:()=>{S(async f=>{const h=E.file===".omm"?await fr(r,E.value,E.revision):await br(r,E.file,E.value,E.revision);f()&&(v(null),d(E.file,h))})},children:n?"确认导入":"Import document"}),e.jsx("button",{className:c,disabled:P,type:"button",onClick:()=>v(null),children:n?"取消":"Cancel"})]})]}),P&&e.jsx("p",{role:"status",className:"py-2 text-xs",children:n?"处理中…":"Working…"}),x&&e.jsx("p",{role:"alert",className:"break-words py-2 text-xs text-destructive",children:x}),u&&e.jsx("p",{role:"status",className:"py-2 text-xs text-muted-foreground",children:u}),k&&e.jsxs("div",{className:"space-y-2 pb-3",children:[k.length===0&&e.jsx("p",{className:"text-xs text-muted-foreground",children:n?"还没有历史版本。使用原生命令或文档编辑保存后会保留版本。":"No previous versions. Native saves and document edits retain history."}),k.map(f=>e.jsxs("details",{children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs",children:[new Date(f.savedAt).toLocaleString()," · ",f.changes.length," ",n?"处差异":"changes"]}),e.jsx("ul",{className:"space-y-1 text-xs text-muted-foreground",children:f.changes.map((h,y)=>e.jsxs("li",{className:"break-words",children:[h.kind==="added"?"+":h.kind==="removed"?"−":"~"," ",h.perspective?h.title:n?"项目总览":h.title," · ",h.fields.join(", ")]},y))})]},f.id))]})]})}async function jr(r,o,a=fe){const{document:d}=await We(r,a,o);if(d?.analysis&&Ue(d.analysis)!==a)throw new St("Architecture scope does not match its file");return d}async function vr(r,o){return mr(r,o)}function wr({view:r,parentId:o,selectedId:a,onSelect:d,active:p=!0,referenceWidth:n,inspector:x,inspectorStage:g="details",onDismissInspector:u,onExpandedChange:l,navigation:P,heading:M}){const{t:k,locale:C}=he(),[E,v]=s.useState(1),R=s.useId().replace(/[^a-zA-Z0-9]/g,""),z=s.useRef(null),S=s.useRef(null),c=s.useRef(null),f=s.useRef(null),h=s.useRef(null),[y,$]=s.useState(""),[A,_]=s.useState(!1),[I,W]=s.useState(1),Y=s.useRef(1),[F,ie]=s.useState(!1),be=s.useRef(!0),X=s.useRef({inspector:x,onDismissInspector:u});X.current={inspector:x,onDismissInspector:u};const q=s.useRef(l);q.current=l;const Q=s.useRef({left:0,top:0}),[ae,oe]=s.useState(!1),[le,xe]=s.useState({width:320,height:320,clipHeight:0}),j=s.useRef(new Map),J=tr((i,w)=>{j.current.delete(w)&&(H.current=!0)},!0),H=s.useRef(!1),ue=s.useRef(0),U=s.useMemo(()=>Jt(r,o,E),[r,o,E]),ce=s.useMemo(()=>nt(r,o).edges,[r,o]),K=s.useMemo(()=>{const i=y.match(/viewBox="([^"]+)"/)?.[1].split(/\s+/).map(Number),w=i?.[2]||320,m=i?.[3]||240,D=F?window.innerWidth:n||le.width,N=Math.max(1,Math.min(1.4,Math.max(160,D-24)/w));return{width:w,height:m,scale:N}},[y,le.width,F,n]),ge={width:K.width*K.scale*I,height:K.height*K.scale*I},Z=(i,w,m)=>{const D=Math.max(.01,Math.min(4,i)),N=S.current;if(N){const V=N.getBoundingClientRect(),je=w===void 0?N.clientWidth/2:w-V.left,te=m===void 0?N.clientHeight/2:m-V.top,re=D/Y.current,pe=(N.scrollLeft+je)*re-je,Ae=(N.scrollTop+te)*re-te,De=()=>{S.current===N&&(N.scrollLeft=pe,N.scrollTop=Ae)};window.requestAnimationFrame?window.requestAnimationFrame(De):window.setTimeout(De,0)}Y.current=D,W(D)},L=()=>{Y.current=1,W(1),S.current&&(S.current.scrollLeft=0,S.current.scrollTop=0)};s.useEffect(()=>{let i=!1;return $(""),_(!1),L(),oe(!1),j.current.clear(),U.nodes.length>300?(_(!0),()=>{i=!0}):(sr().then(async w=>{nr(w);const m=await w.render(`td-architecture-${R}`,U.code);i||$(rr.sanitize(m.svg,{USE_PROFILES:{svg:!0,svgFilters:!0}}))}).catch(()=>{i||_(!0)}),()=>{i=!0})},[U.code,R]),s.useEffect(()=>{p||ie(!1)},[p]),s.useEffect(()=>{q.current?.(F)},[F]),s.useEffect(()=>()=>q.current?.(!1),[]),s.useLayoutEffect(()=>{const i=S.current;if(i)return i.scrollLeft=Q.current.left,i.scrollTop=Q.current.top,()=>{Q.current={left:i.scrollLeft,top:i.scrollTop}}},[F,!!y]),s.useEffect(()=>{const i=S.current;if(!i)return;const w=i.closest("[data-architecture-content]"),m=()=>{xe({width:i.clientWidth||320,height:i.clientHeight||320,clipHeight:w?.clientHeight||0})};m();const D=new ResizeObserver(m);return D.observe(i),w&&D.observe(w),()=>D.disconnect()},[y,F]),Je(c,F&&p,()=>{X.current.inspector?X.current.onDismissInspector?.():ie(!1)},()=>be.current?h.current:null),s.useEffect(()=>{if(!F)return;const i=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=i,j.current.clear()}},[F]),s.useLayoutEffect(()=>{const i=z.current?.querySelector("svg"),w=i?.querySelector("g");if(!(!i||!w||typeof w.getBBox!="function"))try{const m=w.getBBox();if(![m.x,m.y,m.width,m.height].every(Number.isFinite)||m.width<=0||m.height<=0)return;const D=`${m.x-16} ${m.y-16} ${m.width+32} ${m.height+32}`;if(i.getAttribute("viewBox")===D)return;i.setAttribute("viewBox",D),$(i.outerHTML)}catch{}},[y,F]),s.useLayoutEffect(()=>{z.current?.querySelectorAll("g.node, g.cluster").forEach(i=>{const w=Number(i.id.match(/(?:^|-)n(\d+)(?:-|$)/)?.[1]),m=U.nodes[w];if(!m)return;i.dataset.architectureRole=m.role,i.dataset.architectureNode=m.id,i.dataset.architectureRelated=String(!!a&&ce.some(N=>N.from===a&&N.to===m.id||N.to===a&&N.from===m.id));const D=i.matches("g.cluster")?i.querySelector("g.cluster-label")??i:i;D!==i&&(i.removeAttribute("role"),i.removeAttribute("tabindex")),D.dataset.architectureNode=m.id,D.setAttribute("role","button"),D.setAttribute("tabindex","0"),D.setAttribute("aria-label",m.title),D.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=S.current,w=[...z.current?.querySelectorAll("[data-architecture-node]")??[]].find(re=>re.dataset.architectureNode===a);if(!i||!w)return;let m=i.getBoundingClientRect();const D=i.closest("[data-architecture-content]");if(!F&&D&&m.width>24&&m.height>24){const re=D.getBoundingClientRect();re.height>160&&m.height<=re.height&&(m.top<re.top?D.scrollTop+=m.top-re.top:m.bottom>re.bottom&&(D.scrollTop+=m.bottom-re.bottom),m=i.getBoundingClientRect());const pe=Math.max(m.top,re.top),Ae=Math.min(m.bottom,re.bottom);m=new DOMRect(m.left,pe,m.width,Math.max(0,Ae-pe))}const N=w.getBoundingClientRect();if(m.width<=24||m.height<=24||N.width<=0||N.height<=0)return;const V=12,je=N.width>m.width-2*V?(N.left+N.right-m.left-m.right)/2:N.left<m.left+V?N.left-m.left-V:N.right>m.right-V?N.right-m.right+V:0,te=N.height>m.height-2*V?(N.top+N.bottom-m.top-m.bottom)/2:N.top<m.top+V?N.top-m.top-V:N.bottom>m.bottom-V?N.bottom-m.bottom+V:0;i.scrollLeft+=je,i.scrollTop+=te},[a,le.width,le.height,le.clipHeight,F,g,y]);const ee=i=>{[...z.current?.querySelectorAll("[data-architecture-node]")??[]].find(w=>w.dataset.architectureNode===i)?.focus?.({preventScroll:!0}),d(i)},B="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",Ce=e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:B,"aria-label":k("architecture.zoomOut"),disabled:I<=.01,onClick:()=>Z(Y.current/1.25),children:e.jsx(ir,{size:17})}),e.jsxs("button",{type:"button",className:`${B} text-xs tabular-nums`,"aria-label":k("architecture.resetZoom"),title:k("architecture.resetZoom"),onClick:L,children:[Math.round(K.scale*I*100),"%"]}),e.jsx("button",{type:"button",className:B,"aria-label":k("architecture.zoomIn"),disabled:I>=4,onClick:()=>Z(Y.current*1.25),children:e.jsx(yt,{size:17})}),e.jsx("button",{type:"button",className:B,"aria-label":k("architecture.fitGraph"),onClick:()=>Z(Math.min((le.width-24)/K.width,(le.height-24)/K.height)/K.scale),children:e.jsx(ar,{size:17})}),!F&&e.jsx("button",{ref:h,type:"button",className:B,"aria-label":k("architecture.fullscreen"),onClick:()=>{be.current=!0,ie(!0)},children:e.jsx(ur,{size:17})}),e.jsx("button",{type:"button",className:B,"aria-label":k("architecture.download"),disabled:!y,onClick:()=>{oe(!1),tt(new Blob([y],{type:"image/svg+xml"}),`architecture-${r.id}.svg`).catch(()=>oe(!0))},children:e.jsx(et,{size:17})})]}),Oe=r.nodes.find(i=>i.id===o)?.title??r.title,me=e.jsxs(e.Fragment,{children:[F?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:Oe,children:Oe})}),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:E,onChange:i=>v(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:f,type:"button",className:B,"aria-label":k("architecture.closeFullscreen"),onClick:()=>ie(!1),children:e.jsx(Se,{size:18})})]}),e.jsx("div",{className:"flex items-center justify-between gap-1",title:k("architecture.panHint"),children:Ce})]}):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:Ce}),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:E,onChange:i=>v(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))})]})]})]}),F&&P&&e.jsx("div",{className:"shrink-0 px-2",children:P}),ae&&e.jsx("p",{role:"alert",className:"px-3 py-2 text-xs text-destructive",children:k("architecture.downloadFailed")}),e.jsxs("div",{className:F?"relative flex min-h-0 flex-1 flex-col overflow-hidden min-[768px]:flex-row":"relative",children:[A?e.jsx("p",{role:"alert",className:"p-4 text-sm text-muted-foreground",children:U.nodes.length>300?C==="zh"?"图中模块较多,请减少展开层级或选择单个视角。":"This graph has many modules. Expand fewer levels or select one perspective.":k("architecture.diagramFailed")}):y?e.jsx("div",{ref:S,"data-sidebar-gesture-ignore":!0,className:`termdock-architecture-viewport overflow-auto overscroll-contain p-3 ${F?"min-h-0 min-w-0 flex-1":"h-[min(50dvh,26rem)]"}`,style:{touchAction:"none",maxHeight:!F&&le.clipHeight?Math.max(160,le.clipHeight-150):void 0},onPointerDown:i=>{if(i.button!==0)return;J(i),j.current.size||(H.current=!1,ue.current=0);const w=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node")??void 0;j.current.set(i.pointerId,{x:i.clientX,y:i.clientY,nodeId:w}),j.current.size>1&&(H.current=!0);try{i.currentTarget.setPointerCapture?.(i.pointerId)}catch{}},onPointerMove:i=>{const w=j.current.get(i.pointerId);if(!w)return;const m=[...j.current.values()];j.current.set(i.pointerId,{...w,x:i.clientX,y:i.clientY});const D=[...j.current.values()];if(D.length>=2){const N=te=>Math.hypot(te[0].x-te[1].x,te[0].y-te[1].y),V=N(m),je=N(D);V>0&&Z(Y.current*je/V,(D[0].x+D[1].x)/2,(D[0].y+D[1].y)/2),H.current=!0}else{const N=w.x-i.clientX,V=w.y-i.clientY;ue.current+=Math.hypot(N,V),ue.current>5&&(H.current=!0),i.currentTarget.scrollLeft+=N,i.currentTarget.scrollTop+=V}},onPointerUp:i=>{const w=j.current.get(i.pointerId),m=j.current.size===1&&!H.current&&w?.nodeId;j.current.delete(i.pointerId),m&&(H.current=!0,ee(m))},onPointerCancel:i=>{j.current.delete(i.pointerId),H.current=!0},onLostPointerCapture:i=>{j.current.delete(i.pointerId)},children:e.jsx("div",{ref:z,role:"group","aria-label":k("architecture.modules"),className:"termdock-architecture-diagram mx-auto",style:ge,onClick:i=>{if(H.current)return;const m=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node");m&&ee(m)},onKeyDown:i=>{if(i.key!=="Enter"&&i.key!==" ")return;const w=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node");w&&(i.preventDefault(),ee(w))},dangerouslySetInnerHTML:{__html:y}})}):e.jsx("p",{role:"status",className:"p-4 text-sm text-muted-foreground",children:k("architecture.rendering")}),F&&x]})]});return F?Nt.createPortal(e.jsx("section",{ref:c,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:me}),document.body):e.jsx("section",{className:"overflow-clip rounded-xl border border-border/20 bg-surface-2","aria-label":k("architecture.diagram"),children:me})}function ke(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&&Vt(a)?a:null}function ht(r,o){const a=[...r.matchAll(/^# (.+?): hunk \d+,/gm)].map(x=>x[1]),p=(a.length?a:r.split(/\r?\n/).map(x=>x.trim()).filter(Boolean)).map(x=>ke(x,o));if(p.some(x=>x===null))return null;const n=[...new Set(p)];return n.length<=20?n:null}function $t({rootPath:r,initialDirectory:o,selected:a,onChange:d,selectionDisabled:p=!1,compact:n=!1}){const{t:x}=he(),g=Ft(r),u=Gt(o||g,g),l=u.path,[P,M]=s.useState(""),[k,C]=s.useState(null),[E,v]=s.useState(0),[R,z]=s.useState(null);s.useEffect(()=>{if(!R)return;const $=window.setTimeout(()=>z(null),1800);return()=>window.clearTimeout($)},[R]);const S=new Set(a.map($=>`${g==="/"?"":g}/${$}`)),c=$=>{const A=ke($,g);p||!A||a.includes(A)||a.length>=20||d([...a,A])},f=$=>{$!==g&&!ke($,g)||(u.navigate($),M(""),C(null))},h=`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"}`,y=ke(l,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(Qt,{buttonClassName:h,iconSize:17,parent:{disabled:!u.canGoParent,onClick:()=>{u.goParent(),M(""),C(null)}},root:{disabled:l===g,onClick:()=>f(g)}}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium",title:l,children:y??(l.split("/").pop()||"/")}),y&&e.jsx("button",{type:"button",className:`${h} text-primary`,disabled:p||!a.includes(y)&&a.length>=20,"aria-label":`${x("architecture.addScopeReference")}: ${l.split("/").pop()}`,title:y,"aria-pressed":a.includes(y),onClick:()=>c(l),children:a.includes(y)?e.jsx(Lt,{size:15}):e.jsx(Pt,{size:15})}),e.jsx("button",{type:"button",className:h,"aria-label":x("rightSidebar.refreshFiles"),onClick:()=>{v($=>$+1)},children:e.jsx(jt,{size:15})})]})}),p&&e.jsx("p",{role:"alert",className:"shrink-0 px-3 pb-2 text-xs text-muted-foreground",children:x("architecture.correctPathsFirst")}),e.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 pb-2",children:e.jsx("input",{"aria-label":x("architecture.searchScopePaths"),placeholder:x("architecture.searchScopePaths"),value:P,onChange:$=>M($.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(Tt,{rootPath:l,selectedFilePath:k,onFileSelect:$=>{C($),c($)},onDirectoryRoot:f,onPathReference:c,getReferenceText:$=>ke($,g)??$,query:P,onReferenceCopied:z,copiedReferenceKey:R,onSearchFromDirectory:f,referenceSelection:{paths:S,label:x("architecture.addScopeReference"),disabled:p||a.length>=20}},`${l}:${E}`)})]})}function Nr({rootPath:r,initialDirectory:o,initial:a,onConfirm:d,onCancel:p}){const{t:n}=he(),x=s.useRef(null);Je(x,!0,p);const g=s.useId(),[u,l]=s.useState(a);s.useEffect(()=>{const M=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=M}},[]);const P="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 Nt.createPortal(e.jsxs("div",{className:"fixed inset-0 z-popover flex items-center justify-center p-[max(0.75rem,env(safe-area-inset-top))]",children:[e.jsx("button",{type:"button",className:"absolute inset-0 z-10 cursor-default bg-[var(--app-backdrop)]","aria-label":n("common.cancel"),onClick:p}),e.jsxs("section",{ref:x,id:`${g}-dialog`,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":g,"aria-describedby":`${g}-hint`,className:"relative z-20 flex h-full max-h-[42rem] w-full max-w-xl flex-col overflow-hidden rounded-xl border border-border/20 bg-surface text-foreground shadow-xl",children:[e.jsxs("header",{className:"shrink-0 px-3 py-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{id:g,className:"min-w-0 flex-1 text-sm font-semibold",title:n("architecture.browsePathsHint"),children:n("architecture.choosePaths")}),e.jsx("button",{type:"button",className:P,"aria-label":n("common.close"),onClick:p,children:e.jsx(Se,{size:17})})]}),e.jsx("p",{id:`${g}-hint`,className:"sr-only",children:n("architecture.browsePathsHint")})]}),e.jsx($t,{rootPath:r,initialDirectory:o,selected:u,onChange:l}),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:`${P} min-w-0 max-w-full bg-surface-2`,"aria-label":`${n("architecture.removePath")}: ${M}`,onClick:()=>l(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:P,onClick:p,children:n("common.cancel")}),e.jsx("button",{type:"button",className:`${P} bg-primary/15 text-primary`,onClick:()=>d(u),children:n("architecture.usePaths")})]})]})]})]}),document.body)}function xt({rootPath:r,initial:o,outputFile:a,currentFile:d,currentDirectory:p,active:n=!0,onInsertPrompt:x,onPrepared:g,onClose:u}){const{t:l,locale:P}=he(),M=s.useRef(null),k=s.useRef(null);Je(k,n,u),s.useLayoutEffect(()=>{n&&k.current?.scrollIntoView?.({block:"start"})},[n]);const[C,E]=s.useState(!1);s.useLayoutEffect(()=>{const L=k.current;if(!n||!L)return;const ee=()=>E(L.clientWidth>=900);if(ee(),typeof ResizeObserver>"u")return;const B=new ResizeObserver(ee);return B.observe(L),()=>B.disconnect()},[n]);const v=s.useId(),[R,z]=s.useState(o.kind),[S,c]=s.useState(o.target),[f,h]=s.useState(o.paths.join(`
|
|
3
|
-
`)),[y,$]=s.useState(o.depth),[A,_]=s.useState(o.focus),[I,W]=s.useState(null),[Y,F]=s.useState(!1),[ie,be]=s.useState(!1),X=s.useRef(0);s.useEffect(()=>()=>{X.current++},[]),s.useEffect(()=>{n||(X.current++,F(!1),be(!1))},[n]);const q=ht(f,r),Q=d?ke(d,r):null,ae=p?ke(p,r):null,oe=ae?p:Q?d.slice(0,d.lastIndexOf("/")):r,xe=n&&C&&R!=="project"&&!a&&!ie;let j=null;try{(R==="project"||q)&&(j=Kt({kind:R,target:S,paths:q??[],depth:y,focus:A}))}catch{}const J=j?Xt(r,
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Markdown-CohgsLqO.js","assets/app-CjIJnhRC.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-DaiFCKy_.js","assets/index-VX_KQ4Kx.css","assets/swiper-CDQegRag.js","assets/swiper-C2J0D0kV.css","assets/use-gesture-react.esm-BHdJ-ZCI.js","assets/referenceSelection-Cb24Tb01.js","assets/list-tree-CA4WMncL.js","assets/Markdown-DKQhs57e.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a$ as gt,bz as At,eA as he,cr as e,a9 as Dt,n as et,dD as tt,dE as Mt,eB as Je,O as yt,a8 as Se,cH as Ft,C as Lt,L as Tt,R as jt,s as Pt,u as It,m as Ot,h as Pe,Y as vt,e as Bt,c as Ht,g as wt,eM as dt,eS as _t}from"./app-CjIJnhRC.js";import{b as s,r as Nt}from"./dnd-BCFAPC0L.js";import{k as Ve,p as Ie,A as kt,g as qt,H as Ut,h as Wt,c as Ue,a as fe,b as St,d as Jt,f as nt,l as Vt,n as Kt,i as Xt,D as Re,e as Yt}from"./link-C7B3CQkJ.js";import{U as Zt,u as Gt,F as Qt}from"./RecordingSaveDialog-BKec4LtD.js";import{L as er}from"./DiffViewer-C_YHDsAf.js";import{u as tr}from"./swiper-CDQegRag.js";import rr from"./purify.es-4eNOHKSq.js";import{l as sr,i as nr}from"./Markdown-CohgsLqO.js";import{e as ir}from"./AndroidMirrorView-SpjoKKYZ.js";import{S as ar}from"./RightSidebar-CxeEK1fi.js";import{N as mt}from"./GitLoadingSkeleton-Bm1UqrDS.js";import"./react-XDCjal2T.js";import"./terminal-DaiFCKy_.js";import"./use-gesture-react.esm-BHdJ-ZCI.js";import"./gestureArbiter-DszagC-d.js";import"./referenceSelection-Cb24Tb01.js";import"./git-compare-9RABXSu5.js";import"./list-tree-CA4WMncL.js";import"./v4-EwEgHOG0.js";import"./unplug-Dp1XvCMt.js";import"./circle-DhTLygNL.js";import"./DiffReview-DVaOXs0z.js";import"./triangle-alert-BM5V0mRC.js";import"./ChangeWalkthroughPanel-CVBQbHpG.js";import"./chevron-left-gddD8oDV.js";import"./maximize-2-C2r-kY_c.js";import"./search-DwVySubQ.js";import"./arrow-down-Dd0wVXN3.js";const lr=[["path",{d:"M17 7 7 17",key:"15tmo1"}],["path",{d:"M17 17H7V7",key:"1org7z"}]],cr=gt("arrow-down-left",lr);const or=[["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"}]],ur=gt("expand",or);function dr(r,o){const a=new Map,d={id:"all-perspectives",title:o,summary:r.summary,nodes:[],edges:[]};return r.perspectives.forEach((p,n)=>{const x=`perspective${n}`,g=new Map(p.nodes.map((u,l)=>[u.id,`${x}_node${l}`]));a.set(x,{perspective:p.id}),d.nodes.push({id:x,title:p.title,summary:p.summary,files:[],description:p.description});for(const u of p.nodes){const l=g.get(u.id);a.set(l,{perspective:p.id,node:u.id}),d.nodes.push({...u,id:l,parentId:u.parentId?g.get(u.parentId):x})}d.edges.push(...p.edges.map(u=>({...u,from:g.get(u.from),to:g.get(u.to)})))}),{view:d,references:a}}async function $e(r,o,a,d){const p=new URLSearchParams({root:r}),n=await fetch(`/api/terminal/architecture/${o}${d?"":`${o.includes("?")?"&":"?"}${p}`}`,{signal:a,cache:"no-store",...d?{method:"PUT",headers:{"Content-Type":"application/json","X-XSRF-TOKEN":await At()},body:JSON.stringify({root:r,...d})}:{}}),x=await n.json();if(!n.ok)throw new Error(x.error||`HTTP ${n.status}`);return x}async function mr(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"&&Ve(d)))].sort()}async function We(r,o,a){if(!Ve(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?Ie(JSON.stringify(d.document)):null,revision:typeof d.revision=="string"?d.revision:null}}async function hr(r,o,a,d,p,n,x){const g=await $e(r,"field",void 0,{file:o,perspective:a,node:d,field:p,value:n,revision:x});return Ie(JSON.stringify(g.document))}async function xr(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 pr(r,o){return $e(r,`bundle?${new URLSearchParams({file:o})}`)}async function fr(r,o,a){const d=await $e(r,"bundle",void 0,{bundle:o,revision:a});return Ie(JSON.stringify(d.document))}async function br(r,o,a,d){const p=await $e(r,"document",void 0,{file:o,document:a,...d!==void 0?{revision:d}:{}});return Ie(JSON.stringify(p.document))}const gr=s.lazy(()=>Dt(()=>import("./Markdown-CohgsLqO.js").then(r=>r.a),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(r=>({default:r.Markdown})));function rt(r,o){return o?{description:"说明",diagram:"关系图源码",context:"上下文",constraint:"约束",concern:"问题与风险",todo:"待办",note:"备注"}[r]:{description:"Description",diagram:"Diagram source",context:"Context",constraint:"Constraints",concern:"Concerns",todo:"To do",note:"Notes"}[r]}function st({value:r,rootPath:o,onEdit:a,onOpenFile:d}){const{locale:p}=he(),n=p==="zh",x=r.description?.replace(/^#\s+([^\n]+)\n\s*/,(u,l)=>l.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(gr,{variant:"document",content:u,rootPath:o,onLocalLinkOpen:l=>d?.({path:o&&l.path.startsWith(`${o}/`)?l.path.slice(o.length+1):l.path})})});return e.jsxs("div",{className:"space-y-2",children:[x&&e.jsx("div",{className:"min-w-0 overflow-x-auto",children:g(x)}),kt.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,l])=>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(l)})]},u))})]})]})}function Qe({root:r,file:o,perspective:a,node:d,initialField:p,onSaved:n,onCancel:x}){const{locale:g}=he(),u=g==="zh",[l,T]=s.useState(null),[M,k]=s.useState(p),[C,E]=s.useState(""),[v,R]=s.useState(""),[z,S]=s.useState(""),[c,f]=s.useState(!1),h=s.useRef(!0),y=s.useRef(0);s.useEffect(()=>{h.current=!0;const A=++y.current;T(null),S("");const _=new AbortController;return We(r,o,_.signal).then(I=>{!_.signal.aborted&&A===y.current&&T(I)}).catch(I=>{!_.signal.aborted&&A===y.current&&S(String(I.message))}),()=>{h.current=!1,++y.current,_.abort()}},[r,o]),s.useEffect(()=>{const A=l?.document?.perspectives.find(W=>W.id===a),_=d?A?.nodes.find(W=>W.id===d):A;if(!_||!A)return;const I=_[M]??(M==="description"?_.summary:M==="diagram"?qt(A,d):"");E(I),R(I)},[l,a,d,M]);const $=C!==v;return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col gap-3",onSubmit:A=>{if(A.preventDefault(),!l||c||!$)return;const _=y.current;f(!0),S(""),hr(r,o,a,d,M,C,l.revision).then(I=>{h.current&&_===y.current&&n(I)}).catch(I=>{h.current&&_===y.current&&S(I.message)}).finally(()=>{h.current&&_===y.current&&f(!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:c||$,onChange:A=>k(A.target.value),children:kt.map(A=>e.jsx("option",{value:A,children:rt(A,u)},A))})]}),$&&e.jsx("p",{className:"text-xs text-muted-foreground",children:u?"保存当前字段后可切换字段。":"Save this field before switching fields."}),!l&&!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:!l||c,maxLength:1e5,value:C,onChange:A=>E(A.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:!l||c||!$,children:c?u?"保存中…":"Saving…":u?"保存":"Save"}),e.jsx("button",{type:"button",className:"min-h-11 rounded-lg px-4 text-sm hover:bg-surface-elevated",disabled:c,onClick:x,children:u?"取消":"Cancel"})]})]})}function yr({root:r,file:o,document:a,onLoaded:d}){const{locale:p}=he(),n=p==="zh",[x,g]=s.useState(""),[u,l]=s.useState(""),[T,M]=s.useState(!1),[k,C]=s.useState(null),[E,v]=s.useState(null),R=s.useRef(null),z=s.useRef(0);s.useEffect(()=>(z.current++,v(null),C(null),g(""),l(""),M(!1),()=>{z.current++}),[r,o]);async function S(f){const h=++z.current;M(!0),g(""),l("");try{await f(()=>h===z.current)}catch(y){h===z.current&&g(y instanceof Error?y.message:String(y))}finally{h===z.current&&M(!1)}}const c="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:c,type:"button",disabled:T||!a,onClick:()=>{S(async f=>{const h=await xr(r,o);f()&&C(h)})},children:[e.jsx(Ut,{size:14}),n?"更新差异":"Changes"]}),e.jsxs("button",{className:c,type:"button",disabled:T||!a,onClick:()=>{S(async()=>{await tt(new Blob([JSON.stringify(a,null,2)],{type:"application/json"}),"termdock-architecture.json")})},children:[e.jsx(et,{size:14}),"JSON"]}),e.jsxs("button",{className:c,type:"button",disabled:T||!a,onClick:()=>{S(async()=>{const f=await pr(r,o);await tt(new Blob([JSON.stringify(f,null,2)],{type:"application/json"}),"architecture.omm.json")})},children:[e.jsx(et,{size:14}),".omm"]}),e.jsxs("button",{className:c,type:"button",disabled:T,onClick:()=>R.current?.click(),children:[e.jsx(Zt,{size:14}),n?"导入":"Import"]}),e.jsxs("button",{className:c,type:"button",disabled:T||!a,onClick:()=>{S(async()=>{const f=Mt(),h=Wt(window.location.origin,{root:r,file:o,...f?{peerId:f.targetPeerId,serviceName:f.serviceName}:{}});await navigator.clipboard.writeText(h),l(n?"链接已复制,打开时需要登录此 Termdock 服务。":"Link copied. Sign in to this Termdock service to view it.")})},children:[e.jsx(er,{size:14}),n?"复制查看链接":"Copy viewer link"]})]}),e.jsx("input",{ref:R,hidden:!0,type:"file",accept:".json,application/json",onChange:f=>{const h=f.target.files?.[0];f.target.value="",h&&S(async y=>{if(h.size>5e6)throw new Error(n?"文档超过 5 MB。":"Document exceeds 5 MB.");const $=await h.text();if(!y())return;const A=JSON.parse($);if(A?.format==="termdock-omm-bundle"){const Y=await We(r,".omm");if(!y())return;v({name:h.name,value:A,file:".omm",revision:Y.revision});return}const _=Ie($),I=_.analysis?Ue(_.analysis):fe,W=await We(r,I);y()&&v({name:h.name,value:_,file:I,revision:W.revision})})}}),E&&e.jsxs("div",{className:"my-2 rounded-lg bg-surface-2 p-3 text-xs",children:[e.jsxs("p",{className:"break-all",children:[E.name," → ",E.file]}),e.jsx("p",{className:"mt-1 text-muted-foreground",children:E.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:`${c} text-primary`,disabled:T,type:"button",onClick:()=>{S(async f=>{const h=E.file===".omm"?await fr(r,E.value,E.revision):await br(r,E.file,E.value,E.revision);f()&&(v(null),d(E.file,h))})},children:n?"确认导入":"Import document"}),e.jsx("button",{className:c,disabled:T,type:"button",onClick:()=>v(null),children:n?"取消":"Cancel"})]})]}),T&&e.jsx("p",{role:"status",className:"py-2 text-xs",children:n?"处理中…":"Working…"}),x&&e.jsx("p",{role:"alert",className:"break-words py-2 text-xs text-destructive",children:x}),u&&e.jsx("p",{role:"status",className:"py-2 text-xs text-muted-foreground",children:u}),k&&e.jsxs("div",{className:"space-y-2 pb-3",children:[k.length===0&&e.jsx("p",{className:"text-xs text-muted-foreground",children:n?"还没有历史版本。使用原生命令或文档编辑保存后会保留版本。":"No previous versions. Native saves and document edits retain history."}),k.map(f=>e.jsxs("details",{children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3 text-xs",children:[new Date(f.savedAt).toLocaleString()," · ",f.changes.length," ",n?"处差异":"changes"]}),e.jsx("ul",{className:"space-y-1 text-xs text-muted-foreground",children:f.changes.map((h,y)=>e.jsxs("li",{className:"break-words",children:[h.kind==="added"?"+":h.kind==="removed"?"−":"~"," ",h.perspective?h.title:n?"项目总览":h.title," · ",h.fields.join(", ")]},y))})]},f.id))]})]})}async function jr(r,o,a=fe){const{document:d}=await We(r,a,o);if(d?.analysis&&Ue(d.analysis)!==a)throw new St("Architecture scope does not match its file");return d}async function vr(r,o){return mr(r,o)}function wr({view:r,parentId:o,selectedId:a,onSelect:d,active:p=!0,referenceWidth:n,inspector:x,inspectorStage:g="details",onDismissInspector:u,onExpandedChange:l,navigation:T,heading:M}){const{t:k,locale:C}=he(),[E,v]=s.useState(1),R=s.useId().replace(/[^a-zA-Z0-9]/g,""),z=s.useRef(null),S=s.useRef(null),c=s.useRef(null),f=s.useRef(null),h=s.useRef(null),[y,$]=s.useState(""),[A,_]=s.useState(!1),[I,W]=s.useState(1),Y=s.useRef(1),[F,ie]=s.useState(!1),be=s.useRef(!0),X=s.useRef({inspector:x,onDismissInspector:u});X.current={inspector:x,onDismissInspector:u};const q=s.useRef(l);q.current=l;const Q=s.useRef({left:0,top:0}),[ae,oe]=s.useState(!1),[le,xe]=s.useState({width:320,height:320,clipHeight:0}),j=s.useRef(new Map),J=tr((i,w)=>{j.current.delete(w)&&(H.current=!0)},!0),H=s.useRef(!1),ue=s.useRef(0),U=s.useMemo(()=>Jt(r,o,E),[r,o,E]),ce=s.useMemo(()=>nt(r,o).edges,[r,o]),K=s.useMemo(()=>{const i=y.match(/viewBox="([^"]+)"/)?.[1].split(/\s+/).map(Number),w=i?.[2]||320,m=i?.[3]||240,D=F?window.innerWidth:n||le.width,N=Math.max(1,Math.min(1.4,Math.max(160,D-24)/w));return{width:w,height:m,scale:N}},[y,le.width,F,n]),ge={width:K.width*K.scale*I,height:K.height*K.scale*I},Z=(i,w,m)=>{const D=Math.max(.01,Math.min(4,i)),N=S.current;if(N){const V=N.getBoundingClientRect(),je=w===void 0?N.clientWidth/2:w-V.left,te=m===void 0?N.clientHeight/2:m-V.top,re=D/Y.current,pe=(N.scrollLeft+je)*re-je,Ae=(N.scrollTop+te)*re-te,De=()=>{S.current===N&&(N.scrollLeft=pe,N.scrollTop=Ae)};window.requestAnimationFrame?window.requestAnimationFrame(De):window.setTimeout(De,0)}Y.current=D,W(D)},L=()=>{Y.current=1,W(1),S.current&&(S.current.scrollLeft=0,S.current.scrollTop=0)};s.useEffect(()=>{let i=!1;return $(""),_(!1),L(),oe(!1),j.current.clear(),U.nodes.length>300?(_(!0),()=>{i=!0}):(sr().then(async w=>{nr(w);const m=await w.render(`td-architecture-${R}`,U.code);i||$(rr.sanitize(m.svg,{USE_PROFILES:{svg:!0,svgFilters:!0}}))}).catch(()=>{i||_(!0)}),()=>{i=!0})},[U.code,R]),s.useEffect(()=>{p||ie(!1)},[p]),s.useEffect(()=>{q.current?.(F)},[F]),s.useEffect(()=>()=>q.current?.(!1),[]),s.useLayoutEffect(()=>{const i=S.current;if(i)return i.scrollLeft=Q.current.left,i.scrollTop=Q.current.top,()=>{Q.current={left:i.scrollLeft,top:i.scrollTop}}},[F,!!y]),s.useEffect(()=>{const i=S.current;if(!i)return;const w=i.closest("[data-architecture-content]"),m=()=>{xe({width:i.clientWidth||320,height:i.clientHeight||320,clipHeight:w?.clientHeight||0})};m();const D=new ResizeObserver(m);return D.observe(i),w&&D.observe(w),()=>D.disconnect()},[y,F]),Je(c,F&&p,()=>{X.current.inspector?X.current.onDismissInspector?.():ie(!1)},()=>be.current?h.current:null),s.useEffect(()=>{if(!F)return;const i=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=i,j.current.clear()}},[F]),s.useLayoutEffect(()=>{const i=z.current?.querySelector("svg"),w=i?.querySelector("g");if(!(!i||!w||typeof w.getBBox!="function"))try{const m=w.getBBox();if(![m.x,m.y,m.width,m.height].every(Number.isFinite)||m.width<=0||m.height<=0)return;const D=`${m.x-16} ${m.y-16} ${m.width+32} ${m.height+32}`;if(i.getAttribute("viewBox")===D)return;i.setAttribute("viewBox",D),$(i.outerHTML)}catch{}},[y,F]),s.useLayoutEffect(()=>{z.current?.querySelectorAll("g.node, g.cluster").forEach(i=>{const w=Number(i.id.match(/(?:^|-)n(\d+)(?:-|$)/)?.[1]),m=U.nodes[w];if(!m)return;i.dataset.architectureRole=m.role,i.dataset.architectureNode=m.id,i.dataset.architectureRelated=String(!!a&&ce.some(N=>N.from===a&&N.to===m.id||N.to===a&&N.from===m.id));const D=i.matches("g.cluster")?i.querySelector("g.cluster-label")??i:i;D!==i&&(i.removeAttribute("role"),i.removeAttribute("tabindex")),D.dataset.architectureNode=m.id,D.setAttribute("role","button"),D.setAttribute("tabindex","0"),D.setAttribute("aria-label",m.title),D.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=S.current,w=[...z.current?.querySelectorAll("[data-architecture-node]")??[]].find(re=>re.dataset.architectureNode===a);if(!i||!w)return;let m=i.getBoundingClientRect();const D=i.closest("[data-architecture-content]");if(!F&&D&&m.width>24&&m.height>24){const re=D.getBoundingClientRect();re.height>160&&m.height<=re.height&&(m.top<re.top?D.scrollTop+=m.top-re.top:m.bottom>re.bottom&&(D.scrollTop+=m.bottom-re.bottom),m=i.getBoundingClientRect());const pe=Math.max(m.top,re.top),Ae=Math.min(m.bottom,re.bottom);m=new DOMRect(m.left,pe,m.width,Math.max(0,Ae-pe))}const N=w.getBoundingClientRect();if(m.width<=24||m.height<=24||N.width<=0||N.height<=0)return;const V=12,je=N.width>m.width-2*V?(N.left+N.right-m.left-m.right)/2:N.left<m.left+V?N.left-m.left-V:N.right>m.right-V?N.right-m.right+V:0,te=N.height>m.height-2*V?(N.top+N.bottom-m.top-m.bottom)/2:N.top<m.top+V?N.top-m.top-V:N.bottom>m.bottom-V?N.bottom-m.bottom+V:0;i.scrollLeft+=je,i.scrollTop+=te},[a,le.width,le.height,le.clipHeight,F,g,y]);const ee=i=>{[...z.current?.querySelectorAll("[data-architecture-node]")??[]].find(w=>w.dataset.architectureNode===i)?.focus?.({preventScroll:!0}),d(i)},B="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",Ce=e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:B,"aria-label":k("architecture.zoomOut"),disabled:I<=.01,onClick:()=>Z(Y.current/1.25),children:e.jsx(ir,{size:17})}),e.jsxs("button",{type:"button",className:`${B} text-xs tabular-nums`,"aria-label":k("architecture.resetZoom"),title:k("architecture.resetZoom"),onClick:L,children:[Math.round(K.scale*I*100),"%"]}),e.jsx("button",{type:"button",className:B,"aria-label":k("architecture.zoomIn"),disabled:I>=4,onClick:()=>Z(Y.current*1.25),children:e.jsx(yt,{size:17})}),e.jsx("button",{type:"button",className:B,"aria-label":k("architecture.fitGraph"),onClick:()=>Z(Math.min((le.width-24)/K.width,(le.height-24)/K.height)/K.scale),children:e.jsx(ar,{size:17})}),!F&&e.jsx("button",{ref:h,type:"button",className:B,"aria-label":k("architecture.fullscreen"),onClick:()=>{be.current=!0,ie(!0)},children:e.jsx(ur,{size:17})}),e.jsx("button",{type:"button",className:B,"aria-label":k("architecture.download"),disabled:!y,onClick:()=>{oe(!1),tt(new Blob([y],{type:"image/svg+xml"}),`architecture-${r.id}.svg`).catch(()=>oe(!0))},children:e.jsx(et,{size:17})})]}),Oe=r.nodes.find(i=>i.id===o)?.title??r.title,me=e.jsxs(e.Fragment,{children:[F?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:Oe,children:Oe})}),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:E,onChange:i=>v(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:f,type:"button",className:B,"aria-label":k("architecture.closeFullscreen"),onClick:()=>ie(!1),children:e.jsx(Se,{size:18})})]}),e.jsx("div",{className:"flex items-center justify-between gap-1",title:k("architecture.panHint"),children:Ce})]}):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:Ce}),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:E,onChange:i=>v(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))})]})]})]}),F&&T&&e.jsx("div",{className:"shrink-0 px-2",children:T}),ae&&e.jsx("p",{role:"alert",className:"px-3 py-2 text-xs text-destructive",children:k("architecture.downloadFailed")}),e.jsxs("div",{className:F?"relative flex min-h-0 flex-1 flex-col overflow-hidden min-[768px]:flex-row":"relative",children:[A?e.jsx("p",{role:"alert",className:"p-4 text-sm text-muted-foreground",children:U.nodes.length>300?C==="zh"?"图中模块较多,请减少展开层级或选择单个视角。":"This graph has many modules. Expand fewer levels or select one perspective.":k("architecture.diagramFailed")}):y?e.jsx("div",{ref:S,"data-sidebar-gesture-ignore":!0,className:`termdock-architecture-viewport overflow-auto overscroll-contain p-3 ${F?"min-h-0 min-w-0 flex-1":"h-[min(50dvh,26rem)]"}`,style:{touchAction:"none",maxHeight:!F&&le.clipHeight?Math.max(160,le.clipHeight-150):void 0},onPointerDown:i=>{if(i.button!==0)return;J(i),j.current.size||(H.current=!1,ue.current=0);const w=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node")??void 0;j.current.set(i.pointerId,{x:i.clientX,y:i.clientY,nodeId:w}),j.current.size>1&&(H.current=!0);try{i.currentTarget.setPointerCapture?.(i.pointerId)}catch{}},onPointerMove:i=>{const w=j.current.get(i.pointerId);if(!w)return;const m=[...j.current.values()];j.current.set(i.pointerId,{...w,x:i.clientX,y:i.clientY});const D=[...j.current.values()];if(D.length>=2){const N=te=>Math.hypot(te[0].x-te[1].x,te[0].y-te[1].y),V=N(m),je=N(D);V>0&&Z(Y.current*je/V,(D[0].x+D[1].x)/2,(D[0].y+D[1].y)/2),H.current=!0}else{const N=w.x-i.clientX,V=w.y-i.clientY;ue.current+=Math.hypot(N,V),ue.current>5&&(H.current=!0),i.currentTarget.scrollLeft+=N,i.currentTarget.scrollTop+=V}},onPointerUp:i=>{const w=j.current.get(i.pointerId),m=j.current.size===1&&!H.current&&w?.nodeId;j.current.delete(i.pointerId),m&&(H.current=!0,ee(m))},onPointerCancel:i=>{j.current.delete(i.pointerId),H.current=!0},onLostPointerCapture:i=>{j.current.delete(i.pointerId)},children:e.jsx("div",{ref:z,role:"group","aria-label":k("architecture.modules"),className:"termdock-architecture-diagram mx-auto",style:ge,onClick:i=>{if(H.current)return;const m=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node");m&&ee(m)},onKeyDown:i=>{if(i.key!=="Enter"&&i.key!==" ")return;const w=i.target.closest("[data-architecture-node]")?.getAttribute("data-architecture-node");w&&(i.preventDefault(),ee(w))},dangerouslySetInnerHTML:{__html:y}})}):e.jsx("p",{role:"status",className:"p-4 text-sm text-muted-foreground",children:k("architecture.rendering")}),F&&x]})]});return F?Nt.createPortal(e.jsx("section",{ref:c,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:me}),document.body):e.jsx("section",{className:"overflow-clip rounded-xl border border-border/20 bg-surface-2","aria-label":k("architecture.diagram"),children:me})}function ke(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&&Vt(a)?a:null}function ht(r,o){const a=[...r.matchAll(/^# (.+?): hunk \d+,/gm)].map(x=>x[1]),p=(a.length?a:r.split(/\r?\n/).map(x=>x.trim()).filter(Boolean)).map(x=>ke(x,o));if(p.some(x=>x===null))return null;const n=[...new Set(p)];return n.length<=20?n:null}function $t({rootPath:r,initialDirectory:o,selected:a,onChange:d,selectionDisabled:p=!1,compact:n=!1}){const{t:x}=he(),g=Ft(r),u=Gt(o||g,g),l=u.path,[T,M]=s.useState(""),[k,C]=s.useState(null),[E,v]=s.useState(0),[R,z]=s.useState(null);s.useEffect(()=>{if(!R)return;const $=window.setTimeout(()=>z(null),1800);return()=>window.clearTimeout($)},[R]);const S=new Set(a.map($=>`${g==="/"?"":g}/${$}`)),c=$=>{const A=ke($,g);p||!A||a.includes(A)||a.length>=20||d([...a,A])},f=$=>{$!==g&&!ke($,g)||(u.navigate($),M(""),C(null))},h=`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"}`,y=ke(l,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(Qt,{buttonClassName:h,iconSize:17,parent:{disabled:!u.canGoParent,onClick:()=>{u.goParent(),M(""),C(null)}},root:{disabled:l===g,onClick:()=>f(g)}}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium",title:l,children:y??(l.split("/").pop()||"/")}),y&&e.jsx("button",{type:"button",className:`${h} text-primary`,disabled:p||!a.includes(y)&&a.length>=20,"aria-label":`${x("architecture.addScopeReference")}: ${l.split("/").pop()}`,title:y,"aria-pressed":a.includes(y),onClick:()=>c(l),children:a.includes(y)?e.jsx(Lt,{size:15}):e.jsx(Tt,{size:15})}),e.jsx("button",{type:"button",className:h,"aria-label":x("rightSidebar.refreshFiles"),onClick:()=>{v($=>$+1)},children:e.jsx(jt,{size:15})})]})}),p&&e.jsx("p",{role:"alert",className:"shrink-0 px-3 pb-2 text-xs text-muted-foreground",children:x("architecture.correctPathsFirst")}),e.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 pb-2",children:e.jsx("input",{"aria-label":x("architecture.searchScopePaths"),placeholder:x("architecture.searchScopePaths"),value:T,onChange:$=>M($.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(Pt,{rootPath:l,selectedFilePath:k,onFileSelect:$=>{C($),c($)},onDirectoryRoot:f,onPathReference:c,getReferenceText:$=>ke($,g)??$,query:T,onReferenceCopied:z,copiedReferenceKey:R,onSearchFromDirectory:f,referenceSelection:{paths:S,label:x("architecture.addScopeReference"),disabled:p||a.length>=20}},`${l}:${E}`)})]})}function Nr({rootPath:r,initialDirectory:o,initial:a,onConfirm:d,onCancel:p}){const{t:n}=he(),x=s.useRef(null);Je(x,!0,p);const g=s.useId(),[u,l]=s.useState(a);s.useEffect(()=>{const M=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=M}},[]);const T="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 Nt.createPortal(e.jsxs("div",{className:"fixed inset-0 z-popover flex items-center justify-center p-[max(0.75rem,env(safe-area-inset-top))]",children:[e.jsx("button",{type:"button",className:"absolute inset-0 z-10 cursor-default bg-[var(--app-backdrop)]","aria-label":n("common.cancel"),onClick:p}),e.jsxs("section",{ref:x,id:`${g}-dialog`,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":g,"aria-describedby":`${g}-hint`,className:"relative z-20 flex h-full max-h-[42rem] w-full max-w-xl flex-col overflow-hidden rounded-xl border border-border/20 bg-surface text-foreground shadow-xl",children:[e.jsxs("header",{className:"shrink-0 px-3 py-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{id:g,className:"min-w-0 flex-1 text-sm font-semibold",title:n("architecture.browsePathsHint"),children:n("architecture.choosePaths")}),e.jsx("button",{type:"button",className:T,"aria-label":n("common.close"),onClick:p,children:e.jsx(Se,{size:17})})]}),e.jsx("p",{id:`${g}-hint`,className:"sr-only",children:n("architecture.browsePathsHint")})]}),e.jsx($t,{rootPath:r,initialDirectory:o,selected:u,onChange:l}),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:`${T} min-w-0 max-w-full bg-surface-2`,"aria-label":`${n("architecture.removePath")}: ${M}`,onClick:()=>l(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:T,onClick:p,children:n("common.cancel")}),e.jsx("button",{type:"button",className:`${T} bg-primary/15 text-primary`,onClick:()=>d(u),children:n("architecture.usePaths")})]})]})]})]}),document.body)}function xt({rootPath:r,initial:o,outputFile:a,currentFile:d,currentDirectory:p,active:n=!0,onInsertPrompt:x,onPrepared:g,onClose:u}){const{t:l,locale:T}=he(),M=s.useRef(null),k=s.useRef(null);Je(k,n,u),s.useLayoutEffect(()=>{n&&k.current?.scrollIntoView?.({block:"start"})},[n]);const[C,E]=s.useState(!1);s.useLayoutEffect(()=>{const L=k.current;if(!n||!L)return;const ee=()=>E(L.clientWidth>=900);if(ee(),typeof ResizeObserver>"u")return;const B=new ResizeObserver(ee);return B.observe(L),()=>B.disconnect()},[n]);const v=s.useId(),[R,z]=s.useState(o.kind),[S,c]=s.useState(o.target),[f,h]=s.useState(o.paths.join(`
|
|
3
|
+
`)),[y,$]=s.useState(o.depth),[A,_]=s.useState(o.focus),[I,W]=s.useState(null),[Y,F]=s.useState(!1),[ie,be]=s.useState(!1),X=s.useRef(0);s.useEffect(()=>()=>{X.current++},[]),s.useEffect(()=>{n||(X.current++,F(!1),be(!1))},[n]);const q=ht(f,r),Q=d?ke(d,r):null,ae=p?ke(p,r):null,oe=ae?p:Q?d.slice(0,d.lastIndexOf("/")):r,xe=n&&C&&R!=="project"&&!a&&!ie;let j=null;try{(R==="project"||q)&&(j=Kt({kind:R,target:S,paths:q??[],depth:y,focus:A}))}catch{}const J=j?Xt(r,T,j,a):"",H="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",ue=`${H} px-3`,U=`${H} px-1`,ce="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",K=()=>{X.current++,F(!1),W(null)},ge=L=>{h(q?[...new Set([...q,L])].join(`
|
|
4
4
|
`):`${f.trim()}
|
|
5
5
|
${L}`),K()},Z=j;return e.jsxs("div",{ref:k,id:`${v}-workspace`,tabIndex:-1,className:xe?"grid min-h-0 min-w-0 flex-1 grid-cols-[20rem_minmax(0,1fr)] grid-rows-[minmax(0,1fr)] items-start gap-3":"min-w-0 shrink-0",children:[xe&&e.jsxs("section",{"aria-label":l("architecture.choosePaths"),"aria-describedby":`${v}-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:l("architecture.browsePathsHint"),children:l("architecture.choosePaths")}),e.jsxs("p",{role:"status","aria-label":`${l("architecture.selectedPaths")} ${q?.length??0} / 20`,className:"shrink-0 text-xs tabular-nums text-muted-foreground",children:[q?.length??0," / 20"]}),e.jsx("p",{id:`${v}-browser-hint`,className:"sr-only",children:l("architecture.browsePathsHint")})]}),e.jsx($t,{compact:!0,rootPath:r,initialDirectory:oe,selected:q??[],selectionDisabled:!q,onChange:L=>{h(L.join(`
|
|
6
6
|
`)),K()}})]}),e.jsxs("form",{ref:M,tabIndex:-1,className:`min-w-0 space-y-2.5 rounded-xl border border-border/20 bg-surface-2 p-3 ${xe?"max-h-full overflow-y-auto overscroll-contain":""}`,onSubmit:L=>{if(L.preventDefault(),!Z||Y||!n||!M.current)return;const ee=++X.current,B=M.current;B.focus({preventScroll:!0}),F(!0),W(null),Promise.resolve().then(()=>ee===X.current&&B.isConnected?x(J,B):!1).then(Ce=>{ee===X.current&&(Ce===!0?(g(a??Ue(Z),Z),W("inserted")):W("insertFailed"))}).catch(()=>{ee===X.current&&W("insertFailed")}).finally(()=>{ee===X.current&&F(!1)})},children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("h2",{className:"text-sm font-medium",children:l(a?"architecture.updateAnalysis":"architecture.prepare")}),e.jsx("button",{type:"button",className:`${ue} px-2`,"aria-label":l("architecture.closePreparation"),onClick:u,children:e.jsx(Se,{size:16})})]}),e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${v}-kind`,children:[e.jsx("span",{children:l("architecture.analysisRange")}),e.jsxs("select",{id:`${v}-kind`,className:ce,value:R,disabled:!!a,onChange:L=>{z(L.target.value),K()},children:[e.jsx("option",{value:"project",children:l("architecture.projectRange")}),e.jsx("option",{value:"module",children:l("architecture.moduleRange")}),e.jsx("option",{value:"feature",children:l("architecture.featureRange")})]})]}),R==="feature"&&e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${v}-target`,children:[e.jsx("span",{children:l("architecture.featureTarget")}),e.jsx("input",{id:`${v}-target`,className:ce,value:S,readOnly:!!a,maxLength:1e3,placeholder:l("architecture.featurePlaceholder"),onChange:L=>{c(L.target.value),K()},"aria-describedby":`${v}-validation`})]}),R!=="project"&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"block text-xs",htmlFor:`${v}-paths`,children:l(R==="module"?"architecture.modulePaths":"architecture.startPaths")}),e.jsx("textarea",{id:`${v}-paths`,className:`${ce} resize-y font-mono text-xs`,rows:2,value:f,readOnly:!!a,placeholder:l("architecture.modulePlaceholder"),onChange:L=>{h(L.target.value),K()},onBlur:()=>{!a&&q&&h(q.join(`
|
|
7
7
|
`))},onPaste:L=>{if(a)return;const ee=ht(L.clipboardData.getData("text/plain"),r);if(!ee?.length||!q)return;const B=[...new Set([...q,...ee])];B.length>20||(L.preventDefault(),h(B.join(`
|
|
8
8
|
`)),K())},"aria-describedby":`${v}-paths-hint ${v}-validation`}),!a&&e.jsxs("div",{className:"flex flex-wrap gap-1",children:[!xe&&e.jsxs("button",{type:"button",className:`${U} text-primary`,"aria-label":l("architecture.choosePaths"),onClick:()=>be(!0),children:[e.jsx(It,{size:14}),l("architecture.browsePaths")]}),ae&&e.jsx("button",{type:"button",className:U,disabled:!!q?.includes(ae)||(q?.length??0)>=20,title:ae,onClick:()=>ge(ae),children:l("architecture.useCurrentDirectory")}),Q&&e.jsx("button",{type:"button",className:U,disabled:!!q?.includes(Q)||(q?.length??0)>=20,title:Q,onClick:()=>ge(Q),children:l("architecture.useCurrentFile")})]}),e.jsx("p",{id:`${v}-paths-hint`,className:"text-xs leading-relaxed text-muted-foreground",title:r,children:l("architecture.pathsHint")})]}),!j&&(f.trim()||S.trim())&&e.jsx("p",{id:`${v}-validation`,role:"alert",className:"text-xs text-muted-foreground",children:l(R==="module"?"architecture.invalidPaths":"architecture.requiredFeature")}),e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${v}-focus`,children:[e.jsx("span",{children:l("architecture.focus")}),e.jsx("textarea",{id:`${v}-focus`,className:`${ce} resize-y`,rows:2,maxLength:2e3,value:A,placeholder:l("architecture.focusPlaceholder"),onChange:L=>{_(L.target.value),K()}})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("button",{type:"submit",disabled:!j||Y,className:`${ue} bg-primary/15 text-primary`,children:l(Y?"architecture.inserting":"architecture.insertPrompt")}),e.jsxs("button",{type:"button",disabled:!j||Y,className:ue,onClick:()=>{if(!Z)return;const L=++X.current;Promise.resolve().then(()=>navigator.clipboard.writeText(J)).then(()=>{L===X.current&&(g(a??Ue(Z),Z),W("copied"))}).catch(()=>{L===X.current&&W("failed")})},children:[e.jsx(Ot,{size:14}),l("architecture.copyPrompt")]})]}),I&&e.jsx("p",{role:"status",className:"text-xs text-muted-foreground",children:l(`architecture.${I}`)}),e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer py-2 text-xs text-muted-foreground",children:l("architecture.analysisOptions")}),e.jsxs("div",{className:"space-y-3 pt-1",children:[e.jsxs("label",{className:"block space-y-1 text-xs",htmlFor:`${v}-depth`,children:[e.jsx("span",{children:l("architecture.dependencyDepth")}),e.jsxs("select",{id:`${v}-depth`,className:ce,value:y,onChange:L=>{$(L.target.value),K()},children:[e.jsx("option",{value:"boundary",children:l("architecture.boundaryDepth")}),e.jsx("option",{value:"dependencies",children:l("architecture.followDepth")})]})]}),R==="feature"&&e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:l("architecture.featureScopeHint")}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:l(a?"architecture.updateOnly":"architecture.independentHint")})]})]}),e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer py-2 text-xs text-muted-foreground",children:l("architecture.previewPrompt")}),e.jsx("textarea",{readOnly:!0,"aria-label":l("architecture.previewPrompt"),value:J,className:`${ce} mt-2 h-52 resize-y font-mono text-xs`})]}),e.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",children:l("architecture.promptHint")})]}),n&&ie&&e.jsx(Nr,{rootPath:r,initialDirectory:oe,initial:q??[],onCancel:()=>be(!1),onConfirm:L=>{h(L.join(`
|
|
9
|
-
`)),be(!1),K()}})]})}function kr({node:r,view:o,parentId:a,onSelect:d,onExplore:p,onAnalyze:n,onOpenFile:x,onClose:g,document:u,rootPath:l,onEdit:P,onReference:M,embedded:k=!1}){const{t:C,locale:E}=he(),v=[...r.references??[],...u?.perspectives.flatMap(c=>c.nodes.filter(f=>f.references?.some(h=>h.perspective===o.id&&(!h.node||h.node===r.id))).map(f=>({perspective:c.id,node:f.id})))??[]],R=nt(o,a),z=R.edges.filter(c=>c.from===r.id||c.to===r.id),S="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:`${S} 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:l,onEdit:P,onOpenFile:x})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[o.nodes.some(c=>c.parentId===r.id)&&e.jsxs("button",{type:"button",className:`${S} bg-primary/15 text-primary`,onClick:p,children:[C("architecture.explore"),e.jsx(Te,{size:14})]}),r.files.length>0&&e.jsxs("button",{type:"button",className:`${S} text-primary`,onClick:n,children:[e.jsx(vt,{size:14}),C("architecture.analyzeModule")]})]}),v.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground",children:E==="zh"?"跨视角引用":"Cross-perspective references"}),v.map((c,f)=>e.jsxs("button",{type:"button","aria-label":`${E==="zh"?"打开引用":"Open reference"}: ${u?.perspectives.find(h=>h.id===c.perspective)?.nodes.find(h=>h.id===c.node)?.title??u?.perspectives.find(h=>h.id===c.perspective)?.title??c.perspective}`,className:`${S} block w-full text-left text-primary`,onClick:()=>M?.(c),children:[u?.perspectives.find(h=>h.id===c.perspective)?.nodes.find(h=>h.id===c.node)?.title??u?.perspectives.find(h=>h.id===c.perspective)?.title??c.perspective,e.jsx(Te,{size:14})]},f))]}),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((c,f)=>{const h=c.from===r.id,y=R.nodes.find($=>$.id===(h?c.to:c.from));return y?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(y.id),"aria-label":`${C(h?"architecture.outgoing":"architecture.incoming")}: ${y.title} · ${c.label}`,children:[h?e.jsx(Bt,{size:15,className:"shrink-0 text-primary"}):e.jsx(cr,{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:y.title}),e.jsxs("span",{className:"mt-0.5 block break-words text-muted-foreground",children:[C(h?"architecture.outgoing":"architecture.incoming")," · ",c.label]})]}),e.jsx(Te,{size:14,className:"shrink-0"})]},`${c.from}:${c.to}:${f}`):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(c=>e.jsxs("button",{type:"button",className:"block min-h-11 w-full break-all rounded-lg px-2 py-2 text-left font-mono text-xs text-primary hover:bg-surface-elevated",onClick:()=>x(c),children:[c.path,c.line?`:${c.line}`:""]},`${c.path}:${c.line??""}`))]})]})}function pt({title:r,stageKey:o,source:a=!1,fullHeight:d=!1,inGraph:p=!1,docked:n=!1,side:x=!1,active:g=!0,onBack:u,backLabel:l,onClose:P,onDismiss:M,onCollapse:k,children:C}){const{t:E}=he(),v=s.useRef(null),R=s.useRef(null),z=s.useRef(new Map);Je(v,g&&!p&&(!n||d),M),s.useLayoutEffect(()=>{R.current&&(R.current.scrollTop=z.current.get(o)??0),g&&v.current?.querySelector("button:not(:disabled)")?.focus({preventScroll:!0})},[o,g]);const S=n?d?"relative h-full w-full flex-1":x?"relative h-full w-[22rem] max-w-[40%] shrink-0":"relative h-[48%] max-h-96 w-full shrink-0":p?`${a||d?"inset-0":"inset-x-0 bottom-0 max-h-[48%]"} min-[768px]:inset-y-0 min-[768px]:left-auto min-[768px]:right-0 min-[768px]:max-h-none ${a||d?"min-[768px]:w-[min(50vw,40rem)]":"min-[768px]:w-[22rem]"}`:x?"inset-y-0 right-0 w-[22rem] max-w-full":"inset-0",c="inline-flex min-h-11 shrink-0 items-center justify-center gap-1.5 rounded-lg px-2 text-xs text-primary hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring",f=()=>{R.current&&z.current.set(o,R.current.scrollTop)};return e.jsxs("aside",{ref:v,tabIndex:-1,role:p||n&&!d?void 0:"dialog","aria-modal":p?void 0:!1,"aria-label":r,"data-architecture-inspector":!0,"data-sidebar-gesture-ignore":!0,onClickCapture:f,className:`${n?"":"absolute"} z-20 flex min-h-0 flex-col overflow-hidden border border-border/30 bg-surface ${n?"":"shadow-xl"} ${S}`,children:[e.jsxs("header",{className:"flex shrink-0 items-center gap-2 border-b border-border/15 px-2 py-1",children:[e.jsxs("button",{type:"button",className:c,"aria-label":u?l:E("architecture.closeDetail"),onClick:u??P,children:[e.jsx(Ht,{size:17}),e.jsx("span",{children:u?l:E("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:c,"aria-label":E("architecture.collapseDetail"),onClick:k,children:e.jsx(wt,{size:17})}),u&&e.jsx("button",{type:"button",className:c,"aria-label":E("architecture.closeDetail"),onClick:P,children:e.jsx(Se,{size:17})})]}),e.jsx("div",{ref:R,onScroll:f,className:`min-h-0 flex-1 ${a?"overflow-hidden":"overflow-y-auto overscroll-contain p-3"}`,children:C})]})}function Sr({node:r,onExpand:o,onClose:a}){const{t:d}=he(),p=s.useRef(null),n=s.useRef(null);s.useLayoutEffect(()=>{document.activeElement!==p.current&&(n.current=document.activeElement),p.current?.focus({preventScroll:!0})},[r.id]),s.useLayoutEffect(()=>()=>{n.current?.isConnected&&n.current.focus({preventScroll:!0})},[]);const x="inline-flex min-h-11 shrink-0 items-center justify-center rounded-lg px-2 text-xs hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring";return e.jsxs("section",{ref:p,tabIndex:-1,"aria-label":r.title,"data-architecture-inspector":!0,"data-sidebar-gesture-ignore":!0,className:"shrink-0 border-t border-border/30 bg-surface px-3 pb-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"min-w-0 flex-1 truncate text-sm font-semibold",title:r.title,children:r.title}),e.jsx("button",{type:"button",className:`${x} text-primary`,onClick:o,children:d("architecture.expandDetail")}),e.jsx("button",{type:"button",className:x,"aria-label":d("architecture.closeDetail"),onClick:a,children:e.jsx(Se,{size:17})})]}),e.jsx("p",{className:"line-clamp-2 break-words text-xs leading-relaxed text-muted-foreground",children:r.summary})]})}function it(r){return`termdock.architecture.selection:${r}`}function ft(r){try{const o=r?sessionStorage.getItem(it(r)):null;return o&&Ve(o)?o:fe}catch{return fe}}function bt(r){try{const o=r?sessionStorage.getItem(it(r)):null;return!!o&&Ve(o)}catch{return!1}}function es({rootPath:r,active:o,onInsertPrompt:a,onOpenFile:d,renderSource:p}){const{t:n,locale:x}=he(),g=dt(t=>t.rootPath===r?t.selectedFilePath:null),u=dt(t=>t.rootPath===r?t.explorerRoot:null),[l,P]=s.useState(()=>ft(r)),[M,k]=s.useState([]),[C,E]=s.useState(!1),[v,R]=s.useState(Re),[z,S]=s.useState(null),[c,f]=s.useState(null),[h,y]=s.useState(!0),[$,A]=s.useState(null),[_,I]=s.useState(0),[W,Y]=s.useState(!1),[F,ie]=s.useState(!1),[be,X]=s.useState(""),[q,Q]=s.useState([]),[ae,oe]=s.useState(null),[le,xe]=s.useState([]),[j,J]=s.useState(null),[H,ue]=s.useState(null),[U,ce]=s.useState(null),[K,ge]=s.useState(null),[Z,L]=s.useState(!1),[ee,B]=s.useState(!1),[Ce,Oe]=s.useState(()=>typeof window<"u"&&window.innerWidth>=768),me=s.useRef(0),i=s.useRef(bt(r)),w=s.useRef(null),m=s.useRef(null),[D,N]=s.useState(0),[V,je]=s.useState("auto"),te=V==="auto"?D>=560?"graph":"outline":V,re=s.useRef(null),pe=t=>{i.current=!0,P(t);try{r&&sessionStorage.setItem(it(r),t)}catch{}},Ae=()=>{S(null),re.current?.focus({preventScroll:!0})};s.useEffect(()=>{const t=()=>Oe(window.innerWidth>=768);return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]),s.useEffect(()=>{const t=w.current;if(!t||!o||typeof ResizeObserver>"u")return;const b=()=>{t.clientWidth>0&&N(t.clientWidth)};b();const O=new ResizeObserver(b);return O.observe(t),()=>O.disconnect()},[o]),s.useEffect(()=>{f(null),A(null),y(!0),ie(!1),X(""),Q([]),ne(),S(null),P(ft(r)),k([]),E(!1),R(Re),i.current=bt(r)},[r]),s.useEffect(()=>{f(null),A(null),y(!0),ie(!1),X(""),Q([]),ne()},[l]),s.useEffect(()=>{if(!o||!r)return;let t=!1,b=null,O;const G=async Le=>{const Ge=++me.current,qe=new AbortController;b=qe,Le&&(y(!0),A(null));const Rt=window.setTimeout(()=>qe.abort(),15e3);try{const[Ne,Pe]=await Promise.allSettled([jr(r,qe.signal,l),vr(r,qe.signal)]);if(t||me.current!==Ge)return;if(Pe.status==="fulfilled"?(k(Pe.value),E(!1)):E(!0),Ne.status==="rejected")throw Ne.reason;f(ut=>JSON.stringify(ut)===JSON.stringify(Ne.value)?ut:Ne.value),A(null),!Ne.value&&l===fe&&!i.current&&Pe.status==="fulfilled"&&Pe.value.length===1&&pe(Pe.value[0])}catch(Ne){if(t||me.current!==Ge)return;A(Ne instanceof St?"format":"load")}finally{window.clearTimeout(Rt),!t&&me.current===Ge&&(y(!1),O=setTimeout(()=>{t||G(!1)},1e4))}};return G(!0),()=>{t=!0,++me.current,b?.abort(),clearTimeout(O)}},[r,o,_,l]);const De=JSON.stringify(r?[...new Set([`${r}/.termdock`,`${r}/.termdock/architectures`,`${r}/.omm`,...l===".omm"?c?.perspectives.flatMap(t=>[`${r}/.omm/${t.id}`,...t.nodes.flatMap(b=>b.documentPath?[`${r}/.omm/${b.documentPath}`]:[])])??[]:[]])].slice(0,128).sort():[]);s.useEffect(()=>{if(!o||!r)return;const t=new AbortController;let b;return _t(JSON.parse(De),O=>{O.some(G=>G.type==="rescan-required"||G.path?.includes("/.omm/")||G.path?.includes("/.termdock/"))&&(clearTimeout(b),b=setTimeout(()=>I(G=>G+1),300))},t.signal).catch(()=>{}),()=>{t.abort(),clearTimeout(b)}},[r,o,De]);const T=c?.perspectives.find(t=>t.id===be)??c?.perspectives[0],ze=s.useMemo(()=>c?dr(c,x==="zh"?"全部视角":"All perspectives"):null,[c,x]),Ke=t=>{t==="all-perspectives"?(ie(!0),we([])):(ie(!1),X(t),we([]))},ve=s.useMemo(()=>{const t=[];for(const b of q){if(!T?.nodes.some(O=>O.id===b&&O.parentId===t[t.length-1]))break;t.push(b)}return t},[q,T]),Be=ve[ve.length-1],He=s.useMemo(()=>T?nt(T,Be):null,[T,Be]),se=T?.nodes.find(t=>t.id===ae),ye=T?.nodes.find(t=>t.id===Be),Ct=[...new Set([fe,...M,l])],_e=c?.analysis??(l===fe||l===".omm"?Re:v.kind==="project"?null:v),ne=()=>{Y(!1),J(null),oe(null),B(!1),xe([]),ue(null),ce(null),ge(null)},Me=(t,b=!1)=>{xe(O=>b&&ae?[...O,ae]:[]),B(b),Y(!1),J(null),ue(null),ce(null),ge(null),oe(t)},we=t=>{t.length&&ie(!1),Q(t),ne(),m.current&&(m.current.scrollTop=0)},at=t=>{p?(B(!0),ue(t)):d(t)},zt=t=>{ce({...Re,kind:"module",paths:[...new Set(t.files.map(b=>b.path))].slice(0,20)}),ge(null)},lt=j?()=>J(null):H?()=>ue(null):U?()=>ce(null):le.length?()=>{oe(le[le.length-1]),xe(t=>t.slice(0,-1))}:void 0,Et=n(H||U||j?"architecture.backToModule":"architecture.previousModule"),Ee=Z?Ce:D>=900,Xe=!Ee&&!ee&&!H&&!U&&!j,Fe=!Z&&(!!se||W)&&(!!H||!!U||!!j||te==="outline"),Ye=t=>{const b=[];let O=T?.nodes.find(G=>G.id===t);for(;O?.parentId;)b.unshift(O.parentId),O=T?.nodes.find(G=>G.id===O.parentId);return b},ct=t=>{const b=c?.perspectives.find(O=>O.id===t.perspective);if(b)if(ne(),X(b.id),t.node){const O=[];let G=b.nodes.find(Le=>Le.id===t.node);for(;G?.parentId;)O.unshift(G.parentId),G=b.nodes.find(Le=>Le.id===G.parentId);Q(O),oe(t.node),B(!0)}else Q([]),Y(!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=Xe?ne:lt??(!Ee&&te==="graph"?()=>B(!1):ne),ot=t=>W&&T?e.jsx(pt,{active:o,docked:!0,title:T.title,stageKey:`${T.id}:${j?"edit":"view-document"}`,source:!1,fullHeight:Fe||!!j,inGraph:t,side:Ee,onBack:j?()=>J(null):void 0,backLabel:n("architecture.backToModule"),onClose:ne,onDismiss:j?()=>J(null):ne,children:j?e.jsx(Qe,{root:r,file:l,perspective:T.id,initialField:j.field,onSaved:b=>{++me.current,f(b),J(null),I(O=>O+1)},onCancel:()=>J(null)}):e.jsxs(e.Fragment,{children:[e.jsx(st,{value:T,rootPath:r,onEdit:b=>J({field:b}),onOpenFile:d}),e.jsx("button",{type:"button",className:`${de} text-primary`,onClick:()=>{ie(!1),we([])},children:x==="zh"?"进入此视角":"Explore this perspective"})]})}):se&&((t||te==="graph")&&Xe?e.jsx(Sr,{node:se,onExpand:()=>B(!0),onClose:ne}):e.jsx(pt,{active:o&&!U,docked:!t||!H&&!U,title:se.title,stageKey:`${se.id}:${H?`${H.path}:${H.line}`:U?"analysis":j?`edit:${j.field}`:"details"}`,source:!!H,fullHeight:t?!!U||!!j:Fe,inGraph:t,side:Ee,onBack:lt,backLabel:Et,onClose:ne,onDismiss:Ze,onCollapse:!Ee&&!Fe&&!H&&!U&&!j?()=>B(!1):void 0,children:j?e.jsx(Qe,{root:r,file:l,perspective:T.id,node:j.node,initialField:j.field,onSaved:b=>{++me.current,f(b),J(null),I(O=>O+1)},onCancel:()=>J(null)},`${l}:${T.id}:${j.node??"view"}:${j.field}`):H&&p?p(H):U?e.jsxs(e.Fragment,{children:[e.jsx(xt,{active:o,rootPath:r,currentFile:g,currentDirectory:u,initial:U,onInsertPrompt:a,onPrepared:ge,onClose:()=>ce(null)},se.id),K&&e.jsx("button",{type:"button",className:`${de} mt-3 bg-primary/15 text-primary`,onClick:()=>{R(U),pe(K),ne()},children:n("architecture.viewPrepared")})]}):e.jsx(kr,{embedded:!0,document:c,rootPath:r,onReference:ct,onEdit:b=>{B(!0),J({node:se.id,field:b})},node:se,view:T,parentId:se.parentId,onSelect:b=>Me(b,!0),onExplore:()=>we([...Ye(se.id),se.id]),onAnalyze:()=>zt(se),onOpenFile:at,onClose:ne})}));return r?e.jsxs("div",{ref:w,className:"relative flex h-full min-h-0 flex-col",onKeyDown:t=>{!Z&&(se||W)&&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:re,type:"button",className:de,disabled:!_e,onClick:()=>{_e&&(ne(),S(z?null:{initial:_e,...c?{outputFile:l}:{}}))},"aria-expanded":!!z,children:[e.jsx(vt,{size:14}),n(c?"architecture.update":"architecture.generate")]}),(c||l!==fe)&&e.jsx("button",{type:"button",className:`${de} px-2`,"aria-label":n("architecture.newAnalysis"),onClick:()=>{ne(),S({initial:Re})},children:e.jsx(yt,{size:16})}),e.jsx("button",{type:"button",className:`${de} px-2`,"aria-label":n("architecture.refresh"),disabled:h,onClick:()=>I(t=>t+1),children:e.jsx(jt,{size:15,className:h?"animate-spin":""})})]})]}),e.jsxs("div",{className:`relative flex min-h-0 flex-1 ${Ee&&!Fe?"flex-row":"flex-col"}`,"data-architecture-workspace":!0,children:[e.jsx("div",{ref:m,hidden:Fe,"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:j&&!se&&!W?e.jsxs("div",{className:"flex min-h-full flex-col gap-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:T?.title}),e.jsx(Qe,{root:r,file:l,perspective:T.id,initialField:j.field,onSaved:t=>{++me.current,f(t),J(null),I(b=>b+1)},onCancel:()=>J(null)},`${l}:${T?.id}:${j.field}`)]}):z?e.jsx(xt,{active:o,rootPath:r,currentFile:g,currentDirectory:u,initial:z.initial,outputFile:z.outputFile,onInsertPrompt:a,onPrepared:(t,b)=>{R(b),pe(t)},onClose:Ae},`${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:l,onChange:t=>{R(Re),pe(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===fe?n("architecture.projectRange"):`${n(t.includes("/module-")?"architecture.moduleRange":"architecture.featureRange")}: ${t===l&&c?.analysis?c.analysis.target.replace(/\n/g,", "):Yt(t)}`},t))})]}),C&&e.jsx("p",{role:"alert",className:"mb-3 text-xs text-muted-foreground",children:n("architecture.libraryFailed")}),h&&!c&&e.jsx("p",{role:"status",className:"py-4 text-sm text-muted-foreground",children:n("architecture.loading")}),$&&e.jsxs("div",{role:"alert",className:"mb-3 rounded-lg border border-destructive/30 p-3 text-sm",children:[e.jsx("p",{children:n($==="format"?"architecture.invalid":"architecture.loadFailed")}),c&&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:()=>I(t=>t+1),children:n("architecture.retry")})]}),!h&&!$&&!c&&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(l===fe?"architecture.emptyHint":"architecture.awaitingFile")})]}),c&&T&&He&&e.jsxs("div",{className:"space-y-3",children:[!_e&&e.jsx("p",{className:"text-xs text-muted-foreground",children:n("architecture.scopeUnavailable")}),c.analysis&&e.jsxs("p",{className:"break-words text-xs text-muted-foreground",children:[n(`architecture.${c.analysis.kind}Range`),c.analysis.target?` · ${c.analysis.target.replace(/\n/g,", ")}`:""," · ",n(c.analysis.depth==="boundary"?"architecture.boundaryDepth":"architecture.followDepth")]}),c.summary.length<=240&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:c.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:F?"all-perspectives":T.id,onChange:t=>Ke(t.target.value),className:"min-h-11 min-w-0 flex-1 rounded-lg border border-border/20 bg-surface-2 px-2 text-sm text-foreground",children:[e.jsx("option",{value:"all-perspectives",children:x==="zh"?"全部视角":"All perspectives"}),c.perspectives.map(t=>e.jsx("option",{value:t.id,children:t.title},t.id))]})]}),ve.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:()=>we([]),children:T.title}),ve.map((t,b)=>e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(Te,{size:12}),e.jsx("button",{type:"button",className:`${de} px-2`,onClick:()=>we(ve.slice(0,b+1)),children:T.nodes.find(O=>O.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??T.summary}),e.jsxs("details",{children:[e.jsx("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:x==="zh"?"视角文档与模块目录":"Perspective documents and module tree"}),e.jsx(st,{value:ye??T,rootPath:r,onOpenFile:at,onEdit:t=>{ye?(oe(ye.id),B(!0),J({node:ye.id,field:t})):J({field:t})}}),e.jsx("nav",{"aria-label":x==="zh"?"模块目录":"Module tree",className:"my-2 border-l border-border/20",children:T.nodes.map(t=>e.jsx("button",{type:"button","aria-label":`${x==="zh"?"定位模块":"Go to module"}: ${t.title}`,className:`${de} flex w-full justify-start text-left ${ae===t.id?"text-primary":""}`,style:{paddingInlineStart:12+Ye(t.id).length*16},onClick:()=>{Q(Ye(t.id)),Me(t.id),B(!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":te===t,className:`${de} flex-1 ${te===t?"bg-surface text-primary":"text-muted-foreground"}`,onClick:()=>je(t),children:n(t==="outline"?"architecture.outlineMode":"architecture.graphMode")},t))}),te==="graph"?e.jsxs(e.Fragment,{children:[e.jsx(wr,{view:F&&ze?ze.view:T,parentId:F?void 0:Be,selectedId:F&&ze?[...ze.references].find(([,t])=>t.perspective===T.id&&t.node===ae)?.[0]??null:ae,onSelect:t=>{if(F&&ze){const b=ze.references.get(t);b&&ct(b)}else Me(t)},active:o,referenceWidth:D,inspector:ot(!0),inspectorStage:H?"source":U||j?"analysis":Xe?"preview":"details",onDismissInspector:W?j?()=>J(null):ne:Ze,onExpandedChange:t=>{L(t),!t&&Z&&ne()},heading:e.jsxs("div",{className:"relative",children:[e.jsxs("select",{"aria-label":n("architecture.perspective"),title:T.title,value:F?"all-perspectives":T.id,onChange:t=>Ke(t.target.value),className:"h-11 w-full min-w-0 appearance-none truncate bg-surface pr-4 text-xs font-semibold focus-visible:ring-2 focus-visible:ring-ring",children:[e.jsx("option",{value:"all-perspectives",children:x==="zh"?"全部视角":"All perspectives"}),c.perspectives.map(t=>e.jsx("option",{value:t.id,children:t.title},t.id))]}),e.jsx(wt,{size:12,className:"pointer-events-none absolute right-0 top-1/2 -translate-y-1/2 text-muted-foreground"})]}),navigation:ve.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:()=>we(ve.slice(0,-1)),children:n("architecture.parentModule")}),e.jsxs("span",{className:"truncate text-xs text-muted-foreground",children:[T.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":se?.id===t.id,className:`${de} bg-surface-2`,onClick:()=>Me(t.id),children:t.title},t.id))})]})]}):e.jsx("div",{className:"space-y-2",role:"group","aria-label":n("architecture.modules"),children:F?c.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:()=>Ke(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":se?.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:()=>Me(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(Te,{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(c.generatedAt).toLocaleString(x==="zh"?"zh-CN":"en-US")]}),e.jsxs("div",{className:"space-y-3 pb-3",children:[c.summary.length>240&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:c.summary}),c.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:c.details.limitations.map((t,b)=>e.jsx("li",{children:t},b))})]}):null,c.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")," (",c.details.analyzedPaths.length,")"]}),c.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(yr,{root:r,file:l,document:c,onLoaded:(t,b)=>{pe(t),f(b),I(O=>O+1)}})]})}),o&&!Z&&ot(!1)]})]}):e.jsx("p",{className:"p-5 text-sm text-muted-foreground",children:n("fileTree.noWorkingDir")})}export{es as ArchitecturePanel};
|
|
9
|
+
`)),be(!1),K()}})]})}function kr({node:r,view:o,parentId:a,onSelect:d,onExplore:p,onAnalyze:n,onOpenFile:x,onClose:g,document:u,rootPath:l,onEdit:T,onReference:M,embedded:k=!1}){const{t:C,locale:E}=he(),v=[...r.references??[],...u?.perspectives.flatMap(c=>c.nodes.filter(f=>f.references?.some(h=>h.perspective===o.id&&(!h.node||h.node===r.id))).map(f=>({perspective:c.id,node:f.id})))??[]],R=nt(o,a),z=R.edges.filter(c=>c.from===r.id||c.to===r.id),S="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:`${S} 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:l,onEdit:T,onOpenFile:x})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[o.nodes.some(c=>c.parentId===r.id)&&e.jsxs("button",{type:"button",className:`${S} bg-primary/15 text-primary`,onClick:p,children:[C("architecture.explore"),e.jsx(Pe,{size:14})]}),r.files.length>0&&e.jsxs("button",{type:"button",className:`${S} text-primary`,onClick:n,children:[e.jsx(vt,{size:14}),C("architecture.analyzeModule")]})]}),v.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground",children:E==="zh"?"跨视角引用":"Cross-perspective references"}),v.map((c,f)=>e.jsxs("button",{type:"button","aria-label":`${E==="zh"?"打开引用":"Open reference"}: ${u?.perspectives.find(h=>h.id===c.perspective)?.nodes.find(h=>h.id===c.node)?.title??u?.perspectives.find(h=>h.id===c.perspective)?.title??c.perspective}`,className:`${S} block w-full text-left text-primary`,onClick:()=>M?.(c),children:[u?.perspectives.find(h=>h.id===c.perspective)?.nodes.find(h=>h.id===c.node)?.title??u?.perspectives.find(h=>h.id===c.perspective)?.title??c.perspective,e.jsx(Pe,{size:14})]},f))]}),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((c,f)=>{const h=c.from===r.id,y=R.nodes.find($=>$.id===(h?c.to:c.from));return y?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(y.id),"aria-label":`${C(h?"architecture.outgoing":"architecture.incoming")}: ${y.title} · ${c.label}`,children:[h?e.jsx(Bt,{size:15,className:"shrink-0 text-primary"}):e.jsx(cr,{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:y.title}),e.jsxs("span",{className:"mt-0.5 block break-words text-muted-foreground",children:[C(h?"architecture.outgoing":"architecture.incoming")," · ",c.label]})]}),e.jsx(Pe,{size:14,className:"shrink-0"})]},`${c.from}:${c.to}:${f}`):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(c=>e.jsxs("button",{type:"button",className:"block min-h-11 w-full break-all rounded-lg px-2 py-2 text-left font-mono text-xs text-primary hover:bg-surface-elevated",onClick:()=>x(c),children:[c.path,c.line?`:${c.line}`:""]},`${c.path}:${c.line??""}`))]})]})}function pt({title:r,stageKey:o,source:a=!1,fullHeight:d=!1,inGraph:p=!1,docked:n=!1,side:x=!1,active:g=!0,onBack:u,backLabel:l,onClose:T,onDismiss:M,onCollapse:k,children:C}){const{t:E}=he(),v=s.useRef(null),R=s.useRef(null),z=s.useRef(new Map);Je(v,g&&!p&&(!n||d),M),s.useLayoutEffect(()=>{R.current&&(R.current.scrollTop=z.current.get(o)??0),g&&v.current?.querySelector("button:not(:disabled)")?.focus({preventScroll:!0})},[o,g]);const S=n?d?"relative h-full w-full flex-1":x?"relative h-full w-[22rem] max-w-[40%] shrink-0":"relative h-[48%] max-h-96 w-full shrink-0":p?`${a||d?"inset-0":"inset-x-0 bottom-0 max-h-[48%]"} min-[768px]:inset-y-0 min-[768px]:left-auto min-[768px]:right-0 min-[768px]:max-h-none ${a||d?"min-[768px]:w-[min(50vw,40rem)]":"min-[768px]:w-[22rem]"}`:x?"inset-y-0 right-0 w-[22rem] max-w-full":"inset-0",c="inline-flex min-h-11 shrink-0 items-center justify-center gap-1.5 rounded-lg px-2 text-xs text-primary hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring",f=()=>{R.current&&z.current.set(o,R.current.scrollTop)};return e.jsxs("aside",{ref:v,tabIndex:-1,role:p||n&&!d?void 0:"dialog","aria-modal":p?void 0:!1,"aria-label":r,"data-architecture-inspector":!0,"data-sidebar-gesture-ignore":!0,onClickCapture:f,className:`${n?"":"absolute"} z-20 flex min-h-0 flex-col overflow-hidden border border-border/30 bg-surface ${n?"":"shadow-xl"} ${S}`,children:[e.jsxs("header",{className:"flex shrink-0 items-center gap-2 border-b border-border/15 px-2 py-1",children:[e.jsxs("button",{type:"button",className:c,"aria-label":u?l:E("architecture.closeDetail"),onClick:u??T,children:[e.jsx(Ht,{size:17}),e.jsx("span",{children:u?l:E("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:c,"aria-label":E("architecture.collapseDetail"),onClick:k,children:e.jsx(wt,{size:17})}),u&&e.jsx("button",{type:"button",className:c,"aria-label":E("architecture.closeDetail"),onClick:T,children:e.jsx(Se,{size:17})})]}),e.jsx("div",{ref:R,onScroll:f,className:`min-h-0 flex-1 ${a?"overflow-hidden":"overflow-y-auto overscroll-contain p-3"}`,children:C})]})}function Sr({node:r,onExpand:o,onClose:a}){const{t:d}=he(),p=s.useRef(null),n=s.useRef(null);s.useLayoutEffect(()=>{document.activeElement!==p.current&&(n.current=document.activeElement),p.current?.focus({preventScroll:!0})},[r.id]),s.useLayoutEffect(()=>()=>{n.current?.isConnected&&n.current.focus({preventScroll:!0})},[]);const x="inline-flex min-h-11 shrink-0 items-center justify-center rounded-lg px-2 text-xs hover:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-ring";return e.jsxs("section",{ref:p,tabIndex:-1,"aria-label":r.title,"data-architecture-inspector":!0,"data-sidebar-gesture-ignore":!0,className:"shrink-0 border-t border-border/30 bg-surface px-3 pb-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"min-w-0 flex-1 truncate text-sm font-semibold",title:r.title,children:r.title}),e.jsx("button",{type:"button",className:`${x} text-primary`,onClick:o,children:d("architecture.expandDetail")}),e.jsx("button",{type:"button",className:x,"aria-label":d("architecture.closeDetail"),onClick:a,children:e.jsx(Se,{size:17})})]}),e.jsx("p",{className:"line-clamp-2 break-words text-xs leading-relaxed text-muted-foreground",children:r.summary})]})}function it(r){return`termdock.architecture.selection:${r}`}function ft(r){try{const o=r?sessionStorage.getItem(it(r)):null;return o&&Ve(o)?o:fe}catch{return fe}}function bt(r){try{const o=r?sessionStorage.getItem(it(r)):null;return!!o&&Ve(o)}catch{return!1}}function es({rootPath:r,active:o,onInsertPrompt:a,onOpenFile:d,renderSource:p}){const{t:n,locale:x}=he(),g=dt(t=>t.rootPath===r?t.selectedFilePath:null),u=dt(t=>t.rootPath===r?t.explorerRoot:null),[l,T]=s.useState(()=>ft(r)),[M,k]=s.useState([]),[C,E]=s.useState(!1),[v,R]=s.useState(Re),[z,S]=s.useState(null),[c,f]=s.useState(null),[h,y]=s.useState(!0),[$,A]=s.useState(null),[_,I]=s.useState(0),[W,Y]=s.useState(!1),[F,ie]=s.useState(!1),[be,X]=s.useState(""),[q,Q]=s.useState([]),[ae,oe]=s.useState(null),[le,xe]=s.useState([]),[j,J]=s.useState(null),[H,ue]=s.useState(null),[U,ce]=s.useState(null),[K,ge]=s.useState(null),[Z,L]=s.useState(!1),[ee,B]=s.useState(!1),[Ce,Oe]=s.useState(()=>typeof window<"u"&&window.innerWidth>=768),me=s.useRef(0),i=s.useRef(bt(r)),w=s.useRef(null),m=s.useRef(null),[D,N]=s.useState(0),[V,je]=s.useState("auto"),te=V==="auto"?D>=560?"graph":"outline":V,re=s.useRef(null),pe=t=>{i.current=!0,T(t);try{r&&sessionStorage.setItem(it(r),t)}catch{}},Ae=()=>{S(null),re.current?.focus({preventScroll:!0})};s.useEffect(()=>{const t=()=>Oe(window.innerWidth>=768);return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]),s.useEffect(()=>{const t=w.current;if(!t||!o||typeof ResizeObserver>"u")return;const b=()=>{t.clientWidth>0&&N(t.clientWidth)};b();const O=new ResizeObserver(b);return O.observe(t),()=>O.disconnect()},[o]),s.useEffect(()=>{f(null),A(null),y(!0),ie(!1),X(""),Q([]),ne(),S(null),T(ft(r)),k([]),E(!1),R(Re),i.current=bt(r)},[r]),s.useEffect(()=>{f(null),A(null),y(!0),ie(!1),X(""),Q([]),ne()},[l]),s.useEffect(()=>{if(!o||!r)return;let t=!1,b=null,O;const G=async Le=>{const Ge=++me.current,qe=new AbortController;b=qe,Le&&(y(!0),A(null));const Rt=window.setTimeout(()=>qe.abort(),15e3);try{const[Ne,Te]=await Promise.allSettled([jr(r,qe.signal,l),vr(r,qe.signal)]);if(t||me.current!==Ge)return;if(Te.status==="fulfilled"?(k(Te.value),E(!1)):E(!0),Ne.status==="rejected")throw Ne.reason;f(ut=>JSON.stringify(ut)===JSON.stringify(Ne.value)?ut:Ne.value),A(null),!Ne.value&&l===fe&&!i.current&&Te.status==="fulfilled"&&Te.value.length===1&&pe(Te.value[0])}catch(Ne){if(t||me.current!==Ge)return;A(Ne instanceof St?"format":"load")}finally{window.clearTimeout(Rt),!t&&me.current===Ge&&(y(!1),O=setTimeout(()=>{t||G(!1)},1e4))}};return G(!0),()=>{t=!0,++me.current,b?.abort(),clearTimeout(O)}},[r,o,_,l]);const De=JSON.stringify(r?[...new Set([`${r}/.termdock`,`${r}/.termdock/architectures`,`${r}/.omm`,...l===".omm"?c?.perspectives.flatMap(t=>[`${r}/.omm/${t.id}`,...t.nodes.flatMap(b=>b.documentPath?[`${r}/.omm/${b.documentPath}`]:[])])??[]:[]])].slice(0,128).sort():[]);s.useEffect(()=>{if(!o||!r)return;const t=new AbortController;let b;return _t(JSON.parse(De),O=>{O.some(G=>G.type==="rescan-required"||G.path?.includes("/.omm/")||G.path?.includes("/.termdock/"))&&(clearTimeout(b),b=setTimeout(()=>I(G=>G+1),300))},t.signal).catch(()=>{}),()=>{t.abort(),clearTimeout(b)}},[r,o,De]);const P=c?.perspectives.find(t=>t.id===be)??c?.perspectives[0],ze=s.useMemo(()=>c?dr(c,x==="zh"?"全部视角":"All perspectives"):null,[c,x]),Ke=t=>{t==="all-perspectives"?(ie(!0),we([])):(ie(!1),X(t),we([]))},ve=s.useMemo(()=>{const t=[];for(const b of q){if(!P?.nodes.some(O=>O.id===b&&O.parentId===t[t.length-1]))break;t.push(b)}return t},[q,P]),Be=ve[ve.length-1],He=s.useMemo(()=>P?nt(P,Be):null,[P,Be]),se=P?.nodes.find(t=>t.id===ae),ye=P?.nodes.find(t=>t.id===Be),Ct=[...new Set([fe,...M,l])],_e=c?.analysis??(l===fe||l===".omm"?Re:v.kind==="project"?null:v),ne=()=>{Y(!1),J(null),oe(null),B(!1),xe([]),ue(null),ce(null),ge(null)},Me=(t,b=!1)=>{xe(O=>b&&ae?[...O,ae]:[]),B(b),Y(!1),J(null),ue(null),ce(null),ge(null),oe(t)},we=t=>{t.length&&ie(!1),Q(t),ne(),m.current&&(m.current.scrollTop=0)},at=t=>{p?(B(!0),ue(t)):d(t)},zt=t=>{ce({...Re,kind:"module",paths:[...new Set(t.files.map(b=>b.path))].slice(0,20)}),ge(null)},lt=j?()=>J(null):H?()=>ue(null):U?()=>ce(null):le.length?()=>{oe(le[le.length-1]),xe(t=>t.slice(0,-1))}:void 0,Et=n(H||U||j?"architecture.backToModule":"architecture.previousModule"),Ee=Z?Ce:D>=900,Xe=!Ee&&!ee&&!H&&!U&&!j,Fe=!Z&&(!!se||W)&&(!!H||!!U||!!j||te==="outline"),Ye=t=>{const b=[];let O=P?.nodes.find(G=>G.id===t);for(;O?.parentId;)b.unshift(O.parentId),O=P?.nodes.find(G=>G.id===O.parentId);return b},ct=t=>{const b=c?.perspectives.find(O=>O.id===t.perspective);if(b)if(ne(),X(b.id),t.node){const O=[];let G=b.nodes.find(Le=>Le.id===t.node);for(;G?.parentId;)O.unshift(G.parentId),G=b.nodes.find(Le=>Le.id===G.parentId);Q(O),oe(t.node),B(!0)}else Q([]),Y(!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=Xe?ne:lt??(!Ee&&te==="graph"?()=>B(!1):ne),ot=t=>W&&P?e.jsx(pt,{active:o,docked:!0,title:P.title,stageKey:`${P.id}:${j?"edit":"view-document"}`,source:!1,fullHeight:Fe||!!j,inGraph:t,side:Ee,onBack:j?()=>J(null):void 0,backLabel:n("architecture.backToModule"),onClose:ne,onDismiss:j?()=>J(null):ne,children:j?e.jsx(Qe,{root:r,file:l,perspective:P.id,initialField:j.field,onSaved:b=>{++me.current,f(b),J(null),I(O=>O+1)},onCancel:()=>J(null)}):e.jsxs(e.Fragment,{children:[e.jsx(st,{value:P,rootPath:r,onEdit:b=>J({field:b}),onOpenFile:d}),e.jsx("button",{type:"button",className:`${de} text-primary`,onClick:()=>{ie(!1),we([])},children:x==="zh"?"进入此视角":"Explore this perspective"})]})}):se&&((t||te==="graph")&&Xe?e.jsx(Sr,{node:se,onExpand:()=>B(!0),onClose:ne}):e.jsx(pt,{active:o&&!U,docked:!t||!H&&!U,title:se.title,stageKey:`${se.id}:${H?`${H.path}:${H.line}`:U?"analysis":j?`edit:${j.field}`:"details"}`,source:!!H,fullHeight:t?!!U||!!j:Fe,inGraph:t,side:Ee,onBack:lt,backLabel:Et,onClose:ne,onDismiss:Ze,onCollapse:!Ee&&!Fe&&!H&&!U&&!j?()=>B(!1):void 0,children:j?e.jsx(Qe,{root:r,file:l,perspective:P.id,node:j.node,initialField:j.field,onSaved:b=>{++me.current,f(b),J(null),I(O=>O+1)},onCancel:()=>J(null)},`${l}:${P.id}:${j.node??"view"}:${j.field}`):H&&p?p(H):U?e.jsxs(e.Fragment,{children:[e.jsx(xt,{active:o,rootPath:r,currentFile:g,currentDirectory:u,initial:U,onInsertPrompt:a,onPrepared:ge,onClose:()=>ce(null)},se.id),K&&e.jsx("button",{type:"button",className:`${de} mt-3 bg-primary/15 text-primary`,onClick:()=>{R(U),pe(K),ne()},children:n("architecture.viewPrepared")})]}):e.jsx(kr,{embedded:!0,document:c,rootPath:r,onReference:ct,onEdit:b=>{B(!0),J({node:se.id,field:b})},node:se,view:P,parentId:se.parentId,onSelect:b=>Me(b,!0),onExplore:()=>we([...Ye(se.id),se.id]),onAnalyze:()=>zt(se),onOpenFile:at,onClose:ne})}));return r?e.jsxs("div",{ref:w,className:"relative flex h-full min-h-0 flex-col",onKeyDown:t=>{!Z&&(se||W)&&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:re,type:"button",className:de,disabled:!_e,onClick:()=>{_e&&(ne(),S(z?null:{initial:_e,...c?{outputFile:l}:{}}))},"aria-expanded":!!z,children:[e.jsx(vt,{size:14}),n(c?"architecture.update":"architecture.generate")]}),(c||l!==fe)&&e.jsx("button",{type:"button",className:`${de} px-2`,"aria-label":n("architecture.newAnalysis"),onClick:()=>{ne(),S({initial:Re})},children:e.jsx(yt,{size:16})}),e.jsx("button",{type:"button",className:`${de} px-2`,"aria-label":n("architecture.refresh"),disabled:h,onClick:()=>I(t=>t+1),children:e.jsx(jt,{size:15,className:h?"animate-spin":""})})]})]}),e.jsxs("div",{className:`relative flex min-h-0 flex-1 ${Ee&&!Fe?"flex-row":"flex-col"}`,"data-architecture-workspace":!0,children:[e.jsx("div",{ref:m,hidden:Fe,"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:j&&!se&&!W?e.jsxs("div",{className:"flex min-h-full flex-col gap-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:P?.title}),e.jsx(Qe,{root:r,file:l,perspective:P.id,initialField:j.field,onSaved:t=>{++me.current,f(t),J(null),I(b=>b+1)},onCancel:()=>J(null)},`${l}:${P?.id}:${j.field}`)]}):z?e.jsx(xt,{active:o,rootPath:r,currentFile:g,currentDirectory:u,initial:z.initial,outputFile:z.outputFile,onInsertPrompt:a,onPrepared:(t,b)=>{R(b),pe(t)},onClose:Ae},`${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:l,onChange:t=>{R(Re),pe(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===fe?n("architecture.projectRange"):`${n(t.includes("/module-")?"architecture.moduleRange":"architecture.featureRange")}: ${t===l&&c?.analysis?c.analysis.target.replace(/\n/g,", "):Yt(t)}`},t))})]}),C&&e.jsx("p",{role:"alert",className:"mb-3 text-xs text-muted-foreground",children:n("architecture.libraryFailed")}),h&&!c&&e.jsx("p",{role:"status",className:"py-4 text-sm text-muted-foreground",children:n("architecture.loading")}),$&&e.jsxs("div",{role:"alert",className:"mb-3 rounded-lg border border-destructive/30 p-3 text-sm",children:[e.jsx("p",{children:n($==="format"?"architecture.invalid":"architecture.loadFailed")}),c&&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:()=>I(t=>t+1),children:n("architecture.retry")})]}),!h&&!$&&!c&&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(l===fe?"architecture.emptyHint":"architecture.awaitingFile")})]}),c&&P&&He&&e.jsxs("div",{className:"space-y-3",children:[!_e&&e.jsx("p",{className:"text-xs text-muted-foreground",children:n("architecture.scopeUnavailable")}),c.analysis&&e.jsxs("p",{className:"break-words text-xs text-muted-foreground",children:[n(`architecture.${c.analysis.kind}Range`),c.analysis.target?` · ${c.analysis.target.replace(/\n/g,", ")}`:""," · ",n(c.analysis.depth==="boundary"?"architecture.boundaryDepth":"architecture.followDepth")]}),c.summary.length<=240&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:c.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:F?"all-perspectives":P.id,onChange:t=>Ke(t.target.value),className:"min-h-11 min-w-0 flex-1 rounded-lg border border-border/20 bg-surface-2 px-2 text-sm text-foreground",children:[e.jsx("option",{value:"all-perspectives",children:x==="zh"?"全部视角":"All perspectives"}),c.perspectives.map(t=>e.jsx("option",{value:t.id,children:t.title},t.id))]})]}),ve.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:()=>we([]),children:P.title}),ve.map((t,b)=>e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(Pe,{size:12}),e.jsx("button",{type:"button",className:`${de} px-2`,onClick:()=>we(ve.slice(0,b+1)),children:P.nodes.find(O=>O.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??P.summary}),e.jsxs("details",{children:[e.jsx("summary",{className:"min-h-11 cursor-pointer py-3 text-xs text-muted-foreground",children:x==="zh"?"视角文档与模块目录":"Perspective documents and module tree"}),e.jsx(st,{value:ye??P,rootPath:r,onOpenFile:at,onEdit:t=>{ye?(oe(ye.id),B(!0),J({node:ye.id,field:t})):J({field:t})}}),e.jsx("nav",{"aria-label":x==="zh"?"模块目录":"Module tree",className:"my-2 border-l border-border/20",children:P.nodes.map(t=>e.jsx("button",{type:"button","aria-label":`${x==="zh"?"定位模块":"Go to module"}: ${t.title}`,className:`${de} flex w-full justify-start text-left ${ae===t.id?"text-primary":""}`,style:{paddingInlineStart:12+Ye(t.id).length*16},onClick:()=>{Q(Ye(t.id)),Me(t.id),B(!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":te===t,className:`${de} flex-1 ${te===t?"bg-surface text-primary":"text-muted-foreground"}`,onClick:()=>je(t),children:n(t==="outline"?"architecture.outlineMode":"architecture.graphMode")},t))}),te==="graph"?e.jsxs(e.Fragment,{children:[e.jsx(wr,{view:F&&ze?ze.view:P,parentId:F?void 0:Be,selectedId:F&&ze?[...ze.references].find(([,t])=>t.perspective===P.id&&t.node===ae)?.[0]??null:ae,onSelect:t=>{if(F&&ze){const b=ze.references.get(t);b&&ct(b)}else Me(t)},active:o,referenceWidth:D,inspector:ot(!0),inspectorStage:H?"source":U||j?"analysis":Xe?"preview":"details",onDismissInspector:W?j?()=>J(null):ne:Ze,onExpandedChange:t=>{L(t),!t&&Z&&ne()},heading:e.jsxs("div",{className:"relative",children:[e.jsxs("select",{"aria-label":n("architecture.perspective"),title:P.title,value:F?"all-perspectives":P.id,onChange:t=>Ke(t.target.value),className:"h-11 w-full min-w-0 appearance-none truncate bg-surface pr-4 text-xs font-semibold focus-visible:ring-2 focus-visible:ring-ring",children:[e.jsx("option",{value:"all-perspectives",children:x==="zh"?"全部视角":"All perspectives"}),c.perspectives.map(t=>e.jsx("option",{value:t.id,children:t.title},t.id))]}),e.jsx(wt,{size:12,className:"pointer-events-none absolute right-0 top-1/2 -translate-y-1/2 text-muted-foreground"})]}),navigation:ve.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:()=>we(ve.slice(0,-1)),children:n("architecture.parentModule")}),e.jsxs("span",{className:"truncate text-xs text-muted-foreground",children:[P.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":se?.id===t.id,className:`${de} bg-surface-2`,onClick:()=>Me(t.id),children:t.title},t.id))})]})]}):e.jsx("div",{className:"space-y-2",role:"group","aria-label":n("architecture.modules"),children:F?c.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:()=>Ke(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":se?.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:()=>Me(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(Pe,{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(c.generatedAt).toLocaleString(x==="zh"?"zh-CN":"en-US")]}),e.jsxs("div",{className:"space-y-3 pb-3",children:[c.summary.length>240&&e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-muted-foreground",children:c.summary}),c.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:c.details.limitations.map((t,b)=>e.jsx("li",{children:t},b))})]}):null,c.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")," (",c.details.analyzedPaths.length,")"]}),c.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(yr,{root:r,file:l,document:c,onLoaded:(t,b)=>{pe(t),f(b),I(O=>O+1)}})]})}),o&&!Z&&ot(!1)]})]}):e.jsx("p",{className:"p-5 text-sm text-muted-foreground",children:n("fileTree.noWorkingDir")})}export{es as ArchitecturePanel};
|
|
Binary file
|
|
Binary file
|
package/dist/client/assets/{ChangeWalkthroughPanel-ZGMybE0m.js → ChangeWalkthroughPanel-CVBQbHpG.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a$ as ie,ez as ce,cq as s,Y as le,h as de,L as me,k as he}from"./app-DZ6mCJiW.js";import{b as D}from"./dnd-BCFAPC0L.js";import{C as ue}from"./chevron-left-CVjGQZf0.js";import{M as xe}from"./maximize-2-Clx4ktqB.js";import{G as fe,T as pe}from"./triangle-alert-D-tt7pA2.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 q({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,z=24,B=["rgb(var(--primary-rgb))","rgb(var(--accent-rgb))","rgb(var(--warning-rgb))","rgb(var(--success-rgb))","rgb(192 132 252)"];function te(t){return B[t%B.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(z,d[h.key]??0)/2;if(x===0){r.push(N);return}const w=o[x-1],E=Math.max(z,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(z,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,O=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):O});const S=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(z,o[n.key]??0)/2));return{nodes:w,edges:v,width:C*2+(S+1)*H+S*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 Pe({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),[S,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=S??n,j=f?null:v??G,I=c.edges.some(e=>e.key===j)?j:null,O=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])]):O?new Set([O.from,O.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),V=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(le,{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:()=>V(-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(ue,{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:()=>V(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(de,{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(xe,{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(fe,{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:B.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%B.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),Z=I===e.key||!!U?.has(e.key),ae=!!((I||f)&&!Z);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:Z?`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(
|
|
1
|
+
import{a$ as ie,eA as ce,cr as s,Y as le,h as de,L as me,k as he}from"./app-CjIJnhRC.js";import{b as D}from"./dnd-BCFAPC0L.js";import{C as ue}from"./chevron-left-gddD8oDV.js";import{M as xe}from"./maximize-2-C2r-kY_c.js";import{G as fe,T as pe}from"./triangle-alert-BM5V0mRC.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 Q({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,O=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):O});const S=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+(S+1)*H+S*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 Pe({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),[S,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=S??n,j=f?null:v??G,I=c.edges.some(e=>e.key===j)?j:null,O=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])]):O?new Set([O.from,O.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),V=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(le,{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:()=>V(-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(ue,{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:()=>V(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(de,{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(xe,{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(fe,{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),Z=I===e.key||!!U?.has(e.key),ae=!!((I||f)&&!Z);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:Z?`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(Q,{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(me,{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(Q,{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(pe,{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(he,{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{Pe as C,ge as M};
|
|
Binary file
|
|
Binary file
|