@band-app/server 0.5.5 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/README.md +2 -2
  2. package/dist/client/assets/DockviewTerminalContainer-Cz9WlWdH.js +2 -0
  3. package/dist/client/assets/{TerminalPanel-9pW_g2Kd.js → TerminalPanel-CFXq1WFm.js} +1 -1
  4. package/dist/client/assets/{_basePickBy-Dkr8WVHx.js → _basePickBy-BlSII9jq.js} +1 -1
  5. package/dist/client/assets/{_baseUniq-B0BP4Sik.js → _baseUniq-LspNqeMx.js} +1 -1
  6. package/dist/client/assets/{arc-C88WtUPJ.js → arc-BHqnoTLh.js} +1 -1
  7. package/dist/client/assets/{architectureDiagram-VXUJARFQ-CyLIdwXX.js → architectureDiagram-VXUJARFQ-DCIibmHk.js} +1 -1
  8. package/dist/client/assets/{blockDiagram-VD42YOAC-GShygeGY.js → blockDiagram-VD42YOAC-Dyw6cz7i.js} +1 -1
  9. package/dist/client/assets/{c4Diagram-YG6GDRKO-BcpX0Aqn.js → c4Diagram-YG6GDRKO-CBhD8_Hh.js} +1 -1
  10. package/dist/client/assets/channel-DyVBSQNn.js +1 -0
  11. package/dist/client/assets/{chunk-4BX2VUAB-IchBHT92.js → chunk-4BX2VUAB-BfoIiC3c.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-CiMhFR8e.js → chunk-55IACEB6-MseixGRc.js} +1 -1
  13. package/dist/client/assets/{chunk-B4BG7PRW-D-8aj6uR.js → chunk-B4BG7PRW-kNN7PAII.js} +1 -1
  14. package/dist/client/assets/{chunk-DI55MBZ5-C13AzM7U.js → chunk-DI55MBZ5-CfSoI0vz.js} +1 -1
  15. package/dist/client/assets/{chunk-FMBD7UC4-B4gYDpvB.js → chunk-FMBD7UC4-F6mPv_S0.js} +1 -1
  16. package/dist/client/assets/{chunk-QN33PNHL-DG8uaz-H.js → chunk-QN33PNHL-BYvpvAhN.js} +1 -1
  17. package/dist/client/assets/{chunk-QZHKN3VN-CUeAC5bF.js → chunk-QZHKN3VN-CAQ7z_Ie.js} +1 -1
  18. package/dist/client/assets/{chunk-TZMSLE5B-Crx06Grw.js → chunk-TZMSLE5B-C-XQ_CRy.js} +1 -1
  19. package/dist/client/assets/classDiagram-2ON5EDUG-B-cHSWlO.js +1 -0
  20. package/dist/client/assets/classDiagram-v2-WZHVMYZB-B-cHSWlO.js +1 -0
  21. package/dist/client/assets/clone-DTHJUKz4.js +1 -0
  22. package/dist/client/assets/{cose-bilkent-S5V4N54A-BjyHTZfo.js → cose-bilkent-S5V4N54A-ngzXR_kx.js} +1 -1
  23. package/dist/client/assets/{dagre-6UL2VRFP-C9LatsFq.js → dagre-6UL2VRFP-BbAzSMAb.js} +1 -1
  24. package/dist/client/assets/{diagram-PSM6KHXK-Bzxy2DxA.js → diagram-PSM6KHXK-D1y4JtW0.js} +1 -1
  25. package/dist/client/assets/{diagram-QEK2KX5R--qsdr1em.js → diagram-QEK2KX5R-BG_iQN5l.js} +1 -1
  26. package/dist/client/assets/{diagram-S2PKOQOG-SLCfnLEL.js → diagram-S2PKOQOG-CNtjaaSX.js} +1 -1
  27. package/dist/client/assets/{erDiagram-Q2GNP2WA-Bqfdi51r.js → erDiagram-Q2GNP2WA-Bo66PPvm.js} +1 -1
  28. package/dist/client/assets/{flowDiagram-NV44I4VS-BxNRRaL6.js → flowDiagram-NV44I4VS-Exg4ftcx.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-JELNMOA3-B3nW9Tee.js → ganttDiagram-JELNMOA3-D6zmdAtV.js} +1 -1
  30. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-CJ5dA5iM.js → gitGraphDiagram-V2S2FVAM-Cu6NAnrE.js} +1 -1
  31. package/dist/client/assets/{graph-Ce0puKsP.js → graph-WQ-pCgIF.js} +1 -1
  32. package/dist/client/assets/{highlighted-body-B3W2YXNL-CENKUGzV.js → highlighted-body-B3W2YXNL-DwzNwzXb.js} +1 -1
  33. package/dist/client/assets/{index-DfwX9IUV.js → index-BBPUst2I.js} +1 -1
  34. package/dist/client/assets/{index-C_z1eCvW.js → index-BCYiMfLp.js} +1 -1
  35. package/dist/client/assets/{index-BSd1jAU9.js → index-B_Cl_jLZ.js} +1 -1
  36. package/dist/client/assets/{index-CosJojrk.js → index-Bk2XF8BE.js} +1 -1
  37. package/dist/client/assets/{index-Dd8shGvN.js → index-Bp5eP514.js} +1 -1
  38. package/dist/client/assets/{index-Cdvev7u6.js → index-Bq_xY4Ph.js} +1 -1
  39. package/dist/client/assets/index-CZ3BA0Cx.js +1 -0
  40. package/dist/client/assets/{index-C01QsgdU.js → index-CrvLihp0.js} +1 -1
  41. package/dist/client/assets/{index-B3ozbkAt.js → index-D4GE4Sw0.js} +1 -1
  42. package/dist/client/assets/{index-D3sAIK6P.js → index-DDT5MV0f.js} +1 -1
  43. package/dist/client/assets/{index-GxKLyCuq.js → index-DIETCrpj.js} +1 -1
  44. package/dist/client/assets/{index-BJDmvnal.js → index-DSACz9Bz.js} +1 -1
  45. package/dist/client/assets/{index-BDCONrW_.js → index-DcZkOXX6.js} +1 -1
  46. package/dist/client/assets/{index-qwbh_ssl.js → index-DijU73Gl.js} +1 -1
  47. package/dist/client/assets/{index-DL2wTzK1.js → index-DrmwayhT.js} +1 -1
  48. package/dist/client/assets/{index-jSH-9g1p.js → index-PbwTEF33.js} +1 -1
  49. package/dist/client/assets/{index-DGV19pgb.js → index-plFoXjgS.js} +1 -1
  50. package/dist/client/assets/{index-SWV7MFMV.js → index-tEjp_PJF.js} +1 -1
  51. package/dist/client/assets/{infoDiagram-HS3SLOUP--q9GXvGW.js → infoDiagram-HS3SLOUP-CgP-ZkOl.js} +1 -1
  52. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-C8V3w1dG.js → journeyDiagram-XKPGCS4Q-BQA_b_yg.js} +1 -1
  53. package/dist/client/assets/{kanban-definition-3W4ZIXB7-BJk0X7tz.js → kanban-definition-3W4ZIXB7-DPOkqRAd.js} +1 -1
  54. package/dist/client/assets/{layout-ChwcG4Xl.js → layout-DeyOgqC6.js} +1 -1
  55. package/dist/client/assets/{linear-BDZmJSE8.js → linear-DGKC-_dh.js} +1 -1
  56. package/dist/client/assets/{main-BJRBUBf7.js → main-BreB9CwG.js} +227 -227
  57. package/dist/client/assets/main-D081MUyS.css +1 -0
  58. package/dist/client/assets/{mindmap-definition-VGOIOE7T-ByMpVnYs.js → mindmap-definition-VGOIOE7T-D33s8vQk.js} +1 -1
  59. package/dist/client/assets/{pieDiagram-ADFJNKIX-CD-lmXbd.js → pieDiagram-ADFJNKIX-DkcUUXhA.js} +1 -1
  60. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-BdOgBPk1.js → quadrantDiagram-AYHSOK5B-Db6ej3fP.js} +1 -1
  61. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-f7DPR7JO.js → requirementDiagram-UZGBJVZJ-CRoYkr69.js} +1 -1
  62. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-bi8QNTNx.js → sankeyDiagram-TZEHDZUN-C5kJHH1U.js} +1 -1
  63. package/dist/client/assets/{sequenceDiagram-WL72ISMW-DvrFWc3k.js → sequenceDiagram-WL72ISMW-Bjl7tEqi.js} +1 -1
  64. package/dist/client/assets/{stateDiagram-FKZM4ZOC-pHRodxiR.js → stateDiagram-FKZM4ZOC-BOHkzYsN.js} +1 -1
  65. package/dist/client/assets/stateDiagram-v2-4FDKWEC3--yckNXlZ.js +1 -0
  66. package/dist/client/assets/{timeline-definition-IT6M3QCI-GvuMpLMJ.js → timeline-definition-IT6M3QCI-BRYv8Zo9.js} +1 -1
  67. package/dist/client/assets/{treemap-GDKQZRPO-1Fkk9zI9.js → treemap-GDKQZRPO-CreIyeFj.js} +1 -1
  68. package/dist/client/assets/{useSessionListContext-CRcZVcHa.js → useSessionListContext-B45AkDTo.js} +1 -1
  69. package/dist/client/assets/{workspace._workspaceId-Cy3AEGLV.js → workspace._workspaceId-DDqIo28l.js} +1 -1
  70. package/dist/client/assets/{workspace._workspaceId.changes-Rwu7P9DU.js → workspace._workspaceId.changes-tNj-aYnb.js} +1 -1
  71. package/dist/client/assets/workspace._workspaceId.code-dlq2gsqz.js +1 -0
  72. package/dist/client/assets/{workspace._workspaceId.code._-BJQkX_UC.js → workspace._workspaceId.code._-CZQLyXwR.js} +1 -1
  73. package/dist/client/assets/{workspace._workspaceId.code.index-BRqZeE-M.js → workspace._workspaceId.code.index-BZ26pRQu.js} +1 -1
  74. package/dist/client/assets/{workspace._workspaceId.index-D_CsfVyR.js → workspace._workspaceId.index-D_hEywpO.js} +1 -1
  75. package/dist/client/assets/{workspace._workspaceId.terminal-DfJiaUra.js → workspace._workspaceId.terminal-D_kBTm-z.js} +2 -2
  76. package/dist/client/assets/{xychartDiagram-PRI3JC2R-CQ-W21MD.js → xychartDiagram-PRI3JC2R-Cn2h5HVO.js} +1 -1
  77. package/dist/server/assets/{DockviewTerminalContainer-nurSvNMN.js → DockviewTerminalContainer-DSwflA0D.js} +3 -3
  78. package/dist/server/assets/{TerminalPanel-Cf-9H8Lr.js → TerminalPanel-D2eWHeSY.js} +2 -2
  79. package/dist/server/assets/{_basePickBy-D3FmqT7A.js → _basePickBy-C6PzK77c.js} +2 -2
  80. package/dist/server/assets/{_baseUniq-CZLL_KGQ.js → _baseUniq-DiQVR768.js} +1 -1
  81. package/dist/server/assets/{_tanstack-start-manifest_v-DcXFd6TS.js → _tanstack-start-manifest_v-CsSFK95L.js} +1 -1
  82. package/dist/server/assets/{arc-B-ehAOzx.js → arc-gx_AD1U3.js} +1 -1
  83. package/dist/server/assets/{architecture-7HQA4BMR-Bm2CNNZn.js → architecture-7HQA4BMR-BGd5uu6b.js} +6 -6
  84. package/dist/server/assets/{architectureDiagram-VXUJARFQ-CxaRzb-g.js → architectureDiagram-VXUJARFQ-C_xYzE4-.js} +6 -6
  85. package/dist/server/assets/{blockDiagram-VD42YOAC-CsN3W5TR.js → blockDiagram-VD42YOAC-DpPRXIow.js} +6 -6
  86. package/dist/server/assets/{c4Diagram-YG6GDRKO-C2v52EXK.js → c4Diagram-YG6GDRKO-CAy_xf6J.js} +2 -2
  87. package/dist/server/assets/{channel-C3XN_tlw.js → channel-6B-t4Soa.js} +1 -1
  88. package/dist/server/assets/{chunk-4BX2VUAB-BRZhlA3M.js → chunk-4BX2VUAB-B42FHAWg.js} +1 -1
  89. package/dist/server/assets/{chunk-55IACEB6-CvRWSP7_.js → chunk-55IACEB6-MqdTOSaC.js} +1 -1
  90. package/dist/server/assets/{chunk-B4BG7PRW-CtnW_06V.js → chunk-B4BG7PRW-CTB3bXV5.js} +4 -4
  91. package/dist/server/assets/{chunk-DI55MBZ5-BQw22O7H.js → chunk-DI55MBZ5-BQenTOqK.js} +3 -3
  92. package/dist/server/assets/{chunk-FMBD7UC4-GsUqEYsC.js → chunk-FMBD7UC4-BZoha8Qg.js} +1 -1
  93. package/dist/server/assets/{chunk-QN33PNHL-Cbg19vtg.js → chunk-QN33PNHL-qKkMgf6f.js} +1 -1
  94. package/dist/server/assets/{chunk-QZHKN3VN-BWszKJyV.js → chunk-QZHKN3VN-VrtEAJzx.js} +1 -1
  95. package/dist/server/assets/{chunk-TZMSLE5B-DQrHctmP.js → chunk-TZMSLE5B-DSYbndjw.js} +1 -1
  96. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-CbsNfDCL.js → classDiagram-2ON5EDUG-i_tSGvo3.js} +5 -5
  97. package/dist/server/assets/{classDiagram-2ON5EDUG-CbsNfDCL.js → classDiagram-v2-WZHVMYZB-i_tSGvo3.js} +5 -5
  98. package/dist/server/assets/{clone-x7_sin8C.js → clone-Cxt50u0y.js} +1 -1
  99. package/dist/server/assets/{cose-bilkent-S5V4N54A-BOuoNr7N.js → cose-bilkent-S5V4N54A-CxYiUQkd.js} +1 -1
  100. package/dist/server/assets/{dagre-6UL2VRFP-BEGPY_P8.js → dagre-6UL2VRFP-Df3ty00_.js} +6 -6
  101. package/dist/server/assets/{diagram-PSM6KHXK-DdLXbkDH.js → diagram-PSM6KHXK-Cfylqj1t.js} +7 -7
  102. package/dist/server/assets/{diagram-QEK2KX5R-Ywb8tTSL.js → diagram-QEK2KX5R-BOdeY2WM.js} +6 -6
  103. package/dist/server/assets/{diagram-S2PKOQOG-Bk6j9I_3.js → diagram-S2PKOQOG-DjK_qPmk.js} +6 -6
  104. package/dist/server/assets/{erDiagram-Q2GNP2WA-CS94DyiJ.js → erDiagram-Q2GNP2WA-CDZKFxtV.js} +4 -4
  105. package/dist/server/assets/{flowDiagram-NV44I4VS-DGePuZ_D.js → flowDiagram-NV44I4VS-BkuGyDjs.js} +5 -5
  106. package/dist/server/assets/{ganttDiagram-JELNMOA3-nyPfcgRT.js → ganttDiagram-JELNMOA3-BivmZcb7.js} +2 -2
  107. package/dist/server/assets/{gitGraph-G5XIXVHT-CKTPOKTu.js → gitGraph-G5XIXVHT-CC7wmTrx.js} +6 -6
  108. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-BygjesE-.js → gitGraphDiagram-V2S2FVAM-CQIdCHfs.js} +7 -7
  109. package/dist/server/assets/{graph-B6TDpsg4.js → graph-C8gb_m5f.js} +2 -2
  110. package/dist/server/assets/{highlighted-body-B3W2YXNL-CULjZ_nJ.js → highlighted-body-B3W2YXNL-DrUth0S5.js} +1 -1
  111. package/dist/server/assets/{index-BCMFgTLH.js → index-BjGAzo0D.js} +3 -3
  112. package/dist/server/assets/{index-DYGOZ3mj.js → index-BmO8Ehgw.js} +4 -4
  113. package/dist/server/assets/{index-Can-bHgo.js → index-Bmsr-fBO.js} +2 -2
  114. package/dist/server/assets/{index-BlnGJ9is.js → index-BnH9YiLC.js} +2 -2
  115. package/dist/server/assets/{index-eLPxFa7w.js → index-C4P3mulg.js} +5 -5
  116. package/dist/server/assets/{index-DCJj-J2w.js → index-C5Oqi8tP.js} +2 -2
  117. package/dist/server/assets/{index-Bx2Tna2y.js → index-CCjk4zsA.js} +2 -2
  118. package/dist/server/assets/{index-BRsnuD-O.js → index-CKHwQloa.js} +2 -2
  119. package/dist/server/assets/{index-Bli_q03X.js → index-CT4xIbKa.js} +2 -2
  120. package/dist/server/assets/{index-5SwWQ6oe.js → index-CcD8oUXa.js} +2 -2
  121. package/dist/server/assets/{index-0oeRMDH_.js → index-CitKRHQd.js} +3 -3
  122. package/dist/server/assets/{index-DuWXmjWc.js → index-CmrSb5ez.js} +1 -1
  123. package/dist/server/assets/{index-C1-EaJTv.js → index-DKxaFXTI.js} +2 -2
  124. package/dist/server/assets/{index-D4VsXH_e.js → index-DOYPjTos.js} +2 -2
  125. package/dist/server/assets/{index-DMcpsIUc.js → index-DhHjumm2.js} +5 -5
  126. package/dist/server/assets/{index-CnQ4qso3.js → index-Dn5q9HW4.js} +2 -2
  127. package/dist/server/assets/{index-DJDlsaKi.js → index-F50ZRwue.js} +2 -2
  128. package/dist/server/assets/{index-CsE88Ld8.js → index-qd9Me3nB.js} +2 -2
  129. package/dist/server/assets/{info-VBDWY6EO-B-rB5BtI.js → info-VBDWY6EO-DyGhnNke.js} +6 -6
  130. package/dist/server/assets/{infoDiagram-HS3SLOUP-D83vTisF.js → infoDiagram-HS3SLOUP-Ba9kta0e.js} +5 -5
  131. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-PbUYIdib.js → journeyDiagram-XKPGCS4Q-DpIqL8B7.js} +4 -4
  132. package/dist/server/assets/{kanban-definition-3W4ZIXB7-BQSc_qmP.js → kanban-definition-3W4ZIXB7-DX4-cLBH.js} +2 -2
  133. package/dist/server/assets/{layout-DXYeijc_.js → layout-C_dXxi6_.js} +4 -4
  134. package/dist/server/assets/{linear-Dwrm9Gnq.js → linear-BEU5iS3c.js} +1 -1
  135. package/dist/server/assets/{mermaid-3ZIDBTTL-BnVYO1pJ.js → mermaid-3ZIDBTTL-dDSIn_hx.js} +1 -1
  136. package/dist/server/assets/{mermaid-parser.core-CUfP0S_P.js → mermaid-parser.core-BTu6on9w.js} +11 -11
  137. package/dist/server/assets/{mindmap-definition-VGOIOE7T-BdjAKwAK.js → mindmap-definition-VGOIOE7T-EvNNmlYT.js} +3 -3
  138. package/dist/server/assets/{packet-DYOGHKS2-d7SiXxLo.js → packet-DYOGHKS2-BSKBycIf.js} +6 -6
  139. package/dist/server/assets/{pie-VRWISCQL-euknErR4.js → pie-VRWISCQL-BjrUlgyt.js} +6 -6
  140. package/dist/server/assets/{pieDiagram-ADFJNKIX-Bl150d6W.js → pieDiagram-ADFJNKIX-YhPnTxVL.js} +7 -7
  141. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-ClIy1n9L.js → quadrantDiagram-AYHSOK5B-C_QHaemj.js} +2 -2
  142. package/dist/server/assets/{radar-ZZBFDIW7-hsbqqEeW.js → radar-ZZBFDIW7-CO0WzTp4.js} +6 -6
  143. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-B87j_suL.js → requirementDiagram-UZGBJVZJ-BSt0bNXX.js} +3 -3
  144. package/dist/server/assets/{router-DMoul9bL.js → router-Ccw5_Sy3.js} +900 -753
  145. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-Bq18JLF9.js → sankeyDiagram-TZEHDZUN-C7SL1Bn9.js} +1 -1
  146. package/dist/server/assets/{sequenceDiagram-WL72ISMW-DziQuu14.js → sequenceDiagram-WL72ISMW-DdfWdBp2.js} +3 -3
  147. package/dist/server/assets/{stateDiagram-FKZM4ZOC-7wEsr4R_.js → stateDiagram-FKZM4ZOC-BD7Oj-hn.js} +8 -8
  148. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-D2VjwPAa.js → stateDiagram-v2-4FDKWEC3-e4PXqg0B.js} +4 -4
  149. package/dist/server/assets/{timeline-definition-IT6M3QCI--uelCCOi.js → timeline-definition-IT6M3QCI-f7G2avSH.js} +2 -2
  150. package/dist/server/assets/{treemap-GDKQZRPO-DVHxmTc8.js → treemap-GDKQZRPO-CndQ71as.js} +6 -6
  151. package/dist/server/assets/{workspace._workspaceId-Bs8UzdnH.js → workspace._workspaceId-CR4TOS5A.js} +2 -2
  152. package/dist/server/assets/{workspace._workspaceId.changes-BWu2NrZR.js → workspace._workspaceId.changes-B7PK-I72.js} +1 -1
  153. package/dist/server/assets/{workspace._workspaceId.code._-DKgsvYy3.js → workspace._workspaceId.code._-CA9dP_-G.js} +1 -1
  154. package/dist/server/assets/{workspace._workspaceId.code.index-D9xieBbz.js → workspace._workspaceId.code.index-CLRAQ6Pf.js} +1 -1
  155. package/dist/server/assets/{workspace._workspaceId.index-CM2nPNp3.js → workspace._workspaceId.index-alkhfxK3.js} +1 -1
  156. package/dist/server/assets/{workspace._workspaceId.terminal-ByrTEXV_.js → workspace._workspaceId.terminal-BvpiNe_s.js} +2 -2
  157. package/dist/server/assets/{xychartDiagram-PRI3JC2R-C3ztrSUC.js → xychartDiagram-PRI3JC2R-CAkP7cKw.js} +2 -2
  158. package/dist/server/server.js +2 -2
  159. package/dist/start-server.mjs +501 -225
  160. package/package.json +5 -7
  161. package/dist/client/assets/DockviewTerminalContainer-DX8OFKYR.js +0 -2
  162. package/dist/client/assets/channel-COxuXp7F.js +0 -1
  163. package/dist/client/assets/classDiagram-2ON5EDUG-CtxJr2zo.js +0 -1
  164. package/dist/client/assets/classDiagram-v2-WZHVMYZB-CtxJr2zo.js +0 -1
  165. package/dist/client/assets/clone-Cud65zOY.js +0 -1
  166. package/dist/client/assets/core-mPlcS5K-.js +0 -1
  167. package/dist/client/assets/event-DRyjiKX_.js +0 -1
  168. package/dist/client/assets/index-BkW3q3LQ.js +0 -1
  169. package/dist/client/assets/index-BsMHcPzb.js +0 -1
  170. package/dist/client/assets/main-BnrSCdeV.css +0 -1
  171. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BUgsJX1c.js +0 -1
  172. package/dist/client/assets/window-BFoF6nYm.js +0 -1
  173. package/dist/client/assets/workspace._workspaceId.code-zGA3uY7G.js +0 -1
  174. package/dist/server/assets/core-dG4_vufa.js +0 -45
  175. package/dist/server/assets/event-2oMkw_LQ.js +0 -63
  176. package/dist/server/assets/index-jMSXp5h7.js +0 -10
  177. package/dist/server/assets/window-Qr88gZCE.js +0 -2005
