@band-app/server 0.5.4 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +1 -1
  2. package/dist/client/assets/{DockviewTerminalContainer-DX8OFKYR.js → DockviewTerminalContainer-BObwxoXE.js} +2 -2
  3. package/dist/client/assets/{TerminalPanel-9pW_g2Kd.js → TerminalPanel-B_30SH7w.js} +1 -1
  4. package/dist/client/assets/{_basePickBy-Dkr8WVHx.js → _basePickBy-DS1DdKpI.js} +1 -1
  5. package/dist/client/assets/{_baseUniq-B0BP4Sik.js → _baseUniq-CfquXO5o.js} +1 -1
  6. package/dist/client/assets/{arc-C88WtUPJ.js → arc-BzAFHN3h.js} +1 -1
  7. package/dist/client/assets/{architectureDiagram-VXUJARFQ-CyLIdwXX.js → architectureDiagram-VXUJARFQ-0gyHmaKw.js} +1 -1
  8. package/dist/client/assets/{blockDiagram-VD42YOAC-GShygeGY.js → blockDiagram-VD42YOAC-BcU0ZZZI.js} +1 -1
  9. package/dist/client/assets/{c4Diagram-YG6GDRKO-BcpX0Aqn.js → c4Diagram-YG6GDRKO-Ciwoec2M.js} +1 -1
  10. package/dist/client/assets/channel-BGuyGJa3.js +1 -0
  11. package/dist/client/assets/{chunk-4BX2VUAB-IchBHT92.js → chunk-4BX2VUAB-W_tkduvw.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-CiMhFR8e.js → chunk-55IACEB6-DJCn0BUX.js} +1 -1
  13. package/dist/client/assets/{chunk-B4BG7PRW-D-8aj6uR.js → chunk-B4BG7PRW-OLwhCa5k.js} +1 -1
  14. package/dist/client/assets/{chunk-DI55MBZ5-C13AzM7U.js → chunk-DI55MBZ5-MFZ5-oPD.js} +1 -1
  15. package/dist/client/assets/{chunk-FMBD7UC4-B4gYDpvB.js → chunk-FMBD7UC4-BDlrNnpZ.js} +1 -1
  16. package/dist/client/assets/{chunk-QN33PNHL-DG8uaz-H.js → chunk-QN33PNHL-CjwPbo5G.js} +1 -1
  17. package/dist/client/assets/{chunk-QZHKN3VN-CUeAC5bF.js → chunk-QZHKN3VN-3lGRploy.js} +1 -1
  18. package/dist/client/assets/{chunk-TZMSLE5B-Crx06Grw.js → chunk-TZMSLE5B-Dez84DVY.js} +1 -1
  19. package/dist/client/assets/classDiagram-2ON5EDUG-Bcoh3oTO.js +1 -0
  20. package/dist/client/assets/classDiagram-v2-WZHVMYZB-Bcoh3oTO.js +1 -0
  21. package/dist/client/assets/clone-DTSWxIr_.js +1 -0
  22. package/dist/client/assets/{cose-bilkent-S5V4N54A-BjyHTZfo.js → cose-bilkent-S5V4N54A-olv_le13.js} +1 -1
  23. package/dist/client/assets/{dagre-6UL2VRFP-C9LatsFq.js → dagre-6UL2VRFP-DSasPOdo.js} +1 -1
  24. package/dist/client/assets/{diagram-PSM6KHXK-Bzxy2DxA.js → diagram-PSM6KHXK-ebd2t3Dh.js} +1 -1
  25. package/dist/client/assets/{diagram-QEK2KX5R--qsdr1em.js → diagram-QEK2KX5R-DETGbCmh.js} +1 -1
  26. package/dist/client/assets/{diagram-S2PKOQOG-SLCfnLEL.js → diagram-S2PKOQOG-Duif0gCe.js} +1 -1
  27. package/dist/client/assets/{erDiagram-Q2GNP2WA-Bqfdi51r.js → erDiagram-Q2GNP2WA-7NKTniGi.js} +1 -1
  28. package/dist/client/assets/{flowDiagram-NV44I4VS-BxNRRaL6.js → flowDiagram-NV44I4VS-B29HpwMu.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-JELNMOA3-B3nW9Tee.js → ganttDiagram-JELNMOA3-Do43fY0t.js} +1 -1
  30. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-CJ5dA5iM.js → gitGraphDiagram-V2S2FVAM-BernJnLk.js} +1 -1
  31. package/dist/client/assets/{graph-Ce0puKsP.js → graph-Cj575nQq.js} +1 -1
  32. package/dist/client/assets/{highlighted-body-B3W2YXNL-CENKUGzV.js → highlighted-body-B3W2YXNL-WhJuPudb.js} +1 -1
  33. package/dist/client/assets/{index-BJDmvnal.js → index-B8ZpCpou.js} +1 -1
  34. package/dist/client/assets/{index-DL2wTzK1.js → index-BMY-nliE.js} +1 -1
  35. package/dist/client/assets/{index-CosJojrk.js → index-BTx3LYAO.js} +1 -1
  36. package/dist/client/assets/{index-SWV7MFMV.js → index-BuCOraAN.js} +1 -1
  37. package/dist/client/assets/{index-BDCONrW_.js → index-CUcxKuUy.js} +1 -1
  38. package/dist/client/assets/{index-B3ozbkAt.js → index-CXlGPE4F.js} +1 -1
  39. package/dist/client/assets/{index-qwbh_ssl.js → index-D4KvM7Nf.js} +1 -1
  40. package/dist/client/assets/{index-BsMHcPzb.js → index-D9yhhi7d.js} +1 -1
  41. package/dist/client/assets/{index-C01QsgdU.js → index-DGMdHUd-.js} +1 -1
  42. package/dist/client/assets/{index-BSd1jAU9.js → index-DNJro5ce.js} +1 -1
  43. package/dist/client/assets/{index-GxKLyCuq.js → index-DOlTzcT9.js} +1 -1
  44. package/dist/client/assets/{index-Dd8shGvN.js → index-DeMltHzV.js} +1 -1
  45. package/dist/client/assets/{index-D3sAIK6P.js → index-Dgv8mF9A.js} +1 -1
  46. package/dist/client/assets/{index-DfwX9IUV.js → index-DlCjHJGt.js} +1 -1
  47. package/dist/client/assets/{index-Cdvev7u6.js → index-DziJ_w_s.js} +1 -1
  48. package/dist/client/assets/{index-DGV19pgb.js → index-dscSHXn-.js} +1 -1
  49. package/dist/client/assets/{index-jSH-9g1p.js → index-xZP1WFvU.js} +1 -1
  50. package/dist/client/assets/{index-C_z1eCvW.js → index-yYDoQlcT.js} +1 -1
  51. package/dist/client/assets/{infoDiagram-HS3SLOUP--q9GXvGW.js → infoDiagram-HS3SLOUP-CwWuIWke.js} +1 -1
  52. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-C8V3w1dG.js → journeyDiagram-XKPGCS4Q-CwAt4sg1.js} +1 -1
  53. package/dist/client/assets/{kanban-definition-3W4ZIXB7-BJk0X7tz.js → kanban-definition-3W4ZIXB7-IyDhCRuM.js} +1 -1
  54. package/dist/client/assets/{layout-ChwcG4Xl.js → layout-Cu0JMbW5.js} +1 -1
  55. package/dist/client/assets/{linear-BDZmJSE8.js → linear-DZDqd87L.js} +1 -1
  56. package/dist/client/assets/{main-BJRBUBf7.js → main-Cv7pKZy_.js} +226 -226
  57. package/dist/client/assets/main-rWzqMN1o.css +1 -0
  58. package/dist/client/assets/{mindmap-definition-VGOIOE7T-ByMpVnYs.js → mindmap-definition-VGOIOE7T-Dth1CqLW.js} +1 -1
  59. package/dist/client/assets/{pieDiagram-ADFJNKIX-CD-lmXbd.js → pieDiagram-ADFJNKIX-CF2YDYMu.js} +1 -1
  60. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-BdOgBPk1.js → quadrantDiagram-AYHSOK5B-nxHcYBhT.js} +1 -1
  61. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-f7DPR7JO.js → requirementDiagram-UZGBJVZJ-DYuaF4G9.js} +1 -1
  62. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-bi8QNTNx.js → sankeyDiagram-TZEHDZUN-DCeOMpHq.js} +1 -1
  63. package/dist/client/assets/{sequenceDiagram-WL72ISMW-DvrFWc3k.js → sequenceDiagram-WL72ISMW-D3ZzpnOf.js} +1 -1
  64. package/dist/client/assets/{stateDiagram-FKZM4ZOC-pHRodxiR.js → stateDiagram-FKZM4ZOC-CephZuT8.js} +1 -1
  65. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-B2E3_eDe.js +1 -0
  66. package/dist/client/assets/{timeline-definition-IT6M3QCI-GvuMpLMJ.js → timeline-definition-IT6M3QCI-CMR_brz2.js} +1 -1
  67. package/dist/client/assets/{treemap-GDKQZRPO-1Fkk9zI9.js → treemap-GDKQZRPO-Dr2RtG6j.js} +1 -1
  68. package/dist/client/assets/{useSessionListContext-CRcZVcHa.js → useSessionListContext-Deo93kBU.js} +1 -1
  69. package/dist/client/assets/{workspace._workspaceId-Cy3AEGLV.js → workspace._workspaceId-B6AmUJBH.js} +1 -1
  70. package/dist/client/assets/{workspace._workspaceId.changes-Rwu7P9DU.js → workspace._workspaceId.changes-DRRihouM.js} +1 -1
  71. package/dist/client/assets/workspace._workspaceId.code-ClodXGQ6.js +1 -0
  72. package/dist/client/assets/{workspace._workspaceId.code._-BJQkX_UC.js → workspace._workspaceId.code._-C2W-zGSx.js} +1 -1
  73. package/dist/client/assets/{workspace._workspaceId.code.index-BRqZeE-M.js → workspace._workspaceId.code.index-D56jkXpA.js} +1 -1
  74. package/dist/client/assets/{workspace._workspaceId.index-D_CsfVyR.js → workspace._workspaceId.index-DVYXZuSd.js} +1 -1
  75. package/dist/client/assets/{workspace._workspaceId.terminal-DfJiaUra.js → workspace._workspaceId.terminal--TZaT08S.js} +2 -2
  76. package/dist/client/assets/{xychartDiagram-PRI3JC2R-CQ-W21MD.js → xychartDiagram-PRI3JC2R-CQ1vfZE5.js} +1 -1
  77. package/dist/server/assets/{DockviewTerminalContainer-nurSvNMN.js → DockviewTerminalContainer-B7m50Lcc.js} +2 -2
  78. package/dist/server/assets/{TerminalPanel-Cf-9H8Lr.js → TerminalPanel-C2nFSkcn.js} +1 -1
  79. package/dist/server/assets/{_basePickBy-D3FmqT7A.js → _basePickBy-J3VjyO9D.js} +2 -2
  80. package/dist/server/assets/{_baseUniq-CZLL_KGQ.js → _baseUniq-DlbIVh20.js} +1 -1
  81. package/dist/server/assets/{_tanstack-start-manifest_v-DcXFd6TS.js → _tanstack-start-manifest_v-C9pSWi1i.js} +1 -1
  82. package/dist/server/assets/{arc-B-ehAOzx.js → arc-Ds6-Gtmo.js} +1 -1
  83. package/dist/server/assets/{architecture-7HQA4BMR-Bm2CNNZn.js → architecture-7HQA4BMR-DT3MUSS5.js} +6 -6
  84. package/dist/server/assets/{architectureDiagram-VXUJARFQ-CxaRzb-g.js → architectureDiagram-VXUJARFQ-ClVOs7P1.js} +6 -6
  85. package/dist/server/assets/{blockDiagram-VD42YOAC-CsN3W5TR.js → blockDiagram-VD42YOAC-CnVWNic_.js} +6 -6
  86. package/dist/server/assets/{c4Diagram-YG6GDRKO-C2v52EXK.js → c4Diagram-YG6GDRKO-D9aranD0.js} +2 -2
  87. package/dist/server/assets/{channel-C3XN_tlw.js → channel-DQjskrHf.js} +1 -1
  88. package/dist/server/assets/{chunk-4BX2VUAB-BRZhlA3M.js → chunk-4BX2VUAB-BctuYILS.js} +1 -1
  89. package/dist/server/assets/{chunk-55IACEB6-CvRWSP7_.js → chunk-55IACEB6-CxcgMpfR.js} +1 -1
  90. package/dist/server/assets/{chunk-B4BG7PRW-CtnW_06V.js → chunk-B4BG7PRW-CfsNsYIg.js} +4 -4
  91. package/dist/server/assets/{chunk-DI55MBZ5-BQw22O7H.js → chunk-DI55MBZ5-B6n-fRVB.js} +3 -3
  92. package/dist/server/assets/{chunk-FMBD7UC4-GsUqEYsC.js → chunk-FMBD7UC4-CvBepTeZ.js} +1 -1
  93. package/dist/server/assets/{chunk-QN33PNHL-Cbg19vtg.js → chunk-QN33PNHL-DS5M3nQE.js} +1 -1
  94. package/dist/server/assets/{chunk-QZHKN3VN-BWszKJyV.js → chunk-QZHKN3VN-DCLb0fZ1.js} +1 -1
  95. package/dist/server/assets/{chunk-TZMSLE5B-DQrHctmP.js → chunk-TZMSLE5B-B-Uhio6_.js} +1 -1
  96. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-CbsNfDCL.js → classDiagram-2ON5EDUG-B7uMu4wG.js} +5 -5
  97. package/dist/server/assets/{classDiagram-2ON5EDUG-CbsNfDCL.js → classDiagram-v2-WZHVMYZB-B7uMu4wG.js} +5 -5
  98. package/dist/server/assets/{clone-x7_sin8C.js → clone-B7a1FujU.js} +1 -1
  99. package/dist/server/assets/{cose-bilkent-S5V4N54A-BOuoNr7N.js → cose-bilkent-S5V4N54A-_7cffNle.js} +1 -1
  100. package/dist/server/assets/{dagre-6UL2VRFP-BEGPY_P8.js → dagre-6UL2VRFP-Cefu204F.js} +6 -6
  101. package/dist/server/assets/{diagram-PSM6KHXK-DdLXbkDH.js → diagram-PSM6KHXK-BeMp8Xfu.js} +7 -7
  102. package/dist/server/assets/{diagram-QEK2KX5R-Ywb8tTSL.js → diagram-QEK2KX5R-UNhxZG5g.js} +6 -6
  103. package/dist/server/assets/{diagram-S2PKOQOG-Bk6j9I_3.js → diagram-S2PKOQOG-CHWLN67z.js} +6 -6
  104. package/dist/server/assets/{erDiagram-Q2GNP2WA-CS94DyiJ.js → erDiagram-Q2GNP2WA-9TUXBEEN.js} +4 -4
  105. package/dist/server/assets/{flowDiagram-NV44I4VS-DGePuZ_D.js → flowDiagram-NV44I4VS-DkHr76XI.js} +5 -5
  106. package/dist/server/assets/{ganttDiagram-JELNMOA3-nyPfcgRT.js → ganttDiagram-JELNMOA3-D62VSFN-.js} +2 -2
  107. package/dist/server/assets/{gitGraph-G5XIXVHT-CKTPOKTu.js → gitGraph-G5XIXVHT-wAj_iVxo.js} +6 -6
  108. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-BygjesE-.js → gitGraphDiagram-V2S2FVAM-Cq6NrkS2.js} +7 -7
  109. package/dist/server/assets/{graph-B6TDpsg4.js → graph-BQR4IW-M.js} +2 -2
  110. package/dist/server/assets/{highlighted-body-B3W2YXNL-CULjZ_nJ.js → highlighted-body-B3W2YXNL-f4qauOuN.js} +1 -1
  111. package/dist/server/assets/{index-D4VsXH_e.js → index-B07RUisL.js} +2 -2
  112. package/dist/server/assets/{index-BCMFgTLH.js → index-BgRkMr0S.js} +3 -3
  113. package/dist/server/assets/{index-CsE88Ld8.js → index-BnaMl2Ta.js} +2 -2
  114. package/dist/server/assets/{index-DMcpsIUc.js → index-C-_PyKI8.js} +5 -5
  115. package/dist/server/assets/{index-DCJj-J2w.js → index-C70O-HGl.js} +2 -2
  116. package/dist/server/assets/{index-0oeRMDH_.js → index-CFtz0N_G.js} +3 -3
  117. package/dist/server/assets/{index-BRsnuD-O.js → index-CGs_KUt6.js} +2 -2
  118. package/dist/server/assets/{index-DYGOZ3mj.js → index-CZPx4FSZ.js} +4 -4
  119. package/dist/server/assets/{index-5SwWQ6oe.js → index-CiQmjF-z.js} +2 -2
  120. package/dist/server/assets/{index-CnQ4qso3.js → index-ClnAaUnc.js} +1 -1
  121. package/dist/server/assets/{index-DuWXmjWc.js → index-DGpgWNbR.js} +1 -1
  122. package/dist/server/assets/{index-Can-bHgo.js → index-DXlyuzHk.js} +2 -2
  123. package/dist/server/assets/{index-BlnGJ9is.js → index-DZkn94Qw.js} +2 -2
  124. package/dist/server/assets/{index-eLPxFa7w.js → index-DbtmJMHb.js} +5 -5
  125. package/dist/server/assets/{index-Bx2Tna2y.js → index-DgI6m9w2.js} +2 -2
  126. package/dist/server/assets/{index-Bli_q03X.js → index-OT8s82kA.js} +2 -2
  127. package/dist/server/assets/{index-C1-EaJTv.js → index-Y-3cIxVF.js} +2 -2
  128. package/dist/server/assets/{index-DJDlsaKi.js → index-oSZ-5UB6.js} +2 -2
  129. package/dist/server/assets/{info-VBDWY6EO-B-rB5BtI.js → info-VBDWY6EO-DCfkIc0K.js} +6 -6
  130. package/dist/server/assets/{infoDiagram-HS3SLOUP-D83vTisF.js → infoDiagram-HS3SLOUP-z48Ilxyy.js} +5 -5
  131. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-PbUYIdib.js → journeyDiagram-XKPGCS4Q-2_BMX1ei.js} +4 -4
  132. package/dist/server/assets/{kanban-definition-3W4ZIXB7-BQSc_qmP.js → kanban-definition-3W4ZIXB7-YMu0hChh.js} +2 -2
  133. package/dist/server/assets/{layout-DXYeijc_.js → layout-Cp5xjTuv.js} +4 -4
  134. package/dist/server/assets/{linear-Dwrm9Gnq.js → linear-CC3vfL_Z.js} +1 -1
  135. package/dist/server/assets/{mermaid-3ZIDBTTL-BnVYO1pJ.js → mermaid-3ZIDBTTL-nj6kJNsf.js} +1 -1
  136. package/dist/server/assets/{mermaid-parser.core-CUfP0S_P.js → mermaid-parser.core-CS8wPCwT.js} +11 -11
  137. package/dist/server/assets/{mindmap-definition-VGOIOE7T-BdjAKwAK.js → mindmap-definition-VGOIOE7T-BbNEUTwc.js} +3 -3
  138. package/dist/server/assets/{packet-DYOGHKS2-d7SiXxLo.js → packet-DYOGHKS2-C4ObDfPs.js} +6 -6
  139. package/dist/server/assets/{pie-VRWISCQL-euknErR4.js → pie-VRWISCQL-24cVROwS.js} +6 -6
  140. package/dist/server/assets/{pieDiagram-ADFJNKIX-Bl150d6W.js → pieDiagram-ADFJNKIX-BDcmTNeb.js} +7 -7
  141. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-ClIy1n9L.js → quadrantDiagram-AYHSOK5B-DVfUAm25.js} +2 -2
  142. package/dist/server/assets/{radar-ZZBFDIW7-hsbqqEeW.js → radar-ZZBFDIW7-Xb4_ybap.js} +6 -6
  143. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-B87j_suL.js → requirementDiagram-UZGBJVZJ-CQfWrrP_.js} +3 -3
  144. package/dist/server/assets/{router-DMoul9bL.js → router-BnXOl-F9.js} +597 -564
  145. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-Bq18JLF9.js → sankeyDiagram-TZEHDZUN-BW9xc6Gi.js} +1 -1
  146. package/dist/server/assets/{sequenceDiagram-WL72ISMW-DziQuu14.js → sequenceDiagram-WL72ISMW-_VMzymo9.js} +3 -3
  147. package/dist/server/assets/{stateDiagram-FKZM4ZOC-7wEsr4R_.js → stateDiagram-FKZM4ZOC-P9tJlZ70.js} +8 -8
  148. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-D2VjwPAa.js → stateDiagram-v2-4FDKWEC3-Cb6P-c6h.js} +4 -4
  149. package/dist/server/assets/{timeline-definition-IT6M3QCI--uelCCOi.js → timeline-definition-IT6M3QCI-tuTHzmXv.js} +2 -2
  150. package/dist/server/assets/{treemap-GDKQZRPO-DVHxmTc8.js → treemap-GDKQZRPO-COB3TLcF.js} +6 -6
  151. package/dist/server/assets/{workspace._workspaceId-Bs8UzdnH.js → workspace._workspaceId-Ca5XltsV.js} +2 -2
  152. package/dist/server/assets/{workspace._workspaceId.changes-BWu2NrZR.js → workspace._workspaceId.changes-z2xCX4Ct.js} +1 -1
  153. package/dist/server/assets/{workspace._workspaceId.code._-DKgsvYy3.js → workspace._workspaceId.code._-DQTK_1av.js} +1 -1
  154. package/dist/server/assets/{workspace._workspaceId.code.index-D9xieBbz.js → workspace._workspaceId.code.index-DTziHng0.js} +1 -1
  155. package/dist/server/assets/{workspace._workspaceId.index-CM2nPNp3.js → workspace._workspaceId.index-C2U_2sVz.js} +1 -1
  156. package/dist/server/assets/{workspace._workspaceId.terminal-ByrTEXV_.js → workspace._workspaceId.terminal-i2FfY7JG.js} +2 -2
  157. package/dist/server/assets/{xychartDiagram-PRI3JC2R-C3ztrSUC.js → xychartDiagram-PRI3JC2R-B8xp3EP5.js} +2 -2
  158. package/dist/server/server.js +2 -2
  159. package/dist/start-server.mjs +155 -134
  160. package/package.json +5 -7
  161. package/dist/client/assets/channel-COxuXp7F.js +0 -1
  162. package/dist/client/assets/classDiagram-2ON5EDUG-CtxJr2zo.js +0 -1
  163. package/dist/client/assets/classDiagram-v2-WZHVMYZB-CtxJr2zo.js +0 -1
  164. package/dist/client/assets/clone-Cud65zOY.js +0 -1
  165. package/dist/client/assets/core-mPlcS5K-.js +0 -1
  166. package/dist/client/assets/event-DRyjiKX_.js +0 -1
  167. package/dist/client/assets/index-BkW3q3LQ.js +0 -1
  168. package/dist/client/assets/main-BnrSCdeV.css +0 -1
  169. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BUgsJX1c.js +0 -1
  170. package/dist/client/assets/window-BFoF6nYm.js +0 -1
  171. package/dist/client/assets/workspace._workspaceId.code-zGA3uY7G.js +0 -1
  172. package/dist/server/assets/core-dG4_vufa.js +0 -45
  173. package/dist/server/assets/event-2oMkw_LQ.js +0 -63
  174. package/dist/server/assets/index-jMSXp5h7.js +0 -10
  175. package/dist/server/assets/window-Qr88gZCE.js +0 -2005
