termdock 1.4.335 → 1.4.337
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/App-DhHRFEY2.js +187 -0
- package/dist/client/assets/App-DhHRFEY2.js.br +0 -0
- package/dist/client/assets/App-DhHRFEY2.js.gz +0 -0
- package/dist/client/assets/{ArchitecturePanel-BOq2FG6t.js → ArchitecturePanel-DeMEq2Yq.js} +2 -2
- package/dist/client/assets/ArchitecturePanel-DeMEq2Yq.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-DeMEq2Yq.js.gz +0 -0
- package/dist/client/assets/{ChangeWalkthroughPanel-CxqwQxYc.js → ChangeWalkthroughPanel-DG4TnQvn.js} +1 -1
- package/dist/client/assets/ChangeWalkthroughPanel-DG4TnQvn.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-DG4TnQvn.js.gz +0 -0
- package/dist/client/assets/{CollaborationMainWorkspace-vvAVjIlQ.js → CollaborationMainWorkspace-D_yEJJy_.js} +1 -1
- package/dist/client/assets/CollaborationMainWorkspace-D_yEJJy_.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-D_yEJJy_.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-BtFTzMVY.js +2 -0
- package/dist/client/assets/{ComputerControlView-mR6vlp9k.js → ComputerControlView-DGoBNNRA.js} +3 -3
- package/dist/client/assets/ComputerControlView-DGoBNNRA.js.br +0 -0
- package/dist/client/assets/ComputerControlView-DGoBNNRA.js.gz +0 -0
- package/dist/client/assets/{DagPlayground-nUK9xIql.js → DagPlayground-CiCwopwo.js} +1 -1
- package/dist/client/assets/DagPlayground-CiCwopwo.js.br +0 -0
- package/dist/client/assets/DagPlayground-CiCwopwo.js.gz +0 -0
- package/dist/client/assets/{DiffLab-D6XhZtPW.js → DiffLab-C8ItelM8.js} +1 -1
- package/dist/client/assets/DiffLab-C8ItelM8.js.br +0 -0
- package/dist/client/assets/DiffLab-C8ItelM8.js.gz +0 -0
- package/dist/client/assets/{DiffReview-BhyYqkD4.js → DiffReview-riYMjjAA.js} +1 -1
- package/dist/client/assets/DiffReview-riYMjjAA.js.br +0 -0
- package/dist/client/assets/DiffReview-riYMjjAA.js.gz +0 -0
- package/dist/client/assets/{DiffReviewLab-CvNWVrbl.js → DiffReviewLab-CXlrQWLJ.js} +1 -1
- package/dist/client/assets/DiffReviewLab-CXlrQWLJ.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-CXlrQWLJ.js.gz +0 -0
- package/dist/client/assets/{DiffViewer-BSbMa2mq.js → DiffViewer-BxcK2w41.js} +1 -1
- package/dist/client/assets/DiffViewer-BxcK2w41.js.br +0 -0
- package/dist/client/assets/DiffViewer-BxcK2w41.js.gz +0 -0
- package/dist/client/assets/{ModelPreview-B_VPlNYr.js → ModelPreview-HzxWwmh4.js} +1 -1
- package/dist/client/assets/ModelPreview-HzxWwmh4.js.br +0 -0
- package/dist/client/assets/ModelPreview-HzxWwmh4.js.gz +0 -0
- package/dist/client/assets/{RightSidebar-Cakd9qUZ.js → RightSidebar-ChmJQUxz.js} +10 -10
- package/dist/client/assets/RightSidebar-ChmJQUxz.js.br +0 -0
- package/dist/client/assets/RightSidebar-ChmJQUxz.js.gz +0 -0
- package/dist/client/assets/{abnfDiagram-VCTEODGH-vWK7F-r_.js → abnfDiagram-VCTEODGH-BUDaRwTy.js} +1 -1
- package/dist/client/assets/abnfDiagram-VCTEODGH-BUDaRwTy.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-BUDaRwTy.js.gz +0 -0
- package/dist/client/assets/{app-BZBIr89q.js → app-D2M53LZx.js} +3 -3
- package/dist/client/assets/app-D2M53LZx.js.br +0 -0
- package/dist/client/assets/app-D2M53LZx.js.gz +0 -0
- package/dist/client/assets/{arc-Bdjvby9b.js → arc-DO-aRhWz.js} +1 -1
- package/dist/client/assets/arc-DO-aRhWz.js.br +0 -0
- package/dist/client/assets/arc-DO-aRhWz.js.gz +0 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-DTR5hJkG.js → architectureDiagram-5GKGNRK7-CMImzZR-.js} +1 -1
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CMImzZR-.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CMImzZR-.js.gz +0 -0
- package/dist/client/assets/{blockDiagram-I7D4REHJ-DPz3axsu.js → blockDiagram-I7D4REHJ-DPC_EssA.js} +1 -1
- package/dist/client/assets/blockDiagram-I7D4REHJ-DPC_EssA.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-DPC_EssA.js.gz +0 -0
- package/dist/client/assets/{c4Diagram-7LVT6UL2-d5ZwPpcN.js → c4Diagram-7LVT6UL2-DJazaM0T.js} +1 -1
- package/dist/client/assets/c4Diagram-7LVT6UL2-DJazaM0T.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-DJazaM0T.js.gz +0 -0
- package/dist/client/assets/channel-BKGmfJ01.js +1 -0
- package/dist/client/assets/{chunk-2Q5K7J3B-BpEmNpto.js → chunk-2Q5K7J3B-BxDoppAq.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-CXDCiEbN.js → chunk-5VM5RSS4-DFunSKh5.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-C1L__gXc.js → chunk-F27PBJKO-bLBUcK9l.js} +1 -1
- package/dist/client/assets/chunk-F27PBJKO-bLBUcK9l.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-bLBUcK9l.js.gz +0 -0
- package/dist/client/assets/{chunk-IMKFNOWR-CX0r7pV5.js → chunk-IMKFNOWR-CQzRDG_F.js} +1 -1
- package/dist/client/assets/chunk-IMKFNOWR-CQzRDG_F.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-CQzRDG_F.js.gz +0 -0
- package/dist/client/assets/{chunk-JWPE2WC7-DkbhnrKh.js → chunk-JWPE2WC7-oYEx3lo8.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-CH-o5PVe.js → chunk-POPQ4Y6H-DiElQN3B.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-C1x5c5cy.js → chunk-SVP7TREG-Cf1eK48Z.js} +1 -1
- package/dist/client/assets/chunk-SVP7TREG-Cf1eK48Z.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-Cf1eK48Z.js.gz +0 -0
- package/dist/client/assets/{chunk-TICWLB2K-DAktkamN.js → chunk-TICWLB2K-CAsKSnF3.js} +1 -1
- package/dist/client/assets/chunk-TICWLB2K-CAsKSnF3.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-CAsKSnF3.js.gz +0 -0
- package/dist/client/assets/{chunk-XXDRQBXY-emNetBN1.js → chunk-XXDRQBXY-CnELf36-.js} +1 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-M1OSgOBU.js +1 -0
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-M1OSgOBU.js +1 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-kBGroiho.js → cose-bilkent-JH36ORCC-BjkkSzWB.js} +1 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-BjkkSzWB.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-BjkkSzWB.js.gz +0 -0
- package/dist/client/assets/{cynefin-OW5HDTMX-C0TjwB46.js → cynefin-OW5HDTMX-DL9YtN7p.js} +1 -1
- package/dist/client/assets/cynefin-OW5HDTMX-DL9YtN7p.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-DL9YtN7p.js.gz +0 -0
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-CbLSUTuV.js → cynefinDiagram-5FMLGOSQ-vSIBJhoT.js} +1 -1
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-vSIBJhoT.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-vSIBJhoT.js.gz +0 -0
- package/dist/client/assets/{dagre-GXQ25YYZ-BoznXKfa.js → dagre-GXQ25YYZ-CJ8Milln.js} +1 -1
- package/dist/client/assets/dagre-GXQ25YYZ-CJ8Milln.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-CJ8Milln.js.gz +0 -0
- package/dist/client/assets/{diagram-S7CK7UJ4-iY9ia7F5.js → diagram-S7CK7UJ4-Ci6Vle0S.js} +1 -1
- package/dist/client/assets/diagram-S7CK7UJ4-Ci6Vle0S.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-Ci6Vle0S.js.gz +0 -0
- package/dist/client/assets/{diagram-UQ7AKVKN-DhnC8gBw.js → diagram-UQ7AKVKN-Cf1bxglx.js} +1 -1
- package/dist/client/assets/diagram-UQ7AKVKN-Cf1bxglx.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-Cf1bxglx.js.gz +0 -0
- package/dist/client/assets/{diagram-VSXAHHWV-JFg8cbqX.js → diagram-VSXAHHWV-MPVKDZTF.js} +1 -1
- package/dist/client/assets/diagram-VSXAHHWV-MPVKDZTF.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-MPVKDZTF.js.gz +0 -0
- package/dist/client/assets/{diagram-VX7I27RA-dvyXUTpo.js → diagram-VX7I27RA-C9VznNFM.js} +1 -1
- package/dist/client/assets/diagram-VX7I27RA-C9VznNFM.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-C9VznNFM.js.gz +0 -0
- package/dist/client/assets/{diagram-Z3DM3KII-DmjwsCUU.js → diagram-Z3DM3KII-D3Z39FXB.js} +1 -1
- package/dist/client/assets/diagram-Z3DM3KII-D3Z39FXB.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-D3Z39FXB.js.gz +0 -0
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-BxCdDL0c.js → ebnfDiagram-PWID7BFC-CB6iYj5F.js} +1 -1
- package/dist/client/assets/ebnfDiagram-PWID7BFC-CB6iYj5F.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-CB6iYj5F.js.gz +0 -0
- package/dist/client/assets/{erDiagram-RLTQ6QDP-BWvvnoz1.js → erDiagram-RLTQ6QDP-BbywGzIs.js} +1 -1
- package/dist/client/assets/erDiagram-RLTQ6QDP-BbywGzIs.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-BbywGzIs.js.gz +0 -0
- package/dist/client/assets/{flowDiagram-HODETNUW-CVU0l_6c.js → flowDiagram-HODETNUW-BIhsRkKW.js} +1 -1
- package/dist/client/assets/flowDiagram-HODETNUW-BIhsRkKW.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-BIhsRkKW.js.gz +0 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CjO521RP.js → ganttDiagram-EL5Y4UJY-0ov1Ht5f.js} +1 -1
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-0ov1Ht5f.js.br +0 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CjO521RP.js.gz → ganttDiagram-EL5Y4UJY-0ov1Ht5f.js.gz} +0 -0
- package/dist/client/assets/{gestureArbiter-D_fs_PXp.js → gestureArbiter-DPFs4a-w.js} +1 -1
- package/dist/client/assets/gestureArbiter-DPFs4a-w.js.br +0 -0
- package/dist/client/assets/{gestureArbiter-D_fs_PXp.js.gz → gestureArbiter-DPFs4a-w.js.gz} +0 -0
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-DbxNhHiO.js → gitGraphDiagram-WWUBYQGX-DPmWc8PK.js} +1 -1
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DPmWc8PK.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DPmWc8PK.js.gz +0 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-DRcGAFqT.js → infoDiagram-27XIBGKW-CiGxOtMe.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-BPbgDJUg.js → ishikawaDiagram-5VMMS53U-CVQw2h65.js} +1 -1
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-CVQw2h65.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-CVQw2h65.js.gz +0 -0
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-D1nSzyjD.js → journeyDiagram-3NMN7TZE-CWyQl9rp.js} +1 -1
- package/dist/client/assets/journeyDiagram-3NMN7TZE-CWyQl9rp.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-CWyQl9rp.js.gz +0 -0
- package/dist/client/assets/{kanban-definition-UXKFOSKX-CSCXZnir.js → kanban-definition-UXKFOSKX-QYWm-bRz.js} +1 -1
- package/dist/client/assets/kanban-definition-UXKFOSKX-QYWm-bRz.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-QYWm-bRz.js.gz +0 -0
- package/dist/client/assets/{layout-DTNe7C08.js → layout-wWwHCqP-.js} +1 -1
- package/dist/client/assets/layout-wWwHCqP-.js.br +0 -0
- package/dist/client/assets/layout-wWwHCqP-.js.gz +0 -0
- package/dist/client/assets/{linear-DELStaU_.js → linear-CxAeiA5o.js} +1 -1
- package/dist/client/assets/linear-CxAeiA5o.js.br +0 -0
- package/dist/client/assets/linear-CxAeiA5o.js.gz +0 -0
- package/dist/client/assets/{mermaid.core-D7uvx0E2.js → mermaid.core-Dy-VIGNi.js} +5 -5
- package/dist/client/assets/mermaid.core-Dy-VIGNi.js.br +0 -0
- package/dist/client/assets/mermaid.core-Dy-VIGNi.js.gz +0 -0
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-C_fF6Gnh.js → mindmap-definition-YA3MSWOX-CaOlKAQP.js} +1 -1
- package/dist/client/assets/mindmap-definition-YA3MSWOX-CaOlKAQP.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-CaOlKAQP.js.gz +0 -0
- package/dist/client/assets/{passwordBootstrap-Co17Xh3M.js → passwordBootstrap-DADiddYD.js} +1 -1
- package/dist/client/assets/passwordBootstrap-DADiddYD.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-DADiddYD.js.gz +0 -0
- package/dist/client/assets/{pegDiagram-XKGWAZYB-BFOfbHg1.js → pegDiagram-XKGWAZYB-DbMiTSC0.js} +1 -1
- package/dist/client/assets/pegDiagram-XKGWAZYB-DbMiTSC0.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-DbMiTSC0.js.gz +0 -0
- package/dist/client/assets/{pieDiagram-E7YTZNPT-BkLXgY2Y.js → pieDiagram-E7YTZNPT-DHsbRsqO.js} +1 -1
- package/dist/client/assets/pieDiagram-E7YTZNPT-DHsbRsqO.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-DHsbRsqO.js.gz +0 -0
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-DIF7ynjD.js → quadrantDiagram-AXDQQJYC-ivXNY01m.js} +1 -1
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-ivXNY01m.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-ivXNY01m.js.gz +0 -0
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-DGeuv8o1.js → railroadDiagram-O6MQD6OU-B6XiBJ2p.js} +1 -1
- package/dist/client/assets/railroadDiagram-O6MQD6OU-B6XiBJ2p.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-B6XiBJ2p.js.gz +0 -0
- package/dist/client/assets/{rdpSession-DZCrSxpu.js → rdpSession-tZqbe3lc.js} +1 -1
- package/dist/client/assets/rdpSession-tZqbe3lc.js.br +0 -0
- package/dist/client/assets/rdpSession-tZqbe3lc.js.gz +0 -0
- package/dist/client/assets/{referenceLongPress-DrY73BHe.js → referenceLongPress-l-iC26Y4.js} +1 -1
- package/dist/client/assets/referenceLongPress-l-iC26Y4.js.br +0 -0
- package/dist/client/assets/referenceLongPress-l-iC26Y4.js.gz +0 -0
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-CoVdyMn3.js → requirementDiagram-BXWQKSXE-BVuulzR5.js} +1 -1
- package/dist/client/assets/requirementDiagram-BXWQKSXE-BVuulzR5.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-BVuulzR5.js.gz +0 -0
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-BF-YvoEZ.js → sankeyDiagram-P5KCCOFB-DCiS6hhT.js} +1 -1
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-DCiS6hhT.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-DCiS6hhT.js.gz +0 -0
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-CMkePZOj.js → sequenceDiagram-WJ2MYXX4-vobocfD-.js} +1 -1
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-vobocfD-.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-vobocfD-.js.gz +0 -0
- package/dist/client/assets/{sizeCapture-INFHLROL-C9N9vqvo.js → sizeCapture-INFHLROL-DY_P3bTc.js} +1 -1
- package/dist/client/assets/sizeCapture-INFHLROL-DY_P3bTc.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-DY_P3bTc.js.gz +0 -0
- package/dist/client/assets/{sparkles-DQ-Y24Kv.js → sparkles-iFcvD4yM.js} +1 -1
- package/dist/client/assets/{stateDiagram-D77RDMKH-DFk62G9u.js → stateDiagram-D77RDMKH-g9dDzGJR.js} +1 -1
- package/dist/client/assets/stateDiagram-D77RDMKH-g9dDzGJR.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-g9dDzGJR.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-Bxp20Ww7.js +1 -0
- package/dist/client/assets/{swimlanes-42K2YHIH-CNpYAR3d.js → swimlanes-42K2YHIH-CC39tzCY.js} +1 -1
- package/dist/client/assets/swimlanes-42K2YHIH-CC39tzCY.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH-CC39tzCY.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-bz2A714u.js +8 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-BVEhKc3h.js → timeline-definition-24CTP7MA-Bf-Np1KC.js} +1 -1
- package/dist/client/assets/timeline-definition-24CTP7MA-Bf-Np1KC.js.br +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-Bf-Np1KC.js.gz +0 -0
- package/dist/client/assets/{triangle-alert-BIwj1bIH.js → triangle-alert-BeIpvW9N.js} +1 -1
- package/dist/client/assets/{vennDiagram-4TSXK5OY-DqKMbCx0.js → vennDiagram-4TSXK5OY-BA9Lil5m.js} +1 -1
- package/dist/client/assets/vennDiagram-4TSXK5OY-BA9Lil5m.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-BA9Lil5m.js.gz +0 -0
- package/dist/client/assets/{videoCompression-DhppheEu.js → videoCompression-ESn5rZIR.js} +1 -1
- package/dist/client/assets/videoCompression-ESn5rZIR.js.br +0 -0
- package/dist/client/assets/videoCompression-ESn5rZIR.js.gz +0 -0
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-Bnhg0vB7.js → wardleyDiagram-VM6X3IG4-BCDzPgJu.js} +1 -1
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-BCDzPgJu.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-BCDzPgJu.js.gz +0 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-BBRqvRXj.js → xychartDiagram-S5SC5T6Z-CXvxPVbT.js} +1 -1
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-CXvxPVbT.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-CXvxPVbT.js.gz +0 -0
- package/dist/client/index.html +1 -1
- 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/android/liveBitrate.js +40 -4
- package/dist/server/android/scrcpy.js +17 -5
- package/package.json +1 -1
- package/runtime-manifest.json +3 -3
- package/scripts/android-bitrate/CaptureReset.java +29 -15
- package/scripts/android-bitrate/README.md +16 -10
- package/scripts/android-bitrate/bitrate.jar +0 -0
- package/dist/client/assets/App-B1lqBSPB.js +0 -187
- package/dist/client/assets/App-B1lqBSPB.js.br +0 -0
- package/dist/client/assets/App-B1lqBSPB.js.gz +0 -0
- package/dist/client/assets/ArchitecturePanel-BOq2FG6t.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-BOq2FG6t.js.gz +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-CxqwQxYc.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-CxqwQxYc.js.gz +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-vvAVjIlQ.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-vvAVjIlQ.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-Bx6Z5gEL.js +0 -2
- package/dist/client/assets/ComputerControlView-mR6vlp9k.js.br +0 -0
- package/dist/client/assets/ComputerControlView-mR6vlp9k.js.gz +0 -0
- package/dist/client/assets/DagPlayground-nUK9xIql.js.br +0 -0
- package/dist/client/assets/DagPlayground-nUK9xIql.js.gz +0 -0
- package/dist/client/assets/DiffLab-D6XhZtPW.js.br +0 -0
- package/dist/client/assets/DiffLab-D6XhZtPW.js.gz +0 -0
- package/dist/client/assets/DiffReview-BhyYqkD4.js.br +0 -0
- package/dist/client/assets/DiffReview-BhyYqkD4.js.gz +0 -0
- package/dist/client/assets/DiffReviewLab-CvNWVrbl.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-CvNWVrbl.js.gz +0 -0
- package/dist/client/assets/DiffViewer-BSbMa2mq.js.br +0 -0
- package/dist/client/assets/DiffViewer-BSbMa2mq.js.gz +0 -0
- package/dist/client/assets/ModelPreview-B_VPlNYr.js.br +0 -0
- package/dist/client/assets/ModelPreview-B_VPlNYr.js.gz +0 -0
- package/dist/client/assets/RightSidebar-Cakd9qUZ.js.br +0 -0
- package/dist/client/assets/RightSidebar-Cakd9qUZ.js.gz +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-vWK7F-r_.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-vWK7F-r_.js.gz +0 -0
- package/dist/client/assets/app-BZBIr89q.js.br +0 -0
- package/dist/client/assets/app-BZBIr89q.js.gz +0 -0
- package/dist/client/assets/arc-Bdjvby9b.js.br +0 -0
- package/dist/client/assets/arc-Bdjvby9b.js.gz +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-DTR5hJkG.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-DTR5hJkG.js.gz +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-DPz3axsu.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-DPz3axsu.js.gz +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-d5ZwPpcN.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-d5ZwPpcN.js.gz +0 -0
- package/dist/client/assets/channel-M_h_h55d.js +0 -1
- package/dist/client/assets/chunk-F27PBJKO-C1L__gXc.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-C1L__gXc.js.gz +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-CX0r7pV5.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-CX0r7pV5.js.gz +0 -0
- package/dist/client/assets/chunk-SVP7TREG-C1x5c5cy.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-C1x5c5cy.js.gz +0 -0
- package/dist/client/assets/chunk-TICWLB2K-DAktkamN.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-DAktkamN.js.gz +0 -0
- package/dist/client/assets/classDiagram-ZZMXUADV-BVuw_2Ox.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-BVuw_2Ox.js +0 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-kBGroiho.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-kBGroiho.js.gz +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-C0TjwB46.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-C0TjwB46.js.gz +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CbLSUTuV.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CbLSUTuV.js.gz +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-BoznXKfa.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-BoznXKfa.js.gz +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-iY9ia7F5.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-iY9ia7F5.js.gz +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-DhnC8gBw.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-DhnC8gBw.js.gz +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-JFg8cbqX.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-JFg8cbqX.js.gz +0 -0
- package/dist/client/assets/diagram-VX7I27RA-dvyXUTpo.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-dvyXUTpo.js.gz +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-DmjwsCUU.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-DmjwsCUU.js.gz +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-BxCdDL0c.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-BxCdDL0c.js.gz +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-BWvvnoz1.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-BWvvnoz1.js.gz +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-CVU0l_6c.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-CVU0l_6c.js.gz +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CjO521RP.js.br +0 -0
- package/dist/client/assets/gestureArbiter-D_fs_PXp.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DbxNhHiO.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DbxNhHiO.js.gz +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-BPbgDJUg.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-BPbgDJUg.js.gz +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-D1nSzyjD.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-D1nSzyjD.js.gz +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-CSCXZnir.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-CSCXZnir.js.gz +0 -0
- package/dist/client/assets/layout-DTNe7C08.js.br +0 -0
- package/dist/client/assets/layout-DTNe7C08.js.gz +0 -0
- package/dist/client/assets/linear-DELStaU_.js.br +0 -0
- package/dist/client/assets/linear-DELStaU_.js.gz +0 -0
- package/dist/client/assets/mermaid.core-D7uvx0E2.js.br +0 -0
- package/dist/client/assets/mermaid.core-D7uvx0E2.js.gz +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-C_fF6Gnh.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-C_fF6Gnh.js.gz +0 -0
- package/dist/client/assets/passwordBootstrap-Co17Xh3M.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-Co17Xh3M.js.gz +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-BFOfbHg1.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-BFOfbHg1.js.gz +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-BkLXgY2Y.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-BkLXgY2Y.js.gz +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-DIF7ynjD.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-DIF7ynjD.js.gz +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-DGeuv8o1.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-DGeuv8o1.js.gz +0 -0
- package/dist/client/assets/rdpSession-DZCrSxpu.js.br +0 -0
- package/dist/client/assets/rdpSession-DZCrSxpu.js.gz +0 -0
- package/dist/client/assets/referenceLongPress-DrY73BHe.js.br +0 -0
- package/dist/client/assets/referenceLongPress-DrY73BHe.js.gz +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-CoVdyMn3.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-CoVdyMn3.js.gz +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-BF-YvoEZ.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-BF-YvoEZ.js.gz +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-CMkePZOj.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-CMkePZOj.js.gz +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-C9N9vqvo.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-C9N9vqvo.js.gz +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-DFk62G9u.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-DFk62G9u.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-Bnyl10vy.js +0 -1
- package/dist/client/assets/swimlanes-42K2YHIH-CNpYAR3d.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH-CNpYAR3d.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-BwjcVbFS.js +0 -8
- package/dist/client/assets/timeline-definition-24CTP7MA-BVEhKc3h.js.br +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-BVEhKc3h.js.gz +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-DqKMbCx0.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-DqKMbCx0.js.gz +0 -0
- package/dist/client/assets/videoCompression-DhppheEu.js.br +0 -0
- package/dist/client/assets/videoCompression-DhppheEu.js.gz +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-Bnhg0vB7.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-Bnhg0vB7.js.gz +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-BBRqvRXj.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-BBRqvRXj.js.gz +0 -0
package/dist/client/assets/{ComputerControlView-mR6vlp9k.js → ComputerControlView-DGoBNNRA.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/rdpSession-
|
|
2
|
-
import{ah as Ge,cz as Yt,df as At,bA as r,a4 as Xt,cw as He,bz as nt,W as Et,o as kt,l as Wt,X as qt,_ as jt}from"./app-BZBIr89q.js";import{b as i,r as ot}from"./dnd-BCFAPC0L.js";import{a as Gt}from"./ChangeWalkthroughPanel-CxqwQxYc.js";import{s as Nt,X as St,K as Ye,j as st}from"./App-B1lqBSPB.js";import{M as Zt}from"./triangle-alert-BIwj1bIH.js";const Jt=[["path",{d:"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z",key:"edeuup"}]],Qt=Ge("mouse-pointer-2",Jt);const er=[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]],tr=Ge("settings-2",er);const rr=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],nr=Ge("zoom-in",rr);const or=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],sr=Ge("zoom-out",or);function it(n){const t=n==="darwin"?"mac":n==="win32"?"windows":"linux",a={host:"127.0.0.1",platform:t,protocol:t==="mac"?"vnc":"rdp",port:"3389",username:"",domain:"",ignoreCert:!1,rememberLogin:!0};return{target:"local",local:a,remote:{...a,host:""},viewOnly:!1,fit:!0,autoConnect:!0}}function Tt(n,t){const a=it(t);if(!n||typeof n!="object")return a;const o=n,f=(x,c)=>{const m=x&&typeof x=="object"?x:{},E=(p,y)=>typeof m[p]=="string"&&m[p].length<=y&&!/[\x00-\x1f]/.test(m[p])?m[p]:c[p];return{host:E("host",253),username:E("username",255),domain:E("domain",255),platform:["mac","linux","windows"].includes(String(m.platform))?m.platform:c.platform,protocol:m.protocol==="rdp"||m.protocol==="vnc"?m.protocol:c.protocol,port:typeof m.port=="string"&&/^\d{0,5}$/.test(m.port)&&Number(m.port)<=65535?m.port:c.port,ignoreCert:m.ignoreCert===!0,rememberLogin:m.rememberLogin!==!1}};return{target:o.target==="remote"?"remote":"local",local:{...f(o.local,a.local),host:"127.0.0.1"},remote:f(o.remote,a.remote),viewOnly:o.viewOnly===!0,fit:o.fit!==!1,autoConnect:o.autoConnect!==!1}}function _t(n){return JSON.stringify([n.host.trim().toLowerCase(),n.protocol,n.protocol==="vnc"?5900:Number(n.port),n.username.trim(),n.domain.trim()])}function ar(n){const[t,a]=i.useState(it),[o,f]=i.useState(!1),[x,c]=i.useState("loading"),[m,E]=i.useState(0),[p,y]=i.useState([]),[w,h]=i.useState("idle"),b=i.useRef(t),z=i.useRef(0),T=i.useRef(0),g=i.useRef(""),N=i.useRef(null),F=i.useRef(new Set),j=i.useCallback(A=>{b.current=A(b.current),z.current++,a(b.current),c("saving")},[]);i.useEffect(()=>{const A=++T.current;z.current=0,g.current="",N.current=null,b.current=it(),a(b.current),f(!1),c("loading"),y([]),h("idle");const d=new AbortController;return fetch("/api/computer/preferences",{signal:d.signal}).then(async k=>{if(!k.ok)throw new Error("PREFERENCES_LOAD_FAILED");return await k.json()}).then(k=>{if(A!==T.current||d.signal.aborted)return;let _=Tt(k.preferences);const v=z.current>0;if(!k.configured&&!v)try{const P=localStorage.getItem(`termdock:computer-host:${n}`);if(P){const D=/^(127\.0\.0\.1|localhost|::1|\[::1\])$/i.test(P)?"local":"remote";_=Tt({..._,target:D,[D]:{..._[D],host:P,platform:localStorage.getItem(`termdock:computer-platform:${n}`)||_[D].platform,protocol:localStorage.getItem(`termdock:computer-protocol:${n}`)||"vnc",port:localStorage.getItem(`termdock:computer-rdp-port:${n}`)||"3389"}}),z.current++}}catch{}v||(b.current=_),g.current=k.configured?JSON.stringify(_):"",a(b.current),f(!0),c(k.configured?"saved":"saving"),y(Array.isArray(k.credentialKeys)?k.credentialKeys.filter(P=>typeof P=="string"):[]),h(k.credentialError?"error":"idle")}).catch(()=>{!d.signal.aborted&&A===T.current&&c("error")}),()=>{++T.current,d.abort();for(const k of F.current)k.abort();F.current.clear()}},[n,m]);const L=i.useCallback(()=>{if(N.current)return N.current;if(!o)return Promise.resolve(!1);const A=T.current,d=(async()=>{for(;g.current!==JSON.stringify(b.current);){const k=JSON.stringify(b.current),_=new AbortController;F.current.add(_),c("saving");try{if(!(await fetch("/api/computer/preferences",{method:"PUT",headers:{"Content-Type":"application/json"},body:k,signal:_.signal})).ok)throw new Error("PREFERENCES_SAVE_FAILED");if(A!==T.current)return!1;g.current=k}catch{return A===T.current&&c("error"),!1}finally{F.current.delete(_)}}return A===T.current&&c("saved"),!0})();return N.current=d,d.finally(()=>{N.current===d&&(N.current=null)}),d},[o]);i.useEffect(()=>{if(!o||g.current===JSON.stringify(t))return;const A=setTimeout(()=>{L()},300);return()=>clearTimeout(A)},[o,t,L]);const H=i.useCallback(async(A,d,k)=>{const _=T.current,v=new AbortController;A!=="use"&&h("saving");try{if(!await L()||_!==T.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");F.current.add(v);const P=await fetch(`/api/computer/credentials/${A}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({profile:d,...A==="save"?{password:k}:{}}),signal:v.signal});if(_!==T.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");if(!P.ok)throw new Error(A==="use"&&P.status===404?"COMPUTER_CREDENTIALS_MISSING":"COMPUTER_CREDENTIALS_FAILED");const V=await P.json();if(_!==T.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");const D=_t(d);if(A==="save"&&y(ce=>[...new Set([...ce,D])]),A==="forget"&&y(ce=>ce.filter(J=>J!==D)),A==="use"&&(typeof V.password!="string"||!V.password))throw new Error("COMPUTER_CREDENTIALS_MISSING");return h("idle"),V.password}catch(P){throw _===T.current&&!v.signal.aborted&&h("error"),P}finally{F.current.delete(v)}},[L]);return{preferences:t,change:j,loaded:o,saveState:x,flush:L,credentialKeys:p,loginState:w,credentialRequest:H,retry:()=>o?void L():E(A=>A+1)}}const cr=1464686180;function ir(n){if(n.length<4||n[0]!==2)return n;const t=new DataView(n.buffer,n.byteOffset,n.byteLength),a=t.getUint16(2);if(n.length!==4+a*4)return n;const o=[];for(let c=4;c<n.length;c+=4){const m=t.getInt32(c);m!==cr&&o.push(m)}if(o.length===a)return n;const f=new Uint8Array(4+o.length*4),x=new DataView(f.buffer);return f.set(n.subarray(0,2)),x.setUint16(2,o.length),o.forEach((c,m)=>x.setInt32(4+m*4,c)),f}function lr(n,t){const a=n,o=a._sendEncodings;a._sendEncodings=()=>t.withMacCursorEncodings(()=>o.call(n))}class ur{binaryType="arraybuffer";protocol="";CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;onopen=null;onmessage=null;onerror=null;onclose=null;socket;sendingMacEncodings=!1;withMacCursorEncodings(t){const a=this.sendingMacEncodings;this.sendingMacEncodings=!0;try{t()}finally{this.sendingMacEncodings=a}}get readyState(){return this.socket.readyState}constructor(t,a){this.socket=Yt(`/api/computer/ws?host=${encodeURIComponent(t)}`),this.socket.onopen=o=>this.onopen?.(o),this.socket.onerror=o=>this.onerror?.(o),this.socket.onclose=o=>{(o.code!==1e3||o.reason)&&a(o.reason||"COMPUTER_DISCONNECTED"),this.onclose?.(o)},this.socket.onmessage=o=>{try{const f=JSON.parse(o.data);if(f.type!=="data"||typeof f.data!="string"||!Number.isSafeInteger(f.seq))throw new Error("Invalid VNC record");const x=Uint8Array.from(atob(f.data),c=>c.charCodeAt(0));this.onmessage?.(new MessageEvent("message",{data:x.buffer})),this.socket.readyState===1&&this.socket.send(JSON.stringify({type:"ack",seq:f.seq}))}catch{a("COMPUTER_INVALID_MESSAGE"),this.close(),this.onclose?.(new CloseEvent("close",{code:4400}))}}}send(t){let a=ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t);this.sendingMacEncodings&&(a=ir(a));for(let o=0;o<a.length;o+=32*1024){const f=a.subarray(o,o+32768);let x="";for(const c of f)x+=String.fromCharCode(c);this.socket.send(JSON.stringify({type:"data",data:btoa(x)}))}}close(){this.socket.close()}}function dr(n){return n==="mac"||n==="linux"||n==="windows"}function pr(n){const t=n==="mac"?[65513,"MetaLeft"]:[65507,"ControlLeft"],a=n==="mac"?t:[65515,"MetaLeft"];return{escape:[[65307,"Escape"]],enter:[[65293,"Enter"]],backspace:[[65288,"Backspace"]],tab:[n==="mac"?t:[65513,"AltLeft"],[65289,"Tab"]],search:n==="mac"?[a,[32,"Space"]]:[a],copy:[t,[99,"KeyC"]],paste:[t,[118,"KeyV"]],up:[[65362,"ArrowUp"]],down:[[65364,"ArrowDown"]],left:[[65361,"ArrowLeft"]],right:[[65363,"ArrowRight"]]}}function mr(n){n._cursor?._hideCursor?.()}function fr(n){const t=n;return{position:()=>({x:Number.isFinite(t._mousePos.x)?t._display.absX(t._mousePos.x):t._fbWidth/2,y:Number.isFinite(t._mousePos.y)?t._display.absY(t._mousePos.y):t._fbHeight/2}),size:()=>({width:t._fbWidth,height:t._fbHeight}),surface:()=>t._canvas,send:(a,o,f)=>{const x=t._display.scale,c=(a-t._display.absX(0))*x,m=(o-t._display.absY(0))*x;t._mousePos={x:c,y:m},t._mouseMoveTimer!==null&&clearTimeout(t._mouseMoveTimer),t._mouseMoveTimer=null,t._mouseButtonMask=f,t._mouseLastMoveTime=Date.now(),t._sendMouse(c,m,f);const E=t._canvas.getBoundingClientRect();t._cursor?.move(E.left+c,E.top+m)}}}function hr(n,t,a){const o=new AbortController,f=new Set,x=new Set;let c,m,E=!1,p=performance.now();const y=()=>f.size>0||x.size>0,w=g=>{c=void 0,!(E||!y())&&(performance.now()-p>1e3||(a.record("browser-frame",{time:g,interval:m===void 0?null:g-m,logical:t.position?.(),renderer:t.observeCursor?.()}),m=g,c=requestAnimationFrame(w)))},h=()=>{y()?c===void 0&&(m=void 0,c=requestAnimationFrame(w)):(c!==void 0&&cancelAnimationFrame(c),c=void 0,m=void 0)},b=g=>{if(g.pointerType!=="touch"&&g.pointerType!=="pen")return;p=performance.now(),g.type==="pointerdown"?f.add(g.pointerId):(g.type==="pointerup"||g.type==="pointercancel"||g.type==="lostpointercapture")&&f.delete(g.pointerId);const N=g.getCoalescedEvents?.()??[];a.record("raw-pointer",{type:g.type,time:g.timeStamp,id:g.pointerId,pointerType:g.pointerType,client:[g.clientX,g.clientY],trusted:g.isTrusted,coalesced:N.slice(-16).map(F=>[F.timeStamp,F.clientX,F.clientY])}),h()},z=g=>{p=performance.now(),x.clear();for(const N of Array.from(g.touches))x.add(N.identifier);a.record("raw-touch",{type:g.type,time:g.timeStamp,trusted:g.isTrusted,touches:Array.from(g.touches,N=>[N.identifier,N.clientX,N.clientY]),changed:Array.from(g.changedTouches,N=>[N.identifier,N.clientX,N.clientY])}),h()},T={capture:!0,passive:!0,signal:o.signal};for(const g of["pointerdown","pointermove","pointerup","pointercancel","lostpointercapture"])n.addEventListener(g,b,T);for(const g of["touchstart","touchmove","touchend","touchcancel"])n.addEventListener(g,z,T);return a.record("observation-start",{version:2,pointerEvents:typeof PointerEvent<"u",touchEvents:"ontouchstart"in window}),()=>{E=!0,o.abort(),c!==void 0&&cancelAnimationFrame(c),a.record("observation-stop"),a.flush("observation-stop")}}const Mt="termdock:computer-touch-mode:v1";function gr(){try{const n=localStorage.getItem(Mt);if(n==="trackpad"||n==="direct")return n}catch{}return navigator.maxTouchPoints>0&&window.matchMedia("(any-pointer: coarse)").matches?"trackpad":"direct"}function xr(n){try{localStorage.setItem(Mt,n)}catch{}}const Ke=8,br=300,yr=450,at=18,wr=50,Xe=(n,t)=>Math.max(0,Math.min(n,Math.max(0,t-1)));function vr(n,t,a,o={}){const f=new AbortController,x=o.trace?hr(n,t,o.trace):void 0,c=new Map;let m=0,E=0,p=!1,y=!1,w=!1,h=!1,b=0,z=1,T="pending",g=[],N={x:0,y:0},F={x:0,y:0},j,L=0,H=0,A,d=!0,k,_=!1;const v=()=>{const s=t.size(),l=a.current??={x:s.width/2,y:s.height/2};return l.x=Xe(l.x,s.width),l.y=Xe(l.y,s.height),l};let P;const V=()=>{const s=t.size();if((!P||P.width!==s.width||P.height!==s.height)&&(d=!0),!d&&P)return P;const l=t.surface(),C=n.getBoundingClientRect(),K=l.getBoundingClientRect(),O=[];for(let I=l.parentElement;I&&I!==n;I=I.parentElement){const se=getComputedStyle(I),Y=/auto|scroll/.test(se.overflowX)?Math.max(0,I.scrollWidth-I.clientWidth):0,ye=/auto|scroll/.test(se.overflowY)?Math.max(0,I.scrollHeight-I.clientHeight):0;if(!Y&&!ye)continue;const Ne=I.getBoundingClientRect();O.push({element:I,left:Ne.left-C.left,top:Ne.top-C.top,right:Ne.right-C.left,bottom:Ne.bottom-C.top,maxX:Y,maxY:ye})}return P={...s,left:K.left-C.left,top:K.top-C.top,scaleX:s.width&&K.width?K.width/s.width:1,scaleY:s.height&&K.height?K.height/s.height:1,viewportWidth:C.width,viewportHeight:C.height,clientLeft:C.left,clientTop:C.top,scrollers:O},d=!1,P},D=(s,l)=>{if(!o.trace)return;const C=P;o.trace.record(s,{mode:o.mode,pointerType:l?.pointerType,pointerId:l?.pointerId,client:l?[l.clientX,l.clientY]:void 0,inputTime:l?.timeStamp,target:a.current?[a.current.x,a.current.y]:null,actual:t.position?.(),buttons:H,fingers:c.size,moved:p,pinching:h,scrolling:w,zoom:o.zoom?.get(),scale:C?[C.scaleX,C.scaleY]:void 0,surface:C?[C.left,C.top,C.width,C.height]:void 0,viewport:C?[C.clientLeft,C.clientTop,C.viewportWidth,C.viewportHeight]:void 0})};o.trace?.record("touchpad-attached",{mode:o.mode,viewOnly:o.viewOnly});const ce=()=>{const s=V(),l=v();if(!s.width||!s.height||h||o.viewOnly)return;let C=s.left+l.x*s.scaleX,K=s.top+l.y*s.scaleY;for(const O of s.scrollers){if(O.maxX){const I=O.element.scrollLeft,se=C<O.left+20?C-O.left-20:C>O.right-20?C-O.right+20:0,Y=Math.max(0,Math.min(O.maxX,I+se));I!==Y&&(O.element.scrollLeft=Y,C-=Y-I,s.left-=Y-I)}if(O.maxY){const I=O.element.scrollTop,se=K<O.top+20?K-O.top-20:K>O.bottom-20?K-O.bottom+20:0,Y=Math.max(0,Math.min(O.maxY,I+se));I!==Y&&(O.element.scrollTop=Y,K-=Y-I,s.top-=Y-I)}}},J=(s=H)=>{if(o.viewOnly)return;const l=v(),C=o.trace?t.position?.():void 0;t.send(Math.round(l.x),Math.round(l.y),s),o.trace?.record("send",{target:[Math.round(l.x),Math.round(l.y)],buttons:s,before:C,after:t.position?.()})},Ie=()=>{A=void 0,ce();let s=0;for(;Math.abs(L)>=at&&s++<8;){const l=L>0?16:8;J(l),J(0),L-=Math.sign(L)*at}},Ae=(s=!1)=>{_||!s&&Math.abs(L)<at&&!P?.scrollers.length||(A??=requestAnimationFrame(Ie))},Ue=()=>{A!==void 0&&(cancelAnimationFrame(A),Ie())},Oe=()=>{A!==void 0&&cancelAnimationFrame(A),A=void 0,L=0},je=()=>{clearTimeout(k),Ue(),H&&(H=0,J())},B=s=>{s.cancelable&&s.preventDefault(),s.stopImmediatePropagation()},_e=()=>{const[s,l]=[...c.values()];return{distance:Math.hypot(s.x-l.x,s.y-l.y),x:(s.x+l.x)/2,y:(s.y+l.y)/2}},pe=(s=!1)=>{if(_||y||c.size!==2||E!==2)return;const l=_e();if(T==="pending"){const C=[...c.values()].map((Y,ye)=>({x:Y.x-g[ye].x,y:Y.y-g[ye].y})),K=C.map(Y=>Math.hypot(Y.x,Y.y));if(Math.max(...K)<Ke)return;if(!s&&Math.min(...K)<Ke){j??=setTimeout(()=>{j=void 0,pe(!0)},wr);return}clearTimeout(j),j=void 0;const O=Math.abs(l.distance-b),I=C[0].x*C[1].x+C[0].y*C[1].y<0,se=Math.min(...K)>=Ke?I:O>Math.max(Math.abs(l.x-N.x),Math.abs(l.y-N.y));T=o.zoom&&O>=Ke&&se?"pinch":o.mode==="direct"&&o.zoom&&o.zoom.get()>1?"pan":"scroll",h=T==="pinch",p=!0,D("two-finger-classified")}T==="pinch"&&b>0?(o.zoom?.set(z*l.distance/b,l),o.zoom?.pan(l.x-F.x,l.y-F.y),d=!0):T==="pan"?(o.zoom?.pan(l.x-F.x,l.y-F.y),d=!0):L+=F.y-l.y,F=l,Ae()},Z=s=>{const l=V();a.current={x:Xe((s.clientX-l.clientLeft-l.left)/l.scaleX,l.width),y:Xe((s.clientY-l.clientTop-l.top)/l.scaleY,l.height)}},$=s=>{if(!(s.pointerType!=="touch"&&s.pointerType!=="pen")){B(s),c.size||(d=!0,clearTimeout(j),j=void 0,m=performance.now(),E=0,p=!1,y=!1,w=!1,h=!1,L=0,o.mode==="direct"?Z(s):t.position&&(a.current={...t.position()},v())),c.set(s.pointerId,{x:s.clientX,y:s.clientY,startX:s.clientX,startY:s.clientY}),E=Math.max(E,c.size),D("down",s);try{n.setPointerCapture(s.pointerId)}catch{}if(clearTimeout(k),c.size===1&&E===1)k=setTimeout(()=>{!_&&c.size===1&&!p&&!y&&(H=1,J())},yr);else if(je(),w=!0,c.size===2&&E===2){const l=_e();b=l.distance,z=o.zoom?.get()??1,N=F=l,T="pending",g=[...c.values()].map(({x:C,y:K})=>({x:C,y:K}))}else y=!0,clearTimeout(j),j=void 0}},re=s=>{if(s.pointerType==="mouse")return;const l=c.get(s.pointerId);if(!l)return;B(s);const C=s.clientX-l.x,K=s.clientY-l.y;if(l.x=s.clientX,l.y=s.clientY,D("move-input",s),Math.hypot(l.x-l.startX,l.y-l.startY)>Ke&&(p=!0,clearTimeout(k)),c.size===2&&!y)pe();else if(c.size===1&&!w&&!y){if(o.mode==="direct"){Z(s),p&&(H=1),J(),Ae();return}const O=v(),I=V();O.x+=C/I.scaleX,O.y+=K/I.scaleY,v(),J(),Ae()}},ne=s=>{if(!c.has(s.pointerId))return;B(s),D(s.type,s),clearTimeout(j),j=void 0;const l=H!==0;s.type!=="pointerup"&&(y=!0,Oe()),je(),c.delete(s.pointerId);try{n.hasPointerCapture(s.pointerId)&&n.releasePointerCapture(s.pointerId)}catch{}c.size||(L=0,!y&&!l&&!p&&E<=2&&performance.now()-m<=br&&(o.mode!=="direct"||E===1)&&(J(E===2?4:1),J(0)),D("gesture-end",s),o.trace?.flush("gesture-end"))},oe=()=>{y=!0,Oe(),clearTimeout(j),j=void 0,je();const s=[...c.keys()];c.clear(),L=0;for(const l of s)try{n.hasPointerCapture(l)&&n.releasePointerCapture(l)}catch{}},be={capture:!0,passive:!1,signal:f.signal};n.addEventListener("pointerdown",$,be),n.addEventListener("pointermove",re,be),n.addEventListener("pointerup",ne,be),n.addEventListener("pointercancel",ne,be),n.addEventListener("lostpointercapture",ne,be);for(const s of["touchstart","touchmove","touchend","touchcancel","contextmenu"])n.addEventListener(s,B,be);const Me=()=>{d=!0,Ae(!0)};n.addEventListener("scroll",Me,{capture:!0,signal:f.signal}),window.addEventListener("blur",oe,{signal:f.signal});const Q=()=>{document.hidden&&oe()};document.addEventListener("visibilitychange",Q,{signal:f.signal});const ie=new ResizeObserver(Me);return ie.observe(n),ie.observe(t.surface()),!a.current&&t.position&&(a.current={...t.position()}),ce(),()=>{_||(_=!0,D("touchpad-detached"),f.abort(),oe(),ie.disconnect(),x?.(),o.trace?.flush("touchpad-detached"))}}function Cr(n,t){n=Math.max(1,n||1280),t=Math.max(1,t||800);const a=Math.max(1,640/n,480/t);return{width:Math.max(640,Math.min(2560,Math.round(n*a))),height:Math.max(480,Math.min(1600,Math.round(t*a)))}}function Er(n,t){const a=Array.from(n),o=Array.from(t);let f=0;for(;f<a.length&&f<o.length&&a[f]===o[f];)f++;return{backspaces:a.length-f,text:o.slice(f).join("")}}const ct="",kr={Enter:"enter",Backspace:"backspace",Delete:"delete",Tab:"tab",ArrowUp:"up",ArrowDown:"down",ArrowLeft:"left",ArrowRight:"right"};function jr({sendText:n,sendKey:t,sendChord:a,pasteText:o,commandKey:f=[65515,"MetaLeft"],inputRef:x,onFocusChange:c}){const{t:m}=At(),E=i.useRef(null),p=i.useRef(!1),y=x??E,w=i.useRef({sendText:n,sendKey:t});w.current={sendText:n,sendKey:t};const h=i.useRef(""),b=i.useRef(!1),z=i.useRef(),[T,g]=i.useState(!1),N=()=>(y.current?.value||"").replace(/^\u200b/,""),F=d=>{if(h.current=Array.from(d).slice(-256).join(""),y.current){y.current.value=ct+h.current;const k=y.current.value.length;y.current.setSelectionRange(k,k)}g(!!h.current)},j=()=>F(""),L=()=>{if(p.current)return;const d=N(),k=Er(h.current,d);F(d);for(let _=0;_<k.backspaces;_++)w.current.sendKey("backspace");k.text&&w.current.sendText(k.text)},H=()=>{p.current||L()},A=d=>{H(),d==="backspace"?F(Array.from(h.current).slice(0,-1).join("")):j(),w.current.sendKey(d)};return i.useLayoutEffect(()=>{const d=y.current;d.value=ct,d.setSelectionRange(1,1),d.focus({preventScroll:!0});const k=v=>{if(p.current||v.isComposing)return;const P=v.inputType==="deleteContentBackward"?"backspace":v.inputType==="deleteContentForward"?"delete":null;if(P){if(P==="backspace"&&h.current)return;v.preventDefault(),A(P);return}["insertLineBreak","insertParagraph"].includes(v.inputType)&&(v.preventDefault(),b.current||A("enter"),b.current=!1)},_=()=>{p.current||j()};return d.addEventListener("beforeinput",k),d.addEventListener("termdock:computer-input-reset",_),()=>{d.removeEventListener("beforeinput",k),d.removeEventListener("termdock:computer-input-reset",_),clearTimeout(z.current)}},[]),r.jsxs("div",{className:"relative shrink-0 border-t border-border bg-surface px-2 py-1",children:[!T&&r.jsx("span",{"aria-hidden":"true",className:"pointer-events-none absolute inset-y-1 left-5 flex items-center truncate pr-5 text-sm text-muted-foreground",children:m("computer.keyboardPlaceholder")}),r.jsx("input",{ref:y,className:"min-h-11 w-full rounded-md border border-border bg-background px-3 text-base outline-none focus:border-primary","aria-label":m("computer.keyboardInput"),autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",spellCheck:!1,inputMode:"text",enterKeyHint:"enter",maxLength:1025,defaultValue:ct,onPaste:d=>{if(p.current||!d.clipboardData.types.includes("text/plain"))return;d.preventDefault(),H(),j();const k=d.clipboardData.getData("text/plain");o?o(k):w.current.sendText(k)},onChange:d=>{g(!!d.target.value.replace(/^\u200b/,"")),!(p.current||d.nativeEvent.isComposing)&&(d.nativeEvent.inputType==="deleteContentBackward"&&!h.current&&!d.target.value?A("backspace"):L())},onCompositionStart:()=>{p.current=!0,b.current=!1},onCompositionEnd:()=>{p.current=!1,L(),b.current=!0,clearTimeout(z.current),z.current=setTimeout(()=>{b.current=!1},0)},onFocus:()=>c?.(!0),onBlur:()=>{p.current||(H(),j()),c?.(!1)},onKeyDown:d=>{if(p.current||d.nativeEvent.isComposing||d.keyCode===229)return;const k=d.ctrlKey||d.altKey||d.metaKey,_=(d.ctrlKey||d.metaKey)&&!d.altKey&&d.key.toLowerCase()==="v";if(a&&!_&&!d.getModifierState("AltGraph")&&(k||d.shiftKey)){const V={Enter:65293,Backspace:65288,Delete:65535,Tab:65289,ArrowUp:65362,ArrowDown:65364,ArrowLeft:65361,ArrowRight:65363,Home:65360,End:65367,PageUp:65365,PageDown:65366}[d.key]??(k&&d.key.length===1?d.key.toLowerCase().codePointAt(0):void 0);if(V!==void 0){d.preventDefault(),H();const D=[];d.ctrlKey&&D.push([65507,"ControlLeft"]),d.altKey&&D.push([65513,"AltLeft"]),d.metaKey&&!D.some(([ce])=>ce===f[0])&&D.push(f),d.shiftKey&&D.push([65505,"ShiftLeft"]),D.push([V,d.code||d.key]),j(),a(D);return}}const v=kr[d.key];v&&(d.preventDefault(),A(v))}})]})}function Nr(n){let t=[],a=null;const o=new Map,f=()=>{a=null,t.splice(0,32).forEach(x=>{n(x),x[2]?o.set(x[0],x):o.delete(x[0])}),t.length&&(a=requestAnimationFrame(f))};return{send(x){t.push(...x),a===null&&f()},clear(){a!==null&&cancelAnimationFrame(a),a=null,t=[];const x=[...o.values()].reverse();o.clear();for(const[c,m]of x)try{n([c,m,!1])}catch{}}}}const Sr=n=>Math.max(1,Math.min(8,Number.isFinite(n)?n:1));function Tr(n,t){let a=1;const o="viewportZoom"in n,f=n,x=()=>o?n.pointerTarget.surface():f._canvas,c=()=>o?n.viewportScroller:f._screen,m=o?void 0:f._updateScale;return m&&(f._updateScale=function(){m.call(f),f._display.scale*=a}),{get:()=>a,set(E,p){const y=Sr(E),w=x(),h=c(),b=w.getBoundingClientRect(),z=h.getBoundingClientRect(),T=p??{x:z.left+z.width/2,y:z.top+z.height/2},g={x:(T.x-b.left)/(b.width||1),y:(T.y-b.top)/(b.height||1)};a=y,o?n.viewportZoom=a:f._updateScale();const N=w.getBoundingClientRect();h.scrollLeft+=N.left+g.x*N.width-T.x,h.scrollTop+=N.top+g.y*N.height-T.y,a===1&&(h.scrollLeft=0,h.scrollTop=0),t(a)},pan(E,p){const y=c();y.scrollLeft-=E,y.scrollTop-=p},dispose(){m&&(f._updateScale=m)}}}function Lr(n,t){const a=n,o=a._keyboard,f=o._target,x=n.focus,c=document.createElement("textarea");c.tabIndex=-1,c.setAttribute("aria-label","Remote desktop keyboard"),c.autocapitalize="off",c.autocomplete="off",c.spellcheck=!1,Object.assign(c.style,{position:"absolute",left:"0",top:"0",width:"1px",height:"1px",fontSize:"16px",opacity:"0",pointerEvents:"none"}),a._screen.append(c);const m=new AbortController;let E=!1,p=null,y=!1;const w=()=>{a._mouseMoveTimer!==null&&clearTimeout(a._mouseMoveTimer),a._mouseMoveTimer=null,a._mouseButtonMask&&(a._mouseButtonMask=0,a._sendMouse(a._mousePos.x,a._mousePos.y,0))};window.addEventListener("blur",w,{signal:m.signal}),document.addEventListener("visibilitychange",()=>{document.hidden&&(o._allKeysUp(),w())},{signal:m.signal});const h=()=>{p!==null&&cancelAnimationFrame(p),p=null;const b=c.value;c.value="",b&&!n.viewOnly&&t(b)};return c.addEventListener("keydown",b=>{(E||b.isComposing||b.keyCode===229)&&b.stopImmediatePropagation()},{capture:!0,signal:m.signal}),c.addEventListener("compositionstart",()=>{p!==null&&h(),E=!0,o._allKeysUp()},{signal:m.signal}),c.addEventListener("compositionend",()=>{E=!1,p!==null&&cancelAnimationFrame(p),p=requestAnimationFrame(h)},{signal:m.signal}),c.addEventListener("input",b=>{!E&&!b.isComposing&&p===null&&h()},{signal:m.signal}),c.addEventListener("blur",()=>{!E&&p!==null&&h(),o._allKeysUp()},{signal:m.signal}),o.ungrab(),o._target=c,n.viewOnly||o.grab(),n.focus=b=>{!y&&!n.viewOnly&&c.focus(b)},document.activeElement===f&&n.focus({preventScroll:!0}),()=>{y||(y=!0,p!==null&&(E?cancelAnimationFrame(p):h()),w(),m.abort(),o.ungrab(),o._target=f,n.viewOnly||o.grab(),n.focus=x,c.remove())}}function*Lt(n){for(const t of n.replace(/\r\n?/g,`
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/rdpSession-tZqbe3lc.js","assets/app-D2M53LZx.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-C7X98Amf.js","assets/index-CLjn9_01.css","assets/ChangeWalkthroughPanel-DG4TnQvn.js","assets/sparkles-iFcvD4yM.js","assets/triangle-alert-BeIpvW9N.js","assets/App-DhHRFEY2.js","assets/gestureArbiter-DPFs4a-w.js","assets/gestureArbiter-C2J0D0kV.css","assets/referenceLongPress-l-iC26Y4.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{ah as Ge,cz as Yt,df as At,bA as r,a4 as Xt,cw as He,bz as nt,W as Et,o as kt,l as Wt,X as qt,_ as jt}from"./app-D2M53LZx.js";import{b as i,r as ot}from"./dnd-BCFAPC0L.js";import{a as Gt}from"./ChangeWalkthroughPanel-DG4TnQvn.js";import{s as Nt,X as St,K as Ye,j as st}from"./App-DhHRFEY2.js";import{M as Zt}from"./triangle-alert-BeIpvW9N.js";const Jt=[["path",{d:"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z",key:"edeuup"}]],Qt=Ge("mouse-pointer-2",Jt);const er=[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]],tr=Ge("settings-2",er);const rr=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],nr=Ge("zoom-in",rr);const or=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],sr=Ge("zoom-out",or);function it(n){const t=n==="darwin"?"mac":n==="win32"?"windows":"linux",a={host:"127.0.0.1",platform:t,protocol:t==="mac"?"vnc":"rdp",port:"3389",username:"",domain:"",ignoreCert:!1,rememberLogin:!0};return{target:"local",local:a,remote:{...a,host:""},viewOnly:!1,fit:!0,autoConnect:!0}}function Tt(n,t){const a=it(t);if(!n||typeof n!="object")return a;const o=n,f=(x,c)=>{const m=x&&typeof x=="object"?x:{},E=(p,y)=>typeof m[p]=="string"&&m[p].length<=y&&!/[\x00-\x1f]/.test(m[p])?m[p]:c[p];return{host:E("host",253),username:E("username",255),domain:E("domain",255),platform:["mac","linux","windows"].includes(String(m.platform))?m.platform:c.platform,protocol:m.protocol==="rdp"||m.protocol==="vnc"?m.protocol:c.protocol,port:typeof m.port=="string"&&/^\d{0,5}$/.test(m.port)&&Number(m.port)<=65535?m.port:c.port,ignoreCert:m.ignoreCert===!0,rememberLogin:m.rememberLogin!==!1}};return{target:o.target==="remote"?"remote":"local",local:{...f(o.local,a.local),host:"127.0.0.1"},remote:f(o.remote,a.remote),viewOnly:o.viewOnly===!0,fit:o.fit!==!1,autoConnect:o.autoConnect!==!1}}function _t(n){return JSON.stringify([n.host.trim().toLowerCase(),n.protocol,n.protocol==="vnc"?5900:Number(n.port),n.username.trim(),n.domain.trim()])}function ar(n){const[t,a]=i.useState(it),[o,f]=i.useState(!1),[x,c]=i.useState("loading"),[m,E]=i.useState(0),[p,y]=i.useState([]),[w,h]=i.useState("idle"),b=i.useRef(t),z=i.useRef(0),T=i.useRef(0),g=i.useRef(""),N=i.useRef(null),F=i.useRef(new Set),j=i.useCallback(A=>{b.current=A(b.current),z.current++,a(b.current),c("saving")},[]);i.useEffect(()=>{const A=++T.current;z.current=0,g.current="",N.current=null,b.current=it(),a(b.current),f(!1),c("loading"),y([]),h("idle");const d=new AbortController;return fetch("/api/computer/preferences",{signal:d.signal}).then(async k=>{if(!k.ok)throw new Error("PREFERENCES_LOAD_FAILED");return await k.json()}).then(k=>{if(A!==T.current||d.signal.aborted)return;let _=Tt(k.preferences);const v=z.current>0;if(!k.configured&&!v)try{const P=localStorage.getItem(`termdock:computer-host:${n}`);if(P){const D=/^(127\.0\.0\.1|localhost|::1|\[::1\])$/i.test(P)?"local":"remote";_=Tt({..._,target:D,[D]:{..._[D],host:P,platform:localStorage.getItem(`termdock:computer-platform:${n}`)||_[D].platform,protocol:localStorage.getItem(`termdock:computer-protocol:${n}`)||"vnc",port:localStorage.getItem(`termdock:computer-rdp-port:${n}`)||"3389"}}),z.current++}}catch{}v||(b.current=_),g.current=k.configured?JSON.stringify(_):"",a(b.current),f(!0),c(k.configured?"saved":"saving"),y(Array.isArray(k.credentialKeys)?k.credentialKeys.filter(P=>typeof P=="string"):[]),h(k.credentialError?"error":"idle")}).catch(()=>{!d.signal.aborted&&A===T.current&&c("error")}),()=>{++T.current,d.abort();for(const k of F.current)k.abort();F.current.clear()}},[n,m]);const L=i.useCallback(()=>{if(N.current)return N.current;if(!o)return Promise.resolve(!1);const A=T.current,d=(async()=>{for(;g.current!==JSON.stringify(b.current);){const k=JSON.stringify(b.current),_=new AbortController;F.current.add(_),c("saving");try{if(!(await fetch("/api/computer/preferences",{method:"PUT",headers:{"Content-Type":"application/json"},body:k,signal:_.signal})).ok)throw new Error("PREFERENCES_SAVE_FAILED");if(A!==T.current)return!1;g.current=k}catch{return A===T.current&&c("error"),!1}finally{F.current.delete(_)}}return A===T.current&&c("saved"),!0})();return N.current=d,d.finally(()=>{N.current===d&&(N.current=null)}),d},[o]);i.useEffect(()=>{if(!o||g.current===JSON.stringify(t))return;const A=setTimeout(()=>{L()},300);return()=>clearTimeout(A)},[o,t,L]);const H=i.useCallback(async(A,d,k)=>{const _=T.current,v=new AbortController;A!=="use"&&h("saving");try{if(!await L()||_!==T.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");F.current.add(v);const P=await fetch(`/api/computer/credentials/${A}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({profile:d,...A==="save"?{password:k}:{}}),signal:v.signal});if(_!==T.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");if(!P.ok)throw new Error(A==="use"&&P.status===404?"COMPUTER_CREDENTIALS_MISSING":"COMPUTER_CREDENTIALS_FAILED");const V=await P.json();if(_!==T.current)throw new Error("COMPUTER_CREDENTIALS_FAILED");const D=_t(d);if(A==="save"&&y(ce=>[...new Set([...ce,D])]),A==="forget"&&y(ce=>ce.filter(J=>J!==D)),A==="use"&&(typeof V.password!="string"||!V.password))throw new Error("COMPUTER_CREDENTIALS_MISSING");return h("idle"),V.password}catch(P){throw _===T.current&&!v.signal.aborted&&h("error"),P}finally{F.current.delete(v)}},[L]);return{preferences:t,change:j,loaded:o,saveState:x,flush:L,credentialKeys:p,loginState:w,credentialRequest:H,retry:()=>o?void L():E(A=>A+1)}}const cr=1464686180;function ir(n){if(n.length<4||n[0]!==2)return n;const t=new DataView(n.buffer,n.byteOffset,n.byteLength),a=t.getUint16(2);if(n.length!==4+a*4)return n;const o=[];for(let c=4;c<n.length;c+=4){const m=t.getInt32(c);m!==cr&&o.push(m)}if(o.length===a)return n;const f=new Uint8Array(4+o.length*4),x=new DataView(f.buffer);return f.set(n.subarray(0,2)),x.setUint16(2,o.length),o.forEach((c,m)=>x.setInt32(4+m*4,c)),f}function lr(n,t){const a=n,o=a._sendEncodings;a._sendEncodings=()=>t.withMacCursorEncodings(()=>o.call(n))}class ur{binaryType="arraybuffer";protocol="";CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;onopen=null;onmessage=null;onerror=null;onclose=null;socket;sendingMacEncodings=!1;withMacCursorEncodings(t){const a=this.sendingMacEncodings;this.sendingMacEncodings=!0;try{t()}finally{this.sendingMacEncodings=a}}get readyState(){return this.socket.readyState}constructor(t,a){this.socket=Yt(`/api/computer/ws?host=${encodeURIComponent(t)}`),this.socket.onopen=o=>this.onopen?.(o),this.socket.onerror=o=>this.onerror?.(o),this.socket.onclose=o=>{(o.code!==1e3||o.reason)&&a(o.reason||"COMPUTER_DISCONNECTED"),this.onclose?.(o)},this.socket.onmessage=o=>{try{const f=JSON.parse(o.data);if(f.type!=="data"||typeof f.data!="string"||!Number.isSafeInteger(f.seq))throw new Error("Invalid VNC record");const x=Uint8Array.from(atob(f.data),c=>c.charCodeAt(0));this.onmessage?.(new MessageEvent("message",{data:x.buffer})),this.socket.readyState===1&&this.socket.send(JSON.stringify({type:"ack",seq:f.seq}))}catch{a("COMPUTER_INVALID_MESSAGE"),this.close(),this.onclose?.(new CloseEvent("close",{code:4400}))}}}send(t){let a=ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t);this.sendingMacEncodings&&(a=ir(a));for(let o=0;o<a.length;o+=32*1024){const f=a.subarray(o,o+32768);let x="";for(const c of f)x+=String.fromCharCode(c);this.socket.send(JSON.stringify({type:"data",data:btoa(x)}))}}close(){this.socket.close()}}function dr(n){return n==="mac"||n==="linux"||n==="windows"}function pr(n){const t=n==="mac"?[65513,"MetaLeft"]:[65507,"ControlLeft"],a=n==="mac"?t:[65515,"MetaLeft"];return{escape:[[65307,"Escape"]],enter:[[65293,"Enter"]],backspace:[[65288,"Backspace"]],tab:[n==="mac"?t:[65513,"AltLeft"],[65289,"Tab"]],search:n==="mac"?[a,[32,"Space"]]:[a],copy:[t,[99,"KeyC"]],paste:[t,[118,"KeyV"]],up:[[65362,"ArrowUp"]],down:[[65364,"ArrowDown"]],left:[[65361,"ArrowLeft"]],right:[[65363,"ArrowRight"]]}}function mr(n){n._cursor?._hideCursor?.()}function fr(n){const t=n;return{position:()=>({x:Number.isFinite(t._mousePos.x)?t._display.absX(t._mousePos.x):t._fbWidth/2,y:Number.isFinite(t._mousePos.y)?t._display.absY(t._mousePos.y):t._fbHeight/2}),size:()=>({width:t._fbWidth,height:t._fbHeight}),surface:()=>t._canvas,send:(a,o,f)=>{const x=t._display.scale,c=(a-t._display.absX(0))*x,m=(o-t._display.absY(0))*x;t._mousePos={x:c,y:m},t._mouseMoveTimer!==null&&clearTimeout(t._mouseMoveTimer),t._mouseMoveTimer=null,t._mouseButtonMask=f,t._mouseLastMoveTime=Date.now(),t._sendMouse(c,m,f);const E=t._canvas.getBoundingClientRect();t._cursor?.move(E.left+c,E.top+m)}}}function hr(n,t,a){const o=new AbortController,f=new Set,x=new Set;let c,m,E=!1,p=performance.now();const y=()=>f.size>0||x.size>0,w=g=>{c=void 0,!(E||!y())&&(performance.now()-p>1e3||(a.record("browser-frame",{time:g,interval:m===void 0?null:g-m,logical:t.position?.(),renderer:t.observeCursor?.()}),m=g,c=requestAnimationFrame(w)))},h=()=>{y()?c===void 0&&(m=void 0,c=requestAnimationFrame(w)):(c!==void 0&&cancelAnimationFrame(c),c=void 0,m=void 0)},b=g=>{if(g.pointerType!=="touch"&&g.pointerType!=="pen")return;p=performance.now(),g.type==="pointerdown"?f.add(g.pointerId):(g.type==="pointerup"||g.type==="pointercancel"||g.type==="lostpointercapture")&&f.delete(g.pointerId);const N=g.getCoalescedEvents?.()??[];a.record("raw-pointer",{type:g.type,time:g.timeStamp,id:g.pointerId,pointerType:g.pointerType,client:[g.clientX,g.clientY],trusted:g.isTrusted,coalesced:N.slice(-16).map(F=>[F.timeStamp,F.clientX,F.clientY])}),h()},z=g=>{p=performance.now(),x.clear();for(const N of Array.from(g.touches))x.add(N.identifier);a.record("raw-touch",{type:g.type,time:g.timeStamp,trusted:g.isTrusted,touches:Array.from(g.touches,N=>[N.identifier,N.clientX,N.clientY]),changed:Array.from(g.changedTouches,N=>[N.identifier,N.clientX,N.clientY])}),h()},T={capture:!0,passive:!0,signal:o.signal};for(const g of["pointerdown","pointermove","pointerup","pointercancel","lostpointercapture"])n.addEventListener(g,b,T);for(const g of["touchstart","touchmove","touchend","touchcancel"])n.addEventListener(g,z,T);return a.record("observation-start",{version:2,pointerEvents:typeof PointerEvent<"u",touchEvents:"ontouchstart"in window}),()=>{E=!0,o.abort(),c!==void 0&&cancelAnimationFrame(c),a.record("observation-stop"),a.flush("observation-stop")}}const Mt="termdock:computer-touch-mode:v1";function gr(){try{const n=localStorage.getItem(Mt);if(n==="trackpad"||n==="direct")return n}catch{}return navigator.maxTouchPoints>0&&window.matchMedia("(any-pointer: coarse)").matches?"trackpad":"direct"}function xr(n){try{localStorage.setItem(Mt,n)}catch{}}const Ke=8,br=300,yr=450,at=18,wr=50,Xe=(n,t)=>Math.max(0,Math.min(n,Math.max(0,t-1)));function vr(n,t,a,o={}){const f=new AbortController,x=o.trace?hr(n,t,o.trace):void 0,c=new Map;let m=0,E=0,p=!1,y=!1,w=!1,h=!1,b=0,z=1,T="pending",g=[],N={x:0,y:0},F={x:0,y:0},j,L=0,H=0,A,d=!0,k,_=!1;const v=()=>{const s=t.size(),l=a.current??={x:s.width/2,y:s.height/2};return l.x=Xe(l.x,s.width),l.y=Xe(l.y,s.height),l};let P;const V=()=>{const s=t.size();if((!P||P.width!==s.width||P.height!==s.height)&&(d=!0),!d&&P)return P;const l=t.surface(),C=n.getBoundingClientRect(),K=l.getBoundingClientRect(),O=[];for(let I=l.parentElement;I&&I!==n;I=I.parentElement){const se=getComputedStyle(I),Y=/auto|scroll/.test(se.overflowX)?Math.max(0,I.scrollWidth-I.clientWidth):0,ye=/auto|scroll/.test(se.overflowY)?Math.max(0,I.scrollHeight-I.clientHeight):0;if(!Y&&!ye)continue;const Ne=I.getBoundingClientRect();O.push({element:I,left:Ne.left-C.left,top:Ne.top-C.top,right:Ne.right-C.left,bottom:Ne.bottom-C.top,maxX:Y,maxY:ye})}return P={...s,left:K.left-C.left,top:K.top-C.top,scaleX:s.width&&K.width?K.width/s.width:1,scaleY:s.height&&K.height?K.height/s.height:1,viewportWidth:C.width,viewportHeight:C.height,clientLeft:C.left,clientTop:C.top,scrollers:O},d=!1,P},D=(s,l)=>{if(!o.trace)return;const C=P;o.trace.record(s,{mode:o.mode,pointerType:l?.pointerType,pointerId:l?.pointerId,client:l?[l.clientX,l.clientY]:void 0,inputTime:l?.timeStamp,target:a.current?[a.current.x,a.current.y]:null,actual:t.position?.(),buttons:H,fingers:c.size,moved:p,pinching:h,scrolling:w,zoom:o.zoom?.get(),scale:C?[C.scaleX,C.scaleY]:void 0,surface:C?[C.left,C.top,C.width,C.height]:void 0,viewport:C?[C.clientLeft,C.clientTop,C.viewportWidth,C.viewportHeight]:void 0})};o.trace?.record("touchpad-attached",{mode:o.mode,viewOnly:o.viewOnly});const ce=()=>{const s=V(),l=v();if(!s.width||!s.height||h||o.viewOnly)return;let C=s.left+l.x*s.scaleX,K=s.top+l.y*s.scaleY;for(const O of s.scrollers){if(O.maxX){const I=O.element.scrollLeft,se=C<O.left+20?C-O.left-20:C>O.right-20?C-O.right+20:0,Y=Math.max(0,Math.min(O.maxX,I+se));I!==Y&&(O.element.scrollLeft=Y,C-=Y-I,s.left-=Y-I)}if(O.maxY){const I=O.element.scrollTop,se=K<O.top+20?K-O.top-20:K>O.bottom-20?K-O.bottom+20:0,Y=Math.max(0,Math.min(O.maxY,I+se));I!==Y&&(O.element.scrollTop=Y,K-=Y-I,s.top-=Y-I)}}},J=(s=H)=>{if(o.viewOnly)return;const l=v(),C=o.trace?t.position?.():void 0;t.send(Math.round(l.x),Math.round(l.y),s),o.trace?.record("send",{target:[Math.round(l.x),Math.round(l.y)],buttons:s,before:C,after:t.position?.()})},Ie=()=>{A=void 0,ce();let s=0;for(;Math.abs(L)>=at&&s++<8;){const l=L>0?16:8;J(l),J(0),L-=Math.sign(L)*at}},Ae=(s=!1)=>{_||!s&&Math.abs(L)<at&&!P?.scrollers.length||(A??=requestAnimationFrame(Ie))},Ue=()=>{A!==void 0&&(cancelAnimationFrame(A),Ie())},Oe=()=>{A!==void 0&&cancelAnimationFrame(A),A=void 0,L=0},je=()=>{clearTimeout(k),Ue(),H&&(H=0,J())},B=s=>{s.cancelable&&s.preventDefault(),s.stopImmediatePropagation()},_e=()=>{const[s,l]=[...c.values()];return{distance:Math.hypot(s.x-l.x,s.y-l.y),x:(s.x+l.x)/2,y:(s.y+l.y)/2}},pe=(s=!1)=>{if(_||y||c.size!==2||E!==2)return;const l=_e();if(T==="pending"){const C=[...c.values()].map((Y,ye)=>({x:Y.x-g[ye].x,y:Y.y-g[ye].y})),K=C.map(Y=>Math.hypot(Y.x,Y.y));if(Math.max(...K)<Ke)return;if(!s&&Math.min(...K)<Ke){j??=setTimeout(()=>{j=void 0,pe(!0)},wr);return}clearTimeout(j),j=void 0;const O=Math.abs(l.distance-b),I=C[0].x*C[1].x+C[0].y*C[1].y<0,se=Math.min(...K)>=Ke?I:O>Math.max(Math.abs(l.x-N.x),Math.abs(l.y-N.y));T=o.zoom&&O>=Ke&&se?"pinch":o.mode==="direct"&&o.zoom&&o.zoom.get()>1?"pan":"scroll",h=T==="pinch",p=!0,D("two-finger-classified")}T==="pinch"&&b>0?(o.zoom?.set(z*l.distance/b,l),o.zoom?.pan(l.x-F.x,l.y-F.y),d=!0):T==="pan"?(o.zoom?.pan(l.x-F.x,l.y-F.y),d=!0):L+=F.y-l.y,F=l,Ae()},Z=s=>{const l=V();a.current={x:Xe((s.clientX-l.clientLeft-l.left)/l.scaleX,l.width),y:Xe((s.clientY-l.clientTop-l.top)/l.scaleY,l.height)}},$=s=>{if(!(s.pointerType!=="touch"&&s.pointerType!=="pen")){B(s),c.size||(d=!0,clearTimeout(j),j=void 0,m=performance.now(),E=0,p=!1,y=!1,w=!1,h=!1,L=0,o.mode==="direct"?Z(s):t.position&&(a.current={...t.position()},v())),c.set(s.pointerId,{x:s.clientX,y:s.clientY,startX:s.clientX,startY:s.clientY}),E=Math.max(E,c.size),D("down",s);try{n.setPointerCapture(s.pointerId)}catch{}if(clearTimeout(k),c.size===1&&E===1)k=setTimeout(()=>{!_&&c.size===1&&!p&&!y&&(H=1,J())},yr);else if(je(),w=!0,c.size===2&&E===2){const l=_e();b=l.distance,z=o.zoom?.get()??1,N=F=l,T="pending",g=[...c.values()].map(({x:C,y:K})=>({x:C,y:K}))}else y=!0,clearTimeout(j),j=void 0}},re=s=>{if(s.pointerType==="mouse")return;const l=c.get(s.pointerId);if(!l)return;B(s);const C=s.clientX-l.x,K=s.clientY-l.y;if(l.x=s.clientX,l.y=s.clientY,D("move-input",s),Math.hypot(l.x-l.startX,l.y-l.startY)>Ke&&(p=!0,clearTimeout(k)),c.size===2&&!y)pe();else if(c.size===1&&!w&&!y){if(o.mode==="direct"){Z(s),p&&(H=1),J(),Ae();return}const O=v(),I=V();O.x+=C/I.scaleX,O.y+=K/I.scaleY,v(),J(),Ae()}},ne=s=>{if(!c.has(s.pointerId))return;B(s),D(s.type,s),clearTimeout(j),j=void 0;const l=H!==0;s.type!=="pointerup"&&(y=!0,Oe()),je(),c.delete(s.pointerId);try{n.hasPointerCapture(s.pointerId)&&n.releasePointerCapture(s.pointerId)}catch{}c.size||(L=0,!y&&!l&&!p&&E<=2&&performance.now()-m<=br&&(o.mode!=="direct"||E===1)&&(J(E===2?4:1),J(0)),D("gesture-end",s),o.trace?.flush("gesture-end"))},oe=()=>{y=!0,Oe(),clearTimeout(j),j=void 0,je();const s=[...c.keys()];c.clear(),L=0;for(const l of s)try{n.hasPointerCapture(l)&&n.releasePointerCapture(l)}catch{}},be={capture:!0,passive:!1,signal:f.signal};n.addEventListener("pointerdown",$,be),n.addEventListener("pointermove",re,be),n.addEventListener("pointerup",ne,be),n.addEventListener("pointercancel",ne,be),n.addEventListener("lostpointercapture",ne,be);for(const s of["touchstart","touchmove","touchend","touchcancel","contextmenu"])n.addEventListener(s,B,be);const Me=()=>{d=!0,Ae(!0)};n.addEventListener("scroll",Me,{capture:!0,signal:f.signal}),window.addEventListener("blur",oe,{signal:f.signal});const Q=()=>{document.hidden&&oe()};document.addEventListener("visibilitychange",Q,{signal:f.signal});const ie=new ResizeObserver(Me);return ie.observe(n),ie.observe(t.surface()),!a.current&&t.position&&(a.current={...t.position()}),ce(),()=>{_||(_=!0,D("touchpad-detached"),f.abort(),oe(),ie.disconnect(),x?.(),o.trace?.flush("touchpad-detached"))}}function Cr(n,t){n=Math.max(1,n||1280),t=Math.max(1,t||800);const a=Math.max(1,640/n,480/t);return{width:Math.max(640,Math.min(2560,Math.round(n*a))),height:Math.max(480,Math.min(1600,Math.round(t*a)))}}function Er(n,t){const a=Array.from(n),o=Array.from(t);let f=0;for(;f<a.length&&f<o.length&&a[f]===o[f];)f++;return{backspaces:a.length-f,text:o.slice(f).join("")}}const ct="",kr={Enter:"enter",Backspace:"backspace",Delete:"delete",Tab:"tab",ArrowUp:"up",ArrowDown:"down",ArrowLeft:"left",ArrowRight:"right"};function jr({sendText:n,sendKey:t,sendChord:a,pasteText:o,commandKey:f=[65515,"MetaLeft"],inputRef:x,onFocusChange:c}){const{t:m}=At(),E=i.useRef(null),p=i.useRef(!1),y=x??E,w=i.useRef({sendText:n,sendKey:t});w.current={sendText:n,sendKey:t};const h=i.useRef(""),b=i.useRef(!1),z=i.useRef(),[T,g]=i.useState(!1),N=()=>(y.current?.value||"").replace(/^\u200b/,""),F=d=>{if(h.current=Array.from(d).slice(-256).join(""),y.current){y.current.value=ct+h.current;const k=y.current.value.length;y.current.setSelectionRange(k,k)}g(!!h.current)},j=()=>F(""),L=()=>{if(p.current)return;const d=N(),k=Er(h.current,d);F(d);for(let _=0;_<k.backspaces;_++)w.current.sendKey("backspace");k.text&&w.current.sendText(k.text)},H=()=>{p.current||L()},A=d=>{H(),d==="backspace"?F(Array.from(h.current).slice(0,-1).join("")):j(),w.current.sendKey(d)};return i.useLayoutEffect(()=>{const d=y.current;d.value=ct,d.setSelectionRange(1,1),d.focus({preventScroll:!0});const k=v=>{if(p.current||v.isComposing)return;const P=v.inputType==="deleteContentBackward"?"backspace":v.inputType==="deleteContentForward"?"delete":null;if(P){if(P==="backspace"&&h.current)return;v.preventDefault(),A(P);return}["insertLineBreak","insertParagraph"].includes(v.inputType)&&(v.preventDefault(),b.current||A("enter"),b.current=!1)},_=()=>{p.current||j()};return d.addEventListener("beforeinput",k),d.addEventListener("termdock:computer-input-reset",_),()=>{d.removeEventListener("beforeinput",k),d.removeEventListener("termdock:computer-input-reset",_),clearTimeout(z.current)}},[]),r.jsxs("div",{className:"relative shrink-0 border-t border-border bg-surface px-2 py-1",children:[!T&&r.jsx("span",{"aria-hidden":"true",className:"pointer-events-none absolute inset-y-1 left-5 flex items-center truncate pr-5 text-sm text-muted-foreground",children:m("computer.keyboardPlaceholder")}),r.jsx("input",{ref:y,className:"min-h-11 w-full rounded-md border border-border bg-background px-3 text-base outline-none focus:border-primary","aria-label":m("computer.keyboardInput"),autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",spellCheck:!1,inputMode:"text",enterKeyHint:"enter",maxLength:1025,defaultValue:ct,onPaste:d=>{if(p.current||!d.clipboardData.types.includes("text/plain"))return;d.preventDefault(),H(),j();const k=d.clipboardData.getData("text/plain");o?o(k):w.current.sendText(k)},onChange:d=>{g(!!d.target.value.replace(/^\u200b/,"")),!(p.current||d.nativeEvent.isComposing)&&(d.nativeEvent.inputType==="deleteContentBackward"&&!h.current&&!d.target.value?A("backspace"):L())},onCompositionStart:()=>{p.current=!0,b.current=!1},onCompositionEnd:()=>{p.current=!1,L(),b.current=!0,clearTimeout(z.current),z.current=setTimeout(()=>{b.current=!1},0)},onFocus:()=>c?.(!0),onBlur:()=>{p.current||(H(),j()),c?.(!1)},onKeyDown:d=>{if(p.current||d.nativeEvent.isComposing||d.keyCode===229)return;const k=d.ctrlKey||d.altKey||d.metaKey,_=(d.ctrlKey||d.metaKey)&&!d.altKey&&d.key.toLowerCase()==="v";if(a&&!_&&!d.getModifierState("AltGraph")&&(k||d.shiftKey)){const V={Enter:65293,Backspace:65288,Delete:65535,Tab:65289,ArrowUp:65362,ArrowDown:65364,ArrowLeft:65361,ArrowRight:65363,Home:65360,End:65367,PageUp:65365,PageDown:65366}[d.key]??(k&&d.key.length===1?d.key.toLowerCase().codePointAt(0):void 0);if(V!==void 0){d.preventDefault(),H();const D=[];d.ctrlKey&&D.push([65507,"ControlLeft"]),d.altKey&&D.push([65513,"AltLeft"]),d.metaKey&&!D.some(([ce])=>ce===f[0])&&D.push(f),d.shiftKey&&D.push([65505,"ShiftLeft"]),D.push([V,d.code||d.key]),j(),a(D);return}}const v=kr[d.key];v&&(d.preventDefault(),A(v))}})]})}function Nr(n){let t=[],a=null;const o=new Map,f=()=>{a=null,t.splice(0,32).forEach(x=>{n(x),x[2]?o.set(x[0],x):o.delete(x[0])}),t.length&&(a=requestAnimationFrame(f))};return{send(x){t.push(...x),a===null&&f()},clear(){a!==null&&cancelAnimationFrame(a),a=null,t=[];const x=[...o.values()].reverse();o.clear();for(const[c,m]of x)try{n([c,m,!1])}catch{}}}}const Sr=n=>Math.max(1,Math.min(8,Number.isFinite(n)?n:1));function Tr(n,t){let a=1;const o="viewportZoom"in n,f=n,x=()=>o?n.pointerTarget.surface():f._canvas,c=()=>o?n.viewportScroller:f._screen,m=o?void 0:f._updateScale;return m&&(f._updateScale=function(){m.call(f),f._display.scale*=a}),{get:()=>a,set(E,p){const y=Sr(E),w=x(),h=c(),b=w.getBoundingClientRect(),z=h.getBoundingClientRect(),T=p??{x:z.left+z.width/2,y:z.top+z.height/2},g={x:(T.x-b.left)/(b.width||1),y:(T.y-b.top)/(b.height||1)};a=y,o?n.viewportZoom=a:f._updateScale();const N=w.getBoundingClientRect();h.scrollLeft+=N.left+g.x*N.width-T.x,h.scrollTop+=N.top+g.y*N.height-T.y,a===1&&(h.scrollLeft=0,h.scrollTop=0),t(a)},pan(E,p){const y=c();y.scrollLeft-=E,y.scrollTop-=p},dispose(){m&&(f._updateScale=m)}}}function Lr(n,t){const a=n,o=a._keyboard,f=o._target,x=n.focus,c=document.createElement("textarea");c.tabIndex=-1,c.setAttribute("aria-label","Remote desktop keyboard"),c.autocapitalize="off",c.autocomplete="off",c.spellcheck=!1,Object.assign(c.style,{position:"absolute",left:"0",top:"0",width:"1px",height:"1px",fontSize:"16px",opacity:"0",pointerEvents:"none"}),a._screen.append(c);const m=new AbortController;let E=!1,p=null,y=!1;const w=()=>{a._mouseMoveTimer!==null&&clearTimeout(a._mouseMoveTimer),a._mouseMoveTimer=null,a._mouseButtonMask&&(a._mouseButtonMask=0,a._sendMouse(a._mousePos.x,a._mousePos.y,0))};window.addEventListener("blur",w,{signal:m.signal}),document.addEventListener("visibilitychange",()=>{document.hidden&&(o._allKeysUp(),w())},{signal:m.signal});const h=()=>{p!==null&&cancelAnimationFrame(p),p=null;const b=c.value;c.value="",b&&!n.viewOnly&&t(b)};return c.addEventListener("keydown",b=>{(E||b.isComposing||b.keyCode===229)&&b.stopImmediatePropagation()},{capture:!0,signal:m.signal}),c.addEventListener("compositionstart",()=>{p!==null&&h(),E=!0,o._allKeysUp()},{signal:m.signal}),c.addEventListener("compositionend",()=>{E=!1,p!==null&&cancelAnimationFrame(p),p=requestAnimationFrame(h)},{signal:m.signal}),c.addEventListener("input",b=>{!E&&!b.isComposing&&p===null&&h()},{signal:m.signal}),c.addEventListener("blur",()=>{!E&&p!==null&&h(),o._allKeysUp()},{signal:m.signal}),o.ungrab(),o._target=c,n.viewOnly||o.grab(),n.focus=b=>{!y&&!n.viewOnly&&c.focus(b)},document.activeElement===f&&n.focus({preventScroll:!0}),()=>{y||(y=!0,p!==null&&(E?cancelAnimationFrame(p):h()),w(),m.abort(),o.ungrab(),o._target=f,n.viewOnly||o.grab(),n.focus=x,c.remove())}}function*Lt(n){for(const t of n.replace(/\r\n?/g,`
|
|
3
3
|
`)){const a=t.codePointAt(0);yield t===`
|
|
4
|
-
`?65293:t===" "?65289:a<256?a:16777216|a}}const qe=1048576,Rt="termdock:computer-copy";function Ar(n,t,a){const o=new AbortController;let f=!1,x=-1/0,c=!0;const m=new Set,E=h=>{if(!(h.ctrlKey||h.metaKey)||h.altKey||h.isComposing)return;const b=h.key.toLowerCase();b==="v"?(f=h.shiftKey,m.add(h.code||h.key),h.stopImmediatePropagation()):(b==="c"||b==="x")&&(x=performance.now())},p=h=>{h.preventDefault(),h.stopImmediatePropagation();const b=h.clipboardData;if(!b||!Array.from(b.types).includes("text/plain")){a.failed();return}const z=b.getData("text/plain");if(z.length>qe){a.failed();return}try{a.paste(z,f)}catch{a.failed()}f=!1},y=h=>{const b=h.detail?.text;if(typeof b!="string"||b.length>qe){a.failed();return}a.receive(b),performance.now()-x<2e3&&(x=-1/0,navigator.clipboard?.writeText?navigator.clipboard.writeText(b).catch(()=>{c&&a.failed()}):a.failed())},w={capture:!0,signal:o.signal};return n.addEventListener(Rt,()=>{x=performance.now()},w),n.addEventListener("keydown",E,w),n.addEventListener("keyup",h=>{m.delete(h.code||h.key)&&h.stopImmediatePropagation()},w),n.addEventListener("paste",p,w),t.addEventListener("clipboard",y,{signal:o.signal}),t.addEventListener("clipboarderror",a.failed,{signal:o.signal}),window.addEventListener("blur",()=>{m.clear(),f=!1,x=-1/0},{signal:o.signal}),()=>{c=!1,o.abort()}}function _r(){try{if(sessionStorage.getItem("termdock:computer-motion-trace")==="1")return Mr()}catch{}}function Mr(){const n=performance.now(),t=n+15*6e4,a=`motion-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;let o=[],f=0,x=0,c=!1,m;const E=p=>{if(clearTimeout(m),m=void 0,!o.length)return;const y=o;o=[];for(let w=0;w<y.length;w+=64)Xt("info","COMPUTER_MOTION_TRACE",{version:2,id:a,sequence:++x,startedAt:performance.timeOrigin+n,reason:p,dropped:w?0:f,samples:y.slice(w,w+64)});f=0};return{record(p,y={}){if(c)return;const w=performance.now()-n;if(performance.now()>=t){E("expired"),c=!0;return}o.length>=8192&&(o.splice(2048,1),f++),o.push([Math.round(w*10)/10,p,y]),clearTimeout(m),m=setTimeout(()=>E("idle"),750)},flush:E,dispose(){c||(c=!0,E("dispose"))}}}const ge="inline-flex min-h-9 items-center justify-center gap-1.5 rounded-md border border-border px-2.5 text-xs hover:bg-surface-2 disabled:opacity-40",xe="min-h-11 w-full rounded-md border border-border bg-background px-2 text-sm outline-none focus:border-primary";function We(n){return/API_NOT_ALLOWED|AUTHORIZATION|revoked|PAIRING/.test(n)?"computer.permission":n.includes("RDP_BACKEND_UNAVAILABLE")?"computer.rdpBackendUnavailable":n.includes("RDP_CERTIFICATE")?"computer.rdpCertificate":n.includes("CREDENTIALS_MISSING")?"computer.loginExpired":n.includes("CREDENTIALS_FAILED")?"computer.loginSaveFailed":n.includes("AUTH_FAILED")?"computer.authFailed":n.includes("RDP_FAILED")?"computer.rdpFailed":n.includes("SCREEN_SHARING_OFF")?"computer.sharingOff":n.includes("PRIVATE_HOST_ONLY")?"computer.privateOnly":n.includes("INVALID_HOST")?"computer.invalidHost":n.includes("TIMEOUT")?"computer.timeout":n.includes("UNREACHABLE")?"computer.unreachable":n.includes("DISCONNECTED")?"computer.disconnected":"computer.failed"}const Pt=30*6e4;function Rr({active:n=!0}){const{t}=At(),a=i.useMemo(()=>_r(),[]);i.useEffect(()=>(a?.record("panel-open",{viewport:[window.innerWidth,window.innerHeight],dpr:window.devicePixelRatio}),a?.flush("panel-open"),()=>a?.dispose()),[a]);const[o,f]=i.useState(()=>He()?.targetPeerId??""),[x,c]=i.useState(null),{preferences:m,change:E,loaded:p,saveState:y,flush:w,retry:h,credentialKeys:b,loginState:z,credentialRequest:T}=ar(o),g=m.target==="local",N=m[m.target],{host:F,platform:j,protocol:L,port:H,domain:A,ignoreCert:d,username:k}=N,_=L==="rdp"&&x?.rdpAvailable===!1,{viewOnly:v,fit:P}=m,V=N.rememberLogin&&b.includes(_t(N)),D=e=>E(u=>({...u,[u.target]:{...u[u.target],...e}})),ce=e=>D({username:e}),J=e=>D({domain:e}),Ie=e=>{D({ignoreCert:e}),w()},Ae=e=>D({port:e}),Ue=e=>{e&&(fe.current(),Te.clear(),l(null)),E(u=>({...u,viewOnly:e})),w()},[Oe,je]=i.useState(!1),B=pr(j),_e=j==="mac"?"⌘V":"Ctrl+V",[pe,Z]=i.useState(""),[$,re]=i.useState("idle"),[ne,oe]=i.useState(null),[be,Me]=i.useState(""),[Q,ie]=i.useState(!1),[s,l]=i.useState(null),C=i.useRef(null),[K,O]=i.useState([]);i.useEffect(()=>{O([])},[s,v,o]);const[I,se]=i.useState(!1),[Y,ye]=i.useState(!1),Ne=i.useRef(0),[q,Dt]=i.useState(()=>navigator.maxTouchPoints>0||window.innerWidth<=640);i.useEffect(()=>{const e=()=>Dt(navigator.maxTouchPoints>0||window.innerWidth<=640);return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const $e=s==="keyboard"&&I&&(!q||!window.visualViewport||Y),[ze,lt]=i.useState(1),le=i.useRef(null),ut=i.useRef(null),[Se,dt]=i.useState(""),[It,we]=i.useState(!1),[Ze,pt]=i.useState(null),[Ot,ee]=i.useState(!1),[zt,Je]=i.useState(!1),[Ft,Kt]=i.useState(!1),[me,Ut]=i.useState(gr),mt=i.useRef(null),fe=i.useRef(()=>{}),Re=i.useRef(()=>{}),[W,$t]=i.useState(nt),Pe=i.useRef(!1),ve=i.useRef(""),ft=i.useRef(()=>{}),ht=i.useRef(null),Ve=i.useRef(null),ue=i.useMemo(()=>{const e=document.createElement("div");return e.className="h-full w-full min-h-0 overflow-hidden",e},[]),U=i.useRef(null),Qe=i.useRef(!1);Qe.current=n&&W&&$==="connected"&&!v;const Te=i.useMemo(()=>Nr(([e,u,S])=>U.current?.sendKey(e,u,S)),[]),et=i.useRef(null),he=i.useRef(0),tt=i.useRef(void 0),de=i.useCallback(()=>{fe.current(),Re.current(),le.current?.dispose(),le.current=null,Te.clear(),mt.current=null,he.current++,clearTimeout(tt.current);const e=U.current;U.current=null,e?.disconnect(),et.current?.close(),et.current=null,ue.replaceChildren()},[ue,Te]);i.useLayoutEffect(()=>(Ve.current?.appendChild(ue),()=>{ue.remove()}),[ue,Q]),i.useEffect(()=>()=>de(),[de]),i.useEffect(()=>{const e=()=>{const u=nt();$t(u),!u&&(ie(!1),l(null))};return window.addEventListener(Et,e),()=>window.removeEventListener(Et,e)},[]),i.useEffect(()=>{if(n&&W||(fe.current(),Re.current(),Te.clear(),ie(!1),l(null),$==="idle"||$==="error"))return;const e=setTimeout(()=>{Pe.current=!1,ve.current="",de(),re("idle"),Z("")},Pt);return()=>clearTimeout(e)},[n,W,$,de,Te]),i.useEffect(()=>{const e=()=>f(He()?.targetPeerId??"");return window.addEventListener(kt,e),()=>window.removeEventListener(kt,e)},[]),i.useEffect(()=>{de(),Pe.current=!1,ve.current="",re("idle"),oe(null),Z(""),c(null),ie(!1),l(null),je(!1),Me(""),dt(""),we(!1);const e=new AbortController;return fetch("/api/computer/status",{signal:e.signal}).then(async u=>{if(!u.ok)throw new Error(u.status===403?"API_NOT_ALLOWED":"COMPUTER_FAILED");return await u.json()}).then(u=>{e.signal.aborted||c(u)}).catch(u=>{e.signal.aborted||oe(We(String(u)))}),()=>{e.abort(),de()}},[o,de]),i.useEffect(()=>{const e=U.current;(v||!n||!W)&&Re.current(),e&&((!n||!W)&&!("pointerTarget"in e)&&mr(e),e.viewOnly=v||!n||!W)},[v,n,W,$]),i.useEffect(()=>{U.current&&(U.current.scaleViewport=P)},[P]),i.useEffect(()=>{U.current&&"pauseResize"in U.current&&(U.current.pauseResize=!!s||!n||!W)},[s,n,W,$]),i.useEffect(()=>{const e=U.current;e&&("keyboardActive"in e?e.keyboardActive=s==="keyboard":e.focusOnClick=s!=="keyboard")},[s]);const gt=e=>{e===g||G||!p||(Z(""),oe(null),E(u=>({...u,target:e?"local":"remote"})),w())},xt=()=>{Pe.current=!0,ve.current="",de(),re("idle"),Z(""),ie(!1),l(null),we(!1)},bt=async e=>{if(e?.preventDefault(),_)return;if(Pe.current=!0,$==="credentials"&&U.current&&"sendCredentials"in U.current){ve.current=pe,U.current.sendCredentials({username:k,password:pe}),re("connecting");return}if(!n||!nt()||!p||!pe&&!V)return;w(),pt(null),ee(!1),Je(!1),de(),oe(null),Me(""),re("connecting"),we(!1);const u=he.current,S=M=>{u===he.current&&(de(),re("error"),oe(M),l(null),ve.current="",(M==="computer.authFailed"||M==="computer.permission"||M==="computer.loginExpired")&&Z(""),V&&(M==="computer.authFailed"||M==="computer.loginExpired")&&T("forget",N).catch(()=>{}))};tt.current=setTimeout(()=>S("computer.timeout"),6e4);try{let M=pe||await T("use",N);if(u!==he.current)return;ve.current=M||"";let X;if(L==="rdp"){const{RdpSession:te}=await jt(async()=>{const{RdpSession:Le}=await import("./rdpSession-DZCrSxpu.js");return{RdpSession:Le}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]));if(u!==he.current)return;document.activeElement?.blur?.(),ot.flushSync(()=>{re("connecting")});const Ee=Ve.current?.getBoundingClientRect(),ke=Cr(Ee?.width||1280,Ee?.height||800);X=new te(ue,{host:F.trim(),port:Number(H),username:k.trim(),password:M||"",domain:A.trim(),ignoreCert:d,...ke},Le=>S(We(Le)),a)}else{const{default:te}=await jt(async()=>{const{default:Le}=await import("./rfb-CxsXsMUX.js");return{default:Le}},[]);if(u!==he.current)return;const Ee=new ur(F.trim(),Le=>S(We(Le)));et.current=Ee;const ke=new te(ue,Ee,{shared:!0,credentials:{username:k.trim()||void 0,password:M}});j==="mac"&&lr(ke,Ee),ke.background="var(--chrome-bg)",ke.resizeSession=!1,ke.qualityLevel=6,ke.compressionLevel=2,X=ke}M=void 0,U.current=X,X.scaleViewport=P,X.viewOnly=v,X.addEventListener("connect",()=>{if(u!==he.current)return;clearTimeout(tt.current),re("connected"),Z(""),window.innerWidth<=640&&document.activeElement?.blur?.();const te=ve.current;ve.current="",N.rememberLogin&&te&&T("save",N,te).catch(()=>{})}),X.addEventListener("credentialsrequired",te=>{if(u!==he.current)return;const Ee=te.detail.types;Kt(Ee.includes("username")),re("credentials")}),X.addEventListener("securityfailure",()=>S("computer.authFailed")),X.addEventListener("disconnect",()=>S("computer.disconnected")),X.addEventListener("desktopname",te=>{u===he.current&&Me(te.detail.name)})}catch(M){S(We(String(M)))}},Fe=e=>{const u=U.current;!n||!W||!u||$!=="connected"||v||(s==="keyboard"?C.current?.focus({preventScroll:!0}):s!=="clipboard"&&!q&&u.focus?.({preventScroll:!0}),Te.send([...e.map(([S,M])=>[S,M,!0]),...[...e].reverse().map(([S,M])=>[S,M,!1])]))},R=$==="connected",G=$==="connecting"||$==="credentials",Be=R||$==="connecting";i.useEffect(()=>{const e=U.current;if(!R||!e||!("viewportZoom"in e)&&!("_display"in e))return;const u=Tr(e,lt);return le.current=u,lt(1),()=>{u.dispose(),le.current===u&&(le.current=null)}},[R]),i.useEffect(()=>{const e=U.current,u=Ve.current;if(!n||!W||!R||s&&s!=="keyboard"||me!=="trackpad"&&!(navigator.maxTouchPoints>0)||!e||!u)return;const S="pointerTarget"in e?e.pointerTarget:fr(e),M=vr(u,S,mt,{mode:me,zoom:le.current??void 0,viewOnly:v,trace:a});return fe.current=M,()=>{M(),fe.current===M&&(fe.current=()=>{})}},[n,W,R,v,me,Q,s,a]),i.useEffect(()=>{const e=U.current;if(!(!n||!W||!R||v||!e))return Ar(ue,e,{paste:(u,S)=>{e.clipboardPasteFrom(u),Fe(S?[...B.paste.slice(0,1),[65505,"ShiftLeft"],...B.paste.slice(1)]:B.paste),we(!0),ee(!1)},receive:u=>{pt(u),Je(!1)},failed:()=>{ee(!0),l("clipboard")}})},[n,W,R,v,j,ue]),i.useEffect(()=>{const e=U.current;if(!n||!W||!R||v||!e||"pointerTarget"in e||!("_keyboard"in e))return;const u=Lr(e,rt);return Re.current=u,()=>{u(),Re.current===u&&(Re.current=()=>{})}},[n,W,R,v]);const yt=e=>{e!==me&&(fe.current(),Ut(e),xr(e))};ft.current=()=>{bt()},i.useEffect(()=>{n&&W&&p&&x&&!_&&m.autoConnect&&V&&$==="idle"&&!Pe.current&&ft.current()},[n,W,p,x,_,m.autoConnect,V,$]);const wt=()=>{Pe.current=!0,T("forget",N).catch(()=>{})},Ce=e=>{if(e==="keyboard"){if(s==="keyboard"&&!$e){C.current?.blur(),C.current?.focus({preventScroll:!0});return}fe.current(),Ne.current=window.visualViewport?.height??window.innerHeight,ot.flushSync(()=>{se(!1),ye(!1),l(u=>u===e?null:e)})}else fe.current(),l(u=>u===e?null:e)},ae=e=>{C.current?.dispatchEvent(new Event("termdock:computer-input-reset"));const u=[...K,...e].filter(([S],M,X)=>X.findIndex(([te])=>te===S)===M);u.some(([S])=>S===B.copy[0][0])&&u.some(([S])=>S===99||S===120)&&ue.dispatchEvent(new Event(Rt)),O([]),Fe(u)},Vt=()=>{le.current?.set(1),E(e=>({...e,fit:!0})),w()},rt=e=>{if(!U.current||!Qe.current)return;const u=[];for(const S of Lt(e))u.push([S,null,!0],[S,null,!1]);Te.send(u)},Bt=e=>{if(!(!U.current||!Qe.current))try{if(e.length>qe)throw new Error("Clipboard limit");U.current.clipboardPasteFrom(e),ae(B.paste),ee(!1),we(!0)}catch{ee(!0),l("clipboard")}},Ht=e=>{if(!K.length){rt(e);return}const[u,...S]=Array.from(e);u&&ae([[Array.from(Lt(u))[0],""]]),S.length&&rt(S.join(""))};i.useEffect(()=>{if(!R||s!=="keyboard"&&s!=="clipboard"||!window.visualViewport)return;const e=window.visualViewport,u=ut.current,S=()=>{if(s==="keyboard"&&ye(I&&Ne.current-e.height>100),u&&e.height>=160)if(Q)u.style.height=`${e.height}px`,u.style.top=`${e.offsetTop}px`;else{const M=e.offsetTop+e.height,X=Math.max(0,M-u.getBoundingClientRect().top);u.style.height=`${Math.min(u.parentElement?.clientHeight||X,X)}px`}};return S(),e.addEventListener("resize",S),e.addEventListener("scroll",S),()=>{e.removeEventListener("resize",S),e.removeEventListener("scroll",S),u&&(u.style.height="",u.style.top="")}},[R,s,Q,I]);const vt=r.jsxs("div",{className:"flex shrink-0 items-center text-xs",role:"group","aria-label":t("computer.desktopZoom"),title:q?t("computer.pinchHint"):void 0,children:[r.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center","aria-label":t("computer.zoomOut"),disabled:!R||ze<=1,onPointerDown:e=>e.preventDefault(),onClick:()=>le.current?.set(ze/1.25),children:r.jsx(sr,{size:16})}),r.jsxs("button",{type:"button",className:"min-h-11 min-w-11","aria-label":t("computer.resetZoom"),disabled:!R,onPointerDown:e=>e.preventDefault(),onClick:Vt,children:[Math.round(ze*100),"%"]}),r.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center","aria-label":t("computer.zoomIn"),disabled:!R||ze>=8,onPointerDown:e=>e.preventDefault(),onClick:()=>le.current?.set(ze*1.25),children:r.jsx(nr,{size:16})}),q&&r.jsx("span",{className:"hidden pr-2 text-[10px] text-muted-foreground sm:inline",children:t("computer.pinchHint")})]}),De=`flex shrink-0 items-center justify-center rounded-md hover:bg-surface-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary ${q?"min-h-11 min-w-11":"h-8 min-w-8"}`,Ct=r.jsxs("div",{ref:ut,className:`flex min-h-0 flex-col bg-surface text-foreground ${Q?"fixed inset-0 z-modal-panel h-dvh pb-[env(safe-area-inset-bottom)] pt-[env(safe-area-inset-top)]":"relative h-full"}`,role:Q?"dialog":void 0,"aria-modal":Q||void 0,"aria-label":t("computer.title"),onKeyDown:e=>{e.stopPropagation(),e.key==="Escape"&&!e.nativeEvent.isComposing&&s&&(e.preventDefault(),l(null))},onKeyUp:e=>e.stopPropagation(),children:[r.jsxs("div",{className:`relative z-30 flex shrink-0 items-center gap-2 border-b border-border bg-surface px-2 ${q?"min-h-12":"min-h-8"}`,children:[Q&&r.jsx("button",{type:"button",className:De,onClick:()=>{ie(!1),l(null)},"aria-label":t("computer.exitFullscreen"),children:r.jsx(Gt,{size:20})}),r.jsx(Wt,{size:16,className:"shrink-0 text-muted-foreground"}),r.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium",children:R&&(be||(g?x?.hostname||He()?.serviceName:F))||t("computer.title")}),R&&r.jsx("span",{className:"text-[11px] text-primary",children:t("computer.connected")}),R&&z==="error"&&r.jsx("span",{role:"alert",className:"text-[11px] text-destructive",children:t("computer.loginSaveFailed")}),R&&y==="saving"&&r.jsx("span",{role:"status","aria-label":t("computer.settingsSaving"),title:t("computer.settingsSaving"),children:r.jsx(Nt,{size:12,className:"animate-spin text-muted-foreground"})}),R&&y==="error"&&r.jsxs("button",{type:"button",className:ge,title:t("computer.settingsSaveFailed"),"aria-label":t("computer.settingsSaveFailed"),onClick:h,children:["! ",t("computer.retry")]}),G&&r.jsxs("button",{type:"button",className:`${De} gap-1 px-1 text-xs`,onClick:xt,children:[r.jsx(St,{size:14}),t("computer.cancel")]}),R&&!q&&s==="keyboard"&&r.jsx("button",{type:"button",className:De,onPointerDown:e=>e.preventDefault(),onClick:()=>Ce("keyboard"),"aria-label":t("computer.keyboard"),"aria-pressed":$e,children:r.jsx(Ye,{size:18})}),R&&!q&&r.jsx("button",{type:"button",className:`${De} ${s==="clipboard"?"bg-surface-2 text-primary":""}`,disabled:v,onClick:()=>Ce("clipboard"),"aria-label":t("computer.clipboardTool"),title:t("computer.clipboardTool"),"aria-pressed":s==="clipboard",children:r.jsx(st,{size:18})}),R&&!Q&&r.jsxs("button",{type:"button",className:`${De} gap-1 px-1 text-xs`,onClick:()=>ie(!0),"aria-label":t("computer.fullscreen"),children:[r.jsx(Zt,{size:16}),t("computer.expand")]}),R&&r.jsx("button",{type:"button",className:De,onClick:()=>Ce("tools"),"aria-label":t("computer.tools"),"aria-expanded":s==="tools",children:r.jsx(tr,{size:18})})]}),!Be&&r.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto p-4 sm:p-6",children:r.jsxs("div",{className:"mx-auto w-full max-w-md",children:[r.jsxs("form",{className:"space-y-3",onSubmit:e=>{bt(e)},children:[r.jsxs("div",{className:"grid grid-cols-2 gap-1 rounded-lg bg-background p-1",role:"group","aria-label":t("computer.target"),children:[r.jsx("button",{type:"button",className:`min-h-11 rounded-md px-3 text-sm font-medium ${g?"bg-surface-2 text-foreground":"text-muted-foreground hover:bg-surface"}`,"aria-pressed":g,disabled:G||!x||!p,onClick:()=>gt(!0),children:t("computer.thisComputer")}),r.jsx("button",{type:"button",className:`min-h-11 rounded-md px-3 text-sm font-medium ${g?"text-muted-foreground hover:bg-surface":"bg-surface-2 text-foreground"}`,"aria-pressed":!g,disabled:G||!p,onClick:()=>gt(!1),children:t("computer.otherComputer")})]}),g?r.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",role:"status",children:x?t("computer.localService",{name:He()?.serviceName||x.hostname}):t("computer.loading")}):r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t("computer.host")}),r.jsx("input",{className:xe,value:F,disabled:G||!p,onChange:e=>{D({host:e.target.value,domain:"",ignoreCert:!1}),Z(""),oe(null)},placeholder:t("computer.hostPlaceholder"),onBlur:()=>{w()},autoCapitalize:"none",autoCorrect:"off",spellCheck:!1,required:!0,maxLength:253})]}),r.jsxs("p",{className:"text-xs text-muted-foreground",children:[j==="mac"?"macOS":j==="linux"?"Ubuntu / Linux":"Windows"," · ",L.toUpperCase()," · ",L==="rdp"?H||"3389":"5900",v?` · ${t("computer.viewOnly")}`:""]}),r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t(L==="rdp"?"computer.rdpUsername":"computer.username")}),r.jsx("input",{className:xe,value:k,disabled:!p,onChange:e=>ce(e.target.value),onBlur:()=>{w()},autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",required:L==="rdp"||$==="credentials"&&Ft,maxLength:255})]}),r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t("computer.password")}),r.jsx("input",{className:xe,type:"password",value:pe,disabled:!p,onChange:e=>Z(e.target.value),placeholder:V&&$!=="credentials"?t("computer.savedPassword"):void 0,autoComplete:"new-password",required:!V||$==="credentials",maxLength:1024})]}),r.jsx("p",{className:"text-[11px] leading-relaxed text-muted-foreground",children:t(L==="rdp"?"computer.rdpLoginHint":"computer.vncLoginHint")}),r.jsxs("div",{className:"flex min-h-11 items-center justify-between gap-2 text-xs",children:[r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:N.rememberLogin,disabled:G||!p||z==="saving",onChange:e=>{const u=e.target.checked;D({rememberLogin:u}),!u&&V?T("forget",{...N,rememberLogin:u}).catch(()=>{}):w()}}),t("computer.rememberLogin")]}),V&&r.jsx("button",{type:"button",className:"min-h-11 text-muted-foreground underline",disabled:G||z==="saving",onClick:wt,children:t("computer.forgetLogin")})]}),z==="error"&&!ne&&r.jsx("p",{role:"alert",className:"text-xs text-destructive",children:t("computer.loginSaveFailed")}),_&&r.jsxs("div",{role:"status",className:"space-y-1 text-xs leading-relaxed text-muted-foreground",children:[r.jsx("p",{children:t("computer.rdpBackendUnavailable")}),r.jsx("p",{children:t("computer.rdpBackendRecovery")})]}),$==="credentials"&&r.jsx("p",{className:"text-xs text-primary",children:t("computer.credentials")}),ne&&r.jsxs("div",{role:"alert",className:"rounded-md bg-surface-2 p-3 text-xs leading-relaxed text-destructive",children:[t(ne),ne==="computer.rdpCertificate"&&r.jsxs("label",{className:"mt-1 flex min-h-11 items-center gap-2 text-foreground",children:[r.jsx("input",{type:"checkbox",checked:d,onChange:e=>Ie(e.target.checked)}),t("computer.trustCertificateHere")]}),$==="error"&&ne!=="computer.rdpCertificate"&&r.jsx("button",{type:"button",className:"mt-1 block min-h-9 text-foreground underline",onClick:()=>{je(!0),requestAnimationFrame(()=>ht.current?.scrollIntoView?.({block:"nearest",behavior:"smooth"}))},children:t("computer.checkSettings")})]}),r.jsx("button",{type:"submit",className:"inline-flex min-h-11 w-full items-center justify-center gap-2 rounded-md bg-primary px-3 text-sm font-medium text-primary-foreground disabled:opacity-40",disabled:!p||_||z==="saving"||g&&!x||!F.trim()||!pe&&(!V||$==="credentials")||L==="rdp"&&(!k.trim()||!Number.isInteger(Number(H))||Number(H)<1||Number(H)>65535),children:t($==="credentials"?"computer.authenticate":$==="error"?"computer.retryConnect":"computer.connect")}),r.jsxs("details",{ref:ht,className:"border-b border-border text-xs",open:Oe,onToggle:e=>je(e.currentTarget.open),children:[r.jsxs("summary",{className:"flex min-h-11 cursor-pointer list-none items-center justify-between text-muted-foreground",children:[r.jsx("span",{children:t("computer.advanced")}),r.jsx("span",{"aria-hidden":"true",children:Oe?"−":"+"})]}),r.jsxs("div",{className:"space-y-3 pb-4",children:[r.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.platform")}),r.jsxs("select",{className:xe,value:j,disabled:G||!p,onChange:e=>{dr(e.target.value)&&D({platform:e.target.value,protocol:e.target.value==="mac"?"vnc":"rdp",ignoreCert:!1}),Z(""),w()},children:[r.jsx("option",{value:"mac",children:"macOS"}),r.jsx("option",{value:"linux",children:"Ubuntu / Linux"}),r.jsx("option",{value:"windows",children:"Windows"})]})]}),r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.protocol")}),r.jsxs("select",{className:xe,value:L,disabled:G||!p,onChange:e=>{D({protocol:e.target.value==="rdp"?"rdp":"vnc"}),Z(""),oe(null),w()},children:[r.jsx("option",{value:"rdp",children:"RDP"}),r.jsx("option",{value:"vnc",children:"VNC"})]})]})]}),L==="rdp"&&r.jsxs(r.Fragment,{children:[r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.port")}),r.jsx("input",{className:xe,type:"number",min:1,max:65535,step:1,value:H,disabled:G||!p,onBlur:()=>{w()},onChange:e=>Ae(e.target.value)})]}),r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.domain")}),r.jsx("input",{className:xe,value:A,disabled:G||!p,onBlur:()=>{w()},onChange:e=>J(e.target.value),autoComplete:"off",maxLength:255})]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:d,disabled:G||!p,onChange:e=>Ie(e.target.checked)}),t("computer.trustCertificate")]})]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:v,disabled:G||!p,onChange:e=>Ue(e.target.checked)}),t("computer.viewOnly")]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:m.autoConnect,disabled:G||!p,onChange:e=>{E(u=>({...u,autoConnect:e.target.checked})),w()}}),t("computer.autoConnect")]})]})]})]}),r.jsxs("p",{role:"status",className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:[t(y==="saved"?"computer.settingsSaved":y==="error"?p?"computer.settingsSaveFailed":"computer.settingsLoadFailed":y==="loading"?"computer.settingsLoading":"computer.settingsSaving"),y==="error"&&r.jsx("button",{type:"button",className:"ml-2 min-h-9 text-primary underline",onClick:h,children:t("computer.retry")})]}),r.jsxs("details",{className:"text-xs",children:[r.jsx("summary",{className:"flex min-h-11 cursor-pointer items-center text-muted-foreground",children:t("computer.setup")}),r.jsxs("ol",{className:"ml-4 list-decimal space-y-2 pt-2 leading-relaxed text-muted-foreground",children:[r.jsx("li",{children:t(L==="rdp"?j==="linux"?"computer.rdpLinuxStep1":"computer.rdpStep1":j==="mac"?"computer.step1":j==="linux"?"computer.linuxStep1":"computer.windowsStep1")}),r.jsx("li",{children:t(L==="rdp"?"computer.rdpStep2":j==="mac"?"computer.step2":j==="linux"?"computer.linuxStep2":"computer.windowsStep2")}),r.jsx("li",{children:t("computer.step3")})]}),L==="vnc"&&j==="linux"&&r.jsxs(r.Fragment,{children:[r.jsx("p",{className:"mt-3 leading-relaxed text-muted-foreground",children:t("computer.linuxCommandHint")}),r.jsx("pre",{className:"mt-2 overflow-x-auto rounded-md bg-background p-2 text-[11px]",children:r.jsx("code",{children:`sudo apt install x11vnc
|
|
4
|
+
`?65293:t===" "?65289:a<256?a:16777216|a}}const qe=1048576,Rt="termdock:computer-copy";function Ar(n,t,a){const o=new AbortController;let f=!1,x=-1/0,c=!0;const m=new Set,E=h=>{if(!(h.ctrlKey||h.metaKey)||h.altKey||h.isComposing)return;const b=h.key.toLowerCase();b==="v"?(f=h.shiftKey,m.add(h.code||h.key),h.stopImmediatePropagation()):(b==="c"||b==="x")&&(x=performance.now())},p=h=>{h.preventDefault(),h.stopImmediatePropagation();const b=h.clipboardData;if(!b||!Array.from(b.types).includes("text/plain")){a.failed();return}const z=b.getData("text/plain");if(z.length>qe){a.failed();return}try{a.paste(z,f)}catch{a.failed()}f=!1},y=h=>{const b=h.detail?.text;if(typeof b!="string"||b.length>qe){a.failed();return}a.receive(b),performance.now()-x<2e3&&(x=-1/0,navigator.clipboard?.writeText?navigator.clipboard.writeText(b).catch(()=>{c&&a.failed()}):a.failed())},w={capture:!0,signal:o.signal};return n.addEventListener(Rt,()=>{x=performance.now()},w),n.addEventListener("keydown",E,w),n.addEventListener("keyup",h=>{m.delete(h.code||h.key)&&h.stopImmediatePropagation()},w),n.addEventListener("paste",p,w),t.addEventListener("clipboard",y,{signal:o.signal}),t.addEventListener("clipboarderror",a.failed,{signal:o.signal}),window.addEventListener("blur",()=>{m.clear(),f=!1,x=-1/0},{signal:o.signal}),()=>{c=!1,o.abort()}}function _r(){try{if(sessionStorage.getItem("termdock:computer-motion-trace")==="1")return Mr()}catch{}}function Mr(){const n=performance.now(),t=n+15*6e4,a=`motion-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;let o=[],f=0,x=0,c=!1,m;const E=p=>{if(clearTimeout(m),m=void 0,!o.length)return;const y=o;o=[];for(let w=0;w<y.length;w+=64)Xt("info","COMPUTER_MOTION_TRACE",{version:2,id:a,sequence:++x,startedAt:performance.timeOrigin+n,reason:p,dropped:w?0:f,samples:y.slice(w,w+64)});f=0};return{record(p,y={}){if(c)return;const w=performance.now()-n;if(performance.now()>=t){E("expired"),c=!0;return}o.length>=8192&&(o.splice(2048,1),f++),o.push([Math.round(w*10)/10,p,y]),clearTimeout(m),m=setTimeout(()=>E("idle"),750)},flush:E,dispose(){c||(c=!0,E("dispose"))}}}const ge="inline-flex min-h-9 items-center justify-center gap-1.5 rounded-md border border-border px-2.5 text-xs hover:bg-surface-2 disabled:opacity-40",xe="min-h-11 w-full rounded-md border border-border bg-background px-2 text-sm outline-none focus:border-primary";function We(n){return/API_NOT_ALLOWED|AUTHORIZATION|revoked|PAIRING/.test(n)?"computer.permission":n.includes("RDP_BACKEND_UNAVAILABLE")?"computer.rdpBackendUnavailable":n.includes("RDP_CERTIFICATE")?"computer.rdpCertificate":n.includes("CREDENTIALS_MISSING")?"computer.loginExpired":n.includes("CREDENTIALS_FAILED")?"computer.loginSaveFailed":n.includes("AUTH_FAILED")?"computer.authFailed":n.includes("RDP_FAILED")?"computer.rdpFailed":n.includes("SCREEN_SHARING_OFF")?"computer.sharingOff":n.includes("PRIVATE_HOST_ONLY")?"computer.privateOnly":n.includes("INVALID_HOST")?"computer.invalidHost":n.includes("TIMEOUT")?"computer.timeout":n.includes("UNREACHABLE")?"computer.unreachable":n.includes("DISCONNECTED")?"computer.disconnected":"computer.failed"}const Pt=30*6e4;function Rr({active:n=!0}){const{t}=At(),a=i.useMemo(()=>_r(),[]);i.useEffect(()=>(a?.record("panel-open",{viewport:[window.innerWidth,window.innerHeight],dpr:window.devicePixelRatio}),a?.flush("panel-open"),()=>a?.dispose()),[a]);const[o,f]=i.useState(()=>He()?.targetPeerId??""),[x,c]=i.useState(null),{preferences:m,change:E,loaded:p,saveState:y,flush:w,retry:h,credentialKeys:b,loginState:z,credentialRequest:T}=ar(o),g=m.target==="local",N=m[m.target],{host:F,platform:j,protocol:L,port:H,domain:A,ignoreCert:d,username:k}=N,_=L==="rdp"&&x?.rdpAvailable===!1,{viewOnly:v,fit:P}=m,V=N.rememberLogin&&b.includes(_t(N)),D=e=>E(u=>({...u,[u.target]:{...u[u.target],...e}})),ce=e=>D({username:e}),J=e=>D({domain:e}),Ie=e=>{D({ignoreCert:e}),w()},Ae=e=>D({port:e}),Ue=e=>{e&&(fe.current(),Te.clear(),l(null)),E(u=>({...u,viewOnly:e})),w()},[Oe,je]=i.useState(!1),B=pr(j),_e=j==="mac"?"⌘V":"Ctrl+V",[pe,Z]=i.useState(""),[$,re]=i.useState("idle"),[ne,oe]=i.useState(null),[be,Me]=i.useState(""),[Q,ie]=i.useState(!1),[s,l]=i.useState(null),C=i.useRef(null),[K,O]=i.useState([]);i.useEffect(()=>{O([])},[s,v,o]);const[I,se]=i.useState(!1),[Y,ye]=i.useState(!1),Ne=i.useRef(0),[q,Dt]=i.useState(()=>navigator.maxTouchPoints>0||window.innerWidth<=640);i.useEffect(()=>{const e=()=>Dt(navigator.maxTouchPoints>0||window.innerWidth<=640);return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const $e=s==="keyboard"&&I&&(!q||!window.visualViewport||Y),[ze,lt]=i.useState(1),le=i.useRef(null),ut=i.useRef(null),[Se,dt]=i.useState(""),[It,we]=i.useState(!1),[Ze,pt]=i.useState(null),[Ot,ee]=i.useState(!1),[zt,Je]=i.useState(!1),[Ft,Kt]=i.useState(!1),[me,Ut]=i.useState(gr),mt=i.useRef(null),fe=i.useRef(()=>{}),Re=i.useRef(()=>{}),[W,$t]=i.useState(nt),Pe=i.useRef(!1),ve=i.useRef(""),ft=i.useRef(()=>{}),ht=i.useRef(null),Ve=i.useRef(null),ue=i.useMemo(()=>{const e=document.createElement("div");return e.className="h-full w-full min-h-0 overflow-hidden",e},[]),U=i.useRef(null),Qe=i.useRef(!1);Qe.current=n&&W&&$==="connected"&&!v;const Te=i.useMemo(()=>Nr(([e,u,S])=>U.current?.sendKey(e,u,S)),[]),et=i.useRef(null),he=i.useRef(0),tt=i.useRef(void 0),de=i.useCallback(()=>{fe.current(),Re.current(),le.current?.dispose(),le.current=null,Te.clear(),mt.current=null,he.current++,clearTimeout(tt.current);const e=U.current;U.current=null,e?.disconnect(),et.current?.close(),et.current=null,ue.replaceChildren()},[ue,Te]);i.useLayoutEffect(()=>(Ve.current?.appendChild(ue),()=>{ue.remove()}),[ue,Q]),i.useEffect(()=>()=>de(),[de]),i.useEffect(()=>{const e=()=>{const u=nt();$t(u),!u&&(ie(!1),l(null))};return window.addEventListener(Et,e),()=>window.removeEventListener(Et,e)},[]),i.useEffect(()=>{if(n&&W||(fe.current(),Re.current(),Te.clear(),ie(!1),l(null),$==="idle"||$==="error"))return;const e=setTimeout(()=>{Pe.current=!1,ve.current="",de(),re("idle"),Z("")},Pt);return()=>clearTimeout(e)},[n,W,$,de,Te]),i.useEffect(()=>{const e=()=>f(He()?.targetPeerId??"");return window.addEventListener(kt,e),()=>window.removeEventListener(kt,e)},[]),i.useEffect(()=>{de(),Pe.current=!1,ve.current="",re("idle"),oe(null),Z(""),c(null),ie(!1),l(null),je(!1),Me(""),dt(""),we(!1);const e=new AbortController;return fetch("/api/computer/status",{signal:e.signal}).then(async u=>{if(!u.ok)throw new Error(u.status===403?"API_NOT_ALLOWED":"COMPUTER_FAILED");return await u.json()}).then(u=>{e.signal.aborted||c(u)}).catch(u=>{e.signal.aborted||oe(We(String(u)))}),()=>{e.abort(),de()}},[o,de]),i.useEffect(()=>{const e=U.current;(v||!n||!W)&&Re.current(),e&&((!n||!W)&&!("pointerTarget"in e)&&mr(e),e.viewOnly=v||!n||!W)},[v,n,W,$]),i.useEffect(()=>{U.current&&(U.current.scaleViewport=P)},[P]),i.useEffect(()=>{U.current&&"pauseResize"in U.current&&(U.current.pauseResize=!!s||!n||!W)},[s,n,W,$]),i.useEffect(()=>{const e=U.current;e&&("keyboardActive"in e?e.keyboardActive=s==="keyboard":e.focusOnClick=s!=="keyboard")},[s]);const gt=e=>{e===g||G||!p||(Z(""),oe(null),E(u=>({...u,target:e?"local":"remote"})),w())},xt=()=>{Pe.current=!0,ve.current="",de(),re("idle"),Z(""),ie(!1),l(null),we(!1)},bt=async e=>{if(e?.preventDefault(),_)return;if(Pe.current=!0,$==="credentials"&&U.current&&"sendCredentials"in U.current){ve.current=pe,U.current.sendCredentials({username:k,password:pe}),re("connecting");return}if(!n||!nt()||!p||!pe&&!V)return;w(),pt(null),ee(!1),Je(!1),de(),oe(null),Me(""),re("connecting"),we(!1);const u=he.current,S=M=>{u===he.current&&(de(),re("error"),oe(M),l(null),ve.current="",(M==="computer.authFailed"||M==="computer.permission"||M==="computer.loginExpired")&&Z(""),V&&(M==="computer.authFailed"||M==="computer.loginExpired")&&T("forget",N).catch(()=>{}))};tt.current=setTimeout(()=>S("computer.timeout"),6e4);try{let M=pe||await T("use",N);if(u!==he.current)return;ve.current=M||"";let X;if(L==="rdp"){const{RdpSession:te}=await jt(async()=>{const{RdpSession:Le}=await import("./rdpSession-tZqbe3lc.js");return{RdpSession:Le}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]));if(u!==he.current)return;document.activeElement?.blur?.(),ot.flushSync(()=>{re("connecting")});const Ee=Ve.current?.getBoundingClientRect(),ke=Cr(Ee?.width||1280,Ee?.height||800);X=new te(ue,{host:F.trim(),port:Number(H),username:k.trim(),password:M||"",domain:A.trim(),ignoreCert:d,...ke},Le=>S(We(Le)),a)}else{const{default:te}=await jt(async()=>{const{default:Le}=await import("./rfb-CxsXsMUX.js");return{default:Le}},[]);if(u!==he.current)return;const Ee=new ur(F.trim(),Le=>S(We(Le)));et.current=Ee;const ke=new te(ue,Ee,{shared:!0,credentials:{username:k.trim()||void 0,password:M}});j==="mac"&&lr(ke,Ee),ke.background="var(--chrome-bg)",ke.resizeSession=!1,ke.qualityLevel=6,ke.compressionLevel=2,X=ke}M=void 0,U.current=X,X.scaleViewport=P,X.viewOnly=v,X.addEventListener("connect",()=>{if(u!==he.current)return;clearTimeout(tt.current),re("connected"),Z(""),window.innerWidth<=640&&document.activeElement?.blur?.();const te=ve.current;ve.current="",N.rememberLogin&&te&&T("save",N,te).catch(()=>{})}),X.addEventListener("credentialsrequired",te=>{if(u!==he.current)return;const Ee=te.detail.types;Kt(Ee.includes("username")),re("credentials")}),X.addEventListener("securityfailure",()=>S("computer.authFailed")),X.addEventListener("disconnect",()=>S("computer.disconnected")),X.addEventListener("desktopname",te=>{u===he.current&&Me(te.detail.name)})}catch(M){S(We(String(M)))}},Fe=e=>{const u=U.current;!n||!W||!u||$!=="connected"||v||(s==="keyboard"?C.current?.focus({preventScroll:!0}):s!=="clipboard"&&!q&&u.focus?.({preventScroll:!0}),Te.send([...e.map(([S,M])=>[S,M,!0]),...[...e].reverse().map(([S,M])=>[S,M,!1])]))},R=$==="connected",G=$==="connecting"||$==="credentials",Be=R||$==="connecting";i.useEffect(()=>{const e=U.current;if(!R||!e||!("viewportZoom"in e)&&!("_display"in e))return;const u=Tr(e,lt);return le.current=u,lt(1),()=>{u.dispose(),le.current===u&&(le.current=null)}},[R]),i.useEffect(()=>{const e=U.current,u=Ve.current;if(!n||!W||!R||s&&s!=="keyboard"||me!=="trackpad"&&!(navigator.maxTouchPoints>0)||!e||!u)return;const S="pointerTarget"in e?e.pointerTarget:fr(e),M=vr(u,S,mt,{mode:me,zoom:le.current??void 0,viewOnly:v,trace:a});return fe.current=M,()=>{M(),fe.current===M&&(fe.current=()=>{})}},[n,W,R,v,me,Q,s,a]),i.useEffect(()=>{const e=U.current;if(!(!n||!W||!R||v||!e))return Ar(ue,e,{paste:(u,S)=>{e.clipboardPasteFrom(u),Fe(S?[...B.paste.slice(0,1),[65505,"ShiftLeft"],...B.paste.slice(1)]:B.paste),we(!0),ee(!1)},receive:u=>{pt(u),Je(!1)},failed:()=>{ee(!0),l("clipboard")}})},[n,W,R,v,j,ue]),i.useEffect(()=>{const e=U.current;if(!n||!W||!R||v||!e||"pointerTarget"in e||!("_keyboard"in e))return;const u=Lr(e,rt);return Re.current=u,()=>{u(),Re.current===u&&(Re.current=()=>{})}},[n,W,R,v]);const yt=e=>{e!==me&&(fe.current(),Ut(e),xr(e))};ft.current=()=>{bt()},i.useEffect(()=>{n&&W&&p&&x&&!_&&m.autoConnect&&V&&$==="idle"&&!Pe.current&&ft.current()},[n,W,p,x,_,m.autoConnect,V,$]);const wt=()=>{Pe.current=!0,T("forget",N).catch(()=>{})},Ce=e=>{if(e==="keyboard"){if(s==="keyboard"&&!$e){C.current?.blur(),C.current?.focus({preventScroll:!0});return}fe.current(),Ne.current=window.visualViewport?.height??window.innerHeight,ot.flushSync(()=>{se(!1),ye(!1),l(u=>u===e?null:e)})}else fe.current(),l(u=>u===e?null:e)},ae=e=>{C.current?.dispatchEvent(new Event("termdock:computer-input-reset"));const u=[...K,...e].filter(([S],M,X)=>X.findIndex(([te])=>te===S)===M);u.some(([S])=>S===B.copy[0][0])&&u.some(([S])=>S===99||S===120)&&ue.dispatchEvent(new Event(Rt)),O([]),Fe(u)},Vt=()=>{le.current?.set(1),E(e=>({...e,fit:!0})),w()},rt=e=>{if(!U.current||!Qe.current)return;const u=[];for(const S of Lt(e))u.push([S,null,!0],[S,null,!1]);Te.send(u)},Bt=e=>{if(!(!U.current||!Qe.current))try{if(e.length>qe)throw new Error("Clipboard limit");U.current.clipboardPasteFrom(e),ae(B.paste),ee(!1),we(!0)}catch{ee(!0),l("clipboard")}},Ht=e=>{if(!K.length){rt(e);return}const[u,...S]=Array.from(e);u&&ae([[Array.from(Lt(u))[0],""]]),S.length&&rt(S.join(""))};i.useEffect(()=>{if(!R||s!=="keyboard"&&s!=="clipboard"||!window.visualViewport)return;const e=window.visualViewport,u=ut.current,S=()=>{if(s==="keyboard"&&ye(I&&Ne.current-e.height>100),u&&e.height>=160)if(Q)u.style.height=`${e.height}px`,u.style.top=`${e.offsetTop}px`;else{const M=e.offsetTop+e.height,X=Math.max(0,M-u.getBoundingClientRect().top);u.style.height=`${Math.min(u.parentElement?.clientHeight||X,X)}px`}};return S(),e.addEventListener("resize",S),e.addEventListener("scroll",S),()=>{e.removeEventListener("resize",S),e.removeEventListener("scroll",S),u&&(u.style.height="",u.style.top="")}},[R,s,Q,I]);const vt=r.jsxs("div",{className:"flex shrink-0 items-center text-xs",role:"group","aria-label":t("computer.desktopZoom"),title:q?t("computer.pinchHint"):void 0,children:[r.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center","aria-label":t("computer.zoomOut"),disabled:!R||ze<=1,onPointerDown:e=>e.preventDefault(),onClick:()=>le.current?.set(ze/1.25),children:r.jsx(sr,{size:16})}),r.jsxs("button",{type:"button",className:"min-h-11 min-w-11","aria-label":t("computer.resetZoom"),disabled:!R,onPointerDown:e=>e.preventDefault(),onClick:Vt,children:[Math.round(ze*100),"%"]}),r.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center","aria-label":t("computer.zoomIn"),disabled:!R||ze>=8,onPointerDown:e=>e.preventDefault(),onClick:()=>le.current?.set(ze*1.25),children:r.jsx(nr,{size:16})}),q&&r.jsx("span",{className:"hidden pr-2 text-[10px] text-muted-foreground sm:inline",children:t("computer.pinchHint")})]}),De=`flex shrink-0 items-center justify-center rounded-md hover:bg-surface-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary ${q?"min-h-11 min-w-11":"h-8 min-w-8"}`,Ct=r.jsxs("div",{ref:ut,className:`flex min-h-0 flex-col bg-surface text-foreground ${Q?"fixed inset-0 z-modal-panel h-dvh pb-[env(safe-area-inset-bottom)] pt-[env(safe-area-inset-top)]":"relative h-full"}`,role:Q?"dialog":void 0,"aria-modal":Q||void 0,"aria-label":t("computer.title"),onKeyDown:e=>{e.stopPropagation(),e.key==="Escape"&&!e.nativeEvent.isComposing&&s&&(e.preventDefault(),l(null))},onKeyUp:e=>e.stopPropagation(),children:[r.jsxs("div",{className:`relative z-30 flex shrink-0 items-center gap-2 border-b border-border bg-surface px-2 ${q?"min-h-12":"min-h-8"}`,children:[Q&&r.jsx("button",{type:"button",className:De,onClick:()=>{ie(!1),l(null)},"aria-label":t("computer.exitFullscreen"),children:r.jsx(Gt,{size:20})}),r.jsx(Wt,{size:16,className:"shrink-0 text-muted-foreground"}),r.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium",children:R&&(be||(g?x?.hostname||He()?.serviceName:F))||t("computer.title")}),R&&r.jsx("span",{className:"text-[11px] text-primary",children:t("computer.connected")}),R&&z==="error"&&r.jsx("span",{role:"alert",className:"text-[11px] text-destructive",children:t("computer.loginSaveFailed")}),R&&y==="saving"&&r.jsx("span",{role:"status","aria-label":t("computer.settingsSaving"),title:t("computer.settingsSaving"),children:r.jsx(Nt,{size:12,className:"animate-spin text-muted-foreground"})}),R&&y==="error"&&r.jsxs("button",{type:"button",className:ge,title:t("computer.settingsSaveFailed"),"aria-label":t("computer.settingsSaveFailed"),onClick:h,children:["! ",t("computer.retry")]}),G&&r.jsxs("button",{type:"button",className:`${De} gap-1 px-1 text-xs`,onClick:xt,children:[r.jsx(St,{size:14}),t("computer.cancel")]}),R&&!q&&s==="keyboard"&&r.jsx("button",{type:"button",className:De,onPointerDown:e=>e.preventDefault(),onClick:()=>Ce("keyboard"),"aria-label":t("computer.keyboard"),"aria-pressed":$e,children:r.jsx(Ye,{size:18})}),R&&!q&&r.jsx("button",{type:"button",className:`${De} ${s==="clipboard"?"bg-surface-2 text-primary":""}`,disabled:v,onClick:()=>Ce("clipboard"),"aria-label":t("computer.clipboardTool"),title:t("computer.clipboardTool"),"aria-pressed":s==="clipboard",children:r.jsx(st,{size:18})}),R&&!Q&&r.jsxs("button",{type:"button",className:`${De} gap-1 px-1 text-xs`,onClick:()=>ie(!0),"aria-label":t("computer.fullscreen"),children:[r.jsx(Zt,{size:16}),t("computer.expand")]}),R&&r.jsx("button",{type:"button",className:De,onClick:()=>Ce("tools"),"aria-label":t("computer.tools"),"aria-expanded":s==="tools",children:r.jsx(tr,{size:18})})]}),!Be&&r.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto p-4 sm:p-6",children:r.jsxs("div",{className:"mx-auto w-full max-w-md",children:[r.jsxs("form",{className:"space-y-3",onSubmit:e=>{bt(e)},children:[r.jsxs("div",{className:"grid grid-cols-2 gap-1 rounded-lg bg-background p-1",role:"group","aria-label":t("computer.target"),children:[r.jsx("button",{type:"button",className:`min-h-11 rounded-md px-3 text-sm font-medium ${g?"bg-surface-2 text-foreground":"text-muted-foreground hover:bg-surface"}`,"aria-pressed":g,disabled:G||!x||!p,onClick:()=>gt(!0),children:t("computer.thisComputer")}),r.jsx("button",{type:"button",className:`min-h-11 rounded-md px-3 text-sm font-medium ${g?"text-muted-foreground hover:bg-surface":"bg-surface-2 text-foreground"}`,"aria-pressed":!g,disabled:G||!p,onClick:()=>gt(!1),children:t("computer.otherComputer")})]}),g?r.jsx("p",{className:"text-xs leading-relaxed text-muted-foreground",role:"status",children:x?t("computer.localService",{name:He()?.serviceName||x.hostname}):t("computer.loading")}):r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t("computer.host")}),r.jsx("input",{className:xe,value:F,disabled:G||!p,onChange:e=>{D({host:e.target.value,domain:"",ignoreCert:!1}),Z(""),oe(null)},placeholder:t("computer.hostPlaceholder"),onBlur:()=>{w()},autoCapitalize:"none",autoCorrect:"off",spellCheck:!1,required:!0,maxLength:253})]}),r.jsxs("p",{className:"text-xs text-muted-foreground",children:[j==="mac"?"macOS":j==="linux"?"Ubuntu / Linux":"Windows"," · ",L.toUpperCase()," · ",L==="rdp"?H||"3389":"5900",v?` · ${t("computer.viewOnly")}`:""]}),r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t(L==="rdp"?"computer.rdpUsername":"computer.username")}),r.jsx("input",{className:xe,value:k,disabled:!p,onChange:e=>ce(e.target.value),onBlur:()=>{w()},autoCapitalize:"none",autoCorrect:"off",autoComplete:"off",required:L==="rdp"||$==="credentials"&&Ft,maxLength:255})]}),r.jsxs("label",{className:"block space-y-1 text-xs",children:[r.jsx("span",{children:t("computer.password")}),r.jsx("input",{className:xe,type:"password",value:pe,disabled:!p,onChange:e=>Z(e.target.value),placeholder:V&&$!=="credentials"?t("computer.savedPassword"):void 0,autoComplete:"new-password",required:!V||$==="credentials",maxLength:1024})]}),r.jsx("p",{className:"text-[11px] leading-relaxed text-muted-foreground",children:t(L==="rdp"?"computer.rdpLoginHint":"computer.vncLoginHint")}),r.jsxs("div",{className:"flex min-h-11 items-center justify-between gap-2 text-xs",children:[r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:N.rememberLogin,disabled:G||!p||z==="saving",onChange:e=>{const u=e.target.checked;D({rememberLogin:u}),!u&&V?T("forget",{...N,rememberLogin:u}).catch(()=>{}):w()}}),t("computer.rememberLogin")]}),V&&r.jsx("button",{type:"button",className:"min-h-11 text-muted-foreground underline",disabled:G||z==="saving",onClick:wt,children:t("computer.forgetLogin")})]}),z==="error"&&!ne&&r.jsx("p",{role:"alert",className:"text-xs text-destructive",children:t("computer.loginSaveFailed")}),_&&r.jsxs("div",{role:"status",className:"space-y-1 text-xs leading-relaxed text-muted-foreground",children:[r.jsx("p",{children:t("computer.rdpBackendUnavailable")}),r.jsx("p",{children:t("computer.rdpBackendRecovery")})]}),$==="credentials"&&r.jsx("p",{className:"text-xs text-primary",children:t("computer.credentials")}),ne&&r.jsxs("div",{role:"alert",className:"rounded-md bg-surface-2 p-3 text-xs leading-relaxed text-destructive",children:[t(ne),ne==="computer.rdpCertificate"&&r.jsxs("label",{className:"mt-1 flex min-h-11 items-center gap-2 text-foreground",children:[r.jsx("input",{type:"checkbox",checked:d,onChange:e=>Ie(e.target.checked)}),t("computer.trustCertificateHere")]}),$==="error"&&ne!=="computer.rdpCertificate"&&r.jsx("button",{type:"button",className:"mt-1 block min-h-9 text-foreground underline",onClick:()=>{je(!0),requestAnimationFrame(()=>ht.current?.scrollIntoView?.({block:"nearest",behavior:"smooth"}))},children:t("computer.checkSettings")})]}),r.jsx("button",{type:"submit",className:"inline-flex min-h-11 w-full items-center justify-center gap-2 rounded-md bg-primary px-3 text-sm font-medium text-primary-foreground disabled:opacity-40",disabled:!p||_||z==="saving"||g&&!x||!F.trim()||!pe&&(!V||$==="credentials")||L==="rdp"&&(!k.trim()||!Number.isInteger(Number(H))||Number(H)<1||Number(H)>65535),children:t($==="credentials"?"computer.authenticate":$==="error"?"computer.retryConnect":"computer.connect")}),r.jsxs("details",{ref:ht,className:"border-b border-border text-xs",open:Oe,onToggle:e=>je(e.currentTarget.open),children:[r.jsxs("summary",{className:"flex min-h-11 cursor-pointer list-none items-center justify-between text-muted-foreground",children:[r.jsx("span",{children:t("computer.advanced")}),r.jsx("span",{"aria-hidden":"true",children:Oe?"−":"+"})]}),r.jsxs("div",{className:"space-y-3 pb-4",children:[r.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.platform")}),r.jsxs("select",{className:xe,value:j,disabled:G||!p,onChange:e=>{dr(e.target.value)&&D({platform:e.target.value,protocol:e.target.value==="mac"?"vnc":"rdp",ignoreCert:!1}),Z(""),w()},children:[r.jsx("option",{value:"mac",children:"macOS"}),r.jsx("option",{value:"linux",children:"Ubuntu / Linux"}),r.jsx("option",{value:"windows",children:"Windows"})]})]}),r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.protocol")}),r.jsxs("select",{className:xe,value:L,disabled:G||!p,onChange:e=>{D({protocol:e.target.value==="rdp"?"rdp":"vnc"}),Z(""),oe(null),w()},children:[r.jsx("option",{value:"rdp",children:"RDP"}),r.jsx("option",{value:"vnc",children:"VNC"})]})]})]}),L==="rdp"&&r.jsxs(r.Fragment,{children:[r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.port")}),r.jsx("input",{className:xe,type:"number",min:1,max:65535,step:1,value:H,disabled:G||!p,onBlur:()=>{w()},onChange:e=>Ae(e.target.value)})]}),r.jsxs("label",{className:"block space-y-1",children:[r.jsx("span",{children:t("computer.domain")}),r.jsx("input",{className:xe,value:A,disabled:G||!p,onBlur:()=>{w()},onChange:e=>J(e.target.value),autoComplete:"off",maxLength:255})]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:d,disabled:G||!p,onChange:e=>Ie(e.target.checked)}),t("computer.trustCertificate")]})]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:v,disabled:G||!p,onChange:e=>Ue(e.target.checked)}),t("computer.viewOnly")]}),r.jsxs("label",{className:"flex min-h-11 items-center gap-2",children:[r.jsx("input",{type:"checkbox",checked:m.autoConnect,disabled:G||!p,onChange:e=>{E(u=>({...u,autoConnect:e.target.checked})),w()}}),t("computer.autoConnect")]})]})]})]}),r.jsxs("p",{role:"status",className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:[t(y==="saved"?"computer.settingsSaved":y==="error"?p?"computer.settingsSaveFailed":"computer.settingsLoadFailed":y==="loading"?"computer.settingsLoading":"computer.settingsSaving"),y==="error"&&r.jsx("button",{type:"button",className:"ml-2 min-h-9 text-primary underline",onClick:h,children:t("computer.retry")})]}),r.jsxs("details",{className:"text-xs",children:[r.jsx("summary",{className:"flex min-h-11 cursor-pointer items-center text-muted-foreground",children:t("computer.setup")}),r.jsxs("ol",{className:"ml-4 list-decimal space-y-2 pt-2 leading-relaxed text-muted-foreground",children:[r.jsx("li",{children:t(L==="rdp"?j==="linux"?"computer.rdpLinuxStep1":"computer.rdpStep1":j==="mac"?"computer.step1":j==="linux"?"computer.linuxStep1":"computer.windowsStep1")}),r.jsx("li",{children:t(L==="rdp"?"computer.rdpStep2":j==="mac"?"computer.step2":j==="linux"?"computer.linuxStep2":"computer.windowsStep2")}),r.jsx("li",{children:t("computer.step3")})]}),L==="vnc"&&j==="linux"&&r.jsxs(r.Fragment,{children:[r.jsx("p",{className:"mt-3 leading-relaxed text-muted-foreground",children:t("computer.linuxCommandHint")}),r.jsx("pre",{className:"mt-2 overflow-x-auto rounded-md bg-background p-2 text-[11px]",children:r.jsx("code",{children:`sudo apt install x11vnc
|
|
5
5
|
x11vnc -storepasswd
|
|
6
6
|
x11vnc -display "$DISPLAY" -auth guess -localhost -usepw -forever -shared -rfbport 5900`})}),r.jsx("p",{className:"mt-2 leading-relaxed text-muted-foreground",children:t("computer.linuxProtocolHint")})]}),r.jsx("p",{className:"mt-3 leading-relaxed text-muted-foreground",children:t(L==="rdp"?"computer.rdpNetworkHint":"computer.networkHint")})]})]})}),R&&s==="tools"&&r.jsx("button",{type:"button",className:`absolute inset-x-0 ${q?"bottom-14 top-12":"bottom-0 top-8"} z-20 bg-background/40`,"aria-label":t("computer.returnToDesktop"),onClick:()=>l(null)}),R&&r.jsxs("div",{hidden:s!=="tools",className:`${s==="tools"?"flex":"hidden"} absolute inset-x-3 ${q?"top-14":"top-10"} z-30 max-h-[calc(100%-7rem)] flex-wrap items-center gap-3 overflow-y-auto rounded-lg border border-border bg-surface px-4 py-3 text-xs shadow-lg [&_button]:min-h-11 [&_select]:min-h-11 [&_label]:min-h-11`,role:"region","aria-label":t("computer.tools"),children:[r.jsxs("div",{className:"flex w-full items-center justify-between",children:[r.jsx("span",{className:"font-medium",children:t("computer.tools")}),r.jsx("button",{type:"button",className:"flex min-w-11 items-center justify-center","aria-label":t("computer.closeTools"),onClick:()=>l(null),children:r.jsx(qt,{size:18})})]}),q&&r.jsx("div",{className:"flex w-full items-center gap-2",children:r.jsx("div",{className:"inline-flex rounded-md bg-background p-0.5",role:"group","aria-label":t("computer.touchMode"),children:["trackpad","direct"].map(e=>r.jsx("button",{type:"button",className:`min-h-9 rounded px-3 text-xs ${me===e?"bg-surface-2 text-foreground":"text-muted-foreground hover:bg-surface"}`,"aria-pressed":me===e,onClick:()=>yt(e),children:t(e==="trackpad"?"computer.trackpadMode":"computer.directTouchMode")},e))})}),!q&&r.jsxs(r.Fragment,{children:[vt,r.jsxs("button",{type:"button",className:ge,disabled:v,onClick:()=>Ce("keyboard"),children:[r.jsx(Ye,{size:14}),t("computer.keyboard")]})]}),r.jsxs("label",{className:"flex min-h-9 items-center gap-1.5",children:[r.jsx("input",{type:"checkbox",checked:v,onChange:e=>Ue(e.target.checked)}),t("computer.viewOnly")]}),r.jsx("button",{type:"button",className:ge,onClick:()=>{le.current?.set(1),E(e=>({...e,fit:!e.fit})),w()},children:t(P?"computer.actualSize":"computer.fit")}),r.jsxs("select",{className:`${ge} min-w-0 bg-surface`,"aria-label":t("computer.shortcuts"),value:"",disabled:v,onChange:e=>{Fe(B[e.target.value]??[])},children:[r.jsx("option",{value:"",disabled:!0,children:t("computer.shortcuts")}),r.jsxs("option",{value:"tab",children:[j==="mac"?"⌘ Tab":"Alt+Tab"," · ",t("computer.switchApps")]}),r.jsxs("option",{value:"search",children:[j==="mac"?"⌘ Space":"Super / Win"," · ",t(j==="mac"?"computer.spotlight":"computer.systemSearch")]}),r.jsx("option",{value:"copy",children:j==="mac"?"⌘C":"Ctrl+C"}),r.jsx("option",{value:"paste",children:_e}),r.jsx("option",{value:"escape",children:"Esc"}),r.jsx("option",{value:"enter",children:"Enter"}),r.jsx("option",{value:"backspace",children:"⌫"}),r.jsx("option",{value:"up",children:"↑"}),r.jsx("option",{value:"down",children:"↓"}),r.jsx("option",{value:"left",children:"←"}),r.jsx("option",{value:"right",children:"→"})]}),r.jsxs("div",{className:"flex w-full items-center justify-between border-t border-border pt-2",children:[V&&r.jsx("button",{type:"button",className:ge,disabled:z==="saving",onClick:wt,children:t("computer.forgetLogin")}),r.jsxs("button",{type:"button",className:`${ge} ml-auto text-destructive`,onClick:xt,children:[r.jsx(St,{size:14}),t("computer.disconnect")]})]})]}),r.jsx("div",{ref:Ve,"data-sidebar-gesture-ignore":"",className:`relative z-10 min-h-0 flex-1 overflow-hidden bg-[var(--chrome-bg)] ${Be?"":"hidden"}`,onPointerDownCapture:()=>C.current?.dispatchEvent(new Event("termdock:computer-input-reset")),onMouseDownCapture:e=>{s==="keyboard"&&e.preventDefault()},style:{touchAction:R?"none":void 0},"aria-label":t("computer.remoteTitle"),children:!R&&Be&&r.jsxs("div",{role:"status",className:"absolute inset-0 z-20 flex items-center justify-center gap-2 bg-surface text-xs text-muted-foreground",children:[r.jsx(Nt,{size:16,className:"animate-spin"}),t("computer.connecting")]})}),r.jsx("div",{hidden:s!=="tools",children:R&&q&&!v&&r.jsx("p",{className:"shrink-0 border-t border-border px-2 py-1 text-[10px] leading-relaxed text-muted-foreground",children:t(me==="trackpad"?"computer.trackpadHint":"computer.directTouchHint")})}),R&&s==="keyboard"&&!v&&r.jsxs(r.Fragment,{children:[r.jsx(jr,{sendChord:ae,pasteText:Bt,commandKey:B.copy[0],inputRef:C,onFocusChange:se,sendText:Ht,sendKey:e=>(K.length?ae:Fe)(e==="tab"?[[65289,"Tab"]]:e==="delete"?[[65535,"Delete"]]:B[e])}),!q&&r.jsx("div",{className:"grid shrink-0 grid-cols-6 gap-1 bg-surface px-1",role:"group","aria-label":t("computer.keyboardNavigation"),children:["escape","left","down","up","right","selectAll"].map(e=>r.jsx("button",{type:"button",className:"min-h-11 rounded-md text-sm hover:bg-surface-2","aria-label":t(`computer.key${e[0].toUpperCase()}${e.slice(1)}`),onPointerDown:u=>u.preventDefault(),onClick:()=>ae(e==="selectAll"?[...B.copy.slice(0,1),[97,"KeyA"]]:B[e]),children:{escape:"Esc",left:"←",down:"↓",up:"↑",right:"→",selectAll:j==="mac"?"⌘A":"Ctrl+A"}[e]},e))})]}),R&&s==="clipboard"&&!v&&r.jsxs("form",{className:"shrink-0 space-y-2 border-t border-border p-3",onSubmit:e=>{if(e.preventDefault(),!(!Se||!U.current))try{U.current.clipboardPasteFrom(Se),we(!0),ee(!1)}catch{ee(!0)}},children:[r.jsx("textarea",{className:`${xe} min-w-0 resize-none py-2 text-base`,rows:2,"aria-label":t("computer.clipboard"),placeholder:t("computer.clipboardPlaceholder"),value:Se,onChange:e=>{dt(e.target.value),we(!1)},maxLength:qe}),r.jsxs("div",{className:"flex gap-2",children:[r.jsx("button",{type:"submit",className:`${ge} min-h-11 flex-1`,disabled:!Se,children:t("computer.clipboard")}),r.jsx("button",{type:"button",className:`${ge} min-h-11`,onClick:()=>{try{Se&&U.current?.clipboardPasteFrom(Se),Fe(B.paste),ee(!1),we(!!Se)}catch{ee(!0)}},children:_e})]}),r.jsx("p",{role:"status",className:"text-[10px] leading-relaxed text-muted-foreground",children:It?t("computer.clipboardSent"):t("computer.clipboardHint",{shortcut:_e})}),Ze!==null&&r.jsxs("div",{className:"space-y-1",children:[r.jsx("textarea",{className:`${xe} resize-none py-2 text-base`,rows:2,readOnly:!0,value:Ze,"aria-label":t("computer.remoteClipboard"),onFocus:e=>e.currentTarget.select()}),r.jsx("button",{type:"button",className:ge,onClick:()=>{if(!navigator.clipboard?.writeText){ee(!0);return}navigator.clipboard.writeText(Ze).then(()=>{Je(!0),ee(!1)},()=>ee(!0))},children:t(zt?"computer.clipboardCopied":"computer.copyToDevice")})]}),Ot&&r.jsx("p",{role:"alert",className:"text-xs text-destructive",children:t("computer.clipboardAccessFailed")}),ne&&r.jsx("p",{role:"alert",className:"text-xs text-destructive",children:t(ne)})]}),Be&&q&&r.jsx("div",{className:"relative z-30 flex shrink-0 items-center gap-1 border-t border-border bg-surface px-1 py-1 text-[11px]",children:s==="keyboard"?r.jsxs(r.Fragment,{children:[r.jsx("button",{type:"button",className:"flex min-h-11 min-w-11 items-center justify-center rounded-md bg-surface-2 text-primary",onPointerDown:e=>e.preventDefault(),onClick:()=>Ce("keyboard"),"aria-label":t("computer.keyboard"),title:t("computer.hideKeyboard"),"aria-pressed":$e,children:r.jsx(Ye,{size:18})}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md",onClick:()=>Ce("clipboard"),"aria-label":t("computer.clipboardTool"),children:r.jsx(st,{size:18,className:"mx-auto"})}),r.jsxs("div",{className:"flex min-w-0 flex-1 items-center overflow-x-auto",role:"group","aria-label":t("computer.keyboardNavigation"),children:[r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm",onPointerDown:e=>e.preventDefault(),onClick:()=>ae([[65289,"Tab"]]),children:"Tab"}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm","aria-label":t("computer.keyEscape"),onPointerDown:e=>e.preventDefault(),onClick:()=>ae(B.escape),children:"Esc"}),[[65507,"ControlLeft","Ctrl"],[65513,"AltLeft","Alt"],[65505,"ShiftLeft","Shift"]].map(([e,u,S])=>r.jsx("button",{type:"button",className:`min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm ${K.some(([M])=>M===e)?"bg-surface-2 text-primary":""}`,"aria-pressed":K.some(([M])=>M===e),onPointerDown:M=>M.preventDefault(),onClick:()=>O(M=>M.some(([X])=>X===e)?M.filter(([X])=>X!==e):[...M,[e,u]]),children:S},u)),["selectAll","left","down","up","right"].map(e=>r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2 text-sm hover:bg-surface-2","aria-label":t(`computer.key${e[0].toUpperCase()}${e.slice(1)}`),onPointerDown:u=>u.preventDefault(),onClick:()=>ae(e==="selectAll"?[...B.copy.slice(0,1),[97,"KeyA"]]:B[e]),children:{left:"←",down:"↓",up:"↑",right:"→",selectAll:j==="mac"?"⌘A":"Ctrl+A"}[e]},e)),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md px-2",onPointerDown:e=>e.preventDefault(),onClick:()=>ae(B.copy),children:j==="mac"?"⌘C":"Ctrl+C"})]}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md text-lg",onPointerDown:e=>e.preventDefault(),onClick:()=>ae(B.backspace),children:"⌫"}),r.jsx("button",{type:"button",className:"min-h-11 min-w-11 shrink-0 rounded-md text-lg",onPointerDown:e=>e.preventDefault(),onClick:()=>ae(B.enter),children:"↵"})]}):r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"grid min-w-0 flex-1 grid-cols-3",children:[r.jsxs("button",{type:"button",className:"flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md",disabled:!R||v,onClick:()=>Ce("keyboard"),"aria-pressed":$e,children:[r.jsx(Ye,{size:18}),t("computer.keyboard")]}),r.jsxs("button",{type:"button",className:`flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md ${s==="clipboard"?"bg-surface-2 text-primary":""}`,disabled:!R||v,onClick:()=>Ce("clipboard"),"aria-pressed":s==="clipboard",children:[r.jsx(st,{size:18}),t("computer.clipboardTool")]}),r.jsxs("button",{type:"button",className:"flex min-h-11 flex-col items-center justify-center gap-0.5 rounded-md",disabled:!R||v,onClick:()=>yt(me==="trackpad"?"direct":"trackpad"),"aria-label":t("computer.switchTouchMode"),children:[r.jsx(Qt,{size:18}),t(me==="trackpad"?"computer.trackpadMode":"computer.directTouchMode")]})]}),vt]})})]});return Q?ot.createPortal(Ct,document.body):Ct}const Fr=Object.freeze(Object.defineProperty({__proto__:null,COMPUTER_BACKGROUND_RETENTION_MS:Pt,default:Rr},Symbol.toStringTag,{value:"Module"}));export{qe as C,Fr as a,Lt as b,Cr as c};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{bA as t}from"./app-
|
|
1
|
+
import{bA as t}from"./app-D2M53LZx.js";import{C as s}from"./ChangeWalkthroughPanel-DG4TnQvn.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-C7X98Amf.js";import"./sparkles-iFcvD4yM.js";import"./triangle-alert-BeIpvW9N.js";const e="/tmp/termdock-dag-playground",i={version:1,id:"dag-playground",repoRoot:e,workspaceRoot:e,title:"改动解释升级为可点击导览",summary:"这是一页免登录 playground,用真实 ChangeWalkthroughPanel 调 DAG 的节点、边、label 和密度。",generatedBy:"dag-playground",injectedAt:Date.now(),highlights:[{what:"先看总览,再看链路",effect:"读者不用先进入 diff,也能理解整批改动目的。",tag:"理解"},{what:"多条链路直接画出来",effect:"分支、汇合、验证路径不再靠 next 文本猜。",tag:"链路"},{what:"点击节点跳回证据",effect:"导览和真实 diff 之间形成闭环。",tag:"导航"}],nodes:[{id:"export",title:"导出 section 级 diff",kind:"source",business:"CLI 把 hunk 拆成多个连续改动 section,并为每个 section 生成稳定 fingerprint。这里故意写长一点,用来验证 DAG 节点是否会按照真实文本高度撑开,而不是被固定高度裁掉。",anchor:{repoRoot:e,filePath:"src/server/cli.ts",hunkIndex:0,sectionIndex:0}},{id:"prompt",title:"约束 AI 输出",kind:"process",business:"提示词要求先写总览,再逐 section 生成解释。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/RightSidebar.tsx",hunkIndex:0}},{id:"schema",title:"校验导览结构",kind:"process",business:"检查节点、边和锚点字段是否完整。",anchor:{repoRoot:e,filePath:"src/server/utils/changeAuditStore.ts",hunkIndex:0}},{id:"fallback",title:"补齐兼容字段",kind:"process",business:"旧版结果缺字段时生成稳定回退值。",anchor:{repoRoot:e,filePath:"src/server/utils/changeAuditStore.ts",hunkIndex:1}},{id:"store",title:"保存整批导览结构",kind:"process",business:"服务端把 walkthrough 作为一等数据持久化。",anchor:{repoRoot:e,filePath:"src/server/utils/changeAuditStore.ts",hunkIndex:0}},{id:"api",title:"前端读取总览",kind:"api",business:"一次请求拿到 records 和 walkthroughs。",anchor:{repoRoot:e,filePath:"src/lib/terminal/api.ts",hunkIndex:0}},{id:"panel",title:"渲染 DAG 导览",kind:"ui",business:"用节点和边表达实现链路,节点可点击。节点内容可能是一两句话,也可能包含较长的业务解释;布局需要先测量 DOM 高度,再重新计算每一行节点的 y 坐标和连线端点。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/ChangeWalkthroughPanel.tsx",hunkIndex:0}},{id:"jump",title:"跳回真实 diff",kind:"ui",business:"点击节点后定位到文件、hunk 或 section。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/RightSidebar.tsx",hunkIndex:1}},{id:"section",title:"贴近改动展示解释",kind:"ui",business:"section 解释跟在对应 diff 块后面,而不是堆在 hunk 顶部。这个节点也故意写得更长,用来观察右侧分支和下方验证节点的连线是否会避让变高后的卡片。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/DiffViewer.tsx",hunkIndex:0,sectionIndex:1}},{id:"verify",title:"验证导出和注入",kind:"test",business:"跑 lint、install、health、资源检查和注入自测。"}],edges:[{from:"export",to:"prompt",label:"提供输入",desc:"sectionFingerprint 让 AI 可以稳定引用。"},{from:"export",to:"schema",label:"结构校验",desc:"先确认输入可以稳定落库。"},{from:"export",to:"fallback",label:"兼容旧数据",desc:"为历史记录补齐必要字段。"},{from:"prompt",to:"store",label:"注入",desc:"AI payload 写回本地服务。"},{from:"schema",to:"store",label:"通过后保存",desc:"合法结构进入存储层。"},{from:"fallback",to:"store",label:"归一化后保存",desc:"兼容数据与新数据走同一链路。"},{from:"store",to:"api",label:"读取",desc:"浏览器从服务端拿到导览。"},{from:"api",to:"panel",label:"渲染",desc:"结构化数据变成导览图。"},{from:"panel",to:"jump",label:"点击",desc:"节点驱动 diff 定位。"},{from:"jump",to:"section",label:"定位",desc:"落到对应 section 解释。"},{from:"export",to:"verify",label:"验证",desc:"导出结构要覆盖 tracked/untracked。"},{from:"section",to:"verify",label:"回归",desc:"确认展示位置和交互。"}],sections:[],risks:[{title:"边和 label 不能遮住节点主体。"},{title:"窄侧栏下横向滚动要可控。"}],checks:["在 360px、560px、900px 宽度下截图检查。","确认边的箭头、label 背板和节点层级清楚。","确认节点点击区域和 hover 状态可感知。"]};function p(){return t.jsx("div",{className:"min-h-screen bg-background p-5 text-foreground","data-dag-playground":!0,children:t.jsxs("div",{className:"mx-auto max-w-[72rem]",children:[t.jsxs("div",{className:"mb-3",children:[t.jsx("h1",{className:"text-sm font-semibold",children:"DAG Playground"}),t.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Auth-free playground for tuning the real ChangeWalkthroughPanel."})]}),t.jsxs("div",{className:"grid gap-4 lg:grid-cols-[360px_minmax(0,1fr)]",children:[t.jsx("div",{className:"min-w-0",children:t.jsx(s,{walkthroughs:[i],repoRoot:e,onNavigate:o=>{console.info("[DagPlayground] navigate",o)}})}),t.jsx("div",{className:"min-w-0",children:t.jsx(s,{walkthroughs:[i],repoRoot:e,onNavigate:o=>{console.info("[DagPlayground] navigate",o)}})})]})]})})}export{p as DagPlayground};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{bA as e}from"./app-
|
|
1
|
+
import{bA as e}from"./app-D2M53LZx.js";import{b as a}from"./dnd-BCFAPC0L.js";import{c as M,S as _,D as T}from"./DiffViewer-BxcK2w41.js";import"./react-XDCjal2T.js";import"./terminal-C7X98Amf.js";import"./referenceLongPress-l-iC26Y4.js";const w=`diff --git a/CommentGap.kt b/CommentGap.kt
|
|
2
2
|
--- a/CommentGap.kt
|
|
3
3
|
+++ b/CommentGap.kt
|
|
4
4
|
@@ -1,4 +1,4 @@
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ah as Ye,bA as r,e as dt,d as ft,df as ht,du as mt,ax as pt,a as xt,dt as gt,bV as vt,X as bt}from"./app-BZBIr89q.js";import{b as o,r as Je}from"./dnd-BCFAPC0L.js";import{h as Ze,F as yt,b as wt,c as Ke}from"./gestureArbiter-D_fs_PXp.js";import{S as et}from"./sparkles-DQ-Y24Kv.js";import{D as kt,i as Rt}from"./DiffViewer-BSbMa2mq.js";const jt=[["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"M3 10a2 2 0 0 0 2 2h3",key:"1npucw"}],["path",{d:"M3 5v12a2 2 0 0 0 2 2h3",key:"x1gjn2"}]],Nt=Ye("list-tree",jt);const Mt=[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]],Tt=Ye("list",Mt);function tt({selected:t,depth:n=0,title:c,leading:m,children:h,trailing:i,role:y,tabIndex:x,ariaExpanded:g,onClick:f,onKeyDown:b,onPointerDown:z,onPointerUp:T,onPointerCancel:F,dataAttributes:B}){return r.jsxs("div",{role:y,tabIndex:x,"aria-expanded":g,title:c,onClick:f,onKeyDown:b,onPointerDown:z,onPointerUp:T,onPointerCancel:F,...B,className:`group flex w-full cursor-pointer items-center gap-1 rounded px-2 py-1.5 text-left text-[13px] transition active:scale-[0.99] ${t?"bg-surface-elevated text-foreground":"text-muted-foreground hover:bg-surface-2 hover:text-foreground"}`,style:{paddingLeft:`${n*14+8}px`},children:[r.jsx("span",{className:"flex min-w-[14px] shrink-0 items-center justify-center text-muted-foreground/80",children:m}),r.jsx("span",{className:"min-w-0 flex-1",children:h}),i]})}function rt(t){return t.path.replace(/^\/+/,"")}function Dt(t){if(t.displayName!==void 0||t.displayDir!==void 0)return{name:t.displayName||t.path,dir:t.displayDir||""};const n=t.path.split("/").filter(Boolean);return{name:n.pop()||t.path,dir:n.join("/")}}function nt(t,n){const c=new Map,m=(i,y,x,g)=>{const f=i.get(y);if(f)return f;const b={path:x,name:y,childCount:0,directories:[],files:[]};return i.set(y,b),g?.directories.push(b),b};for(const i of t){const y=n(i).split("/").filter(Boolean);if(y.length<=1)continue;let x=c,g=null,f="";for(const b of y.slice(0,-1)){f=f?`${f}/${b}`:b;const z=m(x,b,f,g);g=z,x=new Map(z.directories.map(T=>[T.name,T]))}g?.files.push(i)}const h=i=>{const y=i.directories.map(h).sort((g,f)=>g.name.localeCompare(f.name)),x=i.files.sort((g,f)=>g.path.localeCompare(f.path));return{...i,directories:y,files:x,childCount:y.reduce((g,f)=>g+f.childCount,0)+x.length}};return Array.from(c.values()).map(h).sort((i,y)=>i.name.localeCompare(y.name))}function Pe(t,n,c=0){const m=n.selectedKey===t.key||n.selectedKey===t.path||n.selectedKey===t.absolutePath,h=Dt(t);return r.jsx(tt,{selected:m,role:"button",tabIndex:0,title:t.title??t.absolutePath??t.path,onClick:()=>{Ze()||n.onSelectFile(t)},onKeyDown:i=>{i.key!=="Enter"&&i.key!==" "||(i.preventDefault(),n.onSelectFile(t))},leading:n.renderLeading(t),depth:c,trailing:n.renderTrailing?.(t),dataAttributes:{"data-diff-selection-path":t.key,"data-diff-file-path":t.path,"data-diff-absolute-path":t.absolutePath??"","data-diff-status":t.status},children:r.jsxs("span",{className:"select-text","data-sidebar-selectable":!0,children:[r.jsx("span",{className:`block truncate leading-snug ${m?"font-medium":""}`,children:h.name}),n.mode!=="tree"&&h.dir&&r.jsx("span",{className:"block truncate text-[10px] text-muted-foreground/75",children:h.dir}),n.renderSubtitle?.(t)]})},t.key)}function st(t,n,c,m,h){let i=t;const y=[t.name];for(;i.files.length===0&&i.directories.length===1;)i=i.directories[0],y.push(i.name);const x=y.join("/"),g=`${n}:${i.path}`,f=c.collapsedDirectoryKeys.has(g);return r.jsxs("div",{className:"space-y-px",children:[r.jsx(tt,{role:"button",tabIndex:0,onClick:()=>{Ze()||c.onToggleDirectory(g)},onKeyDown:b=>{b.key!=="Enter"&&b.key!==" "||(b.preventDefault(),c.onToggleDirectory(g))},ariaExpanded:!f,depth:m,title:i.path,leading:f?r.jsx(dt,{size:13}):r.jsx(ft,{size:13}),trailing:r.jsxs("span",{className:"flex shrink-0 items-center gap-1",children:[r.jsx("span",{className:"shrink-0 rounded bg-surface-2 px-1.5 py-0.5 text-[10px] text-muted-foreground/60 transition group-hover:text-muted-foreground",children:i.childCount}),c.renderDirectoryTrailing?.(i.path,h)]}),children:r.jsxs("span",{className:"flex min-w-0 items-center gap-1",children:[r.jsx(yt,{size:14,className:"shrink-0 text-[color:var(--folder)]"}),r.jsx("span",{className:"min-w-0 flex-1 truncate leading-snug select-text","data-sidebar-selectable":!0,children:x})]})}),!f&&r.jsxs("div",{className:"space-y-px",children:[i.directories.map(b=>st(b,n,c,m+1,h)),i.files.length>0&&r.jsx("div",{className:"space-y-px",children:i.files.map(b=>Pe(b,c,m+1))})]})]},g)}function St(t,n){const c=n.getFileTreePath??rt,m=t.files.filter(i=>c(i).split("/").filter(Boolean).length<=1),h=nt(t.files,c);return r.jsxs("div",{className:"space-y-px",children:[h.map(i=>st(i,t.key,n,0,t)),m.length>0&&r.jsx("div",{className:"space-y-px",children:m.map(i=>Pe(i,n))})]})}function It(t,n=rt){const c=[],m=i=>{for(const y of i.directories)m(y);c.push(...i.files)};for(const i of nt(t,n))m(i);const h=new Set(c.map(i=>i.key));return c.push(...t.filter(i=>!h.has(i.key))),c}function Et(t){return r.jsx("div",{className:t.mode==="tree"?"space-y-px pt-1":"space-y-2",children:t.groups.map(n=>{const c=!!n.header,m=!!n.collapsed;return r.jsxs("section",{className:c?"overflow-hidden rounded-lg border border-border/15 bg-surface/60":"",children:[n.header,!m&&r.jsx("div",{className:t.mode==="tree"?c?"space-y-px bg-surface/60 p-1":"space-y-px":c?"space-y-px bg-surface/60 p-1.5":"space-y-px",children:t.mode==="tree"?St(n,t):n.files.map(h=>Pe(h,t))})]},n.key)})})}const Ce="termdock:diff-review:list-width:v1",Ct=120,He=320,qe=220,Ft=560;function _t(t){return typeof t=="number"&&Number.isFinite(t)}function Ue(t,n){const c=Math.max(qe,n-360),m=Math.min(Ft,c);return Math.min(m,Math.max(qe,t))}function At(){return vt(Ce,_t)??He}function zt({list:t,detail:n,mobile:c,mobileListHeader:m,mobileDetailHeader:h,desktopListHeader:i,backLabel:y,onMobileSlideChange:x,externalSwiperRef:g,desktopLayout:f="split",onDetailScroll:b,desktopSidePanel:z,desktopListClassName:T,detailOwnsScroll:F=!1}){const{t:B}=ht(),P=o.useRef(null),q=o.useRef(null),I=o.useRef(null),[U,$]=o.useState(At);o.useEffect(()=>{if(c||f!=="split")return;const p=q.current;p&&$(j=>Ue(j,p.clientWidth))},[f,c]);const ae=o.useCallback(p=>{c||f!=="split"||(p.preventDefault(),I.current={startX:p.clientX,startWidth:U,pointerId:p.pointerId},p.currentTarget.setPointerCapture(p.pointerId))},[f,U,c]),ue=o.useCallback(p=>{const j=I.current;if(!j||j.pointerId!==p.pointerId)return;const D=q.current?.clientWidth??window.innerWidth,_=Ue(j.startWidth+p.clientX-j.startX,D);$(_),mt(Ce,_,Ct)},[]),ie=o.useCallback(p=>{const j=I.current;if(!(!j||j.pointerId!==p.pointerId)){I.current=null,pt(Ce);try{p.currentTarget.releasePointerCapture(p.pointerId)}catch{}}},[]);if(c){const p=()=>{const v=P.current;v&&v.slideTo(1)},j=()=>{const v=P.current;v&&v.slideTo(0)},D=typeof t=="function"?t({slideToDetail:p}):t,_=typeof h=="function"?h({slideToList:j,slideToDetail:p}):h;return r.jsxs(wt,{className:"h-full min-h-0 w-full",slidesPerView:1,resistanceRatio:.45,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:".swiper-no-swiping",allowTouchMove:!1,touchAngle:75,touchStartPreventDefault:!1,onSwiper:v=>{P.current=v,g&&(g.current=v)},onSlideChange:v=>{x?.(v.activeIndex)},children:[r.jsx(Ke,{className:"h-full min-h-0",children:r.jsxs("div",{className:"flex h-full min-h-0 flex-col overflow-hidden",children:[m&&r.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 py-2",children:m}),r.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain",children:D})]})}),r.jsx(Ke,{className:"h-full min-h-0",children:r.jsxs("div",{className:"flex h-full min-h-0 flex-col overflow-hidden bg-surface",children:[r.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 py-2",children:_??r.jsxs("button",{type:"button",onClick:j,className:"inline-flex h-9 shrink-0 items-center gap-1.5 rounded-full bg-surface-2 px-3 text-xs font-semibold text-muted-foreground transition hover:bg-surface-elevated hover:text-foreground active:scale-95",children:[r.jsx(xt,{size:14}),y]})}),r.jsx("div",{className:F?"min-h-0 flex-1 overflow-hidden":"termdock-diff-stream-scroller min-h-0 flex-1 overflow-y-auto overscroll-contain",onScroll:F?void 0:v=>b?.(v.currentTarget),children:n})]})})]})}const W=typeof t=="function"?t({slideToDetail:()=>{}}):t;return f==="stacked"?F?r.jsxs("div",{className:"termdock-native-select min-h-0 flex-1 overflow-hidden px-2 pb-[calc(env(safe-area-inset-bottom)+4.5rem)]",children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W,r.jsx("div",{className:"mt-3 h-[calc(100%-3rem)] min-h-0 overflow-hidden rounded-xl border border-border/15 bg-surface",children:n})]}):r.jsxs("div",{className:"termdock-native-select termdock-diff-stream-scroller min-h-0 flex-1 overflow-y-auto overscroll-contain px-2 pb-[calc(env(safe-area-inset-bottom)+4.5rem)]",onScroll:p=>b?.(p.currentTarget),children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W,r.jsx("div",{className:"mt-3 overflow-hidden rounded-xl border border-border/15 bg-surface",children:n})]}):r.jsxs("div",{ref:q,className:"flex h-full min-h-0 overflow-hidden",children:[z,r.jsxs("div",{className:T??"shrink-0 overflow-y-auto overscroll-contain border-r border-border/15 bg-surface",style:{width:U},children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W]}),r.jsx("div",{role:"separator","aria-orientation":"vertical","aria-label":B("diffViewer.resizeNavigation"),title:B("diffViewer.resizeNavigation"),className:"group relative z-10 w-2 shrink-0 cursor-col-resize touch-none border-r border-border/15 bg-surface",onPointerDown:ae,onPointerMove:ue,onPointerUp:ie,onPointerCancel:ie,onDoubleClick:()=>{$(He),gt(Ce,He)},children:r.jsx("span",{className:"pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-border/30 transition group-hover:bg-primary/60"})}),r.jsx("div",{className:F?"min-w-0 flex-1 overflow-hidden":"termdock-diff-stream-scroller min-w-0 flex-1 overflow-y-auto overscroll-contain",onScroll:F?void 0:p=>b?.(p.currentTarget),children:n})]})}function Lt({mode:t,onModeChange:n,showAi:c=!1}){return r.jsxs("div",{className:"inline-flex h-7 shrink-0 overflow-hidden rounded-md bg-surface-2 p-0.5",children:[r.jsx("button",{type:"button",onClick:()=>n("list"),"aria-pressed":t==="list",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="list"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(Tt,{size:13})}),r.jsx("button",{type:"button",onClick:()=>n("tree"),"aria-pressed":t==="tree",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="tree"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(Nt,{size:13})}),c&&r.jsx("button",{type:"button",onClick:()=>n("ai"),"aria-pressed":t==="ai",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="ai"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(et,{size:13})})]})}function Ht({groups:t,mode:n,onModeChange:c,selectedKey:m,collapsedDirectoryKeys:h,onToggleDirectory:i,onSelectFile:y,renderLeading:x,renderTrailing:g,renderDirectoryTrailing:f,renderSubtitle:b,detail:z,mobile:T,backLabel:F,compact:B=!1,emptyContent:P,listPrefix:q,aiContent:I,listContainerClassName:U="px-2 py-2",detailContainerClassName:$="termdock-native-select termdock-diff-stream-scroller min-h-0",renderListHeader:ae,renderMobileDetailHeader:ue,externalSwiperRef:ie,onMobileSlideChange:W,slideToDetailOnMobile:p=!0,desktopLayout:j="split",onDetailScroll:D,desktopSidePanel:_,desktopListClassName:v,detailOwnsScroll:ee}){const[V,O]=o.useState(!1);o.useEffect(()=>{if(!V)return;const A=L=>{L.key==="Escape"&&O(!1)};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[V]);const de=r.jsx(Lt,{mode:n,onModeChange:c,showAi:!!I}),pe=n==="tree"?"tree":"list",xe=ae?ae(de):r.jsx("div",{className:"flex justify-end",children:de}),ge=t.some(A=>A.files.length>0),te=r.jsx(zt,{mobile:V?!1:T,backLabel:F,externalSwiperRef:ie,onMobileSlideChange:W,desktopLayout:V?"split":j,onDetailScroll:D,desktopSidePanel:_,desktopListClassName:v,detailOwnsScroll:ee,mobileListHeader:T?xe:void 0,desktopListHeader:T?void 0:xe,mobileDetailHeader:ue,list:({slideToDetail:A})=>r.jsx("div",{className:U,children:n==="ai"?typeof I=="function"?I({slideToDetail:A,fullscreen:V,toggleFullscreen:()=>O(L=>!L)}):I??P:r.jsxs(r.Fragment,{children:[q,ge?r.jsx(Et,{groups:t,selectedKey:m,mode:pe,mobile:T,compact:B,collapsedDirectoryKeys:h,onToggleDirectory:i,onSelectFile:L=>{y(L),T&&p&&window.requestAnimationFrame(A)},renderLeading:x,renderTrailing:g,renderDirectoryTrailing:f,renderSubtitle:b}):P]})}),detail:r.jsx("div",{className:ee?"h-full min-h-0":$,children:z})});return!V||typeof document>"u"?te:Je.createPortal(r.jsxs("div",{className:"fixed inset-0 z-modal-panel flex min-h-0 flex-col bg-surface text-foreground",children:[r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b border-border/15 bg-[var(--chrome-bg)] px-3",children:[r.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[r.jsx(et,{size:15,className:"shrink-0 text-primary"}),r.jsx("span",{className:"truncate text-[12px] font-semibold",children:"DAG Review"}),r.jsx("span",{className:"hidden text-[10px] text-muted-foreground sm:inline",children:"Select a step to inspect its exact change"})]}),r.jsx("button",{type:"button",onClick:()=>O(!1),className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition hover:bg-surface-2 hover:text-foreground active:scale-95",title:"Exit full-screen DAG review (Esc)","aria-label":"Exit full-screen DAG review",children:r.jsx(bt,{size:16})})]}),r.jsx("div",{className:"min-h-0 flex-1",children:te})]}),document.body)}const Pt=96,ze=44;function Wt({file:t,repoRoot:n,selectionPath:c,displayName:m,displayDir:h,selected:i,activePane:y,visible:x,reusableContent:g=!1,estimatedHeight:f,lightweight:b=!1,wrap:z,viewType:T,inlineMode:F,diffOptions:B,reloadKey:P=0,auditRecords:q,diffOverride:I,oldSourceRef:U,preparedDiff:$,renderBadge:ae,onInsertDiffReference:ue,onHunkGitAction:ie,previewReverts:W,onReferenceCopied:p,insertedReferenceKey:j,copiedReferenceKey:D,onClearAuditRecord:_,onContentReady:v,onHeightChange:ee}){const V=o.useRef(null),O=o.useRef(null),de=o.useRef(null),[pe,xe]=o.useState(null),ge=o.useRef(64),te=o.useRef(f??104),A=o.useRef(null),L=o.useRef(null),Q=o.useRef(!1),le=o.useRef(!1),E=o.useRef(null),[re,je]=o.useState(!1),[Ne,Se]=o.useState(!1),ve=t.absolutePath||(n?`${n}/${t.path}`:t.path),N=o.useCallback(()=>{le.current||(le.current=!0,Se(!0),v?.(c))},[v,c]);o.useLayoutEffect(()=>{if(!(I!==void 0&&x&&le.current))return Q.current=!1,le.current=!1,A.current=null,L.current=null,E.current!==null&&(window.clearTimeout(E.current),E.current=null),je(!1),Se(!1),()=>{E.current!==null&&(window.clearTimeout(E.current),E.current=null)}},[I,$,P,g,x]),o.useLayoutEffect(()=>{const X=A.current;!re||X===null||Math.abs((f??104)-X)>=1||(A.current=null,N())},[N,f,re]),o.useLayoutEffect(()=>{if(!x||!re)return;const X=de.current;if(!X)return;const be=()=>{if(!Q.current)return;const Y=X.firstElementChild;if(!Y)return;const K=Math.ceil(Math.max(Y.getBoundingClientRect().height,Y.scrollHeight,64)),he=ge.current;if(K>0&&he!==K&&(ge.current=K,xe(K)),!V.current)return;const C=O.current?.getBoundingClientRect().height??ze,se=Math.ceil(C+K+1);se<=0||L.current===se||(L.current=se,E.current!==null&&window.clearTimeout(E.current),E.current=window.setTimeout(()=>{if(E.current=null,!Q.current)return;const H=L.current;if(H===null)return;const S=te.current;if(le.current){te.current=H,Math.abs(S-H)>=1&&ee?.(c,S,H),v?.(c);return}if(A.current=H,Math.abs(S-H)<1||!ee){te.current=H,A.current=null,N();return}te.current=H,ee(c,S,H)},Pt))};if(be(),typeof ResizeObserver>"u")return;const fe=new ResizeObserver(be);return fe.observe(X),X.firstElementChild&&fe.observe(X.firstElementChild),O.current&&fe.observe(O.current),()=>fe.disconnect()},[N,v,ee,c,re,x,z,T,F]);const G=x&&!Ne;return r.jsxs("div",{ref:V,"data-diff-stream-item":c,"data-diff-selection-path":c,"data-diff-file-path":t.path,"data-diff-absolute-path":ve,className:`scroll-mt-3 border-b border-border/15 last:border-b-0 ${G||!x?"overflow-hidden":""} ${i?"bg-surface-elevated/35":""}`,style:x?G?{height:f??104}:void 0:{height:f??104},children:[r.jsxs("div",{ref:O,"data-diff-stream-header":!0,className:`sticky top-0 z-10 flex min-w-0 items-center gap-2 border-b border-border/15 px-3 py-2 ${i?"bg-surface-elevated":"bg-surface"}`,children:[ae(t.status),r.jsxs("div",{className:"min-w-0 flex-1",title:ve,children:[r.jsx("div",{className:"truncate text-xs font-semibold text-foreground",children:m}),h&&r.jsx("div",{className:"truncate text-[10px] text-muted-foreground",children:h})]})]}),r.jsxs("div",{ref:de,className:"relative","data-diff-stream-body":!0,style:x?{minHeight:Ne?64:Math.max(pe??64,(f??104)-ze)}:{height:Math.max(pe??64,(f??104)-ze)},children:[x?r.jsx(kt,{active:y,repoRoot:n,filePath:t.path,referenceFilePath:ve,changedFile:t,wrap:z,viewType:T,inlineMode:F,diffOptions:B,reloadKey:P,embedded:!0,lightweight:b,auditRecords:q,diffOverride:I,oldSourceRef:U,preparedDiff:$,onClearAuditRecord:_,onContentReady:()=>{if(g){Q.current=!0,je(!0),N();return}Q.current||(Q.current=!0,je(!0))},onInsertDiffReference:ue,onHunkGitAction:ie,previewReverts:W,onReferenceCopied:p,insertedReferenceKey:j,copiedReferenceKey:D}):r.jsx("div",{className:"flex h-full min-h-16 items-center justify-center bg-surface px-3 py-4 text-center text-xs text-muted-foreground",children:t.path}),x&&re&&!Ne&&r.jsx("div",{"data-diff-measuring-overlay":!0,className:"absolute inset-0 z-20 bg-surface"})]})]})}const Oe=8,Le=1600,Qe=104,Bt=1e3,Re=new Map;function $t(t,n){for(Re.delete(t),Re.set(t,n);Re.size>Bt;){const c=Re.keys().next().value;if(c===void 0)break;Re.delete(c)}}function Vt(t,n){return!!(t&&t.diffOverride===n.diffOverride&&t.oldSourceRef===n.oldSourceRef&&t.reloadKey===n.reloadKey&&t.wrap===n.wrap&&t.viewType===n.viewType&&t.inlineMode===n.inlineMode&&t.algorithm===n.algorithm&&t.whitespace===n.whitespace&&t.context===n.context)}const Gt={added:{label:"A",className:"text-[color:var(--diff-insert-strong)]",title:"Added"},modified:{label:"M",className:"text-[color:var(--diff-hunk-accent)]",title:"Modified"},deleted:{label:"D",className:"text-[color:var(--diff-delete-strong)]",title:"Deleted"},renamed:{label:"R",className:"text-muted-foreground",title:"Renamed"},copied:{label:"C",className:"text-[color:var(--diff-insert-strong)]",title:"Copied"},untracked:{label:"U",className:"text-[color:var(--diff-insert-strong)]",title:"Untracked (new file)"},conflicted:{label:"!",className:"text-destructive",title:"Conflicted"},unknown:{label:"?",className:"text-muted-foreground",title:"Unknown"}};function Zt({status:t}){const n=Gt[t]??{label:"?",className:"text-muted-foreground",title:t};return r.jsx("span",{className:`w-4 shrink-0 text-center text-[10px] font-mono font-bold ${n.className}`,title:n.title,children:n.label})}function er(t,n){return n?{key:n,nonce:t.nonce+1}:t}function tr({files:t,groups:n,selectedKey:c,onSelectFile:m,mode:h,onModeChange:i,collapsedDirectoryKeys:y,onToggleDirectory:x,renderLeading:g,renderTrailing:f,renderDirectoryTrailing:b,renderSubtitle:z,renderStreamBadge:T,onInsertDiffReference:F,onHunkGitAction:B,onReferenceCopied:P,insertedReferenceKey:q,copiedReferenceKey:I,onClearAuditRecord:U,mobile:$,backLabel:ae,compact:ue,desktopLayout:ie,wrap:W,diffViewType:p,inlineMode:j,diffOptions:D,activePane:_,reloadKey:v=0,renderListHeader:ee,renderMobileDetailHeader:V,emptyContent:O,listPrefix:de,aiContent:pe,listContainerClassName:xe,detailContainerClassName:ge,desktopSidePanel:te,desktopListClassName:A,onDetailScroll:L,initialDetailScrollTop:Q,preserveScrollOnUpdate:le=!1,scrollToKey:E,scrollToKeyNonce:re=0,externalSwiperRef:je,onMobileSlideChange:Ne,slideToDetailOnMobile:Se}){const ve=o.useMemo(()=>e=>c===e.key||c===e.path||c===e.absolutePath,[c]),N=o.useMemo(()=>{const e=new Map;for(const a of t)e.set(a.key,a),a.path&&e.set(a.path,a),a.absolutePath&&e.set(a.absolutePath,a);const s=[],l=new Set;for(const a of n){const d=h==="tree"?It(a.files):a.files;for(const w of d){const u=e.get(w.key);!u||l.has(u.key)||(s.push(u),l.add(u.key))}}for(const a of t)l.has(a.key)||s.push(a);return s},[t,n,h]),G=o.useRef(null),X=o.useRef(null),be=o.useRef(null),fe=o.useRef(v),Y=o.useRef(0),K=o.useRef(null),he=o.useRef(new Map(Re)),ne=o.useRef({key:null,top:0}),C=o.useRef(new Set),se=o.useRef(new Map),H=o.useRef(new Map),S=o.useRef(null),We=o.useRef(()=>{}),Me=o.useRef([]),me=o.useRef(new Map),Be=o.useRef({tops:[],heights:[],bottom:0}),[Ie,ot]=o.useState(()=>new Set),[ct,at]=o.useState(0),[J,ye]=o.useState({top:0,height:0}),Te=o.useMemo(()=>N.map(e=>e.key),[N]),Ee=Te.join("");H.current=o.useMemo(()=>new Map(N.map(e=>[e.key,{diffOverride:e.diffOverride,oldSourceRef:e.oldSourceRef,reloadKey:v,wrap:W,viewType:p,inlineMode:j,algorithm:D?.algorithm,whitespace:D?.whitespace,context:D?.context}])),[N,v,W,p,j,D?.algorithm,D?.whitespace,D?.context]),Me.current=Te,me.current=o.useMemo(()=>new Map(Te.map((e,s)=>[e,s])),[Te]);const k=o.useMemo(()=>{const e=Te.map(a=>he.current.get(a)??Qe),s=new Array(e.length);for(let a=0;a<e.length;a+=1)s[a]=a===0?0:s[a-1]+e[a-1];const l=e.length>0?s[e.length-1]+e[e.length-1]:0;return{tops:s,heights:e,bottom:l}},[ct,Ee]);Be.current=k;const oe=o.useMemo(()=>E?N.find(e=>E===e.key||E===e.path||E===e.absolutePath)?.key??null:null,[N,E]),Fe=o.useMemo(()=>c?N.find(e=>c===e.key||c===e.path||c===e.absolutePath)?.key??null:null,[N,c]),De=o.useMemo(()=>{const e=k.tops.length;if(e===0)return-1;let s=0,l=e;for(;s<l;){const a=Math.floor((s+l)/2);k.tops[a]<=J.top+1?s=a+1:l=a}return Math.min(e-1,Math.max(0,s-1))},[k.tops,J.top]),ce=o.useCallback(e=>{C.current=e,ot(e)},[]),$e=o.useMemo(()=>{const e=J.top-Le,s=J.top+J.height+Le,l=new Set;let a=0,d=k.tops.length;for(;a<d;){const u=Math.floor((a+d)/2);k.tops[u]<=e?a=u+1:d=u}const w=Math.max(0,a-1);for(let u=w;u<k.tops.length;u+=1){const R=k.tops[u];if(R>s)break;R+k.heights[u]>=e&&R<=s&&l.add(u)}for(let u=De-1;u<=De+1;u+=1)u>=0&&u<k.tops.length&&l.add(u);for(const u of Ie){const R=me.current.get(u);R!==void 0&&l.add(R)}return Array.from(l).sort((u,R)=>u-R)},[k,J,Ie,De]),_e=o.useCallback(()=>{if(!_||S.current)return;const e=Me.current;if(e.length===0)return;const s=ne.current.key,l=Math.min(e.length-1,(s!==null?me.current.get(s):void 0)??Math.max(0,De)),a=u=>Math.abs((me.current.get(u)??0)-l),d=[];C.current.has(e[l])||d.push(e[l]);for(let u=1;u<=Oe;u+=1){const R=l+u,M=l-u;R<e.length&&!C.current.has(e[R])&&d.push(e[R]),M>=0&&!C.current.has(e[M])&&d.push(e[M])}const w=d[0];if(w){if(C.current.size>=Oe){const u=a(w),R=Array.from(C.current).filter(Z=>Z!==S.current).sort((Z,ke)=>a(ke)-a(Z))[0];if(!R||a(R)<=u)return;const M=new Set(C.current);M.delete(R),ce(M)}S.current=w,ce(new Set(C.current).add(w))}},[_,ce,De]);We.current=_e;const we=o.useCallback(e=>{if(C.current.has(e))return;const s=S.current;if(s&&s!==e){const l=new Set(C.current);l.delete(s),ce(l),S.current=null}S.current=e,ce(new Set(C.current).add(e))},[ce]),Ve=o.useCallback(e=>{if(!C.current.has(e))return;const s=H.current.get(e);s&&se.current.set(e,s),S.current===e&&(S.current=null),window.requestAnimationFrame(()=>We.current())},[]),Ge=o.useCallback((e,s,l)=>{if(Math.abs(l-s)<1)return;const a=he.current.get(e);a!==void 0&&Math.abs(a-l)<1||(he.current.set(e,l),$t(e,l),at(d=>d+1))},[]);o.useLayoutEffect(()=>{if(fe.current!==v){fe.current=v;for(const e of N){if(e.diffOverride!==void 0)continue;const s=qt(e.path,e.repoRoot);Rt(s,e.repoRoot??void 0,D)}}},[N,D,v]),o.useLayoutEffect(()=>{const e=G.current;if(!e)return;const s=()=>{const a=Math.max(0,Math.ceil(e.clientHeight));if(a===0)return;const d=e.scrollTop;ye(w=>w.height===a&&w.top===d?w:{top:d,height:a})};if(s(),typeof ResizeObserver>"u")return;const l=new ResizeObserver(s);return l.observe(e),()=>l.disconnect()},[$]),o.useEffect(()=>{_&&Fe&&we(Fe)},[_,we,Fe]),o.useEffect(()=>{const e=new Set(Me.current);for(const s of Array.from(he.current.keys()))e.has(s)||he.current.delete(s);for(const s of Array.from(C.current))if(!e.has(s)){const l=new Set(C.current);l.delete(s),ce(l)}for(const s of Array.from(se.current.keys()))e.has(s)||se.current.delete(s);if(S.current&&!e.has(S.current)&&(S.current=null),N.length===0){S.current=null,se.current.clear(),ce(new Set);return}_e()},[N.length,Ee,_e,$e,ce]);const Xe=o.useCallback(e=>{G.current=e;const s=Y.current,l=e.scrollTop;Y.current=l;const a=d=>{const w=Be.current,u=Me.current;let R=0,M=w.tops.length;for(;R<M;){const Ae=Math.floor((R+M)/2);w.tops[Ae]<=d+1?R=Ae+1:M=Ae}const Z=Math.min(u.length-1,Math.max(0,R-1)),ke=u[Z]??null;ne.current={key:ke,top:w.tops[Z]??0},ke&&we(ke)};Math.abs(l-s)>=Le?(Je.flushSync(()=>{ye({top:l,height:e.clientHeight})}),a(l)):K.current===null&&(K.current=window.requestAnimationFrame(()=>{K.current=null;const d=G.current;if(d){const w=d.scrollTop;ye({top:w,height:d.clientHeight}),a(w)}})),L?.(e)},[L,we]);o.useEffect(()=>()=>{K.current!==null&&window.cancelAnimationFrame(K.current)},[]),o.useLayoutEffect(()=>{const e=G.current;if(!e)return;const s=ne.current;if(s.key===null)return;const l=me.current.get(s.key);if(l===void 0)return;const a=(k.tops[l]??s.top)-s.top;if(Math.abs(a)<1)return;const d=e.scrollTop+a;Y.current=d,ye(w=>({top:d,height:w.height})),typeof e.scrollTo=="function"?e.scrollTo({top:d,behavior:"instant"}):e.scrollTop=d},[k]),o.useLayoutEffect(()=>{const e=Me.current,s=k.tops;if(e.length===0){ne.current={key:null,top:0};return}const l=Y.current,a=l+(G.current?.clientHeight??J.height),d=ne.current;if(d.key!==null){const M=me.current.get(d.key);if(M!==void 0){const Z=s[M]??0;if(Z+(k.heights[M]??Qe)>l&&Z<a){ne.current={key:d.key,top:Z};return}}}let w=0,u=s.length;for(;w<u;){const M=Math.floor((w+u)/2);s[M]<=l+1?w=M+1:u=M}const R=Math.min(s.length-1,Math.max(0,w-1));ne.current={key:e[R]??null,top:s[R]??0}}),o.useLayoutEffect(()=>{if(!oe)return;const e=X.current;if(e?.key===oe&&e.nonce===re)return;const s=me.current.get(oe);if(s===void 0)return;we(oe),ne.current={key:oe,top:k.tops[s]??0};const l=G.current;if(!l||l.clientHeight===0||J.height!==l.clientHeight)return;X.current={key:oe,nonce:re};const a=k.tops[s]??0;typeof l.scrollTo=="function"?l.scrollTo({top:a,behavior:"instant"}):l.scrollTop=a;const d=l.scrollTop;Y.current=d,ye({top:d,height:l.clientHeight})},[k,J.height,we,oe,re]),o.useLayoutEffect(()=>{if(Q===void 0||oe)return;const e=Ee;if(be.current===e||le&&be.current!==null)return;const s=G.current;if(!s)return;be.current=e;const l=Math.max(0,k.bottom-s.clientHeight),a=Math.min(Math.max(0,Q),l);typeof s.scrollTo=="function"?s.scrollTo({top:a,behavior:"instant"}):s.scrollTop=a;const d=s.scrollTop;Y.current=d,ye({top:d,height:s.clientHeight})},[k.bottom,Q,Ee,le,oe]);const it=o.useCallback((e,s)=>{const l=ve(e),a=H.current.get(e.key),d=a!==void 0&&Vt(se.current.get(e.key),a);return r.jsx(Xt,{item:e,repoRoot:e.repoRoot,selectionPath:e.key,displayName:e.displayName,displayDir:e.displayDir,selected:l,activePane:_,visible:Ie.has(e.key),reusableContent:d,estimatedHeight:s,lightweight:!1,wrap:W,viewType:p,inlineMode:j,diffOptions:D,reloadKey:v,auditRecords:e.auditRecords,diffOverride:e.diffOverride,oldSourceRef:e.oldSourceRef,renderStreamBadge:T,onInsertDiffReference:e.onInsertDiffReference??F,onHunkGitAction:e.onHunkGitAction??B,previewReverts:e.previewReverts,onReferenceCopied:P,insertedReferenceKey:q,copiedReferenceKey:I,onClearAuditRecord:U,onContentReady:Ve,onHeightChange:Ge})},[_,I,D,p,Ve,Ge,j,q,ve,Ie,U,B,F,P,v,T,W]),lt=r.jsx("div",{"data-diff-stream-content":!0,"data-diff-stream-canvas":!0,className:"termdock-diff-stream relative overflow-clip bg-surface will-change-transform",style:{height:Math.max(k.bottom,(k.tops.at(-1)??0)+J.height)},children:$e.map(e=>{const s=N[e];return s?r.jsx("div",{"data-diff-canvas-slot":s.key,className:"absolute inset-x-0",style:{top:k.tops[e]},children:it(s,k.heights[e])},s.key):null})}),ut=r.jsx("div",{ref:G,className:"termdock-diff-stream termdock-diff-stream-scroller h-full max-h-full min-h-0 overflow-y-auto overscroll-contain bg-surface [overflow-anchor:none]",onScroll:e=>Xe(e.currentTarget),children:lt});return r.jsx(Ht,{groups:n,mode:h,onModeChange:i,selectedKey:c,collapsedDirectoryKeys:y,onToggleDirectory:x,onSelectFile:m,renderLeading:g,renderTrailing:f,renderDirectoryTrailing:b,renderSubtitle:z,detail:ut,mobile:$,backLabel:ae,compact:ue,emptyContent:O,listPrefix:de,aiContent:pe,listContainerClassName:xe,detailContainerClassName:ge,renderListHeader:ee,renderMobileDetailHeader:V,externalSwiperRef:je,onMobileSlideChange:Ne,slideToDetailOnMobile:Se,desktopLayout:ie,onDetailScroll:Xe,desktopSidePanel:te,desktopListClassName:A,detailOwnsScroll:!0})}const Xt=o.memo(function({item:n,renderStreamBadge:c,...m}){return r.jsx(Wt,{...m,file:Kt(n),renderBadge:h=>c(h,n)})});function Kt(t){return{path:t.path,oldPath:t.oldPath,absolutePath:t.absolutePath,status:t.status}}function qt(t,n){if(t)return n&&t.startsWith(`${n}/`)?t.slice(n.length+1):t}export{Zt as C,tr as D,Nt as L,It as f,er as n};
|
|
1
|
+
import{ah as Ye,bA as r,e as dt,d as ft,df as ht,du as mt,ax as pt,a as xt,dt as gt,bV as vt,X as bt}from"./app-D2M53LZx.js";import{b as o,r as Je}from"./dnd-BCFAPC0L.js";import{h as Ze,F as yt,b as wt,c as Ke}from"./gestureArbiter-DPFs4a-w.js";import{S as et}from"./sparkles-iFcvD4yM.js";import{D as kt,i as Rt}from"./DiffViewer-BxcK2w41.js";const jt=[["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"M3 10a2 2 0 0 0 2 2h3",key:"1npucw"}],["path",{d:"M3 5v12a2 2 0 0 0 2 2h3",key:"x1gjn2"}]],Nt=Ye("list-tree",jt);const Mt=[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]],Tt=Ye("list",Mt);function tt({selected:t,depth:n=0,title:c,leading:m,children:h,trailing:i,role:y,tabIndex:x,ariaExpanded:g,onClick:f,onKeyDown:b,onPointerDown:z,onPointerUp:T,onPointerCancel:F,dataAttributes:B}){return r.jsxs("div",{role:y,tabIndex:x,"aria-expanded":g,title:c,onClick:f,onKeyDown:b,onPointerDown:z,onPointerUp:T,onPointerCancel:F,...B,className:`group flex w-full cursor-pointer items-center gap-1 rounded px-2 py-1.5 text-left text-[13px] transition active:scale-[0.99] ${t?"bg-surface-elevated text-foreground":"text-muted-foreground hover:bg-surface-2 hover:text-foreground"}`,style:{paddingLeft:`${n*14+8}px`},children:[r.jsx("span",{className:"flex min-w-[14px] shrink-0 items-center justify-center text-muted-foreground/80",children:m}),r.jsx("span",{className:"min-w-0 flex-1",children:h}),i]})}function rt(t){return t.path.replace(/^\/+/,"")}function Dt(t){if(t.displayName!==void 0||t.displayDir!==void 0)return{name:t.displayName||t.path,dir:t.displayDir||""};const n=t.path.split("/").filter(Boolean);return{name:n.pop()||t.path,dir:n.join("/")}}function nt(t,n){const c=new Map,m=(i,y,x,g)=>{const f=i.get(y);if(f)return f;const b={path:x,name:y,childCount:0,directories:[],files:[]};return i.set(y,b),g?.directories.push(b),b};for(const i of t){const y=n(i).split("/").filter(Boolean);if(y.length<=1)continue;let x=c,g=null,f="";for(const b of y.slice(0,-1)){f=f?`${f}/${b}`:b;const z=m(x,b,f,g);g=z,x=new Map(z.directories.map(T=>[T.name,T]))}g?.files.push(i)}const h=i=>{const y=i.directories.map(h).sort((g,f)=>g.name.localeCompare(f.name)),x=i.files.sort((g,f)=>g.path.localeCompare(f.path));return{...i,directories:y,files:x,childCount:y.reduce((g,f)=>g+f.childCount,0)+x.length}};return Array.from(c.values()).map(h).sort((i,y)=>i.name.localeCompare(y.name))}function Pe(t,n,c=0){const m=n.selectedKey===t.key||n.selectedKey===t.path||n.selectedKey===t.absolutePath,h=Dt(t);return r.jsx(tt,{selected:m,role:"button",tabIndex:0,title:t.title??t.absolutePath??t.path,onClick:()=>{Ze()||n.onSelectFile(t)},onKeyDown:i=>{i.key!=="Enter"&&i.key!==" "||(i.preventDefault(),n.onSelectFile(t))},leading:n.renderLeading(t),depth:c,trailing:n.renderTrailing?.(t),dataAttributes:{"data-diff-selection-path":t.key,"data-diff-file-path":t.path,"data-diff-absolute-path":t.absolutePath??"","data-diff-status":t.status},children:r.jsxs("span",{className:"select-text","data-sidebar-selectable":!0,children:[r.jsx("span",{className:`block truncate leading-snug ${m?"font-medium":""}`,children:h.name}),n.mode!=="tree"&&h.dir&&r.jsx("span",{className:"block truncate text-[10px] text-muted-foreground/75",children:h.dir}),n.renderSubtitle?.(t)]})},t.key)}function st(t,n,c,m,h){let i=t;const y=[t.name];for(;i.files.length===0&&i.directories.length===1;)i=i.directories[0],y.push(i.name);const x=y.join("/"),g=`${n}:${i.path}`,f=c.collapsedDirectoryKeys.has(g);return r.jsxs("div",{className:"space-y-px",children:[r.jsx(tt,{role:"button",tabIndex:0,onClick:()=>{Ze()||c.onToggleDirectory(g)},onKeyDown:b=>{b.key!=="Enter"&&b.key!==" "||(b.preventDefault(),c.onToggleDirectory(g))},ariaExpanded:!f,depth:m,title:i.path,leading:f?r.jsx(dt,{size:13}):r.jsx(ft,{size:13}),trailing:r.jsxs("span",{className:"flex shrink-0 items-center gap-1",children:[r.jsx("span",{className:"shrink-0 rounded bg-surface-2 px-1.5 py-0.5 text-[10px] text-muted-foreground/60 transition group-hover:text-muted-foreground",children:i.childCount}),c.renderDirectoryTrailing?.(i.path,h)]}),children:r.jsxs("span",{className:"flex min-w-0 items-center gap-1",children:[r.jsx(yt,{size:14,className:"shrink-0 text-[color:var(--folder)]"}),r.jsx("span",{className:"min-w-0 flex-1 truncate leading-snug select-text","data-sidebar-selectable":!0,children:x})]})}),!f&&r.jsxs("div",{className:"space-y-px",children:[i.directories.map(b=>st(b,n,c,m+1,h)),i.files.length>0&&r.jsx("div",{className:"space-y-px",children:i.files.map(b=>Pe(b,c,m+1))})]})]},g)}function St(t,n){const c=n.getFileTreePath??rt,m=t.files.filter(i=>c(i).split("/").filter(Boolean).length<=1),h=nt(t.files,c);return r.jsxs("div",{className:"space-y-px",children:[h.map(i=>st(i,t.key,n,0,t)),m.length>0&&r.jsx("div",{className:"space-y-px",children:m.map(i=>Pe(i,n))})]})}function It(t,n=rt){const c=[],m=i=>{for(const y of i.directories)m(y);c.push(...i.files)};for(const i of nt(t,n))m(i);const h=new Set(c.map(i=>i.key));return c.push(...t.filter(i=>!h.has(i.key))),c}function Et(t){return r.jsx("div",{className:t.mode==="tree"?"space-y-px pt-1":"space-y-2",children:t.groups.map(n=>{const c=!!n.header,m=!!n.collapsed;return r.jsxs("section",{className:c?"overflow-hidden rounded-lg border border-border/15 bg-surface/60":"",children:[n.header,!m&&r.jsx("div",{className:t.mode==="tree"?c?"space-y-px bg-surface/60 p-1":"space-y-px":c?"space-y-px bg-surface/60 p-1.5":"space-y-px",children:t.mode==="tree"?St(n,t):n.files.map(h=>Pe(h,t))})]},n.key)})})}const Ce="termdock:diff-review:list-width:v1",Ct=120,He=320,qe=220,Ft=560;function _t(t){return typeof t=="number"&&Number.isFinite(t)}function Ue(t,n){const c=Math.max(qe,n-360),m=Math.min(Ft,c);return Math.min(m,Math.max(qe,t))}function At(){return vt(Ce,_t)??He}function zt({list:t,detail:n,mobile:c,mobileListHeader:m,mobileDetailHeader:h,desktopListHeader:i,backLabel:y,onMobileSlideChange:x,externalSwiperRef:g,desktopLayout:f="split",onDetailScroll:b,desktopSidePanel:z,desktopListClassName:T,detailOwnsScroll:F=!1}){const{t:B}=ht(),P=o.useRef(null),q=o.useRef(null),I=o.useRef(null),[U,$]=o.useState(At);o.useEffect(()=>{if(c||f!=="split")return;const p=q.current;p&&$(j=>Ue(j,p.clientWidth))},[f,c]);const ae=o.useCallback(p=>{c||f!=="split"||(p.preventDefault(),I.current={startX:p.clientX,startWidth:U,pointerId:p.pointerId},p.currentTarget.setPointerCapture(p.pointerId))},[f,U,c]),ue=o.useCallback(p=>{const j=I.current;if(!j||j.pointerId!==p.pointerId)return;const D=q.current?.clientWidth??window.innerWidth,_=Ue(j.startWidth+p.clientX-j.startX,D);$(_),mt(Ce,_,Ct)},[]),ie=o.useCallback(p=>{const j=I.current;if(!(!j||j.pointerId!==p.pointerId)){I.current=null,pt(Ce);try{p.currentTarget.releasePointerCapture(p.pointerId)}catch{}}},[]);if(c){const p=()=>{const v=P.current;v&&v.slideTo(1)},j=()=>{const v=P.current;v&&v.slideTo(0)},D=typeof t=="function"?t({slideToDetail:p}):t,_=typeof h=="function"?h({slideToList:j,slideToDetail:p}):h;return r.jsxs(wt,{className:"h-full min-h-0 w-full",slidesPerView:1,resistanceRatio:.45,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:".swiper-no-swiping",allowTouchMove:!1,touchAngle:75,touchStartPreventDefault:!1,onSwiper:v=>{P.current=v,g&&(g.current=v)},onSlideChange:v=>{x?.(v.activeIndex)},children:[r.jsx(Ke,{className:"h-full min-h-0",children:r.jsxs("div",{className:"flex h-full min-h-0 flex-col overflow-hidden",children:[m&&r.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 py-2",children:m}),r.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain",children:D})]})}),r.jsx(Ke,{className:"h-full min-h-0",children:r.jsxs("div",{className:"flex h-full min-h-0 flex-col overflow-hidden bg-surface",children:[r.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 py-2",children:_??r.jsxs("button",{type:"button",onClick:j,className:"inline-flex h-9 shrink-0 items-center gap-1.5 rounded-full bg-surface-2 px-3 text-xs font-semibold text-muted-foreground transition hover:bg-surface-elevated hover:text-foreground active:scale-95",children:[r.jsx(xt,{size:14}),y]})}),r.jsx("div",{className:F?"min-h-0 flex-1 overflow-hidden":"termdock-diff-stream-scroller min-h-0 flex-1 overflow-y-auto overscroll-contain",onScroll:F?void 0:v=>b?.(v.currentTarget),children:n})]})})]})}const W=typeof t=="function"?t({slideToDetail:()=>{}}):t;return f==="stacked"?F?r.jsxs("div",{className:"termdock-native-select min-h-0 flex-1 overflow-hidden px-2 pb-[calc(env(safe-area-inset-bottom)+4.5rem)]",children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W,r.jsx("div",{className:"mt-3 h-[calc(100%-3rem)] min-h-0 overflow-hidden rounded-xl border border-border/15 bg-surface",children:n})]}):r.jsxs("div",{className:"termdock-native-select termdock-diff-stream-scroller min-h-0 flex-1 overflow-y-auto overscroll-contain px-2 pb-[calc(env(safe-area-inset-bottom)+4.5rem)]",onScroll:p=>b?.(p.currentTarget),children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W,r.jsx("div",{className:"mt-3 overflow-hidden rounded-xl border border-border/15 bg-surface",children:n})]}):r.jsxs("div",{ref:q,className:"flex h-full min-h-0 overflow-hidden",children:[z,r.jsxs("div",{className:T??"shrink-0 overflow-y-auto overscroll-contain border-r border-border/15 bg-surface",style:{width:U},children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W]}),r.jsx("div",{role:"separator","aria-orientation":"vertical","aria-label":B("diffViewer.resizeNavigation"),title:B("diffViewer.resizeNavigation"),className:"group relative z-10 w-2 shrink-0 cursor-col-resize touch-none border-r border-border/15 bg-surface",onPointerDown:ae,onPointerMove:ue,onPointerUp:ie,onPointerCancel:ie,onDoubleClick:()=>{$(He),gt(Ce,He)},children:r.jsx("span",{className:"pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-border/30 transition group-hover:bg-primary/60"})}),r.jsx("div",{className:F?"min-w-0 flex-1 overflow-hidden":"termdock-diff-stream-scroller min-w-0 flex-1 overflow-y-auto overscroll-contain",onScroll:F?void 0:p=>b?.(p.currentTarget),children:n})]})}function Lt({mode:t,onModeChange:n,showAi:c=!1}){return r.jsxs("div",{className:"inline-flex h-7 shrink-0 overflow-hidden rounded-md bg-surface-2 p-0.5",children:[r.jsx("button",{type:"button",onClick:()=>n("list"),"aria-pressed":t==="list",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="list"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(Tt,{size:13})}),r.jsx("button",{type:"button",onClick:()=>n("tree"),"aria-pressed":t==="tree",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="tree"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(Nt,{size:13})}),c&&r.jsx("button",{type:"button",onClick:()=>n("ai"),"aria-pressed":t==="ai",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="ai"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(et,{size:13})})]})}function Ht({groups:t,mode:n,onModeChange:c,selectedKey:m,collapsedDirectoryKeys:h,onToggleDirectory:i,onSelectFile:y,renderLeading:x,renderTrailing:g,renderDirectoryTrailing:f,renderSubtitle:b,detail:z,mobile:T,backLabel:F,compact:B=!1,emptyContent:P,listPrefix:q,aiContent:I,listContainerClassName:U="px-2 py-2",detailContainerClassName:$="termdock-native-select termdock-diff-stream-scroller min-h-0",renderListHeader:ae,renderMobileDetailHeader:ue,externalSwiperRef:ie,onMobileSlideChange:W,slideToDetailOnMobile:p=!0,desktopLayout:j="split",onDetailScroll:D,desktopSidePanel:_,desktopListClassName:v,detailOwnsScroll:ee}){const[V,O]=o.useState(!1);o.useEffect(()=>{if(!V)return;const A=L=>{L.key==="Escape"&&O(!1)};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[V]);const de=r.jsx(Lt,{mode:n,onModeChange:c,showAi:!!I}),pe=n==="tree"?"tree":"list",xe=ae?ae(de):r.jsx("div",{className:"flex justify-end",children:de}),ge=t.some(A=>A.files.length>0),te=r.jsx(zt,{mobile:V?!1:T,backLabel:F,externalSwiperRef:ie,onMobileSlideChange:W,desktopLayout:V?"split":j,onDetailScroll:D,desktopSidePanel:_,desktopListClassName:v,detailOwnsScroll:ee,mobileListHeader:T?xe:void 0,desktopListHeader:T?void 0:xe,mobileDetailHeader:ue,list:({slideToDetail:A})=>r.jsx("div",{className:U,children:n==="ai"?typeof I=="function"?I({slideToDetail:A,fullscreen:V,toggleFullscreen:()=>O(L=>!L)}):I??P:r.jsxs(r.Fragment,{children:[q,ge?r.jsx(Et,{groups:t,selectedKey:m,mode:pe,mobile:T,compact:B,collapsedDirectoryKeys:h,onToggleDirectory:i,onSelectFile:L=>{y(L),T&&p&&window.requestAnimationFrame(A)},renderLeading:x,renderTrailing:g,renderDirectoryTrailing:f,renderSubtitle:b}):P]})}),detail:r.jsx("div",{className:ee?"h-full min-h-0":$,children:z})});return!V||typeof document>"u"?te:Je.createPortal(r.jsxs("div",{className:"fixed inset-0 z-modal-panel flex min-h-0 flex-col bg-surface text-foreground",children:[r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b border-border/15 bg-[var(--chrome-bg)] px-3",children:[r.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[r.jsx(et,{size:15,className:"shrink-0 text-primary"}),r.jsx("span",{className:"truncate text-[12px] font-semibold",children:"DAG Review"}),r.jsx("span",{className:"hidden text-[10px] text-muted-foreground sm:inline",children:"Select a step to inspect its exact change"})]}),r.jsx("button",{type:"button",onClick:()=>O(!1),className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition hover:bg-surface-2 hover:text-foreground active:scale-95",title:"Exit full-screen DAG review (Esc)","aria-label":"Exit full-screen DAG review",children:r.jsx(bt,{size:16})})]}),r.jsx("div",{className:"min-h-0 flex-1",children:te})]}),document.body)}const Pt=96,ze=44;function Wt({file:t,repoRoot:n,selectionPath:c,displayName:m,displayDir:h,selected:i,activePane:y,visible:x,reusableContent:g=!1,estimatedHeight:f,lightweight:b=!1,wrap:z,viewType:T,inlineMode:F,diffOptions:B,reloadKey:P=0,auditRecords:q,diffOverride:I,oldSourceRef:U,preparedDiff:$,renderBadge:ae,onInsertDiffReference:ue,onHunkGitAction:ie,previewReverts:W,onReferenceCopied:p,insertedReferenceKey:j,copiedReferenceKey:D,onClearAuditRecord:_,onContentReady:v,onHeightChange:ee}){const V=o.useRef(null),O=o.useRef(null),de=o.useRef(null),[pe,xe]=o.useState(null),ge=o.useRef(64),te=o.useRef(f??104),A=o.useRef(null),L=o.useRef(null),Q=o.useRef(!1),le=o.useRef(!1),E=o.useRef(null),[re,je]=o.useState(!1),[Ne,Se]=o.useState(!1),ve=t.absolutePath||(n?`${n}/${t.path}`:t.path),N=o.useCallback(()=>{le.current||(le.current=!0,Se(!0),v?.(c))},[v,c]);o.useLayoutEffect(()=>{if(!(I!==void 0&&x&&le.current))return Q.current=!1,le.current=!1,A.current=null,L.current=null,E.current!==null&&(window.clearTimeout(E.current),E.current=null),je(!1),Se(!1),()=>{E.current!==null&&(window.clearTimeout(E.current),E.current=null)}},[I,$,P,g,x]),o.useLayoutEffect(()=>{const X=A.current;!re||X===null||Math.abs((f??104)-X)>=1||(A.current=null,N())},[N,f,re]),o.useLayoutEffect(()=>{if(!x||!re)return;const X=de.current;if(!X)return;const be=()=>{if(!Q.current)return;const Y=X.firstElementChild;if(!Y)return;const K=Math.ceil(Math.max(Y.getBoundingClientRect().height,Y.scrollHeight,64)),he=ge.current;if(K>0&&he!==K&&(ge.current=K,xe(K)),!V.current)return;const C=O.current?.getBoundingClientRect().height??ze,se=Math.ceil(C+K+1);se<=0||L.current===se||(L.current=se,E.current!==null&&window.clearTimeout(E.current),E.current=window.setTimeout(()=>{if(E.current=null,!Q.current)return;const H=L.current;if(H===null)return;const S=te.current;if(le.current){te.current=H,Math.abs(S-H)>=1&&ee?.(c,S,H),v?.(c);return}if(A.current=H,Math.abs(S-H)<1||!ee){te.current=H,A.current=null,N();return}te.current=H,ee(c,S,H)},Pt))};if(be(),typeof ResizeObserver>"u")return;const fe=new ResizeObserver(be);return fe.observe(X),X.firstElementChild&&fe.observe(X.firstElementChild),O.current&&fe.observe(O.current),()=>fe.disconnect()},[N,v,ee,c,re,x,z,T,F]);const G=x&&!Ne;return r.jsxs("div",{ref:V,"data-diff-stream-item":c,"data-diff-selection-path":c,"data-diff-file-path":t.path,"data-diff-absolute-path":ve,className:`scroll-mt-3 border-b border-border/15 last:border-b-0 ${G||!x?"overflow-hidden":""} ${i?"bg-surface-elevated/35":""}`,style:x?G?{height:f??104}:void 0:{height:f??104},children:[r.jsxs("div",{ref:O,"data-diff-stream-header":!0,className:`sticky top-0 z-10 flex min-w-0 items-center gap-2 border-b border-border/15 px-3 py-2 ${i?"bg-surface-elevated":"bg-surface"}`,children:[ae(t.status),r.jsxs("div",{className:"min-w-0 flex-1",title:ve,children:[r.jsx("div",{className:"truncate text-xs font-semibold text-foreground",children:m}),h&&r.jsx("div",{className:"truncate text-[10px] text-muted-foreground",children:h})]})]}),r.jsxs("div",{ref:de,className:"relative","data-diff-stream-body":!0,style:x?{minHeight:Ne?64:Math.max(pe??64,(f??104)-ze)}:{height:Math.max(pe??64,(f??104)-ze)},children:[x?r.jsx(kt,{active:y,repoRoot:n,filePath:t.path,referenceFilePath:ve,changedFile:t,wrap:z,viewType:T,inlineMode:F,diffOptions:B,reloadKey:P,embedded:!0,lightweight:b,auditRecords:q,diffOverride:I,oldSourceRef:U,preparedDiff:$,onClearAuditRecord:_,onContentReady:()=>{if(g){Q.current=!0,je(!0),N();return}Q.current||(Q.current=!0,je(!0))},onInsertDiffReference:ue,onHunkGitAction:ie,previewReverts:W,onReferenceCopied:p,insertedReferenceKey:j,copiedReferenceKey:D}):r.jsx("div",{className:"flex h-full min-h-16 items-center justify-center bg-surface px-3 py-4 text-center text-xs text-muted-foreground",children:t.path}),x&&re&&!Ne&&r.jsx("div",{"data-diff-measuring-overlay":!0,className:"absolute inset-0 z-20 bg-surface"})]})]})}const Oe=8,Le=1600,Qe=104,Bt=1e3,Re=new Map;function $t(t,n){for(Re.delete(t),Re.set(t,n);Re.size>Bt;){const c=Re.keys().next().value;if(c===void 0)break;Re.delete(c)}}function Vt(t,n){return!!(t&&t.diffOverride===n.diffOverride&&t.oldSourceRef===n.oldSourceRef&&t.reloadKey===n.reloadKey&&t.wrap===n.wrap&&t.viewType===n.viewType&&t.inlineMode===n.inlineMode&&t.algorithm===n.algorithm&&t.whitespace===n.whitespace&&t.context===n.context)}const Gt={added:{label:"A",className:"text-[color:var(--diff-insert-strong)]",title:"Added"},modified:{label:"M",className:"text-[color:var(--diff-hunk-accent)]",title:"Modified"},deleted:{label:"D",className:"text-[color:var(--diff-delete-strong)]",title:"Deleted"},renamed:{label:"R",className:"text-muted-foreground",title:"Renamed"},copied:{label:"C",className:"text-[color:var(--diff-insert-strong)]",title:"Copied"},untracked:{label:"U",className:"text-[color:var(--diff-insert-strong)]",title:"Untracked (new file)"},conflicted:{label:"!",className:"text-destructive",title:"Conflicted"},unknown:{label:"?",className:"text-muted-foreground",title:"Unknown"}};function Zt({status:t}){const n=Gt[t]??{label:"?",className:"text-muted-foreground",title:t};return r.jsx("span",{className:`w-4 shrink-0 text-center text-[10px] font-mono font-bold ${n.className}`,title:n.title,children:n.label})}function er(t,n){return n?{key:n,nonce:t.nonce+1}:t}function tr({files:t,groups:n,selectedKey:c,onSelectFile:m,mode:h,onModeChange:i,collapsedDirectoryKeys:y,onToggleDirectory:x,renderLeading:g,renderTrailing:f,renderDirectoryTrailing:b,renderSubtitle:z,renderStreamBadge:T,onInsertDiffReference:F,onHunkGitAction:B,onReferenceCopied:P,insertedReferenceKey:q,copiedReferenceKey:I,onClearAuditRecord:U,mobile:$,backLabel:ae,compact:ue,desktopLayout:ie,wrap:W,diffViewType:p,inlineMode:j,diffOptions:D,activePane:_,reloadKey:v=0,renderListHeader:ee,renderMobileDetailHeader:V,emptyContent:O,listPrefix:de,aiContent:pe,listContainerClassName:xe,detailContainerClassName:ge,desktopSidePanel:te,desktopListClassName:A,onDetailScroll:L,initialDetailScrollTop:Q,preserveScrollOnUpdate:le=!1,scrollToKey:E,scrollToKeyNonce:re=0,externalSwiperRef:je,onMobileSlideChange:Ne,slideToDetailOnMobile:Se}){const ve=o.useMemo(()=>e=>c===e.key||c===e.path||c===e.absolutePath,[c]),N=o.useMemo(()=>{const e=new Map;for(const a of t)e.set(a.key,a),a.path&&e.set(a.path,a),a.absolutePath&&e.set(a.absolutePath,a);const s=[],l=new Set;for(const a of n){const d=h==="tree"?It(a.files):a.files;for(const w of d){const u=e.get(w.key);!u||l.has(u.key)||(s.push(u),l.add(u.key))}}for(const a of t)l.has(a.key)||s.push(a);return s},[t,n,h]),G=o.useRef(null),X=o.useRef(null),be=o.useRef(null),fe=o.useRef(v),Y=o.useRef(0),K=o.useRef(null),he=o.useRef(new Map(Re)),ne=o.useRef({key:null,top:0}),C=o.useRef(new Set),se=o.useRef(new Map),H=o.useRef(new Map),S=o.useRef(null),We=o.useRef(()=>{}),Me=o.useRef([]),me=o.useRef(new Map),Be=o.useRef({tops:[],heights:[],bottom:0}),[Ie,ot]=o.useState(()=>new Set),[ct,at]=o.useState(0),[J,ye]=o.useState({top:0,height:0}),Te=o.useMemo(()=>N.map(e=>e.key),[N]),Ee=Te.join("");H.current=o.useMemo(()=>new Map(N.map(e=>[e.key,{diffOverride:e.diffOverride,oldSourceRef:e.oldSourceRef,reloadKey:v,wrap:W,viewType:p,inlineMode:j,algorithm:D?.algorithm,whitespace:D?.whitespace,context:D?.context}])),[N,v,W,p,j,D?.algorithm,D?.whitespace,D?.context]),Me.current=Te,me.current=o.useMemo(()=>new Map(Te.map((e,s)=>[e,s])),[Te]);const k=o.useMemo(()=>{const e=Te.map(a=>he.current.get(a)??Qe),s=new Array(e.length);for(let a=0;a<e.length;a+=1)s[a]=a===0?0:s[a-1]+e[a-1];const l=e.length>0?s[e.length-1]+e[e.length-1]:0;return{tops:s,heights:e,bottom:l}},[ct,Ee]);Be.current=k;const oe=o.useMemo(()=>E?N.find(e=>E===e.key||E===e.path||E===e.absolutePath)?.key??null:null,[N,E]),Fe=o.useMemo(()=>c?N.find(e=>c===e.key||c===e.path||c===e.absolutePath)?.key??null:null,[N,c]),De=o.useMemo(()=>{const e=k.tops.length;if(e===0)return-1;let s=0,l=e;for(;s<l;){const a=Math.floor((s+l)/2);k.tops[a]<=J.top+1?s=a+1:l=a}return Math.min(e-1,Math.max(0,s-1))},[k.tops,J.top]),ce=o.useCallback(e=>{C.current=e,ot(e)},[]),$e=o.useMemo(()=>{const e=J.top-Le,s=J.top+J.height+Le,l=new Set;let a=0,d=k.tops.length;for(;a<d;){const u=Math.floor((a+d)/2);k.tops[u]<=e?a=u+1:d=u}const w=Math.max(0,a-1);for(let u=w;u<k.tops.length;u+=1){const R=k.tops[u];if(R>s)break;R+k.heights[u]>=e&&R<=s&&l.add(u)}for(let u=De-1;u<=De+1;u+=1)u>=0&&u<k.tops.length&&l.add(u);for(const u of Ie){const R=me.current.get(u);R!==void 0&&l.add(R)}return Array.from(l).sort((u,R)=>u-R)},[k,J,Ie,De]),_e=o.useCallback(()=>{if(!_||S.current)return;const e=Me.current;if(e.length===0)return;const s=ne.current.key,l=Math.min(e.length-1,(s!==null?me.current.get(s):void 0)??Math.max(0,De)),a=u=>Math.abs((me.current.get(u)??0)-l),d=[];C.current.has(e[l])||d.push(e[l]);for(let u=1;u<=Oe;u+=1){const R=l+u,M=l-u;R<e.length&&!C.current.has(e[R])&&d.push(e[R]),M>=0&&!C.current.has(e[M])&&d.push(e[M])}const w=d[0];if(w){if(C.current.size>=Oe){const u=a(w),R=Array.from(C.current).filter(Z=>Z!==S.current).sort((Z,ke)=>a(ke)-a(Z))[0];if(!R||a(R)<=u)return;const M=new Set(C.current);M.delete(R),ce(M)}S.current=w,ce(new Set(C.current).add(w))}},[_,ce,De]);We.current=_e;const we=o.useCallback(e=>{if(C.current.has(e))return;const s=S.current;if(s&&s!==e){const l=new Set(C.current);l.delete(s),ce(l),S.current=null}S.current=e,ce(new Set(C.current).add(e))},[ce]),Ve=o.useCallback(e=>{if(!C.current.has(e))return;const s=H.current.get(e);s&&se.current.set(e,s),S.current===e&&(S.current=null),window.requestAnimationFrame(()=>We.current())},[]),Ge=o.useCallback((e,s,l)=>{if(Math.abs(l-s)<1)return;const a=he.current.get(e);a!==void 0&&Math.abs(a-l)<1||(he.current.set(e,l),$t(e,l),at(d=>d+1))},[]);o.useLayoutEffect(()=>{if(fe.current!==v){fe.current=v;for(const e of N){if(e.diffOverride!==void 0)continue;const s=qt(e.path,e.repoRoot);Rt(s,e.repoRoot??void 0,D)}}},[N,D,v]),o.useLayoutEffect(()=>{const e=G.current;if(!e)return;const s=()=>{const a=Math.max(0,Math.ceil(e.clientHeight));if(a===0)return;const d=e.scrollTop;ye(w=>w.height===a&&w.top===d?w:{top:d,height:a})};if(s(),typeof ResizeObserver>"u")return;const l=new ResizeObserver(s);return l.observe(e),()=>l.disconnect()},[$]),o.useEffect(()=>{_&&Fe&&we(Fe)},[_,we,Fe]),o.useEffect(()=>{const e=new Set(Me.current);for(const s of Array.from(he.current.keys()))e.has(s)||he.current.delete(s);for(const s of Array.from(C.current))if(!e.has(s)){const l=new Set(C.current);l.delete(s),ce(l)}for(const s of Array.from(se.current.keys()))e.has(s)||se.current.delete(s);if(S.current&&!e.has(S.current)&&(S.current=null),N.length===0){S.current=null,se.current.clear(),ce(new Set);return}_e()},[N.length,Ee,_e,$e,ce]);const Xe=o.useCallback(e=>{G.current=e;const s=Y.current,l=e.scrollTop;Y.current=l;const a=d=>{const w=Be.current,u=Me.current;let R=0,M=w.tops.length;for(;R<M;){const Ae=Math.floor((R+M)/2);w.tops[Ae]<=d+1?R=Ae+1:M=Ae}const Z=Math.min(u.length-1,Math.max(0,R-1)),ke=u[Z]??null;ne.current={key:ke,top:w.tops[Z]??0},ke&&we(ke)};Math.abs(l-s)>=Le?(Je.flushSync(()=>{ye({top:l,height:e.clientHeight})}),a(l)):K.current===null&&(K.current=window.requestAnimationFrame(()=>{K.current=null;const d=G.current;if(d){const w=d.scrollTop;ye({top:w,height:d.clientHeight}),a(w)}})),L?.(e)},[L,we]);o.useEffect(()=>()=>{K.current!==null&&window.cancelAnimationFrame(K.current)},[]),o.useLayoutEffect(()=>{const e=G.current;if(!e)return;const s=ne.current;if(s.key===null)return;const l=me.current.get(s.key);if(l===void 0)return;const a=(k.tops[l]??s.top)-s.top;if(Math.abs(a)<1)return;const d=e.scrollTop+a;Y.current=d,ye(w=>({top:d,height:w.height})),typeof e.scrollTo=="function"?e.scrollTo({top:d,behavior:"instant"}):e.scrollTop=d},[k]),o.useLayoutEffect(()=>{const e=Me.current,s=k.tops;if(e.length===0){ne.current={key:null,top:0};return}const l=Y.current,a=l+(G.current?.clientHeight??J.height),d=ne.current;if(d.key!==null){const M=me.current.get(d.key);if(M!==void 0){const Z=s[M]??0;if(Z+(k.heights[M]??Qe)>l&&Z<a){ne.current={key:d.key,top:Z};return}}}let w=0,u=s.length;for(;w<u;){const M=Math.floor((w+u)/2);s[M]<=l+1?w=M+1:u=M}const R=Math.min(s.length-1,Math.max(0,w-1));ne.current={key:e[R]??null,top:s[R]??0}}),o.useLayoutEffect(()=>{if(!oe)return;const e=X.current;if(e?.key===oe&&e.nonce===re)return;const s=me.current.get(oe);if(s===void 0)return;we(oe),ne.current={key:oe,top:k.tops[s]??0};const l=G.current;if(!l||l.clientHeight===0||J.height!==l.clientHeight)return;X.current={key:oe,nonce:re};const a=k.tops[s]??0;typeof l.scrollTo=="function"?l.scrollTo({top:a,behavior:"instant"}):l.scrollTop=a;const d=l.scrollTop;Y.current=d,ye({top:d,height:l.clientHeight})},[k,J.height,we,oe,re]),o.useLayoutEffect(()=>{if(Q===void 0||oe)return;const e=Ee;if(be.current===e||le&&be.current!==null)return;const s=G.current;if(!s)return;be.current=e;const l=Math.max(0,k.bottom-s.clientHeight),a=Math.min(Math.max(0,Q),l);typeof s.scrollTo=="function"?s.scrollTo({top:a,behavior:"instant"}):s.scrollTop=a;const d=s.scrollTop;Y.current=d,ye({top:d,height:s.clientHeight})},[k.bottom,Q,Ee,le,oe]);const it=o.useCallback((e,s)=>{const l=ve(e),a=H.current.get(e.key),d=a!==void 0&&Vt(se.current.get(e.key),a);return r.jsx(Xt,{item:e,repoRoot:e.repoRoot,selectionPath:e.key,displayName:e.displayName,displayDir:e.displayDir,selected:l,activePane:_,visible:Ie.has(e.key),reusableContent:d,estimatedHeight:s,lightweight:!1,wrap:W,viewType:p,inlineMode:j,diffOptions:D,reloadKey:v,auditRecords:e.auditRecords,diffOverride:e.diffOverride,oldSourceRef:e.oldSourceRef,renderStreamBadge:T,onInsertDiffReference:e.onInsertDiffReference??F,onHunkGitAction:e.onHunkGitAction??B,previewReverts:e.previewReverts,onReferenceCopied:P,insertedReferenceKey:q,copiedReferenceKey:I,onClearAuditRecord:U,onContentReady:Ve,onHeightChange:Ge})},[_,I,D,p,Ve,Ge,j,q,ve,Ie,U,B,F,P,v,T,W]),lt=r.jsx("div",{"data-diff-stream-content":!0,"data-diff-stream-canvas":!0,className:"termdock-diff-stream relative overflow-clip bg-surface will-change-transform",style:{height:Math.max(k.bottom,(k.tops.at(-1)??0)+J.height)},children:$e.map(e=>{const s=N[e];return s?r.jsx("div",{"data-diff-canvas-slot":s.key,className:"absolute inset-x-0",style:{top:k.tops[e]},children:it(s,k.heights[e])},s.key):null})}),ut=r.jsx("div",{ref:G,className:"termdock-diff-stream termdock-diff-stream-scroller h-full max-h-full min-h-0 overflow-y-auto overscroll-contain bg-surface [overflow-anchor:none]",onScroll:e=>Xe(e.currentTarget),children:lt});return r.jsx(Ht,{groups:n,mode:h,onModeChange:i,selectedKey:c,collapsedDirectoryKeys:y,onToggleDirectory:x,onSelectFile:m,renderLeading:g,renderTrailing:f,renderDirectoryTrailing:b,renderSubtitle:z,detail:ut,mobile:$,backLabel:ae,compact:ue,emptyContent:O,listPrefix:de,aiContent:pe,listContainerClassName:xe,detailContainerClassName:ge,renderListHeader:ee,renderMobileDetailHeader:V,externalSwiperRef:je,onMobileSlideChange:Ne,slideToDetailOnMobile:Se,desktopLayout:ie,onDetailScroll:Xe,desktopSidePanel:te,desktopListClassName:A,detailOwnsScroll:!0})}const Xt=o.memo(function({item:n,renderStreamBadge:c,...m}){return r.jsx(Wt,{...m,file:Kt(n),renderBadge:h=>c(h,n)})});function Kt(t){return{path:t.path,oldPath:t.oldPath,absolutePath:t.absolutePath,status:t.status}}function qt(t,n){if(t)return n&&t.startsWith(`${n}/`)?t.slice(n.length+1):t}export{Zt as C,tr as D,Nt as L,It as f,er as n};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{bA as i}from"./app-
|
|
1
|
+
import{bA as i}from"./app-D2M53LZx.js";import{b as n}from"./dnd-BCFAPC0L.js";import{D as I}from"./DiffReview-riYMjjAA.js";import"./react-XDCjal2T.js";import"./terminal-C7X98Amf.js";import"./gestureArbiter-DPFs4a-w.js";import"./sparkles-iFcvD4yM.js";import"./DiffViewer-BxcK2w41.js";import"./referenceLongPress-l-iC26Y4.js";const x=40,b="/tmp/termdock-diff-review-lab";function S(r,c,l=!1){const d=[`diff --git a/${r} b/${r}`,`--- a/${r}`,`+++ b/${r}`,`@@ -1,${c} +1,${c} @@`];for(let t=0;t<c;t+=1)t%5===0&&d.push(`-const removed_${t} = ${t};`),t%3===0&&d.push(`+const added_${t} = ${t} * 2;`),d.push(` context line ${t} in ${r}${l?" long content for repeated wrap and resize checks".repeat(10):""}`);return d.join(`
|
|
2
2
|
`)}function T(r,c,l){return Array.from({length:x},(d,t)=>{const f=6+t*7%60,a=`src/module${String(t).padStart(2,"0")}/File${t}.ts`,m=`${b}/${a}`,w=S(a,f,l),o=S(a,1,l);return{key:m,path:a,absolutePath:m,status:"modified",repoRoot:b,displayName:`File${t}.ts`,displayDir:`src/module${String(t).padStart(2,"0")} · ${f} lines`,diffOverride:!c||r.has(t)?w:o,auditRecords:[]}})}function B(){const[r,c]=n.useState(()=>new URLSearchParams(window.location.search).get("wrap")!=="off"),[l,d]=n.useState(()=>new URLSearchParams(window.location.search).get("view")==="split"),t=n.useMemo(()=>new URLSearchParams(window.location.search).get("long")==="1",[]),f=n.useMemo(()=>{if(typeof window>"u")return 0;const e=new URLSearchParams(window.location.search).get("delay"),s=e===null?0:Number.parseInt(e,10);return Number.isInteger(s)&&s>0?s:0},[]),a=f>0,[m,w]=n.useState(()=>new Set);n.useEffect(()=>{if(!a)return;const e=Array.from({length:x},(s,u)=>window.setTimeout(()=>{w(M=>{const g=new Set(M);return g.add(u),g})},f+u*20));return()=>e.forEach(s=>window.clearTimeout(s))},[a,f]);const o=n.useMemo(()=>T(m,a,t),[m,a,t]),k=n.useMemo(()=>[{key:"mock-repo",root:b,label:"diff-review-lab",files:o.map(e=>({key:e.key,path:e.path,absolutePath:e.absolutePath,displayName:e.displayName,displayDir:e.displayDir,status:e.status}))}],[o]),p=n.useMemo(()=>{if(typeof window>"u")return null;const e=new URLSearchParams(window.location.search).get("select");if(e===null)return null;const s=Number.parseInt(e,10);return Number.isInteger(s)&&s>=0&&s<o.length?s:null},[o.length]),[h,$]=n.useState(()=>p!==null?o[p].key:null),[y,R]=n.useState(()=>({key:p!==null?o[p].key:null,nonce:p!==null?1:0})),[N,v]=n.useState("list"),[D,j]=n.useState(new Set),[L,P]=n.useState(p!==null?1:0);return i.jsxs("div",{className:"flex h-screen flex-col bg-background text-foreground","data-diff-review-lab":!0,children:[i.jsxs("div",{className:"shrink-0 border-b border-border/20 px-3 py-2 text-xs text-muted-foreground",children:[i.jsxs("button",{type:"button",className:"mr-2 rounded bg-surface-2 px-2 py-1",onClick:()=>c(e=>!e),"aria-pressed":r,children:["Wrap ",r?"on":"off"]}),i.jsx("button",{type:"button",className:"mr-2 rounded bg-surface-2 px-2 py-1",onClick:()=>d(e=>!e),"aria-pressed":l,children:l?"Split":"Unified"}),"DiffReview Lab · ",o.length," mock files · selected: ",i.jsx("span",{"data-lab-selected":!0,children:h??"none"})," · slide ",L]}),i.jsx("div",{className:"min-h-0 flex-1",children:i.jsx(I,{mobile:!0,backLabel:"Back",files:o,groups:k,selectedKey:h,scrollToKey:y.key,scrollToKeyNonce:y.nonce,mode:N,onModeChange:e=>{e!=="ai"&&v(e)},collapsedDirectoryKeys:D,onToggleDirectory:e=>j(s=>{const u=new Set(s);return u.has(e)?u.delete(e):u.add(e),u}),onSelectFile:e=>{$(e.key),R(s=>({key:e.key,nonce:s.nonce+1}))},onMobileSlideChange:P,renderLeading:()=>null,renderStreamBadge:e=>i.jsx("span",{className:"text-[10px] text-muted-foreground",children:e}),wrap:r,diffViewType:l?"split":"unified",activePane:!0})})]})}export{B as DiffReviewLab};
|
|
Binary file
|
|
Binary file
|