@@ -1093,44 +1093,44 @@ const createLucideIcon = (iconName, iconNode) => {
1093
1093
  Component.displayName = toPascalCase(iconName);
1094
1094
  return Component;
1095
1095
  };
1096
- const __iconNode$1j = [
1096
+ const __iconNode$1k = [
1097
1097
  ["path", { d: "M12 17V3", key: "1cwfxf" }],
1098
1098
  ["path", { d: "m6 11 6 6 6-6", key: "12ii2o" }],
1099
1099
  ["path", { d: "M19 21H5", key: "150jfl" }]
1100
1100
  ];
1101
- const ArrowDownToLine = createLucideIcon("arrow-down-to-line", __iconNode$1j);
1102
- const __iconNode$1i = [
1101
+ const ArrowDownToLine = createLucideIcon("arrow-down-to-line", __iconNode$1k);
1102
+ const __iconNode$1j = [
1103
1103
  ["path", { d: "M12 5v14", key: "s699le" }],
1104
1104
  ["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
1105
1105
  ];
1106
- const ArrowDown = createLucideIcon("arrow-down", __iconNode$1i);
1107
- const __iconNode$1h = [
1106
+ const ArrowDown = createLucideIcon("arrow-down", __iconNode$1j);
1107
+ const __iconNode$1i = [
1108
1108
  ["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
1109
1109
  ["path", { d: "M19 12H5", key: "x3x0zl" }]
1110
1110
  ];
1111
- const ArrowLeft = createLucideIcon("arrow-left", __iconNode$1h);
1112
- const __iconNode$1g = [
1111
+ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$1i);
1112
+ const __iconNode$1h = [
1113
1113
  ["path", { d: "M5 12h14", key: "1ays0h" }],
1114
1114
  ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
1115
1115
  ];
1116
- const ArrowRight = createLucideIcon("arrow-right", __iconNode$1g);
1117
- const __iconNode$1f = [
1116
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$1h);
1117
+ const __iconNode$1g = [
1118
1118
  ["path", { d: "m18 9-6-6-6 6", key: "kcunyi" }],
1119
1119
  ["path", { d: "M12 3v14", key: "7cf3v8" }],
1120
1120
  ["path", { d: "M5 21h14", key: "11awu3" }]
1121
1121
  ];
1122
- const ArrowUpFromLine = createLucideIcon("arrow-up-from-line", __iconNode$1f);
1123
- const __iconNode$1e = [
1122
+ const ArrowUpFromLine = createLucideIcon("arrow-up-from-line", __iconNode$1g);
1123
+ const __iconNode$1f = [
1124
1124
  ["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
1125
1125
  ["path", { d: "M12 19V5", key: "x0mq9r" }]
1126
1126
  ];
1127
- const ArrowUp = createLucideIcon("arrow-up", __iconNode$1e);
1128
- const __iconNode$1d = [
1127
+ const ArrowUp = createLucideIcon("arrow-up", __iconNode$1f);
1128
+ const __iconNode$1e = [
1129
1129
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1130
1130
  ["path", { d: "M4.929 4.929 19.07 19.071", key: "196cmz" }]
1131
1131
  ];
1132
- const Ban = createLucideIcon("ban", __iconNode$1d);
1133
- const __iconNode$1c = [
1132
+ const Ban = createLucideIcon("ban", __iconNode$1e);
1133
+ const __iconNode$1d = [
1134
1134
  ["path", { d: "M12 8V4H8", key: "hb8ula" }],
1135
1135
  ["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }],
1136
1136
  ["path", { d: "M2 14h2", key: "vft8re" }],
@@ -1138,8 +1138,8 @@ const __iconNode$1c = [
1138
1138
  ["path", { d: "M15 13v2", key: "1xurst" }],
1139
1139
  ["path", { d: "M9 13v2", key: "rq6x2g" }]
1140
1140
  ];
1141
- const Bot = createLucideIcon("bot", __iconNode$1c);
1142
- const __iconNode$1b = [
1141
+ const Bot = createLucideIcon("bot", __iconNode$1d);
1142
+ const __iconNode$1c = [
1143
1143
  [
1144
1144
  "path",
1145
1145
  { d: "M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1", key: "ezmyqa" }
@@ -1152,54 +1152,54 @@ const __iconNode$1b = [
1152
1152
  }
1153
1153
  ]
1154
1154
  ];
1155
- const Braces = createLucideIcon("braces", __iconNode$1b);
1156
- const __iconNode$1a = [
1155
+ const Braces = createLucideIcon("braces", __iconNode$1c);
1156
+ const __iconNode$1b = [
1157
1157
  ["path", { d: "m2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16", key: "d5nyq2" }],
1158
1158
  ["path", { d: "M22 9v7", key: "pvm9v3" }],
1159
1159
  ["path", { d: "M3.304 13h6.392", key: "1q3zxz" }],
1160
1160
  ["circle", { cx: "18.5", cy: "12.5", r: "3.5", key: "z97x68" }]
1161
1161
  ];
1162
- const CaseSensitive = createLucideIcon("case-sensitive", __iconNode$1a);
1163
- const __iconNode$19 = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
1164
- const Check = createLucideIcon("check", __iconNode$19);
1165
- const __iconNode$18 = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1166
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$18);
1167
- const __iconNode$17 = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
1168
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$17);
1169
- const __iconNode$16 = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1170
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$16);
1171
- const __iconNode$15 = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
1172
- const ChevronUp = createLucideIcon("chevron-up", __iconNode$15);
1173
- const __iconNode$14 = [
1162
+ const CaseSensitive = createLucideIcon("case-sensitive", __iconNode$1b);
1163
+ const __iconNode$1a = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
1164
+ const Check = createLucideIcon("check", __iconNode$1a);
1165
+ const __iconNode$19 = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1166
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$19);
1167
+ const __iconNode$18 = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
1168
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$18);
1169
+ const __iconNode$17 = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1170
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$17);
1171
+ const __iconNode$16 = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
1172
+ const ChevronUp = createLucideIcon("chevron-up", __iconNode$16);
1173
+ const __iconNode$15 = [
1174
1174
  ["path", { d: "m7 20 5-5 5 5", key: "13a0gw" }],
1175
1175
  ["path", { d: "m7 4 5 5 5-5", key: "1kwcof" }]
1176
1176
  ];
1177
- const ChevronsDownUp = createLucideIcon("chevrons-down-up", __iconNode$14);
1178
- const __iconNode$13 = [
1177
+ const ChevronsDownUp = createLucideIcon("chevrons-down-up", __iconNode$15);
1178
+ const __iconNode$14 = [
1179
1179
  ["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
1180
1180
  ["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
1181
1181
  ];
1182
- const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$13);
1183
- const __iconNode$12 = [
1182
+ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$14);
1183
+ const __iconNode$13 = [
1184
1184
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1185
1185
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
1186
1186
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
1187
1187
  ];
1188
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$12);
1189
- const __iconNode$11 = [
1188
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$13);
1189
+ const __iconNode$12 = [
1190
1190
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1191
1191
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
1192
1192
  ];
1193
- const CircleCheck = createLucideIcon("circle-check", __iconNode$11);
1194
- const __iconNode$10 = [
1193
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$12);
1194
+ const __iconNode$11 = [
1195
1195
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1196
1196
  ["path", { d: "m15 9-6 6", key: "1uzhvr" }],
1197
1197
  ["path", { d: "m9 9 6 6", key: "z0biqf" }]
1198
1198
  ];
1199
- const CircleX = createLucideIcon("circle-x", __iconNode$10);
1200
- const __iconNode$$ = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
1201
- const Circle = createLucideIcon("circle", __iconNode$$);
1202
- const __iconNode$_ = [
1199
+ const CircleX = createLucideIcon("circle-x", __iconNode$11);
1200
+ const __iconNode$10 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
1201
+ const Circle = createLucideIcon("circle", __iconNode$10);
1202
+ const __iconNode$$ = [
1203
1203
  ["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
1204
1204
  [
1205
1205
  "path",
@@ -1209,52 +1209,58 @@ const __iconNode$_ = [
1209
1209
  }
1210
1210
  ]
1211
1211
  ];
1212
- const Clipboard = createLucideIcon("clipboard", __iconNode$_);
1213
- const __iconNode$Z = [
1212
+ const Clipboard = createLucideIcon("clipboard", __iconNode$$);
1213
+ const __iconNode$_ = [
1214
1214
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1215
1215
  ["path", { d: "M12 6v6l4 2", key: "mmk7yg" }]
1216
1216
  ];
1217
- const Clock = createLucideIcon("clock", __iconNode$Z);
1218
- const __iconNode$Y = [
1217
+ const Clock = createLucideIcon("clock", __iconNode$_);
1218
+ const __iconNode$Z = [
1219
1219
  ["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
1220
1220
  ["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
1221
1221
  ["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
1222
1222
  ];
1223
- const CodeXml = createLucideIcon("code-xml", __iconNode$Y);
1224
- const __iconNode$X = [
1223
+ const CodeXml = createLucideIcon("code-xml", __iconNode$Z);
1224
+ const __iconNode$Y = [
1225
1225
  ["path", { d: "m16 18 6-6-6-6", key: "eg8j8" }],
1226
1226
  ["path", { d: "m8 6-6 6 6 6", key: "ppft3o" }]
1227
1227
  ];
1228
- const Code = createLucideIcon("code", __iconNode$X);
1229
- const __iconNode$W = [
1228
+ const Code = createLucideIcon("code", __iconNode$Y);
1229
+ const __iconNode$X = [
1230
1230
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1231
1231
  ["path", { d: "M12 3v18", key: "108xh3" }]
1232
1232
  ];
1233
- const Columns2 = createLucideIcon("columns-2", __iconNode$W);
1234
- const __iconNode$V = [
1233
+ const Columns2 = createLucideIcon("columns-2", __iconNode$X);
1234
+ const __iconNode$W = [
1235
1235
  [
1236
1236
  "path",
1237
1237
  { d: "M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3", key: "11bfej" }
1238
1238
  ]
1239
1239
  ];
1240
- const Command$1 = createLucideIcon("command", __iconNode$V);
1241
- const __iconNode$U = [
1240
+ const Command$1 = createLucideIcon("command", __iconNode$W);
1241
+ const __iconNode$V = [
1242
1242
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
1243
1243
  ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
1244
1244
  ];
1245
- const Copy = createLucideIcon("copy", __iconNode$U);
1246
- const __iconNode$T = [
1245
+ const Copy = createLucideIcon("copy", __iconNode$V);
1246
+ const __iconNode$U = [
1247
1247
  ["ellipse", { cx: "12", cy: "5", rx: "9", ry: "3", key: "msslwz" }],
1248
1248
  ["path", { d: "M3 5V19A9 3 0 0 0 21 19V5", key: "1wlel7" }],
1249
1249
  ["path", { d: "M3 12A9 3 0 0 0 21 12", key: "mv7ke4" }]
1250
1250
  ];
1251
- const Database = createLucideIcon("database", __iconNode$T);
1252
- const __iconNode$S = [
1251
+ const Database = createLucideIcon("database", __iconNode$U);
1252
+ const __iconNode$T = [
1253
1253
  ["path", { d: "M12 15V3", key: "m9g1x1" }],
1254
1254
  ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
1255
1255
  ["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
1256
1256
  ];
1257
- const Download = createLucideIcon("download", __iconNode$S);
1257
+ const Download = createLucideIcon("download", __iconNode$T);
1258
+ const __iconNode$S = [
1259
+ ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
1260
+ ["circle", { cx: "12", cy: "5", r: "1", key: "gxeob9" }],
1261
+ ["circle", { cx: "12", cy: "19", r: "1", key: "lyex9k" }]
1262
+ ];
1263
+ const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$S);
1258
1264
  const __iconNode$R = [
1259
1265
  ["path", { d: "m15 15 6 6", key: "1s409w" }],
1260
1266
  ["path", { d: "m15 9 6-6", key: "ko1vev" }],
@@ -7466,7 +7472,7 @@ var CheckboxItem = MenuCheckboxItem;
7466
7472
  var RadioGroup = MenuRadioGroup;
7467
7473
  var RadioItem = MenuRadioItem;
7468
7474
  var ItemIndicator$1 = MenuItemIndicator;
7469
- var Separator = MenuSeparator;
7475
+ var Separator$1 = MenuSeparator;
7470
7476
  var Arrow2$1 = MenuArrow;
7471
7477
  var Sub = MenuSub;
7472
7478
  var SubTrigger = MenuSubTrigger;
@@ -7672,7 +7678,7 @@ var SEPARATOR_NAME$2 = "ContextMenuSeparator";
7672
7678
  var ContextMenuSeparator$1 = reactExports.forwardRef((props, forwardedRef) => {
7673
7679
  const { __scopeContextMenu, ...separatorProps } = props;
7674
7680
  const menuScope = useMenuScope$1(__scopeContextMenu);
7675
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });
7681
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Separator$1, { ...menuScope, ...separatorProps, ref: forwardedRef });
7676
7682
  });
7677
7683
  ContextMenuSeparator$1.displayName = SEPARATOR_NAME$2;
7678
7684
  var ARROW_NAME$4 = "ContextMenuArrow";
@@ -7926,7 +7932,7 @@ var SEPARATOR_NAME$1 = "DropdownMenuSeparator";
7926
7932
  var DropdownMenuSeparator$1 = reactExports.forwardRef((props, forwardedRef) => {
7927
7933
  const { __scopeDropdownMenu, ...separatorProps } = props;
7928
7934
  const menuScope = useMenuScope(__scopeDropdownMenu);
7929
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });
7935
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Separator$1, { ...menuScope, ...separatorProps, ref: forwardedRef });
7930
7936
  });
7931
7937
  DropdownMenuSeparator$1.displayName = SEPARATOR_NAME$1;
7932
7938
  var ARROW_NAME$3 = "DropdownMenuArrow";
@@ -10003,13 +10009,13 @@ var SelectScrollButtonImpl = reactExports.forwardRef((props, forwardedRef) => {
10003
10009
  );
10004
10010
  });
10005
10011
  var SEPARATOR_NAME = "SelectSeparator";
10006
- var SelectSeparator = reactExports.forwardRef(
10012
+ var SelectSeparator$1 = reactExports.forwardRef(
10007
10013
  (props, forwardedRef) => {
10008
10014
  const { __scopeSelect, ...separatorProps } = props;
10009
10015
  return /* @__PURE__ */ jsxRuntimeExports.jsx(Primitive.div, { "aria-hidden": true, ...separatorProps, ref: forwardedRef });
10010
10016
  }
10011
10017
  );
10012
- SelectSeparator.displayName = SEPARATOR_NAME;
10018
+ SelectSeparator$1.displayName = SEPARATOR_NAME;
10013
10019
  var ARROW_NAME$1 = "SelectArrow";
10014
10020
  var SelectArrow = reactExports.forwardRef(
10015
10021
  (props, forwardedRef) => {
@@ -10107,6 +10113,7 @@ var Viewport$1 = SelectViewport;
10107
10113
  var Item = SelectItem$1;
10108
10114
  var ItemText = SelectItemText;
10109
10115
  var ItemIndicator = SelectItemIndicator;
10116
+ var Separator = SelectSeparator$1;
10110
10117
  var SWITCH_NAME = "Switch";
10111
10118
  var [createSwitchContext] = createContextScope(SWITCH_NAME);
10112
10119
  var [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);
@@ -14053,7 +14060,7 @@ const buttonVariants = cva(
14053
14060
  variant: {
14054
14061
  default: "bg-primary text-primary-foreground hover:bg-primary/90",
14055
14062
  destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
14056
- outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
14063
+ outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/60 dark:hover:bg-input/80",
14057
14064
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
14058
14065
  ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
14059
14066
  link: "text-primary underline-offset-4 hover:underline"
@@ -14118,7 +14125,7 @@ function Input({ className, type: type2, ...props }) {
14118
14125
  spellCheck: false,
14119
14126
  "data-slot": "input",
14120
14127
  className: cn$2(
14121
- "h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1.5 text-sm shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 dark:bg-input/30",
14128
+ "h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1.5 text-sm shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 dark:bg-input/60",
14122
14129
  "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
14123
14130
  "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
14124
14131
  className
@@ -15046,7 +15053,7 @@ function SelectTrigger({
15046
15053
  {
15047
15054
  "data-slot": "select-trigger",
15048
15055
  className: cn$2(
15049
- "flex h-9 w-full items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs outline-none transition-[color,box-shadow] placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:bg-input/30 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
15056
+ "flex h-9 w-full items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs outline-none transition-[color,box-shadow] placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:bg-input/60 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
15050
15057
  className
15051
15058
  ),
15052
15059
  ...props,
@@ -15068,7 +15075,10 @@ function SelectContent({
15068
15075
  {
15069
15076
  "data-slot": "select-content",
15070
15077
  className: cn$2(
15071
- "relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
15078
+ // Mirror DropdownMenuContent so dropdowns and selects render
15079
+ // identically (popover surface, explicit border-border so the
15080
+ // outline doesn't fall back to currentColor).
15081
+ "relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
15072
15082
  position2 === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
15073
15083
  className
15074
15084
  ),
@@ -15097,7 +15107,10 @@ function SelectItem({
15097
15107
  {
15098
15108
  "data-slot": "select-item",
15099
15109
  className: cn$2(
15100
- "relative flex w-full cursor-pointer items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
15110
+ // Mirror DropdownMenuItem padding/outline/icon styling so select
15111
+ // items render identically to menu items. Extra right padding leaves
15112
+ // room for the absolutely-positioned check indicator.
15113
+ "relative flex cursor-pointer items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
15101
15114
  className
15102
15115
  ),
15103
15116
  ...props,
@@ -15108,6 +15121,19 @@ function SelectItem({
15108
15121
  }
15109
15122
  );
15110
15123
  }
15124
+ function SelectSeparator({
15125
+ className,
15126
+ ...props
15127
+ }) {
15128
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
15129
+ Separator,
15130
+ {
15131
+ "data-slot": "select-separator",
15132
+ className: cn$2("-mx-1 my-1 h-px bg-border", className),
15133
+ ...props
15134
+ }
15135
+ );
15136
+ }
15111
15137
  function Spinner({ className, ...props }) {
15112
15138
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
15113
15139
  "svg",
@@ -40420,53 +40446,53 @@ async function loadLanguage(lang) {
40420
40446
  try {
40421
40447
  switch (lang) {
40422
40448
  case "javascript":
40423
- return import("./index-CsE88Ld8.js").then((m2) => m2.javascript());
40449
+ return import("./index-qd9Me3nB.js").then((m2) => m2.javascript());
40424
40450
  case "jsx":
40425
- return import("./index-CsE88Ld8.js").then((m2) => m2.javascript({ jsx: true }));
40451
+ return import("./index-qd9Me3nB.js").then((m2) => m2.javascript({ jsx: true }));
40426
40452
  case "typescript":
40427
- return import("./index-CsE88Ld8.js").then(
40453
+ return import("./index-qd9Me3nB.js").then(
40428
40454
  (m2) => m2.javascript({ typescript: true })
40429
40455
  );
40430
40456
  case "tsx":
40431
- return import("./index-CsE88Ld8.js").then(
40457
+ return import("./index-qd9Me3nB.js").then(
40432
40458
  (m2) => m2.javascript({ jsx: true, typescript: true })
40433
40459
  );
40434
40460
  case "python":
40435
- return import("./index-Can-bHgo.js").then((m2) => m2.python());
40461
+ return import("./index-Bmsr-fBO.js").then((m2) => m2.python());
40436
40462
  case "html":
40437
- return import("./index-DYGOZ3mj.js").then((m2) => m2.html());
40463
+ return import("./index-BmO8Ehgw.js").then((m2) => m2.html());
40438
40464
  case "css":
40439
- return import("./index-BlnGJ9is.js").then((m2) => m2.css());
40465
+ return import("./index-BnH9YiLC.js").then((m2) => m2.css());
40440
40466
  case "scss":
40441
40467
  case "sass":
40442
- return import("./index-BCMFgTLH.js").then((m2) => m2.sass());
40468
+ return import("./index-BjGAzo0D.js").then((m2) => m2.sass());
40443
40469
  case "less":
40444
- return import("./index-0oeRMDH_.js").then((m2) => m2.less());
40470
+ return import("./index-CitKRHQd.js").then((m2) => m2.less());
40445
40471
  case "json":
40446
40472
  case "jsonc":
40447
- return import("./index-5SwWQ6oe.js").then((m2) => m2.json());
40473
+ return import("./index-CcD8oUXa.js").then((m2) => m2.json());
40448
40474
  case "markdown":
40449
40475
  case "mdx":
40450
- return import("./index-eLPxFa7w.js").then((m2) => m2.markdown());
40476
+ return import("./index-C4P3mulg.js").then((m2) => m2.markdown());
40451
40477
  case "xml":
40452
- return import("./index-DCJj-J2w.js").then((m2) => m2.xml());
40478
+ return import("./index-C5Oqi8tP.js").then((m2) => m2.xml());
40453
40479
  case "yaml":
40454
- return import("./index-Bli_q03X.js").then((m2) => m2.yaml());
40480
+ return import("./index-CT4xIbKa.js").then((m2) => m2.yaml());
40455
40481
  case "sql":
40456
- return import("./index-DJDlsaKi.js").then((m2) => m2.sql());
40482
+ return import("./index-F50ZRwue.js").then((m2) => m2.sql());
40457
40483
  case "rust":
40458
- return import("./index-D4VsXH_e.js").then((m2) => m2.rust());
40484
+ return import("./index-DOYPjTos.js").then((m2) => m2.rust());
40459
40485
  case "go":
40460
- return import("./index-BRsnuD-O.js").then((m2) => m2.go());
40486
+ return import("./index-CKHwQloa.js").then((m2) => m2.go());
40461
40487
  case "java":
40462
- return import("./index-Bx2Tna2y.js").then((m2) => m2.java());
40488
+ return import("./index-CCjk4zsA.js").then((m2) => m2.java());
40463
40489
  case "kotlin":
40464
- return import("./index-Bx2Tna2y.js").then((m2) => m2.java());
40490
+ return import("./index-CCjk4zsA.js").then((m2) => m2.java());
40465
40491
  case "c":
40466
40492
  case "cpp":
40467
- return import("./index-C1-EaJTv.js").then((m2) => m2.cpp());
40493
+ return import("./index-DKxaFXTI.js").then((m2) => m2.cpp());
40468
40494
  case "php":
40469
- return import("./index-DMcpsIUc.js").then((m2) => m2.php());
40495
+ return import("./index-DhHjumm2.js").then((m2) => m2.php());
40470
40496
  // Legacy modes via StreamLanguage
40471
40497
  case "bash":
40472
40498
  case "fish":
@@ -46283,7 +46309,7 @@ function DroppableLabelHeader({ labelId, label }) {
46283
46309
  "div",
46284
46310
  {
46285
46311
  ref: setNodeRef,
46286
- className: `flex items-center gap-2 px-3 py-1.5 mb-0.5 transition-colors ${isOver ? "bg-primary/20" : "bg-accent"}`,
46312
+ className: `flex h-9 items-center gap-2 px-3 mb-0.5 transition-colors ${isOver ? "bg-primary/20" : "bg-accent"}`,
46287
46313
  children: [
46288
46314
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "size-2.5 rounded-full shrink-0", style: { backgroundColor: label.color } }),
46289
46315
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-semibold text-foreground/80", children: label.name })
@@ -46297,7 +46323,7 @@ function DroppableUnlabeledHeader() {
46297
46323
  "div",
46298
46324
  {
46299
46325
  ref: setNodeRef,
46300
- className: `flex items-center gap-2 px-3 py-1.5 mb-0.5 transition-colors ${isOver ? "bg-primary/20" : "bg-accent"}`,
46326
+ className: `flex h-9 items-center gap-2 px-3 mb-0.5 transition-colors ${isOver ? "bg-primary/20" : "bg-accent"}`,
46301
46327
  children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-semibold text-foreground/80", children: "Unlabeled" })
46302
46328
  }
46303
46329
  );
@@ -46648,7 +46674,9 @@ function SettingsSection({
46648
46674
  {
46649
46675
  "data-slot": "settings-section-card",
46650
46676
  className: cn$2(
46651
- "overflow-hidden rounded-xl border border-border bg-card",
46677
+ // Group rows share the page background; only the outer border and
46678
+ // 1px row dividers separate them visually.
46679
+ "overflow-hidden rounded-xl border border-border",
46652
46680
  // Auto-divider between direct children (rows). Skips border-bottom of last child.
46653
46681
  "[&>*+*]:border-t [&>*+*]:border-border"
46654
46682
  ),
@@ -47260,33 +47288,17 @@ function SettingsPage({ open: open2, onOpenChange }) {
47260
47288
  }
47261
47289
  ) });
47262
47290
  }
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;
47291
+ const isElectron$1 = typeof window !== "undefined" && "__BAND_DESKTOP__" in window;
47292
+ const isDesktop$1 = isElectron$1;
47266
47293
  function electronBridge$2() {
47267
- if (!isElectron$2) return null;
47294
+ if (!isElectron$1) return null;
47268
47295
  const bridge = window.__BAND_DESKTOP__;
47269
47296
  return bridge ?? null;
47270
47297
  }
47271
47298
  async function desktopInvoke$1(cmd2, args) {
47272
47299
  const bridge = electronBridge$2();
47273
47300
  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
- }
47301
+ throw new Error(`desktopInvoke('${cmd2}') called outside the desktop shell`);
47290
47302
  }
47291
47303
  function DashboardShell({ toolbarMenuItems, hideTitleBar }) {
47292
47304
  const { projects, isLoading: loading } = useProjects();
@@ -47302,23 +47314,11 @@ function DashboardShell({ toolbarMenuItems, hideTitleBar }) {
47302
47314
  const { state: hooksState, install: installHooks } = useHooksSetup();
47303
47315
  const { state: cliState, install: installCli } = useCliSetup();
47304
47316
  const [appTitle, setAppTitle] = reactExports.useState("Band");
47305
- const titleBarRef = reactExports.useRef(null);
47306
47317
  reactExports.useEffect(() => {
47307
47318
  if (!isDesktop$1) return;
47308
47319
  desktopInvoke$1("get_app_title").then(setAppTitle).catch(() => {
47309
47320
  });
47310
47321
  }, []);
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
47322
  useStatusWatcher();
47323
47323
  useBranchStatusWatcher();
47324
47324
  useSetupStatusWatcher();
@@ -47369,9 +47369,8 @@ function DashboardShell({ toolbarMenuItems, hideTitleBar }) {
47369
47369
  isDesktop$1 && !hideTitleBar && /* @__PURE__ */ jsxRuntimeExports.jsx(
47370
47370
  "div",
47371
47371
  {
47372
- ref: titleBarRef,
47373
- "data-tauri-drag-region": true,
47374
47372
  className: "h-[38px] shrink-0 flex items-center justify-center border-b border-border",
47373
+ style: { WebkitAppRegion: "drag" },
47375
47374
  children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium text-muted-foreground select-none pointer-events-none", children: appTitle })
47376
47375
  }
47377
47376
  ),
@@ -49835,6 +49834,25 @@ function storeDiffMode(mode) {
49835
49834
  } catch {
49836
49835
  }
49837
49836
  }
49837
+ const COMPARE_BRANCH_KEY_PREFIX = "band:diff-compare-branch:";
49838
+ function getStoredCompareBranch(workspaceId) {
49839
+ try {
49840
+ return localStorage.getItem(COMPARE_BRANCH_KEY_PREFIX + workspaceId);
49841
+ } catch {
49842
+ return null;
49843
+ }
49844
+ }
49845
+ function storeCompareBranch(workspaceId, branch) {
49846
+ try {
49847
+ if (branch) {
49848
+ localStorage.setItem(COMPARE_BRANCH_KEY_PREFIX + workspaceId, branch);
49849
+ } else {
49850
+ localStorage.removeItem(COMPARE_BRANCH_KEY_PREFIX + workspaceId);
49851
+ }
49852
+ } catch {
49853
+ }
49854
+ }
49855
+ const UNCOMMITTED_VALUE = "__uncommitted__";
49838
49856
  const EXPAND_ALL_KEY = "band:diff-expand-all";
49839
49857
  function getStoredExpandAll() {
49840
49858
  try {
@@ -50407,7 +50425,6 @@ function DiffView({
50407
50425
  const adapter2 = useAdapter();
50408
50426
  const [summary, setSummary] = reactExports.useState(null);
50409
50427
  const summaryRef = reactExports.useRef(null);
50410
- const [baseBranch, setBaseBranch] = reactExports.useState(null);
50411
50428
  const [error, setError] = reactExports.useState(null);
50412
50429
  const [loading, setLoading] = reactExports.useState(true);
50413
50430
  const fetchSummaryRef = reactExports.useRef(null);
@@ -50419,6 +50436,16 @@ function DiffView({
50419
50436
  const [viewMode, setViewModeState] = reactExports.useState(getStoredViewMode);
50420
50437
  const [diffMode, setDiffModeState] = reactExports.useState(getStoredDiffMode);
50421
50438
  const [expandAll, setExpandAllState] = reactExports.useState(getStoredExpandAll);
50439
+ const [compareBranch, setCompareBranchState] = reactExports.useState(
50440
+ () => getStoredCompareBranch(workspaceId)
50441
+ );
50442
+ const [availableBranches, setAvailableBranches] = reactExports.useState(() => {
50443
+ const stored = getStoredCompareBranch(workspaceId);
50444
+ return stored ? [stored] : [];
50445
+ });
50446
+ const [availableDefaultBranch, setAvailableDefaultBranch] = reactExports.useState(null);
50447
+ const compareBranchRef = reactExports.useRef(compareBranch);
50448
+ compareBranchRef.current = compareBranch;
50422
50449
  const setViewMode = reactExports.useCallback((mode) => {
50423
50450
  setViewModeState(mode);
50424
50451
  storeViewMode(mode);
@@ -50427,6 +50454,50 @@ function DiffView({
50427
50454
  setDiffModeState(mode);
50428
50455
  storeDiffMode(mode);
50429
50456
  }, []);
50457
+ const setCompareBranch = reactExports.useCallback(
50458
+ (branch) => {
50459
+ setCompareBranchState(branch);
50460
+ storeCompareBranch(workspaceId, branch);
50461
+ },
50462
+ [workspaceId]
50463
+ );
50464
+ reactExports.useEffect(() => {
50465
+ const stored = getStoredCompareBranch(workspaceId);
50466
+ setCompareBranchState(stored);
50467
+ setAvailableBranches(stored ? [stored] : []);
50468
+ setAvailableDefaultBranch(null);
50469
+ }, [workspaceId]);
50470
+ reactExports.useEffect(() => {
50471
+ const listWorkspaceBranches = adapter2.listWorkspaceBranches;
50472
+ if (!listWorkspaceBranches) return;
50473
+ let cancelled = false;
50474
+ const fetchBranches = () => {
50475
+ listWorkspaceBranches.call(adapter2, workspaceId).then((result) => {
50476
+ if (cancelled) return;
50477
+ setAvailableBranches(result.branches);
50478
+ setAvailableDefaultBranch(result.defaultBranch);
50479
+ const current = compareBranchRef.current;
50480
+ if (current && !result.branches.includes(current)) {
50481
+ setCompareBranch(null);
50482
+ }
50483
+ }).catch(() => {
50484
+ });
50485
+ };
50486
+ fetchBranches();
50487
+ let unsubscribe;
50488
+ if (active) {
50489
+ unsubscribe = adapter2.subscribeStatusEvents((event) => {
50490
+ const data = event;
50491
+ if (data.kind === "branch-status" && data.workspaceId === workspaceId) {
50492
+ fetchBranches();
50493
+ }
50494
+ });
50495
+ }
50496
+ return () => {
50497
+ cancelled = true;
50498
+ unsubscribe?.();
50499
+ };
50500
+ }, [adapter2, workspaceId, active, setCompareBranch]);
50430
50501
  const setExpandAll = reactExports.useCallback((v2) => {
50431
50502
  setExpandAllState(v2);
50432
50503
  storeExpandAll(v2);
@@ -50478,6 +50549,23 @@ function DiffView({
50478
50549
  setFocusedFile({ path: filePath, seq: focusSeqRef.current });
50479
50550
  }, []);
50480
50551
  const [activeFile, setActiveFile] = reactExports.useState(null);
50552
+ const [scrollContainerHeight, setScrollContainerHeight] = reactExports.useState(0);
50553
+ const [scrollContainerWidth, setScrollContainerWidth] = reactExports.useState(0);
50554
+ reactExports.useLayoutEffect(() => {
50555
+ const container = scrollContainerRef.current;
50556
+ if (!container) return;
50557
+ const update = () => {
50558
+ setScrollContainerHeight(container.clientHeight);
50559
+ setScrollContainerWidth(container.clientWidth);
50560
+ };
50561
+ update();
50562
+ if (typeof ResizeObserver === "undefined") return;
50563
+ const observer = new ResizeObserver(update);
50564
+ observer.observe(container);
50565
+ return () => observer.disconnect();
50566
+ }, [summary]);
50567
+ const SPLIT_VIEW_MIN_WIDTH = 640;
50568
+ const effectiveViewMode = scrollContainerWidth > 0 && scrollContainerWidth < SPLIT_VIEW_MIN_WIDTH ? "unified" : viewMode;
50481
50569
  reactExports.useEffect(() => {
50482
50570
  const container = scrollContainerRef.current;
50483
50571
  if (!container) return;
@@ -50490,28 +50578,18 @@ function DiffView({
50490
50578
  const names = filenamesRef.current;
50491
50579
  if (names.length === 0) return;
50492
50580
  const rect2 = container.getBoundingClientRect();
50493
- const EDGE_BUFFER = 40;
50494
- if (container.scrollTop <= EDGE_BUFFER) {
50495
- setActiveFile((prev2) => prev2 === names[0] ? prev2 : names[0]);
50496
- return;
50497
- }
50498
- if (container.scrollHeight - container.scrollTop - container.clientHeight <= EDGE_BUFFER) {
50499
- const last = names[names.length - 1];
50500
- setActiveFile((prev2) => prev2 === last ? prev2 : last);
50501
- return;
50502
- }
50503
- const center = rect2.top + rect2.height / 2;
50581
+ const top2 = rect2.top;
50504
50582
  let closest = null;
50505
50583
  let closestDist = Infinity;
50506
50584
  for (const name2 of names) {
50507
50585
  const el = document.getElementById(`diff-file-${encodeURIComponent(name2)}`);
50508
50586
  if (!el) continue;
50509
50587
  const elRect = el.getBoundingClientRect();
50510
- if (elRect.top <= center && elRect.bottom >= center) {
50588
+ if (elRect.top <= top2 && elRect.bottom > top2) {
50511
50589
  closest = name2;
50512
50590
  break;
50513
50591
  }
50514
- const dist2 = Math.min(Math.abs(elRect.top - center), Math.abs(elRect.bottom - center));
50592
+ const dist2 = Math.abs(elRect.top - top2);
50515
50593
  if (dist2 < closestDist) {
50516
50594
  closestDist = dist2;
50517
50595
  closest = name2;
@@ -50625,7 +50703,7 @@ function DiffView({
50625
50703
  (filename) => {
50626
50704
  const revertFile = adapter2.revertFile;
50627
50705
  if (!revertFile) return;
50628
- revertFile.call(adapter2, workspaceId, filename, diffMode).then(() => {
50706
+ revertFile.call(adapter2, workspaceId, filename, diffMode, compareBranch ?? void 0).then(() => {
50629
50707
  setDiffCache((prev2) => {
50630
50708
  const next2 = new Map(prev2);
50631
50709
  next2.delete(filename);
@@ -50637,7 +50715,7 @@ function DiffView({
50637
50715
  console.error("Failed to revert file:", err);
50638
50716
  });
50639
50717
  },
50640
- [adapter2, workspaceId, diffMode]
50718
+ [adapter2, workspaceId, diffMode, compareBranch]
50641
50719
  );
50642
50720
  reactExports.useEffect(() => {
50643
50721
  const getWorkspaceDiffSummary = adapter2.getWorkspaceDiffSummary;
@@ -50650,7 +50728,7 @@ function DiffView({
50650
50728
  expandedFilesRef.current = /* @__PURE__ */ new Set();
50651
50729
  prevFingerprintRef.current = "";
50652
50730
  const fetchSummary = (forceRefresh = false) => {
50653
- getWorkspaceDiffSummary.call(adapter2, workspaceId, diffMode).then((result) => {
50731
+ getWorkspaceDiffSummary.call(adapter2, workspaceId, diffMode, compareBranch ?? void 0).then((result) => {
50654
50732
  if (!cancelled) {
50655
50733
  const fingerprint = JSON.stringify({
50656
50734
  fileStatuses: result.fileStatuses,
@@ -50662,7 +50740,6 @@ function DiffView({
50662
50740
  summaryRef.current = result;
50663
50741
  if (dataChanged) {
50664
50742
  setSummary(result);
50665
- setBaseBranch(result.baseBranch);
50666
50743
  }
50667
50744
  setError(null);
50668
50745
  if (forceRefresh || dataChanged) {
@@ -50709,49 +50786,82 @@ function DiffView({
50709
50786
  fetchSummaryRef.current = null;
50710
50787
  unsubscribe?.();
50711
50788
  };
50712
- }, [adapter2, workspaceId, active, onStatsChange, diffMode, fetchFileDiff]);
50789
+ }, [adapter2, workspaceId, active, onStatsChange, diffMode, compareBranch, fetchFileDiff]);
50790
+ const summaryCompareBranch = summary?.compareBranch ?? null;
50791
+ const defaultBranch = summary?.defaultBranch ?? availableDefaultBranch ?? null;
50792
+ const branchOptions = availableBranches.length > 0 ? availableBranches : summaryCompareBranch ? [summaryCompareBranch] : [];
50793
+ const targetBranch = compareBranch ?? branchOptions[0] ?? summaryCompareBranch;
50794
+ const topSectionBranches = [];
50795
+ if (targetBranch) {
50796
+ topSectionBranches.push(targetBranch);
50797
+ }
50798
+ if (defaultBranch && defaultBranch !== targetBranch && branchOptions.includes(defaultBranch)) {
50799
+ topSectionBranches.push(defaultBranch);
50800
+ }
50801
+ const otherBranches = branchOptions.filter((b2) => !topSectionBranches.includes(b2)).sort((a2, b2) => a2.localeCompare(b2));
50802
+ const diffSelectValue = diffMode === "uncommitted" ? UNCOMMITTED_VALUE : targetBranch ?? UNCOMMITTED_VALUE;
50803
+ const handleDiffSelectChange = (value) => {
50804
+ if (value === UNCOMMITTED_VALUE) {
50805
+ setDiffMode("uncommitted");
50806
+ } else {
50807
+ setDiffMode("branch");
50808
+ setCompareBranch(value);
50809
+ }
50810
+ };
50811
+ const renderDiffSelect = () => /* @__PURE__ */ jsxRuntimeExports.jsxs(Select, { value: diffSelectValue, onValueChange: handleDiffSelectChange, children: [
50812
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { className: "h-6 w-auto max-w-[300px] gap-1 rounded-md border-0 bg-transparent px-1.5 text-xs font-medium text-foreground shadow-none hover:bg-accent [&>[data-slot=select-value]]:truncate [&>[data-slot=select-value]]:block", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, {}) }),
50813
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(SelectContent, { children: [
50814
+ topSectionBranches.map((branch) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: branch, children: branch }, branch)),
50815
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: UNCOMMITTED_VALUE, children: "Uncommitted" }),
50816
+ otherBranches.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(SelectSeparator, {}),
50817
+ otherBranches.map((branch) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: branch, children: branch }, branch))
50818
+ ] })
50819
+ ] });
50713
50820
  if (loading) {
50714
50821
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full items-center justify-center text-sm text-muted-foreground", children: "Loading changes..." });
50715
50822
  }
50716
50823
  if (error) {
50717
50824
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full items-center justify-center text-sm text-destructive", children: error });
50718
50825
  }
50826
+ const ghostBtnClass = "hidden size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground @[40rem]/diff:inline-flex";
50827
+ const ghostBtnAlwaysClass = "inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground";
50828
+ const renderSidebarToggle = () => /* @__PURE__ */ jsxRuntimeExports.jsx(
50829
+ "button",
50830
+ {
50831
+ type: "button",
50832
+ onClick: () => setSidebarOpen(!sidebarOpen),
50833
+ className: ghostBtnClass,
50834
+ title: sidebarOpen ? "Hide file tree" : "Show file tree",
50835
+ "aria-label": sidebarOpen ? "Hide file tree" : "Show file tree",
50836
+ "aria-pressed": sidebarOpen,
50837
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-3.5" })
50838
+ }
50839
+ );
50840
+ const renderBranchIndicator = (headBranchLabel) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
50841
+ headBranchLabel && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "hidden items-center gap-1.5 @[32rem]/diff:flex", children: [
50842
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: headBranchLabel }),
50843
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "size-3", "aria-hidden": true })
50844
+ ] }),
50845
+ renderDiffSelect()
50846
+ ] });
50719
50847
  if (!summary || summary.stats.filesChanged === 0) {
50720
50848
  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" })
50849
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-9 shrink-0 items-center gap-3 border-b border-border pl-3 pr-3", children: renderBranchIndicator(summary?.headBranch) }),
50850
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex min-h-0 flex-1 items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm text-muted-foreground", children: "No changes" }) })
50729
50851
  ] });
50730
50852
  }
50731
50853
  const fileStatuses = summary.fileStatuses || {};
50732
50854
  const filenames = flattenFileTreeOrder(buildFileTree(fileStatuses));
50733
50855
  filenamesRef.current = filenames;
50734
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full overflow-hidden", children: [
50856
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "@container/diff flex h-full overflow-hidden", children: [
50735
50857
  sidebarOpen && /* @__PURE__ */ jsxRuntimeExports.jsxs(
50736
50858
  "div",
50737
50859
  {
50738
50860
  "data-diff-sidebar": true,
50739
- className: "hidden shrink-0 flex-col md:flex",
50861
+ className: "hidden shrink-0 flex-col @[40rem]/diff:flex",
50740
50862
  style: { width: sidebarWidth },
50741
50863
  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
- ] }),
50864
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-9 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
50865
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 flex-1 overflow-y-auto py-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
50756
50866
  ChangesFileTree,
50757
50867
  {
@@ -50767,52 +50877,24 @@ function DiffView({
50767
50877
  "div",
50768
50878
  {
50769
50879
  onMouseDown: handleResizeStart,
50770
- className: "hidden w-[3px] shrink-0 cursor-col-resize bg-border/50 transition-colors hover:bg-accent-foreground/20 active:bg-accent-foreground/30 md:block"
50880
+ className: "hidden w-[3px] shrink-0 cursor-col-resize bg-border/50 transition-colors hover:bg-accent-foreground/20 active:bg-accent-foreground/30 @[40rem]/diff:block"
50771
50881
  }
50772
50882
  ),
50773
50883
  /* @__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
- ] })
50884
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-9 shrink-0 items-center justify-between gap-3 border-b border-border pl-2 pr-3", children: [
50885
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [
50886
+ renderSidebarToggle(),
50887
+ renderBranchIndicator(summary.headBranch)
50807
50888
  ] }),
50808
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
50889
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "hidden items-center gap-1 @[32rem]/diff:flex", children: [
50809
50890
  /* @__PURE__ */ jsxRuntimeExports.jsx(
50810
50891
  "button",
50811
50892
  {
50812
50893
  type: "button",
50813
50894
  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",
50895
+ className: ghostBtnAlwaysClass,
50815
50896
  title: "Reload changes",
50897
+ "aria-label": "Reload changes",
50816
50898
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "size-3.5" })
50817
50899
  }
50818
50900
  ),
@@ -50821,8 +50903,9 @@ function DiffView({
50821
50903
  {
50822
50904
  type: "button",
50823
50905
  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",
50906
+ className: ghostBtnAlwaysClass,
50825
50907
  title: "Find in changes (⌘F)",
50908
+ "aria-label": "Find in changes",
50826
50909
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { className: "size-3.5" })
50827
50910
  }
50828
50911
  ),
@@ -50831,26 +50914,23 @@ function DiffView({
50831
50914
  {
50832
50915
  type: "button",
50833
50916
  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"}`,
50917
+ className: `${ghostBtnAlwaysClass} ${expandAll ? "bg-accent text-foreground" : ""}`,
50835
50918
  title: expandAll ? "Collapse all files" : "Expand all files",
50919
+ "aria-label": expandAll ? "Collapse all files" : "Expand all files",
50920
+ "aria-pressed": expandAll,
50836
50921
  children: expandAll ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronsDownUp, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronsUpDown, { className: "size-3.5" })
50837
50922
  }
50838
50923
  ),
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: [
50924
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "hidden items-center @[40rem]/diff:flex", children: [
50847
50925
  /* @__PURE__ */ jsxRuntimeExports.jsx(
50848
50926
  "button",
50849
50927
  {
50850
50928
  type: "button",
50851
50929
  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"}`,
50930
+ className: `${ghostBtnAlwaysClass} ${effectiveViewMode === "unified" ? "bg-accent text-foreground" : ""}`,
50853
50931
  title: "Unified view",
50932
+ "aria-label": "Unified view",
50933
+ "aria-pressed": effectiveViewMode === "unified",
50854
50934
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(Rows2, { className: "size-3.5" })
50855
50935
  }
50856
50936
  ),
@@ -50859,13 +50939,52 @@ function DiffView({
50859
50939
  {
50860
50940
  type: "button",
50861
50941
  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"}`,
50942
+ className: `${ghostBtnAlwaysClass} ${effectiveViewMode === "split" ? "bg-accent text-foreground" : ""}`,
50863
50943
  title: "Split view",
50944
+ "aria-label": "Split view",
50945
+ "aria-pressed": effectiveViewMode === "split",
50864
50946
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(Columns2, { className: "size-3.5" })
50865
50947
  }
50866
50948
  )
50867
50949
  ] })
50868
- ] })
50950
+ ] }),
50951
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center @[32rem]/diff:hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
50952
+ /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
50953
+ "button",
50954
+ {
50955
+ type: "button",
50956
+ className: ghostBtnAlwaysClass,
50957
+ title: "More actions",
50958
+ "aria-label": "More actions",
50959
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(EllipsisVertical, { className: "size-3.5" })
50960
+ }
50961
+ ) }),
50962
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuContent, { align: "end", children: [
50963
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onSelect: () => fetchSummaryRef.current?.(true), children: [
50964
+ /* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "size-4" }),
50965
+ "Reload changes"
50966
+ ] }),
50967
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onSelect: search2.handleOpenSearch, children: [
50968
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { className: "size-4" }),
50969
+ "Find in changes"
50970
+ ] }),
50971
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onSelect: () => setExpandAll(!expandAll), children: [
50972
+ expandAll ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronsDownUp, { className: "size-4" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronsUpDown, { className: "size-4" }),
50973
+ expandAll ? "Collapse all files" : "Expand all files"
50974
+ ] }),
50975
+ /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuSeparator, {}),
50976
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onSelect: () => setViewMode("unified"), children: [
50977
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Rows2, { className: "size-4" }),
50978
+ "Unified view",
50979
+ effectiveViewMode === "unified" && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "ml-auto size-4" })
50980
+ ] }),
50981
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onSelect: () => setViewMode("split"), children: [
50982
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Columns2, { className: "size-4" }),
50983
+ "Split view",
50984
+ effectiveViewMode === "split" && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "ml-auto size-4" })
50985
+ ] })
50986
+ ] })
50987
+ ] }) })
50869
50988
  ] }),
50870
50989
  search2.searchOpen && /* @__PURE__ */ jsxRuntimeExports.jsx(
50871
50990
  SearchBar,
@@ -50882,26 +51001,57 @@ function DiffView({
50882
51001
  onClose: search2.handleCloseSearch
50883
51002
  }
50884
51003
  ),
50885
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: scrollContainerRef, className: "min-h-0 flex-1 overflow-y-auto", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-3 p-3", children: filenames.map((filename) => /* @__PURE__ */ jsxRuntimeExports.jsx(
50886
- LazyFileRow,
50887
- {
50888
- filename,
50889
- status: fileStatuses[filename],
50890
- cacheEntry: diffCache.get(filename),
50891
- viewMode,
50892
- expandAll,
50893
- focusedFile,
50894
- isActive: activeFile === filename,
50895
- scrollContainerRef,
50896
- onToggleFile: handleToggleFile,
50897
- onLoadMoreContext: handleLoadMoreContext,
50898
- onShowFullFile: handleShowFullFile,
50899
- onOpenFile,
50900
- onRevertFile: adapter2.revertFile ? handleRevertFile : void 0,
50901
- onEditorViews: handleEditorViews
50902
- },
50903
- filename
50904
- )) }) })
51004
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: scrollContainerRef, className: "min-h-0 flex-1 overflow-y-auto", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-3 p-3", children: filenames.map((filename, index2) => {
51005
+ const isLast = index2 === filenames.length - 1;
51006
+ const row2 = /* @__PURE__ */ jsxRuntimeExports.jsx(
51007
+ LazyFileRow,
51008
+ {
51009
+ filename,
51010
+ status: fileStatuses[filename],
51011
+ cacheEntry: diffCache.get(filename),
51012
+ viewMode: effectiveViewMode,
51013
+ expandAll,
51014
+ focusedFile,
51015
+ isActive: activeFile === filename,
51016
+ scrollContainerRef,
51017
+ onToggleFile: handleToggleFile,
51018
+ onLoadMoreContext: handleLoadMoreContext,
51019
+ onShowFullFile: handleShowFullFile,
51020
+ onOpenFile,
51021
+ onRevertFile: adapter2.revertFile ? handleRevertFile : void 0,
51022
+ onEditorViews: handleEditorViews
51023
+ },
51024
+ filename
51025
+ );
51026
+ if (!isLast) return row2;
51027
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
51028
+ "div",
51029
+ {
51030
+ className: "flex flex-col",
51031
+ style: scrollContainerHeight > 0 ? { minHeight: scrollContainerHeight } : void 0,
51032
+ children: [
51033
+ row2,
51034
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "flex-1" })
51035
+ ]
51036
+ },
51037
+ `${filename}-last-wrapper`
51038
+ );
51039
+ }) }) }),
51040
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-9 shrink-0 items-center border-t border-border px-3 text-sm text-muted-foreground", children: [
51041
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: summary.stats.filesChanged }),
51042
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-1", children: [
51043
+ summary.stats.filesChanged === 1 ? "file" : "files",
51044
+ " changed"
51045
+ ] }),
51046
+ summary.stats.insertions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-2 text-green-600 dark:text-green-400", children: [
51047
+ "+",
51048
+ summary.stats.insertions
51049
+ ] }),
51050
+ summary.stats.deletions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-1 text-red-600 dark:text-red-400", children: [
51051
+ "-",
51052
+ summary.stats.deletions
51053
+ ] })
51054
+ ] })
50905
51055
  ] })
50906
51056
  ] });
50907
51057
  }
@@ -58530,19 +58680,24 @@ class WebDashboardAdapter {
58530
58680
  async installCli(opts) {
58531
58681
  await this.trpc.cli.install.mutate(opts);
58532
58682
  }
58533
- async getWorkspaceDiff(workspaceId, contextLines, diffMode) {
58683
+ async getWorkspaceDiff(workspaceId, contextLines, diffMode, compareBranch) {
58534
58684
  return await this.trpc.workspace.getDiff.query({
58535
58685
  workspaceId,
58536
58686
  contextLines,
58537
- diffMode
58687
+ diffMode,
58688
+ compareBranch
58538
58689
  });
58539
58690
  }
58540
- async getWorkspaceDiffSummary(workspaceId, diffMode) {
58691
+ async getWorkspaceDiffSummary(workspaceId, diffMode, compareBranch) {
58541
58692
  return await this.trpc.workspace.getDiffSummary.query({
58542
58693
  workspaceId,
58543
- diffMode
58694
+ diffMode,
58695
+ compareBranch
58544
58696
  });
58545
58697
  }
58698
+ async listWorkspaceBranches(workspaceId) {
58699
+ return await this.trpc.workspace.listBranches.query({ workspaceId });
58700
+ }
58546
58701
  async getFileDiff(workspaceId, filePath, mergeBase, contextLines) {
58547
58702
  return await this.trpc.workspace.getFileDiff.query({
58548
58703
  workspaceId,
@@ -58560,8 +58715,13 @@ class WebDashboardAdapter {
58560
58715
  async saveWorkspaceFile(workspaceId, path2, content2) {
58561
58716
  await this.trpc.workspace.saveFile.mutate({ workspaceId, path: path2, content: content2 });
58562
58717
  }
58563
- async revertFile(workspaceId, filePath, diffMode) {
58564
- await this.trpc.workspace.revertFile.mutate({ workspaceId, filePath, diffMode });
58718
+ async revertFile(workspaceId, filePath, diffMode, compareBranch) {
58719
+ await this.trpc.workspace.revertFile.mutate({
58720
+ workspaceId,
58721
+ filePath,
58722
+ diffMode,
58723
+ compareBranch
58724
+ });
58565
58725
  }
58566
58726
  getWorkspaceFileUrl(workspaceId, path2) {
58567
58727
  return `/api/workspace-file/${encodeURIComponent(workspaceId)}/${path2.split("/").map(encodeURIComponent).join("/")}`;
@@ -58605,17 +58765,14 @@ class WebCapabilities {
58605
58765
  window.open(url, "_blank");
58606
58766
  }
58607
58767
  }
58608
- function isTauri$1() {
58609
- return typeof window !== "undefined" && "__TAURI_INTERNALS__" in window;
58610
- }
58611
- function isElectron$1() {
58768
+ function isElectron() {
58612
58769
  return typeof window !== "undefined" && "__BAND_DESKTOP__" in window;
58613
58770
  }
58614
58771
  function isDesktopShell() {
58615
- return isTauri$1() || isElectron$1();
58772
+ return isElectron();
58616
58773
  }
58617
58774
  function electronBridge$1() {
58618
- if (!isElectron$1()) return null;
58775
+ if (!isElectron()) return null;
58619
58776
  const bridge = window.__BAND_DESKTOP__;
58620
58777
  return bridge ?? null;
58621
58778
  }
@@ -58624,13 +58781,9 @@ async function desktopInvoke(cmd2, args) {
58624
58781
  if (bridge) {
58625
58782
  return await bridge.invoke(cmd2, args);
58626
58783
  }
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`);
58784
+ throw new Error(`desktopInvoke('${cmd2}') called outside the desktop shell`);
58632
58785
  }
58633
- class TauriDashboardAdapter extends WebDashboardAdapter {
58786
+ class DesktopDashboardAdapter extends WebDashboardAdapter {
58634
58787
  async installCli(opts) {
58635
58788
  try {
58636
58789
  await super.installCli();
@@ -58676,12 +58829,7 @@ class NativeShellCapabilities {
58676
58829
  window.open(url, "_blank");
58677
58830
  return;
58678
58831
  }
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);
58832
+ await desktopInvoke("open_external", { url });
58685
58833
  }
58686
58834
  }
58687
58835
  function gt(e2, t2) {
@@ -60719,6 +60867,364 @@ function Qt$1({
60719
60867
  );
60720
60868
  }
60721
60869
  Qt$1.displayName = "Separator";
60870
+ const isDesktop = typeof window !== "undefined" && "__BAND_DESKTOP__" in window;
60871
+ function electronBridge() {
60872
+ if (!isDesktop) return null;
60873
+ const bridge = window.__BAND_DESKTOP__;
60874
+ return bridge ?? null;
60875
+ }
60876
+ async function invoke(cmd2, args) {
60877
+ const bridge = electronBridge();
60878
+ if (bridge) {
60879
+ return await bridge.invoke(cmd2, args);
60880
+ }
60881
+ throw new Error(`invoke('${cmd2}') called outside the desktop shell`);
60882
+ }
60883
+ async function listen(event, cb) {
60884
+ const bridge = electronBridge();
60885
+ if (bridge) {
60886
+ return bridge.on(event, (payload) => cb({ payload }));
60887
+ }
60888
+ throw new Error(`listen('${event}') called outside the desktop shell`);
60889
+ }
60890
+ const androidStudioIcon = "/assets/android-studio-t3zZ7G0e.svg";
60891
+ const antigravityIcon = "/assets/antigravity-m-mWKI7R.svg";
60892
+ 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";
60893
+ const finderIcon = "data:image/png;base64,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";
60894
+ 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";
60895
+ const intellijIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0Y5N0ExMiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGQzI5QjgiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8cmVjdCB4PSI0OCIgeT0iNDgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIiByeD0iNCIgZmlsbD0iIzAwMCIvPgogIDx0ZXh0IHg9IjYwIiB5PSIxNzgiIGZpbGw9IiNmZmYiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9ImJvbGQiIGZvbnQtc2l6ZT0iNTYiPklKPC90ZXh0Pgo8L3N2Zz4K";
60896
+ 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";
60897
+ const kiroIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0ZGOTkwMCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRjY2MDAiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8dGV4dCB4PSI1NiIgeT0iMTc4IiBmaWxsPSIjZmZmIiBmb250LWZhbWlseT0iQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSJib2xkIiBmb250LXNpemU9IjcyIj5LPC90ZXh0Pgo8L3N2Zz4K";
60898
+ const rustroverIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0ZDODAxRCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNCNzRDRjAiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8cmVjdCB4PSI0OCIgeT0iNDgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIiByeD0iNCIgZmlsbD0iIzAwMCIvPgogIDx0ZXh0IHg9IjYwIiB5PSIxNzgiIGZpbGw9IiNmZmYiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9ImJvbGQiIGZvbnQtc2l6ZT0iNTYiPlJSPC90ZXh0Pgo8L3N2Zz4K";
60899
+ 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";
60900
+ 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";
60901
+ const textmateIcon = "data:image/png;base64,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";
60902
+ const vscodeIcon = "/assets/vscode-C5BXgFjm.svg";
60903
+ const warpIcon = "data:image/png;base64,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";
60904
+ const webstormIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAiIHkxPSIwIiB4Mj0iMjU2IiB5Mj0iMjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzA3QzNGMiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwODdDRkEiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNDgiIGZpbGw9InVybCgjYSkiLz4KICA8cmVjdCB4PSI0OCIgeT0iNDgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIiByeD0iNCIgZmlsbD0iIzAwMCIvPgogIDx0ZXh0IHg9IjYwIiB5PSIxNzgiIGZpbGw9IiNmZmYiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9ImJvbGQiIGZvbnQtc2l6ZT0iNTYiPldTPC90ZXh0Pgo8L3N2Zz4K";
60905
+ 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";
60906
+ const xcodeIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAADQlJREFUeAHlWAtwXOV1/u5r3w/tQytpVyvLdoRlG+M4Ia4NxMZ2SELo4IRX6qEtbmEST6epoU3K0EIKZZpCmk7JNCRpaSkJEFJahhhSY9pJggfHJiHYxg2OJSzr4dV7tbvSah939z7y/XfltwyaSTLJTO7Mr6u797///f7vnPOdcy7wG35I+NUcyvbtO9Ldy5bdl2pftDHIY2JivDQ9XejPZDLPvfLK3l1vvnlgeCEL/WoAJpO+jcvfe7KnpyeqV6vw+QK44qoN6OpsR80wEAqF7ZaWNimXzT5+zz07b5/DYeOXAJDz7+d4S8LVk2eeLRbPXecN548n6UVElf1d4ebWW2o1/Y5auFXe8sF1UFUXNFWDbVtWKpWWPW73C3fd9emtfEjhMM974UUPGStXqi13/suj2nvf90nJ7Q3CsM48YV/kKduGVTVhTZdhFSZgl4uw9QoqhmV1PvOAjGoRy7uXw+P2QFEUqJoGRZbNLZs/otxy87XSPIzMeyixr/5wm/+qtU/WTxbtbBnS+6IKVjSpCKu8Kc/h4x/5vBVsy4ZRraA6nYPOUSvNoF4pQy+XoLu86P+ne+EO+hCLxWnqJprfB5fbjRXd3VY+Vxx7+OH7UmeTNB9AKfHo/j/Qlq/+93y2qj59ZQAjVQuPHNMxxnPdmkN2GhAB81LRQLPJ3LGNerUGvVIhc1XIdo3nMt0gT1azWPyTXZg8/Ar8/gBCTU0E2ox4cwInB/pw7bXXGZcsW6Nqqic7NTWhvfTSCxvnBZg+WLdyPTMYuiGC5mdzaAsrOI1rzp2rZOryqOpcZioWsjqB2Y17btkm0zY6vIRrWTiYrUKtzMDKjsB36GWUX34Cer1GE6vweLwo5KeguHwwayV8/IZtWL58pbNuMBidUs5HF//yvqclO7TysfUB6fIXC2gLqsKtnBeLh2ZrNtbHVFSIpnfGQoHAygbg4k3igir8gzMrpoRsTcJARUaz14VVUS+OFy0sG/wREl4NsiyjpuvoTKfxmZ33ohRKIZcrojg1gtdeexWlyiw6O7r/RD4foPvS1TdMztrySNlGUoAjU+CQOSSONU0K9o3XUSLQmCqhTJu7uYONzSqSHmCxT8b7OcfHuZWahYjc2NT+KWBpsgWr5CKSqTRWrLwMiZAPxpW34kAuj71yC5If345MScVoZhgfeP8Hcffdd3xDPR+g7Ap41kYMfO2njEJr7jcOP8EI/zteMOGTJAfgUr59kVdFhPQdmjRw6xIPWTUQ5vXaiBu7RwyaGziUM+AjvRNHDsH2h2DPFKFKFqTNd+CEbmHYDmBJQsbxumx95vprdv2scv0n2hLxnfMFidr+PaN+jauCZ/t0hNwSiMUZLr6IhDiggwTgI+ChkoUNZO4HI3W0hxRcGlGwoUXFnuE6JBLv5Zz/5b0Ov4wyI3XzM3+GbKWGUDiIob5+7F9+PbyhCKpqCFvaXTgwZSP71x/yptPp6MmTJ7PEUzvfxDLoT01c2BQeTzBlHUh5ZOg1XvJeG//XeKtQFqYFvp+p4aG1fswwwj+cdOGJXh390xa2LSGDx3XQ6sjOGhjf/ypa0x3UPRXmTBaDq7dCCcSoZx0wo51ILVoCpXmxE6QENyLAnbLeWUenLGRDElFhNsaKEKmniYQfkggUGLH5is2U1fDNADfzyMEy4nz65UEdFb3hr48eLiPokZxN6p4Atmeew/HMCNKpJPqydWQQRFcqBTmUgOShHgYjUCKtXKX9PMbOOQwJ4sUiank2yOLoLJliVFZr4sUMIhHQvGcbOD3GZ0x84YoAfjxmcBMSnt4UxBs0rWBcqhuwv/8s2rtXMXu4MD06gCNd1yEQiCCrRGDKPm5CobNxaC5cEBMX/GKeGrZjzpmy5TAlzNzulZGl39m8J4bYhGBrXauG+/bPIkmfDVK41n0jh23dXmdDJVcUOz1H0NPXh0XpFH5ysop4tAmSL4YyfEj5XA1riYCcJ31eCJC7FpPteoMdsSdqKupk81jWgGKdtQn+P5U3cdN7PMhzI29Rfja0aVjGQLmE4p4t2GjZ80VEl65CiOltYqAXb3d9DKYWhMWhKS6YXMeqNdzl3DLhnQDaDQZn6G/CnF5eRjWKL68dF5gbCud89nf8+Ku9RYQ1GVsZGAMELPz08Tdn8beXjcH942fw1Leeou+14wfMTqoviFk5Ah/9EpaMIufKpxg0FgqQOxHmqdUa5mWadSLX8RBrLoB4ztH3Juij3RTmYxOG85IJ6mShYMHyhfHYHTfDHWmGz+vB8//1DDLt66G6QkJr4RXJ25KoDpYjSQ2/XyhAkTXMhqyIa+FnGTIjWWc2oDNaH7sujN09VQzmTHxpUwDfOVzBvsEa/uFDAczu/jcEYjG4KCsqy6rx8Ukg0eVErKwwMGzFsYJVb7iKY94FATQbAIVpMRcIAuxs9Yx5JY5Omvwrr5VoWsmRnyf2l+BnceBRJNz7mozwvkecotTl0lCrljDZvhmqzWpHDVAT5lLo3Fqn/H7hDM7JjAAmAkWItl5tyI4Ys9MmPrU+gCpFfJzM7qQfHuW5Tmc3LBXub30KnlgbNIJTWTwODw5BX7oJJjOGSemuMT9YdaEEcPK7XbcuGiTqhQAb/mXXbEfTciUT928Ks6KxnVQndqQpQhct7PgApYR8TM2aeOiaIMr8zTIKePxfD0KLNzvmrdcqGAlfjgeviaDgbUFHawzThoIwJelzu2cQZXGRn8taCwDIIs5qTBbMUfpwyyov7mbZFaEdxS2RQVqZd6eohzEuXuLiIj9HfARqemF+/ZOIhaME12Cvvz8D39W3Y6Dkx3eOMbNoZQQ8CsYYYDdf5sUPB2qOpJ1657sAHDgdBNJctB7qr7GWU9HPKqVIk5oEWCrZTuWcL8xRSnYnczY8hYNodRnMt25omkJ3qCLr7YZf8eDJIyr+cVscO/+7jLxaR5qif3So5tSQkmWfUYd3MbFtn+WD45SMCBfyM+BWxDUEGQQJn0KtM5AnyC3L3TiUqTcaG38EJx74MJSmuGNa0RANDQ5g9e/ei/+fCSAaDOLr+6q4cY0Ho2RvjH48Rokq6tZZQXIhwIvoYMOBBfoIE/4Qgb4+oOPGy3zYdaSCo6N13H6FH1/9vyIOk4VDlJY3v/0wXMyvmqpwqDBqVUzIHTg85sZ9W9OsflyUIwubuzz40du6I1txbl6eI8NhcKEyY5qnqhmgl0l/aUTFapr5/l0FtDPZRhg8//w/08wGUmO+EkC490n2uwTnsCdjfGSUtN8IF7vVv3/JxKUtHqe5+otn89jAjLOE6/WM1hqBQRcxF6iDFthLTLPc12zJKQiErvWNG/jjTSHk2FP0ksk7P8KqmBVsuSq274Jnz6eh+GNOreewV9cxYcaheKKoS2G0JfzYtj6ICvO1iN7tV/pxYqzOIJQcIhiamGbQNXwwY50N6IKuLvU3dTuFSQfMrJAbAYEgNe7wxvV+luYq/vSbOQToj6vTGkanZqB9lynNH4bX64ab2jeaGcRgxw50LOlCrLUTb016UWbn+cJnW3CCrcEXny+I1g9Vo4ElSqBR1p0DdgLDD6jSO5rY0kvlg6yK7/pYqJEjTTgCrNMMX6JuffPVWQTIgijne6d8qO66jUwFHNOqp9irBhGJt2FkNoDjWRVeRrSP/vbQi9O4k5urM+iqIjjmeuodHw3hQI9O7Z2tv5uJoR/fuzseVa0kvyKMn6g19EkEGv0jxV0eYUCs7XQjxFxv9O9F0G05ZhX+p5CJyYlxmO+5CbrhIaMhAlHZ28hYt9iF19kCtIVlZibHmZxMNXpCRwd7mURUtmr9r3/vfDwXNu6RJeHUjqOF3NsjyPzHIsR+bwBtnS6KsX3OQ1U1jtY9l8NFefF4XM6wTAO9/ePQ13weibYU0skkK2YPDnNTXpd0Tj0q3G98oI7J/+xE+o8GEelqxvBXknF+iJo6G86FqS5/olg5/O3PNS297uH0Hw7Kz32+FcPsSb5G8wxRGgSTIu0l8l+G7A07zIkhGvHsxATyiRuglBUMDlFW6G+SVnWWrc6h41S0UhXuuj6E9piG9tsGEW4LmpW39jxIcPl3Z7BxKJGPPvGXvlU3fcHIT1mTk6a87hI3lpHJMFOe1+/B03++Bk3Mt6LPEEOwd6znbVx9+6MINCUQiiVZLHhPe5EIN9GLFRitR5ne3uitIpZQLTXULFeOPv9g7qVbH8A82fidPr8JdmOxrS8+5e64cqOkBjWRZkRa0oa/C/XI31k+v08OBPxO5hgbyZiF1G2KEb+C2YQtpCdEbPK5fcapt7FBglnV9cG9r1YP3PP7pYmfCrMa84FYyAdMFY3X8Ntb2EdnVDyyHFrU3tU32PczKxJtluPxGIplEwPHJ/wIzPgvupJEXeC3QExPV9Doe+WLAftFD6Wpqanzqi2fGI4n2u1IPGmnFi+7GfNlpl/zoXq93lQwmBR9u4rfxuPnTjEKD0h39egAAAAASUVORK5CYII=";
60907
+ 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";
60908
+ 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";
60909
+ const APP_ICONS = {
60910
+ vscode: vscodeIcon,
60911
+ cursor: cursorIcon,
60912
+ zed: zedIcon,
60913
+ "zed-dark": zedDarkIcon,
60914
+ finder: finderIcon,
60915
+ terminal: terminalIcon,
60916
+ iterm2: iterm2Icon,
60917
+ ghostty: ghosttyIcon,
60918
+ warp: warpIcon,
60919
+ xcode: xcodeIcon,
60920
+ "android-studio": androidStudioIcon,
60921
+ antigravity: antigravityIcon,
60922
+ textmate: textmateIcon,
60923
+ "sublime-text": sublimetextIcon,
60924
+ intellij: intellijIcon,
60925
+ webstorm: webstormIcon,
60926
+ rustrover: rustroverIcon,
60927
+ windsurf: windSurfIcon,
60928
+ kiro: kiroIcon
60929
+ };
60930
+ function isDark$1() {
60931
+ return document.documentElement.classList.contains("dark");
60932
+ }
60933
+ function AppIcon({ id: id28, className }) {
60934
+ const [dark, setDark] = reactExports.useState(isDark$1);
60935
+ reactExports.useEffect(() => {
60936
+ const observer = new MutationObserver(() => setDark(isDark$1()));
60937
+ observer.observe(document.documentElement, {
60938
+ attributes: true,
60939
+ attributeFilter: ["class"]
60940
+ });
60941
+ return () => observer.disconnect();
60942
+ }, []);
60943
+ let src = APP_ICONS[id28];
60944
+ if (id28 === "zed" && dark) {
60945
+ src = APP_ICONS["zed-dark"];
60946
+ }
60947
+ if (!src) return null;
60948
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src, alt: "", draggable: false, className: className ?? "size-5" });
60949
+ }
60950
+ const MAC_APPS = [
60951
+ { id: "vscode", label: "VS Code", icon: "vscode", openWith: "Visual Studio Code" },
60952
+ { id: "cursor", label: "Cursor", icon: "cursor", openWith: "Cursor" },
60953
+ { id: "zed", label: "Zed", icon: "zed", openWith: "Zed" },
60954
+ { id: "windsurf", label: "Windsurf", icon: "windsurf", openWith: "Windsurf" },
60955
+ { id: "kiro", label: "Kiro", icon: "kiro", openWith: "Kiro" },
60956
+ { id: "xcode", label: "Xcode", icon: "xcode", openWith: "Xcode" },
60957
+ { id: "antigravity", label: "Antigravity", icon: "antigravity", openWith: "Antigravity" },
60958
+ { id: "textmate", label: "TextMate", icon: "textmate", openWith: "TextMate" },
60959
+ { id: "sublime-text", label: "Sublime Text", icon: "sublime-text", openWith: "Sublime Text" },
60960
+ { id: "intellij", label: "IntelliJ IDEA", icon: "intellij", openWith: "IntelliJ IDEA" },
60961
+ { id: "webstorm", label: "WebStorm", icon: "webstorm", openWith: "WebStorm" },
60962
+ { id: "rustrover", label: "RustRover", icon: "rustrover", openWith: "RustRover" },
60963
+ { id: "iterm2", label: "iTerm2", icon: "iterm2", openWith: "iTerm" },
60964
+ { id: "terminal", label: "Terminal", icon: "terminal", openWith: "Terminal" },
60965
+ { id: "ghostty", label: "Ghostty", icon: "ghostty", openWith: "Ghostty" },
60966
+ { id: "warp", label: "Warp", icon: "warp", openWith: "Warp" },
60967
+ {
60968
+ id: "android-studio",
60969
+ label: "Android Studio",
60970
+ icon: "android-studio",
60971
+ openWith: "Android Studio"
60972
+ }
60973
+ ];
60974
+ function EditorPicker({ workspacePath, onCopyPath }) {
60975
+ const { settings } = useSettingsQuery();
60976
+ const updateSettings = useUpdateSettings();
60977
+ const [installed, setInstalled] = reactExports.useState({ finder: true });
60978
+ reactExports.useEffect(() => {
60979
+ if (!isDesktop) return;
60980
+ let cancelled = false;
60981
+ Promise.all(
60982
+ MAC_APPS.map(
60983
+ (app) => invoke("check_app_exists", { appName: app.openWith }).then((ok2) => [app.id, ok2]).catch(() => [app.id, false])
60984
+ )
60985
+ ).then((entries2) => {
60986
+ if (cancelled) return;
60987
+ const map2 = { finder: true };
60988
+ for (const [id28, ok2] of entries2) {
60989
+ map2[id28] = ok2;
60990
+ }
60991
+ setInstalled(map2);
60992
+ });
60993
+ return () => {
60994
+ cancelled = true;
60995
+ };
60996
+ }, []);
60997
+ const options = reactExports.useMemo(() => {
60998
+ const finderItem = {
60999
+ id: "finder",
61000
+ label: "Finder",
61001
+ icon: "finder",
61002
+ openWith: "Finder"
61003
+ };
61004
+ const apps = MAC_APPS.filter((app) => installed[app.id]);
61005
+ return [finderItem, ...apps];
61006
+ }, [installed]);
61007
+ const selectedId = settings.defaultOpenApp;
61008
+ const current = reactExports.useMemo(
61009
+ () => options.find((o3) => o3.id === selectedId) ?? options[0],
61010
+ [options, selectedId]
61011
+ );
61012
+ const selectApp = reactExports.useCallback(
61013
+ (appId) => {
61014
+ updateSettings.mutate({
61015
+ ...settings,
61016
+ defaultOpenApp: appId
61017
+ });
61018
+ },
61019
+ [settings, updateSettings]
61020
+ );
61021
+ const openWith = reactExports.useCallback(
61022
+ async (app) => {
61023
+ if (!isDesktop) return;
61024
+ if (app.id === "finder") {
61025
+ invoke("reveal_in_finder", { path: workspacePath }).catch(() => {
61026
+ });
61027
+ return;
61028
+ }
61029
+ invoke("open_with_app", {
61030
+ path: workspacePath,
61031
+ appName: app.openWith
61032
+ }).catch(() => {
61033
+ });
61034
+ },
61035
+ [workspacePath]
61036
+ );
61037
+ const handleMainClick = reactExports.useCallback(() => {
61038
+ openWith(current);
61039
+ }, [current, openWith]);
61040
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center rounded-md overflow-hidden border border-border/40", children: [
61041
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
61042
+ "button",
61043
+ {
61044
+ type: "button",
61045
+ onClick: handleMainClick,
61046
+ onMouseDown: (e2) => e2.stopPropagation(),
61047
+ className: "flex items-center justify-center px-1 py-0.5 hover:bg-accent/50 transition-colors",
61048
+ title: `Open in ${current.label}`,
61049
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(AppIcon, { id: current.icon, className: "size-5" })
61050
+ }
61051
+ ),
61052
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
61053
+ /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
61054
+ "button",
61055
+ {
61056
+ type: "button",
61057
+ onMouseDown: (e2) => e2.stopPropagation(),
61058
+ className: "flex items-center justify-center px-0.5 py-0.5 hover:bg-accent/50 transition-colors border-l border-border/40",
61059
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3.5 text-muted-foreground" })
61060
+ }
61061
+ ) }),
61062
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuContent, { align: "end", className: "min-w-[180px]", children: [
61063
+ /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuLabel, { children: "Open in" }),
61064
+ options.map((app) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
61065
+ DropdownMenuItem,
61066
+ {
61067
+ onClick: () => {
61068
+ selectApp(app.id);
61069
+ openWith(app);
61070
+ },
61071
+ className: "gap-2",
61072
+ children: [
61073
+ /* @__PURE__ */ jsxRuntimeExports.jsx(AppIcon, { id: app.icon, className: "size-5 shrink-0" }),
61074
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1", children: app.label }),
61075
+ current.id === app.id && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-muted-foreground" })
61076
+ ]
61077
+ },
61078
+ app.id
61079
+ )),
61080
+ onCopyPath && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
61081
+ /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuSeparator, {}),
61082
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onClick: onCopyPath, className: "gap-2", children: [
61083
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-4 shrink-0 ml-0.5" }),
61084
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1", children: "Copy path" })
61085
+ ] })
61086
+ ] })
61087
+ ] })
61088
+ ] })
61089
+ ] });
61090
+ }
61091
+ const DRAG_STYLE = { WebkitAppRegion: "drag" };
61092
+ const NO_DRAG_STYLE = { WebkitAppRegion: "no-drag" };
61093
+ function DesktopTitleBar({
61094
+ title,
61095
+ onToggleSidebar,
61096
+ sidebarCollapsed,
61097
+ workspaceName,
61098
+ workspacePath,
61099
+ onCopyPath,
61100
+ panelItems,
61101
+ hiddenPanels,
61102
+ onTogglePanelVisibility,
61103
+ onGoBack,
61104
+ onGoForward,
61105
+ canGoBack,
61106
+ canGoForward
61107
+ }) {
61108
+ const [appTitle, setAppTitle] = reactExports.useState(title ?? "Band");
61109
+ reactExports.useEffect(() => {
61110
+ if (title) return;
61111
+ if (!isDesktop) return;
61112
+ invoke("get_app_title").then(setAppTitle).catch(() => {
61113
+ });
61114
+ }, [title]);
61115
+ const hasEditorPicker = isDesktop && workspaceName && workspacePath;
61116
+ const hasPanels = workspaceName && panelItems && panelItems.length > 0 && onTogglePanelVisibility;
61117
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
61118
+ "div",
61119
+ {
61120
+ className: "h-[38px] shrink-0 flex items-center justify-center relative border-b border-border",
61121
+ style: DRAG_STYLE,
61122
+ children: [
61123
+ (onToggleSidebar || onGoBack || onGoForward) && /* @__PURE__ */ jsxRuntimeExports.jsxs(
61124
+ "div",
61125
+ {
61126
+ className: `absolute ${isDesktop ? "left-[80px]" : "left-2"} top-1/2 -translate-y-1/2 flex items-center gap-0.5 pointer-events-auto`,
61127
+ style: NO_DRAG_STYLE,
61128
+ children: [
61129
+ onToggleSidebar && /* @__PURE__ */ jsxRuntimeExports.jsx(
61130
+ "button",
61131
+ {
61132
+ type: "button",
61133
+ onClick: onToggleSidebar,
61134
+ className: "flex items-center justify-center rounded p-1 text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors",
61135
+ title: sidebarCollapsed ? "Show sidebar" : "Hide sidebar",
61136
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-5" })
61137
+ }
61138
+ ),
61139
+ (onGoBack || onGoForward) && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
61140
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
61141
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
61142
+ "button",
61143
+ {
61144
+ type: "button",
61145
+ onClick: onGoBack,
61146
+ disabled: !canGoBack,
61147
+ className: "flex items-center justify-center rounded p-1 text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors disabled:opacity-30 disabled:hover:bg-transparent disabled:hover:text-muted-foreground",
61148
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronLeft, { className: "size-5" })
61149
+ }
61150
+ ) }),
61151
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(TooltipContent, { side: "bottom", className: "text-xs", children: [
61152
+ "Back",
61153
+ " ",
61154
+ /* @__PURE__ */ jsxRuntimeExports.jsx("kbd", { className: "ml-1.5 rounded border border-popover-foreground/25 bg-popover-foreground/10 px-1 py-0.5 font-mono text-[14px]", children: "⌘[" })
61155
+ ] })
61156
+ ] }),
61157
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
61158
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
61159
+ "button",
61160
+ {
61161
+ type: "button",
61162
+ onClick: onGoForward,
61163
+ disabled: !canGoForward,
61164
+ className: "flex items-center justify-center rounded p-1 text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors disabled:opacity-30 disabled:hover:bg-transparent disabled:hover:text-muted-foreground",
61165
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-5" })
61166
+ }
61167
+ ) }),
61168
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(TooltipContent, { side: "bottom", className: "text-xs", children: [
61169
+ "Forward",
61170
+ " ",
61171
+ /* @__PURE__ */ jsxRuntimeExports.jsx("kbd", { className: "ml-1.5 rounded border border-popover-foreground/25 bg-popover-foreground/10 px-1 py-0.5 font-mono text-[14px]", children: "⌘]" })
61172
+ ] })
61173
+ ] })
61174
+ ] })
61175
+ ]
61176
+ }
61177
+ ),
61178
+ 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 }),
61179
+ (hasEditorPicker || hasPanels) && /* @__PURE__ */ jsxRuntimeExports.jsxs(
61180
+ "div",
61181
+ {
61182
+ className: "absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1 pointer-events-auto",
61183
+ style: NO_DRAG_STYLE,
61184
+ children: [
61185
+ hasEditorPicker && /* @__PURE__ */ jsxRuntimeExports.jsx(EditorPicker, { workspacePath, onCopyPath }),
61186
+ hasPanels && /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
61187
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
61188
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
61189
+ "button",
61190
+ {
61191
+ type: "button",
61192
+ className: "flex items-center justify-center rounded-md p-1 text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors",
61193
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelTop, { className: "size-5" })
61194
+ }
61195
+ ) }) }),
61196
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", children: "Switch Panel" })
61197
+ ] }),
61198
+ /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuContent, { align: "end", children: panelItems?.map((item) => {
61199
+ const Icon2 = item.icon;
61200
+ const isVisible = !hiddenPanels?.includes(item.id);
61201
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
61202
+ DropdownMenuCheckboxItem,
61203
+ {
61204
+ checked: isVisible,
61205
+ onCheckedChange: () => {
61206
+ onTogglePanelVisibility?.(item.id);
61207
+ },
61208
+ children: [
61209
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "size-4" }),
61210
+ item.label,
61211
+ item.shortcut && /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuShortcut, { children: item.shortcut })
61212
+ ]
61213
+ },
61214
+ item.id
61215
+ );
61216
+ }) })
61217
+ ] })
61218
+ ]
61219
+ }
61220
+ )
61221
+ ]
61222
+ }
61223
+ );
61224
+ }
61225
+ function DesktopDragRegion() {
61226
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-[38px] shrink-0", style: DRAG_STYLE });
61227
+ }
60722
61228
  function parseWorkspaceFromPath(pathname) {
60723
61229
  const match = pathname.match(/^\/workspace\/([^/]+)/);
60724
61230
  return match ? decodeURIComponent(match[1]) : null;
@@ -72153,47 +72659,6 @@ function useRecentFiles(workspaceId) {
72153
72659
  );
72154
72660
  return { recentFiles, trackFile };
72155
72661
  }
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
72662
  const wsClient = createWSClient({
72198
72663
  url: () => {
72199
72664
  const proto2 = location.protocol === "https:" ? "wss:" : "ws:";
@@ -111773,7 +112238,7 @@ const luminance = (color2) => {
111773
112238
  const isLight = (color2) => {
111774
112239
  return luminance(color2) >= 0.5;
111775
112240
  };
111776
- const isDark$1 = (color2) => {
112241
+ const isDark = (color2) => {
111777
112242
  return !isLight(color2);
111778
112243
  };
111779
112244
  const adjustChannel = (color2, channel, amount) => {
@@ -113095,7 +113560,7 @@ var Theme2 = (_b2 = class {
113095
113560
  this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });
113096
113561
  this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });
113097
113562
  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);
113563
+ this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
113099
113564
  this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
113100
113565
  this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
113101
113566
  this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
@@ -113395,7 +113860,7 @@ var Theme22 = (_c = class {
113395
113860
  this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });
113396
113861
  this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });
113397
113862
  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);
113863
+ this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
113399
113864
  this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
113400
113865
  this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
113401
113866
  this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
@@ -113713,7 +114178,7 @@ var Theme3 = (_d = class {
113713
114178
  this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });
113714
114179
  this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });
113715
114180
  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);
114181
+ this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
113717
114182
  this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
113718
114183
  this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
113719
114184
  this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
@@ -114014,7 +114479,7 @@ var Theme4 = (_e2 = class {
114014
114479
  this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });
114015
114480
  this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });
114016
114481
  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);
114482
+ this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
114018
114483
  this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
114019
114484
  this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
114020
114485
  this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
@@ -114335,7 +114800,7 @@ var Theme5 = (_f = class {
114335
114800
  this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });
114336
114801
  this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });
114337
114802
  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);
114803
+ this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);
114339
114804
  this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;
114340
114805
  this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;
114341
114806
  this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;
@@ -131995,12 +132460,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
131995
132460
  registerLayoutLoaders([
131996
132461
  {
131997
132462
  name: "dagre",
131998
- loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-BEGPY_P8.js"), "loader")
132463
+ loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-Df3ty00_.js"), "loader")
131999
132464
  },
132000
132465
  ...[
132001
132466
  {
132002
132467
  name: "cose-bilkent",
132003
- loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-BOuoNr7N.js"), "loader")
132468
+ loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-CxYiUQkd.js"), "loader")
132004
132469
  }
132005
132470
  ]
132006
132471
  ]);
@@ -132439,7 +132904,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
132439
132904
  return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
132440
132905
  }, "detector");
132441
132906
  var loader = /* @__PURE__ */ __name(async () => {
132442
- const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-C2v52EXK.js");
132907
+ const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-CAy_xf6J.js");
132443
132908
  return { id, diagram: diagram2 };
132444
132909
  }, "loader");
132445
132910
  var plugin = {
@@ -132456,7 +132921,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
132456
132921
  return /^\s*graph/.test(txt);
132457
132922
  }, "detector");
132458
132923
  var loader2 = /* @__PURE__ */ __name(async () => {
132459
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DGePuZ_D.js");
132924
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-BkuGyDjs.js");
132460
132925
  return { id: id2, diagram: diagram2 };
132461
132926
  }, "loader");
132462
132927
  var plugin2 = {
@@ -132479,7 +132944,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
132479
132944
  return /^\s*flowchart/.test(txt);
132480
132945
  }, "detector");
132481
132946
  var loader3 = /* @__PURE__ */ __name(async () => {
132482
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DGePuZ_D.js");
132947
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-BkuGyDjs.js");
132483
132948
  return { id: id3, diagram: diagram2 };
132484
132949
  }, "loader");
132485
132950
  var plugin3 = {
@@ -132493,7 +132958,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
132493
132958
  return /^\s*erDiagram/.test(txt);
132494
132959
  }, "detector");
132495
132960
  var loader4 = /* @__PURE__ */ __name(async () => {
132496
- const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-CS94DyiJ.js");
132961
+ const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-CDZKFxtV.js");
132497
132962
  return { id: id4, diagram: diagram2 };
132498
132963
  }, "loader");
132499
132964
  var plugin4 = {
@@ -132507,7 +132972,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
132507
132972
  return /^\s*gitGraph/.test(txt);
132508
132973
  }, "detector");
132509
132974
  var loader5 = /* @__PURE__ */ __name(async () => {
132510
- const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-BygjesE-.js");
132975
+ const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-CQIdCHfs.js");
132511
132976
  return { id: id5, diagram: diagram2 };
132512
132977
  }, "loader");
132513
132978
  var plugin5 = {
@@ -132521,7 +132986,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
132521
132986
  return /^\s*gantt/.test(txt);
132522
132987
  }, "detector");
132523
132988
  var loader6 = /* @__PURE__ */ __name(async () => {
132524
- const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-nyPfcgRT.js");
132989
+ const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-BivmZcb7.js");
132525
132990
  return { id: id6, diagram: diagram2 };
132526
132991
  }, "loader");
132527
132992
  var plugin6 = {
@@ -132535,7 +133000,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
132535
133000
  return /^\s*info/.test(txt);
132536
133001
  }, "detector");
132537
133002
  var loader7 = /* @__PURE__ */ __name(async () => {
132538
- const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-D83vTisF.js");
133003
+ const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-Ba9kta0e.js");
132539
133004
  return { id: id7, diagram: diagram2 };
132540
133005
  }, "loader");
132541
133006
  var info = {
@@ -132548,7 +133013,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
132548
133013
  return /^\s*pie/.test(txt);
132549
133014
  }, "detector");
132550
133015
  var loader8 = /* @__PURE__ */ __name(async () => {
132551
- const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-Bl150d6W.js");
133016
+ const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-YhPnTxVL.js");
132552
133017
  return { id: id8, diagram: diagram2 };
132553
133018
  }, "loader");
132554
133019
  var pie = {
@@ -132561,7 +133026,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
132561
133026
  return /^\s*quadrantChart/.test(txt);
132562
133027
  }, "detector");
132563
133028
  var loader9 = /* @__PURE__ */ __name(async () => {
132564
- const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-ClIy1n9L.js");
133029
+ const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-C_QHaemj.js");
132565
133030
  return { id: id9, diagram: diagram2 };
132566
133031
  }, "loader");
132567
133032
  var plugin7 = {
@@ -132575,7 +133040,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
132575
133040
  return /^\s*xychart(-beta)?/.test(txt);
132576
133041
  }, "detector");
132577
133042
  var loader10 = /* @__PURE__ */ __name(async () => {
132578
- const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-C3ztrSUC.js");
133043
+ const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-CAkP7cKw.js");
132579
133044
  return { id: id10, diagram: diagram2 };
132580
133045
  }, "loader");
132581
133046
  var plugin8 = {
@@ -132589,7 +133054,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
132589
133054
  return /^\s*requirement(Diagram)?/.test(txt);
132590
133055
  }, "detector");
132591
133056
  var loader11 = /* @__PURE__ */ __name(async () => {
132592
- const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-B87j_suL.js");
133057
+ const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-BSt0bNXX.js");
132593
133058
  return { id: id11, diagram: diagram2 };
132594
133059
  }, "loader");
132595
133060
  var plugin9 = {
@@ -132603,7 +133068,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
132603
133068
  return /^\s*sequenceDiagram/.test(txt);
132604
133069
  }, "detector");
132605
133070
  var loader12 = /* @__PURE__ */ __name(async () => {
132606
- const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-DziQuu14.js");
133071
+ const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-DdfWdBp2.js");
132607
133072
  return { id: id12, diagram: diagram2 };
132608
133073
  }, "loader");
132609
133074
  var plugin10 = {
@@ -132620,7 +133085,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
132620
133085
  return /^\s*classDiagram/.test(txt);
132621
133086
  }, "detector");
132622
133087
  var loader13 = /* @__PURE__ */ __name(async () => {
132623
- const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-CbsNfDCL.js");
133088
+ const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-i_tSGvo3.js");
132624
133089
  return { id: id13, diagram: diagram2 };
132625
133090
  }, "loader");
132626
133091
  var plugin11 = {
@@ -132637,7 +133102,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
132637
133102
  return /^\s*classDiagram-v2/.test(txt);
132638
133103
  }, "detector");
132639
133104
  var loader14 = /* @__PURE__ */ __name(async () => {
132640
- const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-CbsNfDCL.js");
133105
+ const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-i_tSGvo3.js");
132641
133106
  return { id: id14, diagram: diagram2 };
132642
133107
  }, "loader");
132643
133108
  var plugin12 = {
@@ -132654,7 +133119,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
132654
133119
  return /^\s*stateDiagram/.test(txt);
132655
133120
  }, "detector");
132656
133121
  var loader15 = /* @__PURE__ */ __name(async () => {
132657
- const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-7wEsr4R_.js");
133122
+ const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-BD7Oj-hn.js");
132658
133123
  return { id: id15, diagram: diagram2 };
132659
133124
  }, "loader");
132660
133125
  var plugin13 = {
@@ -132674,7 +133139,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
132674
133139
  return false;
132675
133140
  }, "detector");
132676
133141
  var loader16 = /* @__PURE__ */ __name(async () => {
132677
- const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-D2VjwPAa.js");
133142
+ const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-e4PXqg0B.js");
132678
133143
  return { id: id16, diagram: diagram2 };
132679
133144
  }, "loader");
132680
133145
  var plugin14 = {
@@ -132688,7 +133153,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
132688
133153
  return /^\s*journey/.test(txt);
132689
133154
  }, "detector");
132690
133155
  var loader17 = /* @__PURE__ */ __name(async () => {
132691
- const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-PbUYIdib.js");
133156
+ const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-DpIqL8B7.js");
132692
133157
  return { id: id17, diagram: diagram2 };
132693
133158
  }, "loader");
132694
133159
  var plugin15 = {
@@ -132755,7 +133220,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
132755
133220
  return false;
132756
133221
  }, "detector");
132757
133222
  var loader18 = /* @__PURE__ */ __name(async () => {
132758
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DGePuZ_D.js");
133223
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-BkuGyDjs.js");
132759
133224
  return { id: id18, diagram: diagram2 };
132760
133225
  }, "loader");
132761
133226
  var plugin16 = {
@@ -132769,7 +133234,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
132769
133234
  return /^\s*timeline/.test(txt);
132770
133235
  }, "detector");
132771
133236
  var loader19 = /* @__PURE__ */ __name(async () => {
132772
- const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI--uelCCOi.js");
133237
+ const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-f7G2avSH.js");
132773
133238
  return { id: id19, diagram: diagram2 };
132774
133239
  }, "loader");
132775
133240
  var plugin17 = {
@@ -132783,7 +133248,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
132783
133248
  return /^\s*mindmap/.test(txt);
132784
133249
  }, "detector");
132785
133250
  var loader20 = /* @__PURE__ */ __name(async () => {
132786
- const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-BdjAKwAK.js");
133251
+ const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-EvNNmlYT.js");
132787
133252
  return { id: id20, diagram: diagram2 };
132788
133253
  }, "loader");
132789
133254
  var plugin18 = {
@@ -132797,7 +133262,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
132797
133262
  return /^\s*kanban/.test(txt);
132798
133263
  }, "detector");
132799
133264
  var loader21 = /* @__PURE__ */ __name(async () => {
132800
- const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-BQSc_qmP.js");
133265
+ const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-DX4-cLBH.js");
132801
133266
  return { id: id21, diagram: diagram2 };
132802
133267
  }, "loader");
132803
133268
  var plugin19 = {
@@ -132811,7 +133276,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
132811
133276
  return /^\s*sankey(-beta)?/.test(txt);
132812
133277
  }, "detector");
132813
133278
  var loader22 = /* @__PURE__ */ __name(async () => {
132814
- const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-Bq18JLF9.js");
133279
+ const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-C7SL1Bn9.js");
132815
133280
  return { id: id22, diagram: diagram2 };
132816
133281
  }, "loader");
132817
133282
  var plugin20 = {
@@ -132825,7 +133290,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
132825
133290
  return /^\s*packet(-beta)?/.test(txt);
132826
133291
  }, "detector");
132827
133292
  var loader23 = /* @__PURE__ */ __name(async () => {
132828
- const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-Bk6j9I_3.js");
133293
+ const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-DjK_qPmk.js");
132829
133294
  return { id: id23, diagram: diagram2 };
132830
133295
  }, "loader");
132831
133296
  var packet = {
@@ -132838,7 +133303,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
132838
133303
  return /^\s*radar-beta/.test(txt);
132839
133304
  }, "detector");
132840
133305
  var loader24 = /* @__PURE__ */ __name(async () => {
132841
- const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-Ywb8tTSL.js");
133306
+ const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-BOdeY2WM.js");
132842
133307
  return { id: id24, diagram: diagram2 };
132843
133308
  }, "loader");
132844
133309
  var radar = {
@@ -132851,7 +133316,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
132851
133316
  return /^\s*block(-beta)?/.test(txt);
132852
133317
  }, "detector");
132853
133318
  var loader25 = /* @__PURE__ */ __name(async () => {
132854
- const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-CsN3W5TR.js");
133319
+ const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-DpPRXIow.js");
132855
133320
  return { id: id25, diagram: diagram2 };
132856
133321
  }, "loader");
132857
133322
  var plugin21 = {
@@ -132865,7 +133330,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
132865
133330
  return /^\s*architecture/.test(txt);
132866
133331
  }, "detector");
132867
133332
  var loader26 = /* @__PURE__ */ __name(async () => {
132868
- const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-CxaRzb-g.js");
133333
+ const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-C_xYzE4-.js");
132869
133334
  return { id: id26, diagram: diagram2 };
132870
133335
  }, "loader");
132871
133336
  var architecture = {
@@ -132879,7 +133344,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
132879
133344
  return /^\s*treemap/.test(txt);
132880
133345
  }, "detector");
132881
133346
  var loader27 = /* @__PURE__ */ __name(async () => {
132882
- const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-DdLXbkDH.js");
133347
+ const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-Cfylqj1t.js");
132883
133348
  return { id: id27, diagram: diagram2 };
132884
133349
  }, "loader");
132885
133350
  var treemap = {
@@ -148557,7 +149022,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
148557
149022
  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
149023
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
148559
149024
  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 }) => {
149025
+ var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-DrUth0S5.js").then((e2) => ({ default: e2.HighlightedCodeBlockBody }))), rt = ({ code: e2, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
148561
149026
  let i2 = reactExports.useMemo(() => e2.replace(cn, ""), [e2]), c2 = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i2.split(`
148562
149027
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i2]);
148563
149028
  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 +149344,7 @@ var Dt = ({ children: e2, className: t2, onDownload: o3, onError: n2 }) => {
148879
149344
  }, []), 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
149345
  };
148881
149346
  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]+)/;
149347
+ var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-dDSIn_hx.js").then((e2) => ({ default: e2.Mermaid }))), Kn = /language-([^\s]+)/;
148883
149348
  function ke(e2, t2) {
148884
149349
  if (!(e2 != null && e2.position || t2 != null && t2.position)) return true;
148885
149350
  if (!(e2 != null && e2.position && (t2 != null && t2.position))) return false;
@@ -149521,7 +149986,9 @@ function FileTabBar({
149521
149986
  canGoBack,
149522
149987
  canGoForward,
149523
149988
  isDirty: isDirtyFn,
149524
- actions
149989
+ actions,
149990
+ treeCollapsed,
149991
+ onToggleTree
149525
149992
  }) {
149526
149993
  const activeRef = reactExports.useRef(null);
149527
149994
  const containerRef = reactExports.useRef(null);
@@ -149579,7 +150046,22 @@ function FileTabBar({
149579
150046
  }, []);
149580
150047
  if (tabs.length === 0) return null;
149581
150048
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
149582
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-8 shrink-0 items-center border-b border-border/50 bg-background", children: [
150049
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "@container flex h-9 shrink-0 items-center border-b border-border/50 bg-background", children: [
150050
+ onToggleTree && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
150051
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
150052
+ "button",
150053
+ {
150054
+ type: "button",
150055
+ onClick: onToggleTree,
150056
+ className: "ml-1 hidden size-7 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors @[16rem]:inline-flex",
150057
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-3.5" })
150058
+ }
150059
+ ) }),
150060
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(TooltipContent, { side: "bottom", className: "text-xs", children: [
150061
+ treeCollapsed ? "Show" : "Hide",
150062
+ " File Explorer"
150063
+ ] })
150064
+ ] }),
149583
150065
  (onGoBack || onGoForward) && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex shrink-0 items-center gap-0.5 px-1", children: [
149584
150066
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
149585
150067
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -149716,10 +150198,6 @@ function FileTabBar({
149716
150198
  }
149717
150199
  function openExternalUrl(url) {
149718
150200
  if (isDesktop) {
149719
- if (isTauri) {
149720
- import("./index-jMSXp5h7.js").then(({ open: open2 }) => open2(url)).catch(() => window.open(url));
149721
- return;
149722
- }
149723
150201
  invoke("open_external", { url }).catch(() => {
149724
150202
  window.open(url, "_blank", "noopener");
149725
150203
  });
@@ -149792,28 +150270,9 @@ function renderMarkdown(content2) {
149792
150270
  }
149793
150271
  );
149794
150272
  }
149795
- function FileTreeToolbar({
149796
- onQuickOpen,
149797
- onSearchFiles,
149798
- treeCollapsed,
149799
- onToggleTree
149800
- }) {
149801
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-8 shrink-0 items-center gap-0.5 border-b border-border/50 px-1.5", children: [
149802
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
149803
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
149804
- "button",
149805
- {
149806
- type: "button",
149807
- onClick: onToggleTree,
149808
- className: "inline-flex size-6 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors",
149809
- children: treeCollapsed ? /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-3.5" })
149810
- }
149811
- ) }),
149812
- /* @__PURE__ */ jsxRuntimeExports.jsxs(TooltipContent, { side: "bottom", className: "text-xs", children: [
149813
- treeCollapsed ? "Show" : "Hide",
149814
- " File Explorer"
149815
- ] })
149816
- ] }),
150273
+ function FileTreeToolbar({ onQuickOpen, onSearchFiles }) {
150274
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-9 shrink-0 items-center gap-0.5 border-b border-border/50 pl-3 pr-1.5", children: [
150275
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium text-muted-foreground", children: "Files" }),
149817
150276
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" }),
149818
150277
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
149819
150278
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -150375,15 +150834,7 @@ function CodeBrowserView({
150375
150834
  saveFileTreeCollapsed(workspaceId, collapsed);
150376
150835
  },
150377
150836
  children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full flex-col overflow-hidden border-r border-border", children: [
150378
- /* @__PURE__ */ jsxRuntimeExports.jsx(
150379
- FileTreeToolbar,
150380
- {
150381
- onQuickOpen,
150382
- onSearchFiles,
150383
- treeCollapsed,
150384
- onToggleTree: toggleTree
150385
- }
150386
- ),
150837
+ /* @__PURE__ */ jsxRuntimeExports.jsx(FileTreeToolbar, { onQuickOpen, onSearchFiles }),
150387
150838
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
150388
150839
  FileBrowser,
150389
150840
  {
@@ -150406,19 +150857,7 @@ function CodeBrowserView({
150406
150857
  }
150407
150858
  ) }),
150408
150859
  /* @__PURE__ */ jsxRuntimeExports.jsx(Yt$1, { id: "file-viewer", minSize: "20%", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex h-full flex-col overflow-hidden", children: [
150409
- treeCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
150410
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
150411
- "button",
150412
- {
150413
- type: "button",
150414
- onClick: toggleTree,
150415
- className: "absolute left-1 top-0 z-10 inline-flex h-9 w-7 items-center justify-center text-muted-foreground hover:text-foreground transition-colors",
150416
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-4" })
150417
- }
150418
- ) }),
150419
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", className: "text-xs", children: "Show File Explorer" })
150420
- ] }),
150421
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: treeCollapsed ? "[&>div]:pl-7" : "", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
150860
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
150422
150861
  FileTabBar,
150423
150862
  {
150424
150863
  workspacePath,
@@ -150431,6 +150870,8 @@ function CodeBrowserView({
150431
150870
  canGoBack: editorHistory.canGoBack,
150432
150871
  canGoForward: editorHistory.canGoForward,
150433
150872
  isDirty: tabState.isDirty,
150873
+ treeCollapsed,
150874
+ onToggleTree: toggleTree,
150434
150875
  actions: isMarkdown ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0.5", children: [
150435
150876
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
150436
150877
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -150458,7 +150899,7 @@ function CodeBrowserView({
150458
150899
  ] })
150459
150900
  ] }) : void 0
150460
150901
  }
150461
- ) }),
150902
+ ),
150462
150903
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 flex-1", children: viewFilePath ? /* @__PURE__ */ jsxRuntimeExports.jsx(
150463
150904
  FileViewer,