@@ -7466,7 +7466,7 @@ var CheckboxItem = MenuCheckboxItem;
7466
7466
  var RadioGroup = MenuRadioGroup;
7467
7467
  var RadioItem = MenuRadioItem;
7468
7468
  var ItemIndicator$1 = MenuItemIndicator;
7469
- var Separator = MenuSeparator;
7469
+ var Separator$1 = MenuSeparator;
7470
7470
  var Arrow2$1 = MenuArrow;
7471
7471
  var Sub = MenuSub;
7472
7472
  var SubTrigger = MenuSubTrigger;
@@ -7672,7 +7672,7 @@ var SEPARATOR_NAME$2 = "ContextMenuSeparator";
7672
7672
  var ContextMenuSeparator$1 = reactExports.forwardRef((props, forwardedRef) => {
7673
7673
  const { __scopeContextMenu, ...separatorProps } = props;
7674
7674
  const menuScope = useMenuScope$1(__scopeContextMenu);
7675
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });
7675
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Separator$1, { ...menuScope, ...separatorProps, ref: forwardedRef });
7676
7676
  });
7677
7677
  ContextMenuSeparator$1.displayName = SEPARATOR_NAME$2;
7678
7678
  var ARROW_NAME$4 = "ContextMenuArrow";
@@ -7926,7 +7926,7 @@ var SEPARATOR_NAME$1 = "DropdownMenuSeparator";
7926
7926
  var DropdownMenuSeparator$1 = reactExports.forwardRef((props, forwardedRef) => {
7927
7927
  const { __scopeDropdownMenu, ...separatorProps } = props;
7928
7928
  const menuScope = useMenuScope(__scopeDropdownMenu);
7929
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });
7929
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Separator$1, { ...menuScope, ...separatorProps, ref: forwardedRef });
7930
7930
  });
7931
7931
  DropdownMenuSeparator$1.displayName = SEPARATOR_NAME$1;
7932
7932
  var ARROW_NAME$3 = "DropdownMenuArrow";
@@ -10003,13 +10003,13 @@ var SelectScrollButtonImpl = reactExports.forwardRef((props, forwardedRef) => {
10003
10003
  );
10004
10004
  });
10005
10005
  var SEPARATOR_NAME = "SelectSeparator";
10006
- var SelectSeparator = reactExports.forwardRef(
10006
+ var SelectSeparator$1 = reactExports.forwardRef(
10007
10007
  (props, forwardedRef) => {
10008
10008
  const { __scopeSelect, ...separatorProps } = props;
10009
10009
  return /* @__PURE__ */ jsxRuntimeExports.jsx(Primitive.div, { "aria-hidden": true, ...separatorProps, ref: forwardedRef });
10010
10010
  }
10011
10011
  );
10012
- SelectSeparator.displayName = SEPARATOR_NAME;
10012
+ SelectSeparator$1.displayName = SEPARATOR_NAME;
10013
10013
  var ARROW_NAME$1 = "SelectArrow";
10014
10014
  var SelectArrow = reactExports.forwardRef(
10015
10015
  (props, forwardedRef) => {
@@ -10107,6 +10107,7 @@ var Viewport$1 = SelectViewport;
10107
10107
  var Item = SelectItem$1;
10108
10108
  var ItemText = SelectItemText;
10109
10109
  var ItemIndicator = SelectItemIndicator;
10110
+ var Separator = SelectSeparator$1;
10110
10111
  var SWITCH_NAME = "Switch";
10111
10112
  var [createSwitchContext] = createContextScope(SWITCH_NAME);
10112
10113
  var [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);
@@ -15108,6 +15109,19 @@ function SelectItem({
15108
15109
  }
15109
15110
  );
15110
15111
  }
15112
+ function SelectSeparator({
15113
+ className,
15114
+ ...props
15115
+ }) {
15116
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
15117
+ Separator,
15118
+ {
15119
+ "data-slot": "select-separator",
15120
+ className: cn$2("-mx-1 my-1 h-px bg-border", className),
15121
+ ...props
15122
+ }
15123
+ );
15124
+ }
15111
15125
  function Spinner({ className, ...props }) {
15112
15126
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
15113
15127
  "svg",
@@ -40420,53 +40434,53 @@ async function loadLanguage(lang) {
40420
40434
  try {
40421
40435
  switch (lang) {
40422
40436
  case "javascript":
40423
- return import("./index-CsE88Ld8.js").then((m2) => m2.javascript());
40437
+ return import("./index-BnaMl2Ta.js").then((m2) => m2.javascript());
40424
40438
  case "jsx":
40425
- return import("./index-CsE88Ld8.js").then((m2) => m2.javascript({ jsx: true }));
40439
+ return import("./index-BnaMl2Ta.js").then((m2) => m2.javascript({ jsx: true }));
40426
40440
  case "typescript":
40427
- return import("./index-CsE88Ld8.js").then(
40441
+ return import("./index-BnaMl2Ta.js").then(
40428
40442
  (m2) => m2.javascript({ typescript: true })
40429
40443
  );
40430
40444
  case "tsx":
40431
- return import("./index-CsE88Ld8.js").then(
40445
+ return import("./index-BnaMl2Ta.js").then(
40432
40446
  (m2) => m2.javascript({ jsx: true, typescript: true })
40433
40447
  );
40434
40448
  case "python":
40435
- return import("./index-Can-bHgo.js").then((m2) => m2.python());
40449
+ return import("./index-DXlyuzHk.js").then((m2) => m2.python());
40436
40450
  case "html":
40437
- return import("./index-DYGOZ3mj.js").then((m2) => m2.html());
40451
+ return import("./index-CZPx4FSZ.js").then((m2) => m2.html());
40438
40452
  case "css":
40439
- return import("./index-BlnGJ9is.js").then((m2) => m2.css());
40453
+ return import("./index-DZkn94Qw.js").then((m2) => m2.css());
40440
40454
  case "scss":
40441
40455
  case "sass":
40442
- return import("./index-BCMFgTLH.js").then((m2) => m2.sass());
40456
+ return import("./index-BgRkMr0S.js").then((m2) => m2.sass());
40443
40457
  case "less":
40444
- return import("./index-0oeRMDH_.js").then((m2) => m2.less());
40458
+ return import("./index-CFtz0N_G.js").then((m2) => m2.less());
40445
40459
  case "json":
40446
40460
  case "jsonc":
40447
- return import("./index-5SwWQ6oe.js").then((m2) => m2.json());
40461
+ return import("./index-CiQmjF-z.js").then((m2) => m2.json());
40448
40462
  case "markdown":
40449
40463
  case "mdx":
40450
- return import("./index-eLPxFa7w.js").then((m2) => m2.markdown());
40464
+ return import("./index-DbtmJMHb.js").then((m2) => m2.markdown());
40451
40465
  case "xml":
40452
- return import("./index-DCJj-J2w.js").then((m2) => m2.xml());
40466
+ return import("./index-C70O-HGl.js").then((m2) => m2.xml());
40453
40467
  case "yaml":
40454
- return import("./index-Bli_q03X.js").then((m2) => m2.yaml());
40468
+ return import("./index-OT8s82kA.js").then((m2) => m2.yaml());
40455
40469
  case "sql":
40456
- return import("./index-DJDlsaKi.js").then((m2) => m2.sql());
40470
+ return import("./index-oSZ-5UB6.js").then((m2) => m2.sql());
40457
40471
  case "rust":
40458
- return import("./index-D4VsXH_e.js").then((m2) => m2.rust());
40472
+ return import("./index-B07RUisL.js").then((m2) => m2.rust());
40459
40473
  case "go":
40460
- return import("./index-BRsnuD-O.js").then((m2) => m2.go());
40474
+ return import("./index-CGs_KUt6.js").then((m2) => m2.go());
40461
40475
  case "java":
40462
- return import("./index-Bx2Tna2y.js").then((m2) => m2.java());
40476
+ return import("./index-DgI6m9w2.js").then((m2) => m2.java());
40463
40477
  case "kotlin":
40464
- return import("./index-Bx2Tna2y.js").then((m2) => m2.java());
40478
+ return import("./index-DgI6m9w2.js").then((m2) => m2.java());
40465
40479
  case "c":
40466
40480
  case "cpp":
40467
- return import("./index-C1-EaJTv.js").then((m2) => m2.cpp());
40481
+ return import("./index-Y-3cIxVF.js").then((m2) => m2.cpp());
40468
40482
  case "php":
40469
- return import("./index-DMcpsIUc.js").then((m2) => m2.php());
40483
+ return import("./index-C-_PyKI8.js").then((m2) => m2.php());
40470
40484
  // Legacy modes via StreamLanguage
40471
40485
  case "bash":
40472
40486
  case "fish":
@@ -47260,33 +47274,17 @@ function SettingsPage({ open: open2, onOpenChange }) {
47260
47274
  }
47261
47275
  ) });
47262
47276
  }
47263
- const isTauri$2 = typeof window !== "undefined" && "__TAURI_INTERNALS__" in window;
47264
- const isElectron$2 = typeof window !== "undefined" && "__BAND_DESKTOP__" in window;
47265
- const isDesktop$1 = isTauri$2 || isElectron$2;
47277
+ const isElectron$1 = typeof window !== "undefined" && "__BAND_DESKTOP__" in window;
47278
+ const isDesktop$1 = isElectron$1;
47266
47279
  function electronBridge$2() {
47267
- if (!isElectron$2) return null;
47280
+ if (!isElectron$1) return null;
47268
47281
  const bridge = window.__BAND_DESKTOP__;
47269
47282
  return bridge ?? null;
47270
47283
  }
47271
47284
  async function desktopInvoke$1(cmd2, args) {
47272
47285
  const bridge = electronBridge$2();
47273
47286
  if (bridge) return await bridge.invoke(cmd2, args);
47274
- if (isTauri$2) {
47275
- const { invoke: invoke2 } = await import("./core-dG4_vufa.js");
47276
- return invoke2(cmd2, args);
47277
- }
47278
- throw new Error(`desktopInvoke('${cmd2}') called outside a desktop shell`);
47279
- }
47280
- async function desktopStartDragging() {
47281
- const bridge = electronBridge$2();
47282
- if (bridge) {
47283
- await bridge.startDragging();
47284
- return;
47285
- }
47286
- if (isTauri$2) {
47287
- const { getCurrentWindow } = await import("./window-Qr88gZCE.js");
47288
- await getCurrentWindow().startDragging();
47289
- }
47287
+ throw new Error(`desktopInvoke('${cmd2}') called outside the desktop shell`);
47290
47288
  }
47291
47289
  function DashboardShell({ toolbarMenuItems, hideTitleBar }) {
47292
47290
  const { projects, isLoading: loading } = useProjects();
@@ -47302,23 +47300,11 @@ function DashboardShell({ toolbarMenuItems, hideTitleBar }) {
47302
47300
  const { state: hooksState, install: installHooks } = useHooksSetup();
47303
47301
  const { state: cliState, install: installCli } = useCliSetup();
47304
47302
  const [appTitle, setAppTitle] = reactExports.useState("Band");
47305
- const titleBarRef = reactExports.useRef(null);
47306
47303
  reactExports.useEffect(() => {
47307
47304
  if (!isDesktop$1) return;
47308
47305
  desktopInvoke$1("get_app_title").then(setAppTitle).catch(() => {
47309
47306
  });
47310
47307
  }, []);
47311
- reactExports.useEffect(() => {
47312
- const el = titleBarRef.current;
47313
- if (!isDesktop$1 || !el) return;
47314
- const onMouseDown = (e2) => {
47315
- if (e2.buttons !== 1) return;
47316
- desktopStartDragging().catch(() => {
47317
- });
47318
- };
47319
- el.addEventListener("mousedown", onMouseDown);
47320
- return () => el.removeEventListener("mousedown", onMouseDown);
47321
- }, []);
47322
47308
  useStatusWatcher();
47323
47309
  useBranchStatusWatcher();
47324
47310
  useSetupStatusWatcher();
@@ -47369,9 +47355,8 @@ function DashboardShell({ toolbarMenuItems, hideTitleBar }) {
47369
47355
  isDesktop$1 && !hideTitleBar && /* @__PURE__ */ jsxRuntimeExports.jsx(
47370
47356
  "div",
47371
47357
  {
47372
- ref: titleBarRef,
47373
- "data-tauri-drag-region": true,
47374
47358
  className: "h-[38px] shrink-0 flex items-center justify-center border-b border-border",
47359
+ style: { WebkitAppRegion: "drag" },
47375
47360
  children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium text-muted-foreground select-none pointer-events-none", children: appTitle })
47376
47361
  }
47377
47362
  ),
@@ -49835,6 +49820,25 @@ function storeDiffMode(mode) {
49835
49820
  } catch {
49836
49821
  }
49837
49822
  }
49823
+ const COMPARE_BRANCH_KEY_PREFIX = "band:diff-compare-branch:";
49824
+ function getStoredCompareBranch(workspaceId) {
49825
+ try {
49826
+ return localStorage.getItem(COMPARE_BRANCH_KEY_PREFIX + workspaceId);
49827
+ } catch {
49828
+ return null;
49829
+ }
49830
+ }
49831
+ function storeCompareBranch(workspaceId, branch) {
49832
+ try {
49833
+ if (branch) {
49834
+ localStorage.setItem(COMPARE_BRANCH_KEY_PREFIX + workspaceId, branch);
49835
+ } else {
49836
+ localStorage.removeItem(COMPARE_BRANCH_KEY_PREFIX + workspaceId);
49837
+ }
49838
+ } catch {
49839
+ }
49840
+ }
49841
+ const UNCOMMITTED_VALUE = "__uncommitted__";
49838
49842
  const EXPAND_ALL_KEY = "band:diff-expand-all";
49839
49843
  function getStoredExpandAll() {
49840
49844
  try {
@@ -50407,7 +50411,6 @@ function DiffView({
50407
50411
  const adapter2 = useAdapter();
50408
50412
  const [summary, setSummary] = reactExports.useState(null);
50409
50413
  const summaryRef = reactExports.useRef(null);
50410
- const [baseBranch, setBaseBranch] = reactExports.useState(null);
50411
50414
  const [error, setError] = reactExports.useState(null);
50412
50415
  const [loading, setLoading] = reactExports.useState(true);
50413
50416
  const fetchSummaryRef = reactExports.useRef(null);
@@ -50419,6 +50422,16 @@ function DiffView({
50419
50422
  const [viewMode, setViewModeState] = reactExports.useState(getStoredViewMode);
50420
50423
  const [diffMode, setDiffModeState] = reactExports.useState(getStoredDiffMode);
50421
50424
  const [expandAll, setExpandAllState] = reactExports.useState(getStoredExpandAll);
50425
+ const [compareBranch, setCompareBranchState] = reactExports.useState(
50426
+ () => getStoredCompareBranch(workspaceId)
50427
+ );
50428
+ const [availableBranches, setAvailableBranches] = reactExports.useState(() => {
50429
+ const stored = getStoredCompareBranch(workspaceId);
50430
+ return stored ? [stored] : [];
50431
+ });
50432
+ const [availableDefaultBranch, setAvailableDefaultBranch] = reactExports.useState(null);
50433
+ const compareBranchRef = reactExports.useRef(compareBranch);
50434
+ compareBranchRef.current = compareBranch;
50422
50435
  const setViewMode = reactExports.useCallback((mode) => {
50423
50436
  setViewModeState(mode);
50424
50437
  storeViewMode(mode);
@@ -50427,6 +50440,50 @@ function DiffView({
50427
50440
  setDiffModeState(mode);
50428
50441
  storeDiffMode(mode);
50429
50442
  }, []);
50443
+ const setCompareBranch = reactExports.useCallback(
50444
+ (branch) => {
50445
+ setCompareBranchState(branch);
50446
+ storeCompareBranch(workspaceId, branch);
50447
+ },
50448
+ [workspaceId]
50449
+ );
50450
+ reactExports.useEffect(() => {
50451
+ const stored = getStoredCompareBranch(workspaceId);
50452
+ setCompareBranchState(stored);
50453
+ setAvailableBranches(stored ? [stored] : []);
50454
+ setAvailableDefaultBranch(null);
50455
+ }, [workspaceId]);
50456
+ reactExports.useEffect(() => {
50457
+ const listWorkspaceBranches = adapter2.listWorkspaceBranches;
50458
+ if (!listWorkspaceBranches) return;
50459
+ let cancelled = false;
50460
+ const fetchBranches = () => {
50461
+ listWorkspaceBranches.call(adapter2, workspaceId).then((result) => {
50462
+ if (cancelled) return;
50463
+ setAvailableBranches(result.branches);
50464
+ setAvailableDefaultBranch(result.defaultBranch);
50465
+ const current = compareBranchRef.current;
50466
+ if (current && !result.branches.includes(current)) {
50467
+ setCompareBranch(null);
50468
+ }
50469
+ }).catch(() => {
50470
+ });
50471
+ };
50472
+ fetchBranches();
50473
+ let unsubscribe;
50474
+ if (active) {
50475
+ unsubscribe = adapter2.subscribeStatusEvents((event) => {
50476
+ const data = event;
50477
+ if (data.kind === "branch-status" && data.workspaceId === workspaceId) {
50478
+ fetchBranches();
50479
+ }
50480
+ });
50481
+ }
50482
+ return () => {
50483
+ cancelled = true;
50484
+ unsubscribe?.();
50485
+ };
50486
+ }, [adapter2, workspaceId, active, setCompareBranch]);
50430
50487
  const setExpandAll = reactExports.useCallback((v2) => {
50431
50488
  setExpandAllState(v2);
50432
50489
  storeExpandAll(v2);
@@ -50625,7 +50682,7 @@ function DiffView({
50625
50682
  (filename) => {
50626
50683
  const revertFile = adapter2.revertFile;
50627
50684
  if (!revertFile) return;
50628
- revertFile.call(adapter2, workspaceId, filename, diffMode).then(() => {
50685
+ revertFile.call(adapter2, workspaceId, filename, diffMode, compareBranch ?? void 0).then(() => {
50629
50686
  setDiffCache((prev2) => {
50630
50687
  const next2 = new Map(prev2);
50631
50688
  next2.delete(filename);
@@ -50637,7 +50694,7 @@ function DiffView({
50637
50694
  console.error("Failed to revert file:", err);
50638
50695
  });
50639
50696
  },
50640
- [adapter2, workspaceId, diffMode]
50697
+ [adapter2, workspaceId, diffMode, compareBranch]
50641
50698
  );
50642
50699
  reactExports.useEffect(() => {
50643
50700
  const getWorkspaceDiffSummary = adapter2.getWorkspaceDiffSummary;
@@ -50650,7 +50707,7 @@ function DiffView({
50650
50707
  expandedFilesRef.current = /* @__PURE__ */ new Set();
50651
50708
  prevFingerprintRef.current = "";
50652
50709
  const fetchSummary = (forceRefresh = false) => {
50653
- getWorkspaceDiffSummary.call(adapter2, workspaceId, diffMode).then((result) => {
50710
+ getWorkspaceDiffSummary.call(adapter2, workspaceId, diffMode, compareBranch ?? void 0).then((result) => {
50654
50711
  if (!cancelled) {
50655
50712
  const fingerprint = JSON.stringify({
50656
50713
  fileStatuses: result.fileStatuses,
@@ -50662,7 +50719,6 @@ function DiffView({
50662
50719
  summaryRef.current = result;
50663
50720
  if (dataChanged) {
50664
50721
  setSummary(result);
50665
- setBaseBranch(result.baseBranch);
50666
50722
  }
50667
50723
  setError(null);
50668
50724
  if (forceRefresh || dataChanged) {
@@ -50709,24 +50765,70 @@ function DiffView({
50709
50765
  fetchSummaryRef.current = null;
50710
50766
  unsubscribe?.();
50711
50767
  };
50712
- }, [adapter2, workspaceId, active, onStatsChange, diffMode, fetchFileDiff]);
50768
+ }, [adapter2, workspaceId, active, onStatsChange, diffMode, compareBranch, fetchFileDiff]);
50769
+ const summaryCompareBranch = summary?.compareBranch ?? null;
50770
+ const defaultBranch = summary?.defaultBranch ?? availableDefaultBranch ?? null;
50771
+ const branchOptions = availableBranches.length > 0 ? availableBranches : summaryCompareBranch ? [summaryCompareBranch] : [];
50772
+ const targetBranch = compareBranch ?? branchOptions[0] ?? summaryCompareBranch;
50773
+ const topSectionBranches = [];
50774
+ if (targetBranch) {
50775
+ topSectionBranches.push(targetBranch);
50776
+ }
50777
+ if (defaultBranch && defaultBranch !== targetBranch && branchOptions.includes(defaultBranch)) {
50778
+ topSectionBranches.push(defaultBranch);
50779
+ }
50780
+ const otherBranches = branchOptions.filter((b2) => !topSectionBranches.includes(b2)).sort((a2, b2) => a2.localeCompare(b2));
50781
+ const diffSelectValue = diffMode === "uncommitted" ? UNCOMMITTED_VALUE : targetBranch ?? UNCOMMITTED_VALUE;
50782
+ const handleDiffSelectChange = (value) => {
50783
+ if (value === UNCOMMITTED_VALUE) {
50784
+ setDiffMode("uncommitted");
50785
+ } else {
50786
+ setDiffMode("branch");
50787
+ setCompareBranch(value);
50788
+ }
50789
+ };
50790
+ const renderDiffSelect = () => /* @__PURE__ */ jsxRuntimeExports.jsxs(Select, { value: diffSelectValue, onValueChange: handleDiffSelectChange, children: [
50791
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { className: "h-6 w-auto gap-1 rounded-md border-0 bg-transparent px-1.5 text-xs font-medium text-foreground shadow-none hover:bg-accent", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, {}) }),
50792
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(SelectContent, { children: [
50793
+ topSectionBranches.map((branch) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: branch, children: branch }, branch)),
50794
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: UNCOMMITTED_VALUE, children: "Uncommitted" }),
50795
+ otherBranches.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(SelectSeparator, {}),
50796
+ otherBranches.map((branch) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: branch, children: branch }, branch))
50797
+ ] })
50798
+ ] });
50713
50799
  if (loading) {
50714
50800
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full items-center justify-center text-sm text-muted-foreground", children: "Loading changes..." });
50715
50801
  }
50716
50802
  if (error) {
50717
50803
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full items-center justify-center text-sm text-destructive", children: error });
50718
50804
  }
50805
+ const ghostBtnClass = "hidden size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground md:inline-flex";
50806
+ const ghostBtnAlwaysClass = "inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground";
50807
+ const renderSidebarToggle = () => /* @__PURE__ */ jsxRuntimeExports.jsx(
50808
+ "button",
50809
+ {
50810
+ type: "button",
50811
+ onClick: () => setSidebarOpen(!sidebarOpen),
50812
+ className: ghostBtnClass,
50813
+ title: sidebarOpen ? "Hide file tree" : "Show file tree",
50814
+ "aria-label": sidebarOpen ? "Hide file tree" : "Show file tree",
50815
+ "aria-pressed": sidebarOpen,
50816
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-3.5" })
50817
+ }
50818
+ );
50819
+ const renderBranchIndicator = (headBranchLabel) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "hidden items-center gap-1.5 text-xs text-muted-foreground sm:flex", children: [
50820
+ headBranchLabel && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
50821
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: headBranchLabel }),
50822
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "size-3", "aria-hidden": true })
50823
+ ] }),
50824
+ renderDiffSelect()
50825
+ ] });
50719
50826
  if (!summary || summary.stats.filesChanged === 0) {
50720
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full flex-col overflow-hidden", children: [
50721
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex shrink-0 items-center justify-end border-b border-border px-4 py-2", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Select, { value: diffMode, onValueChange: (v2) => setDiffMode(v2), children: [
50722
- /* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { className: "h-7 w-auto gap-1 rounded-md border-border/50 bg-muted/50 px-2.5 text-xs", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, {}) }),
50723
- /* @__PURE__ */ jsxRuntimeExports.jsxs(SelectContent, { children: [
50724
- /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: "uncommitted", children: "Uncommitted" }),
50725
- /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: "branch", children: baseBranch ?? "base" })
50726
- ] })
50727
- ] }) }),
50728
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-1 items-center justify-center text-sm text-muted-foreground", children: "No changes" })
50729
- ] });
50827
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full flex-col overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-8 shrink-0 items-center gap-3 border-b border-border pl-2 pr-3", children: [
50828
+ renderSidebarToggle(),
50829
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm text-muted-foreground", children: "No changes" }),
50830
+ renderBranchIndicator(summary?.headBranch)
50831
+ ] }) });
50730
50832
  }
