@band-app/server 0.16.9 → 0.18.0
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/DockviewBrowserContainer-DjUjHPic.js +5 -0
- package/dist/client/assets/DockviewTerminalContainer-Ms5Ihp7N.js +2 -0
- package/dist/client/assets/TerminalPanel-DFA3TNjT.js +5 -0
- package/dist/client/assets/{_basePickBy-uVqvgsJc.js → _basePickBy-arnwX_WB.js} +1 -1
- package/dist/client/assets/{_baseUniq-7i7L1uNE.js → _baseUniq-P2cIT3Cg.js} +1 -1
- package/dist/client/assets/arc-CQ9imgVi.js +1 -0
- package/dist/client/assets/architectureDiagram-VXUJARFQ-Co2omcgc.js +36 -0
- package/dist/client/assets/{blockDiagram-VD42YOAC-CXQSSz3O.js → blockDiagram-VD42YOAC-CawreF4Q.js} +5 -5
- package/dist/client/assets/{c4Diagram-YG6GDRKO-DplRXCR2.js → c4Diagram-YG6GDRKO-DGgImgFg.js} +3 -3
- package/dist/client/assets/channel-DufC8eM3.js +1 -0
- package/dist/client/assets/chunk-4BX2VUAB-CdUSDb5d.js +1 -0
- package/dist/client/assets/chunk-55IACEB6-CZzsVv3f.js +1 -0
- package/dist/client/assets/{chunk-B4BG7PRW-DlN9tUxh.js → chunk-B4BG7PRW-CglmZrjp.js} +6 -6
- package/dist/client/assets/{chunk-DI55MBZ5-a11zyhq4.js → chunk-DI55MBZ5-Cj2wjbCm.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-aGGVV1yn.js → chunk-FMBD7UC4-BNnnH8qi.js} +1 -1
- package/dist/client/assets/chunk-QN33PNHL-CPGopyck.js +1 -0
- package/dist/client/assets/chunk-QZHKN3VN-DQ2f1Og9.js +1 -0
- package/dist/client/assets/chunk-TZMSLE5B-BkXj9bDE.js +1 -0
- package/dist/client/assets/classDiagram-2ON5EDUG-6OTp0Ijn.js +1 -0
- package/dist/client/assets/classDiagram-v2-WZHVMYZB-6OTp0Ijn.js +1 -0
- package/dist/client/assets/clone-BnAVnjoT.js +1 -0
- package/dist/client/assets/cose-bilkent-S5V4N54A-CWt-uxWy.js +1 -0
- package/dist/client/assets/dagre-6UL2VRFP-CjtHExws.js +4 -0
- package/dist/client/assets/diagram-PSM6KHXK-D63FxUPX.js +24 -0
- package/dist/client/assets/diagram-QEK2KX5R-bcjaRpQy.js +43 -0
- package/dist/client/assets/diagram-S2PKOQOG-BNgqexx6.js +24 -0
- package/dist/client/assets/{erDiagram-Q2GNP2WA-kUd-gmjz.js → erDiagram-Q2GNP2WA-CaMPsNqm.js} +4 -4
- package/dist/client/assets/{flowDiagram-NV44I4VS-CHbLqCKB.js → flowDiagram-NV44I4VS-DGQOeo3P.js} +5 -5
- package/dist/client/assets/ganttDiagram-JELNMOA3-BFJUVCan.js +267 -0
- package/dist/client/assets/gitGraphDiagram-V2S2FVAM-DCGODyFn.js +65 -0
- package/dist/client/assets/{graph-CSi_akmB.js → graph-CfCyZ7oE.js} +1 -1
- package/dist/client/assets/highlighted-body-B3W2YXNL-CxMJmJBc.js +1 -0
- package/dist/client/assets/index-6kWpovKB.js +7 -0
- package/dist/client/assets/index-BJC5nbeg.js +1 -0
- package/dist/client/assets/{index-BPf6S9f1.js → index-BPTxGmQw.js} +1 -1
- package/dist/client/assets/{index-C-6dsPog.js → index-BahJEMSD.js} +1 -1
- package/dist/client/assets/{index-C4ee_PQ0.js → index-BkI1MMcx.js} +5 -5
- package/dist/client/assets/{index-BJP1qdPz.js → index-BomE98r3.js} +1 -1
- package/dist/client/assets/{index-CA1NuCd_.js → index-CUSuiGMh.js} +1 -1
- package/dist/client/assets/{index-5X7JRvnK.js → index-CeneentR.js} +1 -1
- package/dist/client/assets/{index-spwNnd85.js → index-DL6FOBAZ.js} +1 -1
- package/dist/client/assets/{index-oolizINO.js → index-DLyLpX_A.js} +1 -1
- package/dist/client/assets/{index-T_1b5WRg.js → index-DTmrp96f.js} +1 -1
- package/dist/client/assets/{index-B0ZcEU4c.js → index-DU9qIaIU.js} +1 -1
- package/dist/client/assets/{index-udv0M-ix.js → index-DawFiDM_.js} +2 -2
- package/dist/client/assets/index-DgA9NKMV.js +1 -0
- package/dist/client/assets/{index-DfHcm4JM.js → index-DvwEAnql.js} +1 -1
- package/dist/client/assets/{index-CNQHGhCu.js → index-DxSYOqNl.js} +1 -1
- package/dist/client/assets/{index-C-3PAt1d.js → index-DyzP8Zt_.js} +1 -1
- package/dist/client/assets/index-plMivlE6.js +1 -0
- package/dist/client/assets/infoDiagram-HS3SLOUP-CNf_MNW6.js +2 -0
- package/dist/client/assets/{journeyDiagram-XKPGCS4Q-DIY8FE8Z.js → journeyDiagram-XKPGCS4Q-DK-VcCfU.js} +3 -3
- package/dist/client/assets/{kanban-definition-3W4ZIXB7-Cd_JJ8FN.js → kanban-definition-3W4ZIXB7-DqVZenrn.js} +8 -8
- package/dist/client/assets/{layout-Bhb5FQCr.js → layout-DBSNY4Lg.js} +1 -1
- package/dist/client/assets/{linear-Cmk2RyH_.js → linear-hC1V8gzM.js} +1 -1
- package/dist/client/assets/{main-BlRcPsmZ.js → main-BMyWFWYN.js} +227 -226
- package/dist/client/assets/main-evBJruhw.css +1 -0
- package/dist/client/assets/{mindmap-definition-VGOIOE7T-B-WhBVeY.js → mindmap-definition-VGOIOE7T-C0d6PFL2.js} +3 -3
- package/dist/client/assets/pieDiagram-ADFJNKIX-BMZI-9Ki.js +30 -0
- package/dist/client/assets/{quadrantDiagram-AYHSOK5B-DHBoMUCQ.js → quadrantDiagram-AYHSOK5B-CQyKjYLy.js} +2 -2
- package/dist/client/assets/{requirementDiagram-UZGBJVZJ-DjS5RONh.js → requirementDiagram-UZGBJVZJ-DdSXmDi9.js} +2 -2
- package/dist/client/assets/sankeyDiagram-TZEHDZUN-BslS_Swn.js +10 -0
- package/dist/client/assets/{sequenceDiagram-WL72ISMW-CzqbRfb_.js → sequenceDiagram-WL72ISMW-DyxawmBP.js} +1 -1
- package/dist/client/assets/{square-terminal-CNHJa6OY.js → square-terminal-BXuSt2dW.js} +1 -1
- package/dist/client/assets/stateDiagram-FKZM4ZOC-D_5xUVRu.js +1 -0
- package/dist/client/assets/stateDiagram-v2-4FDKWEC3-DDClSQGJ.js +1 -0
- package/dist/client/assets/{timeline-definition-IT6M3QCI-CNKMKDwq.js → timeline-definition-IT6M3QCI-BN5646-s.js} +4 -4
- package/dist/client/assets/{treemap-GDKQZRPO-DCEPrZh7.js → treemap-GDKQZRPO-TYUv7aqt.js} +1 -1
- package/dist/client/assets/workspace._workspaceId-BVuxUwhR.js +1 -0
- package/dist/client/assets/workspace._workspaceId-DCDakxld.js +2 -0
- package/dist/client/assets/{xychartDiagram-PRI3JC2R-Cr18I3A3.js → xychartDiagram-PRI3JC2R-TNRUAqXa.js} +4 -4
- package/dist/migrations/20260525163504_add_projects_has_origin/migration.sql +1 -0
- package/dist/migrations/20260525163504_add_projects_has_origin/snapshot.json +866 -0
- package/dist/migrations/20260527120444_panel_labels/migration.sql +1 -0
- package/dist/migrations/20260527120444_panel_labels/snapshot.json +876 -0
- package/dist/openapi.json +441 -6
- package/dist/server/assets/{DockviewBrowserContainer-Bm7ARaqd.js → DockviewBrowserContainer-BHlHNdlw.js} +42 -22
- package/dist/server/assets/{DockviewTerminalContainer-BbMZgBJ8.js → DockviewTerminalContainer-B4s5M71S.js} +44 -24
- package/dist/server/assets/{TerminalPanel-BmhYCf33.js → TerminalPanel-NJ_oHfHq.js} +1 -1
- package/dist/server/assets/{_basePickBy-C7CNOUDi.js → _basePickBy-BstQwUjx.js} +2 -2
- package/dist/server/assets/{_baseUniq-DeF47vVO.js → _baseUniq-BloU0u1p.js} +1 -1
- package/dist/server/assets/_tanstack-start-manifest_v-DxI647M-.js +4 -0
- package/dist/server/assets/{arc-P5FY7IYH.js → arc-D6eCV6DV.js} +1 -1
- package/dist/server/assets/{architecture-7HQA4BMR-LvprLHYS.js → architecture-7HQA4BMR-CaZikjMP.js} +6 -6
- package/dist/server/assets/{architectureDiagram-VXUJARFQ-Br4iiUzH.js → architectureDiagram-VXUJARFQ-B4vqMbhE.js} +6 -6
- package/dist/server/assets/{blockDiagram-VD42YOAC-BahODDhX.js → blockDiagram-VD42YOAC-CO_-9S_E.js} +6 -6
- package/dist/server/assets/{c4Diagram-YG6GDRKO-CQcZX6cr.js → c4Diagram-YG6GDRKO-CD7rCwaq.js} +2 -2
- package/dist/server/assets/{channel-BmAB_ZKU.js → channel-BMp2wZD3.js} +1 -1
- package/dist/server/assets/{chunk-4BX2VUAB-YUvszr4w.js → chunk-4BX2VUAB-DepEjWoL.js} +1 -1
- package/dist/server/assets/{chunk-55IACEB6-BUgBPiJd.js → chunk-55IACEB6-Bi12nYoO.js} +1 -1
- package/dist/server/assets/{chunk-B4BG7PRW-BxuWeZlV.js → chunk-B4BG7PRW-C_aztpTA.js} +4 -4
- package/dist/server/assets/{chunk-DI55MBZ5-DuGkdvte.js → chunk-DI55MBZ5-DyEwLpXK.js} +3 -3
- package/dist/server/assets/{chunk-FMBD7UC4-qY-BVG34.js → chunk-FMBD7UC4-BInQidDU.js} +1 -1
- package/dist/server/assets/{chunk-QN33PNHL-BM_oi8-e.js → chunk-QN33PNHL-BzMgQvmo.js} +1 -1
- package/dist/server/assets/{chunk-QZHKN3VN-BL6_-at8.js → chunk-QZHKN3VN-DyvushgJ.js} +1 -1
- package/dist/server/assets/{chunk-TZMSLE5B-38NhX5at.js → chunk-TZMSLE5B-Gk23cBC5.js} +1 -1
- package/dist/server/assets/{classDiagram-v2-WZHVMYZB-CwIsZ53p.js → classDiagram-2ON5EDUG-C2IXOi-1.js} +5 -5
- package/dist/server/assets/{classDiagram-2ON5EDUG-CwIsZ53p.js → classDiagram-v2-WZHVMYZB-C2IXOi-1.js} +5 -5
- package/dist/server/assets/{clone-BXHuGM8i.js → clone-Dw9tAHpg.js} +1 -1
- package/dist/server/assets/{cose-bilkent-S5V4N54A-D1CdgGvI.js → cose-bilkent-S5V4N54A-CnP5PKtl.js} +1 -1
- package/dist/server/assets/{dagre-6UL2VRFP-UMvdMLG3.js → dagre-6UL2VRFP-Hm-Wejtu.js} +6 -6
- package/dist/server/assets/{diagram-PSM6KHXK-DtOD93m7.js → diagram-PSM6KHXK-C6URVSbQ.js} +7 -7
- package/dist/server/assets/{diagram-QEK2KX5R-DViyYq-y.js → diagram-QEK2KX5R-D595vsyp.js} +6 -6
- package/dist/server/assets/{diagram-S2PKOQOG-C42mRVEn.js → diagram-S2PKOQOG-C69I055N.js} +6 -6
- package/dist/server/assets/{erDiagram-Q2GNP2WA-D14z9IvB.js → erDiagram-Q2GNP2WA-DKL3OoDz.js} +4 -4
- package/dist/server/assets/{flowDiagram-NV44I4VS-BYBNOZwM.js → flowDiagram-NV44I4VS-vb-7BBaz.js} +5 -5
- package/dist/server/assets/{ganttDiagram-JELNMOA3-CaG3uoK-.js → ganttDiagram-JELNMOA3-CryNIjT5.js} +2 -2
- package/dist/server/assets/{gitGraph-G5XIXVHT-Dsx3dV0R.js → gitGraph-G5XIXVHT-DizYGNvA.js} +6 -6
- package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-CrSfx7b3.js → gitGraphDiagram-V2S2FVAM-BrIjiO3l.js} +7 -7
- package/dist/server/assets/{graph-gBFInK6H.js → graph-mppr1RdG.js} +2 -2
- package/dist/server/assets/{highlighted-body-B3W2YXNL-DjTWk17l.js → highlighted-body-B3W2YXNL-CTUp2Nbw.js} +1 -1
- package/dist/server/assets/{index-2gWBdIrR.js → index-B69XH0ed.js} +2 -2
- package/dist/server/assets/{index-3wtbr7va.js → index-BCNeT6hv.js} +3 -3
- package/dist/server/assets/{index-Bd5jTryJ.js → index-BIskkFyK.js} +2 -2
- package/dist/server/assets/{index-5N2Gh0ba.js → index-BQJWbe4d.js} +2 -2
- package/dist/server/assets/{index-QxgXX0fb.js → index-Be6X1xir.js} +2 -2
- package/dist/server/assets/{index-DZZ6NiTf.js → index-BzMgAG0v.js} +3 -3
- package/dist/server/assets/{index-egmIrLx2.js → index-CDaDncKA.js} +4 -4
- package/dist/server/assets/{index-Bs6a6-xI.js → index-CIHMj9rA.js} +5 -5
- package/dist/server/assets/{index-DsGPaWHg.js → index-CNkj1XIM.js} +2 -2
- package/dist/server/assets/{index-C245EJn1.js → index-CVOspA2K.js} +2 -2
- package/dist/server/assets/{index-Dv-16VYI.js → index-Cb8rr1Cd.js} +2 -2
- package/dist/server/assets/{index-Bw42FDwO.js → index-CbH_b9nh.js} +2 -2
- package/dist/server/assets/{index-6Zof9vm8.js → index-D8W-WZ8Y.js} +1 -1
- package/dist/server/assets/{index-DXgP0Lsu.js → index-DC7cATF0.js} +2 -2
- package/dist/server/assets/{index-B84Urg23.js → index-DJTGOXyp.js} +2 -2
- package/dist/server/assets/{index-CD97pPmc.js → index-Dpy7oNI-.js} +1 -1
- package/dist/server/assets/{index-CwQ5qWPC.js → index-HTfoqKS_.js} +5 -5
- package/dist/server/assets/{index-C3N_Nx6h.js → index-Om1fUMxJ.js} +2 -2
- package/dist/server/assets/{info-VBDWY6EO-CueOsYFZ.js → info-VBDWY6EO-B627l6on.js} +6 -6
- package/dist/server/assets/{infoDiagram-HS3SLOUP-CeyMzohL.js → infoDiagram-HS3SLOUP-Bx-2RIP1.js} +5 -5
- package/dist/server/assets/{journeyDiagram-XKPGCS4Q-ANqeM_TM.js → journeyDiagram-XKPGCS4Q-COrw3Dj9.js} +4 -4
- package/dist/server/assets/{kanban-definition-3W4ZIXB7-B0RkH45q.js → kanban-definition-3W4ZIXB7-CexmIyEk.js} +2 -2
- package/dist/server/assets/{layout-JjP5jdu6.js → layout-CpkjZ_rj.js} +4 -4
- package/dist/server/assets/{linear-BJgoq5J4.js → linear-DhOj0qpX.js} +1 -1
- package/dist/server/assets/{mermaid-3ZIDBTTL-CFPuUseQ.js → mermaid-3ZIDBTTL-8k9Pr9Qn.js} +1 -1
- package/dist/server/assets/{mermaid-parser.core-CKKZ1VFr.js → mermaid-parser.core-ueKoLtpn.js} +11 -11
- package/dist/server/assets/{mindmap-definition-VGOIOE7T-DlEXF5z8.js → mindmap-definition-VGOIOE7T-Lf0rrgEi.js} +3 -3
- package/dist/server/assets/{packet-DYOGHKS2-CvyxHTRM.js → packet-DYOGHKS2-Bv6REKYk.js} +6 -6
- package/dist/server/assets/{pie-VRWISCQL-DfpVZlpC.js → pie-VRWISCQL-DRcS7bNz.js} +6 -6
- package/dist/server/assets/{pieDiagram-ADFJNKIX-CWkrHsNk.js → pieDiagram-ADFJNKIX-m0hjxyCj.js} +7 -7
- package/dist/server/assets/{quadrantDiagram-AYHSOK5B-C25p2xz7.js → quadrantDiagram-AYHSOK5B-omed34Wz.js} +2 -2
- package/dist/server/assets/{radar-ZZBFDIW7-DWqPsDMi.js → radar-ZZBFDIW7-Ba1phWAD.js} +6 -6
- package/dist/server/assets/{requirementDiagram-UZGBJVZJ-ACRVXQGO.js → requirementDiagram-UZGBJVZJ-BCx5DoGU.js} +3 -3
- package/dist/server/assets/{router-GhGSLKfP.js → router-DXfwP2_o.js} +1266 -621
- package/dist/server/assets/{sankeyDiagram-TZEHDZUN-uzNSHudY.js → sankeyDiagram-TZEHDZUN-9M4Rn44L.js} +1 -1
- package/dist/server/assets/{sequenceDiagram-WL72ISMW-C_wFtq8b.js → sequenceDiagram-WL72ISMW-DXMFuhl3.js} +3 -3
- package/dist/server/assets/{square-terminal-cghvb5Il.js → square-terminal-CfM5f-d7.js} +1 -1
- package/dist/server/assets/{stateDiagram-FKZM4ZOC-B9MGwsuS.js → stateDiagram-FKZM4ZOC-CY6AEWa2.js} +8 -8
- package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-CLHd8oUa.js → stateDiagram-v2-4FDKWEC3-BNKDdzaI.js} +4 -4
- package/dist/server/assets/{timeline-definition-IT6M3QCI-CqKot5RT.js → timeline-definition-IT6M3QCI-D_io-Tfq.js} +2 -2
- package/dist/server/assets/{treemap-GDKQZRPO-mMRojqRQ.js → treemap-GDKQZRPO-p84SlzEZ.js} +6 -6
- package/dist/server/assets/workspace._workspaceId-BnLo-dj-.js +23 -0
- package/dist/server/assets/{workspace._workspaceId-DwsRTXCg.js → workspace._workspaceId-CJcudFN3.js} +125 -97
- package/dist/server/assets/{xychartDiagram-PRI3JC2R-j8PckQEj.js → xychartDiagram-PRI3JC2R-Y3f7rM8c.js} +2 -2
- package/dist/server/server.js +2 -2
- package/dist/start-server.mjs +854 -469
- package/package.json +4 -4
- package/dist/client/assets/DockviewBrowserContainer-CCBAkU1p.js +0 -5
- package/dist/client/assets/DockviewTerminalContainer-B9hdDoMz.js +0 -2
- package/dist/client/assets/TerminalPanel-BKfWmj6W.js +0 -5
- package/dist/client/assets/arc-DiYEQGs3.js +0 -1
- package/dist/client/assets/architectureDiagram-VXUJARFQ-C5z8L1iK.js +0 -36
- package/dist/client/assets/channel-BnMJuhcI.js +0 -1
- package/dist/client/assets/chunk-4BX2VUAB-B4Mk_d7A.js +0 -1
- package/dist/client/assets/chunk-55IACEB6-B0hf8Eje.js +0 -1
- package/dist/client/assets/chunk-QN33PNHL-Dit4S-yJ.js +0 -1
- package/dist/client/assets/chunk-QZHKN3VN-L-h1VSi0.js +0 -1
- package/dist/client/assets/chunk-TZMSLE5B-DpK-hWaC.js +0 -1
- package/dist/client/assets/classDiagram-2ON5EDUG-D89oCSXI.js +0 -1
- package/dist/client/assets/classDiagram-v2-WZHVMYZB-D89oCSXI.js +0 -1
- package/dist/client/assets/clone-X7FA7kE2.js +0 -1
- package/dist/client/assets/cose-bilkent-S5V4N54A-CzoIK-3W.js +0 -1
- package/dist/client/assets/dagre-6UL2VRFP-BhfXeb7k.js +0 -4
- package/dist/client/assets/diagram-PSM6KHXK-BwFVwR1b.js +0 -24
- package/dist/client/assets/diagram-QEK2KX5R-BO-CEopy.js +0 -43
- package/dist/client/assets/diagram-S2PKOQOG-BxiH83lN.js +0 -24
- package/dist/client/assets/ganttDiagram-JELNMOA3-B7gBcAFl.js +0 -267
- package/dist/client/assets/gitGraphDiagram-V2S2FVAM-gca_jqKQ.js +0 -65
- package/dist/client/assets/highlighted-body-B3W2YXNL-C2a-lsk8.js +0 -1
- package/dist/client/assets/index-2F-slvqo.js +0 -1
- package/dist/client/assets/index-C4PISrIW.js +0 -1
- package/dist/client/assets/index-CiKTedrx.js +0 -1
- package/dist/client/assets/index-DNrK0iIn.js +0 -7
- package/dist/client/assets/infoDiagram-HS3SLOUP-BK3MmhkJ.js +0 -2
- package/dist/client/assets/main-BLOY6Nam.css +0 -1
- package/dist/client/assets/pieDiagram-ADFJNKIX-CYoHsaM9.js +0 -30
- package/dist/client/assets/sankeyDiagram-TZEHDZUN-DmhEbBY-.js +0 -10
- package/dist/client/assets/stateDiagram-FKZM4ZOC-CafvdTb3.js +0 -1
- package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BkKHK-CQ.js +0 -1
- package/dist/client/assets/useSessionListContext-xer-Wcmf.js +0 -1
- package/dist/client/assets/workspace._workspaceId-CgG1n_1x.js +0 -1
- package/dist/client/assets/workspace._workspaceId.changes-BKX7lUhX.js +0 -1
- package/dist/client/assets/workspace._workspaceId.code-BcnxRdZi.js +0 -1
- package/dist/client/assets/workspace._workspaceId.code._-BbOt6tOD.js +0 -1
- package/dist/client/assets/workspace._workspaceId.code.index-DC2535x-.js +0 -1
- package/dist/client/assets/workspace._workspaceId.index-CNjq1nDf.js +0 -1
- package/dist/client/assets/workspace._workspaceId.terminal-DhYn8I5t.js +0 -2
- package/dist/server/assets/_tanstack-start-manifest_v-BNCQ-izx.js +0 -4
- package/dist/server/assets/useSessionListContext-D_vX6E2e.js +0 -23
- package/dist/server/assets/workspace._workspaceId.changes-C6vwSbUh.js +0 -38
- package/dist/server/assets/workspace._workspaceId.code-Cuj0zH98.js +0 -12
- package/dist/server/assets/workspace._workspaceId.code._-BJdg1-Gs.js +0 -44
- package/dist/server/assets/workspace._workspaceId.code.index-CE_CMD_I.js +0 -36
- package/dist/server/assets/workspace._workspaceId.index-BPhXMwl8.js +0 -112
- package/dist/server/assets/workspace._workspaceId.terminal-BdVDaWNH.js +0 -24
|
@@ -443,7 +443,7 @@ const Link = reactExports.forwardRef(
|
|
|
443
443
|
return reactExports.createElement(_asChild, linkProps, children2);
|
|
444
444
|
}
|
|
445
445
|
);
|
|
446
|
-
let Route$
|
|
446
|
+
let Route$3 = class Route extends BaseRoute {
|
|
447
447
|
/**
|
|
448
448
|
* @deprecated Use the `createRoute` function instead.
|
|
449
449
|
*/
|
|
@@ -495,7 +495,7 @@ let Route$9 = class Route extends BaseRoute {
|
|
|
495
495
|
}
|
|
496
496
|
};
|
|
497
497
|
function createRoute(options) {
|
|
498
|
-
return new Route$
|
|
498
|
+
return new Route$3(
|
|
499
499
|
// TODO: Help us TypeChris, you're our only hope!
|
|
500
500
|
options
|
|
501
501
|
);
|
|
@@ -633,7 +633,7 @@ function lazyRouteComponent(importer, exportName) {
|
|
|
633
633
|
if (!loadPromise) {
|
|
634
634
|
loadPromise = importer().then((res) => {
|
|
635
635
|
loadPromise = void 0;
|
|
636
|
-
comp = res[exportName];
|
|
636
|
+
comp = res[exportName ?? "default"];
|
|
637
637
|
}).catch((err) => {
|
|
638
638
|
error = err;
|
|
639
639
|
if (isModuleNotFoundError(error)) {
|
|
@@ -1093,6 +1093,16 @@ const createLucideIcon = (iconName, iconNode) => {
|
|
|
1093
1093
|
Component.displayName = toPascalCase(iconName);
|
|
1094
1094
|
return Component;
|
|
1095
1095
|
};
|
|
1096
|
+
const __iconNode$1p = [
|
|
1097
|
+
[
|
|
1098
|
+
"path",
|
|
1099
|
+
{
|
|
1100
|
+
d: "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",
|
|
1101
|
+
key: "169zse"
|
|
1102
|
+
}
|
|
1103
|
+
]
|
|
1104
|
+
];
|
|
1105
|
+
const Activity = createLucideIcon("activity", __iconNode$1p);
|
|
1096
1106
|
const __iconNode$1o = [
|
|
1097
1107
|
["path", { d: "M12 17V3", key: "1cwfxf" }],
|
|
1098
1108
|
["path", { d: "m6 11 6 6 6-6", key: "12ii2o" }],
|
|
@@ -40500,53 +40510,53 @@ async function loadLanguage(lang) {
|
|
|
40500
40510
|
try {
|
|
40501
40511
|
switch (lang) {
|
|
40502
40512
|
case "javascript":
|
|
40503
|
-
return import("./index-
|
|
40513
|
+
return import("./index-Be6X1xir.js").then((m2) => m2.javascript());
|
|
40504
40514
|
case "jsx":
|
|
40505
|
-
return import("./index-
|
|
40515
|
+
return import("./index-Be6X1xir.js").then((m2) => m2.javascript({ jsx: true }));
|
|
40506
40516
|
case "typescript":
|
|
40507
|
-
return import("./index-
|
|
40517
|
+
return import("./index-Be6X1xir.js").then(
|
|
40508
40518
|
(m2) => m2.javascript({ typescript: true })
|
|
40509
40519
|
);
|
|
40510
40520
|
case "tsx":
|
|
40511
|
-
return import("./index-
|
|
40521
|
+
return import("./index-Be6X1xir.js").then(
|
|
40512
40522
|
(m2) => m2.javascript({ jsx: true, typescript: true })
|
|
40513
40523
|
);
|
|
40514
40524
|
case "python":
|
|
40515
|
-
return import("./index-
|
|
40525
|
+
return import("./index-CNkj1XIM.js").then((m2) => m2.python());
|
|
40516
40526
|
case "html":
|
|
40517
|
-
return import("./index-
|
|
40527
|
+
return import("./index-CDaDncKA.js").then((m2) => m2.html());
|
|
40518
40528
|
case "css":
|
|
40519
|
-
return import("./index-
|
|
40529
|
+
return import("./index-CVOspA2K.js").then((m2) => m2.css());
|
|
40520
40530
|
case "scss":
|
|
40521
40531
|
case "sass":
|
|
40522
|
-
return import("./index-
|
|
40532
|
+
return import("./index-BCNeT6hv.js").then((m2) => m2.sass());
|
|
40523
40533
|
case "less":
|
|
40524
|
-
return import("./index-
|
|
40534
|
+
return import("./index-BzMgAG0v.js").then((m2) => m2.less());
|
|
40525
40535
|
case "json":
|
|
40526
40536
|
case "jsonc":
|
|
40527
|
-
return import("./index-
|
|
40537
|
+
return import("./index-DC7cATF0.js").then((m2) => m2.json());
|
|
40528
40538
|
case "markdown":
|
|
40529
40539
|
case "mdx":
|
|
40530
|
-
return import("./index-
|
|
40540
|
+
return import("./index-CIHMj9rA.js").then((m2) => m2.markdown());
|
|
40531
40541
|
case "xml":
|
|
40532
|
-
return import("./index-
|
|
40542
|
+
return import("./index-BQJWbe4d.js").then((m2) => m2.xml());
|
|
40533
40543
|
case "yaml":
|
|
40534
|
-
return import("./index-
|
|
40544
|
+
return import("./index-CbH_b9nh.js").then((m2) => m2.yaml());
|
|
40535
40545
|
case "sql":
|
|
40536
|
-
return import("./index-
|
|
40546
|
+
return import("./index-Cb8rr1Cd.js").then((m2) => m2.sql());
|
|
40537
40547
|
case "rust":
|
|
40538
|
-
return import("./index-
|
|
40548
|
+
return import("./index-Om1fUMxJ.js").then((m2) => m2.rust());
|
|
40539
40549
|
case "go":
|
|
40540
|
-
return import("./index-
|
|
40550
|
+
return import("./index-DJTGOXyp.js").then((m2) => m2.go());
|
|
40541
40551
|
case "java":
|
|
40542
|
-
return import("./index-
|
|
40552
|
+
return import("./index-BIskkFyK.js").then((m2) => m2.java());
|
|
40543
40553
|
case "kotlin":
|
|
40544
|
-
return import("./index-
|
|
40554
|
+
return import("./index-BIskkFyK.js").then((m2) => m2.java());
|
|
40545
40555
|
case "c":
|
|
40546
40556
|
case "cpp":
|
|
40547
|
-
return import("./index-
|
|
40557
|
+
return import("./index-B69XH0ed.js").then((m2) => m2.cpp());
|
|
40548
40558
|
case "php":
|
|
40549
|
-
return import("./index-
|
|
40559
|
+
return import("./index-HTfoqKS_.js").then((m2) => m2.php());
|
|
40550
40560
|
// Legacy modes via StreamLanguage
|
|
40551
40561
|
case "bash":
|
|
40552
40562
|
case "fish":
|
|
@@ -40612,7 +40622,7 @@ function baseViewerExtensions(isDark2 = true, opts) {
|
|
|
40612
40622
|
rootDarkStyles.height = "100%";
|
|
40613
40623
|
rootLightStyles.height = "100%";
|
|
40614
40624
|
}
|
|
40615
|
-
const scrollerStyles = naturalHeight ? {
|
|
40625
|
+
const scrollerStyles = naturalHeight ? { overflowX: "auto", height: "auto" } : { overflow: "auto" };
|
|
40616
40626
|
return [
|
|
40617
40627
|
EditorState.readOnly.of(true),
|
|
40618
40628
|
EditorView.editable.of(false),
|
|
@@ -41770,8 +41780,8 @@ const LABELS_COLLAPSE_KEY = "band.projects-list.collapsed-labels";
|
|
|
41770
41780
|
const PINNED_COLLAPSE_KEY = "band.projects-list.collapsed-pinned";
|
|
41771
41781
|
const UNLABELED_KEY = "__unlabeled";
|
|
41772
41782
|
const PINNED_SECTION_ID = "__pinned";
|
|
41773
|
-
const SYNC_EVENT$
|
|
41774
|
-
function read$
|
|
41783
|
+
const SYNC_EVENT$2 = "band:collapse-state-change";
|
|
41784
|
+
function read$2(key2) {
|
|
41775
41785
|
if (typeof window === "undefined") return /* @__PURE__ */ new Set();
|
|
41776
41786
|
try {
|
|
41777
41787
|
const raw2 = window.localStorage.getItem(key2);
|
|
@@ -41783,27 +41793,27 @@ function read$1(key2) {
|
|
|
41783
41793
|
}
|
|
41784
41794
|
return /* @__PURE__ */ new Set();
|
|
41785
41795
|
}
|
|
41786
|
-
function write$
|
|
41796
|
+
function write$2(key2, set2) {
|
|
41787
41797
|
if (typeof window === "undefined") return;
|
|
41788
41798
|
try {
|
|
41789
41799
|
window.localStorage.setItem(key2, JSON.stringify([...set2]));
|
|
41790
41800
|
} catch {
|
|
41791
41801
|
}
|
|
41792
|
-
window.dispatchEvent(new CustomEvent(SYNC_EVENT$
|
|
41802
|
+
window.dispatchEvent(new CustomEvent(SYNC_EVENT$2, { detail: { key: key2 } }));
|
|
41793
41803
|
}
|
|
41794
41804
|
function useCollapseState(storageKey2) {
|
|
41795
|
-
const [collapsed, setCollapsed] = reactExports.useState(() => read$
|
|
41805
|
+
const [collapsed, setCollapsed] = reactExports.useState(() => read$2(storageKey2));
|
|
41796
41806
|
reactExports.useEffect(() => {
|
|
41797
41807
|
const sync = (e2) => {
|
|
41798
41808
|
if (e2 instanceof StorageEvent && e2.key !== storageKey2) return;
|
|
41799
41809
|
if (e2 instanceof CustomEvent && e2.detail?.key !== storageKey2) return;
|
|
41800
|
-
setCollapsed(read$
|
|
41810
|
+
setCollapsed(read$2(storageKey2));
|
|
41801
41811
|
};
|
|
41802
41812
|
window.addEventListener("storage", sync);
|
|
41803
|
-
window.addEventListener(SYNC_EVENT$
|
|
41813
|
+
window.addEventListener(SYNC_EVENT$2, sync);
|
|
41804
41814
|
return () => {
|
|
41805
41815
|
window.removeEventListener("storage", sync);
|
|
41806
|
-
window.removeEventListener(SYNC_EVENT$
|
|
41816
|
+
window.removeEventListener(SYNC_EVENT$2, sync);
|
|
41807
41817
|
};
|
|
41808
41818
|
}, [storageKey2]);
|
|
41809
41819
|
const isCollapsed = reactExports.useCallback((id28) => collapsed.has(id28), [collapsed]);
|
|
@@ -41816,7 +41826,7 @@ function useCollapseState(storageKey2) {
|
|
|
41816
41826
|
} else {
|
|
41817
41827
|
next2.add(id28);
|
|
41818
41828
|
}
|
|
41819
|
-
write$
|
|
41829
|
+
write$2(storageKey2, next2);
|
|
41820
41830
|
return next2;
|
|
41821
41831
|
});
|
|
41822
41832
|
},
|
|
@@ -41828,7 +41838,7 @@ function useCollapseState(storageKey2) {
|
|
|
41828
41838
|
if (!prev2.has(id28)) return prev2;
|
|
41829
41839
|
const next2 = new Set(prev2);
|
|
41830
41840
|
next2.delete(id28);
|
|
41831
|
-
write$
|
|
41841
|
+
write$2(storageKey2, next2);
|
|
41832
41842
|
return next2;
|
|
41833
41843
|
});
|
|
41834
41844
|
},
|
|
@@ -41837,7 +41847,7 @@ function useCollapseState(storageKey2) {
|
|
|
41837
41847
|
const setAll = reactExports.useCallback(
|
|
41838
41848
|
(ids2) => {
|
|
41839
41849
|
const next2 = new Set(ids2);
|
|
41840
|
-
write$
|
|
41850
|
+
write$2(storageKey2, next2);
|
|
41841
41851
|
setCollapsed(next2);
|
|
41842
41852
|
},
|
|
41843
41853
|
[storageKey2]
|
|
@@ -41886,8 +41896,8 @@ function useHooksSetup() {
|
|
|
41886
41896
|
return { state: state2, install };
|
|
41887
41897
|
}
|
|
41888
41898
|
const LABEL_FILTER_KEY = "band.projects-list.label-filter";
|
|
41889
|
-
const SYNC_EVENT = "band:label-filter-change";
|
|
41890
|
-
function read() {
|
|
41899
|
+
const SYNC_EVENT$1 = "band:label-filter-change";
|
|
41900
|
+
function read$1() {
|
|
41891
41901
|
if (typeof window === "undefined") return null;
|
|
41892
41902
|
try {
|
|
41893
41903
|
const raw2 = window.localStorage.getItem(LABEL_FILTER_KEY);
|
|
@@ -41896,7 +41906,7 @@ function read() {
|
|
|
41896
41906
|
return null;
|
|
41897
41907
|
}
|
|
41898
41908
|
}
|
|
41899
|
-
function write(value) {
|
|
41909
|
+
function write$1(value) {
|
|
41900
41910
|
if (typeof window === "undefined") return;
|
|
41901
41911
|
try {
|
|
41902
41912
|
if (value == null) {
|
|
@@ -41906,28 +41916,65 @@ function write(value) {
|
|
|
41906
41916
|
}
|
|
41907
41917
|
} catch {
|
|
41908
41918
|
}
|
|
41909
|
-
window.dispatchEvent(new CustomEvent(SYNC_EVENT));
|
|
41919
|
+
window.dispatchEvent(new CustomEvent(SYNC_EVENT$1));
|
|
41910
41920
|
}
|
|
41911
41921
|
function useLabelFilter() {
|
|
41912
|
-
const [value, setValue] = reactExports.useState(() => read());
|
|
41922
|
+
const [value, setValue] = reactExports.useState(() => read$1());
|
|
41913
41923
|
reactExports.useEffect(() => {
|
|
41914
41924
|
const sync = (e2) => {
|
|
41915
41925
|
if (e2 instanceof StorageEvent && e2.key !== LABEL_FILTER_KEY) return;
|
|
41916
|
-
setValue(read());
|
|
41926
|
+
setValue(read$1());
|
|
41917
41927
|
};
|
|
41918
41928
|
window.addEventListener("storage", sync);
|
|
41919
|
-
window.addEventListener(SYNC_EVENT, sync);
|
|
41929
|
+
window.addEventListener(SYNC_EVENT$1, sync);
|
|
41920
41930
|
return () => {
|
|
41921
41931
|
window.removeEventListener("storage", sync);
|
|
41922
|
-
window.removeEventListener(SYNC_EVENT, sync);
|
|
41932
|
+
window.removeEventListener(SYNC_EVENT$1, sync);
|
|
41923
41933
|
};
|
|
41924
41934
|
}, []);
|
|
41925
41935
|
const setLabelFilter = reactExports.useCallback((next2) => {
|
|
41926
|
-
write(next2);
|
|
41936
|
+
write$1(next2);
|
|
41927
41937
|
setValue(next2);
|
|
41928
41938
|
}, []);
|
|
41929
41939
|
return [value, setLabelFilter];
|
|
41930
41940
|
}
|
|
41941
|
+
const LABEL_LAST_WORKSPACE_KEY = "band.projects-list.label-last-workspace";
|
|
41942
|
+
const SYNC_EVENT = "band:label-last-workspace-change";
|
|
41943
|
+
function read() {
|
|
41944
|
+
if (typeof window === "undefined") return {};
|
|
41945
|
+
try {
|
|
41946
|
+
const raw2 = window.localStorage.getItem(LABEL_LAST_WORKSPACE_KEY);
|
|
41947
|
+
if (!raw2) return {};
|
|
41948
|
+
const parsed = JSON.parse(raw2);
|
|
41949
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
41950
|
+
const out = {};
|
|
41951
|
+
for (const [k2, v2] of Object.entries(parsed)) {
|
|
41952
|
+
if (typeof k2 === "string" && typeof v2 === "string") out[k2] = v2;
|
|
41953
|
+
}
|
|
41954
|
+
return out;
|
|
41955
|
+
}
|
|
41956
|
+
} catch {
|
|
41957
|
+
}
|
|
41958
|
+
return {};
|
|
41959
|
+
}
|
|
41960
|
+
function write(value) {
|
|
41961
|
+
if (typeof window === "undefined") return;
|
|
41962
|
+
try {
|
|
41963
|
+
window.localStorage.setItem(LABEL_LAST_WORKSPACE_KEY, JSON.stringify(value));
|
|
41964
|
+
window.dispatchEvent(new CustomEvent(SYNC_EVENT));
|
|
41965
|
+
} catch {
|
|
41966
|
+
}
|
|
41967
|
+
}
|
|
41968
|
+
function useLabelLastWorkspace() {
|
|
41969
|
+
const getLastWorkspace = reactExports.useCallback((labelId) => read()[labelId], []);
|
|
41970
|
+
const setLastWorkspace = reactExports.useCallback((labelId, workspaceId) => {
|
|
41971
|
+
const current = read();
|
|
41972
|
+
if (current[labelId] === workspaceId) return;
|
|
41973
|
+
write({ ...current, [labelId]: workspaceId });
|
|
41974
|
+
}, []);
|
|
41975
|
+
return { getLastWorkspace, setLastWorkspace };
|
|
41976
|
+
}
|
|
41977
|
+
const EMPTY_PROJECTS = Object.freeze([]);
|
|
41931
41978
|
function useProjects() {
|
|
41932
41979
|
const adapter2 = useAdapter();
|
|
41933
41980
|
const { data, isLoading, error } = useQuery({
|
|
@@ -41936,7 +41983,7 @@ function useProjects() {
|
|
|
41936
41983
|
refetchInterval: 3e4
|
|
41937
41984
|
});
|
|
41938
41985
|
return {
|
|
41939
|
-
projects: data ??
|
|
41986
|
+
projects: data ?? EMPTY_PROJECTS,
|
|
41940
41987
|
isLoading,
|
|
41941
41988
|
error: error ? String(error) : null
|
|
41942
41989
|
};
|
|
@@ -46654,6 +46701,11 @@ const WorkspaceCard = reactExports.memo(function WorkspaceCard2({
|
|
|
46654
46701
|
// "currently-active link in a list of related links".
|
|
46655
46702
|
"data-active": isActive || void 0,
|
|
46656
46703
|
"aria-current": isActive ? "page" : void 0,
|
|
46704
|
+
// Stable test hook keyed by workspaceId so integration tests can right-
|
|
46705
|
+
// click the specific card (issue #508). Branches with `/` in them are
|
|
46706
|
+
// collapsed to `-` by `toWorkspaceId` so the attribute value matches
|
|
46707
|
+
// the canonical workspace id used everywhere else in the UI.
|
|
46708
|
+
"data-testid": `project-list__workspace-card--${workspaceId}`,
|
|
46657
46709
|
onClick: (e2) => {
|
|
46658
46710
|
e2.stopPropagation();
|
|
46659
46711
|
handleClick();
|
|
@@ -47218,6 +47270,7 @@ function ProjectList({ labelFilter }) {
|
|
|
47218
47270
|
{
|
|
47219
47271
|
ref: containerRef,
|
|
47220
47272
|
tabIndex: -1,
|
|
47273
|
+
"data-testid": "project-list__root",
|
|
47221
47274
|
onKeyDown: handleKeyDown,
|
|
47222
47275
|
onPointerDown: () => {
|
|
47223
47276
|
keyboardNavRef.current = false;
|
|
@@ -48225,7 +48278,10 @@ function DashboardShell({ toolbarMenuItems, hideTitleBar, hideMenu }) {
|
|
|
48225
48278
|
const [showAddDialog, setShowAddDialog] = reactExports.useState(false);
|
|
48226
48279
|
const [showErrorDialog, setShowErrorDialog] = reactExports.useState(false);
|
|
48227
48280
|
const [showSettingsDialog, setShowSettingsDialog] = reactExports.useState(false);
|
|
48228
|
-
const [labelFilter,
|
|
48281
|
+
const [labelFilter, persistLabelFilter] = useLabelFilter();
|
|
48282
|
+
const { getLastWorkspace, setLastWorkspace } = useLabelLastWorkspace();
|
|
48283
|
+
const capabilities2 = useCapabilities();
|
|
48284
|
+
const activeWorkspaceId = useDashboardStore((s2) => s2.activeWorkspaceId);
|
|
48229
48285
|
const { state: hooksState, install: installHooks } = useHooksSetup();
|
|
48230
48286
|
const { state: cliState, install: installCli } = useCliSetup();
|
|
48231
48287
|
const { state: updateState, install: installUpdate } = useAppUpdate();
|
|
@@ -48251,6 +48307,58 @@ function DashboardShell({ toolbarMenuItems, hideTitleBar, hideMenu }) {
|
|
|
48251
48307
|
() => labelFilter ? labels.find((l4) => l4.id === labelFilter) : null,
|
|
48252
48308
|
[labelFilter, labels]
|
|
48253
48309
|
);
|
|
48310
|
+
const findProjectForWorkspace = reactExports.useCallback(
|
|
48311
|
+
(workspaceId) => projects.find(
|
|
48312
|
+
(p2) => p2.worktrees.some((wt2) => toWorkspaceId(p2.name, wt2.branch) === workspaceId)
|
|
48313
|
+
),
|
|
48314
|
+
[projects]
|
|
48315
|
+
);
|
|
48316
|
+
const lastSeenActiveRef = reactExports.useRef(activeWorkspaceId);
|
|
48317
|
+
reactExports.useEffect(() => {
|
|
48318
|
+
if (!activeWorkspaceId) {
|
|
48319
|
+
lastSeenActiveRef.current = null;
|
|
48320
|
+
return;
|
|
48321
|
+
}
|
|
48322
|
+
if (!labelFilter) {
|
|
48323
|
+
lastSeenActiveRef.current = activeWorkspaceId;
|
|
48324
|
+
return;
|
|
48325
|
+
}
|
|
48326
|
+
if (lastSeenActiveRef.current === activeWorkspaceId) return;
|
|
48327
|
+
lastSeenActiveRef.current = activeWorkspaceId;
|
|
48328
|
+
const project = findProjectForWorkspace(activeWorkspaceId);
|
|
48329
|
+
if (!project || project.label !== labelFilter) return;
|
|
48330
|
+
setLastWorkspace(labelFilter, activeWorkspaceId);
|
|
48331
|
+
}, [labelFilter, activeWorkspaceId, setLastWorkspace, findProjectForWorkspace]);
|
|
48332
|
+
const setLabelFilter = reactExports.useCallback(
|
|
48333
|
+
(newLabel) => {
|
|
48334
|
+
if (newLabel === labelFilter) return;
|
|
48335
|
+
if (labelFilter && activeWorkspaceId) {
|
|
48336
|
+
const project = findProjectForWorkspace(activeWorkspaceId);
|
|
48337
|
+
if (project && project.label === labelFilter) {
|
|
48338
|
+
setLastWorkspace(labelFilter, activeWorkspaceId);
|
|
48339
|
+
}
|
|
48340
|
+
}
|
|
48341
|
+
persistLabelFilter(newLabel);
|
|
48342
|
+
if (!newLabel) return;
|
|
48343
|
+
const target = getLastWorkspace(newLabel);
|
|
48344
|
+
if (!target || target === activeWorkspaceId) return;
|
|
48345
|
+
const targetProject = findProjectForWorkspace(target);
|
|
48346
|
+
if (!targetProject || targetProject.label !== newLabel) return;
|
|
48347
|
+
const href = capabilities2.getWorkspaceHref?.(target);
|
|
48348
|
+
if (href && capabilities2.navigate) {
|
|
48349
|
+
capabilities2.navigate(href);
|
|
48350
|
+
}
|
|
48351
|
+
},
|
|
48352
|
+
[
|
|
48353
|
+
labelFilter,
|
|
48354
|
+
activeWorkspaceId,
|
|
48355
|
+
persistLabelFilter,
|
|
48356
|
+
setLastWorkspace,
|
|
48357
|
+
getLastWorkspace,
|
|
48358
|
+
findProjectForWorkspace,
|
|
48359
|
+
capabilities2
|
|
48360
|
+
]
|
|
48361
|
+
);
|
|
48254
48362
|
reactExports.useEffect(() => {
|
|
48255
48363
|
const globalKey = "__bandOpenSettings";
|
|
48256
48364
|
const win = window;
|
|
@@ -48349,6 +48457,7 @@ function DashboardShell({ toolbarMenuItems, hideTitleBar, hideMenu }) {
|
|
|
48349
48457
|
{
|
|
48350
48458
|
size: "sm",
|
|
48351
48459
|
variant: "ghost",
|
|
48460
|
+
"data-testid": "dashboard__label-filter-trigger",
|
|
48352
48461
|
className: `min-w-0 text-sm h-7 px-2 gap-1.5 ${labelFilter ? "bg-accent text-accent-foreground" : "text-muted-foreground"}`,
|
|
48353
48462
|
children: activeLabel ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
48354
48463
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -48366,27 +48475,42 @@ function DashboardShell({ toolbarMenuItems, hideTitleBar, hideMenu }) {
|
|
|
48366
48475
|
}
|
|
48367
48476
|
) }),
|
|
48368
48477
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuContent, { align: "start", children: [
|
|
48369
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
48370
|
-
|
|
48371
|
-
|
|
48372
|
-
|
|
48373
|
-
|
|
48374
|
-
|
|
48375
|
-
|
|
48376
|
-
|
|
48377
|
-
|
|
48378
|
-
|
|
48379
|
-
|
|
48380
|
-
|
|
48381
|
-
|
|
48382
|
-
|
|
48383
|
-
|
|
48384
|
-
|
|
48385
|
-
|
|
48386
|
-
|
|
48387
|
-
|
|
48388
|
-
|
|
48389
|
-
|
|
48478
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
48479
|
+
DropdownMenuItem,
|
|
48480
|
+
{
|
|
48481
|
+
"data-testid": "dashboard__label-filter-item--all",
|
|
48482
|
+
onClick: () => setLabelFilter(null),
|
|
48483
|
+
children: [
|
|
48484
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Tag$1, { className: "size-3.5 shrink-0 mr-2 text-muted-foreground" }),
|
|
48485
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: "All" }),
|
|
48486
|
+
!labelFilter && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 ml-2 shrink-0" }),
|
|
48487
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-auto pl-3 text-xs text-muted-foreground tracking-widest", children: "⌘0" })
|
|
48488
|
+
]
|
|
48489
|
+
}
|
|
48490
|
+
),
|
|
48491
|
+
labels.map((lbl, idx) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
48492
|
+
DropdownMenuItem,
|
|
48493
|
+
{
|
|
48494
|
+
"data-testid": `dashboard__label-filter-item--${lbl.id}`,
|
|
48495
|
+
onClick: () => setLabelFilter(lbl.id),
|
|
48496
|
+
children: [
|
|
48497
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
48498
|
+
"span",
|
|
48499
|
+
{
|
|
48500
|
+
className: "size-2.5 rounded-full shrink-0 mr-2",
|
|
48501
|
+
style: { backgroundColor: lbl.color }
|
|
48502
|
+
}
|
|
48503
|
+
),
|
|
48504
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: lbl.name }),
|
|
48505
|
+
labelFilter === lbl.id && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 ml-2 shrink-0" }),
|
|
48506
|
+
idx < 9 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-auto pl-3 text-xs text-muted-foreground tracking-widest", children: [
|
|
48507
|
+
"⌘",
|
|
48508
|
+
idx + 1
|
|
48509
|
+
] })
|
|
48510
|
+
]
|
|
48511
|
+
},
|
|
48512
|
+
lbl.id
|
|
48513
|
+
))
|
|
48390
48514
|
] })
|
|
48391
48515
|
] })
|
|
48392
48516
|
] }) }),
|
|
@@ -53702,6 +53826,7 @@ function storeViewMode(mode) {
|
|
|
53702
53826
|
}
|
|
53703
53827
|
const UNCOMMITTED_VALUE = "__uncommitted__";
|
|
53704
53828
|
const EXPAND_ALL_KEY = "band:diff-expand-all";
|
|
53829
|
+
const MAX_MOUNTED_EDITORS = 50;
|
|
53705
53830
|
function getStoredExpandAll() {
|
|
53706
53831
|
try {
|
|
53707
53832
|
return localStorage.getItem(EXPAND_ALL_KEY) === "true";
|
|
@@ -54055,6 +54180,8 @@ function LazyFileRow({
|
|
|
54055
54180
|
isOpen,
|
|
54056
54181
|
isActive,
|
|
54057
54182
|
scrollContainerEl,
|
|
54183
|
+
isMountedAllowed,
|
|
54184
|
+
onRowVisible,
|
|
54058
54185
|
onToggle,
|
|
54059
54186
|
onLoadMoreContext,
|
|
54060
54187
|
onShowFullFile,
|
|
@@ -54067,7 +54194,8 @@ function LazyFileRow({
|
|
|
54067
54194
|
const [revertDialogOpen, setRevertDialogOpen] = reactExports.useState(false);
|
|
54068
54195
|
const containerRef = reactExports.useRef(null);
|
|
54069
54196
|
const diffBodyRef = reactExports.useRef(null);
|
|
54070
|
-
const [
|
|
54197
|
+
const [everMounted, setEverMounted] = reactExports.useState(false);
|
|
54198
|
+
const shouldRender = everMounted && isMountedAllowed;
|
|
54071
54199
|
const [editorRendered, setEditorRendered] = reactExports.useState(false);
|
|
54072
54200
|
const editorRenderRafRef = reactExports.useRef(null);
|
|
54073
54201
|
reactExports.useEffect(() => {
|
|
@@ -54078,9 +54206,11 @@ function LazyFileRow({
|
|
|
54078
54206
|
}
|
|
54079
54207
|
};
|
|
54080
54208
|
}, []);
|
|
54209
|
+
const onRowVisibleRef = reactExports.useRef(onRowVisible);
|
|
54210
|
+
onRowVisibleRef.current = onRowVisible;
|
|
54081
54211
|
reactExports.useEffect(() => {
|
|
54082
54212
|
if (!isOpen) {
|
|
54083
|
-
|
|
54213
|
+
setEverMounted(false);
|
|
54084
54214
|
return;
|
|
54085
54215
|
}
|
|
54086
54216
|
const el = containerRef.current;
|
|
@@ -54092,7 +54222,10 @@ function LazyFileRow({
|
|
|
54092
54222
|
if (!entry) return;
|
|
54093
54223
|
const root2 = entry.rootBounds;
|
|
54094
54224
|
if (root2 && root2.width === 0 && root2.height === 0) return;
|
|
54095
|
-
|
|
54225
|
+
if (entry.isIntersecting) {
|
|
54226
|
+
setEverMounted(true);
|
|
54227
|
+
onRowVisibleRef.current(filename);
|
|
54228
|
+
}
|
|
54096
54229
|
},
|
|
54097
54230
|
{
|
|
54098
54231
|
root: scrollContainerEl,
|
|
@@ -54105,9 +54238,9 @@ function LazyFileRow({
|
|
|
54105
54238
|
);
|
|
54106
54239
|
observer.observe(el);
|
|
54107
54240
|
return () => observer.disconnect();
|
|
54108
|
-
}, [isOpen, scrollContainerEl]);
|
|
54241
|
+
}, [isOpen, scrollContainerEl, filename]);
|
|
54109
54242
|
reactExports.useEffect(() => {
|
|
54110
|
-
if (!
|
|
54243
|
+
if (!shouldRender || !editorRendered || !onMeasureHeight) return;
|
|
54111
54244
|
const el = diffBodyRef.current;
|
|
54112
54245
|
if (!el) return;
|
|
54113
54246
|
if (typeof ResizeObserver === "undefined") return;
|
|
@@ -54132,7 +54265,7 @@ function LazyFileRow({
|
|
|
54132
54265
|
if (frame2 != null) cancelAnimationFrame(frame2);
|
|
54133
54266
|
observer.disconnect();
|
|
54134
54267
|
};
|
|
54135
|
-
}, [
|
|
54268
|
+
}, [shouldRender, editorRendered, filename, onMeasureHeight]);
|
|
54136
54269
|
const handleEditorViews = reactExports.useCallback(
|
|
54137
54270
|
(views) => {
|
|
54138
54271
|
onEditorViews?.(filename, views);
|
|
@@ -54152,11 +54285,11 @@ function LazyFileRow({
|
|
|
54152
54285
|
[filename, onEditorViews]
|
|
54153
54286
|
);
|
|
54154
54287
|
reactExports.useEffect(() => {
|
|
54155
|
-
if (!isOpen || !
|
|
54288
|
+
if (!isOpen || !shouldRender) return;
|
|
54156
54289
|
return () => {
|
|
54157
54290
|
onEditorViews?.(filename, []);
|
|
54158
54291
|
};
|
|
54159
|
-
}, [isOpen,
|
|
54292
|
+
}, [isOpen, shouldRender, filename, onEditorViews]);
|
|
54160
54293
|
const toggle = reactExports.useCallback(() => {
|
|
54161
54294
|
onToggle(filename);
|
|
54162
54295
|
}, [filename, onToggle]);
|
|
@@ -54183,6 +54316,7 @@ function LazyFileRow({
|
|
|
54183
54316
|
{
|
|
54184
54317
|
type: "button",
|
|
54185
54318
|
onClick: toggle,
|
|
54319
|
+
"data-testid": "diff-view__file-row-toggle",
|
|
54186
54320
|
className: "sticky top-0 z-10 flex w-full items-center gap-2 bg-muted px-4 py-2.5 text-left text-sm hover:bg-accent",
|
|
54187
54321
|
children: [
|
|
54188
54322
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -54286,26 +54420,39 @@ function LazyFileRow({
|
|
|
54286
54420
|
),
|
|
54287
54421
|
isOpen && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-t border-border/20 bg-muted/30", children: [
|
|
54288
54422
|
diffError && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-4 py-4 text-sm text-destructive", children: diffError }),
|
|
54289
|
-
diff2 !== null && (
|
|
54423
|
+
diff2 !== null && (shouldRender ? (
|
|
54290
54424
|
// Wrapper is observed by the ResizeObserver in the effect
|
|
54291
54425
|
// above. Its rendered height — "Show full file" bar plus the
|
|
54292
54426
|
// CodeMirror editor — is reported back as
|
|
54293
54427
|
// `measuredHeight`, then reused verbatim as the placeholder
|
|
54294
|
-
// height on the next unmount cycle
|
|
54428
|
+
// height on the next unmount cycle (a never-visited row or
|
|
54429
|
+
// an LRU-evicted one).
|
|
54295
54430
|
//
|
|
54296
54431
|
// The `minHeight` hold prevents a layout shift during the
|
|
54297
|
-
// window between (a)
|
|
54298
|
-
// the editor's async `setup` finishing (loadLanguage
|
|
54299
|
-
// + new MergeView() + first paint). Without it the
|
|
54300
|
-
// is empty-auto-height for that window, collapsing
|
|
54301
|
-
// to the "Show full file" bar (~30px) and pushing
|
|
54302
|
-
// row below it upward; when the editor paints they
|
|
54303
|
-
// back down. We pin the wrapper to the
|
|
54304
|
-
// height (the same value the placeholder
|
|
54305
|
-
// `editorRendered` flips, then let the
|
|
54306
|
-
// height take over. The ResizeObserver
|
|
54307
|
-
// `editorRendered` is true (see deps
|
|
54308
|
-
// value never bleeds into the
|
|
54432
|
+
// window between (a) `shouldRender` flipping to true and
|
|
54433
|
+
// (b) the editor's async `setup` finishing (loadLanguage
|
|
54434
|
+
// await + new MergeView() + first paint). Without it the
|
|
54435
|
+
// wrapper is empty-auto-height for that window, collapsing
|
|
54436
|
+
// the row to the "Show full file" bar (~30px) and pushing
|
|
54437
|
+
// every row below it upward; when the editor paints they
|
|
54438
|
+
// snap back down. We pin the wrapper to the
|
|
54439
|
+
// cached/estimated height (the same value the placeholder
|
|
54440
|
+
// uses) until `editorRendered` flips, then let the
|
|
54441
|
+
// editor's natural height take over. The ResizeObserver
|
|
54442
|
+
// only attaches once `editorRendered` is true (see deps
|
|
54443
|
+
// above), so the held value never bleeds into the
|
|
54444
|
+
// measuredHeight cache.
|
|
54445
|
+
//
|
|
54446
|
+
// Mount-once: once `shouldRender` flips true, it stays
|
|
54447
|
+
// true across scroll-aways. The editor's natural height
|
|
54448
|
+
// remains in the layout — the row stays the same size
|
|
54449
|
+
// whether the user is currently looking at it or
|
|
54450
|
+
// scrolled past — so there's no scroll-shift trade-off
|
|
54451
|
+
// to manage. The browser handles culling offscreen tiles
|
|
54452
|
+
// cheaply; the only thing that brings `shouldRender`
|
|
54453
|
+
// back to false is collapse / LRU eviction / target
|
|
54454
|
+
// change, all of which deliberately tear the editor
|
|
54455
|
+
// down.
|
|
54309
54456
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
54310
54457
|
"div",
|
|
54311
54458
|
{
|
|
@@ -54337,10 +54484,12 @@ function LazyFileRow({
|
|
|
54337
54484
|
) : (
|
|
54338
54485
|
// Placeholder occupying the SAME pixel height the CodeMirror
|
|
54339
54486
|
// editor would render at, so the row's overall size doesn't
|
|
54340
|
-
// change when
|
|
54341
|
-
//
|
|
54342
|
-
//
|
|
54343
|
-
//
|
|
54487
|
+
// change when LRU eviction tears the editor down (or while
|
|
54488
|
+
// a never-visited row waits for its first IO intersect).
|
|
54489
|
+
// Without this, switching the body between editor and
|
|
54490
|
+
// placeholder would push everything below upward —
|
|
54491
|
+
// visually identical to a layout shift, even though no
|
|
54492
|
+
// content actually moved.
|
|
54344
54493
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { "aria-hidden": true, style: { height: placeholderHeight } })
|
|
54345
54494
|
))
|
|
54346
54495
|
] })
|
|
@@ -54394,6 +54543,31 @@ function DiffView({
|
|
|
54394
54543
|
const [expandedFiles, setExpandedFiles] = reactExports.useState(/* @__PURE__ */ new Set());
|
|
54395
54544
|
const expandedFilesRef = reactExports.useRef(expandedFiles);
|
|
54396
54545
|
expandedFilesRef.current = expandedFiles;
|
|
54546
|
+
const [mountedFiles, setMountedFiles] = reactExports.useState(() => /* @__PURE__ */ new Set());
|
|
54547
|
+
const mountRecencyRef = reactExports.useRef(/* @__PURE__ */ new Map());
|
|
54548
|
+
const recencyCounterRef = reactExports.useRef(0);
|
|
54549
|
+
const handleRowVisible = reactExports.useCallback((filename) => {
|
|
54550
|
+
recencyCounterRef.current += 1;
|
|
54551
|
+
mountRecencyRef.current.set(filename, recencyCounterRef.current);
|
|
54552
|
+
setMountedFiles((prev2) => {
|
|
54553
|
+
if (prev2.has(filename) && prev2.size <= MAX_MOUNTED_EDITORS) return prev2;
|
|
54554
|
+
const next2 = new Set(prev2);
|
|
54555
|
+
next2.add(filename);
|
|
54556
|
+
if (next2.size > MAX_MOUNTED_EDITORS) {
|
|
54557
|
+
let oldestFilename = null;
|
|
54558
|
+
let oldestRecency = Number.POSITIVE_INFINITY;
|
|
54559
|
+
for (const candidate of next2) {
|
|
54560
|
+
const r2 = mountRecencyRef.current.get(candidate) ?? 0;
|
|
54561
|
+
if (r2 < oldestRecency) {
|
|
54562
|
+
oldestRecency = r2;
|
|
54563
|
+
oldestFilename = candidate;
|
|
54564
|
+
}
|
|
54565
|
+
}
|
|
54566
|
+
if (oldestFilename !== null) next2.delete(oldestFilename);
|
|
54567
|
+
}
|
|
54568
|
+
return next2;
|
|
54569
|
+
});
|
|
54570
|
+
}, []);
|
|
54397
54571
|
const prevFilenamesRef = reactExports.useRef(/* @__PURE__ */ new Set());
|
|
54398
54572
|
const prevFingerprintRef = reactExports.useRef("");
|
|
54399
54573
|
const [viewMode, setViewModeState] = reactExports.useState(getStoredViewMode);
|
|
@@ -54805,6 +54979,8 @@ function DiffView({
|
|
|
54805
54979
|
summaryRef.current = null;
|
|
54806
54980
|
setDiffCache(/* @__PURE__ */ new Map());
|
|
54807
54981
|
setExpandedFiles(/* @__PURE__ */ new Set());
|
|
54982
|
+
setMountedFiles(/* @__PURE__ */ new Set());
|
|
54983
|
+
mountRecencyRef.current.clear();
|
|
54808
54984
|
prevFilenamesRef.current = /* @__PURE__ */ new Set();
|
|
54809
54985
|
prevFingerprintRef.current = "";
|
|
54810
54986
|
const fetchSummary = (forceRefresh = false) => {
|
|
@@ -54983,6 +55159,23 @@ function DiffView({
|
|
|
54983
55159
|
if (shouldDispatchFetch(diffCacheRef.current.get(n2))) fetchFileDiff(n2);
|
|
54984
55160
|
}
|
|
54985
55161
|
}, [filenames, expandAll, fetchFileDiff]);
|
|
55162
|
+
reactExports.useEffect(() => {
|
|
55163
|
+
const live = new Set(filenames);
|
|
55164
|
+
setMountedFiles((prev2) => {
|
|
55165
|
+
let changed = false;
|
|
55166
|
+
const next2 = new Set(prev2);
|
|
55167
|
+
for (const name2 of prev2) {
|
|
55168
|
+
if (!live.has(name2)) {
|
|
55169
|
+
next2.delete(name2);
|
|
55170
|
+
changed = true;
|
|
55171
|
+
}
|
|
55172
|
+
}
|
|
55173
|
+
return changed ? next2 : prev2;
|
|
55174
|
+
});
|
|
55175
|
+
for (const name2 of Array.from(mountRecencyRef.current.keys())) {
|
|
55176
|
+
if (!live.has(name2)) mountRecencyRef.current.delete(name2);
|
|
55177
|
+
}
|
|
55178
|
+
}, [filenames]);
|
|
54986
55179
|
const focusedDiffEntry = focusedFile && diffCache.get(focusedFile.path);
|
|
54987
55180
|
const focusedLineCounts = focusedDiffEntry ? focusedDiffEntry.lineCounts : null;
|
|
54988
55181
|
const lastScrollRef = reactExports.useRef({
|
|
@@ -55334,42 +55527,52 @@ function DiffView({
|
|
|
55334
55527
|
)
|
|
55335
55528
|
}
|
|
55336
55529
|
),
|
|
55337
|
-
hasChanges && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
55338
|
-
|
|
55339
|
-
|
|
55340
|
-
|
|
55341
|
-
|
|
55342
|
-
|
|
55343
|
-
|
|
55344
|
-
|
|
55345
|
-
|
|
55346
|
-
|
|
55347
|
-
|
|
55348
|
-
|
|
55349
|
-
|
|
55350
|
-
|
|
55351
|
-
|
|
55352
|
-
|
|
55353
|
-
|
|
55354
|
-
|
|
55355
|
-
|
|
55356
|
-
|
|
55357
|
-
|
|
55358
|
-
|
|
55359
|
-
|
|
55360
|
-
|
|
55361
|
-
|
|
55362
|
-
|
|
55363
|
-
|
|
55364
|
-
|
|
55365
|
-
|
|
55366
|
-
|
|
55367
|
-
|
|
55368
|
-
|
|
55369
|
-
|
|
55370
|
-
|
|
55371
|
-
|
|
55372
|
-
|
|
55530
|
+
hasChanges && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
55531
|
+
"div",
|
|
55532
|
+
{
|
|
55533
|
+
ref: setScrollContainerNode,
|
|
55534
|
+
"data-testid": "diff-view__scroller",
|
|
55535
|
+
className: "min-h-0 flex-1 overflow-y-auto",
|
|
55536
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-3 p-3", children: filenames.map((filename, index2) => {
|
|
55537
|
+
const isLast = index2 === filenames.length - 1;
|
|
55538
|
+
const row2 = /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
55539
|
+
LazyFileRow,
|
|
55540
|
+
{
|
|
55541
|
+
filename,
|
|
55542
|
+
status: fileStatuses[filename],
|
|
55543
|
+
cacheEntry: diffCache.get(filename),
|
|
55544
|
+
viewMode: effectiveViewMode,
|
|
55545
|
+
isOpen: expandedFiles.has(filename),
|
|
55546
|
+
isActive: activeFile === filename,
|
|
55547
|
+
scrollContainerEl,
|
|
55548
|
+
isMountedAllowed: mountedFiles.has(filename),
|
|
55549
|
+
onRowVisible: handleRowVisible,
|
|
55550
|
+
onToggle: handleToggleFile,
|
|
55551
|
+
onLoadMoreContext: handleLoadMoreContext,
|
|
55552
|
+
onShowFullFile: handleShowFullFile,
|
|
55553
|
+
onOpenFile,
|
|
55554
|
+
onRevertFile: adapter2.revertFile ? handleRevertFile : void 0,
|
|
55555
|
+
onEditorViews: handleEditorViews,
|
|
55556
|
+
onMeasureHeight: handleMeasureHeight
|
|
55557
|
+
},
|
|
55558
|
+
filename
|
|
55559
|
+
);
|
|
55560
|
+
if (!isLast) return row2;
|
|
55561
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
55562
|
+
"div",
|
|
55563
|
+
{
|
|
55564
|
+
className: "flex flex-col",
|
|
55565
|
+
style: scrollContainerHeight > 0 ? { minHeight: scrollContainerHeight } : void 0,
|
|
55566
|
+
children: [
|
|
55567
|
+
row2,
|
|
55568
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "flex-1" })
|
|
55569
|
+
]
|
|
55570
|
+
},
|
|
55571
|
+
`${filename}-last-wrapper`
|
|
55572
|
+
);
|
|
55573
|
+
}) })
|
|
55574
|
+
}
|
|
55575
|
+
),
|
|
55373
55576
|
gitOpStatus && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
55374
55577
|
"div",
|
|
55375
55578
|
{
|
|
@@ -64309,22 +64512,16 @@ class WebDashboardAdapter {
|
|
|
64309
64512
|
});
|
|
64310
64513
|
}
|
|
64311
64514
|
}
|
|
64312
|
-
const VALID_TAB_PREFIXES = ["/changes", "/code", "/terminal"];
|
|
64313
64515
|
class WebCapabilities {
|
|
64314
64516
|
copyPath = false;
|
|
64315
64517
|
navigate;
|
|
64518
|
+
// The workspace URL no longer carries a sub-path for the active tab —
|
|
64519
|
+
// tab state lives entirely inside `MobileWorkspaceLayout`, and the
|
|
64520
|
+
// desktop dockview at AppShell renders every panel regardless of URL.
|
|
64521
|
+
// See issue #467 for the refactor that removed the `band-tab:` session
|
|
64522
|
+
// store and the `/changes` / `/code` / `/terminal` child routes.
|
|
64316
64523
|
getWorkspaceHref(workspaceId) {
|
|
64317
|
-
|
|
64318
|
-
try {
|
|
64319
|
-
const stored = sessionStorage.getItem(`band-tab:${workspaceId}`);
|
|
64320
|
-
if (stored !== null) {
|
|
64321
|
-
if (stored === "" || VALID_TAB_PREFIXES.some((p2) => stored.startsWith(p2))) {
|
|
64322
|
-
return `${base2}${stored}`;
|
|
64323
|
-
}
|
|
64324
|
-
}
|
|
64325
|
-
} catch {
|
|
64326
|
-
}
|
|
64327
|
-
return base2;
|
|
64524
|
+
return `/workspace/${encodeURIComponent(workspaceId)}`;
|
|
64328
64525
|
}
|
|
64329
64526
|
async openUrl(url) {
|
|
64330
64527
|
window.open(url, "_blank");
|
|
@@ -79943,6 +80140,101 @@ function applyMaximizedGroupToApi(api, desired) {
|
|
|
79943
80140
|
if (next2.api.isMaximized()) return;
|
|
79944
80141
|
next2.api.maximize();
|
|
79945
80142
|
}
|
|
80143
|
+
const EDGE_GROUP_IDS$1 = {
|
|
80144
|
+
left: "edge-left",
|
|
80145
|
+
right: "edge-right",
|
|
80146
|
+
bottom: "edge-bottom"
|
|
80147
|
+
};
|
|
80148
|
+
function ensureEdgeGroups(api) {
|
|
80149
|
+
if (api.getEdgeGroup("top")) {
|
|
80150
|
+
try {
|
|
80151
|
+
api.removeEdgeGroup("top");
|
|
80152
|
+
} catch {
|
|
80153
|
+
}
|
|
80154
|
+
}
|
|
80155
|
+
for (const direction of Object.keys(EDGE_GROUP_IDS$1)) {
|
|
80156
|
+
const id28 = EDGE_GROUP_IDS$1[direction];
|
|
80157
|
+
if (!api.groups.some((g2) => g2.id === id28)) {
|
|
80158
|
+
try {
|
|
80159
|
+
api.addEdgeGroup(direction, { id: id28, collapsed: true });
|
|
80160
|
+
} catch {
|
|
80161
|
+
}
|
|
80162
|
+
}
|
|
80163
|
+
}
|
|
80164
|
+
refreshEdgeGroupVisibility(api, false);
|
|
80165
|
+
}
|
|
80166
|
+
function refreshEdgeGroupVisibility(api, forceVisible) {
|
|
80167
|
+
for (const direction of Object.keys(EDGE_GROUP_IDS$1)) {
|
|
80168
|
+
const id28 = EDGE_GROUP_IDS$1[direction];
|
|
80169
|
+
const group = api.groups.find((g2) => g2.id === id28);
|
|
80170
|
+
if (!group) continue;
|
|
80171
|
+
const isEmpty2 = group.panels.length === 0;
|
|
80172
|
+
try {
|
|
80173
|
+
api.setEdgeGroupVisible(direction, forceVisible || !isEmpty2);
|
|
80174
|
+
} catch {
|
|
80175
|
+
}
|
|
80176
|
+
}
|
|
80177
|
+
}
|
|
80178
|
+
const innerDockviewRegistrations = /* @__PURE__ */ new Set();
|
|
80179
|
+
function registerInnerDockview(containerEl, api) {
|
|
80180
|
+
const registration = { containerEl, api };
|
|
80181
|
+
innerDockviewRegistrations.add(registration);
|
|
80182
|
+
return () => {
|
|
80183
|
+
innerDockviewRegistrations.delete(registration);
|
|
80184
|
+
};
|
|
80185
|
+
}
|
|
80186
|
+
function findFocusedInnerDockview() {
|
|
80187
|
+
const active = document.activeElement;
|
|
80188
|
+
if (!active) return null;
|
|
80189
|
+
for (const reg of innerDockviewRegistrations) {
|
|
80190
|
+
if (reg.containerEl.contains(active)) {
|
|
80191
|
+
return reg.api;
|
|
80192
|
+
}
|
|
80193
|
+
}
|
|
80194
|
+
return null;
|
|
80195
|
+
}
|
|
80196
|
+
function toggleEdgeGroup(api, direction) {
|
|
80197
|
+
const id28 = EDGE_GROUP_IDS$1[direction];
|
|
80198
|
+
const group = api.groups.find((g2) => g2.id === id28);
|
|
80199
|
+
if (!group) return false;
|
|
80200
|
+
if (group.panels.length === 0) return false;
|
|
80201
|
+
try {
|
|
80202
|
+
if (group.api.isCollapsed()) group.api.expand();
|
|
80203
|
+
else group.api.collapse();
|
|
80204
|
+
} catch {
|
|
80205
|
+
return false;
|
|
80206
|
+
}
|
|
80207
|
+
return true;
|
|
80208
|
+
}
|
|
80209
|
+
function attachEdgeGroupDragVisibility(api) {
|
|
80210
|
+
let isDragging = false;
|
|
80211
|
+
const refresh = () => {
|
|
80212
|
+
refreshEdgeGroupVisibility(api, isDragging);
|
|
80213
|
+
};
|
|
80214
|
+
const startDrag = () => {
|
|
80215
|
+
isDragging = true;
|
|
80216
|
+
refresh();
|
|
80217
|
+
};
|
|
80218
|
+
const endDrag = () => {
|
|
80219
|
+
isDragging = false;
|
|
80220
|
+
refresh();
|
|
80221
|
+
};
|
|
80222
|
+
const d1 = api.onWillDragPanel(startDrag);
|
|
80223
|
+
const d2 = api.onWillDragGroup(startDrag);
|
|
80224
|
+
const d3 = api.onDidMovePanel(endDrag);
|
|
80225
|
+
const d4 = api.onDidRemovePanel(endDrag);
|
|
80226
|
+
const onDragEndNative = () => endDrag();
|
|
80227
|
+
document.addEventListener("drop", onDragEndNative, true);
|
|
80228
|
+
document.addEventListener("dragend", onDragEndNative, true);
|
|
80229
|
+
return () => {
|
|
80230
|
+
d1.dispose();
|
|
80231
|
+
d2.dispose();
|
|
80232
|
+
d3.dispose();
|
|
80233
|
+
d4.dispose();
|
|
80234
|
+
document.removeEventListener("drop", onDragEndNative, true);
|
|
80235
|
+
document.removeEventListener("dragend", onDragEndNative, true);
|
|
80236
|
+
};
|
|
80237
|
+
}
|
|
79946
80238
|
function parseWorkspaceFromPath(pathname) {
|
|
79947
80239
|
const match = pathname.match(/^\/workspace\/([^/]+)/);
|
|
79948
80240
|
return match ? decodeURIComponent(match[1]) : null;
|
|
@@ -108159,7 +108451,7 @@ var tn = f$5("block", "before:content-[counter(line)]", "before:inline-block", "
|
|
|
108159
108451
|
var et$1 = ({ className: e2, language: t2, style: o3, isIncomplete: n2, ...s2 }) => jsxRuntimeExports.jsx("div", { className: f$5("my-4 flex w-full flex-col gap-2 rounded-xl border border-border bg-sidebar p-2", e2), "data-incomplete": n2 || void 0, "data-language": t2, "data-streamdown": "code-block", style: { contentVisibility: "auto", containIntrinsicSize: "auto 200px", ...o3 }, ...s2 });
|
|
108160
108452
|
var Se$1 = reactExports.createContext({ code: "" }), de$2 = () => reactExports.useContext(Se$1);
|
|
108161
108453
|
var ot$1 = ({ language: e2 }) => jsxRuntimeExports.jsx("div", { className: "flex h-8 items-center text-muted-foreground text-xs", "data-language": e2, "data-streamdown": "code-block-header", children: jsxRuntimeExports.jsx("span", { className: "ml-1 font-mono lowercase", children: e2 }) });
|
|
108162
|
-
var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-
|
|
108454
|
+
var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-CTUp2Nbw.js").then((e2) => ({ default: e2.HighlightedCodeBlockBody }))), rt = ({ code: e2, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
|
|
108163
108455
|
let i2 = reactExports.useMemo(() => e2.replace(cn, ""), [e2]), c2 = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i2.split(`
|
|
108164
108456
|
`).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i2]);
|
|
108165
108457
|
return jsxRuntimeExports.jsx(Se$1.Provider, { value: { code: e2 }, children: jsxRuntimeExports.jsxs(et$1, { isIncomplete: s2, language: t2, children: [jsxRuntimeExports.jsx(ot$1, { language: t2 }), n2 ? jsxRuntimeExports.jsx("div", { className: "pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end", children: jsxRuntimeExports.jsx("div", { className: "pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur", "data-streamdown": "code-block-actions", children: n2 }) }) : null, jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: jsxRuntimeExports.jsx(Qe$1, { className: o3, language: t2, result: c2, ...r2 }), children: jsxRuntimeExports.jsx(dn, { className: o3, code: i2, language: t2, raw: c2, ...r2 }) })] }) });
|
|
@@ -108481,7 +108773,7 @@ var Dt = ({ children: e2, className: t2, onDownload: o3, onError: n2 }) => {
|
|
|
108481
108773
|
}, []), jsxRuntimeExports.jsxs("div", { className: "relative", ref: i2, children: [jsxRuntimeExports.jsx("button", { className: f$5("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50", t2), disabled: c2, onClick: () => r2(!s2), title: "Download table", type: "button", children: e2 != null ? e2 : jsxRuntimeExports.jsx(Z$2, { size: 14 }) }), s2 ? jsxRuntimeExports.jsxs("div", { className: "absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg", children: [jsxRuntimeExports.jsx("button", { className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40", onClick: () => a2("csv"), title: "Download table as CSV", type: "button", children: "CSV" }), jsxRuntimeExports.jsx("button", { className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40", onClick: () => a2("markdown"), title: "Download table as Markdown", type: "button", children: "Markdown" })] }) : null] });
|
|
108482
108774
|
};
|
|
108483
108775
|
var Vt = ({ children: e2, className: t2, showControls: o3, ...n2 }) => jsxRuntimeExports.jsxs("div", { className: "my-4 flex flex-col gap-2 rounded-lg border border-border bg-sidebar p-2", "data-streamdown": "table-wrapper", children: [o3 ? jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-end gap-1", children: [jsxRuntimeExports.jsx(Ht, {}), jsxRuntimeExports.jsx(Dt, {})] }) : null, jsxRuntimeExports.jsx("div", { className: "border-collapse overflow-x-auto overscroll-y-auto rounded-md border border-border bg-background", children: jsxRuntimeExports.jsx("table", { className: f$5("w-full divide-y divide-border", t2), "data-streamdown": "table", ...n2, children: e2 }) })] });
|
|
108484
|
-
var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-
|
|
108776
|
+
var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-8k9Pr9Qn.js").then((e2) => ({ default: e2.Mermaid }))), Kn = /language-([^\s]+)/;
|
|
108485
108777
|
function ke$1(e2, t2) {
|
|
108486
108778
|
if (!(e2 != null && e2.position || t2 != null && t2.position)) return true;
|
|
108487
108779
|
if (!(e2 != null && e2.position && (t2 != null && t2.position))) return false;
|
|
@@ -158283,12 +158575,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
|
|
|
158283
158575
|
registerLayoutLoaders([
|
|
158284
158576
|
{
|
|
158285
158577
|
name: "dagre",
|
|
158286
|
-
loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-
|
|
158578
|
+
loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-Hm-Wejtu.js"), "loader")
|
|
158287
158579
|
},
|
|
158288
158580
|
...[
|
|
158289
158581
|
{
|
|
158290
158582
|
name: "cose-bilkent",
|
|
158291
|
-
loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-
|
|
158583
|
+
loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-CnP5PKtl.js"), "loader")
|
|
158292
158584
|
}
|
|
158293
158585
|
]
|
|
158294
158586
|
]);
|
|
@@ -158727,7 +159019,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
|
|
|
158727
159019
|
return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
|
|
158728
159020
|
}, "detector");
|
|
158729
159021
|
var loader = /* @__PURE__ */ __name(async () => {
|
|
158730
|
-
const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-
|
|
159022
|
+
const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-CD7rCwaq.js");
|
|
158731
159023
|
return { id, diagram: diagram2 };
|
|
158732
159024
|
}, "loader");
|
|
158733
159025
|
var plugin = {
|
|
@@ -158744,7 +159036,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
158744
159036
|
return /^\s*graph/.test(txt);
|
|
158745
159037
|
}, "detector");
|
|
158746
159038
|
var loader2 = /* @__PURE__ */ __name(async () => {
|
|
158747
|
-
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-
|
|
159039
|
+
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-vb-7BBaz.js");
|
|
158748
159040
|
return { id: id2, diagram: diagram2 };
|
|
158749
159041
|
}, "loader");
|
|
158750
159042
|
var plugin2 = {
|
|
@@ -158767,7 +159059,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
158767
159059
|
return /^\s*flowchart/.test(txt);
|
|
158768
159060
|
}, "detector");
|
|
158769
159061
|
var loader3 = /* @__PURE__ */ __name(async () => {
|
|
158770
|
-
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-
|
|
159062
|
+
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-vb-7BBaz.js");
|
|
158771
159063
|
return { id: id3, diagram: diagram2 };
|
|
158772
159064
|
}, "loader");
|
|
158773
159065
|
var plugin3 = {
|
|
@@ -158781,7 +159073,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
|
|
|
158781
159073
|
return /^\s*erDiagram/.test(txt);
|
|
158782
159074
|
}, "detector");
|
|
158783
159075
|
var loader4 = /* @__PURE__ */ __name(async () => {
|
|
158784
|
-
const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-
|
|
159076
|
+
const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-DKL3OoDz.js");
|
|
158785
159077
|
return { id: id4, diagram: diagram2 };
|
|
158786
159078
|
}, "loader");
|
|
158787
159079
|
var plugin4 = {
|
|
@@ -158795,7 +159087,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
|
|
|
158795
159087
|
return /^\s*gitGraph/.test(txt);
|
|
158796
159088
|
}, "detector");
|
|
158797
159089
|
var loader5 = /* @__PURE__ */ __name(async () => {
|
|
158798
|
-
const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-
|
|
159090
|
+
const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-BrIjiO3l.js");
|
|
158799
159091
|
return { id: id5, diagram: diagram2 };
|
|
158800
159092
|
}, "loader");
|
|
158801
159093
|
var plugin5 = {
|
|
@@ -158809,7 +159101,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
|
|
|
158809
159101
|
return /^\s*gantt/.test(txt);
|
|
158810
159102
|
}, "detector");
|
|
158811
159103
|
var loader6 = /* @__PURE__ */ __name(async () => {
|
|
158812
|
-
const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-
|
|
159104
|
+
const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-CryNIjT5.js");
|
|
158813
159105
|
return { id: id6, diagram: diagram2 };
|
|
158814
159106
|
}, "loader");
|
|
158815
159107
|
var plugin6 = {
|
|
@@ -158823,7 +159115,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
|
|
|
158823
159115
|
return /^\s*info/.test(txt);
|
|
158824
159116
|
}, "detector");
|
|
158825
159117
|
var loader7 = /* @__PURE__ */ __name(async () => {
|
|
158826
|
-
const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-
|
|
159118
|
+
const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-Bx-2RIP1.js");
|
|
158827
159119
|
return { id: id7, diagram: diagram2 };
|
|
158828
159120
|
}, "loader");
|
|
158829
159121
|
var info = {
|
|
@@ -158836,7 +159128,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
|
|
|
158836
159128
|
return /^\s*pie/.test(txt);
|
|
158837
159129
|
}, "detector");
|
|
158838
159130
|
var loader8 = /* @__PURE__ */ __name(async () => {
|
|
158839
|
-
const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-
|
|
159131
|
+
const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-m0hjxyCj.js");
|
|
158840
159132
|
return { id: id8, diagram: diagram2 };
|
|
158841
159133
|
}, "loader");
|
|
158842
159134
|
var pie = {
|
|
@@ -158849,7 +159141,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
|
|
|
158849
159141
|
return /^\s*quadrantChart/.test(txt);
|
|
158850
159142
|
}, "detector");
|
|
158851
159143
|
var loader9 = /* @__PURE__ */ __name(async () => {
|
|
158852
|
-
const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-
|
|
159144
|
+
const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-omed34Wz.js");
|
|
158853
159145
|
return { id: id9, diagram: diagram2 };
|
|
158854
159146
|
}, "loader");
|
|
158855
159147
|
var plugin7 = {
|
|
@@ -158863,7 +159155,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
|
|
|
158863
159155
|
return /^\s*xychart(-beta)?/.test(txt);
|
|
158864
159156
|
}, "detector");
|
|
158865
159157
|
var loader10 = /* @__PURE__ */ __name(async () => {
|
|
158866
|
-
const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-
|
|
159158
|
+
const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-Y3f7rM8c.js");
|
|
158867
159159
|
return { id: id10, diagram: diagram2 };
|
|
158868
159160
|
}, "loader");
|
|
158869
159161
|
var plugin8 = {
|
|
@@ -158877,7 +159169,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
|
|
|
158877
159169
|
return /^\s*requirement(Diagram)?/.test(txt);
|
|
158878
159170
|
}, "detector");
|
|
158879
159171
|
var loader11 = /* @__PURE__ */ __name(async () => {
|
|
158880
|
-
const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-
|
|
159172
|
+
const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-BCx5DoGU.js");
|
|
158881
159173
|
return { id: id11, diagram: diagram2 };
|
|
158882
159174
|
}, "loader");
|
|
158883
159175
|
var plugin9 = {
|
|
@@ -158891,7 +159183,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
|
|
|
158891
159183
|
return /^\s*sequenceDiagram/.test(txt);
|
|
158892
159184
|
}, "detector");
|
|
158893
159185
|
var loader12 = /* @__PURE__ */ __name(async () => {
|
|
158894
|
-
const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-
|
|
159186
|
+
const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-DXMFuhl3.js");
|
|
158895
159187
|
return { id: id12, diagram: diagram2 };
|
|
158896
159188
|
}, "loader");
|
|
158897
159189
|
var plugin10 = {
|
|
@@ -158908,7 +159200,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
158908
159200
|
return /^\s*classDiagram/.test(txt);
|
|
158909
159201
|
}, "detector");
|
|
158910
159202
|
var loader13 = /* @__PURE__ */ __name(async () => {
|
|
158911
|
-
const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-
|
|
159203
|
+
const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-C2IXOi-1.js");
|
|
158912
159204
|
return { id: id13, diagram: diagram2 };
|
|
158913
159205
|
}, "loader");
|
|
158914
159206
|
var plugin11 = {
|
|
@@ -158925,7 +159217,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
158925
159217
|
return /^\s*classDiagram-v2/.test(txt);
|
|
158926
159218
|
}, "detector");
|
|
158927
159219
|
var loader14 = /* @__PURE__ */ __name(async () => {
|
|
158928
|
-
const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-
|
|
159220
|
+
const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-C2IXOi-1.js");
|
|
158929
159221
|
return { id: id14, diagram: diagram2 };
|
|
158930
159222
|
}, "loader");
|
|
158931
159223
|
var plugin12 = {
|
|
@@ -158942,7 +159234,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
158942
159234
|
return /^\s*stateDiagram/.test(txt);
|
|
158943
159235
|
}, "detector");
|
|
158944
159236
|
var loader15 = /* @__PURE__ */ __name(async () => {
|
|
158945
|
-
const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-
|
|
159237
|
+
const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-CY6AEWa2.js");
|
|
158946
159238
|
return { id: id15, diagram: diagram2 };
|
|
158947
159239
|
}, "loader");
|
|
158948
159240
|
var plugin13 = {
|
|
@@ -158962,7 +159254,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
158962
159254
|
return false;
|
|
158963
159255
|
}, "detector");
|
|
158964
159256
|
var loader16 = /* @__PURE__ */ __name(async () => {
|
|
158965
|
-
const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-
|
|
159257
|
+
const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-BNKDdzaI.js");
|
|
158966
159258
|
return { id: id16, diagram: diagram2 };
|
|
158967
159259
|
}, "loader");
|
|
158968
159260
|
var plugin14 = {
|
|
@@ -158976,7 +159268,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
|
|
|
158976
159268
|
return /^\s*journey/.test(txt);
|
|
158977
159269
|
}, "detector");
|
|
158978
159270
|
var loader17 = /* @__PURE__ */ __name(async () => {
|
|
158979
|
-
const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-
|
|
159271
|
+
const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-COrw3Dj9.js");
|
|
158980
159272
|
return { id: id17, diagram: diagram2 };
|
|
158981
159273
|
}, "loader");
|
|
158982
159274
|
var plugin15 = {
|
|
@@ -159043,7 +159335,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
|
|
|
159043
159335
|
return false;
|
|
159044
159336
|
}, "detector");
|
|
159045
159337
|
var loader18 = /* @__PURE__ */ __name(async () => {
|
|
159046
|
-
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-
|
|
159338
|
+
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-vb-7BBaz.js");
|
|
159047
159339
|
return { id: id18, diagram: diagram2 };
|
|
159048
159340
|
}, "loader");
|
|
159049
159341
|
var plugin16 = {
|
|
@@ -159057,7 +159349,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
|
|
|
159057
159349
|
return /^\s*timeline/.test(txt);
|
|
159058
159350
|
}, "detector");
|
|
159059
159351
|
var loader19 = /* @__PURE__ */ __name(async () => {
|
|
159060
|
-
const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-
|
|
159352
|
+
const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-D_io-Tfq.js");
|
|
159061
159353
|
return { id: id19, diagram: diagram2 };
|
|
159062
159354
|
}, "loader");
|
|
159063
159355
|
var plugin17 = {
|
|
@@ -159071,7 +159363,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
|
|
|
159071
159363
|
return /^\s*mindmap/.test(txt);
|
|
159072
159364
|
}, "detector");
|
|
159073
159365
|
var loader20 = /* @__PURE__ */ __name(async () => {
|
|
159074
|
-
const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-
|
|
159366
|
+
const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-Lf0rrgEi.js");
|
|
159075
159367
|
return { id: id20, diagram: diagram2 };
|
|
159076
159368
|
}, "loader");
|
|
159077
159369
|
var plugin18 = {
|
|
@@ -159085,7 +159377,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
|
|
|
159085
159377
|
return /^\s*kanban/.test(txt);
|
|
159086
159378
|
}, "detector");
|
|
159087
159379
|
var loader21 = /* @__PURE__ */ __name(async () => {
|
|
159088
|
-
const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-
|
|
159380
|
+
const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-CexmIyEk.js");
|
|
159089
159381
|
return { id: id21, diagram: diagram2 };
|
|
159090
159382
|
}, "loader");
|
|
159091
159383
|
var plugin19 = {
|
|
@@ -159099,7 +159391,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
|
|
|
159099
159391
|
return /^\s*sankey(-beta)?/.test(txt);
|
|
159100
159392
|
}, "detector");
|
|
159101
159393
|
var loader22 = /* @__PURE__ */ __name(async () => {
|
|
159102
|
-
const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-
|
|
159394
|
+
const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-9M4Rn44L.js");
|
|
159103
159395
|
return { id: id22, diagram: diagram2 };
|
|
159104
159396
|
}, "loader");
|
|
159105
159397
|
var plugin20 = {
|
|
@@ -159113,7 +159405,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
|
|
|
159113
159405
|
return /^\s*packet(-beta)?/.test(txt);
|
|
159114
159406
|
}, "detector");
|
|
159115
159407
|
var loader23 = /* @__PURE__ */ __name(async () => {
|
|
159116
|
-
const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-
|
|
159408
|
+
const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-C69I055N.js");
|
|
159117
159409
|
return { id: id23, diagram: diagram2 };
|
|
159118
159410
|
}, "loader");
|
|
159119
159411
|
var packet = {
|
|
@@ -159126,7 +159418,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
|
|
|
159126
159418
|
return /^\s*radar-beta/.test(txt);
|
|
159127
159419
|
}, "detector");
|
|
159128
159420
|
var loader24 = /* @__PURE__ */ __name(async () => {
|
|
159129
|
-
const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-
|
|
159421
|
+
const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-D595vsyp.js");
|
|
159130
159422
|
return { id: id24, diagram: diagram2 };
|
|
159131
159423
|
}, "loader");
|
|
159132
159424
|
var radar = {
|
|
@@ -159139,7 +159431,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
|
|
|
159139
159431
|
return /^\s*block(-beta)?/.test(txt);
|
|
159140
159432
|
}, "detector");
|
|
159141
159433
|
var loader25 = /* @__PURE__ */ __name(async () => {
|
|
159142
|
-
const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-
|
|
159434
|
+
const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-CO_-9S_E.js");
|
|
159143
159435
|
return { id: id25, diagram: diagram2 };
|
|
159144
159436
|
}, "loader");
|
|
159145
159437
|
var plugin21 = {
|
|
@@ -159153,7 +159445,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
|
|
|
159153
159445
|
return /^\s*architecture/.test(txt);
|
|
159154
159446
|
}, "detector");
|
|
159155
159447
|
var loader26 = /* @__PURE__ */ __name(async () => {
|
|
159156
|
-
const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-
|
|
159448
|
+
const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-B4vqMbhE.js");
|
|
159157
159449
|
return { id: id26, diagram: diagram2 };
|
|
159158
159450
|
}, "loader");
|
|
159159
159451
|
var architecture = {
|
|
@@ -159167,7 +159459,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
|
|
|
159167
159459
|
return /^\s*treemap/.test(txt);
|
|
159168
159460
|
}, "detector");
|
|
159169
159461
|
var loader27 = /* @__PURE__ */ __name(async () => {
|
|
159170
|
-
const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-
|
|
159462
|
+
const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-C6URVSbQ.js");
|
|
159171
159463
|
return { id: id27, diagram: diagram2 };
|
|
159172
159464
|
}, "loader");
|
|
159173
159465
|
var treemap = {
|
|
@@ -161491,8 +161783,13 @@ function readElement(group) {
|
|
|
161491
161783
|
const el = group.element;
|
|
161492
161784
|
return el && typeof el.getBoundingClientRect === "function" ? el : null;
|
|
161493
161785
|
}
|
|
161494
|
-
function
|
|
161495
|
-
const groups = api.groups.filter((g2) =>
|
|
161786
|
+
function getNavigableGroupsInVisualOrder(api) {
|
|
161787
|
+
const groups = api.groups.filter((g2) => {
|
|
161788
|
+
const loc = g2.api.location;
|
|
161789
|
+
if (loc.type === "grid") return true;
|
|
161790
|
+
if (loc.type === "edge") return g2.panels.length > 0;
|
|
161791
|
+
return false;
|
|
161792
|
+
});
|
|
161496
161793
|
if (groups.length < 2) return groups;
|
|
161497
161794
|
const rects = [];
|
|
161498
161795
|
for (const g2 of groups) {
|
|
@@ -161512,7 +161809,7 @@ function getGridGroupsInVisualOrder(api) {
|
|
|
161512
161809
|
}
|
|
161513
161810
|
function cycleGridGroups(api, direction, refocus) {
|
|
161514
161811
|
if (!api) return;
|
|
161515
|
-
const groups =
|
|
161812
|
+
const groups = getNavigableGroupsInVisualOrder(api);
|
|
161516
161813
|
if (groups.length < 2) return;
|
|
161517
161814
|
const current = api.activeGroup;
|
|
161518
161815
|
const idx = current ? groups.findIndex((g2) => g2.id === current.id) : -1;
|
|
@@ -161536,7 +161833,7 @@ function selectNeighbourBeforeRemove(api, panelId) {
|
|
|
161536
161833
|
return;
|
|
161537
161834
|
}
|
|
161538
161835
|
if (!group) return;
|
|
161539
|
-
const ordered =
|
|
161836
|
+
const ordered = getNavigableGroupsInVisualOrder(api);
|
|
161540
161837
|
if (ordered.length <= 1) return;
|
|
161541
161838
|
const groupIdx = ordered.findIndex((g2) => g2.id === group.id);
|
|
161542
161839
|
if (groupIdx < 0) return;
|
|
@@ -170212,12 +170509,33 @@ function extractMarkdown(item) {
|
|
|
170212
170509
|
}
|
|
170213
170510
|
function StatusDot({ isError, isInProgress }) {
|
|
170214
170511
|
if (isError) {
|
|
170215
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
170512
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
170513
|
+
"span",
|
|
170514
|
+
{
|
|
170515
|
+
"data-testid": "tool-call__status-dot",
|
|
170516
|
+
"data-status": "error",
|
|
170517
|
+
className: "size-2 shrink-0 rounded-full bg-red-500"
|
|
170518
|
+
}
|
|
170519
|
+
);
|
|
170216
170520
|
}
|
|
170217
170521
|
if (isInProgress) {
|
|
170218
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
170522
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
170523
|
+
"span",
|
|
170524
|
+
{
|
|
170525
|
+
"data-testid": "tool-call__status-dot",
|
|
170526
|
+
"data-status": "in-progress",
|
|
170527
|
+
className: "size-2 shrink-0 animate-pulse rounded-full bg-orange-500"
|
|
170528
|
+
}
|
|
170529
|
+
);
|
|
170219
170530
|
}
|
|
170220
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
170531
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
170532
|
+
"span",
|
|
170533
|
+
{
|
|
170534
|
+
"data-testid": "tool-call__status-dot",
|
|
170535
|
+
"data-status": "complete",
|
|
170536
|
+
className: "size-2 shrink-0 rounded-full bg-green-500"
|
|
170537
|
+
}
|
|
170538
|
+
);
|
|
170221
170539
|
}
|
|
170222
170540
|
function ToolCall({ item }) {
|
|
170223
170541
|
if (item.toolName === "AskUserQuestion" && item.approvalId && item.isInProgress) {
|
|
@@ -170232,20 +170550,29 @@ function ToolCall({ item }) {
|
|
|
170232
170550
|
}
|
|
170233
170551
|
const title = item.displayTitle ?? item.toolName;
|
|
170234
170552
|
const markdown = extractMarkdown(item);
|
|
170553
|
+
const status = item.isError ? "error" : item.isInProgress ? "in-progress" : "complete";
|
|
170235
170554
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
170236
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
170237
|
-
|
|
170238
|
-
|
|
170239
|
-
|
|
170240
|
-
|
|
170241
|
-
|
|
170242
|
-
|
|
170243
|
-
|
|
170244
|
-
|
|
170245
|
-
|
|
170246
|
-
|
|
170247
|
-
|
|
170248
|
-
|
|
170555
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
170556
|
+
Collapsible,
|
|
170557
|
+
{
|
|
170558
|
+
"data-testid": "tool-call__container",
|
|
170559
|
+
"data-status": status,
|
|
170560
|
+
className: "group not-prose w-full rounded border border-border/30 bg-muted/20",
|
|
170561
|
+
children: [
|
|
170562
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "flex w-full items-center justify-between gap-4 px-2 py-1.5", children: [
|
|
170563
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
170564
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(StatusDot, { isError: item.isError, isInProgress: item.isInProgress }),
|
|
170565
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate font-medium text-xs text-muted-foreground", children: title })
|
|
170566
|
+
] }),
|
|
170567
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-4 shrink-0 text-muted-foreground transition-transform group-data-[state=open]:rotate-180" })
|
|
170568
|
+
] }),
|
|
170569
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleContent, { className: "space-y-3 border-t border-border/30 px-3 py-2 text-popover-foreground", children: [
|
|
170570
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ToolInput, { input: item.input }),
|
|
170571
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ToolOutput, { output: item.output, errorText: item.errorText })
|
|
170572
|
+
] })
|
|
170573
|
+
]
|
|
170574
|
+
}
|
|
170575
|
+
),
|
|
170249
170576
|
markdown && /* @__PURE__ */ jsxRuntimeExports.jsx(MessageResponse, { children: markdown })
|
|
170250
170577
|
] });
|
|
170251
170578
|
}
|
|
@@ -170512,16 +170839,31 @@ function chatEventReducer(state2, event) {
|
|
|
170512
170839
|
};
|
|
170513
170840
|
}
|
|
170514
170841
|
case "tool-output-available": {
|
|
170515
|
-
|
|
170516
|
-
|
|
170517
|
-
|
|
170518
|
-
|
|
170519
|
-
|
|
170520
|
-
|
|
170521
|
-
|
|
170842
|
+
let ownerId;
|
|
170843
|
+
let prevPart;
|
|
170844
|
+
for (let i2 = state2.messages.length - 1; i2 >= 0; i2--) {
|
|
170845
|
+
const msg = state2.messages[i2];
|
|
170846
|
+
if (msg.role !== "assistant") continue;
|
|
170847
|
+
const part = msg.parts.find((p2) => {
|
|
170848
|
+
const pp = p2;
|
|
170849
|
+
return pp.toolCallId === event.toolCallId;
|
|
170850
|
+
});
|
|
170851
|
+
if (part) {
|
|
170852
|
+
ownerId = msg.id;
|
|
170853
|
+
prevPart = part;
|
|
170854
|
+
break;
|
|
170855
|
+
}
|
|
170856
|
+
}
|
|
170857
|
+
if (!ownerId) {
|
|
170858
|
+
console.warn(
|
|
170859
|
+
"[chat] tool-output-available for unknown toolCallId — dropping",
|
|
170860
|
+
event.toolCallId
|
|
170861
|
+
);
|
|
170862
|
+
return { ...state2, lastEventId };
|
|
170863
|
+
}
|
|
170522
170864
|
const messages = replaceToolPart(
|
|
170523
170865
|
state2.messages,
|
|
170524
|
-
|
|
170866
|
+
ownerId,
|
|
170525
170867
|
event.toolCallId,
|
|
170526
170868
|
makeToolOutputPart(prevPart, event)
|
|
170527
170869
|
);
|
|
@@ -172172,29 +172514,32 @@ const closeTabRef = {
|
|
|
172172
172514
|
current: null
|
|
172173
172515
|
};
|
|
172174
172516
|
const RightHeaderActions = React$1.memo(function RightHeaderActions2(props) {
|
|
172517
|
+
const isGridGroup = (props.location?.type ?? "grid") === "grid";
|
|
172175
172518
|
const { onAdd: onAdd2, onSplit } = addTabRef.current;
|
|
172176
172519
|
const groupId = props.group.id;
|
|
172177
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full items-center", children: [
|
|
172178
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
172179
|
-
|
|
172180
|
-
|
|
172181
|
-
|
|
172182
|
-
|
|
172183
|
-
|
|
172184
|
-
|
|
172185
|
-
|
|
172186
|
-
|
|
172187
|
-
|
|
172188
|
-
|
|
172189
|
-
|
|
172190
|
-
|
|
172191
|
-
|
|
172192
|
-
|
|
172193
|
-
|
|
172194
|
-
|
|
172195
|
-
|
|
172196
|
-
|
|
172197
|
-
|
|
172520
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full w-full items-center justify-center", children: [
|
|
172521
|
+
isGridGroup && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
172522
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
172523
|
+
"button",
|
|
172524
|
+
{
|
|
172525
|
+
type: "button",
|
|
172526
|
+
className: "inline-flex size-8 items-center justify-center text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors",
|
|
172527
|
+
onClick: () => onSplit(groupId, "right"),
|
|
172528
|
+
title: "Split right",
|
|
172529
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Columns2, { className: "size-3.5" })
|
|
172530
|
+
}
|
|
172531
|
+
),
|
|
172532
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
172533
|
+
"button",
|
|
172534
|
+
{
|
|
172535
|
+
type: "button",
|
|
172536
|
+
className: "inline-flex size-8 items-center justify-center text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors",
|
|
172537
|
+
onClick: () => onSplit(groupId, "below"),
|
|
172538
|
+
title: "Split down",
|
|
172539
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Rows2, { className: "size-3.5" })
|
|
172540
|
+
}
|
|
172541
|
+
)
|
|
172542
|
+
] }),
|
|
172198
172543
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
172199
172544
|
"button",
|
|
172200
172545
|
{
|
|
@@ -172223,6 +172568,8 @@ function DockviewChatContainer({
|
|
|
172223
172568
|
const apiRef = reactExports.useRef(null);
|
|
172224
172569
|
const isRestoringRef = reactExports.useRef(false);
|
|
172225
172570
|
const containerRef = reactExports.useRef(null);
|
|
172571
|
+
const edgeDragDisposerRef = reactExports.useRef(null);
|
|
172572
|
+
const innerRegisterDisposerRef = reactExports.useRef(null);
|
|
172226
172573
|
const { data: initialData } = useQuery({
|
|
172227
172574
|
queryKey: chatLayoutKey(workspaceId),
|
|
172228
172575
|
queryFn: async () => {
|
|
@@ -172434,6 +172781,14 @@ function DockviewChatContainer({
|
|
|
172434
172781
|
}, [adapter2, workspaceId]);
|
|
172435
172782
|
addTabRef.current = { onAdd: handleAddTab, onSplit: handleSplit };
|
|
172436
172783
|
closeTabRef.current = closeTab;
|
|
172784
|
+
reactExports.useEffect(() => {
|
|
172785
|
+
return () => {
|
|
172786
|
+
edgeDragDisposerRef.current?.();
|
|
172787
|
+
edgeDragDisposerRef.current = null;
|
|
172788
|
+
innerRegisterDisposerRef.current?.();
|
|
172789
|
+
innerRegisterDisposerRef.current = null;
|
|
172790
|
+
};
|
|
172791
|
+
}, []);
|
|
172437
172792
|
const initialLayoutRef = reactExports.useRef(null);
|
|
172438
172793
|
initialLayoutRef.current = initialData?.layout ?? null;
|
|
172439
172794
|
const initialChatIdsRef = reactExports.useRef(null);
|
|
@@ -172475,6 +172830,13 @@ function DockviewChatContainer({
|
|
|
172475
172830
|
createDefaultPanel(event.api, workspaceId);
|
|
172476
172831
|
persistToServer(workspaceId, event.api.toJSON(), { queryClient: queryClientRef.current });
|
|
172477
172832
|
}
|
|
172833
|
+
ensureEdgeGroups(event.api);
|
|
172834
|
+
edgeDragDisposerRef.current?.();
|
|
172835
|
+
edgeDragDisposerRef.current = attachEdgeGroupDragVisibility(event.api);
|
|
172836
|
+
innerRegisterDisposerRef.current?.();
|
|
172837
|
+
if (containerRef.current) {
|
|
172838
|
+
innerRegisterDisposerRef.current = registerInnerDockview(containerRef.current, event.api);
|
|
172839
|
+
}
|
|
172478
172840
|
const persist = () => schedulePersist();
|
|
172479
172841
|
event.api.onDidLayoutChange(persist);
|
|
172480
172842
|
event.api.onDidAddPanel(persist);
|
|
@@ -172596,6 +172958,33 @@ function MultiWorkspacePanelHost({ emptyState, children: children2 }) {
|
|
|
172596
172958
|
return next2;
|
|
172597
172959
|
});
|
|
172598
172960
|
}, [activeWorkspaceId]);
|
|
172961
|
+
const { projects, isLoading, error } = useProjects();
|
|
172962
|
+
reactExports.useEffect(() => {
|
|
172963
|
+
if (isLoading || error) return;
|
|
172964
|
+
const validIds = /* @__PURE__ */ new Set();
|
|
172965
|
+
for (const project of projects) {
|
|
172966
|
+
for (const worktree of project.worktrees) {
|
|
172967
|
+
validIds.add(toWorkspaceId(project.name, worktree.branch));
|
|
172968
|
+
}
|
|
172969
|
+
}
|
|
172970
|
+
setCache((prev2) => {
|
|
172971
|
+
let hasStale = false;
|
|
172972
|
+
for (const id28 of prev2.keys()) {
|
|
172973
|
+
if (!validIds.has(id28) && id28 !== activeWorkspaceId) {
|
|
172974
|
+
hasStale = true;
|
|
172975
|
+
break;
|
|
172976
|
+
}
|
|
172977
|
+
}
|
|
172978
|
+
if (!hasStale) return prev2;
|
|
172979
|
+
const next2 = new Map(prev2);
|
|
172980
|
+
for (const id28 of next2.keys()) {
|
|
172981
|
+
if (!validIds.has(id28) && id28 !== activeWorkspaceId) {
|
|
172982
|
+
next2.delete(id28);
|
|
172983
|
+
}
|
|
172984
|
+
}
|
|
172985
|
+
return next2;
|
|
172986
|
+
});
|
|
172987
|
+
}, [projects, isLoading, error, activeWorkspaceId]);
|
|
172599
172988
|
const lastCacheKeysRef = reactExports.useRef(/* @__PURE__ */ new Set());
|
|
172600
172989
|
reactExports.useEffect(() => {
|
|
172601
172990
|
const current = new Set(cache.keys());
|
|
@@ -172610,6 +172999,7 @@ function MultiWorkspacePanelHost({ emptyState, children: children2 }) {
|
|
|
172610
172999
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
172611
173000
|
"div",
|
|
172612
173001
|
{
|
|
173002
|
+
"data-testid": `workspace-panel-host__cached-entry--${workspaceId}`,
|
|
172613
173003
|
className: "absolute inset-0 transition-opacity duration-150 ease-out",
|
|
172614
173004
|
style: {
|
|
172615
173005
|
opacity: isActive ? 1 : 0,
|
|
@@ -173857,6 +174247,325 @@ function PrereqDialog({ open: open2, onOpenChange, onReady }) {
|
|
|
173857
174247
|
] })
|
|
173858
174248
|
] }) });
|
|
173859
174249
|
}
|
|
174250
|
+
const BYTES_PER_MB = 1024 * 1024;
|
|
174251
|
+
function formatMB(bytes) {
|
|
174252
|
+
return `${(bytes / BYTES_PER_MB).toFixed(1)} MB`;
|
|
174253
|
+
}
|
|
174254
|
+
function formatBytes(bytes) {
|
|
174255
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
174256
|
+
if (bytes < BYTES_PER_MB) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
174257
|
+
if (bytes < BYTES_PER_MB * 1024) return `${(bytes / BYTES_PER_MB).toFixed(1)} MB`;
|
|
174258
|
+
return `${(bytes / (BYTES_PER_MB * 1024)).toFixed(2)} GB`;
|
|
174259
|
+
}
|
|
174260
|
+
function formatUptime(seconds) {
|
|
174261
|
+
const s2 = Math.floor(seconds % 60);
|
|
174262
|
+
const m2 = Math.floor(seconds / 60 % 60);
|
|
174263
|
+
const h2 = Math.floor(seconds / 3600 % 24);
|
|
174264
|
+
const d2 = Math.floor(seconds / 86400);
|
|
174265
|
+
const parts = [];
|
|
174266
|
+
if (d2 > 0) parts.push(`${d2}d`);
|
|
174267
|
+
if (h2 > 0) parts.push(`${h2}h`);
|
|
174268
|
+
if (m2 > 0) parts.push(`${m2}m`);
|
|
174269
|
+
parts.push(`${s2}s`);
|
|
174270
|
+
return parts.join(" ");
|
|
174271
|
+
}
|
|
174272
|
+
function formatCpuMs(micros) {
|
|
174273
|
+
const ms = micros / 1e3;
|
|
174274
|
+
if (ms < 1e3) return `${ms.toFixed(1)} ms`;
|
|
174275
|
+
return `${(ms / 1e3).toFixed(2)} s`;
|
|
174276
|
+
}
|
|
174277
|
+
function testIdForWorktree(project, branch) {
|
|
174278
|
+
const safe = (s2) => s2.replace(/[^\w-]/g, "_");
|
|
174279
|
+
return `${safe(project)}__${safe(branch)}`;
|
|
174280
|
+
}
|
|
174281
|
+
const PROJECT_FETCH_CONCURRENCY = 3;
|
|
174282
|
+
async function runWithLimit(items, limit, fn2, isCancelled) {
|
|
174283
|
+
let nextIdx = 0;
|
|
174284
|
+
async function worker() {
|
|
174285
|
+
while (true) {
|
|
174286
|
+
if (isCancelled()) return;
|
|
174287
|
+
const idx = nextIdx++;
|
|
174288
|
+
if (idx >= items.length) return;
|
|
174289
|
+
await fn2(items[idx]);
|
|
174290
|
+
}
|
|
174291
|
+
}
|
|
174292
|
+
await Promise.all(Array.from({ length: Math.min(limit, items.length) }, () => worker()));
|
|
174293
|
+
}
|
|
174294
|
+
function ResourcesPage() {
|
|
174295
|
+
const serverQuery = useQuery({
|
|
174296
|
+
queryKey: ["resources", "server"],
|
|
174297
|
+
queryFn: () => trpc.services.resourcesServer.query()
|
|
174298
|
+
});
|
|
174299
|
+
const projectsQuery = useQuery({
|
|
174300
|
+
queryKey: ["resources", "projects"],
|
|
174301
|
+
queryFn: () => trpc.services.resourcesProjects.query(),
|
|
174302
|
+
refetchOnWindowFocus: false,
|
|
174303
|
+
refetchOnReconnect: false,
|
|
174304
|
+
refetchInterval: false,
|
|
174305
|
+
staleTime: Number.POSITIVE_INFINITY
|
|
174306
|
+
});
|
|
174307
|
+
const [sizes, setSizes] = reactExports.useState(() => /* @__PURE__ */ new Map());
|
|
174308
|
+
const [refreshKey, setRefreshKey] = reactExports.useState(0);
|
|
174309
|
+
const server = serverQuery.data;
|
|
174310
|
+
const projects = projectsQuery.data?.projects ?? [];
|
|
174311
|
+
const projectNames = projects.map((p2) => p2.project).join("\n");
|
|
174312
|
+
const projectsRef = reactExports.useMemo(() => projects, [projectNames]);
|
|
174313
|
+
reactExports.useEffect(() => {
|
|
174314
|
+
if (projectsRef.length === 0) return;
|
|
174315
|
+
let cancelled = false;
|
|
174316
|
+
setSizes(/* @__PURE__ */ new Map());
|
|
174317
|
+
void runWithLimit(
|
|
174318
|
+
projectsRef,
|
|
174319
|
+
PROJECT_FETCH_CONCURRENCY,
|
|
174320
|
+
async (p2) => {
|
|
174321
|
+
try {
|
|
174322
|
+
const data = await trpc.services.resourcesProjectSize.query({ project: p2.project });
|
|
174323
|
+
if (cancelled) return;
|
|
174324
|
+
setSizes((prev2) => {
|
|
174325
|
+
const next2 = new Map(prev2);
|
|
174326
|
+
next2.set(p2.project, data);
|
|
174327
|
+
return next2;
|
|
174328
|
+
});
|
|
174329
|
+
} catch (err) {
|
|
174330
|
+
if (cancelled) return;
|
|
174331
|
+
setSizes((prev2) => {
|
|
174332
|
+
const next2 = new Map(prev2);
|
|
174333
|
+
next2.set(p2.project, {
|
|
174334
|
+
project: p2.project,
|
|
174335
|
+
sizeBytes: 0,
|
|
174336
|
+
worktrees: [],
|
|
174337
|
+
error: err instanceof Error ? err.message : String(err)
|
|
174338
|
+
});
|
|
174339
|
+
return next2;
|
|
174340
|
+
});
|
|
174341
|
+
}
|
|
174342
|
+
},
|
|
174343
|
+
() => cancelled
|
|
174344
|
+
);
|
|
174345
|
+
return () => {
|
|
174346
|
+
cancelled = true;
|
|
174347
|
+
};
|
|
174348
|
+
}, [projectsRef, refreshKey]);
|
|
174349
|
+
const handleRefreshSizes = reactExports.useCallback(async () => {
|
|
174350
|
+
await projectsQuery.refetch();
|
|
174351
|
+
setRefreshKey((k2) => k2 + 1);
|
|
174352
|
+
}, [projectsQuery]);
|
|
174353
|
+
const [expandedProjects, setExpandedProjects] = reactExports.useState(() => /* @__PURE__ */ new Set());
|
|
174354
|
+
const toggleProject = (project) => {
|
|
174355
|
+
setExpandedProjects((prev2) => {
|
|
174356
|
+
const next2 = new Set(prev2);
|
|
174357
|
+
if (next2.has(project)) next2.delete(project);
|
|
174358
|
+
else next2.add(project);
|
|
174359
|
+
return next2;
|
|
174360
|
+
});
|
|
174361
|
+
};
|
|
174362
|
+
const sortedProjects = [...projects].sort((a2, b2) => {
|
|
174363
|
+
const sa = sizes.get(a2.project);
|
|
174364
|
+
const sb = sizes.get(b2.project);
|
|
174365
|
+
if (sa && sb) return sb.sizeBytes - sa.sizeBytes;
|
|
174366
|
+
if (sa && !sb) return -1;
|
|
174367
|
+
if (!sa && sb) return 1;
|
|
174368
|
+
return 0;
|
|
174369
|
+
});
|
|
174370
|
+
const knownTotalBytes = Array.from(sizes.values()).reduce((sum, s2) => sum + s2.sizeBytes, 0);
|
|
174371
|
+
const allLoaded = sizes.size === projects.length;
|
|
174372
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "h-full w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mx-auto flex max-w-5xl flex-col gap-8 px-6 py-4", children: [
|
|
174373
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("section", { "data-testid": "resources-server-card", className: "space-y-3", children: [
|
|
174374
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-row items-start justify-between gap-2", children: [
|
|
174375
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
|
|
174376
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-base font-semibold leading-none", children: "Server" }),
|
|
174377
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm text-muted-foreground", children: [
|
|
174378
|
+
"The Node process serving the Band dashboard (",
|
|
174379
|
+
server ? `pid ${server.pid}` : "…",
|
|
174380
|
+
")."
|
|
174381
|
+
] })
|
|
174382
|
+
] }),
|
|
174383
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
174384
|
+
Button,
|
|
174385
|
+
{
|
|
174386
|
+
variant: "outline",
|
|
174387
|
+
size: "sm",
|
|
174388
|
+
"data-testid": "resources-refresh-server",
|
|
174389
|
+
onClick: () => serverQuery.refetch(),
|
|
174390
|
+
disabled: serverQuery.isFetching,
|
|
174391
|
+
children: [
|
|
174392
|
+
serverQuery.isFetching ? /* @__PURE__ */ jsxRuntimeExports.jsx(Spinner, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "size-3.5" }),
|
|
174393
|
+
"Refresh"
|
|
174394
|
+
]
|
|
174395
|
+
}
|
|
174396
|
+
)
|
|
174397
|
+
] }),
|
|
174398
|
+
serverQuery.isError ? /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm text-destructive", children: [
|
|
174399
|
+
"Failed to load server snapshot: ",
|
|
174400
|
+
String(serverQuery.error)
|
|
174401
|
+
] }) : !server ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
174402
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Spinner, { className: "size-4" }),
|
|
174403
|
+
"Loading…"
|
|
174404
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-2 gap-x-6 gap-y-2 text-sm md:grid-cols-3", children: [
|
|
174405
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ServerField, { label: "PID", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { "data-testid": "resources-server-pid", children: server.pid }) }),
|
|
174406
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ServerField, { label: "Uptime", children: formatUptime(server.uptimeSeconds) }),
|
|
174407
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ServerField, { label: "Node", children: server.nodeVersion }),
|
|
174408
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(ServerField, { label: "Platform", children: [
|
|
174409
|
+
server.platform,
|
|
174410
|
+
" (",
|
|
174411
|
+
server.arch,
|
|
174412
|
+
")"
|
|
174413
|
+
] }),
|
|
174414
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ServerField, { label: "RSS", children: formatMB(server.memory.rssBytes) }),
|
|
174415
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ServerField, { label: "Heap used", children: formatMB(server.memory.heapUsedBytes) }),
|
|
174416
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ServerField, { label: "Heap total", children: formatMB(server.memory.heapTotalBytes) }),
|
|
174417
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ServerField, { label: "External", children: formatMB(server.memory.externalBytes) }),
|
|
174418
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ServerField, { label: "Array buffers", children: formatMB(server.memory.arrayBuffersBytes) }),
|
|
174419
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ServerField, { label: "Total CPU time (user)", children: formatCpuMs(server.cpu.userMicros) }),
|
|
174420
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ServerField, { label: "Total CPU time (system)", children: formatCpuMs(server.cpu.systemMicros) })
|
|
174421
|
+
] })
|
|
174422
|
+
] }),
|
|
174423
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("section", { "data-testid": "resources-worktrees-card", className: "space-y-3", children: [
|
|
174424
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-row items-start justify-between gap-2", children: [
|
|
174425
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
|
|
174426
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-base font-semibold leading-none", children: "Worktrees" }),
|
|
174427
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm text-muted-foreground", children: [
|
|
174428
|
+
"Disk usage per tracked git project (allocated blocks, as reported by",
|
|
174429
|
+
" ",
|
|
174430
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "du" }),
|
|
174431
|
+
"). Sizes load per project in batches of ",
|
|
174432
|
+
PROJECT_FETCH_CONCURRENCY,
|
|
174433
|
+
". Click a project to see its per-worktree breakdown."
|
|
174434
|
+
] })
|
|
174435
|
+
] }),
|
|
174436
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
174437
|
+
Button,
|
|
174438
|
+
{
|
|
174439
|
+
variant: "outline",
|
|
174440
|
+
size: "sm",
|
|
174441
|
+
"data-testid": "resources-refresh-worktrees",
|
|
174442
|
+
onClick: handleRefreshSizes,
|
|
174443
|
+
disabled: projectsQuery.isFetching || !allLoaded,
|
|
174444
|
+
children: [
|
|
174445
|
+
projectsQuery.isFetching || !allLoaded ? /* @__PURE__ */ jsxRuntimeExports.jsx(Spinner, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "size-3.5" }),
|
|
174446
|
+
"Refresh"
|
|
174447
|
+
]
|
|
174448
|
+
}
|
|
174449
|
+
)
|
|
174450
|
+
] }),
|
|
174451
|
+
projectsQuery.isError ? /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm text-destructive", children: [
|
|
174452
|
+
"Failed to load projects: ",
|
|
174453
|
+
String(projectsQuery.error)
|
|
174454
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative overflow-x-auto", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
174455
|
+
"table",
|
|
174456
|
+
{
|
|
174457
|
+
"data-testid": "resources-projects-table",
|
|
174458
|
+
className: "w-full border-collapse text-sm",
|
|
174459
|
+
children: [
|
|
174460
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("thead", { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("tr", { className: "border-b border-border text-left text-xs font-medium uppercase tracking-wide text-muted-foreground", children: [
|
|
174461
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("th", { className: "py-2 pr-3", children: "Project" }),
|
|
174462
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("th", { className: "py-2 pr-3 text-right", children: "Worktrees" }),
|
|
174463
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("th", { className: "py-2 pr-3 text-right", children: "Total size" })
|
|
174464
|
+
] }) }),
|
|
174465
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("tbody", { children: sortedProjects.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("tr", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("td", { colSpan: 3, className: "py-6 text-center text-sm text-muted-foreground", children: projectsQuery.isFetching ? "Loading…" : "No git projects found" }) }) : sortedProjects.map((project) => {
|
|
174466
|
+
const size2 = sizes.get(project.project);
|
|
174467
|
+
const isExpanded = expandedProjects.has(project.project);
|
|
174468
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(reactExports.Fragment, { children: [
|
|
174469
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
174470
|
+
"tr",
|
|
174471
|
+
{
|
|
174472
|
+
"data-testid": `resources-project-row-${project.project}`,
|
|
174473
|
+
"data-expanded": isExpanded ? "true" : "false",
|
|
174474
|
+
className: "border-b border-border/60 last:border-0 hover:bg-muted/40",
|
|
174475
|
+
children: [
|
|
174476
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "py-2 pr-3 font-medium", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
174477
|
+
"button",
|
|
174478
|
+
{
|
|
174479
|
+
type: "button",
|
|
174480
|
+
"aria-expanded": isExpanded,
|
|
174481
|
+
onClick: () => toggleProject(project.project),
|
|
174482
|
+
className: "inline-flex w-full cursor-pointer items-center gap-1 text-left",
|
|
174483
|
+
children: [
|
|
174484
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
174485
|
+
ChevronRight,
|
|
174486
|
+
{
|
|
174487
|
+
className: `size-3.5 shrink-0 transition-transform ${isExpanded ? "rotate-90" : ""}`
|
|
174488
|
+
}
|
|
174489
|
+
),
|
|
174490
|
+
project.project
|
|
174491
|
+
]
|
|
174492
|
+
}
|
|
174493
|
+
) }),
|
|
174494
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "py-2 pr-3 text-right tabular-nums", children: project.worktrees.length }),
|
|
174495
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
174496
|
+
"td",
|
|
174497
|
+
{
|
|
174498
|
+
className: "py-2 pr-3 text-right tabular-nums",
|
|
174499
|
+
"data-testid": `resources-project-size-${project.project}`,
|
|
174500
|
+
children: size2 === void 0 ? /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center justify-end gap-1.5 text-muted-foreground", children: [
|
|
174501
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Spinner, { className: "size-3.5" }),
|
|
174502
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs", children: "measuring…" })
|
|
174503
|
+
] }) : size2.error ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", title: size2.error, children: "error" }) : formatBytes(size2.sizeBytes)
|
|
174504
|
+
}
|
|
174505
|
+
)
|
|
174506
|
+
]
|
|
174507
|
+
}
|
|
174508
|
+
),
|
|
174509
|
+
isExpanded && (size2 === void 0 ? (
|
|
174510
|
+
// Sizes haven't landed yet — show one
|
|
174511
|
+
// child row with a spinner so the
|
|
174512
|
+
// expand isn't an empty void.
|
|
174513
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("tr", { className: "border-b border-border/40 bg-muted/20", children: /* @__PURE__ */ jsxRuntimeExports.jsx("td", { colSpan: 3, className: "py-2 pl-8 pr-3", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-2 text-xs text-muted-foreground", children: [
|
|
174514
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Spinner, { className: "size-3.5" }),
|
|
174515
|
+
"Measuring worktrees…"
|
|
174516
|
+
] }) }) })
|
|
174517
|
+
) : size2.worktrees.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("tr", { className: "border-b border-border/40 bg-muted/20", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
174518
|
+
"td",
|
|
174519
|
+
{
|
|
174520
|
+
colSpan: 3,
|
|
174521
|
+
className: "py-2 pl-8 pr-3 text-xs text-muted-foreground",
|
|
174522
|
+
children: "No worktrees"
|
|
174523
|
+
}
|
|
174524
|
+
) }) : size2.worktrees.map((wt2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
174525
|
+
"tr",
|
|
174526
|
+
{
|
|
174527
|
+
"data-testid": `resources-worktree-row-${testIdForWorktree(project.project, wt2.branch)}`,
|
|
174528
|
+
className: "border-b border-border/40 bg-muted/20 last:border-0",
|
|
174529
|
+
children: [
|
|
174530
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "py-1.5 pl-8 pr-3", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col", children: [
|
|
174531
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-xs", children: wt2.branch || "—" }),
|
|
174532
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate font-mono text-[11px] text-muted-foreground", children: wt2.path })
|
|
174533
|
+
] }) }),
|
|
174534
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "py-1.5 pr-3" }),
|
|
174535
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "py-1.5 pr-3 text-right tabular-nums", children: wt2.error ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "error" }) : formatBytes(wt2.sizeBytes) })
|
|
174536
|
+
]
|
|
174537
|
+
},
|
|
174538
|
+
`${project.project}::${wt2.branch}::${wt2.path}`
|
|
174539
|
+
)))
|
|
174540
|
+
] }, project.project);
|
|
174541
|
+
}) }),
|
|
174542
|
+
projects.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("tfoot", { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("tr", { className: "border-t-2 border-border font-medium", children: [
|
|
174543
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("td", { className: "py-2 pr-3", children: [
|
|
174544
|
+
"Total",
|
|
174545
|
+
allLoaded ? "" : " (partial)"
|
|
174546
|
+
] }),
|
|
174547
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "py-2 pr-3 text-right tabular-nums", children: projects.reduce((sum, p2) => sum + p2.worktrees.length, 0) }),
|
|
174548
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
174549
|
+
"td",
|
|
174550
|
+
{
|
|
174551
|
+
className: "py-2 pr-3 text-right tabular-nums",
|
|
174552
|
+
"data-testid": "resources-projects-total",
|
|
174553
|
+
children: formatBytes(knownTotalBytes)
|
|
174554
|
+
}
|
|
174555
|
+
)
|
|
174556
|
+
] }) })
|
|
174557
|
+
]
|
|
174558
|
+
}
|
|
174559
|
+
) })
|
|
174560
|
+
] })
|
|
174561
|
+
] }) });
|
|
174562
|
+
}
|
|
174563
|
+
function ServerField({ label, children: children2 }) {
|
|
174564
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
174565
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: label }),
|
|
174566
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-sm", children: children2 })
|
|
174567
|
+
] });
|
|
174568
|
+
}
|
|
173860
174569
|
function relativeTime(ms) {
|
|
173861
174570
|
const seconds = Math.floor((Date.now() - ms) / 1e3);
|
|
173862
174571
|
if (seconds < 60) return "just now";
|
|
@@ -175532,6 +176241,7 @@ function useAnyToolbarDialogOpen() {
|
|
|
175532
176241
|
function ToolbarOverflowProvider({ children: children2 }) {
|
|
175533
176242
|
const [showTasksDialog, setShowTasksDialog] = reactExports.useState(false);
|
|
175534
176243
|
const [showCronjobsDialog, setShowCronjobsDialog] = reactExports.useState(false);
|
|
176244
|
+
const [showResourcesDialog, setShowResourcesDialog] = reactExports.useState(false);
|
|
175535
176245
|
const {
|
|
175536
176246
|
webServerRunning,
|
|
175537
176247
|
tunnelUrl,
|
|
@@ -175548,11 +176258,19 @@ function ToolbarOverflowProvider({ children: children2 }) {
|
|
|
175548
176258
|
const openTasks = reactExports.useCallback(() => setShowTasksDialog(true), []);
|
|
175549
176259
|
const openCronjobs = reactExports.useCallback(() => setShowCronjobsDialog(true), []);
|
|
175550
176260
|
const openTunnel = reactExports.useCallback(() => openTunnelDialog(), [openTunnelDialog]);
|
|
176261
|
+
const openResources = reactExports.useCallback(() => setShowResourcesDialog(true), []);
|
|
175551
176262
|
const tunnelStatus = tunnelError ? "error" : webServerRunning ? "running" : "idle";
|
|
175552
|
-
const anyDialogOpen = showTasksDialog || showCronjobsDialog || showTunnelDialog || showPrereq;
|
|
176263
|
+
const anyDialogOpen = showTasksDialog || showCronjobsDialog || showTunnelDialog || showPrereq || showResourcesDialog;
|
|
175553
176264
|
const value = reactExports.useMemo(
|
|
175554
|
-
() => ({
|
|
175555
|
-
|
|
176265
|
+
() => ({
|
|
176266
|
+
openTasks,
|
|
176267
|
+
openCronjobs,
|
|
176268
|
+
openTunnel,
|
|
176269
|
+
openResources,
|
|
176270
|
+
tunnelStatus,
|
|
176271
|
+
anyDialogOpen
|
|
176272
|
+
}),
|
|
176273
|
+
[openTasks, openCronjobs, openTunnel, openResources, tunnelStatus, anyDialogOpen]
|
|
175556
176274
|
);
|
|
175557
176275
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(ToolbarOverflowContext.Provider, { value, children: [
|
|
175558
176276
|
children2,
|
|
@@ -175564,6 +176282,17 @@ function ToolbarOverflowProvider({ children: children2 }) {
|
|
|
175564
176282
|
/* @__PURE__ */ jsxRuntimeExports.jsx(DialogHeader, { className: "px-6 pt-6 pb-4 border-b border-border/50 shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(DialogTitle, { children: "Cronjobs" }) }),
|
|
175565
176283
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CronjobsPageContent, {})
|
|
175566
176284
|
] }) }),
|
|
176285
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Dialog, { open: showResourcesDialog, onOpenChange: setShowResourcesDialog, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
176286
|
+
DialogContent,
|
|
176287
|
+
{
|
|
176288
|
+
className: "sm:max-w-6xl h-[80vh] flex flex-col p-0 gap-0",
|
|
176289
|
+
"data-testid": "resources-dialog",
|
|
176290
|
+
children: [
|
|
176291
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(DialogHeader, { className: "px-6 pt-6 pb-4 border-b border-border/50 shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(DialogTitle, { children: "Resources" }) }),
|
|
176292
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 min-h-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ResourcesPage, {}) })
|
|
176293
|
+
]
|
|
176294
|
+
}
|
|
176295
|
+
) }),
|
|
175567
176296
|
/* @__PURE__ */ jsxRuntimeExports.jsx(PrereqDialog, { open: showPrereq, onOpenChange: setShowPrereq, onReady: onPrereqReady }),
|
|
175568
176297
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
175569
176298
|
TunnelDialog,
|
|
@@ -175599,6 +176328,10 @@ function ToolbarOverflowMenuItems() {
|
|
|
175599
176328
|
}
|
|
175600
176329
|
),
|
|
175601
176330
|
ctx.tunnelStatus === "running" ? "Mobile access" : "Start tunnel"
|
|
176331
|
+
] }),
|
|
176332
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onClick: ctx.openResources, "data-testid": "menu__resources", children: [
|
|
176333
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Activity, { className: "size-4" }),
|
|
176334
|
+
"Resources"
|
|
175602
176335
|
] })
|
|
175603
176336
|
] });
|
|
175604
176337
|
}
|
|
@@ -175622,12 +176355,12 @@ const PANEL_SHORTCUTS = {
|
|
|
175622
176355
|
browser: "⇧⌘B"
|
|
175623
176356
|
};
|
|
175624
176357
|
const DockviewTerminalContainer = reactExports.lazy(
|
|
175625
|
-
() => import("./DockviewTerminalContainer-
|
|
176358
|
+
() => import("./DockviewTerminalContainer-B4s5M71S.js").then((m2) => ({
|
|
175626
176359
|
default: m2.DockviewTerminalContainer
|
|
175627
176360
|
}))
|
|
175628
176361
|
);
|
|
175629
176362
|
const DockviewBrowserContainer = reactExports.lazy(
|
|
175630
|
-
() => import("./DockviewBrowserContainer-
|
|
176363
|
+
() => import("./DockviewBrowserContainer-BHlHNdlw.js").then((m2) => ({
|
|
175631
176364
|
default: m2.DockviewBrowserContainer
|
|
175632
176365
|
}))
|
|
175633
176366
|
);
|
|
@@ -176241,13 +176974,21 @@ function SharedDockviewLayout() {
|
|
|
176241
176974
|
window.dispatchEvent(new CustomEvent("band:focus-browser"));
|
|
176242
176975
|
});
|
|
176243
176976
|
}
|
|
176244
|
-
} else if (key2 === "b" && !e2.shiftKey && api) {
|
|
176977
|
+
} else if (key2 === "b" && !e2.shiftKey && !e2.altKey && api) {
|
|
176245
176978
|
e2.preventDefault();
|
|
176246
|
-
const
|
|
176247
|
-
if (left)
|
|
176248
|
-
|
|
176249
|
-
|
|
176250
|
-
|
|
176979
|
+
const inner2 = findFocusedInnerDockview();
|
|
176980
|
+
if (inner2 && toggleEdgeGroup(inner2, "left")) return;
|
|
176981
|
+
toggleEdgeGroup(api, "left");
|
|
176982
|
+
} else if (e2.code === "KeyB" && e2.altKey && !e2.shiftKey && api) {
|
|
176983
|
+
e2.preventDefault();
|
|
176984
|
+
const inner2 = findFocusedInnerDockview();
|
|
176985
|
+
if (inner2 && toggleEdgeGroup(inner2, "right")) return;
|
|
176986
|
+
toggleEdgeGroup(api, "right");
|
|
176987
|
+
} else if (key2 === "j" && !e2.shiftKey && !e2.altKey && api) {
|
|
176988
|
+
e2.preventDefault();
|
|
176989
|
+
const inner2 = findFocusedInnerDockview();
|
|
176990
|
+
if (inner2 && toggleEdgeGroup(inner2, "bottom")) return;
|
|
176991
|
+
toggleEdgeGroup(api, "bottom");
|
|
176251
176992
|
} else if (key2 === "m" && e2.shiftKey && api) {
|
|
176252
176993
|
e2.preventDefault();
|
|
176253
176994
|
const active = api.activeGroup;
|
|
@@ -176871,32 +177612,23 @@ function useZoom() {
|
|
|
176871
177612
|
return () => window.removeEventListener("keydown", handler, true);
|
|
176872
177613
|
}, []);
|
|
176873
177614
|
}
|
|
176874
|
-
function dispatchOpenFileEvent(event,
|
|
177615
|
+
function dispatchOpenFileEvent(event, handlers2) {
|
|
176875
177616
|
if (event.kind !== "open-file") return { handled: false, reason: "not-open-file" };
|
|
176876
177617
|
const workspaceId = typeof event.workspaceId === "string" ? event.workspaceId : void 0;
|
|
176877
177618
|
if (!workspaceId) return { handled: false, reason: "missing-workspace-id" };
|
|
176878
177619
|
const filePath = typeof event.filePath === "string" ? event.filePath : void 0;
|
|
176879
177620
|
if (!filePath) return { handled: false, reason: "missing-file-path" };
|
|
176880
|
-
const { isDockview, handlers: handlers2 } = options;
|
|
176881
177621
|
if (event.external === true) {
|
|
176882
177622
|
enqueueExternalOpen(workspaceId, filePath);
|
|
176883
|
-
|
|
176884
|
-
|
|
176885
|
-
return { handled: true, kind: "dockview-external" };
|
|
176886
|
-
}
|
|
176887
|
-
handlers2.navigateToWorkspaceCode(workspaceId);
|
|
176888
|
-
return { handled: true, kind: "mobile-external" };
|
|
177623
|
+
handlers2.onActivateFilesPanel(workspaceId);
|
|
177624
|
+
return { handled: true, kind: "external" };
|
|
176889
177625
|
}
|
|
176890
|
-
|
|
176891
|
-
|
|
176892
|
-
return { handled: true, kind: "dockview-in-workspace" };
|
|
176893
|
-
}
|
|
176894
|
-
handlers2.navigateInWorkspace(workspaceId, filePath);
|
|
176895
|
-
return { handled: true, kind: "mobile-in-workspace" };
|
|
177626
|
+
handlers2.onOpenFile(workspaceId, filePath);
|
|
177627
|
+
return { handled: true, kind: "in-workspace" };
|
|
176896
177628
|
}
|
|
176897
177629
|
const adapter = isDesktop ? new DesktopDashboardAdapter() : new WebDashboardAdapter();
|
|
176898
177630
|
const capabilities = isDesktop ? new NativeShellCapabilities() : new WebCapabilities();
|
|
176899
|
-
const Route$
|
|
177631
|
+
const Route$2 = createRootRoute({
|
|
176900
177632
|
head: () => ({
|
|
176901
177633
|
meta: [
|
|
176902
177634
|
{ charSet: "utf-8" },
|
|
@@ -177060,27 +177792,14 @@ function AppShell() {
|
|
|
177060
177792
|
useDesktopLayoutRef.current = useDesktopLayout;
|
|
177061
177793
|
reactExports.useEffect(() => {
|
|
177062
177794
|
const unsubscribe = adapter.subscribeStatusEvents((event) => {
|
|
177795
|
+
if (!useDesktopLayoutRef.current) return;
|
|
177063
177796
|
dispatchOpenFileEvent(event, {
|
|
177064
|
-
|
|
177065
|
-
|
|
177066
|
-
onOpenFile: crossPanelHandlers.onOpenFile,
|
|
177067
|
-
onActivateFilesPanel: crossPanelHandlers.onActivateFilesPanel,
|
|
177068
|
-
navigateInWorkspace: (workspaceId, filePath) => router2.navigate({
|
|
177069
|
-
to: "/workspace/$workspaceId/code/$",
|
|
177070
|
-
params: {
|
|
177071
|
-
workspaceId: encodeURIComponent(workspaceId),
|
|
177072
|
-
_splat: filePath
|
|
177073
|
-
}
|
|
177074
|
-
}),
|
|
177075
|
-
navigateToWorkspaceCode: (workspaceId) => router2.navigate({
|
|
177076
|
-
to: "/workspace/$workspaceId/code",
|
|
177077
|
-
params: { workspaceId: encodeURIComponent(workspaceId) }
|
|
177078
|
-
})
|
|
177079
|
-
}
|
|
177797
|
+
onOpenFile: crossPanelHandlers.onOpenFile,
|
|
177798
|
+
onActivateFilesPanel: crossPanelHandlers.onActivateFilesPanel
|
|
177080
177799
|
});
|
|
177081
177800
|
});
|
|
177082
177801
|
return unsubscribe;
|
|
177083
|
-
}, [
|
|
177802
|
+
}, []);
|
|
177084
177803
|
const panelItems = reactExports.useMemo(
|
|
177085
177804
|
() => [
|
|
177086
177805
|
{ id: "chat", label: "Chat", icon: MessageSquare, shortcut: "⌃⌘I" },
|
|
@@ -177175,112 +177894,42 @@ function RootLayout() {
|
|
|
177175
177894
|
] })
|
|
177176
177895
|
] });
|
|
177177
177896
|
}
|
|
177178
|
-
const $$splitComponentImporter$
|
|
177179
|
-
const Route$
|
|
177180
|
-
component: lazyRouteComponent($$splitComponentImporter$7, "component")
|
|
177181
|
-
});
|
|
177182
|
-
const $$splitComponentImporter$6 = () => import("./workspace._workspaceId-DwsRTXCg.js");
|
|
177183
|
-
const Route$6 = createFileRoute("/workspace/$workspaceId")({
|
|
177184
|
-
component: lazyRouteComponent($$splitComponentImporter$6, "component")
|
|
177185
|
-
});
|
|
177186
|
-
const DiffStatsContext = reactExports.createContext({
|
|
177187
|
-
diffStats: null,
|
|
177188
|
-
setDiffStats: () => {
|
|
177189
|
-
}
|
|
177190
|
-
});
|
|
177191
|
-
function useDiffStatsContext() {
|
|
177192
|
-
return reactExports.useContext(DiffStatsContext);
|
|
177193
|
-
}
|
|
177194
|
-
const FindInFileContext = reactExports.createContext({
|
|
177195
|
-
setFindInFile: () => {
|
|
177196
|
-
}
|
|
177197
|
-
});
|
|
177198
|
-
function useFindInFileContext() {
|
|
177199
|
-
return reactExports.useContext(FindInFileContext);
|
|
177200
|
-
}
|
|
177201
|
-
const $$splitComponentImporter$5 = () => import("./workspace._workspaceId.index-BPhXMwl8.js");
|
|
177202
|
-
const Route$5 = createFileRoute("/workspace/$workspaceId/")({
|
|
177203
|
-
component: lazyRouteComponent($$splitComponentImporter$5, "component")
|
|
177204
|
-
});
|
|
177205
|
-
const $$splitComponentImporter$4 = () => import("./workspace._workspaceId.terminal-BdVDaWNH.js");
|
|
177206
|
-
const Route$4 = createFileRoute("/workspace/$workspaceId/terminal")({
|
|
177207
|
-
component: lazyRouteComponent($$splitComponentImporter$4, "component")
|
|
177208
|
-
});
|
|
177209
|
-
const $$splitComponentImporter$3 = () => import("./workspace._workspaceId.code-Cuj0zH98.js");
|
|
177210
|
-
const Route$3 = createFileRoute("/workspace/$workspaceId/code")({
|
|
177211
|
-
component: lazyRouteComponent($$splitComponentImporter$3, "component")
|
|
177212
|
-
});
|
|
177213
|
-
const $$splitComponentImporter$2 = () => import("./workspace._workspaceId.changes-C6vwSbUh.js");
|
|
177214
|
-
const Route$2 = createFileRoute("/workspace/$workspaceId/changes")({
|
|
177215
|
-
component: lazyRouteComponent($$splitComponentImporter$2, "component")
|
|
177216
|
-
});
|
|
177217
|
-
const $$splitComponentImporter$1 = () => import("./workspace._workspaceId.code.index-CE_CMD_I.js");
|
|
177218
|
-
const Route$1 = createFileRoute("/workspace/$workspaceId/code/")({
|
|
177897
|
+
const $$splitComponentImporter$1 = () => import("./index-D8W-WZ8Y.js");
|
|
177898
|
+
const Route$1 = createFileRoute("/")({
|
|
177219
177899
|
component: lazyRouteComponent($$splitComponentImporter$1, "component")
|
|
177220
177900
|
});
|
|
177221
|
-
const $$
|
|
177222
|
-
const
|
|
177223
|
-
|
|
177901
|
+
const $$splitNotFoundComponentImporter = () => import("./workspace._workspaceId-BnLo-dj-.js");
|
|
177902
|
+
const $$splitComponentImporter = () => import("./workspace._workspaceId-CJcudFN3.js");
|
|
177903
|
+
const Route2 = createFileRoute("/workspace/$workspaceId")({
|
|
177904
|
+
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
177905
|
+
// Bookmarks / shared links from before route unification (`/workspace/$id/changes`,
|
|
177906
|
+
// `/workspace/$id/code/foo.ts`, `/workspace/$id/terminal`) used to resolve to
|
|
177907
|
+
// child routes that no longer exist. Redirect them to the canonical workspace
|
|
177908
|
+
// URL instead of showing the root 404. See issue #467.
|
|
177909
|
+
//
|
|
177910
|
+
// CAVEAT: this catches ANY unmatched sub-path under `/workspace/$id`, not
|
|
177911
|
+
// just the five retired routes. If a future child route is added here, a
|
|
177912
|
+
// typo'd link (e.g. `/workspace/$id/settigns` for a real `/settings` route)
|
|
177913
|
+
// will silently land on the workspace root rather than surfacing a 404.
|
|
177914
|
+
// If that becomes a problem, narrow this to an allowlist of known retired
|
|
177915
|
+
// path prefixes.
|
|
177916
|
+
notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter, "notFoundComponent")
|
|
177224
177917
|
});
|
|
177225
|
-
const IndexRoute = Route$
|
|
177918
|
+
const IndexRoute = Route$1.update({
|
|
177226
177919
|
id: "/",
|
|
177227
177920
|
path: "/",
|
|
177228
|
-
getParentRoute: () => Route$
|
|
177921
|
+
getParentRoute: () => Route$2
|
|
177229
177922
|
});
|
|
177230
|
-
const WorkspaceWorkspaceIdRoute =
|
|
177923
|
+
const WorkspaceWorkspaceIdRoute = Route2.update({
|
|
177231
177924
|
id: "/workspace/$workspaceId",
|
|
177232
177925
|
path: "/workspace/$workspaceId",
|
|
177233
|
-
getParentRoute: () => Route$
|
|
177234
|
-
});
|
|
177235
|
-
const WorkspaceWorkspaceIdIndexRoute = Route$5.update({
|
|
177236
|
-
id: "/",
|
|
177237
|
-
path: "/",
|
|
177238
|
-
getParentRoute: () => WorkspaceWorkspaceIdRoute
|
|
177239
|
-
});
|
|
177240
|
-
const WorkspaceWorkspaceIdTerminalRoute = Route$4.update({
|
|
177241
|
-
id: "/terminal",
|
|
177242
|
-
path: "/terminal",
|
|
177243
|
-
getParentRoute: () => WorkspaceWorkspaceIdRoute
|
|
177244
|
-
});
|
|
177245
|
-
const WorkspaceWorkspaceIdCodeRoute = Route$3.update({
|
|
177246
|
-
id: "/code",
|
|
177247
|
-
path: "/code",
|
|
177248
|
-
getParentRoute: () => WorkspaceWorkspaceIdRoute
|
|
177249
|
-
});
|
|
177250
|
-
const WorkspaceWorkspaceIdChangesRoute = Route$2.update({
|
|
177251
|
-
id: "/changes",
|
|
177252
|
-
path: "/changes",
|
|
177253
|
-
getParentRoute: () => WorkspaceWorkspaceIdRoute
|
|
177254
|
-
});
|
|
177255
|
-
const WorkspaceWorkspaceIdCodeIndexRoute = Route$1.update({
|
|
177256
|
-
id: "/",
|
|
177257
|
-
path: "/",
|
|
177258
|
-
getParentRoute: () => WorkspaceWorkspaceIdCodeRoute
|
|
177259
|
-
});
|
|
177260
|
-
const WorkspaceWorkspaceIdCodeSplatRoute = Route2.update({
|
|
177261
|
-
id: "/$",
|
|
177262
|
-
path: "/$",
|
|
177263
|
-
getParentRoute: () => WorkspaceWorkspaceIdCodeRoute
|
|
177926
|
+
getParentRoute: () => Route$2
|
|
177264
177927
|
});
|
|
177265
|
-
const WorkspaceWorkspaceIdCodeRouteChildren = {
|
|
177266
|
-
WorkspaceWorkspaceIdCodeSplatRoute,
|
|
177267
|
-
WorkspaceWorkspaceIdCodeIndexRoute
|
|
177268
|
-
};
|
|
177269
|
-
const WorkspaceWorkspaceIdCodeRouteWithChildren = WorkspaceWorkspaceIdCodeRoute._addFileChildren(
|
|
177270
|
-
WorkspaceWorkspaceIdCodeRouteChildren
|
|
177271
|
-
);
|
|
177272
|
-
const WorkspaceWorkspaceIdRouteChildren = {
|
|
177273
|
-
WorkspaceWorkspaceIdChangesRoute,
|
|
177274
|
-
WorkspaceWorkspaceIdCodeRoute: WorkspaceWorkspaceIdCodeRouteWithChildren,
|
|
177275
|
-
WorkspaceWorkspaceIdTerminalRoute,
|
|
177276
|
-
WorkspaceWorkspaceIdIndexRoute
|
|
177277
|
-
};
|
|
177278
|
-
const WorkspaceWorkspaceIdRouteWithChildren = WorkspaceWorkspaceIdRoute._addFileChildren(WorkspaceWorkspaceIdRouteChildren);
|
|
177279
177928
|
const rootRouteChildren = {
|
|
177280
177929
|
IndexRoute,
|
|
177281
|
-
WorkspaceWorkspaceIdRoute
|
|
177930
|
+
WorkspaceWorkspaceIdRoute
|
|
177282
177931
|
};
|
|
177283
|
-
const routeTree = Route$
|
|
177932
|
+
const routeTree = Route$2._addFileChildren(rootRouteChildren)._addFileTypes();
|
|
177284
177933
|
function getRouter() {
|
|
177285
177934
|
return createRouter({
|
|
177286
177935
|
routeTree,
|
|
@@ -177292,275 +177941,271 @@ const router = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
|
|
|
177292
177941
|
getRouter
|
|
177293
177942
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
177294
177943
|
export {
|
|
177295
|
-
|
|
177296
|
-
|
|
177297
|
-
|
|
177298
|
-
|
|
177299
|
-
|
|
177300
|
-
|
|
177301
|
-
|
|
177302
|
-
|
|
177303
|
-
|
|
177944
|
+
wrapLabel as $,
|
|
177945
|
+
cycleTabsInActiveGroup as A,
|
|
177946
|
+
cycleGridGroups as B,
|
|
177947
|
+
Columns2 as C,
|
|
177948
|
+
DefaultBufferLength as D,
|
|
177949
|
+
R$4 as E,
|
|
177950
|
+
setAccDescription as F,
|
|
177951
|
+
getAccDescription as G,
|
|
177952
|
+
getAccTitle as H,
|
|
177304
177953
|
IterMode as I,
|
|
177305
|
-
|
|
177306
|
-
|
|
177954
|
+
setAccTitle as J,
|
|
177955
|
+
Ks as K,
|
|
177307
177956
|
LanguageSupport as L,
|
|
177308
|
-
|
|
177957
|
+
getConfig2 as M,
|
|
177309
177958
|
Nt as N,
|
|
177310
|
-
|
|
177959
|
+
select as O,
|
|
177311
177960
|
Parser$2 as P,
|
|
177312
|
-
|
|
177313
|
-
|
|
177314
|
-
|
|
177961
|
+
Qe$1 as Q,
|
|
177962
|
+
Route2 as R,
|
|
177963
|
+
log as S,
|
|
177315
177964
|
Tree as T,
|
|
177316
|
-
|
|
177317
|
-
|
|
177318
|
-
|
|
177965
|
+
configureSvgSize as U,
|
|
177966
|
+
assignWithDepth_default as V,
|
|
177967
|
+
calculateTextWidth as W,
|
|
177319
177968
|
X$7 as X,
|
|
177320
|
-
|
|
177321
|
-
|
|
177322
|
-
|
|
177969
|
+
sanitizeText as Y,
|
|
177970
|
+
distExports as Z,
|
|
177971
|
+
__name as _,
|
|
177323
177972
|
Navigate as a,
|
|
177324
|
-
|
|
177325
|
-
|
|
177326
|
-
|
|
177327
|
-
|
|
177328
|
-
|
|
177329
|
-
|
|
177330
|
-
|
|
177331
|
-
|
|
177332
|
-
|
|
177333
|
-
|
|
177334
|
-
|
|
177335
|
-
|
|
177336
|
-
|
|
177337
|
-
|
|
177338
|
-
|
|
177339
|
-
|
|
177340
|
-
|
|
177341
|
-
|
|
177342
|
-
|
|
177343
|
-
|
|
177344
|
-
|
|
177345
|
-
|
|
177346
|
-
|
|
177347
|
-
|
|
177348
|
-
|
|
177349
|
-
|
|
177350
|
-
|
|
177351
|
-
|
|
177352
|
-
|
|
177353
|
-
|
|
177354
|
-
|
|
177355
|
-
|
|
177356
|
-
|
|
177357
|
-
|
|
177358
|
-
|
|
177359
|
-
|
|
177360
|
-
|
|
177361
|
-
|
|
177362
|
-
|
|
177363
|
-
|
|
177364
|
-
|
|
177365
|
-
|
|
177366
|
-
|
|
177367
|
-
|
|
177368
|
-
|
|
177369
|
-
|
|
177370
|
-
|
|
177371
|
-
|
|
177372
|
-
|
|
177373
|
-
|
|
177374
|
-
|
|
177375
|
-
|
|
177376
|
-
|
|
177377
|
-
|
|
177378
|
-
|
|
177379
|
-
|
|
177380
|
-
|
|
177381
|
-
|
|
177382
|
-
|
|
177383
|
-
|
|
177384
|
-
|
|
177385
|
-
|
|
177386
|
-
|
|
177387
|
-
|
|
177388
|
-
|
|
177389
|
-
|
|
177390
|
-
|
|
177391
|
-
|
|
177392
|
-
|
|
177393
|
-
|
|
177394
|
-
|
|
177395
|
-
|
|
177396
|
-
|
|
177397
|
-
|
|
177398
|
-
|
|
177399
|
-
|
|
177400
|
-
|
|
177401
|
-
|
|
177402
|
-
|
|
177403
|
-
|
|
177404
|
-
|
|
177405
|
-
|
|
177406
|
-
|
|
177407
|
-
|
|
177408
|
-
|
|
177409
|
-
|
|
177410
|
-
|
|
177411
|
-
|
|
177412
|
-
|
|
177413
|
-
|
|
177414
|
-
|
|
177415
|
-
|
|
177416
|
-
|
|
177417
|
-
|
|
177418
|
-
|
|
177419
|
-
|
|
177420
|
-
|
|
177421
|
-
|
|
177422
|
-
|
|
177423
|
-
|
|
177424
|
-
|
|
177425
|
-
|
|
177426
|
-
|
|
177427
|
-
|
|
177428
|
-
|
|
177429
|
-
|
|
177430
|
-
|
|
177431
|
-
|
|
177432
|
-
|
|
177433
|
-
|
|
177434
|
-
|
|
177435
|
-
|
|
177436
|
-
|
|
177437
|
-
|
|
177438
|
-
|
|
177439
|
-
|
|
177440
|
-
|
|
177441
|
-
|
|
177442
|
-
|
|
177443
|
-
|
|
177444
|
-
|
|
177445
|
-
|
|
177446
|
-
|
|
177447
|
-
|
|
177448
|
-
|
|
177449
|
-
|
|
177450
|
-
|
|
177451
|
-
|
|
177452
|
-
|
|
177453
|
-
|
|
177454
|
-
|
|
177455
|
-
|
|
177456
|
-
|
|
177457
|
-
|
|
177458
|
-
|
|
177459
|
-
|
|
177460
|
-
|
|
177461
|
-
|
|
177462
|
-
|
|
177463
|
-
|
|
177464
|
-
|
|
177465
|
-
|
|
177466
|
-
|
|
177467
|
-
|
|
177468
|
-
|
|
177469
|
-
|
|
177470
|
-
|
|
177471
|
-
|
|
177472
|
-
|
|
177473
|
-
|
|
177474
|
-
|
|
177475
|
-
|
|
177476
|
-
|
|
177477
|
-
|
|
177478
|
-
|
|
177479
|
-
|
|
177480
|
-
|
|
177481
|
-
|
|
177482
|
-
|
|
177483
|
-
|
|
177484
|
-
|
|
177485
|
-
|
|
177486
|
-
|
|
177487
|
-
|
|
177488
|
-
|
|
177489
|
-
|
|
177490
|
-
|
|
177491
|
-
|
|
177492
|
-
|
|
177493
|
-
|
|
177494
|
-
|
|
177495
|
-
|
|
177496
|
-
|
|
177497
|
-
|
|
177498
|
-
|
|
177499
|
-
|
|
177500
|
-
|
|
177501
|
-
|
|
177502
|
-
|
|
177503
|
-
|
|
177504
|
-
|
|
177505
|
-
|
|
177506
|
-
|
|
177507
|
-
|
|
177508
|
-
|
|
177509
|
-
|
|
177510
|
-
|
|
177511
|
-
|
|
177512
|
-
|
|
177513
|
-
|
|
177514
|
-
|
|
177515
|
-
|
|
177516
|
-
|
|
177517
|
-
|
|
177518
|
-
|
|
177519
|
-
|
|
177520
|
-
|
|
177521
|
-
|
|
177522
|
-
|
|
177523
|
-
|
|
177524
|
-
|
|
177525
|
-
|
|
177526
|
-
|
|
177527
|
-
|
|
177528
|
-
|
|
177529
|
-
|
|
177530
|
-
|
|
177531
|
-
|
|
177532
|
-
|
|
177533
|
-
|
|
177534
|
-
|
|
177535
|
-
|
|
177536
|
-
|
|
177537
|
-
|
|
177538
|
-
|
|
177539
|
-
|
|
177540
|
-
|
|
177541
|
-
|
|
177542
|
-
|
|
177543
|
-
|
|
177544
|
-
|
|
177545
|
-
|
|
177546
|
-
|
|
177547
|
-
|
|
177548
|
-
|
|
177549
|
-
|
|
177550
|
-
|
|
177551
|
-
|
|
177552
|
-
|
|
177553
|
-
|
|
177554
|
-
continuedIndent as o,
|
|
177555
|
-
foldNodeProp as p,
|
|
177556
|
-
foldInside as q,
|
|
177557
|
-
tags as r,
|
|
177973
|
+
getSubGraphTitleMargins as a$,
|
|
177974
|
+
common_default as a0,
|
|
177975
|
+
calculateTextHeight as a1,
|
|
177976
|
+
lineBreakRegex as a2,
|
|
177977
|
+
setConfig2 as a3,
|
|
177978
|
+
getRegisteredLayoutAlgorithm as a4,
|
|
177979
|
+
render$1 as a5,
|
|
177980
|
+
utils_default as a6,
|
|
177981
|
+
setDiagramTitle as a7,
|
|
177982
|
+
getDiagramTitle as a8,
|
|
177983
|
+
load as a9,
|
|
177984
|
+
atan2 as aA,
|
|
177985
|
+
constant$1 as aB,
|
|
177986
|
+
asin as aC,
|
|
177987
|
+
acos as aD,
|
|
177988
|
+
max as aE,
|
|
177989
|
+
getThemeVariables3 as aF,
|
|
177990
|
+
hasKatex as aG,
|
|
177991
|
+
calculateMathMLDimensions as aH,
|
|
177992
|
+
parseFontSize as aI,
|
|
177993
|
+
ZERO_WIDTH_SPACE as aJ,
|
|
177994
|
+
getUrl as aK,
|
|
177995
|
+
renderKatexSanitized as aL,
|
|
177996
|
+
parseGenericTypes as aM,
|
|
177997
|
+
line$1 as aN,
|
|
177998
|
+
curveBasis as aO,
|
|
177999
|
+
generateId as aP,
|
|
178000
|
+
setupGraphViewbox as aQ,
|
|
178001
|
+
isDark as aR,
|
|
178002
|
+
lighten as aS,
|
|
178003
|
+
darken as aT,
|
|
178004
|
+
commonDb_exports as aU,
|
|
178005
|
+
insertCluster as aV,
|
|
178006
|
+
insertNode as aW,
|
|
178007
|
+
positionNode as aX,
|
|
178008
|
+
getLineFunctionsWithOffset as aY,
|
|
178009
|
+
evaluate as aZ,
|
|
178010
|
+
createText as a_,
|
|
178011
|
+
JSON_SCHEMA as aa,
|
|
178012
|
+
isValidShape as ab,
|
|
178013
|
+
getEdgeId as ac,
|
|
178014
|
+
clear$2 as ad,
|
|
178015
|
+
defaultConfig2 as ae,
|
|
178016
|
+
rgba$1 as af,
|
|
178017
|
+
Utils as ag,
|
|
178018
|
+
Color$1 as ah,
|
|
178019
|
+
__export$1 as ai,
|
|
178020
|
+
setupGraphViewbox2 as aj,
|
|
178021
|
+
cleanAndMerge as ak,
|
|
178022
|
+
defaultConfig_default as al,
|
|
178023
|
+
getConfig as am,
|
|
178024
|
+
random as an,
|
|
178025
|
+
selectSvgElement as ao,
|
|
178026
|
+
package_default as ap,
|
|
178027
|
+
withPath as aq,
|
|
178028
|
+
halfPi as ar,
|
|
178029
|
+
epsilon as as,
|
|
178030
|
+
tau as at,
|
|
178031
|
+
cos as au,
|
|
178032
|
+
sin as av,
|
|
178033
|
+
min as aw,
|
|
178034
|
+
abs$1 as ax,
|
|
178035
|
+
pi as ay,
|
|
178036
|
+
sqrt as az,
|
|
178037
|
+
LRLanguage as b,
|
|
178038
|
+
array$2 as b$,
|
|
178039
|
+
replaceIconSubstring as b0,
|
|
178040
|
+
decodeEntities as b1,
|
|
178041
|
+
getStylesFromArray as b2,
|
|
178042
|
+
delimitedIndent as b3,
|
|
178043
|
+
NodeWeakMap as b4,
|
|
178044
|
+
snippetCompletion as b5,
|
|
178045
|
+
Tag as b6,
|
|
178046
|
+
parseMixed as b7,
|
|
178047
|
+
EditorSelection as b8,
|
|
178048
|
+
countColumn as b9,
|
|
178049
|
+
insertEdge as bA,
|
|
178050
|
+
positionEdgeLabel as bB,
|
|
178051
|
+
insertEdgeLabel as bC,
|
|
178052
|
+
computeDimensionOfText as bD,
|
|
178053
|
+
Ut$1 as bE,
|
|
178054
|
+
Yt$1 as bF,
|
|
178055
|
+
DashboardShell as bG,
|
|
178056
|
+
Qt$1 as bH,
|
|
178057
|
+
MessageSquare as bI,
|
|
178058
|
+
useIsDesktop as bJ,
|
|
178059
|
+
ToolbarOverflowProvider as bK,
|
|
178060
|
+
ToolbarOverflowMenuItems as bL,
|
|
178061
|
+
isDesktop as bM,
|
|
178062
|
+
GitCompare as bN,
|
|
178063
|
+
FolderOpen as bO,
|
|
178064
|
+
useDashboardStore as bP,
|
|
178065
|
+
useNavigate as bQ,
|
|
178066
|
+
DesktopDragRegion as bR,
|
|
178067
|
+
ArrowLeft as bS,
|
|
178068
|
+
DiffView as bT,
|
|
178069
|
+
CodeBrowserView as bU,
|
|
178070
|
+
QuickOpenDialog as bV,
|
|
178071
|
+
SearchFilesDialog as bW,
|
|
178072
|
+
useDiffTarget as bX,
|
|
178073
|
+
useSettingsQuery as bY,
|
|
178074
|
+
agentTypeSupportsSessionListing as bZ,
|
|
178075
|
+
ChatView as b_,
|
|
178076
|
+
Prec as ba,
|
|
178077
|
+
keymap as bb,
|
|
178078
|
+
EditorView as bc,
|
|
178079
|
+
Language as bd,
|
|
178080
|
+
indentUnit as be,
|
|
178081
|
+
foldService as bf,
|
|
178082
|
+
defineLanguageFacet as bg,
|
|
178083
|
+
CompletionContext as bh,
|
|
178084
|
+
EditorState as bi,
|
|
178085
|
+
languageDataProp as bj,
|
|
178086
|
+
LanguageDescription as bk,
|
|
178087
|
+
ParseContext as bl,
|
|
178088
|
+
bracketMatchingHandle as bm,
|
|
178089
|
+
flatIndent as bn,
|
|
178090
|
+
sublanguageProp as bo,
|
|
178091
|
+
baseRest as bp,
|
|
178092
|
+
isArrayLikeObject as bq,
|
|
178093
|
+
constant as br,
|
|
178094
|
+
isFunction as bs,
|
|
178095
|
+
isEmpty as bt,
|
|
178096
|
+
markers_default as bu,
|
|
178097
|
+
clear2 as bv,
|
|
178098
|
+
clear as bw,
|
|
178099
|
+
clear$1 as bx,
|
|
178100
|
+
updateNodeBounds as by,
|
|
178101
|
+
setNodeElem as bz,
|
|
178102
|
+
continuedIndent as c,
|
|
178103
|
+
baseKeys as c$,
|
|
178104
|
+
getUserDefinedConfig as c0,
|
|
178105
|
+
ArrowRight as c1,
|
|
178106
|
+
ArrowUp as c2,
|
|
178107
|
+
ArrowDown as c3,
|
|
178108
|
+
ClipboardPaste as c4,
|
|
178109
|
+
getCurrentZoomLevel as c5,
|
|
178110
|
+
openExternalUrl as c6,
|
|
178111
|
+
subscribeToZoomChanges as c7,
|
|
178112
|
+
SearchBar as c8,
|
|
178113
|
+
ZOOM_CSS_VAR as c9,
|
|
178114
|
+
isIndex as cA,
|
|
178115
|
+
assignValue as cB,
|
|
178116
|
+
constant$2 as cC,
|
|
178117
|
+
interpolateNumber as cD,
|
|
178118
|
+
color as cE,
|
|
178119
|
+
interpolateRgb as cF,
|
|
178120
|
+
interpolateString as cG,
|
|
178121
|
+
styles2String as cH,
|
|
178122
|
+
isLabelStyle as cI,
|
|
178123
|
+
Rgb as cJ,
|
|
178124
|
+
rgbConvert as cK,
|
|
178125
|
+
define as cL,
|
|
178126
|
+
extend$2 as cM,
|
|
178127
|
+
Color as cN,
|
|
178128
|
+
nogamma as cO,
|
|
178129
|
+
hue as cP,
|
|
178130
|
+
dayjs2 as cQ,
|
|
178131
|
+
setToString as cR,
|
|
178132
|
+
overRest as cS,
|
|
178133
|
+
baseFor as cT,
|
|
178134
|
+
baseAssignValue as cU,
|
|
178135
|
+
baseUnary as cV,
|
|
178136
|
+
merge$1 as cW,
|
|
178137
|
+
isObjectLike as cX,
|
|
178138
|
+
baseGetTag as cY,
|
|
178139
|
+
Symbol$1 as cZ,
|
|
178140
|
+
arrayLikeKeys as c_,
|
|
178141
|
+
getIconSVG as ca,
|
|
178142
|
+
registerIconPacks as cb,
|
|
178143
|
+
unknownIcon as cc,
|
|
178144
|
+
invoke as cd,
|
|
178145
|
+
listen as ce,
|
|
178146
|
+
reactDomExports as cf,
|
|
178147
|
+
Globe as cg,
|
|
178148
|
+
Popover as ch,
|
|
178149
|
+
PopoverTrigger as ci,
|
|
178150
|
+
PopoverContent as cj,
|
|
178151
|
+
Search as ck,
|
|
178152
|
+
Trash2 as cl,
|
|
178153
|
+
DropdownMenu as cm,
|
|
178154
|
+
DropdownMenuTrigger as cn,
|
|
178155
|
+
ChevronDown as co,
|
|
178156
|
+
DropdownMenuContent as cp,
|
|
178157
|
+
DropdownMenuItem as cq,
|
|
178158
|
+
TriangleAlert as cr,
|
|
178159
|
+
RotateCw as cs,
|
|
178160
|
+
isObject$1 as ct,
|
|
178161
|
+
isIterateeCall as cu,
|
|
178162
|
+
keysIn as cv,
|
|
178163
|
+
eq as cw,
|
|
178164
|
+
isArrayLike as cx,
|
|
178165
|
+
isArray as cy,
|
|
178166
|
+
identity as cz,
|
|
178167
|
+
foldInside as d,
|
|
178168
|
+
memoize as d0,
|
|
178169
|
+
isArguments as d1,
|
|
178170
|
+
copyObject as d2,
|
|
178171
|
+
getPrototype as d3,
|
|
178172
|
+
cloneArrayBuffer as d4,
|
|
178173
|
+
cloneTypedArray as d5,
|
|
178174
|
+
getTag as d6,
|
|
178175
|
+
nodeUtil as d7,
|
|
178176
|
+
copyArray as d8,
|
|
178177
|
+
isBuffer as d9,
|
|
178178
|
+
cloneBuffer as da,
|
|
178179
|
+
initCloneObject as db,
|
|
178180
|
+
Stack as dc,
|
|
178181
|
+
MapCache as dd,
|
|
178182
|
+
Uint8Array$1 as de,
|
|
178183
|
+
isTypedArray as df,
|
|
178184
|
+
isLength as dg,
|
|
178185
|
+
Set$1 as dh,
|
|
178186
|
+
createAssigner as di,
|
|
178187
|
+
isPrototype as dj,
|
|
178188
|
+
router as dk,
|
|
178189
|
+
ifNotIn as e,
|
|
178190
|
+
foldNodeProp as f,
|
|
178191
|
+
completeFromList as g,
|
|
178192
|
+
syntaxTree as h,
|
|
178193
|
+
indentNodeProp as i,
|
|
178194
|
+
NodeSet as j,
|
|
178195
|
+
NodeType as k,
|
|
178196
|
+
NodeProp as l,
|
|
178197
|
+
createLucideIcon as m,
|
|
178198
|
+
useQueryClient as n,
|
|
178199
|
+
useQuery as o,
|
|
178200
|
+
trpc as p,
|
|
178201
|
+
selectNeighbourBeforeRemove as q,
|
|
178202
|
+
ensureEdgeGroups as r,
|
|
177558
178203
|
styleTags as s,
|
|
177559
|
-
|
|
177560
|
-
|
|
177561
|
-
|
|
177562
|
-
|
|
177563
|
-
|
|
177564
|
-
|
|
177565
|
-
|
|
178204
|
+
tags as t,
|
|
178205
|
+
useAdapter as u,
|
|
178206
|
+
attachEdgeGroupDragVisibility as v,
|
|
178207
|
+
registerInnerDockview as w,
|
|
178208
|
+
DockviewReact as x,
|
|
178209
|
+
Rows2 as y,
|
|
178210
|
+
Plus as z
|
|
177566
178211
|
};
|