150464
150905
  {
@@ -151003,7 +151444,7 @@ const closeTabRef$1 = {
151003
151444
  };
151004
151445
  const RightHeaderActions$1 = React$1.memo(function RightHeaderActions2(props) {
151005
151446
  const groupId = props.group.id;
151006
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center", children: [
151447
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full items-center", children: [
151007
151448
  /* @__PURE__ */ jsxRuntimeExports.jsx(
151008
151449
  "button",
151009
151450
  {
@@ -163589,7 +164030,7 @@ const closeTabRef = {
163589
164030
  const RightHeaderActions = React$1.memo(function RightHeaderActions22(props) {
163590
164031
  const { onAdd: onAdd2, onSplit } = addTabRef.current;
163591
164032
  const groupId = props.group.id;
163592
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center", children: [
164033
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full items-center", children: [
163593
164034
  /* @__PURE__ */ jsxRuntimeExports.jsx(
163594
164035
  "button",
163595
164036
  {
@@ -163923,7 +164364,7 @@ const PANEL_SHORTCUTS = {
163923
164364
  browser: "⌘B"
163924
164365
  };
163925
164366
  const DockviewTerminalContainer = reactExports.lazy(
163926
- () => import("./DockviewTerminalContainer-nurSvNMN.js").then((m2) => ({
164367
+ () => import("./DockviewTerminalContainer-DSwflA0D.js").then((m2) => ({
163927
164368
  default: m2.DockviewTerminalContainer
163928
164369
  }))
163929
164370
  );
@@ -164039,17 +164480,7 @@ function BadgeTab(props) {
164039
164480
  children: [
164040
164481
  Icon2 ? /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "size-4 shrink-0" }) : /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-block size-4 shrink-0", "aria-hidden": true }),
164041
164482
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: title }),
164042
- /* @__PURE__ */ jsxRuntimeExports.jsx(
164043
- "span",
164044
- {
164045
- "aria-hidden": !hasBadge,
164046
- className: cn$2(
164047
- "inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-blue-500/20 px-1.5 text-xs font-medium text-blue-600 dark:text-blue-400 transition-opacity",
164048
- hasBadge ? "opacity-100" : "opacity-0"
164049
- ),
164050
- children: hasBadge ? badge : 0
164051
- }
164052
- )
164483
+ hasBadge && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-blue-500/20 px-1.5 text-xs font-medium text-blue-600 dark:text-blue-400", children: badge })
164053
164484
  ]
164054
164485
  }
164055
164486
  ) });
@@ -164802,316 +165233,6 @@ function DockviewInstanceManager() {
164802
165233
  );
164803
165234
  }) });
164804
165235
  }
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
165236
  const HEALTH_POLL_INTERVAL = 3e4;
165116
165237
  function useTunnel() {
165117
165238
  const adapter2 = useAdapter();
@@ -165399,7 +165520,7 @@ function CronjobCard({
165399
165520
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
165400
165521
  "div",
165401
165522
  {
165402
- className: `flex flex-col gap-2 rounded-lg border border-border/50 bg-card p-4 transition-colors hover:border-border ${!job.enabled ? "opacity-60" : ""}`,
165523
+ className: `flex flex-col gap-2 rounded-lg border-2 border-border/50 p-4 transition-colors hover:border-border ${!job.enabled ? "opacity-60" : ""}`,
165403
165524
  children: [
165404
165525
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start justify-between gap-3", children: [
165405
165526
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 flex-1", children: [
@@ -165945,7 +166066,7 @@ function TaskCard({
165945
166066
  setActing(false);
165946
166067
  }
165947
166068
  }, [task.id, onAction]);
165948
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 rounded-lg border border-border/50 bg-card p-4 transition-colors hover:border-border", children: [
166069
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 rounded-lg border-2 border-border/50 p-4 transition-colors hover:border-border", children: [
165949
166070
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start justify-between gap-3", children: [
165950
166071
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "line-clamp-2 min-w-0 flex-1 text-sm font-medium text-foreground", children: task.prompt }),
165951
166072
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
@@ -167491,10 +167612,10 @@ function extractWorkspaceId(pathname) {
167491
167612
  if (!encoded) return null;
167492
167613
  return decodeURIComponent(encoded);
167493
167614
  }
167615
+ const INITIAL_HISTORY = { stack: [], cursor: -1 };
167494
167616
  function useNavigationHistory(routerNavigate, capabilities2) {
167495
167617
  const pathname = useRouterState({ select: (s2) => s2.location.pathname });
167496
- const stackRef = reactExports.useRef([]);
167497
- const cursorRef = reactExports.useRef(-1);
167618
+ const [history2, setHistory] = reactExports.useState(INITIAL_HISTORY);
167498
167619
  const navigatingRef = reactExports.useRef(false);
167499
167620
  reactExports.useEffect(() => {
167500
167621
  const wsId = extractWorkspaceId(pathname);
@@ -167503,27 +167624,43 @@ function useNavigationHistory(routerNavigate, capabilities2) {
167503
167624
  navigatingRef.current = false;
167504
167625
  return;
167505
167626
  }
167506
- const stack = stackRef.current;
167507
- const cursor = cursorRef.current;
167508
- if (cursor >= 0 && stack[cursor] === wsId) return;
167509
- stackRef.current = [...stack.slice(0, cursor + 1), wsId];
167510
- cursorRef.current = stackRef.current.length - 1;
167627
+ setHistory((prev2) => {
167628
+ if (prev2.cursor >= 0 && prev2.stack[prev2.cursor] === wsId) return prev2;
167629
+ const stack = [...prev2.stack.slice(0, prev2.cursor + 1), wsId];
167630
+ return { stack, cursor: stack.length - 1 };
167631
+ });
167511
167632
  }, [pathname]);
167512
167633
  const goBack = reactExports.useCallback(() => {
167513
- if (cursorRef.current <= 0) return;
167514
- cursorRef.current -= 1;
167515
- navigatingRef.current = true;
167516
- const wsId = stackRef.current[cursorRef.current];
167517
- const href = capabilities2.getWorkspaceHref?.(wsId);
167518
- if (href) routerNavigate(href);
167634
+ let didMove = false;
167635
+ let targetWsId;
167636
+ setHistory((prev2) => {
167637
+ if (prev2.cursor <= 0) return prev2;
167638
+ didMove = true;
167639
+ const cursor = prev2.cursor - 1;
167640
+ targetWsId = prev2.stack[cursor];
167641
+ return { stack: prev2.stack, cursor };
167642
+ });
167643
+ if (didMove && targetWsId) {
167644
+ navigatingRef.current = true;
167645
+ const href = capabilities2.getWorkspaceHref?.(targetWsId);
167646
+ if (href) routerNavigate(href);
167647
+ }
167519
167648
  }, [routerNavigate, capabilities2]);
167520
167649
  const goForward = reactExports.useCallback(() => {
167521
- if (cursorRef.current >= stackRef.current.length - 1) return;
167522
- cursorRef.current += 1;
167523
- navigatingRef.current = true;
167524
- const wsId = stackRef.current[cursorRef.current];
167525
- const href = capabilities2.getWorkspaceHref?.(wsId);
167526
- if (href) routerNavigate(href);
167650
+ let didMove = false;
167651
+ let targetWsId;
167652
+ setHistory((prev2) => {
167653
+ if (prev2.cursor >= prev2.stack.length - 1) return prev2;
167654
+ didMove = true;
167655
+ const cursor = prev2.cursor + 1;
167656
+ targetWsId = prev2.stack[cursor];
167657
+ return { stack: prev2.stack, cursor };
167658
+ });
167659
+ if (didMove && targetWsId) {
167660
+ navigatingRef.current = true;
167661
+ const href = capabilities2.getWorkspaceHref?.(targetWsId);
167662
+ if (href) routerNavigate(href);
167663
+ }
167527
167664
  }, [routerNavigate, capabilities2]);
167528
167665
  reactExports.useEffect(() => {
167529
167666
  const handler = (e2) => {
@@ -167537,6 +167674,12 @@ function useNavigationHistory(routerNavigate, capabilities2) {
167537
167674
  window.addEventListener("keydown", handler, true);
167538
167675
  return () => window.removeEventListener("keydown", handler, true);
167539
167676
  }, [goBack, goForward]);
167677
+ return {
167678
+ goBack,
167679
+ goForward,
167680
+ canGoBack: history2.cursor > 0,
167681
+ canGoForward: history2.cursor >= 0 && history2.cursor < history2.stack.length - 1
167682
+ };
167540
167683
  }
167541
167684
  const ZOOM_LEVEL_KEY = "band:zoom-level";
167542
167685
  const DEFAULT_ZOOM = 1;
@@ -167628,7 +167771,7 @@ function saveSidebarWidth(width) {
167628
167771
  }
167629
167772
  const SIDEBAR_MIN_SIZE = "15rem";
167630
167773
  const SIDEBAR_MAX_SIZE = "60%";
167631
- const adapter = isDesktop ? new TauriDashboardAdapter() : new WebDashboardAdapter();
167774
+ const adapter = isDesktop ? new DesktopDashboardAdapter() : new WebDashboardAdapter();
167632
167775
  const capabilities = isDesktop ? new NativeShellCapabilities() : new WebCapabilities();
167633
167776
  const Route$8 = createRootRoute({
167634
167777
  head: () => ({
@@ -167641,14 +167784,14 @@ const Route$8 = createRootRoute({
167641
167784
  { title: "Band" },
167642
167785
  { name: "apple-mobile-web-app-capable", content: "yes" },
167643
167786
  { name: "apple-mobile-web-app-status-bar-style", content: "black-translucent" },
167644
- { name: "theme-color", content: "#181818" }
167787
+ { name: "theme-color", content: "#1e1e1e" }
167645
167788
  ]
167646
167789
  }),
167647
167790
  component: RootLayout,
167648
167791
  notFoundComponent: NotFound
167649
167792
  });
167650
167793
  function NotFound() {
167651
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-dvh flex-col items-center justify-center gap-4 p-8 text-center", children: [
167794
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full flex-col items-center justify-center gap-4 p-8 text-center", children: [
167652
167795
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-4xl font-bold", children: "404" }),
167653
167796
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Page not found" }),
167654
167797
  /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/", className: "text-sm text-primary underline", children: "Back to dashboard" })
@@ -167739,7 +167882,7 @@ function AppShell() {
167739
167882
  };
167740
167883
  }, [router2]);
167741
167884
  const routerNavigate = reactExports.useCallback((href) => router2.navigate({ to: href }), [router2]);
167742
- useNavigationHistory(routerNavigate, capabilities);
167885
+ const navigationHistory = useNavigationHistory(routerNavigate, capabilities);
167743
167886
  useZoom();
167744
167887
  const savedWidth = loadSidebarWidth();
167745
167888
  const defaultLayout = savedWidth ? { sidebar: savedWidth, main: 100 - savedWidth } : void 0;
@@ -167805,9 +167948,9 @@ function AppShell() {
167805
167948
  if (!useDesktopLayout) {
167806
167949
  return /* @__PURE__ */ jsxRuntimeExports.jsx(Outlet, {});
167807
167950
  }
167808
- 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
- isDesktop && /* @__PURE__ */ jsxRuntimeExports.jsx(
167810
- TauriTitleBar,
167951
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ToolbarOverflowProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col h-full w-full overflow-hidden bg-background text-foreground", children: [
167952
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
167953
+ DesktopTitleBar,
167811
167954
  {
167812
167955
  onToggleSidebar: toggleSidebar,
167813
167956
  sidebarCollapsed,
@@ -167816,7 +167959,11 @@ function AppShell() {
167816
167959
  onCopyPath: activeWorkspaceId ? handleCopyPath : void 0,
167817
167960
  panelItems: activeWorkspaceId ? panelItems : void 0,
167818
167961
  hiddenPanels: activeWorkspaceId ? hiddenPanels : void 0,
167819
- onTogglePanelVisibility: activeWorkspaceId ? handleTogglePanelVisibility : void 0
167962
+ onTogglePanelVisibility: activeWorkspaceId ? handleTogglePanelVisibility : void 0,
167963
+ onGoBack: navigationHistory.goBack,
167964
+ onGoForward: navigationHistory.goForward,
167965
+ canGoBack: navigationHistory.canGoBack,
167966
+ canGoForward: navigationHistory.canGoForward
167820
167967
  }
167821
167968
  ),
167822
167969
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 min-h-0 overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -167876,11 +168023,11 @@ function RootLayout() {
167876
168023
  ] })
167877
168024
  ] });
167878
168025
  }
167879
- const $$splitComponentImporter$7 = () => import("./index-CnQ4qso3.js");
168026
+ const $$splitComponentImporter$7 = () => import("./index-Dn5q9HW4.js");
167880
168027
  const Route$7 = createFileRoute("/")({
167881
168028
  component: lazyRouteComponent($$splitComponentImporter$7, "component")
167882
168029
  });
167883
- const $$splitComponentImporter$6 = () => import("./workspace._workspaceId-Bs8UzdnH.js");
168030
+ const $$splitComponentImporter$6 = () => import("./workspace._workspaceId-CR4TOS5A.js");
167884
168031
  const Route$6 = createFileRoute("/workspace/$workspaceId")({
167885
168032
  component: lazyRouteComponent($$splitComponentImporter$6, "component")
167886
168033
  });
@@ -167899,11 +168046,11 @@ const FindInFileContext = reactExports.createContext({
167899
168046
  function useFindInFileContext() {
167900
168047
  return reactExports.useContext(FindInFileContext);
167901
168048
  }
167902
- const $$splitComponentImporter$5 = () => import("./workspace._workspaceId.index-CM2nPNp3.js");
168049
+ const $$splitComponentImporter$5 = () => import("./workspace._workspaceId.index-alkhfxK3.js");
167903
168050
  const Route$5 = createFileRoute("/workspace/$workspaceId/")({
167904
168051
  component: lazyRouteComponent($$splitComponentImporter$5, "component")
167905
168052
  });
167906
- const $$splitComponentImporter$4 = () => import("./workspace._workspaceId.terminal-ByrTEXV_.js");
168053
+ const $$splitComponentImporter$4 = () => import("./workspace._workspaceId.terminal-BvpiNe_s.js");
167907
168054
  const Route$4 = createFileRoute("/workspace/$workspaceId/terminal")({
167908
168055
  component: lazyRouteComponent($$splitComponentImporter$4, "component")
167909
168056
  });
@@ -167911,15 +168058,15 @@ const $$splitComponentImporter$3 = () => import("./workspace._workspaceId.code-C
167911
168058
  const Route$3 = createFileRoute("/workspace/$workspaceId/code")({
167912
168059
  component: lazyRouteComponent($$splitComponentImporter$3, "component")
167913
168060
  });
167914
- const $$splitComponentImporter$2 = () => import("./workspace._workspaceId.changes-BWu2NrZR.js");
168061
+ const $$splitComponentImporter$2 = () => import("./workspace._workspaceId.changes-B7PK-I72.js");
167915
168062
  const Route$2 = createFileRoute("/workspace/$workspaceId/changes")({
167916
168063
  component: lazyRouteComponent($$splitComponentImporter$2, "component")
167917
168064
  });
167918
- const $$splitComponentImporter$1 = () => import("./workspace._workspaceId.code.index-D9xieBbz.js");
168065
+ const $$splitComponentImporter$1 = () => import("./workspace._workspaceId.code.index-CLRAQ6Pf.js");
167919
168066
  const Route$1 = createFileRoute("/workspace/$workspaceId/code/")({
167920
168067
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
167921
168068
  });
167922
- const $$splitComponentImporter = () => import("./workspace._workspaceId.code._-DKgsvYy3.js");
168069
+ const $$splitComponentImporter = () => import("./workspace._workspaceId.code._-CA9dP_-G.js");
167923
168070
  const Route2 = createFileRoute("/workspace/$workspaceId/code/$")({
167924
168071
  component: lazyRouteComponent($$splitComponentImporter, "component")
167925
168072
  });
@@ -168049,7 +168196,7 @@ export {
168049
168196
  curveBasis as aN,
168050
168197
  generateId$1 as aO,
168051
168198
  setupGraphViewbox as aP,
168052
- isDark$1 as aQ,
168199
+ isDark as aQ,
168053
168200
  lighten as aR,
168054
168201
  darken as aS,
168055
168202
  commonDb_exports as aT,
@@ -168096,7 +168243,7 @@ export {
168096
168243
  FolderOpen as b5,
168097
168244
  Route$6 as b6,
168098
168245
  useDashboardStore as b7,
168099
- TauriDragRegion as b8,
168246
+ DesktopDragRegion as b8,
168100
168247
  ArrowLeft as b9,
168101
168248
  useQuery as bA,
168102
168249
  DockviewReact as bB,