50731
50833
  const fileStatuses = summary.fileStatuses || {};
50732
50834
  const filenames = flattenFileTreeOrder(buildFileTree(fileStatuses));
@@ -50739,19 +50841,7 @@ function DiffView({
50739
50841
  className: "hidden shrink-0 flex-col md:flex",
50740
50842
  style: { width: sidebarWidth },
50741
50843
  children: [
50742
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-8 shrink-0 items-center justify-between border-b border-border px-3", children: [
50743
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium text-muted-foreground", children: "Files" }),
50744
- /* @__PURE__ */ jsxRuntimeExports.jsx(
50745
- "button",
50746
- {
50747
- type: "button",
50748
- onClick: () => setSidebarOpen(false),
50749
- className: "rounded p-0.5 text-muted-foreground hover:bg-accent/50 hover:text-foreground",
50750
- title: "Hide file tree",
50751
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-3.5" })
50752
- }
50753
- )
50754
- ] }),
50844
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-8 shrink-0 items-center border-b border-border px-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium text-muted-foreground", children: "Files" }) }),
50755
50845
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 flex-1 overflow-y-auto py-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
50756
50846
  ChangesFileTree,
50757
50847
  {
@@ -50771,48 +50861,20 @@ function DiffView({
50771
50861
  }
50772
50862
  ),
50773
50863
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-1 flex-col overflow-hidden", children: [
50774
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex shrink-0 items-center justify-between border-b border-border px-4 py-2", children: [
50775
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
50776
- !sidebarOpen && /* @__PURE__ */ jsxRuntimeExports.jsx(
50777
- "button",
50778
- {
50779
- type: "button",
50780
- onClick: () => setSidebarOpen(true),
50781
- className: "hidden items-center rounded-md border border-border/50 bg-muted/50 px-2 py-1 text-xs text-muted-foreground transition-colors hover:text-foreground md:inline-flex",
50782
- title: "Show file tree",
50783
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-3.5" })
50784
- }
50785
- ),
50786
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
50787
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-sm text-muted-foreground", children: [
50788
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: summary.stats.filesChanged }),
50789
- " ",
50790
- summary.stats.filesChanged === 1 ? "file" : "files",
50791
- " changed",
50792
- summary.stats.insertions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-2 text-green-600 dark:text-green-400", children: [
50793
- "+",
50794
- summary.stats.insertions
50795
- ] }),
50796
- summary.stats.deletions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-1 text-red-600 dark:text-red-400", children: [
50797
- "-",
50798
- summary.stats.deletions
50799
- ] })
50800
- ] }),
50801
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-0.5 text-xs text-muted-foreground", children: [
50802
- summary.baseBranch,
50803
- " ← ",
50804
- summary.headBranch
50805
- ] })
50806
- ] })
50864
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-8 shrink-0 items-center justify-between gap-3 border-b border-border pl-2 pr-3", children: [
50865
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [
50866
+ renderSidebarToggle(),
50867
+ renderBranchIndicator(summary.headBranch)
50807
50868
  ] }),
50808
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
50869
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1", children: [
50809
50870
  /* @__PURE__ */ jsxRuntimeExports.jsx(
50810
50871
  "button",
50811
50872
  {
50812
50873
  type: "button",
50813
50874
  onClick: () => fetchSummaryRef.current?.(true),
50814
- className: "inline-flex items-center rounded-md border border-border/50 bg-muted/50 px-2 py-1 text-xs text-muted-foreground transition-colors hover:text-foreground",
50875
+ className: ghostBtnAlwaysClass,
50815
50876
  title: "Reload changes",
50877
+ "aria-label": "Reload changes",
50816
50878
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "size-3.5" })
50817
50879
  }
50818
50880
  ),
@@ -50821,8 +50883,9 @@ function DiffView({
50821
50883
  {
50822
50884
  type: "button",
50823
50885
  onClick: search2.handleOpenSearch,
50824
- className: "inline-flex items-center rounded-md border border-border/50 bg-muted/50 px-2 py-1 text-xs text-muted-foreground transition-colors hover:text-foreground",
50886
+ className: ghostBtnAlwaysClass,
50825
50887
  title: "Find in changes (⌘F)",
50888
+ "aria-label": "Find in changes",
50826
50889
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { className: "size-3.5" })
50827
50890
  }
50828
50891
  ),
@@ -50831,26 +50894,23 @@ function DiffView({
50831
50894
  {
50832
50895
  type: "button",
50833
50896
  onClick: () => setExpandAll(!expandAll),
50834
- className: `inline-flex items-center rounded-md border border-border/50 px-2 py-1 text-xs transition-colors ${expandAll ? "bg-accent text-foreground" : "bg-muted/50 text-muted-foreground hover:text-foreground"}`,
50897
+ className: `${ghostBtnAlwaysClass} ${expandAll ? "bg-accent text-foreground" : ""}`,
50835
50898
  title: expandAll ? "Collapse all files" : "Expand all files",
50899
+ "aria-label": expandAll ? "Collapse all files" : "Expand all files",
50900
+ "aria-pressed": expandAll,
50836
50901
  children: expandAll ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronsDownUp, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronsUpDown, { className: "size-3.5" })
50837
50902
  }
50838
50903
  ),
50839
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Select, { value: diffMode, onValueChange: (v2) => setDiffMode(v2), children: [
50840
- /* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { className: "h-7 w-auto gap-1 rounded-md border-border/50 bg-muted/50 px-2.5 text-xs", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, {}) }),
50841
- /* @__PURE__ */ jsxRuntimeExports.jsxs(SelectContent, { children: [
50842
- /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: "uncommitted", children: "Uncommitted" }),
50843
- /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: "branch", children: baseBranch ?? "base" })
50844
- ] })
50845
- ] }),
50846
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "hidden items-center rounded-md border border-border/50 bg-muted/50 md:flex", children: [
50904
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "hidden items-center md:flex", children: [
50847
50905
  /* @__PURE__ */ jsxRuntimeExports.jsx(
50848
50906
  "button",
50849
50907
  {
50850
50908
  type: "button",
50851
50909
  onClick: () => setViewMode("unified"),
50852
- className: `inline-flex items-center gap-1 rounded-l-md px-2 py-1 text-xs transition-colors ${viewMode === "unified" ? "bg-accent text-foreground" : "text-muted-foreground hover:text-foreground"}`,
50910
+ className: `${ghostBtnAlwaysClass} ${viewMode === "unified" ? "bg-accent text-foreground" : ""}`,
50853
50911
  title: "Unified view",
50912
+ "aria-label": "Unified view",
50913
+ "aria-pressed": viewMode === "unified",
50854
50914
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(Rows2, { className: "size-3.5" })
50855
50915
  }
50856
50916
  ),
@@ -50859,8 +50919,10 @@ function DiffView({
50859
50919
  {
50860
50920
  type: "button",
50861
50921
  onClick: () => setViewMode("split"),
50862
- className: `inline-flex items-center gap-1 rounded-r-md px-2 py-1 text-xs transition-colors ${viewMode === "split" ? "bg-accent text-foreground" : "text-muted-foreground hover:text-foreground"}`,
50922
+ className: `${ghostBtnAlwaysClass} ${viewMode === "split" ? "bg-accent text-foreground" : ""}`,
50863
50923
  title: "Split view",
50924
+ "aria-label": "Split view",
50925
+ "aria-pressed": viewMode === "split",
50864
50926
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(Columns2, { className: "size-3.5" })
50865
50927
  }
50866
50928
  )
@@ -50901,7 +50963,22 @@ function DiffView({
50901
50963
  onEditorViews: handleEditorViews
50902
50964
  },
50903
50965
  filename
50904
- )) }) })
50966
+ )) }) }),
50967
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-8 shrink-0 items-center border-t border-border px-3 text-sm text-muted-foreground", children: [
50968
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: summary.stats.filesChanged }),
50969
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-1", children: [
50970
+ summary.stats.filesChanged === 1 ? "file" : "files",
50971
+ " changed"
50972
+ ] }),
50973
+ summary.stats.insertions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-2 text-green-600 dark:text-green-400", children: [
50974
+ "+",
50975
+ summary.stats.insertions
50976
+ ] }),
50977
+ summary.stats.deletions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-1 text-red-600 dark:text-red-400", children: [
50978
+ "-",
50979
+ summary.stats.deletions
50980
+ ] })
50981
+ ] })
50905
50982
  ] })
50906
50983
  ] });
50907
50984
  }
@@ -58530,19 +58607,24 @@ class WebDashboardAdapter {
58530
58607
  async installCli(opts) {
58531
58608
  await this.trpc.cli.install.mutate(opts);
58532
58609
  }
58533
- async getWorkspaceDiff(workspaceId, contextLines, diffMode) {
58610
+ async getWorkspaceDiff(workspaceId, contextLines, diffMode, compareBranch) {
58534
58611
  return await this.trpc.workspace.getDiff.query({
58535
58612
  workspaceId,
58536
58613
  contextLines,
58537
- diffMode
58614
+ diffMode,
58615
+ compareBranch
58538
58616
  });
58539
58617
  }
58540
- async getWorkspaceDiffSummary(workspaceId, diffMode) {
58618
+ async getWorkspaceDiffSummary(workspaceId, diffMode, compareBranch) {
58541
58619
  return await this.trpc.workspace.getDiffSummary.query({
58542
58620
  workspaceId,
58543
- diffMode
58621
+ diffMode,
58622
+ compareBranch
58544
58623
  });
58545
58624
  }
58625
+ async listWorkspaceBranches(workspaceId) {
58626
+ return await this.trpc.workspace.listBranches.query({ workspaceId });
58627
+ }
58546
58628
  async getFileDiff(workspaceId, filePath, mergeBase, contextLines) {
58547
58629
  return await this.trpc.workspace.getFileDiff.query({
58548
58630
  workspaceId,
@@ -58560,8 +58642,13 @@ class WebDashboardAdapter {
58560
58642
  async saveWorkspaceFile(workspaceId, path2, content2) {
58561
58643
  await this.trpc.workspace.saveFile.mutate({ workspaceId, path: path2, content: content2 });
58562
58644
  }
58563
- async revertFile(workspaceId, filePath, diffMode) {
58564
- await this.trpc.workspace.revertFile.mutate({ workspaceId, filePath, diffMode });
58645
+ async revertFile(workspaceId, filePath, diffMode, compareBranch) {
58646
+ await this.trpc.workspace.revertFile.mutate({
58647
+ workspaceId,
58648
+ filePath,
58649
+ diffMode,
58650
+ compareBranch
58651
+ });
58565
58652
  }
58566
58653
  getWorkspaceFileUrl(workspaceId, path2) {
58567
58654
  return `/api/workspace-file/${encodeURIComponent(workspaceId)}/${path2.split("/").map(encodeURIComponent).join("/")}`;
@@ -58605,17 +58692,14 @@ class WebCapabilities {
58605
58692
  window.open(url, "_blank");
58606
58693
  }
58607
58694
  }
58608
- function isTauri$1() {
58609
- return typeof window !== "undefined" && "__TAURI_INTERNALS__" in window;
58610
- }
58611
- function isElectron$1() {
58695
+ function isElectron() {
58612
58696
  return typeof window !== "undefined" && "__BAND_DESKTOP__" in window;
58613
58697
  }
58614
58698
  function isDesktopShell() {
58615
- return isTauri$1() || isElectron$1();
58699
+ return isElectron();
58616
58700
  }
58617
58701
  function electronBridge$1() {
58618
- if (!isElectron$1()) return null;
58702
+ if (!isElectron()) return null;
58619
58703
  const bridge = window.__BAND_DESKTOP__;
58620
58704
  return bridge ?? null;
58621
58705
  }
@@ -58624,13 +58708,9 @@ async function desktopInvoke(cmd2, args) {
58624
58708
  if (bridge) {
58625
58709
  return await bridge.invoke(cmd2, args);
58626
58710
  }
58627
- if (isTauri$1()) {
58628
- const { invoke: invoke2 } = await import("./core-dG4_vufa.js");
58629
- return invoke2(cmd2, args);
58630
- }
58631
- throw new Error(`desktopInvoke('${cmd2}') called outside a desktop shell`);
58711
+ throw new Error(`desktopInvoke('${cmd2}') called outside the desktop shell`);
58632
58712
  }
58633
- class TauriDashboardAdapter extends WebDashboardAdapter {
58713
+ class DesktopDashboardAdapter extends WebDashboardAdapter {
58634
58714
  async installCli(opts) {
58635
58715
  try {
58636
58716
  await super.installCli();
@@ -58676,12 +58756,7 @@ class NativeShellCapabilities {
58676
58756
  window.open(url, "_blank");
58677
58757
  return;
58678
58758
  }
58679
- if (isElectron$1()) {
58680
- await desktopInvoke("open_external", { url });
58681
- return;
58682
- }
58683
- const { open: open2 } = await import("./index-jMSXp5h7.js");
58684
- await open2(url);
58759
+ await desktopInvoke("open_external", { url });
58685
58760
  }
58686
58761
  }
58687
58762
  function gt(e2, t2) {
@@ -60719,6 +60794,319 @@ function Qt$1({
60719
60794
  );
60720
60795
  }
60721
60796
  Qt$1.displayName = "Separator";
60797
+ const isDesktop = typeof window !== "undefined" && "__BAND_DESKTOP__" in window;
60798
+ function electronBridge() {
60799
+ if (!isDesktop) return null;
60800
+ const bridge = window.__BAND_DESKTOP__;
60801
+ return bridge ?? null;
60802
+ }
60803
+ async function invoke(cmd2, args) {
60804
+ const bridge = electronBridge();
60805
+ if (bridge) {
60806
+ return await bridge.invoke(cmd2, args);
60807
+ }
60808
+ throw new Error(`invoke('${cmd2}') called outside the desktop shell`);
60809
+ }
60810
+ async function listen(event, cb) {
60811
+ const bridge = electronBridge();
60812
+ if (bridge) {
60813
+ return bridge.on(event, (payload) => cb({ payload }));
60814
+ }
60815
+ throw new Error(`listen('${event}') called outside the desktop shell`);
60816
+ }
60817
+ const androidStudioIcon = "/assets/android-studio-t3zZ7G0e.svg";
60818
+ const antigravityIcon = "/assets/antigravity-m-mWKI7R.svg";
60819
+ const cursorIcon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_5436_78947)'%3e%3cmask%20id='mask0_5436_78947'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='4'%20y='4'%20width='32'%20height='32'%3e%3cpath%20d='M4%204H36V36H4V4Z'%20fill='white'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_5436_78947)'%3e%3cpath%20d='M28.375%204H11.625C7.41383%204%204%207.41383%204%2011.625V28.375C4%2032.5862%207.41383%2036%2011.625%2036H28.375C32.5862%2036%2036%2032.5862%2036%2028.375V11.625C36%207.41383%2032.5862%204%2028.375%204Z'%20fill='black'/%3e%3c/g%3e%3cpath%20d='M29.6214%2014.2072L20.9502%209.12249C20.6718%208.95917%2020.3282%208.95917%2020.0498%209.12249L11.3786%2014.2072C11.1445%2014.3445%2011%2014.5984%2011%2014.8733V25.1267C11%2025.4012%2011.1445%2025.6555%2011.3786%2025.7928L20.0498%2030.8775C20.3282%2031.0408%2020.6718%2031.0408%2020.9502%2030.8775L29.6214%2025.7928C29.8555%2025.6555%2030%2025.4016%2030%2025.1267V14.8733C30%2014.5988%2029.8555%2014.3445%2029.6214%2014.2072ZM29.0767%2015.2843L20.706%2030.0101C20.6494%2030.1093%2020.5%2030.0688%2020.5%2029.9538V20.3115C20.5%2020.1189%2020.3986%2019.9407%2020.2342%2019.8439L12.0124%2015.0226C11.9147%2014.9651%2011.9546%2014.8134%2012.0678%2014.8134H28.8093C29.047%2014.8134%2029.1956%2015.0751%2029.0767%2015.2843Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_5436_78947'%3e%3crect%20width='32'%20height='32'%20fill='white'%20transform='translate(4%204)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e";
60820
+ const finderIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAB8pJREFUeAHtWG+MXFUV/9375s3szNDturKbLpt0aZo2fvAfpEBEss2iMZJaFTBdG1BrUfGLmohWaGvaQtYYU2miJsRKTQikkhDRIKmRNcEPJGgw1hJFcetu2mJcKrPbmZ2dP++9e6/n3PtmdnbelJnlC3zobc++mXvPu+d3z/87wJVxZby9Q3RZl0T65Pnzu2f94S/Pl70tQYhBpWG0Mn3odRgSJBFIAeOnxKWBPvWvTVj66Vc2DT0ZYzB4CwDlaWN2H5tRT1QvKONJCCHxlodpE6Y1EAxI3PtefOvjvn+Mp7AGgN7vjPnxT6Yr916VScmuem4FQkjq0uDGDR5ky3ukdAQK+O+ywflFjZyU8D3iDZXaMd73m3t8eSc6gOwkWp4xZvLA76uPr0t7nunA+GZz7xkROLTFR7fx4lKEQy8qDGUFqnWjvnSr/8AOz3uYllQ3gNhztm5qF7DmUagCz92W7pm/SHTnbwMCCVTyEtefmvIOHz68SosJr3rif6VPFF/VUBHWTCP9K3uzSRukWoi/N7S9nujALRLVmoB/SZsNu/Z8sR1PAuDZcuqbkqdZloJ7tpLqME/fdSRw+xbP7uFYBJRxpFsoYqL1KH51+7oUqhFx0/+z9Wv2tONJtU/Ml/wt2tA5I6xpXKoaTAz5Tfws/XK5Q5tYM9IB2DggsFACLpb01q4Aq1U9yMcza4hcHumUxnohUINLITwum9xoQQsHkgEMU6AUFiiiA5FvZ02YWIXwKRGjlXRMlAnxnz8+Q2/J5lyD5yObPQTEEpnY6i1rGQIzPf0CKLm7d4ybZ142VIr2s3JCk+0KMAwofZGNROTIajN++jkfp394F/lbABO6OeapVoA7CKD1K3qXXMqC0DHNzL2G3ZN7kPbiAzNA48DyYaR2SFUkEkpPmJjB8CaN+tP6VAyKtVeNXUC6+eXQYCwrUWJgVqpsiVXmFfBkhtYMQgZD34U1iIFHnwwHE81LBXQHSIzaBogTIOJUyScN6xr5a7fByCyZI4LwlNXGB0eBMjGE1oR0APonmilWYGTDED40fgOW6ORUNB04uykBN6wU7cgT3QFacJHbwmB1DQ2LEW7+7h8QVuvkB9JqKiDeyQ9QcJCA0PolQWOhTQ0a1E0Kj508wRUDkjNRbEnJlpVw5og8KE93B8inUrqhM4FEQQsiO6dj9IsVhfcPZVCiZMuHcyLk6hCmz7VYNvuoIBPztlq6Q7HV6HxIqx40yJLJWel9GZ80lmRisCKWyERzo1QOaqGwuLU7mTvaZXOM24q38eiDlM4HWSuqQz+TAKj4FI082J4Mm53bil9+6sMpStLaaU6sYGdTv0kmdLLYETgwKN9oCkDZiw8aZSz10mJxa1WhzOxT38RyuL2q1Fwi1BxszVOtesv+lfEKR7LlZ7kdqleHNGOcqnusJCef13jqhSpVEthy9ctvZ7FAVSEigGaVLzfAiSZsjjMmEyd0T/cYJDbLrsqClxsCGQ5FJSk508ECY7UacLpRaAZScg9jgUlyIRE4SwirwaRWEpWETcN+YcgXm0/tobJ4jlY9ilQZr4kEnyagmqQFFJL1yFigAbf2MaVzXHPnqYum1EPmrNt17bohKwfdAXJisqdvIZlJ429Ht2Hmmf2QaQZpEjyWCBi3VGEoQXkcETl+RFqh8ol3DXo4vO97+OrkXvh90s5HBDQIXWtn9+wJoDFRowFt1OBwsYobpsoonHkKfz12o/UCqJQriy18SklbsuramZk1RIUDIZZx984vYHZmBo89dwpvFAKnZeJnHvY/awnTg4k9Qa1C3E02uhUuXEGpim3fmUN20078+WAOs6e+jqBeRCqdIQdKkeac6e2mFM45akRLxUX8aGoKd39sByZ23IGpR45jocANmW81HFKWDimH1mvamlcaU2vHkwgSX+pFpZCDbqshnP2XA2y85QGMjR/Av6fvx5mHt6Ivm0V+9Cb0Db+PTLceU4ckzs1dwOw/XyaNGtz6yc/hZ88+j6ViBTUS73lpq102g+QAo2oy/4azRMY3y10BXp3HzLlIjwqZjD3bbAgOhghj2x+C99GjqJfnUXrtNOoL/0C5UEb/wGaM3zaOz3/tQfTlcqgu17BcipDyszZ5s0VcN21s3hxcB/x9VqHPF7hmUM51BTiWff3Rl6Lh7Z4n4qLW6GpW/rpPJCysUdAMYHBsAmbjBApFhbv25vHKTGhTR40qDGvM3kc4hZg479j2i4KHoFaqkU1TIa3dfO2lx0+04Ul4pSFP3Xp/qPuNWkmrLXk2MdcyXywDvzji4y+vknY413Vwes2as5cnjevokvXZQ3W8m35hkOslXtqfSbyQCBLqNMQ3PuPtq1Yibt5sZTHkzCY0ca/eNhfFpZGeA1mNI8cDjA1zbyhsjgu0aRJXF67vV1ODMUIXpcmDNQz104WrFOnj92GqIx50HnL/tH766V+Xd2bT3pp+kWHHqFNWnrg+hXym0VkLeyOuU6WZLwi8PKesi/TRHX+ppvXRg/lnPz0qb0ePP300QZ54Jbzv+z/XP8hz9yzQc31ujE5VjrewdxIlTGbIE4/uSx25Lus9iDX+eNS6bh761cV7zpzL7y0UsbkWiKvIn7N8dV4LYOqkBdmiksua+tiInLlp08Un+1//0yO7du1qXqWvjCvjnTj+D8SthzamBKAPAAAAAElFTkSuQmCC";
60821
+ const ghosttyIcon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_5437_79067)'%3e%3cpath%20d='M27.395%2036C26.1435%2035.9986%2024.9203%2035.6274%2023.879%2034.933C22.8374%2035.6273%2021.6139%2035.9985%2020.362%2036C19.113%2036%2017.882%2035.625%2016.846%2034.933C15.8189%2035.6241%2014.61%2035.9954%2013.372%2036H13.334C12.4944%2036.0006%2011.6633%2035.8321%2010.8902%2035.5047C10.1171%2035.1772%209.41781%2034.6975%208.83405%2034.094C7.65642%2032.8996%206.99679%2031.2893%206.99805%2029.612V17.362C7.00005%209.995%2012.994%204%2020.362%204C27.731%204%2033.725%209.994%2033.725%2017.363V29.616C33.725%2033.009%2031.099%2035.808%2027.747%2035.991C27.63%2035.998%2027.513%2036%2027.395%2036Z'%20fill='%233551F3'/%3e%3cpath%20d='M27.395%2034.5932C26.2752%2034.5924%2025.1889%2034.2104%2024.315%2033.5102C24.1961%2033.4145%2024.0476%2033.3632%2023.895%2033.3652C23.7174%2033.367%2023.5457%2033.4291%2023.408%2033.5412C22.5392%2034.2237%2021.4668%2034.5951%2020.362%2034.5962C19.2576%2034.5949%2018.1855%2034.2234%2017.317%2033.5412C17.1835%2033.4338%2017.0174%2033.3752%2016.846%2033.3752C16.6747%2033.3752%2016.5085%2033.4338%2016.375%2033.5412C15.518%2034.2199%2014.4581%2034.5914%2013.365%2034.5962H13.332C12.6806%2034.5961%2012.0359%2034.4649%2011.4362%2034.2102C10.8366%2033.9556%2010.2945%2033.5829%209.84201%2033.1142C8.92225%2032.1822%208.40639%2030.9256%208.40601%2029.6162V17.3672C8.40601%2010.7702%2013.77%205.40723%2020.363%205.40723C26.955%205.40723%2032.319%2010.7702%2032.319%2017.3632V29.6162C32.319%2032.2612%2030.277%2034.4432%2027.669%2034.5862C27.5777%2034.5909%2027.4864%2034.5932%2027.395%2034.5932Z'%20fill='black'/%3e%3cpath%20d='M30.912%2017.3635V29.6165C30.912%2031.4925%2029.465%2033.0795%2027.592%2033.1825C26.725%2033.2323%2025.8704%2032.9582%2025.194%2032.4135C24.416%2031.7875%2023.321%2031.8155%2022.536%2032.4345C21.9163%2032.9237%2021.1495%2033.1891%2020.36%2033.1875C19.5714%2033.1889%2018.8056%2032.9235%2018.187%2032.4345C17.8057%2032.1306%2017.3326%2031.9651%2016.845%2031.9651C16.3574%2031.9651%2015.8843%2032.1306%2015.503%2032.4345C14.8904%2032.9183%2014.1336%2033.1834%2013.353%2033.1875C11.405%2033.2015%209.81299%2031.5605%209.81299%2029.6125V17.3625C9.81299%2011.5375%2014.537%206.81348%2020.363%206.81348C26.188%206.81348%2030.912%2011.5375%2030.912%2017.3635Z'%20fill='white'/%3e%3cpath%20d='M18.28%2016.4366L14.35%2014.1666C14.104%2014.0248%2013.8117%2013.9865%2013.5374%2014.06C13.2632%2014.1335%2013.0292%2014.3128%2012.887%2014.5586C12.7452%2014.8045%2012.7067%2015.0966%2012.78%2015.3709C12.8533%2015.6452%2013.0324%2015.8792%2013.278%2016.0216L15.604%2017.3646L13.278%2018.7076C13.045%2018.8559%2012.8783%2019.0886%2012.8126%2019.3569C12.7469%2019.6252%2012.7873%2019.9085%2012.9255%2020.1478C13.0636%2020.387%2013.2887%2020.5637%2013.554%2020.641C13.8192%2020.7183%2014.104%2020.6902%2014.349%2020.5626L18.281%2018.2926C18.4436%2018.1985%2018.5786%2018.0633%2018.6724%2017.9006C18.7662%2017.7379%2018.8156%2017.5534%2018.8156%2017.3656C18.8156%2017.1777%2018.7662%2016.9932%2018.6724%2016.8305C18.5786%2016.6678%2018.4436%2016.5326%2018.281%2016.4386V16.4366H18.28ZM27.182%2016.2906H22.018C21.7338%2016.2906%2021.4613%2016.4034%2021.2604%2016.6044C21.0594%2016.8053%2020.9465%2017.0779%2020.9465%2017.3621C20.9465%2017.6462%2021.0594%2017.9188%2021.2604%2018.1197C21.4613%2018.3207%2021.7338%2018.4336%2022.018%2018.4336H27.182C27.4662%2018.4336%2027.7387%2018.3207%2027.9397%2018.1197C28.1406%2017.9188%2028.2535%2017.6462%2028.2535%2017.3621C28.2535%2017.0779%2028.1406%2016.8053%2027.9397%2016.6044C27.7387%2016.4034%2027.4662%2016.2906%2027.182%2016.2906Z'%20fill='black'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_5437_79067'%3e%3crect%20width='27'%20height='32'%20fill='white'%20transform='translate(7%204)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e";
60822
+ const intellijIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0Y5N0ExMiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGQzI5QjgiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8cmVjdCB4PSI0OCIgeT0iNDgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIiByeD0iNCIgZmlsbD0iIzAwMCIvPgogIDx0ZXh0IHg9IjYwIiB5PSIxNzgiIGZpbGw9IiNmZmYiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9ImJvbGQiIGZvbnQtc2l6ZT0iNTYiPklKPC90ZXh0Pgo8L3N2Zz4K";
60823
+ const iterm2Icon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20x='4'%20y='4'%20width='32'%20height='32'%20rx='6.4'%20fill='url(%23paint0_linear_5437_79079)'/%3e%3crect%20x='4.80005'%20y='4.7998'%20width='30.4'%20height='30.4'%20rx='5.6'%20fill='black'/%3e%3crect%20x='7.19995'%20y='7.2002'%20width='25.6'%20height='25.6'%20rx='3.2'%20fill='%23202A2F'/%3e%3cpath%20d='M25.2454%208.85742H19.2454V20.8574H25.2454V8.85742Z'%20fill='%230EE827'%20fill-opacity='0.35'/%3e%3cpath%20d='M11.7895%2018.9218C11.4758%2018.8949%2011.1817%2018.85%2010.9072%2018.7872C10.6424%2018.7154%2010.3973%2018.6392%2010.1718%2018.5584C9.95613%2018.4776%209.76496%2018.4014%209.59829%2018.3296C9.44145%2018.2488%209.32378%2018.186%209.24536%2018.1412L9.87771%2016.9567C9.94631%2017.0016%2010.064%2017.0644%2010.2306%2017.1452C10.3973%2017.2259%2010.5836%2017.3111%2010.7895%2017.4009C11.0052%2017.4816%2011.2257%2017.5534%2011.4513%2017.6162C11.6768%2017.679%2011.8875%2017.7105%2012.0836%2017.7105C13.064%2017.7105%2013.5542%2017.3381%2013.5542%2016.5933C13.5542%2016.4138%2013.5199%2016.2658%2013.4512%2016.1492C13.3925%2016.0325%2013.2993%2015.9338%2013.1719%2015.853C13.0542%2015.7633%2012.9071%2015.687%2012.7307%2015.6242C12.564%2015.5525%2012.3729%2015.4806%2012.1571%2015.4089C11.7453%2015.2653%2011.3777%2015.1172%2011.0542%2014.9647C10.7405%2014.8032%2010.4708%2014.6237%2010.2454%2014.4263C10.0199%2014.2289%209.8483%2014.0046%209.73063%2013.7534C9.61303%2013.5021%209.5542%2013.2149%209.5542%2012.8919C9.5542%2012.6407%209.60812%2012.3984%209.71596%2012.1651C9.82379%2011.9318%209.97572%2011.7254%2010.1718%2011.546C10.3679%2011.3576%2010.6032%2011.2005%2010.8777%2011.0749C11.1522%2010.9403%2011.4562%2010.8461%2011.7895%2010.7922V8.85742H12.9954V10.7653C13.2503%2010.7922%2013.4954%2010.8326%2013.7307%2010.8865C13.966%2010.9403%2014.1767%2010.9986%2014.363%2011.0614C14.5493%2011.1242%2014.7062%2011.1871%2014.8336%2011.2499C14.9709%2011.3037%2015.0689%2011.3441%2015.1278%2011.371L14.5395%2012.4747C14.4611%2012.4388%2014.3483%2012.3939%2014.2012%2012.3401C14.064%2012.2773%2013.9072%2012.2144%2013.7307%2012.1517C13.5542%2012.0888%2013.363%2012.035%2013.1571%2011.9901C12.9513%2011.9453%2012.7454%2011.9228%2012.5395%2011.9228C12.2062%2011.9228%2011.9071%2011.9856%2011.6424%2012.1112C11.3875%2012.2279%2011.2601%2012.4298%2011.2601%2012.7169C11.2601%2012.8964%2011.2944%2013.058%2011.363%2013.2015C11.4414%2013.3361%2011.5493%2013.4573%2011.6865%2013.5649C11.8336%2013.6726%2012.0101%2013.7758%2012.2159%2013.8745C12.4316%2013.9642%2012.6768%2014.054%2012.9513%2014.1437C13.314%2014.2782%2013.6376%2014.4173%2013.9218%2014.5609C14.2062%2014.7045%2014.4463%2014.866%2014.6424%2015.0455C14.8385%2015.2249%2014.9856%2015.4313%2015.0836%2015.6646C15.1914%2015.8979%2015.2454%2016.1715%2015.2454%2016.4856C15.2454%2016.7548%2015.1964%2017.015%2015.0983%2017.2662C15.0101%2017.5175%2014.8679%2017.7508%2014.6718%2017.9661C14.4856%2018.1815%2014.2503%2018.3699%2013.966%2018.5315C13.6915%2018.684%2013.3679%2018.7962%2012.9954%2018.8679V20.8574H11.7895V18.9218Z'%20fill='%230EE827'/%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_5437_79079'%20x1='20'%20y1='4'%20x2='20'%20y2='36'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23D4E6E8'/%3e%3cstop%20offset='1'%20stop-color='%23767573'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e";
60824
+ const kiroIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0ZGOTkwMCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRjY2MDAiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8dGV4dCB4PSI1NiIgeT0iMTc4IiBmaWxsPSIjZmZmIiBmb250LWZhbWlseT0iQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSJib2xkIiBmb250LXNpemU9IjcyIj5LPC90ZXh0Pgo8L3N2Zz4K";
60825
+ const rustroverIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0ZDODAxRCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNCNzRDRjAiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8cmVjdCB4PSI0OCIgeT0iNDgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIiByeD0iNCIgZmlsbD0iIzAwMCIvPgogIDx0ZXh0IHg9IjYwIiB5PSIxNzgiIGZpbGw9IiNmZmYiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9ImJvbGQiIGZvbnQtc2l6ZT0iNTYiPlJSPC90ZXh0Pgo8L3N2Zz4K";
60826
+ const sublimetextIcon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_5436_78897)'%3e%3cpath%20d='M35.911%2020.0773C35.911%2019.7026%2035.552%2019.4866%2035.1114%2019.5939L4.79962%2027.0055C4.35812%2027.1135%204%2027.5052%204%2027.8792V35.4541C4%2035.8288%204.35812%2036.0455%204.79962%2035.9375L35.1114%2028.5266C35.552%2028.4187%2035.911%2028.0269%2035.911%2027.6523V20.0774V20.0773Z'%20fill='url(%23paint0_linear_5436_78897)'/%3e%3cpath%20d='M4%2019.8353C4%2020.21%204.35812%2020.6016%204.79962%2020.7097L35.1159%2028.1219C35.5573%2028.2299%2035.9155%2028.0133%2035.9155%2027.6393V20.0637C35.9155%2019.6897%2035.5573%2019.298%2035.1159%2019.19L4.79962%2011.7778C4.35812%2011.6699%204%2011.8858%204%2012.2603V19.8353V19.8353Z'%20fill='%23FF9800'/%3e%3cpath%20d='M35.911%204.51106C35.911%204.1365%2035.552%203.91973%2035.1114%204.02778L4.79962%2011.4387C4.35812%2011.5466%204%2011.9383%204%2012.313V19.8879C4%2020.2626%204.35812%2020.4786%204.79962%2020.3712L35.1114%2012.9596C35.552%2012.8517%2035.911%2012.46%2035.911%2012.086V4.51106Z'%20fill='%23FF9800'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_5436_78897'%20x1='1762.84'%20y1='981.852'%20x2='1845.15'%20y2='624.882'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23FF9700'/%3e%3cstop%20offset='0.53'%20stop-color='%23F48E00'/%3e%3cstop%20offset='1'%20stop-color='%23D06F00'/%3e%3c/linearGradient%3e%3cclipPath%20id='clip0_5436_78897'%3e%3crect%20width='32'%20height='32'%20fill='white'%20transform='translate(4%204)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e";
60827
+ const terminalIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAA0RJREFUeAHtmM9PE0EUx18pJCRaugUhQkuqXgi3eqDVpJFK+g9w8Ejkohcg4I8DFynECxdEAlz0gA0nNYF4kkODRDQmNQQ8NRhjbd1FrQHankja3XFm7DbN7rQMyS7l0E+y3dmZt/u+mffednYAatSoLpZKg9s//wawRUhKJj2/90QBLNgcocJt+EyvAQo/UBwv2qkeCm7o2P/ri+3OtOuSewcpEL7quvACTsJ2PC5sJf8sPQw9Rh2dnaigwPCjw9WJJmfm0FYyNUt8Ai+f4+Ls3dEHpgnTHndG76NoXFpiaanXdnz8Gh988+rl2LO5GXrd2NgILS0tUFdXB0aSy+Vgf3+fnp/PPYFztvODn2Lx8PXuyxuldroc/BD79u5WMBD4JYnQ0NAAbrfbcHEqiqKAKIpwdHQE7U4XvI683/B3X7lZaqPzLCV+eIg4Qmtrq2niqHP8bBIdAvEpJr57dDbajj1RLCar1Wot9i8vL0MwGAQzRKpgkXbduLZDlmVg4XQ6YXFxkR6kbQZKXtalnE4gwnnBYmhoCKLRKJ3F9fV1mJ6eNlwozkkExwlU5Dzz5lgsBgMDAzA+Pg6SJEF/fz8VOjw8DMYJ1EePO8Qqq6ur0NfXR2eT4PP5wChknhArZUKs4vV6acGQczabhUgkAkbBil693kguK2xkZISeCSsrK7CwsEDDbRSs/OcWqBYFCe38/HwxxEbCSi+9QIUtkAgis1ZO2O7uLpSjq6sLeGD51gnEicq8mVSv2XDNIFIqV3E5eGepEkjmeM0cV8VmIvMILBfi00DhmkFURYFIHz3GX10VBeZ5ZrCaApUzLhAXCcdqpopVjF9xxy8WZPmMVzGqqkCOKrbZbGm1fRqzWZpS2Pehdlwn0C7YdxwOB20fHByYmpPk2alUirYF7FMQhC9aG/1iQZanfNd8gbW3a/R7NZFIQFtbm+Gfn0Sc+uFOCAQCkM/nwlw3PwqFlnp7e09t6+MG9jUxMfGUpaWe1Wm1WO75/f40zomxzc1NyGQyYAaCYIeeHi9ZpYdxhCZZNhW33/AacBBvmd3OpA896WxW/aBHFry/hkr24TTXWrT7dNSmydaUdjQ37+DmFF6tb0CNGmeUfwIH0sS3Pm7dAAAAAElFTkSuQmCC";
60828
+ const textmateIcon = "data:image/png;base64,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";
60829
+ const vscodeIcon = "/assets/vscode-C5BXgFjm.svg";
60830
+ const warpIcon = "data:image/png;base64,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";
60831
+ const webstormIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzA3QzNGMiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwODdDRkEiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8cmVjdCB4PSI0OCIgeT0iNDgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIiByeD0iNCIgZmlsbD0iIzAwMCIvPgogIDx0ZXh0IHg9IjYwIiB5PSIxNzgiIGZpbGw9IiNmZmYiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9ImJvbGQiIGZvbnQtc2l6ZT0iNTYiPldTPC90ZXh0Pgo8L3N2Zz4K";
60832
+ const windSurfIcon = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20256%20256'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='0'%20y1='0'%20x2='256'%20y2='256'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%230ACF83'/%3e%3cstop%20offset='1'%20stop-color='%2305A2C2'/%3e%3c/linearGradient%3e%3c/defs%3e%3crect%20width='256'%20height='256'%20rx='48'%20fill='url(%23a)'/%3e%3cpath%20d='M80%2080%20L176%20128%20L80%20176Z'%20fill='%23fff'/%3e%3c/svg%3e";
60833
+ const xcodeIcon = "data:image/png;base64,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";
60834
+ const zedIcon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_5437_79109)'%3e%3cmask%20id='mask0_5437_79109'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='5'%20y='5'%20width='30'%20height='30'%3e%3cpath%20d='M5.6001%205.59961H34.4001V34.3996H5.6001V5.59961Z'%20fill='white'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_5437_79109)'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M8.3001%207.39961C8.0614%207.39961%207.83248%207.49443%207.6637%207.66321C7.49492%207.832%207.4001%208.06091%207.4001%208.29961V28.0996H5.6001V8.29961C5.6001%207.58352%205.88456%206.89677%206.39091%206.39042C6.89726%205.88407%207.58401%205.59961%208.3001%205.59961H32.4138C33.6165%205.59961%2034.2186%207.05371%2033.3684%207.90421L18.5166%2022.7557H22.7001V20.8996H24.5001V23.206C24.5001%2023.5641%2024.3579%2023.9074%2024.1047%2024.1606C23.8515%2024.4138%2023.5081%2024.556%2023.1501%2024.556H16.7166L13.623%2027.6496H27.6501V16.3996H29.4501V27.6496C29.4501%2028.127%2029.2605%2028.5848%2028.9229%2028.9224C28.5853%2029.26%2028.1275%2029.4496%2027.6501%2029.4496H11.823L8.673%2032.5996H31.7001C31.9388%2032.5996%2032.1677%2032.5048%2032.3365%2032.336C32.5053%2032.1672%2032.6001%2031.9383%2032.6001%2031.6996V11.8996H34.4001V31.6996C34.4001%2032.4157%2034.1156%2033.1024%2033.6093%2033.6088C33.1029%2034.1151%2032.4162%2034.3996%2031.7001%2034.3996H7.5864C6.3837%2034.3996%205.7816%2032.9455%206.6318%2032.095L21.4272%2017.2996H17.3001V19.0996H15.5001V16.8496C15.5001%2016.4916%2015.6423%2016.1482%2015.8955%2015.895C16.1487%2015.6418%2016.4921%2015.4996%2016.8501%2015.4996H23.2272L26.3772%2012.3496H12.3501V23.5996H10.5501V12.3496C10.5501%2011.8722%2010.7397%2011.4144%2011.0773%2011.0768C11.4149%2010.7393%2011.8727%2010.5496%2012.3501%2010.5496H28.1772L31.3272%207.39961H8.3001Z'%20fill='black'/%3e%3c/g%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_5437_79109'%3e%3crect%20width='28.8'%20height='28.8'%20fill='white'%20transform='translate(5.6001%205.59961)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e";
60835
+ const zedDarkIcon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_5437_79100)'%3e%3cmask%20id='mask0_5437_79100'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='5'%20y='5'%20width='30'%20height='30'%3e%3cpath%20d='M5.6001%205.59961H34.4001V34.3996H5.6001V5.59961Z'%20fill='white'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_5437_79100)'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M8.3001%207.39961C8.0614%207.39961%207.83248%207.49443%207.6637%207.66321C7.49492%207.832%207.4001%208.06091%207.4001%208.29961V28.0996H5.6001V8.29961C5.6001%207.58352%205.88456%206.89677%206.39091%206.39042C6.89726%205.88407%207.58401%205.59961%208.3001%205.59961H32.4138C33.6165%205.59961%2034.2186%207.05371%2033.3684%207.90421L18.5166%2022.7557H22.7001V20.8996H24.5001V23.206C24.5001%2023.5641%2024.3579%2023.9074%2024.1047%2024.1606C23.8515%2024.4138%2023.5081%2024.556%2023.1501%2024.556H16.7166L13.623%2027.6496H27.6501V16.3996H29.4501V27.6496C29.4501%2028.127%2029.2605%2028.5848%2028.9229%2028.9224C28.5853%2029.26%2028.1275%2029.4496%2027.6501%2029.4496H11.823L8.673%2032.5996H31.7001C31.9388%2032.5996%2032.1677%2032.5048%2032.3365%2032.336C32.5053%2032.1672%2032.6001%2031.9383%2032.6001%2031.6996V11.8996H34.4001V31.6996C34.4001%2032.4157%2034.1156%2033.1024%2033.6093%2033.6088C33.1029%2034.1151%2032.4162%2034.3996%2031.7001%2034.3996H7.5864C6.3837%2034.3996%205.7816%2032.9455%206.6318%2032.095L21.4272%2017.2996H17.3001V19.0996H15.5001V16.8496C15.5001%2016.4916%2015.6423%2016.1482%2015.8955%2015.895C16.1487%2015.6418%2016.4921%2015.4996%2016.8501%2015.4996H23.2272L26.3772%2012.3496H12.3501V23.5996H10.5501V12.3496C10.5501%2011.8722%2010.7397%2011.4144%2011.0773%2011.0768C11.4149%2010.7393%2011.8727%2010.5496%2012.3501%2010.5496H28.1772L31.3272%207.39961H8.3001Z'%20fill='white'/%3e%3c/g%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_5437_79100'%3e%3crect%20width='28.8'%20height='28.8'%20fill='white'%20transform='translate(5.6001%205.59961)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e";
60836
+ const APP_ICONS = {
60837
+ vscode: vscodeIcon,
60838
+ cursor: cursorIcon,
60839
+ zed: zedIcon,
60840
+ "zed-dark": zedDarkIcon,
60841
+ finder: finderIcon,
60842
+ terminal: terminalIcon,
60843
+ iterm2: iterm2Icon,
60844
+ ghostty: ghosttyIcon,
60845
+ warp: warpIcon,
60846
+ xcode: xcodeIcon,
60847
+ "android-studio": androidStudioIcon,
60848
+ antigravity: antigravityIcon,
60849
+ textmate: textmateIcon,
60850
+ "sublime-text": sublimetextIcon,
60851
+ intellij: intellijIcon,
60852
+ webstorm: webstormIcon,
60853
+ rustrover: rustroverIcon,
60854
+ windsurf: windSurfIcon,
60855
+ kiro: kiroIcon
60856
+ };
60857
+ function isDark$1() {
60858
+ return document.documentElement.classList.contains("dark");
60859
+ }
60860
+ function AppIcon({ id: id28, className }) {
60861
+ const [dark, setDark] = reactExports.useState(isDark$1);
60862
+ reactExports.useEffect(() => {
60863
+ const observer = new MutationObserver(() => setDark(isDark$1()));
60864
+ observer.observe(document.documentElement, {
60865
+ attributes: true,
60866
+ attributeFilter: ["class"]
60867
+ });
60868
+ return () => observer.disconnect();
60869
+ }, []);
60870
+ let src = APP_ICONS[id28];
60871
+ if (id28 === "zed" && dark) {
60872
+ src = APP_ICONS["zed-dark"];
60873
+ }
60874
+ if (!src) return null;
60875
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src, alt: "", draggable: false, className: className ?? "size-5" });
60876
+ }
60877
+ const MAC_APPS = [
60878
+ { id: "vscode", label: "VS Code", icon: "vscode", openWith: "Visual Studio Code" },
60879
+ { id: "cursor", label: "Cursor", icon: "cursor", openWith: "Cursor" },
60880
+ { id: "zed", label: "Zed", icon: "zed", openWith: "Zed" },
60881
+ { id: "windsurf", label: "Windsurf", icon: "windsurf", openWith: "Windsurf" },
60882
+ { id: "kiro", label: "Kiro", icon: "kiro", openWith: "Kiro" },
60883
+ { id: "xcode", label: "Xcode", icon: "xcode", openWith: "Xcode" },
60884
+ { id: "antigravity", label: "Antigravity", icon: "antigravity", openWith: "Antigravity" },
60885
+ { id: "textmate", label: "TextMate", icon: "textmate", openWith: "TextMate" },
60886
+ { id: "sublime-text", label: "Sublime Text", icon: "sublime-text", openWith: "Sublime Text" },
60887
+ { id: "intellij", label: "IntelliJ IDEA", icon: "intellij", openWith: "IntelliJ IDEA" },
60888
+ { id: "webstorm", label: "WebStorm", icon: "webstorm", openWith: "WebStorm" },
60889
+ { id: "rustrover", label: "RustRover", icon: "rustrover", openWith: "RustRover" },
60890
+ { id: "iterm2", label: "iTerm2", icon: "iterm2", openWith: "iTerm" },
60891
+ { id: "terminal", label: "Terminal", icon: "terminal", openWith: "Terminal" },
60892
+ { id: "ghostty", label: "Ghostty", icon: "ghostty", openWith: "Ghostty" },
60893
+ { id: "warp", label: "Warp", icon: "warp", openWith: "Warp" },
60894
+ {
60895
+ id: "android-studio",
60896
+ label: "Android Studio",
60897
+ icon: "android-studio",
60898
+ openWith: "Android Studio"
60899
+ }
60900
+ ];
60901
+ function EditorPicker({ workspacePath, onCopyPath }) {
60902
+ const { settings } = useSettingsQuery();
60903
+ const updateSettings = useUpdateSettings();
60904
+ const [installed, setInstalled] = reactExports.useState({ finder: true });
60905
+ reactExports.useEffect(() => {
60906
+ if (!isDesktop) return;
60907
+ let cancelled = false;
60908
+ Promise.all(
60909
+ MAC_APPS.map(
60910
+ (app) => invoke("check_app_exists", { appName: app.openWith }).then((ok2) => [app.id, ok2]).catch(() => [app.id, false])
60911
+ )
60912
+ ).then((entries2) => {
60913
+ if (cancelled) return;
60914
+ const map2 = { finder: true };
60915
+ for (const [id28, ok2] of entries2) {
60916
+ map2[id28] = ok2;
60917
+ }
60918
+ setInstalled(map2);
60919
+ });
60920
+ return () => {
60921
+ cancelled = true;
60922
+ };
60923
+ }, []);
60924
+ const options = reactExports.useMemo(() => {
60925
+ const finderItem = {
60926
+ id: "finder",
60927
+ label: "Finder",
60928
+ icon: "finder",
60929
+ openWith: "Finder"
60930
+ };
60931
+ const apps = MAC_APPS.filter((app) => installed[app.id]);
60932
+ return [finderItem, ...apps];
60933
+ }, [installed]);
60934
+ const selectedId = settings.defaultOpenApp;
60935
+ const current = reactExports.useMemo(
60936
+ () => options.find((o3) => o3.id === selectedId) ?? options[0],
60937
+ [options, selectedId]
60938
+ );
60939
+ const selectApp = reactExports.useCallback(
60940
+ (appId) => {
60941
+ updateSettings.mutate({
60942
+ ...settings,
60943
+ defaultOpenApp: appId
60944
+ });
60945
+ },
60946
+ [settings, updateSettings]
60947
+ );
60948
+ const openWith = reactExports.useCallback(
60949
+ async (app) => {
60950
+ if (!isDesktop) return;
60951
+ if (app.id === "finder") {
60952
+ invoke("reveal_in_finder", { path: workspacePath }).catch(() => {
60953
+ });
60954
+ return;
60955
+ }
60956
+ invoke("open_with_app", {
60957
+ path: workspacePath,
60958
+ appName: app.openWith
60959
+ }).catch(() => {
60960
+ });
60961
+ },
60962
+ [workspacePath]
60963
+ );
60964
+ const handleMainClick = reactExports.useCallback(() => {
60965
+ openWith(current);
60966
+ }, [current, openWith]);
60967
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center rounded-md overflow-hidden border border-border/40", children: [
60968
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
60969
+ "button",
60970
+ {
60971
+ type: "button",
60972
+ onClick: handleMainClick,
60973
+ onMouseDown: (e2) => e2.stopPropagation(),
60974
+ className: "flex items-center justify-center px-1 py-0.5 hover:bg-accent/50 transition-colors",
60975
+ title: `Open in ${current.label}`,
60976
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(AppIcon, { id: current.icon, className: "size-5" })
60977
+ }
60978
+ ),
60979
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
60980
+ /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
60981
+ "button",
60982
+ {
60983
+ type: "button",
60984
+ onMouseDown: (e2) => e2.stopPropagation(),
60985
+ className: "flex items-center justify-center px-0.5 py-0.5 hover:bg-accent/50 transition-colors border-l border-border/40",
60986
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3.5 text-muted-foreground" })
60987
+ }
60988
+ ) }),
60989
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuContent, { align: "end", className: "min-w-[180px]", children: [
60990
+ /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuLabel, { children: "Open in" }),
60991
+ options.map((app) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
60992
+ DropdownMenuItem,
60993
+ {
60994
+ onClick: () => {
60995
+ selectApp(app.id);
60996
+ openWith(app);
60997
+ },
60998
+ className: "gap-2",
60999
+ children: [
61000
+ /* @__PURE__ */ jsxRuntimeExports.jsx(AppIcon, { id: app.icon, className: "size-5 shrink-0" }),
61001
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1", children: app.label }),
61002
+ current.id === app.id && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-muted-foreground" })
61003
+ ]
61004
+ },
61005
+ app.id
61006
+ )),
61007
+ onCopyPath && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
61008
+ /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuSeparator, {}),
61009
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onClick: onCopyPath, className: "gap-2", children: [
61010
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-4 shrink-0 ml-0.5" }),
61011
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1", children: "Copy path" })
61012
+ ] })
61013
+ ] })
61014
+ ] })
61015
+ ] })
61016
+ ] });
61017
+ }
61018
+ const DRAG_STYLE = { WebkitAppRegion: "drag" };
61019
+ const NO_DRAG_STYLE = { WebkitAppRegion: "no-drag" };
61020
+ function DesktopTitleBar({
61021
+ title,
61022
+ onToggleSidebar,
61023
+ sidebarCollapsed,
61024
+ workspaceName,
61025
+ workspacePath,
61026
+ onCopyPath,
61027
+ panelItems,
61028
+ hiddenPanels,
61029
+ onTogglePanelVisibility
61030
+ }) {
61031
+ const [appTitle, setAppTitle] = reactExports.useState(title ?? "Band");
61032
+ reactExports.useEffect(() => {
61033
+ if (title) return;
61034
+ if (!isDesktop) return;
61035
+ invoke("get_app_title").then(setAppTitle).catch(() => {
61036
+ });
61037
+ }, [title]);
61038
+ const hasEditorPicker = workspaceName && workspacePath;
61039
+ const hasPanels = workspaceName && panelItems && panelItems.length > 0 && onTogglePanelVisibility;
61040
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
61041
+ "div",
61042
+ {
61043
+ className: "h-[38px] shrink-0 flex items-center justify-center relative border-b border-border",
61044
+ style: DRAG_STYLE,
61045
+ children: [
61046
+ onToggleSidebar && /* @__PURE__ */ jsxRuntimeExports.jsx(
61047
+ "button",
61048
+ {
61049
+ type: "button",
61050
+ onClick: onToggleSidebar,
61051
+ style: NO_DRAG_STYLE,
61052
+ className: "absolute left-[80px] top-1/2 -translate-y-1/2 flex items-center justify-center rounded p-1 text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors pointer-events-auto",
61053
+ title: sidebarCollapsed ? "Show sidebar" : "Hide sidebar",
61054
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-5" })
61055
+ }
61056
+ ),
61057
+ workspaceName ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-semibold text-foreground select-none pointer-events-none truncate max-w-[50%]", children: workspaceName }) : /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium text-muted-foreground select-none pointer-events-none", children: appTitle }),
61058
+ (hasEditorPicker || hasPanels) && /* @__PURE__ */ jsxRuntimeExports.jsxs(
61059
+ "div",
61060
+ {
61061
+ className: "absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1 pointer-events-auto",
61062
+ style: NO_DRAG_STYLE,
61063
+ children: [
61064
+ hasEditorPicker && /* @__PURE__ */ jsxRuntimeExports.jsx(EditorPicker, { workspacePath, onCopyPath }),
61065
+ hasPanels && /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
61066
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
61067
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
61068
+ "button",
61069
+ {
61070
+ type: "button",
61071
+ className: "flex items-center justify-center rounded-md p-1 text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors",
61072
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelTop, { className: "size-5" })
61073
+ }
61074
+ ) }) }),
61075
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", children: "Switch Panel" })
61076
+ ] }),
61077
+ /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuContent, { align: "end", children: panelItems?.map((item) => {
61078
+ const Icon2 = item.icon;
61079
+ const isChat = item.id === "chat";
61080
+ const isVisible = isChat || !hiddenPanels?.includes(item.id);
61081
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
61082
+ DropdownMenuCheckboxItem,
61083
+ {
61084
+ checked: isVisible,
61085
+ disabled: isChat,
61086
+ onCheckedChange: () => {
61087
+ if (isChat) return;
61088
+ onTogglePanelVisibility?.(item.id);
61089
+ },
61090
+ children: [
61091
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "size-4" }),
61092
+ item.label,
61093
+ item.shortcut && /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuShortcut, { children: item.shortcut })
61094
+ ]
61095
+ },
61096
+ item.id
61097
+ );
61098
+ }) })
61099
+ ] })
61100
+ ]
61101
+ }
61102
+ )
61103
+ ]
61104
+ }
61105
+ );
61106
+ }
61107
+ function DesktopDragRegion() {
61108
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-[38px] shrink-0", style: DRAG_STYLE });
61109
+ }
60722
61110
  function parseWorkspaceFromPath(pathname) {
60723
61111
  const match = pathname.match(/^\/workspace\/([^/]+)/);
60724
61112
  return match ? decodeURIComponent(match[1]) : null;
@@ -72153,47 +72541,6 @@ function useRecentFiles(workspaceId) {
72153
72541
  );
72154
72542
  return { recentFiles, trackFile };
72155
72543
  }
72156
- const isTauri = typeof window !== "undefined" && "__TAURI_INTERNALS__" in window;
72157
- const isElectron = typeof window !== "undefined" && "__BAND_DESKTOP__" in window;
72158
- const isDesktop = isTauri || isElectron;
72159
- function electronBridge() {
72160
- if (!isElectron) return null;
72161
- const bridge = window.__BAND_DESKTOP__;
72162
- return bridge ?? null;
72163
- }
72164
- async function invoke(cmd2, args) {
72165
- const bridge = electronBridge();
72166
- if (bridge) {
72167
- return await bridge.invoke(cmd2, args);
72168
- }
72169
- if (isTauri) {
72170
- const { invoke: tauriInvoke } = await import("./core-dG4_vufa.js");
72171
- return tauriInvoke(cmd2, args);
72172
- }
72173
- throw new Error(`invoke('${cmd2}') called outside a desktop shell`);
72174
- }
72175
- async function listen(event, cb) {
72176
- const bridge = electronBridge();
72177
- if (bridge) {
72178
- return bridge.on(event, (payload) => cb({ payload }));
72179
- }
72180
- if (isTauri) {
72181
- const { listen: tauriListen } = await import("./event-2oMkw_LQ.js");
72182
- return tauriListen(event, cb);
72183
- }
72184
- throw new Error(`listen('${event}') called outside a desktop shell`);
72185
- }
72186
- async function startDragging() {
72187
- const bridge = electronBridge();
72188
- if (bridge) {
72189
- await bridge.startDragging();
72190
- return;
72191
- }
72192
- if (isTauri) {
72193
- const { getCurrentWindow } = await import("./window-Qr88gZCE.js");
72194
- await getCurrentWindow().startDragging();
72195
- }
72196
- }
72197
72544
  const wsClient = createWSClient({
72198
72545
  url: () => {
72199
72546
  const proto2 = location.protocol === "https:" ? "wss:" : "ws:";
@@ -111773,7 +112120,7 @@ const luminance = (color2) => {
111773
112120
  const isLight = (color2) => {
111774
112121
  return luminance(color2) >= 0.5;
111775
112122
  };
111776
- const isDark$1 = (color2) => {
112123
+ const isDark = (color2) => {
111777
112124
  return !isLight(color2);
111778
112125
  };
111779
112126
  const adjustChannel = (color2, channel, amount) => {
@@ -113095,7 +113442,7 @@ var Theme2 = (_b2 = class {
113095
113442
  this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });
113096
113443
  this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });
113097
113444
  this.quadrant4TextFill = this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });
113098
- this.quadrantPointFill = this.quadrantPointFill || isDark$1(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
113445
+ this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
113099
113446
  this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
113100
113447
  this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
113101
113448
  this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
@@ -113395,7 +113742,7 @@ var Theme22 = (_c = class {
113395
113742
  this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });
113396
113743
  this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });
113397
113744
  this.quadrant4TextFill = this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });
113398
- this.quadrantPointFill = this.quadrantPointFill || isDark$1(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
113745
+ this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
113399
113746
  this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
113400
113747
  this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
113401
113748
  this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
@@ -113713,7 +114060,7 @@ var Theme3 = (_d = class {
113713
114060
  this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });
113714
114061
  this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });
113715
114062
  this.quadrant4TextFill = this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });
113716
- this.quadrantPointFill = this.quadrantPointFill || isDark$1(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
114063
+ this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
113717
114064
  this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
113718
114065
  this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
113719
114066
  this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
@@ -114014,7 +114361,7 @@ var Theme4 = (_e2 = class {
114014
114361
  this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });
114015
114362
  this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });
114016
114363
  this.quadrant4TextFill = this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });
114017
- this.quadrantPointFill = this.quadrantPointFill || isDark$1(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
114364
+ this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
114018
114365
  this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
114019
114366
  this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
114020
114367
  this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
@@ -114335,7 +114682,7 @@ var Theme5 = (_f = class {
114335
114682
  this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });
114336
114683
  this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });
114337
114684
  this.quadrant4TextFill = this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });
114338
- this.quadrantPointFill = this.quadrantPointFill || isDark$1(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
114685
+ this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
114339
114686
  this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
114340
114687
  this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
114341
114688
  this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
@@ -131995,12 +132342,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
131995
132342
  registerLayoutLoaders([
131996
132343
  {
131997
132344
  name: "dagre",
131998
- loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-BEGPY_P8.js"), "loader")
132345
+ loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-Cefu204F.js"), "loader")
131999
132346
  },
132000
132347
  ...[
132001
132348
  {
132002
132349
  name: "cose-bilkent",
132003
- loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-BOuoNr7N.js"), "loader")
132350
+ loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-_7cffNle.js"), "loader")
132004
132351
  }
132005
132352
  ]
132006
132353
  ]);
@@ -132439,7 +132786,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
132439
132786
  return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
132440
132787
  }, "detector");
132441
132788
  var loader = /* @__PURE__ */ __name(async () => {
132442
- const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-C2v52EXK.js");
132789
+ const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-D9aranD0.js");
132443
132790
  return { id, diagram: diagram2 };
132444
132791
  }, "loader");
132445
132792
  var plugin = {
@@ -132456,7 +132803,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
132456
132803
  return /^\s*graph/.test(txt);
132457
132804
  }, "detector");
132458
132805
  var loader2 = /* @__PURE__ */ __name(async () => {
132459
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DGePuZ_D.js");
132806
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DkHr76XI.js");
132460
132807
  return { id: id2, diagram: diagram2 };
132461
132808
  }, "loader");
132462
132809
  var plugin2 = {
@@ -132479,7 +132826,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
132479
132826
  return /^\s*flowchart/.test(txt);
132480
132827
  }, "detector");
132481
132828
  var loader3 = /* @__PURE__ */ __name(async () => {
132482
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DGePuZ_D.js");
132829
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DkHr76XI.js");
132483
132830
  return { id: id3, diagram: diagram2 };
132484
132831
  }, "loader");
132485
132832
  var plugin3 = {
@@ -132493,7 +132840,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
132493
132840
  return /^\s*erDiagram/.test(txt);
132494
132841
  }, "detector");
132495
132842
  var loader4 = /* @__PURE__ */ __name(async () => {
132496
- const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-CS94DyiJ.js");
132843
+ const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-9TUXBEEN.js");
132497
132844
  return { id: id4, diagram: diagram2 };
132498
132845
  }, "loader");
132499
132846
  var plugin4 = {
@@ -132507,7 +132854,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
132507
132854
  return /^\s*gitGraph/.test(txt);
132508
132855
  }, "detector");
132509
132856
  var loader5 = /* @__PURE__ */ __name(async () => {
132510
- const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-BygjesE-.js");
132857
+ const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-Cq6NrkS2.js");
132511
132858
  return { id: id5, diagram: diagram2 };
132512
132859
  }, "loader");
132513
132860
  var plugin5 = {
@@ -132521,7 +132868,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
132521
132868
  return /^\s*gantt/.test(txt);
132522
132869
  }, "detector");
132523
132870
  var loader6 = /* @__PURE__ */ __name(async () => {
132524
- const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-nyPfcgRT.js");
132871
+ const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-D62VSFN-.js");
132525
132872
  return { id: id6, diagram: diagram2 };
132526
132873
  }, "loader");
132527
132874
  var plugin6 = {
@@ -132535,7 +132882,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
132535
132882
  return /^\s*info/.test(txt);
132536
132883
  }, "detector");
132537
132884
  var loader7 = /* @__PURE__ */ __name(async () => {
132538
- const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-D83vTisF.js");
132885
+ const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-z48Ilxyy.js");
132539
132886
  return { id: id7, diagram: diagram2 };
132540
132887
  }, "loader");
132541
132888
  var info = {
@@ -132548,7 +132895,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
132548
132895
  return /^\s*pie/.test(txt);
132549
132896
  }, "detector");
132550
132897
  var loader8 = /* @__PURE__ */ __name(async () => {
132551
- const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-Bl150d6W.js");
132898
+ const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-BDcmTNeb.js");
132552
132899
  return { id: id8, diagram: diagram2 };
132553
132900
  }, "loader");
132554
132901
  var pie = {
@@ -132561,7 +132908,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
132561
132908
  return /^\s*quadrantChart/.test(txt);
132562
132909
  }, "detector");
132563
132910
  var loader9 = /* @__PURE__ */ __name(async () => {
132564
- const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-ClIy1n9L.js");
132911
+ const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-DVfUAm25.js");
132565
132912
  return { id: id9, diagram: diagram2 };
132566
132913
  }, "loader");
132567
132914
  var plugin7 = {
@@ -132575,7 +132922,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
132575
132922
  return /^\s*xychart(-beta)?/.test(txt);
132576
132923
  }, "detector");
132577
132924
  var loader10 = /* @__PURE__ */ __name(async () => {
132578
- const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-C3ztrSUC.js");
132925
+ const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-B8xp3EP5.js");
132579
132926
  return { id: id10, diagram: diagram2 };
132580
132927
  }, "loader");
132581
132928
  var plugin8 = {
@@ -132589,7 +132936,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
132589
132936
  return /^\s*requirement(Diagram)?/.test(txt);
132590
132937
  }, "detector");
132591
132938
  var loader11 = /* @__PURE__ */ __name(async () => {
132592
- const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-B87j_suL.js");
132939
+ const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-CQfWrrP_.js");
132593
132940
  return { id: id11, diagram: diagram2 };
132594
132941
  }, "loader");
132595
132942
  var plugin9 = {
@@ -132603,7 +132950,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
132603
132950
  return /^\s*sequenceDiagram/.test(txt);
132604
132951
  }, "detector");
132605
132952
  var loader12 = /* @__PURE__ */ __name(async () => {
132606
- const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-DziQuu14.js");
132953
+ const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-_VMzymo9.js");
132607
132954
  return { id: id12, diagram: diagram2 };
132608
132955
  }, "loader");
132609
132956
  var plugin10 = {
@@ -132620,7 +132967,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
132620
132967
  return /^\s*classDiagram/.test(txt);
132621
132968
  }, "detector");
132622
132969
  var loader13 = /* @__PURE__ */ __name(async () => {
132623
- const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-CbsNfDCL.js");
132970
+ const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-B7uMu4wG.js");
132624
132971
  return { id: id13, diagram: diagram2 };
132625
132972
  }, "loader");
132626
132973
  var plugin11 = {
@@ -132637,7 +132984,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
132637
132984
  return /^\s*classDiagram-v2/.test(txt);
132638
132985
  }, "detector");
132639
132986
  var loader14 = /* @__PURE__ */ __name(async () => {
132640
- const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-CbsNfDCL.js");
132987
+ const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-B7uMu4wG.js");
132641
132988
  return { id: id14, diagram: diagram2 };
132642
132989
  }, "loader");
132643
132990
  var plugin12 = {
@@ -132654,7 +133001,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
132654
133001
  return /^\s*stateDiagram/.test(txt);
132655
133002
  }, "detector");
132656
133003
  var loader15 = /* @__PURE__ */ __name(async () => {
132657
- const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-7wEsr4R_.js");
133004
+ const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-P9tJlZ70.js");
132658
133005
  return { id: id15, diagram: diagram2 };
132659
133006
  }, "loader");
132660
133007
  var plugin13 = {
@@ -132674,7 +133021,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
132674
133021
  return false;
132675
133022
  }, "detector");
132676
133023
  var loader16 = /* @__PURE__ */ __name(async () => {
132677
- const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-D2VjwPAa.js");
133024
+ const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-Cb6P-c6h.js");
132678
133025
  return { id: id16, diagram: diagram2 };
132679
133026
  }, "loader");
132680
133027
  var plugin14 = {
@@ -132688,7 +133035,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
132688
133035
  return /^\s*journey/.test(txt);
132689
133036
  }, "detector");
132690
133037
  var loader17 = /* @__PURE__ */ __name(async () => {
132691
- const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-PbUYIdib.js");
133038
+ const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-2_BMX1ei.js");
132692
133039
  return { id: id17, diagram: diagram2 };
132693
133040
  }, "loader");
132694
133041
  var plugin15 = {
@@ -132755,7 +133102,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
132755
133102
  return false;
132756
133103
  }, "detector");
132757
133104
  var loader18 = /* @__PURE__ */ __name(async () => {
132758
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DGePuZ_D.js");
133105
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DkHr76XI.js");
132759
133106
  return { id: id18, diagram: diagram2 };
132760
133107
  }, "loader");
132761
133108
  var plugin16 = {
@@ -132769,7 +133116,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
132769
133116
  return /^\s*timeline/.test(txt);
132770
133117
  }, "detector");
132771
133118
  var loader19 = /* @__PURE__ */ __name(async () => {
132772
- const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI--uelCCOi.js");
133119
+ const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-tuTHzmXv.js");
132773
133120
  return { id: id19, diagram: diagram2 };
132774
133121
  }, "loader");
132775
133122
  var plugin17 = {
@@ -132783,7 +133130,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
132783
133130
  return /^\s*mindmap/.test(txt);
132784
133131
  }, "detector");
132785
133132
  var loader20 = /* @__PURE__ */ __name(async () => {
132786
- const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-BdjAKwAK.js");
133133
+ const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-BbNEUTwc.js");
132787
133134
  return { id: id20, diagram: diagram2 };
132788
133135
  }, "loader");
132789
133136
  var plugin18 = {
@@ -132797,7 +133144,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
132797
133144
  return /^\s*kanban/.test(txt);
132798
133145
  }, "detector");
132799
133146
  var loader21 = /* @__PURE__ */ __name(async () => {
132800
- const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-BQSc_qmP.js");
133147
+ const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-YMu0hChh.js");
132801
133148
  return { id: id21, diagram: diagram2 };
132802
133149
  }, "loader");
132803
133150
  var plugin19 = {
@@ -132811,7 +133158,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
132811
133158
  return /^\s*sankey(-beta)?/.test(txt);
132812
133159
  }, "detector");
132813
133160
  var loader22 = /* @__PURE__ */ __name(async () => {
132814
- const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-Bq18JLF9.js");
133161
+ const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-BW9xc6Gi.js");
132815
133162
  return { id: id22, diagram: diagram2 };
132816
133163
  }, "loader");
132817
133164
  var plugin20 = {
@@ -132825,7 +133172,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
132825
133172
  return /^\s*packet(-beta)?/.test(txt);
132826
133173
  }, "detector");
132827
133174
  var loader23 = /* @__PURE__ */ __name(async () => {
132828
- const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-Bk6j9I_3.js");
133175
+ const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-CHWLN67z.js");
132829
133176
  return { id: id23, diagram: diagram2 };
132830
133177
  }, "loader");
132831
133178
  var packet = {
@@ -132838,7 +133185,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
132838
133185
  return /^\s*radar-beta/.test(txt);
132839
133186
  }, "detector");
132840
133187
  var loader24 = /* @__PURE__ */ __name(async () => {
132841
- const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-Ywb8tTSL.js");
133188
+ const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-UNhxZG5g.js");
132842
133189
  return { id: id24, diagram: diagram2 };
132843
133190
  }, "loader");
132844
133191
  var radar = {
@@ -132851,7 +133198,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
132851
133198
  return /^\s*block(-beta)?/.test(txt);
132852
133199
  }, "detector");
132853
133200
  var loader25 = /* @__PURE__ */ __name(async () => {
132854
- const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-CsN3W5TR.js");
133201
+ const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-CnVWNic_.js");
132855
133202
  return { id: id25, diagram: diagram2 };
132856
133203
  }, "loader");
132857
133204
  var plugin21 = {
@@ -132865,7 +133212,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
132865
133212
  return /^\s*architecture/.test(txt);
132866
133213
  }, "detector");
132867
133214
  var loader26 = /* @__PURE__ */ __name(async () => {
132868
- const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-CxaRzb-g.js");
133215
+ const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-ClVOs7P1.js");
132869
133216
  return { id: id26, diagram: diagram2 };
132870
133217
  }, "loader");
132871
133218
  var architecture = {
@@ -132879,7 +133226,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
132879
133226
  return /^\s*treemap/.test(txt);
132880
133227
  }, "detector");
132881
133228
  var loader27 = /* @__PURE__ */ __name(async () => {
132882
- const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-DdLXbkDH.js");
133229
+ const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-BeMp8Xfu.js");
132883
133230
  return { id: id27, diagram: diagram2 };
132884
133231
  }, "loader");
132885
133232
  var treemap = {
@@ -148557,7 +148904,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
148557
148904
  var et2 = ({ className: e2, language: t2, style: o3, isIncomplete: n2, ...s2 }) => jsxRuntimeExports.jsx("div", { className: f("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 });
148558
148905
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
148559
148906
  var ot2 = ({ 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 }) });
148560
- var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-CULjZ_nJ.js").then((e2) => ({ default: e2.HighlightedCodeBlockBody }))), rt = ({ code: e2, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
148907
+ var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-f4qauOuN.js").then((e2) => ({ default: e2.HighlightedCodeBlockBody }))), rt = ({ code: e2, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
148561
148908
  let i2 = reactExports.useMemo(() => e2.replace(cn, ""), [e2]), c2 = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i2.split(`
148562
148909
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i2]);
148563
148910
  return jsxRuntimeExports.jsx(Se.Provider, { value: { code: e2 }, children: jsxRuntimeExports.jsxs(et2, { isIncomplete: s2, language: t2, children: [jsxRuntimeExports.jsx(ot2, { 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, { className: o3, language: t2, result: c2, ...r2 }), children: jsxRuntimeExports.jsx(dn, { className: o3, code: i2, language: t2, raw: c2, ...r2 }) })] }) });
@@ -148879,7 +149226,7 @@ var Dt = ({ children: e2, className: t2, onDownload: o3, onError: n2 }) => {
148879
149226
  }, []), jsxRuntimeExports.jsxs("div", { className: "relative", ref: i2, children: [jsxRuntimeExports.jsx("button", { className: f("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, { 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] });
148880
149227
  };
148881
149228
  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("w-full divide-y divide-border", t2), "data-streamdown": "table", ...n2, children: e2 }) })] });
148882
- var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-BnVYO1pJ.js").then((e2) => ({ default: e2.Mermaid }))), Kn = /language-([^\s]+)/;
149229
+ var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-nj6kJNsf.js").then((e2) => ({ default: e2.Mermaid }))), Kn = /language-([^\s]+)/;
148883
149230
  function ke(e2, t2) {
148884
149231
  if (!(e2 != null && e2.position || t2 != null && t2.position)) return true;
148885
149232
  if (!(e2 != null && e2.position && (t2 != null && t2.position))) return false;
@@ -149716,10 +150063,6 @@ function FileTabBar({
149716
150063
  }
149717
150064
  function openExternalUrl(url) {
149718
150065
  if (isDesktop) {
149719
- if (isTauri) {
149720
- import("./index-jMSXp5h7.js").then(({ open: open2 }) => open2(url)).catch(() => window.open(url));
149721
- return;
149722
- }
149723
150066
  invoke("open_external", { url }).catch(() => {
149724
150067
  window.open(url, "_blank", "noopener");
149725
150068
  });
@@ -163923,7 +164266,7 @@ const PANEL_SHORTCUTS = {
163923
164266
  browser: "⌘B"
163924
164267
  };
163925
164268
  const DockviewTerminalContainer = reactExports.lazy(
163926
- () => import("./DockviewTerminalContainer-nurSvNMN.js").then((m2) => ({
164269
+ () => import("./DockviewTerminalContainer-B7m50Lcc.js").then((m2) => ({
163927
164270
  default: m2.DockviewTerminalContainer
163928
164271
  }))
163929
164272
  );
@@ -164802,316 +165145,6 @@ function DockviewInstanceManager() {
164802
165145
  );
164803
165146
  }) });
164804
165147
  }
164805
- const androidStudioIcon = "/assets/android-studio-t3zZ7G0e.svg";
164806
- const antigravityIcon = "/assets/antigravity-m-mWKI7R.svg";
164807
- const cursorIcon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_5436_78947)'%3e%3cmask%20id='mask0_5436_78947'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='4'%20y='4'%20width='32'%20height='32'%3e%3cpath%20d='M4%204H36V36H4V4Z'%20fill='white'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_5436_78947)'%3e%3cpath%20d='M28.375%204H11.625C7.41383%204%204%207.41383%204%2011.625V28.375C4%2032.5862%207.41383%2036%2011.625%2036H28.375C32.5862%2036%2036%2032.5862%2036%2028.375V11.625C36%207.41383%2032.5862%204%2028.375%204Z'%20fill='black'/%3e%3c/g%3e%3cpath%20d='M29.6214%2014.2072L20.9502%209.12249C20.6718%208.95917%2020.3282%208.95917%2020.0498%209.12249L11.3786%2014.2072C11.1445%2014.3445%2011%2014.5984%2011%2014.8733V25.1267C11%2025.4012%2011.1445%2025.6555%2011.3786%2025.7928L20.0498%2030.8775C20.3282%2031.0408%2020.6718%2031.0408%2020.9502%2030.8775L29.6214%2025.7928C29.8555%2025.6555%2030%2025.4016%2030%2025.1267V14.8733C30%2014.5988%2029.8555%2014.3445%2029.6214%2014.2072ZM29.0767%2015.2843L20.706%2030.0101C20.6494%2030.1093%2020.5%2030.0688%2020.5%2029.9538V20.3115C20.5%2020.1189%2020.3986%2019.9407%2020.2342%2019.8439L12.0124%2015.0226C11.9147%2014.9651%2011.9546%2014.8134%2012.0678%2014.8134H28.8093C29.047%2014.8134%2029.1956%2015.0751%2029.0767%2015.2843Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_5436_78947'%3e%3crect%20width='32'%20height='32'%20fill='white'%20transform='translate(4%204)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e";
164808
- const finderIcon = "data:image/png;base64,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";
164809
- const ghosttyIcon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_5437_79067)'%3e%3cpath%20d='M27.395%2036C26.1435%2035.9986%2024.9203%2035.6274%2023.879%2034.933C22.8374%2035.6273%2021.6139%2035.9985%2020.362%2036C19.113%2036%2017.882%2035.625%2016.846%2034.933C15.8189%2035.6241%2014.61%2035.9954%2013.372%2036H13.334C12.4944%2036.0006%2011.6633%2035.8321%2010.8902%2035.5047C10.1171%2035.1772%209.41781%2034.6975%208.83405%2034.094C7.65642%2032.8996%206.99679%2031.2893%206.99805%2029.612V17.362C7.00005%209.995%2012.994%204%2020.362%204C27.731%204%2033.725%209.994%2033.725%2017.363V29.616C33.725%2033.009%2031.099%2035.808%2027.747%2035.991C27.63%2035.998%2027.513%2036%2027.395%2036Z'%20fill='%233551F3'/%3e%3cpath%20d='M27.395%2034.5932C26.2752%2034.5924%2025.1889%2034.2104%2024.315%2033.5102C24.1961%2033.4145%2024.0476%2033.3632%2023.895%2033.3652C23.7174%2033.367%2023.5457%2033.4291%2023.408%2033.5412C22.5392%2034.2237%2021.4668%2034.5951%2020.362%2034.5962C19.2576%2034.5949%2018.1855%2034.2234%2017.317%2033.5412C17.1835%2033.4338%2017.0174%2033.3752%2016.846%2033.3752C16.6747%2033.3752%2016.5085%2033.4338%2016.375%2033.5412C15.518%2034.2199%2014.4581%2034.5914%2013.365%2034.5962H13.332C12.6806%2034.5961%2012.0359%2034.4649%2011.4362%2034.2102C10.8366%2033.9556%2010.2945%2033.5829%209.84201%2033.1142C8.92225%2032.1822%208.40639%2030.9256%208.40601%2029.6162V17.3672C8.40601%2010.7702%2013.77%205.40723%2020.363%205.40723C26.955%205.40723%2032.319%2010.7702%2032.319%2017.3632V29.6162C32.319%2032.2612%2030.277%2034.4432%2027.669%2034.5862C27.5777%2034.5909%2027.4864%2034.5932%2027.395%2034.5932Z'%20fill='black'/%3e%3cpath%20d='M30.912%2017.3635V29.6165C30.912%2031.4925%2029.465%2033.0795%2027.592%2033.1825C26.725%2033.2323%2025.8704%2032.9582%2025.194%2032.4135C24.416%2031.7875%2023.321%2031.8155%2022.536%2032.4345C21.9163%2032.9237%2021.1495%2033.1891%2020.36%2033.1875C19.5714%2033.1889%2018.8056%2032.9235%2018.187%2032.4345C17.8057%2032.1306%2017.3326%2031.9651%2016.845%2031.9651C16.3574%2031.9651%2015.8843%2032.1306%2015.503%2032.4345C14.8904%2032.9183%2014.1336%2033.1834%2013.353%2033.1875C11.405%2033.2015%209.81299%2031.5605%209.81299%2029.6125V17.3625C9.81299%2011.5375%2014.537%206.81348%2020.363%206.81348C26.188%206.81348%2030.912%2011.5375%2030.912%2017.3635Z'%20fill='white'/%3e%3cpath%20d='M18.28%2016.4366L14.35%2014.1666C14.104%2014.0248%2013.8117%2013.9865%2013.5374%2014.06C13.2632%2014.1335%2013.0292%2014.3128%2012.887%2014.5586C12.7452%2014.8045%2012.7067%2015.0966%2012.78%2015.3709C12.8533%2015.6452%2013.0324%2015.8792%2013.278%2016.0216L15.604%2017.3646L13.278%2018.7076C13.045%2018.8559%2012.8783%2019.0886%2012.8126%2019.3569C12.7469%2019.6252%2012.7873%2019.9085%2012.9255%2020.1478C13.0636%2020.387%2013.2887%2020.5637%2013.554%2020.641C13.8192%2020.7183%2014.104%2020.6902%2014.349%2020.5626L18.281%2018.2926C18.4436%2018.1985%2018.5786%2018.0633%2018.6724%2017.9006C18.7662%2017.7379%2018.8156%2017.5534%2018.8156%2017.3656C18.8156%2017.1777%2018.7662%2016.9932%2018.6724%2016.8305C18.5786%2016.6678%2018.4436%2016.5326%2018.281%2016.4386V16.4366H18.28ZM27.182%2016.2906H22.018C21.7338%2016.2906%2021.4613%2016.4034%2021.2604%2016.6044C21.0594%2016.8053%2020.9465%2017.0779%2020.9465%2017.3621C20.9465%2017.6462%2021.0594%2017.9188%2021.2604%2018.1197C21.4613%2018.3207%2021.7338%2018.4336%2022.018%2018.4336H27.182C27.4662%2018.4336%2027.7387%2018.3207%2027.9397%2018.1197C28.1406%2017.9188%2028.2535%2017.6462%2028.2535%2017.3621C28.2535%2017.0779%2028.1406%2016.8053%2027.9397%2016.6044C27.7387%2016.4034%2027.4662%2016.2906%2027.182%2016.2906Z'%20fill='black'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_5437_79067'%3e%3crect%20width='27'%20height='32'%20fill='white'%20transform='translate(7%204)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e";
164810
- const intellijIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0Y5N0ExMiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGQzI5QjgiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8cmVjdCB4PSI0OCIgeT0iNDgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIiByeD0iNCIgZmlsbD0iIzAwMCIvPgogIDx0ZXh0IHg9IjYwIiB5PSIxNzgiIGZpbGw9IiNmZmYiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9ImJvbGQiIGZvbnQtc2l6ZT0iNTYiPklKPC90ZXh0Pgo8L3N2Zz4K";
164811
- const iterm2Icon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20x='4'%20y='4'%20width='32'%20height='32'%20rx='6.4'%20fill='url(%23paint0_linear_5437_79079)'/%3e%3crect%20x='4.80005'%20y='4.7998'%20width='30.4'%20height='30.4'%20rx='5.6'%20fill='black'/%3e%3crect%20x='7.19995'%20y='7.2002'%20width='25.6'%20height='25.6'%20rx='3.2'%20fill='%23202A2F'/%3e%3cpath%20d='M25.2454%208.85742H19.2454V20.8574H25.2454V8.85742Z'%20fill='%230EE827'%20fill-opacity='0.35'/%3e%3cpath%20d='M11.7895%2018.9218C11.4758%2018.8949%2011.1817%2018.85%2010.9072%2018.7872C10.6424%2018.7154%2010.3973%2018.6392%2010.1718%2018.5584C9.95613%2018.4776%209.76496%2018.4014%209.59829%2018.3296C9.44145%2018.2488%209.32378%2018.186%209.24536%2018.1412L9.87771%2016.9567C9.94631%2017.0016%2010.064%2017.0644%2010.2306%2017.1452C10.3973%2017.2259%2010.5836%2017.3111%2010.7895%2017.4009C11.0052%2017.4816%2011.2257%2017.5534%2011.4513%2017.6162C11.6768%2017.679%2011.8875%2017.7105%2012.0836%2017.7105C13.064%2017.7105%2013.5542%2017.3381%2013.5542%2016.5933C13.5542%2016.4138%2013.5199%2016.2658%2013.4512%2016.1492C13.3925%2016.0325%2013.2993%2015.9338%2013.1719%2015.853C13.0542%2015.7633%2012.9071%2015.687%2012.7307%2015.6242C12.564%2015.5525%2012.3729%2015.4806%2012.1571%2015.4089C11.7453%2015.2653%2011.3777%2015.1172%2011.0542%2014.9647C10.7405%2014.8032%2010.4708%2014.6237%2010.2454%2014.4263C10.0199%2014.2289%209.8483%2014.0046%209.73063%2013.7534C9.61303%2013.5021%209.5542%2013.2149%209.5542%2012.8919C9.5542%2012.6407%209.60812%2012.3984%209.71596%2012.1651C9.82379%2011.9318%209.97572%2011.7254%2010.1718%2011.546C10.3679%2011.3576%2010.6032%2011.2005%2010.8777%2011.0749C11.1522%2010.9403%2011.4562%2010.8461%2011.7895%2010.7922V8.85742H12.9954V10.7653C13.2503%2010.7922%2013.4954%2010.8326%2013.7307%2010.8865C13.966%2010.9403%2014.1767%2010.9986%2014.363%2011.0614C14.5493%2011.1242%2014.7062%2011.1871%2014.8336%2011.2499C14.9709%2011.3037%2015.0689%2011.3441%2015.1278%2011.371L14.5395%2012.4747C14.4611%2012.4388%2014.3483%2012.3939%2014.2012%2012.3401C14.064%2012.2773%2013.9072%2012.2144%2013.7307%2012.1517C13.5542%2012.0888%2013.363%2012.035%2013.1571%2011.9901C12.9513%2011.9453%2012.7454%2011.9228%2012.5395%2011.9228C12.2062%2011.9228%2011.9071%2011.9856%2011.6424%2012.1112C11.3875%2012.2279%2011.2601%2012.4298%2011.2601%2012.7169C11.2601%2012.8964%2011.2944%2013.058%2011.363%2013.2015C11.4414%2013.3361%2011.5493%2013.4573%2011.6865%2013.5649C11.8336%2013.6726%2012.0101%2013.7758%2012.2159%2013.8745C12.4316%2013.9642%2012.6768%2014.054%2012.9513%2014.1437C13.314%2014.2782%2013.6376%2014.4173%2013.9218%2014.5609C14.2062%2014.7045%2014.4463%2014.866%2014.6424%2015.0455C14.8385%2015.2249%2014.9856%2015.4313%2015.0836%2015.6646C15.1914%2015.8979%2015.2454%2016.1715%2015.2454%2016.4856C15.2454%2016.7548%2015.1964%2017.015%2015.0983%2017.2662C15.0101%2017.5175%2014.8679%2017.7508%2014.6718%2017.9661C14.4856%2018.1815%2014.2503%2018.3699%2013.966%2018.5315C13.6915%2018.684%2013.3679%2018.7962%2012.9954%2018.8679V20.8574H11.7895V18.9218Z'%20fill='%230EE827'/%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_5437_79079'%20x1='20'%20y1='4'%20x2='20'%20y2='36'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23D4E6E8'/%3e%3cstop%20offset='1'%20stop-color='%23767573'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e";
164812
- const kiroIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0ZGOTkwMCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRjY2MDAiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8dGV4dCB4PSI1NiIgeT0iMTc4IiBmaWxsPSIjZmZmIiBmb250LWZhbWlseT0iQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSJib2xkIiBmb250LXNpemU9IjcyIj5LPC90ZXh0Pgo8L3N2Zz4K";
164813
- const rustroverIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0ZDODAxRCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNCNzRDRjAiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8cmVjdCB4PSI0OCIgeT0iNDgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIiByeD0iNCIgZmlsbD0iIzAwMCIvPgogIDx0ZXh0IHg9IjYwIiB5PSIxNzgiIGZpbGw9IiNmZmYiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9ImJvbGQiIGZvbnQtc2l6ZT0iNTYiPlJSPC90ZXh0Pgo8L3N2Zz4K";
164814
- const sublimetextIcon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_5436_78897)'%3e%3cpath%20d='M35.911%2020.0773C35.911%2019.7026%2035.552%2019.4866%2035.1114%2019.5939L4.79962%2027.0055C4.35812%2027.1135%204%2027.5052%204%2027.8792V35.4541C4%2035.8288%204.35812%2036.0455%204.79962%2035.9375L35.1114%2028.5266C35.552%2028.4187%2035.911%2028.0269%2035.911%2027.6523V20.0774V20.0773Z'%20fill='url(%23paint0_linear_5436_78897)'/%3e%3cpath%20d='M4%2019.8353C4%2020.21%204.35812%2020.6016%204.79962%2020.7097L35.1159%2028.1219C35.5573%2028.2299%2035.9155%2028.0133%2035.9155%2027.6393V20.0637C35.9155%2019.6897%2035.5573%2019.298%2035.1159%2019.19L4.79962%2011.7778C4.35812%2011.6699%204%2011.8858%204%2012.2603V19.8353V19.8353Z'%20fill='%23FF9800'/%3e%3cpath%20d='M35.911%204.51106C35.911%204.1365%2035.552%203.91973%2035.1114%204.02778L4.79962%2011.4387C4.35812%2011.5466%204%2011.9383%204%2012.313V19.8879C4%2020.2626%204.35812%2020.4786%204.79962%2020.3712L35.1114%2012.9596C35.552%2012.8517%2035.911%2012.46%2035.911%2012.086V4.51106Z'%20fill='%23FF9800'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_5436_78897'%20x1='1762.84'%20y1='981.852'%20x2='1845.15'%20y2='624.882'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23FF9700'/%3e%3cstop%20offset='0.53'%20stop-color='%23F48E00'/%3e%3cstop%20offset='1'%20stop-color='%23D06F00'/%3e%3c/linearGradient%3e%3cclipPath%20id='clip0_5436_78897'%3e%3crect%20width='32'%20height='32'%20fill='white'%20transform='translate(4%204)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e";
164815
- const terminalIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAA0RJREFUeAHtmM9PE0EUx18pJCRaugUhQkuqXgi3eqDVpJFK+g9w8Ejkohcg4I8DFynECxdEAlz0gA0nNYF4kkODRDQmNQQ8NRhjbd1FrQHankja3XFm7DbN7rQMyS7l0E+y3dmZt/u+mffednYAatSoLpZKg9s//wawRUhKJj2/90QBLNgcocJt+EyvAQo/UBwv2qkeCm7o2P/ri+3OtOuSewcpEL7quvACTsJ2PC5sJf8sPQw9Rh2dnaigwPCjw9WJJmfm0FYyNUt8Ai+f4+Ls3dEHpgnTHndG76NoXFpiaanXdnz8Gh988+rl2LO5GXrd2NgILS0tUFdXB0aSy+Vgf3+fnp/PPYFztvODn2Lx8PXuyxuldroc/BD79u5WMBD4JYnQ0NAAbrfbcHEqiqKAKIpwdHQE7U4XvI683/B3X7lZaqPzLCV+eIg4Qmtrq2niqHP8bBIdAvEpJr57dDbajj1RLCar1Wot9i8vL0MwGAQzRKpgkXbduLZDlmVg4XQ6YXFxkR6kbQZKXtalnE4gwnnBYmhoCKLRKJ3F9fV1mJ6eNlwozkkExwlU5Dzz5lgsBgMDAzA+Pg6SJEF/fz8VOjw8DMYJ1EePO8Qqq6ur0NfXR2eT4PP5wChknhArZUKs4vV6acGQczabhUgkAkbBil693kguK2xkZISeCSsrK7CwsEDDbRSs/OcWqBYFCe38/HwxxEbCSi+9QIUtkAgis1ZO2O7uLpSjq6sLeGD51gnEicq8mVSv2XDNIFIqV3E5eGepEkjmeM0cV8VmIvMILBfi00DhmkFURYFIHz3GX10VBeZ5ZrCaApUzLhAXCcdqpopVjF9xxy8WZPmMVzGqqkCOKrbZbGm1fRqzWZpS2Pehdlwn0C7YdxwOB20fHByYmpPk2alUirYF7FMQhC9aG/1iQZanfNd8gbW3a/R7NZFIQFtbm+Gfn0Sc+uFOCAQCkM/nwlw3PwqFlnp7e09t6+MG9jUxMfGUpaWe1Wm1WO75/f40zomxzc1NyGQyYAaCYIeeHi9ZpYdxhCZZNhW33/AacBBvmd3OpA896WxW/aBHFry/hkr24TTXWrT7dNSmydaUdjQ37+DmFF6tb0CNGmeUfwIH0sS3Pm7dAAAAAElFTkSuQmCC";
164816
- const textmateIcon = "data:image/png;base64,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";
164817
- const vscodeIcon = "/assets/vscode-C5BXgFjm.svg";
164818
- const warpIcon = "data:image/png;base64,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";
164819
- const webstormIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzA3QzNGMiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwODdDRkEiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8cmVjdCB4PSI0OCIgeT0iNDgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIiByeD0iNCIgZmlsbD0iIzAwMCIvPgogIDx0ZXh0IHg9IjYwIiB5PSIxNzgiIGZpbGw9IiNmZmYiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9ImJvbGQiIGZvbnQtc2l6ZT0iNTYiPldTPC90ZXh0Pgo8L3N2Zz4K";
164820
- const windSurfIcon = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20256%20256'%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='0'%20y1='0'%20x2='256'%20y2='256'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%230ACF83'/%3e%3cstop%20offset='1'%20stop-color='%2305A2C2'/%3e%3c/linearGradient%3e%3c/defs%3e%3crect%20width='256'%20height='256'%20rx='48'%20fill='url(%23a)'/%3e%3cpath%20d='M80%2080%20L176%20128%20L80%20176Z'%20fill='%23fff'/%3e%3c/svg%3e";
164821
- const xcodeIcon = "data:image/png;base64,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";
164822
- const zedIcon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_5437_79109)'%3e%3cmask%20id='mask0_5437_79109'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='5'%20y='5'%20width='30'%20height='30'%3e%3cpath%20d='M5.6001%205.59961H34.4001V34.3996H5.6001V5.59961Z'%20fill='white'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_5437_79109)'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M8.3001%207.39961C8.0614%207.39961%207.83248%207.49443%207.6637%207.66321C7.49492%207.832%207.4001%208.06091%207.4001%208.29961V28.0996H5.6001V8.29961C5.6001%207.58352%205.88456%206.89677%206.39091%206.39042C6.89726%205.88407%207.58401%205.59961%208.3001%205.59961H32.4138C33.6165%205.59961%2034.2186%207.05371%2033.3684%207.90421L18.5166%2022.7557H22.7001V20.8996H24.5001V23.206C24.5001%2023.5641%2024.3579%2023.9074%2024.1047%2024.1606C23.8515%2024.4138%2023.5081%2024.556%2023.1501%2024.556H16.7166L13.623%2027.6496H27.6501V16.3996H29.4501V27.6496C29.4501%2028.127%2029.2605%2028.5848%2028.9229%2028.9224C28.5853%2029.26%2028.1275%2029.4496%2027.6501%2029.4496H11.823L8.673%2032.5996H31.7001C31.9388%2032.5996%2032.1677%2032.5048%2032.3365%2032.336C32.5053%2032.1672%2032.6001%2031.9383%2032.6001%2031.6996V11.8996H34.4001V31.6996C34.4001%2032.4157%2034.1156%2033.1024%2033.6093%2033.6088C33.1029%2034.1151%2032.4162%2034.3996%2031.7001%2034.3996H7.5864C6.3837%2034.3996%205.7816%2032.9455%206.6318%2032.095L21.4272%2017.2996H17.3001V19.0996H15.5001V16.8496C15.5001%2016.4916%2015.6423%2016.1482%2015.8955%2015.895C16.1487%2015.6418%2016.4921%2015.4996%2016.8501%2015.4996H23.2272L26.3772%2012.3496H12.3501V23.5996H10.5501V12.3496C10.5501%2011.8722%2010.7397%2011.4144%2011.0773%2011.0768C11.4149%2010.7393%2011.8727%2010.5496%2012.3501%2010.5496H28.1772L31.3272%207.39961H8.3001Z'%20fill='black'/%3e%3c/g%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_5437_79109'%3e%3crect%20width='28.8'%20height='28.8'%20fill='white'%20transform='translate(5.6001%205.59961)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e";
164823
- const zedDarkIcon = "data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_5437_79100)'%3e%3cmask%20id='mask0_5437_79100'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='5'%20y='5'%20width='30'%20height='30'%3e%3cpath%20d='M5.6001%205.59961H34.4001V34.3996H5.6001V5.59961Z'%20fill='white'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_5437_79100)'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M8.3001%207.39961C8.0614%207.39961%207.83248%207.49443%207.6637%207.66321C7.49492%207.832%207.4001%208.06091%207.4001%208.29961V28.0996H5.6001V8.29961C5.6001%207.58352%205.88456%206.89677%206.39091%206.39042C6.89726%205.88407%207.58401%205.59961%208.3001%205.59961H32.4138C33.6165%205.59961%2034.2186%207.05371%2033.3684%207.90421L18.5166%2022.7557H22.7001V20.8996H24.5001V23.206C24.5001%2023.5641%2024.3579%2023.9074%2024.1047%2024.1606C23.8515%2024.4138%2023.5081%2024.556%2023.1501%2024.556H16.7166L13.623%2027.6496H27.6501V16.3996H29.4501V27.6496C29.4501%2028.127%2029.2605%2028.5848%2028.9229%2028.9224C28.5853%2029.26%2028.1275%2029.4496%2027.6501%2029.4496H11.823L8.673%2032.5996H31.7001C31.9388%2032.5996%2032.1677%2032.5048%2032.3365%2032.336C32.5053%2032.1672%2032.6001%2031.9383%2032.6001%2031.6996V11.8996H34.4001V31.6996C34.4001%2032.4157%2034.1156%2033.1024%2033.6093%2033.6088C33.1029%2034.1151%2032.4162%2034.3996%2031.7001%2034.3996H7.5864C6.3837%2034.3996%205.7816%2032.9455%206.6318%2032.095L21.4272%2017.2996H17.3001V19.0996H15.5001V16.8496C15.5001%2016.4916%2015.6423%2016.1482%2015.8955%2015.895C16.1487%2015.6418%2016.4921%2015.4996%2016.8501%2015.4996H23.2272L26.3772%2012.3496H12.3501V23.5996H10.5501V12.3496C10.5501%2011.8722%2010.7397%2011.4144%2011.0773%2011.0768C11.4149%2010.7393%2011.8727%2010.5496%2012.3501%2010.5496H28.1772L31.3272%207.39961H8.3001Z'%20fill='white'/%3e%3c/g%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_5437_79100'%3e%3crect%20width='28.8'%20height='28.8'%20fill='white'%20transform='translate(5.6001%205.59961)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e";
164824
- const APP_ICONS = {
164825
- vscode: vscodeIcon,
164826
- cursor: cursorIcon,
164827
- zed: zedIcon,
164828
- "zed-dark": zedDarkIcon,
164829
- finder: finderIcon,
164830
- terminal: terminalIcon,
164831
- iterm2: iterm2Icon,
164832
- ghostty: ghosttyIcon,
164833
- warp: warpIcon,
164834
- xcode: xcodeIcon,
164835
- "android-studio": androidStudioIcon,
164836
- antigravity: antigravityIcon,
164837
- textmate: textmateIcon,
164838
- "sublime-text": sublimetextIcon,
164839
- intellij: intellijIcon,
164840
- webstorm: webstormIcon,
164841
- rustrover: rustroverIcon,
164842
- windsurf: windSurfIcon,
164843
- kiro: kiroIcon
164844
- };
164845
- function isDark() {
164846
- return document.documentElement.classList.contains("dark");
164847
- }
164848
- function AppIcon({ id: id28, className }) {
164849
- const [dark, setDark] = reactExports.useState(isDark);
164850
- reactExports.useEffect(() => {
164851
- const observer = new MutationObserver(() => setDark(isDark()));
164852
- observer.observe(document.documentElement, {
164853
- attributes: true,
164854
- attributeFilter: ["class"]
164855
- });
164856
- return () => observer.disconnect();
164857
- }, []);
164858
- let src = APP_ICONS[id28];
164859
- if (id28 === "zed" && dark) {
164860
- src = APP_ICONS["zed-dark"];
164861
- }
164862
- if (!src) return null;
164863
- return /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src, alt: "", draggable: false, className: className ?? "size-5" });
164864
- }
164865
- const MAC_APPS = [
164866
- { id: "vscode", label: "VS Code", icon: "vscode", openWith: "Visual Studio Code" },
164867
- { id: "cursor", label: "Cursor", icon: "cursor", openWith: "Cursor" },
164868
- { id: "zed", label: "Zed", icon: "zed", openWith: "Zed" },
164869
- { id: "windsurf", label: "Windsurf", icon: "windsurf", openWith: "Windsurf" },
164870
- { id: "kiro", label: "Kiro", icon: "kiro", openWith: "Kiro" },
164871
- { id: "xcode", label: "Xcode", icon: "xcode", openWith: "Xcode" },
164872
- { id: "antigravity", label: "Antigravity", icon: "antigravity", openWith: "Antigravity" },
164873
- { id: "textmate", label: "TextMate", icon: "textmate", openWith: "TextMate" },
164874
- { id: "sublime-text", label: "Sublime Text", icon: "sublime-text", openWith: "Sublime Text" },
164875
- { id: "intellij", label: "IntelliJ IDEA", icon: "intellij", openWith: "IntelliJ IDEA" },
164876
- { id: "webstorm", label: "WebStorm", icon: "webstorm", openWith: "WebStorm" },
164877
- { id: "rustrover", label: "RustRover", icon: "rustrover", openWith: "RustRover" },
164878
- { id: "iterm2", label: "iTerm2", icon: "iterm2", openWith: "iTerm" },
164879
- { id: "terminal", label: "Terminal", icon: "terminal", openWith: "Terminal" },
164880
- { id: "ghostty", label: "Ghostty", icon: "ghostty", openWith: "Ghostty" },
164881
- { id: "warp", label: "Warp", icon: "warp", openWith: "Warp" },
164882
- {
164883
- id: "android-studio",
164884
- label: "Android Studio",
164885
- icon: "android-studio",
164886
- openWith: "Android Studio"
164887
- }
164888
- ];
164889
- function EditorPicker({ workspacePath, onCopyPath }) {
164890
- const { settings } = useSettingsQuery();
164891
- const updateSettings = useUpdateSettings();
164892
- const [installed, setInstalled] = reactExports.useState({ finder: true });
164893
- reactExports.useEffect(() => {
164894
- if (!isDesktop) return;
164895
- let cancelled = false;
164896
- Promise.all(
164897
- MAC_APPS.map(
164898
- (app) => invoke("check_app_exists", { appName: app.openWith }).then((ok2) => [app.id, ok2]).catch(() => [app.id, false])
164899
- )
164900
- ).then((entries2) => {
164901
- if (cancelled) return;
164902
- const map2 = { finder: true };
164903
- for (const [id28, ok2] of entries2) {
164904
- map2[id28] = ok2;
164905
- }
164906
- setInstalled(map2);
164907
- });
164908
- return () => {
164909
- cancelled = true;
164910
- };
164911
- }, []);
164912
- const options = reactExports.useMemo(() => {
164913
- const finderItem = {
164914
- id: "finder",
164915
- label: "Finder",
164916
- icon: "finder",
164917
- openWith: "Finder"
164918
- };
164919
- const apps = MAC_APPS.filter((app) => installed[app.id]);
164920
- return [finderItem, ...apps];
164921
- }, [installed]);
164922
- const selectedId = settings.defaultOpenApp;
164923
- const current = reactExports.useMemo(
164924
- () => options.find((o3) => o3.id === selectedId) ?? options[0],
164925
- [options, selectedId]
164926
- );
164927
- const selectApp = reactExports.useCallback(
164928
- (appId) => {
164929
- updateSettings.mutate({
164930
- ...settings,
164931
- defaultOpenApp: appId
164932
- });
164933
- },
164934
- [settings, updateSettings]
164935
- );
164936
- const openWith = reactExports.useCallback(
164937
- async (app) => {
164938
- if (!isDesktop) return;
164939
- if (app.id === "finder") {
164940
- invoke("reveal_in_finder", { path: workspacePath }).catch(() => {
164941
- });
164942
- return;
164943
- }
164944
- invoke("open_with_app", {
164945
- path: workspacePath,
164946
- appName: app.openWith
164947
- }).catch(() => {
164948
- });
164949
- },
164950
- [workspacePath]
164951
- );
164952
- const handleMainClick = reactExports.useCallback(() => {
164953
- openWith(current);
164954
- }, [current, openWith]);
164955
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center rounded-md overflow-hidden border border-border/40", children: [
164956
- /* @__PURE__ */ jsxRuntimeExports.jsx(
164957
- "button",
164958
- {
164959
- type: "button",
164960
- onClick: handleMainClick,
164961
- onMouseDown: (e2) => e2.stopPropagation(),
164962
- className: "flex items-center justify-center px-1 py-0.5 hover:bg-accent/50 transition-colors",
164963
- title: `Open in ${current.label}`,
164964
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(AppIcon, { id: current.icon, className: "size-5" })
164965
- }
164966
- ),
164967
- /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
164968
- /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
164969
- "button",
164970
- {
164971
- type: "button",
164972
- onMouseDown: (e2) => e2.stopPropagation(),
164973
- className: "flex items-center justify-center px-0.5 py-0.5 hover:bg-accent/50 transition-colors border-l border-border/40",
164974
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3.5 text-muted-foreground" })
164975
- }
164976
- ) }),
164977
- /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuContent, { align: "end", className: "min-w-[180px]", children: [
164978
- /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuLabel, { children: "Open in" }),
164979
- options.map((app) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
164980
- DropdownMenuItem,
164981
- {
164982
- onClick: () => {
164983
- selectApp(app.id);
164984
- openWith(app);
164985
- },
164986
- className: "gap-2",
164987
- children: [
164988
- /* @__PURE__ */ jsxRuntimeExports.jsx(AppIcon, { id: app.icon, className: "size-5 shrink-0" }),
164989
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1", children: app.label }),
164990
- current.id === app.id && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-muted-foreground" })
164991
- ]
164992
- },
164993
- app.id
164994
- )),
164995
- onCopyPath && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
164996
- /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuSeparator, {}),
164997
- /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onClick: onCopyPath, className: "gap-2", children: [
164998
- /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-4 shrink-0 ml-0.5" }),
164999
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1", children: "Copy path" })
165000
- ] })
165001
- ] })
165002
- ] })
165003
- ] })
165004
- ] });
165005
- }
165006
- function useDesktopDrag(ref) {
165007
- reactExports.useEffect(() => {
165008
- const el = ref.current;
165009
- if (!el) return;
165010
- if (!isDesktop) return;
165011
- const onMouseDown = (e2) => {
165012
- if (e2.buttons !== 1) return;
165013
- startDragging().catch(() => {
165014
- });
165015
- };
165016
- el.addEventListener("mousedown", onMouseDown);
165017
- return () => el.removeEventListener("mousedown", onMouseDown);
165018
- }, [ref]);
165019
- }
165020
- function TauriTitleBar({
165021
- title,
165022
- onToggleSidebar,
165023
- sidebarCollapsed,
165024
- workspaceName,
165025
- workspacePath,
165026
- onCopyPath,
165027
- panelItems,
165028
- hiddenPanels,
165029
- onTogglePanelVisibility
165030
- }) {
165031
- const [appTitle, setAppTitle] = reactExports.useState(title ?? "Band");
165032
- const ref = reactExports.useRef(null);
165033
- reactExports.useEffect(() => {
165034
- if (title) return;
165035
- if (!isDesktop) return;
165036
- invoke("get_app_title").then(setAppTitle).catch(() => {
165037
- });
165038
- }, [title]);
165039
- useDesktopDrag(ref);
165040
- const hasEditorPicker = workspaceName && workspacePath;
165041
- const hasPanels = workspaceName && panelItems && panelItems.length > 0 && onTogglePanelVisibility;
165042
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
165043
- "div",
165044
- {
165045
- ref,
165046
- "data-tauri-drag-region": true,
165047
- className: "h-[38px] shrink-0 flex items-center justify-center relative border-b border-border",
165048
- children: [
165049
- onToggleSidebar && /* @__PURE__ */ jsxRuntimeExports.jsx(
165050
- "button",
165051
- {
165052
- type: "button",
165053
- onClick: onToggleSidebar,
165054
- onMouseDown: (e2) => e2.stopPropagation(),
165055
- className: "absolute left-[80px] top-1/2 -translate-y-1/2 flex items-center justify-center rounded p-1 text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors pointer-events-auto",
165056
- title: sidebarCollapsed ? "Show sidebar" : "Hide sidebar",
165057
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-5" })
165058
- }
165059
- ),
165060
- workspaceName ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-semibold text-foreground select-none pointer-events-none truncate max-w-[50%]", children: workspaceName }) : /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium text-muted-foreground select-none pointer-events-none", children: appTitle }),
165061
- (hasEditorPicker || hasPanels) && /* @__PURE__ */ jsxRuntimeExports.jsxs(
165062
- "div",
165063
- {
165064
- className: "absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1 pointer-events-auto",
165065
- onMouseDown: (e2) => e2.stopPropagation(),
165066
- children: [
165067
- hasEditorPicker && /* @__PURE__ */ jsxRuntimeExports.jsx(EditorPicker, { workspacePath, onCopyPath }),
165068
- hasPanels && /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
165069
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
165070
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165071
- "button",
165072
- {
165073
- type: "button",
165074
- className: "flex items-center justify-center rounded-md p-1 text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors",
165075
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelTop, { className: "size-5" })
165076
- }
165077
- ) }) }),
165078
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", children: "Switch Panel" })
165079
- ] }),
165080
- /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuContent, { align: "end", children: panelItems?.map((item) => {
165081
- const Icon2 = item.icon;
165082
- const isChat = item.id === "chat";
165083
- const isVisible = isChat || !hiddenPanels?.includes(item.id);
165084
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
165085
- DropdownMenuCheckboxItem,
165086
- {
165087
- checked: isVisible,
165088
- disabled: isChat,
165089
- onCheckedChange: () => {
165090
- if (isChat) return;
165091
- onTogglePanelVisibility?.(item.id);
165092
- },
165093
- children: [
165094
- /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "size-4" }),
165095
- item.label,
165096
- item.shortcut && /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuShortcut, { children: item.shortcut })
165097
- ]
165098
- },
165099
- item.id
165100
- );
165101
- }) })
165102
- ] })
165103
- ]
165104
- }
165105
- )
165106
- ]
165107
- }
165108
- );
165109
- }
165110
- function TauriDragRegion() {
165111
- const ref = reactExports.useRef(null);
165112
- useDesktopDrag(ref);
165113
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref, "data-tauri-drag-region": true, className: "h-[38px] shrink-0" });
165114
- }
165115
165148
  const HEALTH_POLL_INTERVAL = 3e4;
165116
165149
  function useTunnel() {
165117
165150
  const adapter2 = useAdapter();
@@ -167628,7 +167661,7 @@ function saveSidebarWidth(width) {
167628
167661
  }
167629
167662
  const SIDEBAR_MIN_SIZE = "15rem";
167630
167663
  const SIDEBAR_MAX_SIZE = "60%";
167631
- const adapter = isDesktop ? new TauriDashboardAdapter() : new WebDashboardAdapter();
167664
+ const adapter = isDesktop ? new DesktopDashboardAdapter() : new WebDashboardAdapter();
167632
167665
  const capabilities = isDesktop ? new NativeShellCapabilities() : new WebCapabilities();
167633
167666
  const Route$8 = createRootRoute({
167634
167667
  head: () => ({
@@ -167807,7 +167840,7 @@ function AppShell() {
167807
167840
  }
167808
167841
  return /* @__PURE__ */ jsxRuntimeExports.jsx(ToolbarOverflowProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col h-dvh w-full overflow-hidden bg-background text-foreground", children: [
167809
167842
  isDesktop && /* @__PURE__ */ jsxRuntimeExports.jsx(
167810
- TauriTitleBar,
167843
+ DesktopTitleBar,
167811
167844
  {
167812
167845
  onToggleSidebar: toggleSidebar,
167813
167846
  sidebarCollapsed,
@@ -167876,11 +167909,11 @@ function RootLayout() {
167876
167909
  ] })
167877
167910
  ] });
167878
167911
  }
167879
- const $$splitComponentImporter$7 = () => import("./index-CnQ4qso3.js");
167912
+ const $$splitComponentImporter$7 = () => import("./index-ClnAaUnc.js");
167880
167913
  const Route$7 = createFileRoute("/")({
167881
167914
  component: lazyRouteComponent($$splitComponentImporter$7, "component")
167882
167915
  });
167883
- const $$splitComponentImporter$6 = () => import("./workspace._workspaceId-Bs8UzdnH.js");
167916
+ const $$splitComponentImporter$6 = () => import("./workspace._workspaceId-Ca5XltsV.js");
167884
167917
  const Route$6 = createFileRoute("/workspace/$workspaceId")({
167885
167918
  component: lazyRouteComponent($$splitComponentImporter$6, "component")
167886
167919
  });
@@ -167899,11 +167932,11 @@ const FindInFileContext = reactExports.createContext({
167899
167932
  function useFindInFileContext() {
167900
167933
  return reactExports.useContext(FindInFileContext);
167901
167934
  }
167902
- const $$splitComponentImporter$5 = () => import("./workspace._workspaceId.index-CM2nPNp3.js");
167935
+ const $$splitComponentImporter$5 = () => import("./workspace._workspaceId.index-C2U_2sVz.js");
167903
167936
  const Route$5 = createFileRoute("/workspace/$workspaceId/")({
167904
167937
  component: lazyRouteComponent($$splitComponentImporter$5, "component")
167905
167938
  });
167906
- const $$splitComponentImporter$4 = () => import("./workspace._workspaceId.terminal-ByrTEXV_.js");
167939
+ const $$splitComponentImporter$4 = () => import("./workspace._workspaceId.terminal-i2FfY7JG.js");
167907
167940
  const Route$4 = createFileRoute("/workspace/$workspaceId/terminal")({
167908
167941
  component: lazyRouteComponent($$splitComponentImporter$4, "component")
167909
167942
  });
@@ -167911,15 +167944,15 @@ const $$splitComponentImporter$3 = () => import("./workspace._workspaceId.code-C
167911
167944
  const Route$3 = createFileRoute("/workspace/$workspaceId/code")({
167912
167945
  component: lazyRouteComponent($$splitComponentImporter$3, "component")
167913
167946
  });
167914
- const $$splitComponentImporter$2 = () => import("./workspace._workspaceId.changes-BWu2NrZR.js");
167947
+ const $$splitComponentImporter$2 = () => import("./workspace._workspaceId.changes-z2xCX4Ct.js");
167915
167948
  const Route$2 = createFileRoute("/workspace/$workspaceId/changes")({
167916
167949
  component: lazyRouteComponent($$splitComponentImporter$2, "component")
167917
167950
  });
167918
- const $$splitComponentImporter$1 = () => import("./workspace._workspaceId.code.index-D9xieBbz.js");
167951
+ const $$splitComponentImporter$1 = () => import("./workspace._workspaceId.code.index-DTziHng0.js");
167919
167952
  const Route$1 = createFileRoute("/workspace/$workspaceId/code/")({
167920
167953
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
167921
167954
  });
167922
- const $$splitComponentImporter = () => import("./workspace._workspaceId.code._-DKgsvYy3.js");
167955
+ const $$splitComponentImporter = () => import("./workspace._workspaceId.code._-DQTK_1av.js");
167923
167956
  const Route2 = createFileRoute("/workspace/$workspaceId/code/$")({
167924
167957
  component: lazyRouteComponent($$splitComponentImporter, "component")
167925
167958
  });
@@ -168049,7 +168082,7 @@ export {
168049
168082
  curveBasis as aN,
168050
168083
  generateId$1 as aO,
168051
168084
  setupGraphViewbox as aP,
168052
- isDark$1 as aQ,
168085
+ isDark as aQ,
168053
168086
  lighten as aR,
168054
168087
  darken as aS,
168055
168088
  commonDb_exports as aT,
@@ -168096,7 +168129,7 @@ export {
168096
168129
  FolderOpen as b5,
168097
168130
  Route$6 as b6,
168098
168131
  useDashboardStore as b7,
168099
- TauriDragRegion as b8,
168132
+ DesktopDragRegion as b8,
168100
168133
  ArrowLeft as b9,
168101
168134
  useQuery as bA,
168102
168135
  DockviewReact as bB,