@band-app/server 0.26.1 → 0.27.1

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 (163) hide show
  1. package/dist/client/assets/{DockviewBrowserContainer-CNieygqn.js → DockviewBrowserContainer-BT0Xf-Qd.js} +1 -1
  2. package/dist/client/assets/{DockviewTerminalContainer-rpSQamnG.js → DockviewTerminalContainer-Cfq2Horm.js} +2 -2
  3. package/dist/client/assets/{TerminalPanel-BSSgNpJl.js → TerminalPanel-BmTjgsHC.js} +1 -1
  4. package/dist/client/assets/{_basePickBy-D4sc4sgx.js → _basePickBy-C5e3lPfw.js} +1 -1
  5. package/dist/client/assets/_baseUniq-BWawrl1m.js +1 -0
  6. package/dist/client/assets/{arc-BP7O8Ofj.js → arc-kL4UMvqY.js} +1 -1
  7. package/dist/client/assets/{architectureDiagram-VXUJARFQ-CLeIf9de.js → architectureDiagram-VXUJARFQ-CgqIs59Y.js} +1 -1
  8. package/dist/client/assets/{blockDiagram-VD42YOAC-GF1d7qvY.js → blockDiagram-VD42YOAC-CMeufhUZ.js} +1 -1
  9. package/dist/client/assets/{c4Diagram-YG6GDRKO-CPOD-mTp.js → c4Diagram-YG6GDRKO-CAuYwvwS.js} +1 -1
  10. package/dist/client/assets/channel-C29TlOk_.js +1 -0
  11. package/dist/client/assets/{chunk-4BX2VUAB-lgknUVTn.js → chunk-4BX2VUAB-6Xmnr9re.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-BZZgpdJp.js → chunk-55IACEB6-Dyqy3jY2.js} +1 -1
  13. package/dist/client/assets/{chunk-B4BG7PRW-D5j_7n78.js → chunk-B4BG7PRW-CHkzDkkl.js} +1 -1
  14. package/dist/client/assets/{chunk-DI55MBZ5-CNWAKrv-.js → chunk-DI55MBZ5-Bm8dHcM7.js} +1 -1
  15. package/dist/client/assets/{chunk-FMBD7UC4-C4ZfwGxd.js → chunk-FMBD7UC4-DUSTPPko.js} +1 -1
  16. package/dist/client/assets/{chunk-QN33PNHL-B-1Abtg1.js → chunk-QN33PNHL-lANEHpc4.js} +1 -1
  17. package/dist/client/assets/{chunk-QZHKN3VN-BpzKtAWD.js → chunk-QZHKN3VN-CdOUQvqm.js} +1 -1
  18. package/dist/client/assets/{chunk-TZMSLE5B-SXcvrXdW.js → chunk-TZMSLE5B-5WqV_fuV.js} +1 -1
  19. package/dist/client/assets/classDiagram-2ON5EDUG-Ce71vgj4.js +1 -0
  20. package/dist/client/assets/classDiagram-v2-WZHVMYZB-Ce71vgj4.js +1 -0
  21. package/dist/client/assets/clone-DV3pdAAp.js +1 -0
  22. package/dist/client/assets/{cose-bilkent-S5V4N54A-Bct5sd16.js → cose-bilkent-S5V4N54A-DysgQPxt.js} +1 -1
  23. package/dist/client/assets/{dagre-6UL2VRFP-DLF3mura.js → dagre-6UL2VRFP-Dlzo9Msc.js} +1 -1
  24. package/dist/client/assets/{diagram-PSM6KHXK-ChWVmXI7.js → diagram-PSM6KHXK-BYb3WSVe.js} +1 -1
  25. package/dist/client/assets/{diagram-QEK2KX5R-DhzUuHM4.js → diagram-QEK2KX5R-DQ47fOtM.js} +1 -1
  26. package/dist/client/assets/{diagram-S2PKOQOG-D1i0mdIg.js → diagram-S2PKOQOG-8W5mRzVZ.js} +1 -1
  27. package/dist/client/assets/{erDiagram-Q2GNP2WA-BRj386XH.js → erDiagram-Q2GNP2WA-mgQREmQi.js} +1 -1
  28. package/dist/client/assets/{flowDiagram-NV44I4VS-DStEWZIF.js → flowDiagram-NV44I4VS-B3xMnHpg.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-JELNMOA3-B9PBn8dz.js → ganttDiagram-JELNMOA3-uAMwC_fw.js} +1 -1
  30. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-laJAIbJ3.js → gitGraphDiagram-V2S2FVAM-CMzRWjLs.js} +1 -1
  31. package/dist/client/assets/{graph-CbQhcBO1.js → graph-BmHmHBlj.js} +1 -1
  32. package/dist/client/assets/{highlighted-body-B3W2YXNL-DBxcPCX_.js → highlighted-body-B3W2YXNL-CktG8_2q.js} +1 -1
  33. package/dist/client/assets/{index-CK16S7B-.js → index-7ksyuzec.js} +1 -1
  34. package/dist/client/assets/{index-Ct5D5rHM.js → index-B5eLE5g9.js} +1 -1
  35. package/dist/client/assets/{index-D7C86bYw.js → index-BAkL31T9.js} +1 -1
  36. package/dist/client/assets/{index-CWLwMHnR.js → index-BVM1YUvk.js} +1 -1
  37. package/dist/client/assets/{index-DsEib-PT.js → index-Bl_qcgmA.js} +1 -1
  38. package/dist/client/assets/{index-Cd26dS4P.js → index-C17JkYK9.js} +1 -1
  39. package/dist/client/assets/{index-Dev2D0I9.js → index-CE-YdiiQ.js} +1 -1
  40. package/dist/client/assets/{index-86TW9gUX.js → index-CO5pYvVV.js} +1 -1
  41. package/dist/client/assets/{index-C5U256M6.js → index-CVhvgW2f.js} +1 -1
  42. package/dist/client/assets/{index-9XCTqmje.js → index-CmBpodpp.js} +1 -1
  43. package/dist/client/assets/{index-CLa-0ZwC.js → index-CuFyr77F.js} +1 -1
  44. package/dist/client/assets/{index-CfO5yuew.js → index-CyIB4sGJ.js} +1 -1
  45. package/dist/client/assets/{index-BqMDNoZp.js → index-DDjGWZqJ.js} +1 -1
  46. package/dist/client/assets/{index-BzwcSYCa.js → index-DOcXD6ZB.js} +1 -1
  47. package/dist/client/assets/{index-Cd5F9rkU.js → index-DWrfvgIb.js} +1 -1
  48. package/dist/client/assets/{index-DGvFFhe0.js → index-Db-V2kYr.js} +1 -1
  49. package/dist/client/assets/{index-cRf4PoQf.js → index-Dt1N14f0.js} +1 -1
  50. package/dist/client/assets/{index-CyO2GJFA.js → index-cr1Bo2U9.js} +1 -1
  51. package/dist/client/assets/{infoDiagram-HS3SLOUP-0QLwbPV-.js → infoDiagram-HS3SLOUP-BfGNNAH4.js} +1 -1
  52. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-xGdny9DO.js → journeyDiagram-XKPGCS4Q-Ds8ah4VH.js} +1 -1
  53. package/dist/client/assets/{kanban-definition-3W4ZIXB7-Don0Okra.js → kanban-definition-3W4ZIXB7-C8PaE0y4.js} +1 -1
  54. package/dist/client/assets/{layout-WN5NQdX3.js → layout-D5O5pfhp.js} +1 -1
  55. package/dist/client/assets/{main-Bbh731ex.js → main-CWjuaHE2.js} +221 -221
  56. package/dist/client/assets/main-Di-3Gk2i.css +1 -0
  57. package/dist/client/assets/{mindmap-definition-VGOIOE7T-CWF6i4Zi.js → mindmap-definition-VGOIOE7T-DmB2qgHj.js} +1 -1
  58. package/dist/client/assets/{pieDiagram-ADFJNKIX-CXk9oMu_.js → pieDiagram-ADFJNKIX-BhZD1Pjg.js} +1 -1
  59. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-D2s0zA4_.js → quadrantDiagram-AYHSOK5B-Dm615XC6.js} +1 -1
  60. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-B5g3eZDa.js → requirementDiagram-UZGBJVZJ-ezxSkCjp.js} +1 -1
  61. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-BKYy9nLE.js → sankeyDiagram-TZEHDZUN-NLwGtj2u.js} +1 -1
  62. package/dist/client/assets/{sequenceDiagram-WL72ISMW-Of-7JsaP.js → sequenceDiagram-WL72ISMW-D8C_g8jv.js} +1 -1
  63. package/dist/client/assets/{square-terminal-wqR_rG8g.js → square-terminal-DAMJq3wS.js} +1 -1
  64. package/dist/client/assets/{stateDiagram-FKZM4ZOC-CLygxzeu.js → stateDiagram-FKZM4ZOC-CkXjpkTE.js} +1 -1
  65. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-Cp2lp6Ub.js +1 -0
  66. package/dist/client/assets/{timeline-definition-IT6M3QCI-HEdTZ9lg.js → timeline-definition-IT6M3QCI-DyPfcP9V.js} +1 -1
  67. package/dist/client/assets/{treemap-GDKQZRPO-BLCSYUuQ.js → treemap-GDKQZRPO-rH_7Hpkq.js} +1 -1
  68. package/dist/client/assets/workspace._workspaceId-CEIguAmj.js +2 -0
  69. package/dist/client/assets/{workspace._workspaceId-CvIXlcVP.js → workspace._workspaceId-COpAN_jv.js} +1 -1
  70. package/dist/client/assets/{xychartDiagram-PRI3JC2R-Da4m2pn4.js → xychartDiagram-PRI3JC2R-DkwSq2gu.js} +1 -1
  71. package/dist/migrations/20260707132201_moaning_cerebro/migration.sql +2 -0
  72. package/dist/migrations/20260707132201_moaning_cerebro/snapshot.json +1187 -0
  73. package/dist/openapi.json +69 -15
  74. package/dist/server/assets/{DockviewBrowserContainer-BxukCnRj.js → DockviewBrowserContainer-CxzZY1qq.js} +1 -1
  75. package/dist/server/assets/{DockviewTerminalContainer-DQYYK-79.js → DockviewTerminalContainer-BIJPTTun.js} +3 -3
  76. package/dist/server/assets/{TerminalPanel-TU2tfPvh.js → TerminalPanel-kEsEEcuZ.js} +1 -1
  77. package/dist/server/assets/{_basePickBy-BSdtfHB0.js → _basePickBy-n4A54Vhz.js} +2 -2
  78. package/dist/server/assets/{_baseUniq-DkSqb3YR.js → _baseUniq-BuxfXYiw.js} +1 -1
  79. package/dist/server/assets/_tanstack-start-manifest_v-CbRnkjTe.js +4 -0
  80. package/dist/server/assets/{arc-DxGkupwT.js → arc-C0mFTnQ4.js} +1 -1
  81. package/dist/server/assets/{architecture-7HQA4BMR-N3irVT54.js → architecture-7HQA4BMR-D3tywrA5.js} +6 -6
  82. package/dist/server/assets/{architectureDiagram-VXUJARFQ-B0sHbG9y.js → architectureDiagram-VXUJARFQ-B9hdFdgc.js} +6 -6
  83. package/dist/server/assets/{blockDiagram-VD42YOAC-1FtDdqBo.js → blockDiagram-VD42YOAC-Bjf6umts.js} +6 -6
  84. package/dist/server/assets/{c4Diagram-YG6GDRKO-Bw9IfZMM.js → c4Diagram-YG6GDRKO-B1Go7qzd.js} +2 -2
  85. package/dist/server/assets/{channel-D4IKgr-x.js → channel-Dqy7JuGG.js} +1 -1
  86. package/dist/server/assets/{chunk-4BX2VUAB-ByMuI7Fp.js → chunk-4BX2VUAB-DABywcCU.js} +1 -1
  87. package/dist/server/assets/{chunk-55IACEB6-BAdInBZF.js → chunk-55IACEB6-WikJyoE2.js} +1 -1
  88. package/dist/server/assets/{chunk-B4BG7PRW-C8vV9ouR.js → chunk-B4BG7PRW-CUCrrQLt.js} +4 -4
  89. package/dist/server/assets/{chunk-DI55MBZ5-BnPjxwDt.js → chunk-DI55MBZ5-CAaqT17X.js} +3 -3
  90. package/dist/server/assets/{chunk-FMBD7UC4-DxER1-MJ.js → chunk-FMBD7UC4-CX_v_cac.js} +1 -1
  91. package/dist/server/assets/{chunk-QN33PNHL-DzFGKjvS.js → chunk-QN33PNHL-VLbTMtxB.js} +1 -1
  92. package/dist/server/assets/{chunk-QZHKN3VN-DKIreZRT.js → chunk-QZHKN3VN-QB2sRPFp.js} +1 -1
  93. package/dist/server/assets/{chunk-TZMSLE5B-Dyw_E6V-.js → chunk-TZMSLE5B-C9MxtgP2.js} +1 -1
  94. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-Bu-X2Gbw.js → classDiagram-2ON5EDUG-UX-9XQ-6.js} +5 -5
  95. package/dist/server/assets/{classDiagram-2ON5EDUG-Bu-X2Gbw.js → classDiagram-v2-WZHVMYZB-UX-9XQ-6.js} +5 -5
  96. package/dist/server/assets/{clone-CwBTz6wc.js → clone-Jt6nkb9-.js} +1 -1
  97. package/dist/server/assets/{cose-bilkent-S5V4N54A-BsFFjtud.js → cose-bilkent-S5V4N54A-j4JEpP33.js} +1 -1
  98. package/dist/server/assets/{dagre-6UL2VRFP-CdgGxkBj.js → dagre-6UL2VRFP-CRjo2D7K.js} +6 -6
  99. package/dist/server/assets/{diagram-PSM6KHXK-C-LWq-ju.js → diagram-PSM6KHXK-CdcM_CoU.js} +7 -7
  100. package/dist/server/assets/{diagram-QEK2KX5R-CFa3sLiJ.js → diagram-QEK2KX5R-DXbEv4yb.js} +6 -6
  101. package/dist/server/assets/{diagram-S2PKOQOG-CyAHBi5H.js → diagram-S2PKOQOG-Bzc1B5Be.js} +6 -6
  102. package/dist/server/assets/{erDiagram-Q2GNP2WA-COrhvUZD.js → erDiagram-Q2GNP2WA-Gt2ujaN1.js} +4 -4
  103. package/dist/server/assets/{flowDiagram-NV44I4VS-DxR9v2a8.js → flowDiagram-NV44I4VS-CONOX4ru.js} +5 -5
  104. package/dist/server/assets/{ganttDiagram-JELNMOA3-COoz3lCc.js → ganttDiagram-JELNMOA3-LO1CZhBF.js} +1 -1
  105. package/dist/server/assets/{gitGraph-G5XIXVHT-BtVXZr1d.js → gitGraph-G5XIXVHT-CYME5GNN.js} +6 -6
  106. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-DrH_1hhd.js → gitGraphDiagram-V2S2FVAM-JAQOltND.js} +7 -7
  107. package/dist/server/assets/{graph-BqKB55Uo.js → graph-DDw3y63Y.js} +2 -2
  108. package/dist/server/assets/{highlighted-body-B3W2YXNL-C6VVTevi.js → highlighted-body-B3W2YXNL-Bl56ZglV.js} +1 -1
  109. package/dist/server/assets/{index-BUnwtpbx.js → index-B9mYm2Iv.js} +3 -3
  110. package/dist/server/assets/{index-BHRz1U1c.js → index-BDXNcXpX.js} +2 -2
  111. package/dist/server/assets/{index-Cdu8cpPJ.js → index-BFxM6c1Y.js} +2 -2
  112. package/dist/server/assets/{index-Bkx5Foei.js → index-BFyODGGJ.js} +4 -4
  113. package/dist/server/assets/{index-ChJXmItC.js → index-BPA-V89G.js} +2 -2
  114. package/dist/server/assets/{index-DAqzmsPy.js → index-BVjGe10C.js} +1 -1
  115. package/dist/server/assets/{index-CQ12PKsH.js → index-BuqNnUeC.js} +2 -2
  116. package/dist/server/assets/{index-DeNkOFC0.js → index-CEHzgT6Q.js} +5 -5
  117. package/dist/server/assets/{index-nrGOopfX.js → index-CGdiDxDM.js} +2 -2
  118. package/dist/server/assets/{index-Dnp4nLLc.js → index-CX4yKGY7.js} +2 -2
  119. package/dist/server/assets/{index-BvmYCz2n.js → index-CXNHt9Li.js} +2 -2
  120. package/dist/server/assets/{index-IxUUG90S.js → index-CZITjlKR.js} +1 -1
  121. package/dist/server/assets/{index-FVQ1p-ZQ.js → index-D022D6yP.js} +5 -5
  122. package/dist/server/assets/{index-CkbMi8ML.js → index-DRNvWTdD.js} +2 -2
  123. package/dist/server/assets/{index-DIZ-5H2r.js → index-DsR_UKQx.js} +3 -3
  124. package/dist/server/assets/{index-DLOoQUcR.js → index-DsyhmvSr.js} +2 -2
  125. package/dist/server/assets/{index-DgpTNIz9.js → index-Dvcd3xwL.js} +2 -2
  126. package/dist/server/assets/{index-fzh31gPI.js → index-jCxJanyY.js} +2 -2
  127. package/dist/server/assets/{info-VBDWY6EO-C1EJd9ah.js → info-VBDWY6EO-DnY-exPR.js} +6 -6
  128. package/dist/server/assets/{infoDiagram-HS3SLOUP-BgR_JFRD.js → infoDiagram-HS3SLOUP-wZZ4hEZ9.js} +5 -5
  129. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-TInLDEBY.js → journeyDiagram-XKPGCS4Q-CBD0jzUu.js} +4 -4
  130. package/dist/server/assets/{kanban-definition-3W4ZIXB7-Ds9-Rky6.js → kanban-definition-3W4ZIXB7-9SKGIQ4n.js} +2 -2
  131. package/dist/server/assets/{layout-02chZ-oO.js → layout-C-xcL44a.js} +4 -4
  132. package/dist/server/assets/{mermaid-3ZIDBTTL-CF0njLRi.js → mermaid-3ZIDBTTL-DyXquuLm.js} +1 -1
  133. package/dist/server/assets/{mermaid-parser.core-DGyqTX8L.js → mermaid-parser.core-DruUthGx.js} +11 -11
  134. package/dist/server/assets/{mindmap-definition-VGOIOE7T-B2VHBojz.js → mindmap-definition-VGOIOE7T-jjxDAUjJ.js} +3 -3
  135. package/dist/server/assets/{packet-DYOGHKS2-BPQQ4vpy.js → packet-DYOGHKS2-CyXoagV-.js} +6 -6
  136. package/dist/server/assets/{pie-VRWISCQL-D_ISlmZV.js → pie-VRWISCQL-1fjbRV6a.js} +6 -6
  137. package/dist/server/assets/{pieDiagram-ADFJNKIX-DfLOLRYh.js → pieDiagram-ADFJNKIX-5evhP6Hm.js} +7 -7
  138. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-C-S0tUnS.js → quadrantDiagram-AYHSOK5B-Cg2-kPDC.js} +1 -1
  139. package/dist/server/assets/{radar-ZZBFDIW7-Btz0_zMX.js → radar-ZZBFDIW7-DCBXoSHQ.js} +6 -6
  140. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-CX-LPkZO.js → requirementDiagram-UZGBJVZJ-DjOyZt1t.js} +3 -3
  141. package/dist/server/assets/{router-6QHcrvmQ.js → router-BtsNvWXM.js} +766 -615
  142. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-C3bzmTeJ.js → sankeyDiagram-TZEHDZUN-Bun0ZHSn.js} +1 -1
  143. package/dist/server/assets/{sequenceDiagram-WL72ISMW-BlZBlq8N.js → sequenceDiagram-WL72ISMW-fn9HXFXZ.js} +3 -3
  144. package/dist/server/assets/{square-terminal-1wS601vv.js → square-terminal-CDDUQc-O.js} +1 -1
  145. package/dist/server/assets/{stateDiagram-FKZM4ZOC-BIRMcaiS.js → stateDiagram-FKZM4ZOC-Ct7juWxD.js} +8 -8
  146. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-D2NYWxQw.js → stateDiagram-v2-4FDKWEC3-Bp505XWR.js} +4 -4
  147. package/dist/server/assets/{timeline-definition-IT6M3QCI-BiY_XUAp.js → timeline-definition-IT6M3QCI-Dw8oeGiX.js} +2 -2
  148. package/dist/server/assets/{treemap-GDKQZRPO-CYGEAd8a.js → treemap-GDKQZRPO-BdIdWFqZ.js} +6 -6
  149. package/dist/server/assets/{workspace._workspaceId-MLWQzLSj.js → workspace._workspaceId-GwRuI3oS.js} +10 -4
  150. package/dist/server/assets/{workspace._workspaceId-CHMs1pW4.js → workspace._workspaceId-joQQNCnQ.js} +1 -1
  151. package/dist/server/assets/{xychartDiagram-PRI3JC2R-Cv8buTCr.js → xychartDiagram-PRI3JC2R-BRCOemWX.js} +1 -1
  152. package/dist/server/server.js +2 -2
  153. package/dist/start-server.mjs +1398 -1140
  154. package/package.json +4 -4
  155. package/dist/client/assets/_baseUniq-CExXcLYT.js +0 -1
  156. package/dist/client/assets/channel-BAHGob6X.js +0 -1
  157. package/dist/client/assets/classDiagram-2ON5EDUG-_5AM6YM0.js +0 -1
  158. package/dist/client/assets/classDiagram-v2-WZHVMYZB-_5AM6YM0.js +0 -1
  159. package/dist/client/assets/clone-C12DbMN-.js +0 -1
  160. package/dist/client/assets/main-DpPgdfV2.css +0 -1
  161. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-D3J4rLvX.js +0 -1
  162. package/dist/client/assets/workspace._workspaceId-9mP5lL7t.js +0 -2
  163. package/dist/server/assets/_tanstack-start-manifest_v-CjnZwsJN.js +0 -4
@@ -1226,7 +1226,7 @@ const createLucideIcon = (iconName, iconNode) => {
1226
1226
  Component.displayName = toPascalCase(iconName);
1227
1227
  return Component;
1228
1228
  };
1229
- const __iconNode$1t = [
1229
+ const __iconNode$1s = [
1230
1230
  [
1231
1231
  "path",
1232
1232
  {
@@ -1235,45 +1235,45 @@ const __iconNode$1t = [
1235
1235
  }
1236
1236
  ]
1237
1237
  ];
1238
- const Activity = createLucideIcon("activity", __iconNode$1t);
1239
- const __iconNode$1s = [
1238
+ const Activity = createLucideIcon("activity", __iconNode$1s);
1239
+ const __iconNode$1r = [
1240
1240
  ["path", { d: "M12 17V3", key: "1cwfxf" }],
1241
1241
  ["path", { d: "m6 11 6 6 6-6", key: "12ii2o" }],
1242
1242
  ["path", { d: "M19 21H5", key: "150jfl" }]
1243
1243
  ];
1244
- const ArrowDownToLine = createLucideIcon("arrow-down-to-line", __iconNode$1s);
1245
- const __iconNode$1r = [
1244
+ const ArrowDownToLine = createLucideIcon("arrow-down-to-line", __iconNode$1r);
1245
+ const __iconNode$1q = [
1246
1246
  ["path", { d: "M12 5v14", key: "s699le" }],
1247
1247
  ["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
1248
1248
  ];
1249
- const ArrowDown = createLucideIcon("arrow-down", __iconNode$1r);
1250
- const __iconNode$1q = [
1249
+ const ArrowDown = createLucideIcon("arrow-down", __iconNode$1q);
1250
+ const __iconNode$1p = [
1251
1251
  ["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
1252
1252
  ["path", { d: "M19 12H5", key: "x3x0zl" }]
1253
1253
  ];
1254
- const ArrowLeft = createLucideIcon("arrow-left", __iconNode$1q);
1255
- const __iconNode$1p = [
1254
+ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$1p);
1255
+ const __iconNode$1o = [
1256
1256
  ["path", { d: "M5 12h14", key: "1ays0h" }],
1257
1257
  ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
1258
1258
  ];
1259
- const ArrowRight = createLucideIcon("arrow-right", __iconNode$1p);
1260
- const __iconNode$1o = [
1259
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$1o);
1260
+ const __iconNode$1n = [
1261
1261
  ["path", { d: "m18 9-6-6-6 6", key: "kcunyi" }],
1262
1262
  ["path", { d: "M12 3v14", key: "7cf3v8" }],
1263
1263
  ["path", { d: "M5 21h14", key: "11awu3" }]
1264
1264
  ];
1265
- const ArrowUpFromLine = createLucideIcon("arrow-up-from-line", __iconNode$1o);
1266
- const __iconNode$1n = [
1265
+ const ArrowUpFromLine = createLucideIcon("arrow-up-from-line", __iconNode$1n);
1266
+ const __iconNode$1m = [
1267
1267
  ["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
1268
1268
  ["path", { d: "M12 19V5", key: "x0mq9r" }]
1269
1269
  ];
1270
- const ArrowUp = createLucideIcon("arrow-up", __iconNode$1n);
1271
- const __iconNode$1m = [
1270
+ const ArrowUp = createLucideIcon("arrow-up", __iconNode$1m);
1271
+ const __iconNode$1l = [
1272
1272
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1273
1273
  ["path", { d: "M4.929 4.929 19.07 19.071", key: "196cmz" }]
1274
1274
  ];
1275
- const Ban = createLucideIcon("ban", __iconNode$1m);
1276
- const __iconNode$1l = [
1275
+ const Ban = createLucideIcon("ban", __iconNode$1l);
1276
+ const __iconNode$1k = [
1277
1277
  ["path", { d: "M12 8V4H8", key: "hb8ula" }],
1278
1278
  ["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }],
1279
1279
  ["path", { d: "M2 14h2", key: "vft8re" }],
@@ -1281,77 +1281,77 @@ const __iconNode$1l = [
1281
1281
  ["path", { d: "M15 13v2", key: "1xurst" }],
1282
1282
  ["path", { d: "M9 13v2", key: "rq6x2g" }]
1283
1283
  ];
1284
- const Bot = createLucideIcon("bot", __iconNode$1l);
1285
- const __iconNode$1k = [
1284
+ const Bot = createLucideIcon("bot", __iconNode$1k);
1285
+ const __iconNode$1j = [
1286
1286
  ["path", { d: "m2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16", key: "d5nyq2" }],
1287
1287
  ["path", { d: "M22 9v7", key: "pvm9v3" }],
1288
1288
  ["path", { d: "M3.304 13h6.392", key: "1q3zxz" }],
1289
1289
  ["circle", { cx: "18.5", cy: "12.5", r: "3.5", key: "z97x68" }]
1290
1290
  ];
1291
- const CaseSensitive = createLucideIcon("case-sensitive", __iconNode$1k);
1292
- const __iconNode$1j = [
1291
+ const CaseSensitive = createLucideIcon("case-sensitive", __iconNode$1j);
1292
+ const __iconNode$1i = [
1293
1293
  ["path", { d: "M3 3v16a2 2 0 0 0 2 2h16", key: "c24i48" }],
1294
1294
  ["path", { d: "M18 17V9", key: "2bz60n" }],
1295
1295
  ["path", { d: "M13 17V5", key: "1frdt8" }],
1296
1296
  ["path", { d: "M8 17v-3", key: "17ska0" }]
1297
1297
  ];
1298
- const ChartColumn = createLucideIcon("chart-column", __iconNode$1j);
1299
- const __iconNode$1i = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
1300
- const Check = createLucideIcon("check", __iconNode$1i);
1301
- const __iconNode$1h = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1302
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$1h);
1303
- const __iconNode$1g = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
1304
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1g);
1305
- const __iconNode$1f = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1306
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$1f);
1307
- const __iconNode$1e = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
1308
- const ChevronUp = createLucideIcon("chevron-up", __iconNode$1e);
1309
- const __iconNode$1d = [
1298
+ const ChartColumn = createLucideIcon("chart-column", __iconNode$1i);
1299
+ const __iconNode$1h = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
1300
+ const Check = createLucideIcon("check", __iconNode$1h);
1301
+ const __iconNode$1g = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1302
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$1g);
1303
+ const __iconNode$1f = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
1304
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1f);
1305
+ const __iconNode$1e = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1306
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$1e);
1307
+ const __iconNode$1d = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
1308
+ const ChevronUp = createLucideIcon("chevron-up", __iconNode$1d);
1309
+ const __iconNode$1c = [
1310
1310
  ["path", { d: "m7 20 5-5 5 5", key: "13a0gw" }],
1311
1311
  ["path", { d: "m7 4 5 5 5-5", key: "1kwcof" }]
1312
1312
  ];
1313
- const ChevronsDownUp = createLucideIcon("chevrons-down-up", __iconNode$1d);
1314
- const __iconNode$1c = [
1313
+ const ChevronsDownUp = createLucideIcon("chevrons-down-up", __iconNode$1c);
1314
+ const __iconNode$1b = [
1315
1315
  ["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
1316
1316
  ["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
1317
1317
  ];
1318
- const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$1c);
1319
- const __iconNode$1b = [
1318
+ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$1b);
1319
+ const __iconNode$1a = [
1320
1320
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1321
1321
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
1322
1322
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
1323
1323
  ];
1324
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$1b);
1325
- const __iconNode$1a = [
1324
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$1a);
1325
+ const __iconNode$19 = [
1326
1326
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1327
1327
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
1328
1328
  ];
1329
- const CircleCheck = createLucideIcon("circle-check", __iconNode$1a);
1330
- const __iconNode$19 = [
1329
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$19);
1330
+ const __iconNode$18 = [
1331
1331
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1332
1332
  ["path", { d: "m15 9-6 6", key: "1uzhvr" }],
1333
1333
  ["path", { d: "m9 9 6 6", key: "z0biqf" }]
1334
1334
  ];
1335
- const CircleX = createLucideIcon("circle-x", __iconNode$19);
1336
- const __iconNode$18 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
1337
- const Circle = createLucideIcon("circle", __iconNode$18);
1338
- const __iconNode$17 = [
1335
+ const CircleX = createLucideIcon("circle-x", __iconNode$18);
1336
+ const __iconNode$17 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
1337
+ const Circle = createLucideIcon("circle", __iconNode$17);
1338
+ const __iconNode$16 = [
1339
1339
  ["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
1340
1340
  ["path", { d: "M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2", key: "4jdomd" }],
1341
1341
  ["path", { d: "M16 4h2a2 2 0 0 1 2 2v4", key: "3hqy98" }],
1342
1342
  ["path", { d: "M21 14H11", key: "1bme5i" }],
1343
1343
  ["path", { d: "m15 10-4 4 4 4", key: "5dvupr" }]
1344
1344
  ];
1345
- const ClipboardCopy = createLucideIcon("clipboard-copy", __iconNode$17);
1346
- const __iconNode$16 = [
1345
+ const ClipboardCopy = createLucideIcon("clipboard-copy", __iconNode$16);
1346
+ const __iconNode$15 = [
1347
1347
  ["path", { d: "M11 14h10", key: "1w8e9d" }],
1348
1348
  ["path", { d: "M16 4h2a2 2 0 0 1 2 2v1.344", key: "1e62lh" }],
1349
1349
  ["path", { d: "m17 18 4-4-4-4", key: "z2g111" }],
1350
1350
  ["path", { d: "M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113", key: "bjbb7m" }],
1351
1351
  ["rect", { x: "8", y: "2", width: "8", height: "4", rx: "1", key: "ublpy" }]
1352
1352
  ];
1353
- const ClipboardPaste = createLucideIcon("clipboard-paste", __iconNode$16);
1354
- const __iconNode$15 = [
1353
+ const ClipboardPaste = createLucideIcon("clipboard-paste", __iconNode$15);
1354
+ const __iconNode$14 = [
1355
1355
  ["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
1356
1356
  [
1357
1357
  "path",
@@ -1361,58 +1361,52 @@ const __iconNode$15 = [
1361
1361
  }
1362
1362
  ]
1363
1363
  ];
1364
- const Clipboard = createLucideIcon("clipboard", __iconNode$15);
1365
- const __iconNode$14 = [
1364
+ const Clipboard = createLucideIcon("clipboard", __iconNode$14);
1365
+ const __iconNode$13 = [
1366
1366
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1367
1367
  ["path", { d: "M12 6v6l4 2", key: "mmk7yg" }]
1368
1368
  ];
1369
- const Clock = createLucideIcon("clock", __iconNode$14);
1370
- const __iconNode$13 = [
1369
+ const Clock = createLucideIcon("clock", __iconNode$13);
1370
+ const __iconNode$12 = [
1371
1371
  ["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
1372
1372
  ["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
1373
1373
  ["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
1374
1374
  ];
1375
- const CodeXml = createLucideIcon("code-xml", __iconNode$13);
1376
- const __iconNode$12 = [
1375
+ const CodeXml = createLucideIcon("code-xml", __iconNode$12);
1376
+ const __iconNode$11 = [
1377
1377
  ["path", { d: "m16 18 6-6-6-6", key: "eg8j8" }],
1378
1378
  ["path", { d: "m8 6-6 6 6 6", key: "ppft3o" }]
1379
1379
  ];
1380
- const Code = createLucideIcon("code", __iconNode$12);
1381
- const __iconNode$11 = [
1380
+ const Code = createLucideIcon("code", __iconNode$11);
1381
+ const __iconNode$10 = [
1382
1382
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1383
1383
  ["path", { d: "M12 3v18", key: "108xh3" }]
1384
1384
  ];
1385
- const Columns2 = createLucideIcon("columns-2", __iconNode$11);
1386
- const __iconNode$10 = [
1385
+ const Columns2 = createLucideIcon("columns-2", __iconNode$10);
1386
+ const __iconNode$$ = [
1387
1387
  [
1388
1388
  "path",
1389
1389
  { 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" }
1390
1390
  ]
1391
1391
  ];
1392
- const Command$1 = createLucideIcon("command", __iconNode$10);
1393
- const __iconNode$$ = [
1392
+ const Command$1 = createLucideIcon("command", __iconNode$$);
1393
+ const __iconNode$_ = [
1394
1394
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
1395
1395
  ["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" }]
1396
1396
  ];
1397
- const Copy = createLucideIcon("copy", __iconNode$$);
1398
- const __iconNode$_ = [
1397
+ const Copy = createLucideIcon("copy", __iconNode$_);
1398
+ const __iconNode$Z = [
1399
1399
  ["path", { d: "M12 15V3", key: "m9g1x1" }],
1400
1400
  ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
1401
1401
  ["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
1402
1402
  ];
1403
- const Download = createLucideIcon("download", __iconNode$_);
1404
- const __iconNode$Z = [
1403
+ const Download = createLucideIcon("download", __iconNode$Z);
1404
+ const __iconNode$Y = [
1405
1405
  ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
1406
1406
  ["circle", { cx: "12", cy: "5", r: "1", key: "gxeob9" }],
1407
1407
  ["circle", { cx: "12", cy: "19", r: "1", key: "lyex9k" }]
1408
1408
  ];
1409
- const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$Z);
1410
- const __iconNode$Y = [
1411
- ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
1412
- ["circle", { cx: "19", cy: "12", r: "1", key: "1wjl8i" }],
1413
- ["circle", { cx: "5", cy: "12", r: "1", key: "1pcz8c" }]
1414
- ];
1415
- const Ellipsis = createLucideIcon("ellipsis", __iconNode$Y);
1409
+ const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$Y);
1416
1410
  const __iconNode$X = [
1417
1411
  ["path", { d: "m15 15 6 6", key: "1s409w" }],
1418
1412
  ["path", { d: "m15 9 6-6", key: "ko1vev" }],
@@ -1644,12 +1638,6 @@ const __iconNode$z = [
1644
1638
  ];
1645
1639
  const Maximize2 = createLucideIcon("maximize-2", __iconNode$z);
1646
1640
  const __iconNode$y = [
1647
- ["path", { d: "M4 5h16", key: "1tepv9" }],
1648
- ["path", { d: "M4 12h16", key: "1lakjw" }],
1649
- ["path", { d: "M4 19h16", key: "1djgab" }]
1650
- ];
1651
- const Menu$1 = createLucideIcon("menu", __iconNode$y);
1652
- const __iconNode$x = [
1653
1641
  [
1654
1642
  "path",
1655
1643
  {
@@ -1658,19 +1646,24 @@ const __iconNode$x = [
1658
1646
  }
1659
1647
  ]
1660
1648
  ];
1661
- const MessageSquare = createLucideIcon("message-square", __iconNode$x);
1662
- const __iconNode$w = [
1649
+ const MessageSquare = createLucideIcon("message-square", __iconNode$y);
1650
+ const __iconNode$x = [
1663
1651
  ["path", { d: "m14 10 7-7", key: "oa77jy" }],
1664
1652
  ["path", { d: "M20 10h-6V4", key: "mjg0md" }],
1665
1653
  ["path", { d: "m3 21 7-7", key: "tjx5ai" }],
1666
1654
  ["path", { d: "M4 14h6v6", key: "rmj7iw" }]
1667
1655
  ];
1668
- const Minimize2 = createLucideIcon("minimize-2", __iconNode$w);
1669
- const __iconNode$v = [
1656
+ const Minimize2 = createLucideIcon("minimize-2", __iconNode$x);
1657
+ const __iconNode$w = [
1670
1658
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1671
1659
  ["path", { d: "M9 3v18", key: "fh3hqa" }]
1672
1660
  ];
1673
- const PanelLeft = createLucideIcon("panel-left", __iconNode$v);
1661
+ const PanelLeft = createLucideIcon("panel-left", __iconNode$w);
1662
+ const __iconNode$v = [
1663
+ ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1664
+ ["path", { d: "M15 3v18", key: "14nvp0" }]
1665
+ ];
1666
+ const PanelRight = createLucideIcon("panel-right", __iconNode$v);
1674
1667
  const __iconNode$u = [
1675
1668
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1676
1669
  ["path", { d: "M3 9h18", key: "1pudct" }]
@@ -14196,10 +14189,11 @@ function AccordionContent({
14196
14189
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
14197
14190
  Content2$6,
14198
14191
  {
14192
+ forceMount: true,
14199
14193
  "data-slot": "accordion-content",
14200
- className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
14194
+ className: "grid text-sm transition-[grid-template-rows,visibility] duration-200 ease-out motion-reduce:transition-none data-[state=open]:grid-rows-[1fr] data-[state=closed]:grid-rows-[0fr] data-[state=closed]:invisible",
14201
14195
  ...props,
14202
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: cn$2("pt-0 pb-4", className), children: children2 })
14196
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: cn$2("pt-0 pb-4", className), children: children2 }) })
14203
14197
  }
14204
14198
  );
14205
14199
  }
@@ -14279,7 +14273,7 @@ function Badge({
14279
14273
  );
14280
14274
  }
14281
14275
  const buttonVariants = cva(
14282
- "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
14276
+ "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,background-color,border-color,box-shadow,opacity,transform] outline-none active:scale-[0.97] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
14283
14277
  {
14284
14278
  variants: {
14285
14279
  variant: {
@@ -14378,7 +14372,7 @@ function PopoverContent({
14378
14372
  align,
14379
14373
  sideOffset,
14380
14374
  className: cn$2(
14381
- "z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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",
14375
+ "ease-out duration-150 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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",
14382
14376
  className
14383
14377
  ),
14384
14378
  ...props
@@ -14441,7 +14435,7 @@ function ColorPicker({ value, onChange, disabled, showHex = true, className }) {
14441
14435
  {
14442
14436
  type: "button",
14443
14437
  className: cn$2(
14444
- "w-7 h-7 rounded border-2 transition-all",
14438
+ "w-7 h-7 rounded border-2 transition-[border-color,transform]",
14445
14439
  colorValue === color2 ? "border-primary scale-110" : "border-transparent hover:border-border"
14446
14440
  ),
14447
14441
  style: { backgroundColor: color2 },
@@ -14794,10 +14788,10 @@ function DialogOverlay({
14794
14788
  );
14795
14789
  }
14796
14790
  const DIALOG_CONTENT_VARIANTS = {
14797
- default: "fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none 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 sm:max-w-lg",
14791
+ default: "ease-out fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none 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 sm:max-w-lg",
14798
14792
  "bottom-sheet": [
14799
14793
  // Shared
14800
- "fixed z-50 flex flex-col bg-background shadow-lg duration-200 outline-none",
14794
+ "ease-out fixed z-50 flex flex-col bg-background shadow-lg duration-200 outline-none",
14801
14795
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
14802
14796
  // Mobile (< lg): bottom drawer
14803
14797
  "inset-x-0 bottom-0 w-full max-w-none rounded-t-2xl border border-b-0 p-6",
@@ -14809,8 +14803,11 @@ const DIALOG_CONTENT_VARIANTS = {
14809
14803
  ].join(" "),
14810
14804
  "command-palette": [
14811
14805
  // Shared
14812
- "fixed z-50 flex flex-col bg-background shadow-lg duration-200 outline-none",
14813
- "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
14806
+ "fixed z-50 flex flex-col bg-background shadow-lg outline-none",
14807
+ // Mobile-only open/close animation: the drawer slide is touch-initiated.
14808
+ // Desktop (lg+) gets NO open/close animation — this is a keyboard-summoned
14809
+ // surface hit dozens of times a day; it must appear instantly.
14810
+ "max-lg:duration-200 max-lg:data-[state=closed]:animate-out max-lg:data-[state=closed]:fade-out-0 max-lg:data-[state=open]:animate-in max-lg:data-[state=open]:fade-in-0",
14814
14811
  // Mobile (< lg): bottom drawer with the input pinned to the bottom. Flip
14815
14812
  // the command's flex direction so the input sits below the results list,
14816
14813
  // and flip the input wrapper's divider to a top border to match. The sheet
@@ -14823,8 +14820,7 @@ const DIALOG_CONTENT_VARIANTS = {
14823
14820
  "max-lg:data-[state=open]:slide-in-from-bottom max-lg:data-[state=closed]:slide-out-to-bottom",
14824
14821
  // Desktop (lg+): anchored in the upper third by its TOP edge — no
14825
14822
  // `translate-y`, so the input never moves as the list grows downward.
14826
- "lg:inset-x-auto lg:bottom-auto lg:top-[12vh] lg:left-1/2 lg:w-full lg:max-w-lg lg:max-h-[70vh] lg:-translate-x-1/2 lg:rounded-lg lg:border",
14827
- "lg:data-[state=open]:zoom-in-95 lg:data-[state=closed]:zoom-out-95"
14823
+ "lg:inset-x-auto lg:bottom-auto lg:top-[12vh] lg:left-1/2 lg:w-full lg:max-w-lg lg:max-h-[70vh] lg:-translate-x-1/2 lg:rounded-lg lg:border"
14828
14824
  ].join(" ")
14829
14825
  };
14830
14826
  const keyboardInsetHolders = /* @__PURE__ */ new Set();
@@ -14860,7 +14856,15 @@ function DialogContent({
14860
14856
  }) {
14861
14857
  useKeyboardInset(variant === "command-palette");
14862
14858
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [
14863
- /* @__PURE__ */ jsxRuntimeExports.jsx(DialogOverlay, { className: overlayClassName }),
14859
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
14860
+ DialogOverlay,
14861
+ {
14862
+ className: cn$2(
14863
+ variant === "command-palette" && "lg:data-[state=open]:animate-none lg:data-[state=closed]:animate-none",
14864
+ overlayClassName
14865
+ )
14866
+ }
14867
+ ),
14864
14868
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
14865
14869
  Content$1,
14866
14870
  {
@@ -15072,7 +15076,7 @@ function ContextMenuContent({
15072
15076
  if (event.button === 2) event.stopPropagation();
15073
15077
  },
15074
15078
  className: cn$2(
15075
- "z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 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",
15079
+ "ease-out duration-150 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 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",
15076
15080
  className
15077
15081
  ),
15078
15082
  ...props
@@ -15134,7 +15138,7 @@ function ContextMenuSubContent({
15134
15138
  {
15135
15139
  "data-slot": "context-menu-sub-content",
15136
15140
  className: cn$2(
15137
- "z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg 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",
15141
+ "ease-out duration-150 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg 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",
15138
15142
  className
15139
15143
  ),
15140
15144
  ...props
@@ -15178,7 +15182,7 @@ function DropdownMenuContent({
15178
15182
  "data-slot": "dropdown-menu-content",
15179
15183
  sideOffset,
15180
15184
  className: cn$2(
15181
- "z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 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",
15185
+ "ease-out duration-150 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 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",
15182
15186
  className
15183
15187
  ),
15184
15188
  ...props
@@ -15304,7 +15308,7 @@ function DropdownMenuSubContent({
15304
15308
  {
15305
15309
  "data-slot": "dropdown-menu-sub-content",
15306
15310
  className: cn$2(
15307
- "z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg 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",
15311
+ "ease-out duration-150 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg 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",
15308
15312
  className
15309
15313
  ),
15310
15314
  ...props
@@ -15431,7 +15435,7 @@ function SelectContent({
15431
15435
  // Mirror DropdownMenuContent so dropdowns and selects render
15432
15436
  // identically (popover surface, explicit border-border so the
15433
15437
  // outline doesn't fall back to currentColor).
15434
- "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",
15438
+ "ease-out duration-150 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",
15435
15439
  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",
15436
15440
  className
15437
15441
  ),
@@ -15559,7 +15563,7 @@ function TooltipContent({
15559
15563
  "data-slot": "tooltip-content",
15560
15564
  sideOffset,
15561
15565
  className: cn$2(
15562
- "z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 zoom-in-95 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",
15566
+ "z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in fade-in-0 duration-100 ease-out rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:duration-75",
15563
15567
  className
15564
15568
  ),
15565
15569
  ...props,
@@ -42841,53 +42845,53 @@ async function loadLanguage(lang) {
42841
42845
  try {
42842
42846
  switch (lang) {
42843
42847
  case "javascript":
42844
- return import("./index-CQ12PKsH.js").then((m2) => m2.javascript());
42848
+ return import("./index-BuqNnUeC.js").then((m2) => m2.javascript());
42845
42849
  case "jsx":
42846
- return import("./index-CQ12PKsH.js").then((m2) => m2.javascript({ jsx: true }));
42850
+ return import("./index-BuqNnUeC.js").then((m2) => m2.javascript({ jsx: true }));
42847
42851
  case "typescript":
42848
- return import("./index-CQ12PKsH.js").then(
42852
+ return import("./index-BuqNnUeC.js").then(
42849
42853
  (m2) => m2.javascript({ typescript: true })
42850
42854
  );
42851
42855
  case "tsx":
42852
- return import("./index-CQ12PKsH.js").then(
42856
+ return import("./index-BuqNnUeC.js").then(
42853
42857
  (m2) => m2.javascript({ jsx: true, typescript: true })
42854
42858
  );
42855
42859
  case "python":
42856
- return import("./index-BHRz1U1c.js").then((m2) => m2.python());
42860
+ return import("./index-BDXNcXpX.js").then((m2) => m2.python());
42857
42861
  case "html":
42858
- return import("./index-Bkx5Foei.js").then((m2) => m2.html());
42862
+ return import("./index-BFyODGGJ.js").then((m2) => m2.html());
42859
42863
  case "css":
42860
- return import("./index-fzh31gPI.js").then((m2) => m2.css());
42864
+ return import("./index-jCxJanyY.js").then((m2) => m2.css());
42861
42865
  case "scss":
42862
42866
  case "sass":
42863
- return import("./index-DIZ-5H2r.js").then((m2) => m2.sass());
42867
+ return import("./index-DsR_UKQx.js").then((m2) => m2.sass());
42864
42868
  case "less":
42865
- return import("./index-BUnwtpbx.js").then((m2) => m2.less());
42869
+ return import("./index-B9mYm2Iv.js").then((m2) => m2.less());
42866
42870
  case "json":
42867
42871
  case "jsonc":
42868
- return import("./index-Cdu8cpPJ.js").then((m2) => m2.json());
42872
+ return import("./index-BFxM6c1Y.js").then((m2) => m2.json());
42869
42873
  case "markdown":
42870
42874
  case "mdx":
42871
- return import("./index-DeNkOFC0.js").then((m2) => m2.markdown());
42875
+ return import("./index-CEHzgT6Q.js").then((m2) => m2.markdown());
42872
42876
  case "xml":
42873
- return import("./index-DLOoQUcR.js").then((m2) => m2.xml());
42877
+ return import("./index-DsyhmvSr.js").then((m2) => m2.xml());
42874
42878
  case "yaml":
42875
- return import("./index-CkbMi8ML.js").then((m2) => m2.yaml());
42879
+ return import("./index-DRNvWTdD.js").then((m2) => m2.yaml());
42876
42880
  case "sql":
42877
- return import("./index-nrGOopfX.js").then((m2) => m2.sql());
42881
+ return import("./index-CGdiDxDM.js").then((m2) => m2.sql());
42878
42882
  case "rust":
42879
- return import("./index-DgpTNIz9.js").then((m2) => m2.rust());
42883
+ return import("./index-Dvcd3xwL.js").then((m2) => m2.rust());
42880
42884
  case "go":
42881
- return import("./index-BvmYCz2n.js").then((m2) => m2.go());
42885
+ return import("./index-CXNHt9Li.js").then((m2) => m2.go());
42882
42886
  case "java":
42883
- return import("./index-ChJXmItC.js").then((m2) => m2.java());
42887
+ return import("./index-BPA-V89G.js").then((m2) => m2.java());
42884
42888
  case "kotlin":
42885
- return import("./index-ChJXmItC.js").then((m2) => m2.java());
42889
+ return import("./index-BPA-V89G.js").then((m2) => m2.java());
42886
42890
  case "c":
42887
42891
  case "cpp":
42888
- return import("./index-Dnp4nLLc.js").then((m2) => m2.cpp());
42892
+ return import("./index-CX4yKGY7.js").then((m2) => m2.cpp());
42889
42893
  case "php":
42890
- return import("./index-FVQ1p-ZQ.js").then((m2) => m2.php());
42894
+ return import("./index-D022D6yP.js").then((m2) => m2.php());
42891
42895
  // Legacy modes via StreamLanguage
42892
42896
  case "bash":
42893
42897
  case "fish":
@@ -43927,12 +43931,12 @@ function buildCommands(deps) {
43927
43931
  // FileViewer toolbar and via this palette entry.
43928
43932
  id: "editor-go-back",
43929
43933
  label: "Go Back",
43930
- action: () => window.dispatchEvent(new CustomEvent("band:editor-go-back"))
43934
+ action: () => deps.editorGoBack()
43931
43935
  },
43932
43936
  {
43933
43937
  id: "editor-go-forward",
43934
43938
  label: "Go Forward",
43935
- action: () => window.dispatchEvent(new CustomEvent("band:editor-go-forward"))
43939
+ action: () => deps.editorGoForward()
43936
43940
  },
43937
43941
  {
43938
43942
  // No shortcut advertised: Shift+Tab is wired only inside the chat
@@ -49122,6 +49126,19 @@ function SetupStatusIndicator({ setup }) {
49122
49126
  }
49123
49127
  return null;
49124
49128
  }
49129
+ function WorkspaceLabel({
49130
+ name: name2,
49131
+ projectName,
49132
+ isActive,
49133
+ tone = "sidebar"
49134
+ }) {
49135
+ const nameClass = tone === "switcher" ? `text-foreground ${isActive ? "font-semibold" : "font-medium"}` : isActive ? "font-bold text-foreground" : "font-medium text-muted-foreground";
49136
+ const projectClass = tone === "switcher" ? "text-foreground/70" : isActive ? "text-foreground/80" : "text-muted-foreground";
49137
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col min-w-0 leading-tight", children: [
49138
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: cn$2("text-sm truncate", nameClass), children: name2 }),
49139
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: cn$2("text-xs truncate", projectClass), children: projectName })
49140
+ ] });
49141
+ }
49125
49142
  const RECENT_ACTIVATION_WINDOW_MS = 300;
49126
49143
  let recentlyActivatedWorkspaceId = null;
49127
49144
  let recentlyActivatedTimer = null;
@@ -49255,23 +49272,16 @@ const WorkspaceCard = reactExports.memo(function WorkspaceCard2({
49255
49272
  // Pinned section: stack the branch name over the project name
49256
49273
  // as a compact two-line block so a mixed list of pinned cards
49257
49274
  // stays scannable without a long, mid-truncated
49258
- // `project/branch` string on one line.
49259
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col min-w-0 leading-tight", children: [
49260
- /* @__PURE__ */ jsxRuntimeExports.jsx(
49261
- "span",
49262
- {
49263
- className: `text-sm truncate ${isActive ? "font-bold text-foreground" : "font-medium text-muted-foreground"}`,
49264
- children: worktree.name
49265
- }
49266
- ),
49267
- /* @__PURE__ */ jsxRuntimeExports.jsx(
49268
- "span",
49269
- {
49270
- className: `text-xs truncate ${isActive ? "text-foreground/80" : "text-muted-foreground"}`,
49271
- children: projectName
49272
- }
49273
- )
49274
- ] })
49275
+ // `project/branch` string on one line. Shared with the ⌘K
49276
+ // workspace picker via `WorkspaceLabel`.
49277
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
49278
+ WorkspaceLabel,
49279
+ {
49280
+ name: worktree.name,
49281
+ projectName,
49282
+ isActive
49283
+ }
49284
+ )
49275
49285
  ) : /* @__PURE__ */ jsxRuntimeExports.jsx(
49276
49286
  "span",
49277
49287
  {
@@ -49333,7 +49343,7 @@ function CollapsibleSection({
49333
49343
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
49334
49344
  "div",
49335
49345
  {
49336
- className: `grid transition-[grid-template-rows] duration-200 ease-out ${collapsed ? "grid-rows-[0fr]" : "grid-rows-[1fr]"}`,
49346
+ className: `grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none ${collapsed ? "grid-rows-[0fr]" : "grid-rows-[1fr]"}`,
49337
49347
  children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `overflow-hidden ${className ?? ""}`, inert: collapsed, children: children2 })
49338
49348
  }
49339
49349
  );
@@ -49498,7 +49508,7 @@ function SortableProject({
49498
49508
  ]
49499
49509
  }
49500
49510
  ),
49501
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100 focus-within:opacity-100 [@media(pointer:coarse)]:opacity-100", children: [
49511
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0.5 opacity-0 transition-opacity group-hover:opacity-100 focus-within:opacity-100 [@media(pointer:coarse)]:hidden", children: [
49502
49512
  !isPlain && /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
49503
49513
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
49504
49514
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -60211,7 +60221,14 @@ function FileViewer({
60211
60221
  toolbar,
60212
60222
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-h-0 min-w-0 flex-1 overflow-hidden", children: [
60213
60223
  loading && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-32 items-center justify-center text-sm text-muted-foreground", children: "Loading..." }),
60214
- error && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-32 items-center justify-center text-sm text-destructive", children: error }),
60224
+ error && /* @__PURE__ */ jsxRuntimeExports.jsx(
60225
+ "div",
60226
+ {
60227
+ "data-testid": "file-viewer__error",
60228
+ className: "flex h-32 items-center justify-center text-sm text-destructive",
60229
+ children: error
60230
+ }
60231
+ ),
60215
60232
  !loading && !error && previewType === "image" && fileUrl && /* @__PURE__ */ jsxRuntimeExports.jsx(ImagePreview$1, { src: fileUrl, alt: getFilename(filePath) }),
60216
60233
  !loading && !error && previewType === "pdf" && fileUrl && /* @__PURE__ */ jsxRuntimeExports.jsx(PdfPreview, { src: fileUrl, filename: getFilename(filePath) }),
60217
60234
  !loading && !error && previewType === "markdown" && renderMarkdown && viewMode === "preview" && displayContent !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-full overflow-auto", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-3xl px-8 py-6 text-sm", children: renderMarkdown(displayContent) }) }),
@@ -60678,7 +60695,7 @@ function getRecentWorkspaceOrder() {
60678
60695
  const raw2 = localStorage.getItem(STORAGE_KEY);
60679
60696
  if (!raw2) return [];
60680
60697
  const parsed = JSON.parse(raw2);
60681
- if (Array.isArray(parsed)) return parsed;
60698
+ if (Array.isArray(parsed) && parsed.every((e3) => typeof e3 === "string")) return parsed;
60682
60699
  } catch {
60683
60700
  }
60684
60701
  return [];
@@ -60690,7 +60707,7 @@ function WorkspacePickerDialog({ open: open2, onOpenChange }) {
60690
60707
  const statuses = useDashboardStore((s2) => s2.statuses);
60691
60708
  const openWorkspace = useDashboardStore((s2) => s2.openWorkspace);
60692
60709
  const clearNeedsAttention = useDashboardStore((s2) => s2.clearNeedsAttention);
60693
- const { isPinned, toggle: togglePinned, pinned } = usePinnedWorkspaces();
60710
+ const { isPinned, toggle: togglePinned } = usePinnedWorkspaces();
60694
60711
  const [query, setQuery] = reactExports.useState("");
60695
60712
  const [recentOrder, setRecentOrder] = reactExports.useState([]);
60696
60713
  reactExports.useEffect(() => {
@@ -60700,7 +60717,6 @@ function WorkspacePickerDialog({ open: open2, onOpenChange }) {
60700
60717
  setQuery("");
60701
60718
  }
60702
60719
  }, [open2]);
60703
- const pinnedRank = reactExports.useMemo(() => new Map(pinned.map((p2, i2) => [p2.workspaceId, i2])), [pinned]);
60704
60720
  const sortedWorkspaces = reactExports.useMemo(() => {
60705
60721
  const entries2 = [];
60706
60722
  for (const project of projects) {
@@ -60711,7 +60727,9 @@ function WorkspacePickerDialog({ open: open2, onOpenChange }) {
60711
60727
  projectName: project.name,
60712
60728
  name: worktree.name,
60713
60729
  branch: worktree.branch,
60714
- agent: statuses.get(workspaceId)?.agent
60730
+ // A git project's default-branch worktree is its main checkout (the
60731
+ // repo root). Plain projects have no root/feature distinction.
60732
+ isRoot: project.kind !== "plain" && worktree.name === project.defaultBranch
60715
60733
  });
60716
60734
  }
60717
60735
  }
@@ -60719,17 +60737,12 @@ function WorkspacePickerDialog({ open: open2, onOpenChange }) {
60719
60737
  entries2.sort((a2, b2) => {
60720
60738
  if (a2.workspaceId === activeWorkspaceId) return -1;
60721
60739
  if (b2.workspaceId === activeWorkspaceId) return 1;
60722
- const ap = pinnedRank.get(a2.workspaceId);
60723
- const bp = pinnedRank.get(b2.workspaceId);
60724
- if (ap !== void 0 && bp === void 0) return -1;
60725
- if (bp !== void 0 && ap === void 0) return 1;
60726
- if (ap !== void 0 && bp !== void 0) return ap - bp;
60727
60740
  const ai = orderMap.get(a2.workspaceId) ?? Number.MAX_SAFE_INTEGER;
60728
60741
  const bi = orderMap.get(b2.workspaceId) ?? Number.MAX_SAFE_INTEGER;
60729
60742
  return ai - bi;
60730
60743
  });
60731
60744
  return entries2;
60732
- }, [projects, statuses, recentOrder, activeWorkspaceId, pinnedRank]);
60745
+ }, [projects, recentOrder, activeWorkspaceId]);
60733
60746
  const handleSelect = reactExports.useCallback(
60734
60747
  (workspaceId) => {
60735
60748
  clearNeedsAttention(workspaceId);
@@ -60766,6 +60779,7 @@ function WorkspacePickerDialog({ open: open2, onOpenChange }) {
60766
60779
  sortedWorkspaces.map((entry) => {
60767
60780
  const isActive = activeWorkspaceId === entry.workspaceId;
60768
60781
  const pinnedNow = isPinned(entry.workspaceId);
60782
+ const agent = statuses.get(entry.workspaceId)?.agent;
60769
60783
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
60770
60784
  CommandItem,
60771
60785
  {
@@ -60774,13 +60788,29 @@ function WorkspacePickerDialog({ open: open2, onOpenChange }) {
60774
60788
  "data-testid": `workspace-picker__item--${entry.workspaceId}`,
60775
60789
  className: "group touch-manipulation [@media(pointer:coarse)]:min-h-11 [@media(pointer:coarse)]:gap-3",
60776
60790
  children: [
60777
- /* @__PURE__ */ jsxRuntimeExports.jsx(AgentStatusIndicator, { agent: entry.agent }),
60778
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-sm font-medium", children: [
60779
- entry.projectName,
60780
- "/",
60781
- entry.name
60782
- ] }),
60783
- pinnedNow && /* @__PURE__ */ jsxRuntimeExports.jsx(Pin, { className: "size-3 -rotate-45 text-muted-foreground shrink-0" }),
60791
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
60792
+ AgentStatusIndicator,
60793
+ {
60794
+ agent,
60795
+ isActive,
60796
+ fallback: entry.isRoot ? /* @__PURE__ */ jsxRuntimeExports.jsx(
60797
+ House,
60798
+ {
60799
+ "data-testid": `workspace-picker__home-icon--${entry.workspaceId}`,
60800
+ className: `size-3.5 shrink-0 ${isActive ? "text-primary" : "text-muted-foreground"}`
60801
+ }
60802
+ ) : void 0
60803
+ }
60804
+ ),
60805
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
60806
+ WorkspaceLabel,
60807
+ {
60808
+ name: entry.name,
60809
+ projectName: entry.projectName,
60810
+ isActive,
60811
+ tone: "switcher"
60812
+ }
60813
+ ),
60784
60814
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ml-auto flex items-center gap-2", children: [
60785
60815
  isActive && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 text-xs text-muted-foreground", children: "current" }),
60786
60816
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -65224,9 +65254,11 @@ class BandWorkspace extends Workspace {
65224
65254
  files = [];
65225
65255
  fileVersions = /* @__PURE__ */ Object.create(null);
65226
65256
  rootUri;
65227
- constructor(client, rootUri) {
65257
+ workspaceId;
65258
+ constructor(client, rootUri, workspaceId) {
65228
65259
  super(client);
65229
65260
  this.rootUri = rootUri;
65261
+ this.workspaceId = workspaceId;
65230
65262
  }
65231
65263
  nextFileVersion(uri) {
65232
65264
  const next2 = (this.fileVersions[uri] ?? -1) + 1;
@@ -65294,7 +65326,7 @@ class BandWorkspace extends Workspace {
65294
65326
  pendingNavigation = { resolve: resolve2, timer: timer2 };
65295
65327
  window.dispatchEvent(
65296
65328
  new CustomEvent("band:lsp-navigate", {
65297
- detail: { filePath }
65329
+ detail: { filePath, workspaceId: this.workspaceId }
65298
65330
  })
65299
65331
  );
65300
65332
  });
@@ -65347,7 +65379,7 @@ function createWebSocketTransport(url) {
65347
65379
  });
65348
65380
  }
65349
65381
  const clientCache = /* @__PURE__ */ new Map();
65350
- async function getOrCreateClient(wsUrl, rootUri) {
65382
+ async function getOrCreateClient(wsUrl, rootUri, workspaceId) {
65351
65383
  const cached2 = clientCache.get(wsUrl);
65352
65384
  if (cached2) {
65353
65385
  cached2.refCount++;
@@ -65355,7 +65387,7 @@ async function getOrCreateClient(wsUrl, rootUri) {
65355
65387
  }
65356
65388
  const client = new LSPClient({
65357
65389
  rootUri,
65358
- workspace: (c2) => new BandWorkspace(c2, rootUri),
65390
+ workspace: (c2) => new BandWorkspace(c2, rootUri, workspaceId),
65359
65391
  extensions: languageServerExtensions(),
65360
65392
  timeout: 1e4
65361
65393
  });
@@ -65472,8 +65504,8 @@ const cmdClickLinkPlugin = ViewPlugin.fromClass(
65472
65504
  },
65473
65505
  { decorations: (v2) => v2.decorations }
65474
65506
  );
65475
- async function createLspExtension(wsUrl, rootUri, documentUri, languageId) {
65476
- const client = await getOrCreateClient(wsUrl, rootUri);
65507
+ async function createLspExtension(wsUrl, rootUri, documentUri, languageId, workspaceId) {
65508
+ const client = await getOrCreateClient(wsUrl, rootUri, workspaceId);
65477
65509
  return [
65478
65510
  client.plugin(documentUri, languageId),
65479
65511
  // Cmd+Click (Mac) / Ctrl+Click (other) to jump to definition — the
@@ -68021,7 +68053,6 @@ function EditorPicker({ workspacePath, onCopyPath }) {
68021
68053
  const DRAG_STYLE = { WebkitAppRegion: "drag" };
68022
68054
  const NO_DRAG_STYLE = { WebkitAppRegion: "no-drag" };
68023
68055
  function NavControls({
68024
- menuItems,
68025
68056
  onToggleSidebar,
68026
68057
  sidebarVisible,
68027
68058
  onGoBack,
@@ -68049,22 +68080,6 @@ function NavControls({
68049
68080
  /* @__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: "⌘B" })
68050
68081
  ] })
68051
68082
  ] }),
68052
- menuItems && /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
68053
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
68054
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
68055
- "button",
68056
- {
68057
- type: "button",
68058
- className: "flex items-center justify-center rounded p-1 text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors",
68059
- "aria-label": "Menu",
68060
- "data-testid": "dashboard__menu-trigger",
68061
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Menu$1, { className: "size-5" })
68062
- }
68063
- ) }) }),
68064
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", className: "text-xs", children: "More" })
68065
- ] }),
68066
- /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuContent, { align: "start", children: menuItems })
68067
- ] }),
68068
68083
  (onGoBack || onGoForward) && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
68069
68084
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
68070
68085
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -83300,6 +83315,31 @@ function refreshEdgeGroupVisibility(api, forceVisible) {
83300
83315
  }
83301
83316
  }
83302
83317
  }
83318
+ const edgeAnimTimers = /* @__PURE__ */ new WeakMap();
83319
+ function applyMaximizeEdgeVisibility(api, maximized, animateRoot) {
83320
+ if (animateRoot) {
83321
+ const pending2 = edgeAnimTimers.get(animateRoot);
83322
+ if (pending2 !== void 0) window.clearTimeout(pending2);
83323
+ animateRoot.classList.add("dv-edge-anim");
83324
+ edgeAnimTimers.set(
83325
+ animateRoot,
83326
+ window.setTimeout(() => {
83327
+ animateRoot.classList.remove("dv-edge-anim");
83328
+ edgeAnimTimers.delete(animateRoot);
83329
+ }, 300)
83330
+ );
83331
+ }
83332
+ if (maximized) {
83333
+ for (const direction of Object.keys(EDGE_GROUP_IDS$1)) {
83334
+ try {
83335
+ api.setEdgeGroupVisible(direction, false);
83336
+ } catch {
83337
+ }
83338
+ }
83339
+ } else {
83340
+ refreshEdgeGroupVisibility(api, false);
83341
+ }
83342
+ }
83303
83343
  const innerDockviewRegistrations = /* @__PURE__ */ new Set();
83304
83344
  function registerInnerDockview(containerEl, api) {
83305
83345
  const registration = { containerEl, api };
@@ -83888,6 +83928,7 @@ function FileTabBar({
83888
83928
  onSaveUntitled,
83889
83929
  actions,
83890
83930
  treeCollapsed,
83931
+ treeSide = "left",
83891
83932
  onToggleTree
83892
83933
  }) {
83893
83934
  const activeRef = reactExports.useRef(null);
@@ -83983,9 +84024,10 @@ function FileTabBar({
83983
84024
  "button",
83984
84025
  {
83985
84026
  type: "button",
84027
+ "data-testid": "file-tab-bar__tree-toggle",
83986
84028
  onClick: onToggleTree,
83987
84029
  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",
83988
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-3.5" })
84030
+ children: treeSide === "right" ? /* @__PURE__ */ jsxRuntimeExports.jsx(PanelRight, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-3.5" })
83989
84031
  }
83990
84032
  ) }),
83991
84033
  /* @__PURE__ */ jsxRuntimeExports.jsxs(TooltipContent, { side: "bottom", className: "text-xs", children: [
@@ -109545,7 +109587,7 @@ var tn = f$5("block", "before:content-[counter(line)]", "before:inline-block", "
109545
109587
  var et$1 = ({ className: e3, language: t2, style: o3, isIncomplete: n2, ...s2 }) => jsxRuntimeExports.jsx("div", { className: f$5("my-4 flex w-full flex-col gap-2 rounded-xl border border-border bg-sidebar p-2", e3), "data-incomplete": n2 || void 0, "data-language": t2, "data-streamdown": "code-block", style: { contentVisibility: "auto", containIntrinsicSize: "auto 200px", ...o3 }, ...s2 });
109546
109588
  var Se$1 = reactExports.createContext({ code: "" }), de$2 = () => reactExports.useContext(Se$1);
109547
109589
  var ot$1 = ({ language: e3 }) => jsxRuntimeExports.jsx("div", { className: "flex h-8 items-center text-muted-foreground text-xs", "data-language": e3, "data-streamdown": "code-block-header", children: jsxRuntimeExports.jsx("span", { className: "ml-1 font-mono lowercase", children: e3 }) });
109548
- var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-C6VVTevi.js").then((e3) => ({ default: e3.HighlightedCodeBlockBody }))), rt = ({ code: e3, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
109590
+ var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-Bl56ZglV.js").then((e3) => ({ default: e3.HighlightedCodeBlockBody }))), rt = ({ code: e3, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
109549
109591
  let i2 = reactExports.useMemo(() => e3.replace(cn, ""), [e3]), c2 = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i2.split(`
109550
109592
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i2]);
109551
109593
  return jsxRuntimeExports.jsx(Se$1.Provider, { value: { code: e3 }, children: jsxRuntimeExports.jsxs(et$1, { isIncomplete: s2, language: t2, children: [jsxRuntimeExports.jsx(ot$1, { language: t2 }), n2 ? jsxRuntimeExports.jsx("div", { className: "pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end", children: jsxRuntimeExports.jsx("div", { className: "pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur", "data-streamdown": "code-block-actions", children: n2 }) }) : null, jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: jsxRuntimeExports.jsx(Qe$1, { className: o3, language: t2, result: c2, ...r2 }), children: jsxRuntimeExports.jsx(dn, { className: o3, code: i2, language: t2, raw: c2, ...r2 }) })] }) });
@@ -109867,7 +109909,7 @@ var Dt = ({ children: e3, className: t2, onDownload: o3, onError: n2 }) => {
109867
109909
  }, []), jsxRuntimeExports.jsxs("div", { className: "relative", ref: i2, children: [jsxRuntimeExports.jsx("button", { className: f$5("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50", t2), disabled: c2, onClick: () => r2(!s2), title: "Download table", type: "button", children: e3 != null ? e3 : jsxRuntimeExports.jsx(Z$2, { size: 14 }) }), s2 ? jsxRuntimeExports.jsxs("div", { className: "absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg", children: [jsxRuntimeExports.jsx("button", { className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40", onClick: () => a2("csv"), title: "Download table as CSV", type: "button", children: "CSV" }), jsxRuntimeExports.jsx("button", { className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40", onClick: () => a2("markdown"), title: "Download table as Markdown", type: "button", children: "Markdown" })] }) : null] });
109868
109910
  };
109869
109911
  var Vt = ({ children: e3, className: t2, showControls: o3, ...n2 }) => jsxRuntimeExports.jsxs("div", { className: "my-4 flex flex-col gap-2 rounded-lg border border-border bg-sidebar p-2", "data-streamdown": "table-wrapper", children: [o3 ? jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-end gap-1", children: [jsxRuntimeExports.jsx(Ht, {}), jsxRuntimeExports.jsx(Dt, {})] }) : null, jsxRuntimeExports.jsx("div", { className: "border-collapse overflow-x-auto overscroll-y-auto rounded-md border border-border bg-background", children: jsxRuntimeExports.jsx("table", { className: f$5("w-full divide-y divide-border", t2), "data-streamdown": "table", ...n2, children: e3 }) })] });
109870
- var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-CF0njLRi.js").then((e3) => ({ default: e3.Mermaid }))), Kn = /language-([^\s]+)/;
109912
+ var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-DyXquuLm.js").then((e3) => ({ default: e3.Mermaid }))), Kn = /language-([^\s]+)/;
109871
109913
  function ke$1(e3, t2) {
109872
109914
  if (!(e3 != null && e3.position || t2 != null && t2.position)) return true;
109873
109915
  if (!(e3 != null && e3.position && (t2 != null && t2.position))) return false;
@@ -162038,12 +162080,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
162038
162080
  registerLayoutLoaders([
162039
162081
  {
162040
162082
  name: "dagre",
162041
- loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-CdgGxkBj.js"), "loader")
162083
+ loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-CRjo2D7K.js"), "loader")
162042
162084
  },
162043
162085
  ...[
162044
162086
  {
162045
162087
  name: "cose-bilkent",
162046
- loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-BsFFjtud.js"), "loader")
162088
+ loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-j4JEpP33.js"), "loader")
162047
162089
  }
162048
162090
  ]
162049
162091
  ]);
@@ -162482,7 +162524,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
162482
162524
  return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
162483
162525
  }, "detector");
162484
162526
  var loader = /* @__PURE__ */ __name(async () => {
162485
- const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-Bw9IfZMM.js");
162527
+ const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-B1Go7qzd.js");
162486
162528
  return { id, diagram: diagram2 };
162487
162529
  }, "loader");
162488
162530
  var plugin = {
@@ -162499,7 +162541,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
162499
162541
  return /^\s*graph/.test(txt);
162500
162542
  }, "detector");
162501
162543
  var loader2 = /* @__PURE__ */ __name(async () => {
162502
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DxR9v2a8.js");
162544
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CONOX4ru.js");
162503
162545
  return { id: id2, diagram: diagram2 };
162504
162546
  }, "loader");
162505
162547
  var plugin2 = {
@@ -162522,7 +162564,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
162522
162564
  return /^\s*flowchart/.test(txt);
162523
162565
  }, "detector");
162524
162566
  var loader3 = /* @__PURE__ */ __name(async () => {
162525
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DxR9v2a8.js");
162567
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CONOX4ru.js");
162526
162568
  return { id: id3, diagram: diagram2 };
162527
162569
  }, "loader");
162528
162570
  var plugin3 = {
@@ -162536,7 +162578,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
162536
162578
  return /^\s*erDiagram/.test(txt);
162537
162579
  }, "detector");
162538
162580
  var loader4 = /* @__PURE__ */ __name(async () => {
162539
- const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-COrhvUZD.js");
162581
+ const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-Gt2ujaN1.js");
162540
162582
  return { id: id4, diagram: diagram2 };
162541
162583
  }, "loader");
162542
162584
  var plugin4 = {
@@ -162550,7 +162592,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
162550
162592
  return /^\s*gitGraph/.test(txt);
162551
162593
  }, "detector");
162552
162594
  var loader5 = /* @__PURE__ */ __name(async () => {
162553
- const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-DrH_1hhd.js");
162595
+ const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-JAQOltND.js");
162554
162596
  return { id: id5, diagram: diagram2 };
162555
162597
  }, "loader");
162556
162598
  var plugin5 = {
@@ -162564,7 +162606,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
162564
162606
  return /^\s*gantt/.test(txt);
162565
162607
  }, "detector");
162566
162608
  var loader6 = /* @__PURE__ */ __name(async () => {
162567
- const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-COoz3lCc.js");
162609
+ const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-LO1CZhBF.js");
162568
162610
  return { id: id6, diagram: diagram2 };
162569
162611
  }, "loader");
162570
162612
  var plugin6 = {
@@ -162578,7 +162620,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
162578
162620
  return /^\s*info/.test(txt);
162579
162621
  }, "detector");
162580
162622
  var loader7 = /* @__PURE__ */ __name(async () => {
162581
- const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-BgR_JFRD.js");
162623
+ const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-wZZ4hEZ9.js");
162582
162624
  return { id: id7, diagram: diagram2 };
162583
162625
  }, "loader");
162584
162626
  var info = {
@@ -162591,7 +162633,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
162591
162633
  return /^\s*pie/.test(txt);
162592
162634
  }, "detector");
162593
162635
  var loader8 = /* @__PURE__ */ __name(async () => {
162594
- const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-DfLOLRYh.js");
162636
+ const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-5evhP6Hm.js");
162595
162637
  return { id: id8, diagram: diagram2 };
162596
162638
  }, "loader");
162597
162639
  var pie = {
@@ -162604,7 +162646,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
162604
162646
  return /^\s*quadrantChart/.test(txt);
162605
162647
  }, "detector");
162606
162648
  var loader9 = /* @__PURE__ */ __name(async () => {
162607
- const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-C-S0tUnS.js");
162649
+ const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-Cg2-kPDC.js");
162608
162650
  return { id: id9, diagram: diagram2 };
162609
162651
  }, "loader");
162610
162652
  var plugin7 = {
@@ -162618,7 +162660,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
162618
162660
  return /^\s*xychart(-beta)?/.test(txt);
162619
162661
  }, "detector");
162620
162662
  var loader10 = /* @__PURE__ */ __name(async () => {
162621
- const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-Cv8buTCr.js");
162663
+ const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-BRCOemWX.js");
162622
162664
  return { id: id10, diagram: diagram2 };
162623
162665
  }, "loader");
162624
162666
  var plugin8 = {
@@ -162632,7 +162674,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
162632
162674
  return /^\s*requirement(Diagram)?/.test(txt);
162633
162675
  }, "detector");
162634
162676
  var loader11 = /* @__PURE__ */ __name(async () => {
162635
- const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-CX-LPkZO.js");
162677
+ const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-DjOyZt1t.js");
162636
162678
  return { id: id11, diagram: diagram2 };
162637
162679
  }, "loader");
162638
162680
  var plugin9 = {
@@ -162646,7 +162688,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
162646
162688
  return /^\s*sequenceDiagram/.test(txt);
162647
162689
  }, "detector");
162648
162690
  var loader12 = /* @__PURE__ */ __name(async () => {
162649
- const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-BlZBlq8N.js");
162691
+ const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-fn9HXFXZ.js");
162650
162692
  return { id: id12, diagram: diagram2 };
162651
162693
  }, "loader");
162652
162694
  var plugin10 = {
@@ -162663,7 +162705,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
162663
162705
  return /^\s*classDiagram/.test(txt);
162664
162706
  }, "detector");
162665
162707
  var loader13 = /* @__PURE__ */ __name(async () => {
162666
- const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-Bu-X2Gbw.js");
162708
+ const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-UX-9XQ-6.js");
162667
162709
  return { id: id13, diagram: diagram2 };
162668
162710
  }, "loader");
162669
162711
  var plugin11 = {
@@ -162680,7 +162722,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
162680
162722
  return /^\s*classDiagram-v2/.test(txt);
162681
162723
  }, "detector");
162682
162724
  var loader14 = /* @__PURE__ */ __name(async () => {
162683
- const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-Bu-X2Gbw.js");
162725
+ const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-UX-9XQ-6.js");
162684
162726
  return { id: id14, diagram: diagram2 };
162685
162727
  }, "loader");
162686
162728
  var plugin12 = {
@@ -162697,7 +162739,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
162697
162739
  return /^\s*stateDiagram/.test(txt);
162698
162740
  }, "detector");
162699
162741
  var loader15 = /* @__PURE__ */ __name(async () => {
162700
- const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-BIRMcaiS.js");
162742
+ const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-Ct7juWxD.js");
162701
162743
  return { id: id15, diagram: diagram2 };
162702
162744
  }, "loader");
162703
162745
  var plugin13 = {
@@ -162717,7 +162759,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
162717
162759
  return false;
162718
162760
  }, "detector");
162719
162761
  var loader16 = /* @__PURE__ */ __name(async () => {
162720
- const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-D2NYWxQw.js");
162762
+ const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-Bp505XWR.js");
162721
162763
  return { id: id16, diagram: diagram2 };
162722
162764
  }, "loader");
162723
162765
  var plugin14 = {
@@ -162731,7 +162773,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
162731
162773
  return /^\s*journey/.test(txt);
162732
162774
  }, "detector");
162733
162775
  var loader17 = /* @__PURE__ */ __name(async () => {
162734
- const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-TInLDEBY.js");
162776
+ const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-CBD0jzUu.js");
162735
162777
  return { id: id17, diagram: diagram2 };
162736
162778
  }, "loader");
162737
162779
  var plugin15 = {
@@ -162798,7 +162840,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
162798
162840
  return false;
162799
162841
  }, "detector");
162800
162842
  var loader18 = /* @__PURE__ */ __name(async () => {
162801
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DxR9v2a8.js");
162843
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CONOX4ru.js");
162802
162844
  return { id: id18, diagram: diagram2 };
162803
162845
  }, "loader");
162804
162846
  var plugin16 = {
@@ -162812,7 +162854,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
162812
162854
  return /^\s*timeline/.test(txt);
162813
162855
  }, "detector");
162814
162856
  var loader19 = /* @__PURE__ */ __name(async () => {
162815
- const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-BiY_XUAp.js");
162857
+ const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-Dw8oeGiX.js");
162816
162858
  return { id: id19, diagram: diagram2 };
162817
162859
  }, "loader");
162818
162860
  var plugin17 = {
@@ -162826,7 +162868,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
162826
162868
  return /^\s*mindmap/.test(txt);
162827
162869
  }, "detector");
162828
162870
  var loader20 = /* @__PURE__ */ __name(async () => {
162829
- const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-B2VHBojz.js");
162871
+ const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-jjxDAUjJ.js");
162830
162872
  return { id: id20, diagram: diagram2 };
162831
162873
  }, "loader");
162832
162874
  var plugin18 = {
@@ -162840,7 +162882,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
162840
162882
  return /^\s*kanban/.test(txt);
162841
162883
  }, "detector");
162842
162884
  var loader21 = /* @__PURE__ */ __name(async () => {
162843
- const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-Ds9-Rky6.js");
162885
+ const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-9SKGIQ4n.js");
162844
162886
  return { id: id21, diagram: diagram2 };
162845
162887
  }, "loader");
162846
162888
  var plugin19 = {
@@ -162854,7 +162896,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
162854
162896
  return /^\s*sankey(-beta)?/.test(txt);
162855
162897
  }, "detector");
162856
162898
  var loader22 = /* @__PURE__ */ __name(async () => {
162857
- const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-C3bzmTeJ.js");
162899
+ const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-Bun0ZHSn.js");
162858
162900
  return { id: id22, diagram: diagram2 };
162859
162901
  }, "loader");
162860
162902
  var plugin20 = {
@@ -162868,7 +162910,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
162868
162910
  return /^\s*packet(-beta)?/.test(txt);
162869
162911
  }, "detector");
162870
162912
  var loader23 = /* @__PURE__ */ __name(async () => {
162871
- const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-CyAHBi5H.js");
162913
+ const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-Bzc1B5Be.js");
162872
162914
  return { id: id23, diagram: diagram2 };
162873
162915
  }, "loader");
162874
162916
  var packet = {
@@ -162881,7 +162923,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
162881
162923
  return /^\s*radar-beta/.test(txt);
162882
162924
  }, "detector");
162883
162925
  var loader24 = /* @__PURE__ */ __name(async () => {
162884
- const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-CFa3sLiJ.js");
162926
+ const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-DXbEv4yb.js");
162885
162927
  return { id: id24, diagram: diagram2 };
162886
162928
  }, "loader");
162887
162929
  var radar = {
@@ -162894,7 +162936,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
162894
162936
  return /^\s*block(-beta)?/.test(txt);
162895
162937
  }, "detector");
162896
162938
  var loader25 = /* @__PURE__ */ __name(async () => {
162897
- const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-1FtDdqBo.js");
162939
+ const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-Bjf6umts.js");
162898
162940
  return { id: id25, diagram: diagram2 };
162899
162941
  }, "loader");
162900
162942
  var plugin21 = {
@@ -162908,7 +162950,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
162908
162950
  return /^\s*architecture/.test(txt);
162909
162951
  }, "detector");
162910
162952
  var loader26 = /* @__PURE__ */ __name(async () => {
162911
- const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-B0sHbG9y.js");
162953
+ const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-B9hdFdgc.js");
162912
162954
  return { id: id26, diagram: diagram2 };
162913
162955
  }, "loader");
162914
162956
  var architecture = {
@@ -162922,7 +162964,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
162922
162964
  return /^\s*treemap/.test(txt);
162923
162965
  }, "detector");
162924
162966
  var loader27 = /* @__PURE__ */ __name(async () => {
162925
- const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-C-LWq-ju.js");
162967
+ const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-CdcM_CoU.js");
162926
162968
  return { id: id27, diagram: diagram2 };
162927
162969
  }, "loader");
162928
162970
  var treemap = {
@@ -163929,24 +163971,31 @@ function getHighlightCtor() {
163929
163971
  return typeof ctor === "function" ? ctor : null;
163930
163972
  }
163931
163973
  function fileTreeWidthKey(wsId) {
163932
- return `band-file-tree-width:${wsId}`;
163974
+ return `band-file-tree-width-px:${wsId}`;
163933
163975
  }
163934
163976
  function fileTreeCollapsedKey(wsId) {
163935
163977
  return `band-file-tree-collapsed:${wsId}`;
163936
163978
  }
163979
+ function fileTreeSideKey(wsId) {
163980
+ return `band-file-tree-side:${wsId}`;
163981
+ }
163982
+ const DEFAULT_FILE_TREE_WIDTH_PX = 240;
163983
+ const MIN_FILE_TREE_WIDTH_PX = 160;
163984
+ const MAX_FILE_TREE_WIDTH_RATIO = 0.5;
163985
+ const WIDTH_PERSIST_DEBOUNCE_MS = 200;
163937
163986
  function loadFileTreeWidth(wsId) {
163938
163987
  try {
163939
163988
  const raw2 = localStorage.getItem(fileTreeWidthKey(wsId));
163940
163989
  if (raw2 == null) return null;
163941
163990
  const val = Number(raw2);
163942
- return Number.isFinite(val) ? val : null;
163991
+ return Number.isFinite(val) && val > 0 ? val : null;
163943
163992
  } catch {
163944
163993
  return null;
163945
163994
  }
163946
163995
  }
163947
- function saveFileTreeWidth(wsId, width) {
163996
+ function saveFileTreeWidth(wsId, widthPx) {
163948
163997
  try {
163949
- localStorage.setItem(fileTreeWidthKey(wsId), String(width));
163998
+ localStorage.setItem(fileTreeWidthKey(wsId), String(Math.round(widthPx)));
163950
163999
  } catch {
163951
164000
  }
163952
164001
  }
@@ -163963,6 +164012,19 @@ function saveFileTreeCollapsed(wsId, collapsed) {
163963
164012
  } catch {
163964
164013
  }
163965
164014
  }
164015
+ function loadFileTreeSide(wsId) {
164016
+ try {
164017
+ return localStorage.getItem(fileTreeSideKey(wsId)) === "right" ? "right" : "left";
164018
+ } catch {
164019
+ return "left";
164020
+ }
164021
+ }
164022
+ function saveFileTreeSide(wsId, side) {
164023
+ try {
164024
+ localStorage.setItem(fileTreeSideKey(wsId), side);
164025
+ } catch {
164026
+ }
164027
+ }
163966
164028
  const TOOLBAR_COMPACT_BREAKPOINT = 200;
163967
164029
  const touchPointerUp = (fn2) => (e3) => {
163968
164030
  if (!fn2 || e3.pointerType === "mouse") return;
@@ -163975,7 +164037,9 @@ function FileTreeToolbar({
163975
164037
  onNewFile,
163976
164038
  onNewFolder,
163977
164039
  onOpenFile,
163978
- onNewUntitled
164040
+ onNewUntitled,
164041
+ side,
164042
+ onSetSide
163979
164043
  }) {
163980
164044
  const rootRef = reactExports.useRef(null);
163981
164045
  const [compact, setCompact] = reactExports.useState(false);
@@ -164006,10 +164070,11 @@ function FileTreeToolbar({
164006
164070
  pendingMenuAction.current = null;
164007
164071
  fn2?.();
164008
164072
  }, []);
164009
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
164073
+ const header = /* @__PURE__ */ jsxRuntimeExports.jsxs(
164010
164074
  "div",
164011
164075
  {
164012
164076
  ref: rootRef,
164077
+ "data-testid": "file-tree__toolbar",
164013
164078
  className: "flex h-9 shrink-0 items-center gap-0.5 border-b border-border/50 pl-3 pr-1.5",
164014
164079
  children: [
164015
164080
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium text-muted-foreground", children: "Files" }),
@@ -164144,6 +164209,22 @@ function FileTreeToolbar({
164144
164209
  ]
164145
164210
  }
164146
164211
  );
164212
+ if (!side || !onSetSide) return header;
164213
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenu, { children: [
164214
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuTrigger, { asChild: true, children: header }),
164215
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuContent, { className: "min-w-[12rem]", children: [
164216
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuItem, { "data-testid": "file-tree__move-left", onSelect: () => onSetSide("left"), children: [
164217
+ /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-4" }),
164218
+ "Explorer on Left",
164219
+ side === "left" && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "ml-auto size-4" })
164220
+ ] }),
164221
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuItem, { "data-testid": "file-tree__move-right", onSelect: () => onSetSide("right"), children: [
164222
+ /* @__PURE__ */ jsxRuntimeExports.jsx(PanelRight, { className: "size-4" }),
164223
+ "Explorer on Right",
164224
+ side === "right" && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "ml-auto size-4" })
164225
+ ] })
164226
+ ] })
164227
+ ] });
164147
164228
  }
164148
164229
  function CodeBrowserView({
164149
164230
  workspaceId,
@@ -164294,7 +164375,7 @@ function CodeBrowserView({
164294
164375
  };
164295
164376
  const cmLang = langMap[ext ?? ""];
164296
164377
  const languageId = cmLang ? getLspLanguageId(cmLang) : void 0;
164297
- createLspExtension(lspWsUrl, rootUri, documentUri, languageId).then((ext2) => {
164378
+ createLspExtension(lspWsUrl, rootUri, documentUri, languageId, workspaceId).then((ext2) => {
164298
164379
  if (!cancelled2) setLspExtension(ext2);
164299
164380
  }).catch((err) => {
164300
164381
  console.warn("LSP extension creation failed:", err);
@@ -164303,7 +164384,7 @@ function CodeBrowserView({
164303
164384
  return () => {
164304
164385
  cancelled2 = true;
164305
164386
  };
164306
- }, [lspWsUrl, workspacePath, viewFilePath]);
164387
+ }, [lspWsUrl, workspacePath, viewFilePath, workspaceId]);
164307
164388
  reactExports.useEffect(() => {
164308
164389
  return () => {
164309
164390
  if (lspWsUrl) releaseLspClient(lspWsUrl);
@@ -164566,20 +164647,22 @@ function CodeBrowserView({
164566
164647
  setViewColumn(void 0);
164567
164648
  notifySelectFile(null);
164568
164649
  }, [viewFilePath, handleTabClose, notifySelectFile]);
164650
+ const persistActiveEditorState = reactExports.useCallback(() => {
164651
+ const view = editorViewRef.current;
164652
+ if (!view || !viewFilePath) return;
164653
+ try {
164654
+ const state2 = serializeEditorState(view);
164655
+ savedEditorStatesRef.current[viewFilePath] = state2;
164656
+ tabState.update(viewFilePath, {
164657
+ editorState: state2.editorState,
164658
+ scrollTop: state2.scrollTop
164659
+ });
164660
+ } catch {
164661
+ }
164662
+ }, [viewFilePath, tabState.update]);
164569
164663
  const handleTabSelect = reactExports.useCallback(
164570
164664
  (filePath) => {
164571
- const view = editorViewRef.current;
164572
- if (view && viewFilePath) {
164573
- try {
164574
- const state2 = serializeEditorState(view);
164575
- savedEditorStatesRef.current[viewFilePath] = state2;
164576
- tabState.update(viewFilePath, {
164577
- editorState: state2.editorState,
164578
- scrollTop: state2.scrollTop
164579
- });
164580
- } catch {
164581
- }
164582
- }
164665
+ persistActiveEditorState();
164583
164666
  if (filePath !== viewFilePath) skipFileEffectRef.current = true;
164584
164667
  fileTabs.setActiveTab(filePath);
164585
164668
  setViewFilePath(filePath);
@@ -164588,7 +164671,7 @@ function CodeBrowserView({
164588
164671
  setViewColumn(void 0);
164589
164672
  notifySelectFile(filePath);
164590
164673
  },
164591
- [fileTabs.setActiveTab, notifySelectFile, viewFilePath, tabState.update]
164674
+ [fileTabs.setActiveTab, notifySelectFile, viewFilePath, persistActiveEditorState]
164592
164675
  );
164593
164676
  const skipInitialTabSync = reactExports.useRef(true);
164594
164677
  reactExports.useEffect(() => {
@@ -164642,18 +164725,27 @@ function CodeBrowserView({
164642
164725
  if (entry) navigateToEntry(entry);
164643
164726
  }, [editorHistory.goForward, navigateToEntry]);
164644
164727
  reactExports.useEffect(() => {
164645
- const handleGoBack = () => handleEditorGoBack();
164646
- const handleGoForward = () => handleEditorGoForward();
164728
+ const handleGoBack = (e3) => {
164729
+ const detail = e3.detail;
164730
+ if (detail?.workspaceId && detail.workspaceId !== workspaceId) return;
164731
+ handleEditorGoBack();
164732
+ };
164733
+ const handleGoForward = (e3) => {
164734
+ const detail = e3.detail;
164735
+ if (detail?.workspaceId && detail.workspaceId !== workspaceId) return;
164736
+ handleEditorGoForward();
164737
+ };
164647
164738
  window.addEventListener("band:editor-go-back", handleGoBack);
164648
164739
  window.addEventListener("band:editor-go-forward", handleGoForward);
164649
164740
  return () => {
164650
164741
  window.removeEventListener("band:editor-go-back", handleGoBack);
164651
164742
  window.removeEventListener("band:editor-go-forward", handleGoForward);
164652
164743
  };
164653
- }, [handleEditorGoBack, handleEditorGoForward]);
164744
+ }, [handleEditorGoBack, handleEditorGoForward, workspaceId]);
164654
164745
  reactExports.useEffect(() => {
164655
164746
  const handleLspNavigate = (e3) => {
164656
164747
  const detail = e3.detail;
164748
+ if (detail?.workspaceId && detail.workspaceId !== workspaceId) return;
164657
164749
  if (detail?.filePath) {
164658
164750
  pushDepartureAndArrival({ filePath: detail.filePath });
164659
164751
  skipFileEffectRef.current = true;
@@ -164668,7 +164760,7 @@ function CodeBrowserView({
164668
164760
  };
164669
164761
  window.addEventListener("band:lsp-navigate", handleLspNavigate);
164670
164762
  return () => window.removeEventListener("band:lsp-navigate", handleLspNavigate);
164671
- }, [pushDepartureAndArrival, fileTabs.openTabPinned, notifySelectFile]);
164763
+ }, [pushDepartureAndArrival, fileTabs.openTabPinned, notifySelectFile, workspaceId]);
164672
164764
  reactExports.useEffect(() => {
164673
164765
  const cycleFileTabs = (direction) => {
164674
164766
  const tabs = fileTabs.openTabs;
@@ -164949,21 +165041,75 @@ function CodeBrowserView({
164949
165041
  );
164950
165042
  const treePanelRef = ln$2();
164951
165043
  const [treeCollapsed, setTreeCollapsed] = reactExports.useState(() => loadFileTreeCollapsed(workspaceId));
164952
- const skipFirstLayoutCallback = reactExports.useRef(true);
164953
- const savedCollapsed = loadFileTreeCollapsed(workspaceId);
164954
- const savedWidth = loadFileTreeWidth(workspaceId);
164955
- const defaultLayout = savedCollapsed ? { "file-tree": 0, "file-viewer": 100 } : savedWidth ? { "file-tree": savedWidth, "file-viewer": 100 - savedWidth } : void 0;
164956
- const handleLayoutChanged = reactExports.useCallback(
164957
- (layout) => {
164958
- if (skipFirstLayoutCallback.current) {
164959
- skipFirstLayoutCallback.current = false;
165044
+ const [treeSide, setTreeSide] = reactExports.useState(() => loadFileTreeSide(workspaceId));
165045
+ const collapsedRef = reactExports.useRef(treeCollapsed);
165046
+ const treeWidthRef = reactExports.useRef(loadFileTreeWidth(workspaceId) ?? DEFAULT_FILE_TREE_WIDTH_PX);
165047
+ reactExports.useLayoutEffect(() => {
165048
+ if (treeCollapsed) treePanelRef.current?.collapse();
165049
+ }, [treeSide, useMobileLayout, treePanelRef]);
165050
+ const widthPersistTimerRef = reactExports.useRef(null);
165051
+ const scheduleWidthPersist = reactExports.useCallback(() => {
165052
+ if (widthPersistTimerRef.current !== null) {
165053
+ clearTimeout(widthPersistTimerRef.current);
165054
+ }
165055
+ widthPersistTimerRef.current = setTimeout(() => {
165056
+ widthPersistTimerRef.current = null;
165057
+ saveFileTreeWidth(workspaceId, treeWidthRef.current);
165058
+ }, WIDTH_PERSIST_DEBOUNCE_MS);
165059
+ }, [workspaceId]);
165060
+ reactExports.useEffect(() => {
165061
+ return () => {
165062
+ if (widthPersistTimerRef.current !== null) {
165063
+ clearTimeout(widthPersistTimerRef.current);
165064
+ saveFileTreeWidth(workspaceId, treeWidthRef.current);
165065
+ }
165066
+ };
165067
+ }, [workspaceId]);
165068
+ const groupWidthRef = reactExports.useRef(0);
165069
+ const selfResizeRef = reactExports.useRef(false);
165070
+ const handleTreeResize = reactExports.useCallback(
165071
+ (size2) => {
165072
+ const collapsed = size2.asPercentage === 0;
165073
+ if (collapsed !== collapsedRef.current) {
165074
+ collapsedRef.current = collapsed;
165075
+ setTreeCollapsed(collapsed);
165076
+ saveFileTreeCollapsed(workspaceId, collapsed);
165077
+ }
165078
+ if (collapsed) return;
165079
+ const groupWidth = size2.inPixels / (size2.asPercentage / 100);
165080
+ const groupResized = Math.abs(groupWidth - groupWidthRef.current) > 1;
165081
+ groupWidthRef.current = groupWidth;
165082
+ if (selfResizeRef.current) {
165083
+ selfResizeRef.current = false;
165084
+ return;
165085
+ }
165086
+ if (!groupResized) {
165087
+ treeWidthRef.current = size2.inPixels;
165088
+ scheduleWidthPersist();
164960
165089
  return;
164961
165090
  }
164962
- if (layout["file-tree"] != null) {
164963
- saveFileTreeWidth(workspaceId, layout["file-tree"]);
165091
+ const maxWidth = groupWidth * MAX_FILE_TREE_WIDTH_RATIO;
165092
+ if (maxWidth < MIN_FILE_TREE_WIDTH_PX) return;
165093
+ const target = Math.min(treeWidthRef.current, maxWidth);
165094
+ if (Math.abs(size2.inPixels - target) > 1) {
165095
+ selfResizeRef.current = true;
165096
+ treePanelRef.current?.resize(`${target}px`);
164964
165097
  }
164965
165098
  },
164966
- [workspaceId]
165099
+ [workspaceId, treePanelRef, scheduleWidthPersist]
165100
+ );
165101
+ const handleSetTreeSide = reactExports.useCallback(
165102
+ (side) => {
165103
+ persistActiveEditorState();
165104
+ const size2 = treePanelRef.current?.getSize();
165105
+ if (size2 && size2.inPixels > 0) {
165106
+ treeWidthRef.current = size2.inPixels;
165107
+ saveFileTreeWidth(workspaceId, size2.inPixels);
165108
+ }
165109
+ setTreeSide(side);
165110
+ saveFileTreeSide(workspaceId, side);
165111
+ },
165112
+ [workspaceId, treePanelRef, persistActiveEditorState]
164967
165113
  );
164968
165114
  const toggleTree = reactExports.useCallback(() => {
164969
165115
  const panel = treePanelRef.current;
@@ -164984,6 +165130,72 @@ function CodeBrowserView({
164984
165130
  treePanelRef.current?.expand();
164985
165131
  }
164986
165132
  }, [fileTabs.openTabs.length, treeCollapsed, treePanelRef]);
165133
+ const treePanelEl = /* @__PURE__ */ jsxRuntimeExports.jsx(
165134
+ Yt$1,
165135
+ {
165136
+ id: "file-tree",
165137
+ defaultSize: `${treeWidthRef.current}px`,
165138
+ minSize: `${MIN_FILE_TREE_WIDTH_PX}px`,
165139
+ maxSize: `${MAX_FILE_TREE_WIDTH_RATIO * 100}%`,
165140
+ groupResizeBehavior: "preserve-pixel-size",
165141
+ collapsible: true,
165142
+ collapsedSize: "0%",
165143
+ panelRef: treePanelRef,
165144
+ onResize: handleTreeResize,
165145
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
165146
+ "div",
165147
+ {
165148
+ className: `flex h-full flex-col overflow-hidden border-border ${treeSide === "left" ? "border-r" : "border-l"}`,
165149
+ children: [
165150
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
165151
+ FileTreeToolbar,
165152
+ {
165153
+ onNewFile: handleNewFile,
165154
+ onNewFolder: handleNewFolder,
165155
+ onOpenFile: pickFile ? handleOpenExternalFile : void 0,
165156
+ onNewUntitled: handleNewUntitled,
165157
+ side: treeSide,
165158
+ onSetSide: handleSetTreeSide
165159
+ }
165160
+ ),
165161
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165162
+ FileBrowser,
165163
+ {
165164
+ ref: fileBrowserRef,
165165
+ workspaceId,
165166
+ workspacePath,
165167
+ onOpenFile: handleSelectFile,
165168
+ onOpenFilePinned: handleSelectFilePinned,
165169
+ compact: true,
165170
+ selectedFile: viewFilePath,
165171
+ onPathRenamed: handlePathRenamed,
165172
+ onPathDeleted: handlePathDeleted
165173
+ }
165174
+ ) })
165175
+ ]
165176
+ }
165177
+ )
165178
+ },
165179
+ "file-tree"
165180
+ );
165181
+ const pointsLeft = treeSide === "left" ? !treeCollapsed : treeCollapsed;
165182
+ const separatorEl = /* @__PURE__ */ jsxRuntimeExports.jsx(
165183
+ Qt$1,
165184
+ {
165185
+ id: "file-tree-separator",
165186
+ className: "group relative w-[3px] bg-transparent hover:bg-accent-foreground/20 active:bg-accent-foreground/30 transition-colors cursor-col-resize",
165187
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165188
+ "button",
165189
+ {
165190
+ type: "button",
165191
+ onClick: toggleTree,
165192
+ className: "absolute top-1/2 left-1/2 z-10 flex size-7 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full border-2 border-accent-foreground/30 bg-background text-muted-foreground opacity-0 shadow-md transition-opacity hover:border-accent-foreground/50 hover:text-foreground group-hover:opacity-100",
165193
+ children: pointsLeft ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronLeft, { className: "size-4" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-4" })
165194
+ }
165195
+ )
165196
+ },
165197
+ "file-tree-separator"
165198
+ );
164987
165199
  return (
164988
165200
  // h-full + w-full + overflow-hidden + min-w-0 is required so that
164989
165201
  // CodeMirror's wide intrinsic content (long unwrapped lines, scrollable
@@ -165070,162 +165282,112 @@ function CodeBrowserView({
165070
165282
  ] })
165071
165283
  )
165072
165284
  ) : (
165073
- // Desktop: side-by-side layout with resizable file tree
165074
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
165075
- Ut$1,
165076
- {
165077
- orientation: "horizontal",
165078
- defaultLayout,
165079
- onLayoutChanged: handleLayoutChanged,
165080
- children: [
165081
- /* @__PURE__ */ jsxRuntimeExports.jsx(
165082
- Yt$1,
165083
- {
165084
- id: "file-tree",
165085
- defaultSize: "15rem",
165086
- minSize: "10rem",
165087
- maxSize: "50%",
165088
- collapsible: true,
165089
- collapsedSize: "0%",
165090
- panelRef: treePanelRef,
165091
- onResize: (size2) => {
165092
- const collapsed = size2.asPercentage === 0;
165093
- setTreeCollapsed(collapsed);
165094
- saveFileTreeCollapsed(workspaceId, collapsed);
165095
- },
165096
- children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full flex-col overflow-hidden border-r border-border", children: [
165097
- /* @__PURE__ */ jsxRuntimeExports.jsx(
165098
- FileTreeToolbar,
165285
+ // Desktop: side-by-side layout with resizable file tree. The Group is
165286
+ // keyed on the side so it fully remounts when the explorer moves —
165287
+ // react-resizable-panels sorts its panels by `offsetLeft` when they
165288
+ // register, so reordering the children in place would leave it holding
165289
+ // a stale order.
165290
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Ut$1, { orientation: "horizontal", children: [
165291
+ treeSide === "left" && treePanelEl,
165292
+ treeSide === "left" && separatorEl,
165293
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Yt$1, { id: "file-viewer", minSize: "20%", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex h-full min-w-0 flex-col overflow-hidden", children: [
165294
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
165295
+ FileTabBar,
165296
+ {
165297
+ workspacePath,
165298
+ tabs: fileTabs.openTabs,
165299
+ activeTabPath: fileTabs.activeTabPath,
165300
+ onSelectTab: handleTabSelect,
165301
+ onCloseTab: handleTabClose,
165302
+ onPinTab: fileTabs.pinTab,
165303
+ onGoBack: handleEditorGoBack,
165304
+ onGoForward: handleEditorGoForward,
165305
+ canGoBack: editorHistory.canGoBack,
165306
+ canGoForward: editorHistory.canGoForward,
165307
+ isDirty: tabState.isDirty,
165308
+ onSaveUntitled: pickSaveFile ? handleSaveUntitledForClose : void 0,
165309
+ treeCollapsed,
165310
+ treeSide,
165311
+ onToggleTree: toggleTree,
165312
+ actions: isMarkdown ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0.5", children: [
165313
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
165314
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165315
+ "button",
165099
165316
  {
165100
- onNewFile: handleNewFile,
165101
- onNewFolder: handleNewFolder,
165102
- onOpenFile: pickFile ? handleOpenExternalFile : void 0,
165103
- onNewUntitled: handleNewUntitled
165317
+ type: "button",
165318
+ onClick: () => setMdViewMode("preview"),
165319
+ className: `inline-flex size-6 items-center justify-center rounded-md transition-colors ${mdViewMode === "preview" ? "bg-accent text-accent-foreground" : "text-muted-foreground hover:bg-accent hover:text-foreground"}`,
165320
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Eye, { className: "size-3.5" })
165104
165321
  }
165105
- ),
165106
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165107
- FileBrowser,
165322
+ ) }),
165323
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", className: "text-xs", children: "Preview" })
165324
+ ] }),
165325
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
165326
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165327
+ "button",
165108
165328
  {
165109
- ref: fileBrowserRef,
165110
- workspaceId,
165111
- workspacePath,
165112
- onOpenFile: handleSelectFile,
165113
- onOpenFilePinned: handleSelectFilePinned,
165114
- compact: true,
165115
- selectedFile: viewFilePath,
165116
- onPathRenamed: handlePathRenamed,
165117
- onPathDeleted: handlePathDeleted
165329
+ type: "button",
165330
+ onClick: () => setMdViewMode("source"),
165331
+ className: `inline-flex size-6 items-center justify-center rounded-md transition-colors ${mdViewMode === "source" ? "bg-accent text-accent-foreground" : "text-muted-foreground hover:bg-accent hover:text-foreground"}`,
165332
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Code, { className: "size-3.5" })
165118
165333
  }
165119
- ) })
165334
+ ) }),
165335
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", className: "text-xs", children: "Source" })
165120
165336
  ] })
165121
- }
165122
- ),
165123
- /* @__PURE__ */ jsxRuntimeExports.jsx(Qt$1, { className: "group relative w-[3px] bg-transparent hover:bg-accent-foreground/20 active:bg-accent-foreground/30 transition-colors cursor-col-resize", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165124
- "button",
165125
- {
165126
- type: "button",
165127
- onClick: toggleTree,
165128
- className: "absolute top-1/2 left-1/2 z-10 flex size-7 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full border-2 border-accent-foreground/30 bg-background text-muted-foreground opacity-0 shadow-md transition-opacity hover:border-accent-foreground/50 hover:text-foreground group-hover:opacity-100",
165129
- children: treeCollapsed ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-4" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronLeft, { className: "size-4" })
165130
- }
165131
- ) }),
165132
- /* @__PURE__ */ jsxRuntimeExports.jsx(Yt$1, { id: "file-viewer", minSize: "20%", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex h-full min-w-0 flex-col overflow-hidden", children: [
165133
- /* @__PURE__ */ jsxRuntimeExports.jsx(
165134
- FileTabBar,
165337
+ ] }) : void 0
165338
+ }
165339
+ ),
165340
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 min-w-0 flex-1 overflow-hidden", children: viewFilePath ? /* @__PURE__ */ jsxRuntimeExports.jsx(
165341
+ FileViewer,
165342
+ {
165343
+ workspaceId,
165344
+ filePath: viewFilePath,
165345
+ external: viewIsExternal,
165346
+ untitled: isUntitledPath(viewFilePath),
165347
+ line: viewLine,
165348
+ lineEnd: viewLineEnd,
165349
+ column: viewColumn,
165350
+ onEditorView: handleEditorView,
165351
+ onCursorLineChange: handleCursorLineChange,
165352
+ renderMarkdown,
165353
+ editable: true,
165354
+ hideTitleBar: true,
165355
+ lspExtension: viewIsExternal || isUntitledPath(viewFilePath) ? null : lspExtension,
165356
+ viewMode: isMarkdown ? mdViewMode : void 0,
165357
+ onViewModeChange: isMarkdown ? setMdViewMode : void 0,
165358
+ initialEditedContent: tabState.get(viewFilePath)?.editedContent ?? null,
165359
+ savedEditorState: savedEditorStatesRef.current[viewFilePath]?.editorState ?? tabState.get(viewFilePath)?.editorState,
165360
+ savedScrollTop: savedEditorStatesRef.current[viewFilePath]?.scrollTop ?? tabState.get(viewFilePath)?.scrollTop,
165361
+ onEditedContentChange: handleEditedContentChange,
165362
+ languageOverride: tabState.getLanguage(viewFilePath),
165363
+ onLanguageOverrideChange: (id28) => handleLanguageOverride(viewFilePath, id28),
165364
+ onSaveAs: isUntitledPath(viewFilePath) && pickSaveFile ? (content2) => handleSaveUntitled(viewFilePath, content2) : void 0,
165365
+ onLoadError: handleFileLoadError,
165366
+ toolbar: search2.searchOpen ? /* @__PURE__ */ jsxRuntimeExports.jsx(
165367
+ SearchBar,
165135
165368
  {
165136
- workspacePath,
165137
- tabs: fileTabs.openTabs,
165138
- activeTabPath: fileTabs.activeTabPath,
165139
- onSelectTab: handleTabSelect,
165140
- onCloseTab: handleTabClose,
165141
- onPinTab: fileTabs.pinTab,
165142
- onGoBack: handleEditorGoBack,
165143
- onGoForward: handleEditorGoForward,
165144
- canGoBack: editorHistory.canGoBack,
165145
- canGoForward: editorHistory.canGoForward,
165146
- isDirty: tabState.isDirty,
165147
- onSaveUntitled: pickSaveFile ? handleSaveUntitledForClose : void 0,
165148
- treeCollapsed,
165149
- onToggleTree: toggleTree,
165150
- actions: isMarkdown ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0.5", children: [
165151
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
165152
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165153
- "button",
165154
- {
165155
- type: "button",
165156
- onClick: () => setMdViewMode("preview"),
165157
- className: `inline-flex size-6 items-center justify-center rounded-md transition-colors ${mdViewMode === "preview" ? "bg-accent text-accent-foreground" : "text-muted-foreground hover:bg-accent hover:text-foreground"}`,
165158
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Eye, { className: "size-3.5" })
165159
- }
165160
- ) }),
165161
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", className: "text-xs", children: "Preview" })
165162
- ] }),
165163
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
165164
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165165
- "button",
165166
- {
165167
- type: "button",
165168
- onClick: () => setMdViewMode("source"),
165169
- className: `inline-flex size-6 items-center justify-center rounded-md transition-colors ${mdViewMode === "source" ? "bg-accent text-accent-foreground" : "text-muted-foreground hover:bg-accent hover:text-foreground"}`,
165170
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Code, { className: "size-3.5" })
165171
- }
165172
- ) }),
165173
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", className: "text-xs", children: "Source" })
165174
- ] })
165175
- ] }) : void 0
165369
+ ref: search2.searchBarRef,
165370
+ query: search2.searchQuery,
165371
+ onQueryChange: search2.setSearchQuery,
165372
+ options: search2.searchOptions,
165373
+ onOptionsChange: search2.setSearchOptions,
165374
+ placeholder: isMarkdownPreviewActive ? "Find in preview..." : "Find in file...",
165375
+ matchInfo: isMarkdownPreviewActive ? mdMatchInfo : search2.matchInfo,
165376
+ onNext: handleSearchNext,
165377
+ onPrevious: handleSearchPrevious,
165378
+ onClose: handleSearchClose
165176
165379
  }
165177
- ),
165178
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 min-w-0 flex-1 overflow-hidden", children: viewFilePath ? /* @__PURE__ */ jsxRuntimeExports.jsx(
165179
- FileViewer,
165180
- {
165181
- workspaceId,
165182
- filePath: viewFilePath,
165183
- external: viewIsExternal,
165184
- untitled: isUntitledPath(viewFilePath),
165185
- line: viewLine,
165186
- lineEnd: viewLineEnd,
165187
- column: viewColumn,
165188
- onEditorView: handleEditorView,
165189
- onCursorLineChange: handleCursorLineChange,
165190
- renderMarkdown,
165191
- editable: true,
165192
- hideTitleBar: true,
165193
- lspExtension: viewIsExternal || isUntitledPath(viewFilePath) ? null : lspExtension,
165194
- viewMode: isMarkdown ? mdViewMode : void 0,
165195
- onViewModeChange: isMarkdown ? setMdViewMode : void 0,
165196
- initialEditedContent: tabState.get(viewFilePath)?.editedContent ?? null,
165197
- savedEditorState: savedEditorStatesRef.current[viewFilePath]?.editorState ?? tabState.get(viewFilePath)?.editorState,
165198
- savedScrollTop: savedEditorStatesRef.current[viewFilePath]?.scrollTop ?? tabState.get(viewFilePath)?.scrollTop,
165199
- onEditedContentChange: handleEditedContentChange,
165200
- languageOverride: tabState.getLanguage(viewFilePath),
165201
- onLanguageOverrideChange: (id28) => handleLanguageOverride(viewFilePath, id28),
165202
- onSaveAs: isUntitledPath(viewFilePath) && pickSaveFile ? (content2) => handleSaveUntitled(viewFilePath, content2) : void 0,
165203
- onLoadError: handleFileLoadError,
165204
- toolbar: search2.searchOpen ? /* @__PURE__ */ jsxRuntimeExports.jsx(
165205
- SearchBar,
165206
- {
165207
- ref: search2.searchBarRef,
165208
- query: search2.searchQuery,
165209
- onQueryChange: search2.setSearchQuery,
165210
- options: search2.searchOptions,
165211
- onOptionsChange: search2.setSearchOptions,
165212
- placeholder: isMarkdownPreviewActive ? "Find in preview..." : "Find in file...",
165213
- matchInfo: isMarkdownPreviewActive ? mdMatchInfo : search2.matchInfo,
165214
- onNext: handleSearchNext,
165215
- onPrevious: handleSearchPrevious,
165216
- onClose: handleSearchClose
165217
- }
165218
- ) : void 0
165219
- },
165220
- isUntitledPath(viewFilePath) ? viewFilePath : "file"
165221
- ) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-3 px-8 text-center", children: [
165222
- /* @__PURE__ */ jsxRuntimeExports.jsx(File$1, { className: "size-8 text-muted-foreground/30" }),
165223
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Select a file to view" })
165224
- ] }) }) })
165225
- ] }) })
165226
- ]
165227
- }
165228
- )
165380
+ ) : void 0
165381
+ },
165382
+ isUntitledPath(viewFilePath) ? viewFilePath : "file"
165383
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-3 px-8 text-center", children: [
165384
+ /* @__PURE__ */ jsxRuntimeExports.jsx(File$1, { className: "size-8 text-muted-foreground/30" }),
165385
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Select a file to view" })
165386
+ ] }) }) })
165387
+ ] }) }, "file-viewer"),
165388
+ treeSide === "right" && separatorEl,
165389
+ treeSide === "right" && treePanelEl
165390
+ ] }, treeSide)
165229
165391
  ) })
165230
165392
  );
165231
165393
  }
@@ -176611,6 +176773,8 @@ function ChatView({
176611
176773
  const getMessageKey = reactExports.useCallback((message) => message.id, []);
176612
176774
  const messagesRef = reactExports.useRef(messages);
176613
176775
  messagesRef.current = messages;
176776
+ const seenMessageIdsRef = reactExports.useRef(null);
176777
+ const enteringIdsRef = reactExports.useRef(/* @__PURE__ */ new Set());
176614
176778
  reactExports.useEffect(() => {
176615
176779
  const sentinel = sentinelRef.current;
176616
176780
  if (!sentinel || !scrollEl || !hasMore || loadingHistory) return;
@@ -176631,6 +176795,20 @@ function ChatView({
176631
176795
  (message, messageIndex) => {
176632
176796
  const currentMessages = messagesRef.current;
176633
176797
  const isLastMessage = messageIndex === currentMessages.length - 1;
176798
+ const seen = seenMessageIdsRef.current;
176799
+ let entering = false;
176800
+ if (seen === null) {
176801
+ seenMessageIdsRef.current = new Set(currentMessages.map((m2) => m2.id));
176802
+ } else if (!seen.has(message.id)) {
176803
+ seen.add(message.id);
176804
+ if (messageIndex >= currentMessages.length - 2) {
176805
+ entering = true;
176806
+ enteringIdsRef.current.add(message.id);
176807
+ window.setTimeout(() => enteringIdsRef.current.delete(message.id), 400);
176808
+ }
176809
+ } else if (enteringIdsRef.current.has(message.id)) {
176810
+ entering = true;
176811
+ }
176634
176812
  const isLastAssistant = message.role === "assistant" && isLastMessage;
176635
176813
  const hasPendingInteractiveTool = isLastAssistant && message.parts.some((p2) => {
176636
176814
  if (!isToolUIPart(p2) || !IN_PROGRESS_STATES.has(p2.state)) return false;
@@ -176641,7 +176819,7 @@ function ChatView({
176641
176819
  const segments = groupMessageParts(message.parts);
176642
176820
  if (message.role !== "assistant") {
176643
176821
  if (segments.length === 0) return null;
176644
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "user", children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: segments.map((segment) => {
176822
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "user", className: entering ? "chat-message-enter" : void 0, children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: segments.map((segment) => {
176645
176823
  if (segment.type === "text" && segment.part.type === "text" && segment.part.text.trim()) {
176646
176824
  return /* @__PURE__ */ jsxRuntimeExports.jsx(MessageResponse, { children: segment.part.text }, `${message.id}-text-${segment.partIndex}`);
176647
176825
  }
@@ -176658,7 +176836,7 @@ function ChatView({
176658
176836
  }) }) });
176659
176837
  }
176660
176838
  if (segments.length === 0 && !showThinking) return null;
176661
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "assistant", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(MessageContent, { children: [
176839
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "assistant", className: entering ? "chat-message-enter" : void 0, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(MessageContent, { children: [
176662
176840
  segments.map((segment) => {
176663
176841
  if (segment.type === "text") {
176664
176842
  const { part, partIndex } = segment;
@@ -177091,7 +177269,7 @@ function ContextMeter({
177091
177269
  cy: "12",
177092
177270
  r: DONUT_RADIUS,
177093
177271
  fill: "none",
177094
- className: cn$2("transition-all", progressColor),
177272
+ className: cn$2("transition-[stroke-dashoffset,stroke]", progressColor),
177095
177273
  strokeWidth: "3",
177096
177274
  strokeLinecap: "round",
177097
177275
  strokeDasharray: DONUT_CIRCUMFERENCE,
@@ -179328,6 +179506,8 @@ function MultiWorkspacePanelHost({ emptyState, children: children2 }) {
179328
179506
  settings.maxCachedWorkspaces ?? DEFAULT_MAX_CACHED_WORKSPACES
179329
179507
  );
179330
179508
  const activeWorkspaceId = parseWorkspaceFromPath(pathname);
179509
+ const wrapperRef = reactExports.useRef(null);
179510
+ const prevWorkspaceIdRef = reactExports.useRef(activeWorkspaceId);
179331
179511
  if (activeWorkspaceId && !cache.has(activeWorkspaceId)) {
179332
179512
  setCache((prev2) => {
179333
179513
  if (prev2.has(activeWorkspaceId)) return prev2;
@@ -179360,6 +179540,20 @@ function MultiWorkspacePanelHost({ emptyState, children: children2 }) {
179360
179540
  return next2;
179361
179541
  });
179362
179542
  }, [activeWorkspaceId]);
179543
+ reactExports.useLayoutEffect(() => {
179544
+ const prev2 = prevWorkspaceIdRef.current;
179545
+ prevWorkspaceIdRef.current = activeWorkspaceId;
179546
+ if (!prev2 || !activeWorkspaceId || prev2 === activeWorkspaceId) return;
179547
+ const el = wrapperRef.current;
179548
+ if (!el) return;
179549
+ el.style.transition = "none";
179550
+ el.style.opacity = "0.6";
179551
+ const raf = requestAnimationFrame(() => {
179552
+ el.style.transition = "opacity 140ms cubic-bezier(0.23, 1, 0.32, 1)";
179553
+ el.style.opacity = "1";
179554
+ });
179555
+ return () => cancelAnimationFrame(raf);
179556
+ }, [activeWorkspaceId]);
179363
179557
  const { projects, isLoading, error } = useProjects();
179364
179558
  reactExports.useEffect(() => {
179365
179559
  if (isLoading || error) return;
@@ -179397,7 +179591,7 @@ function MultiWorkspacePanelHost({ emptyState, children: children2 }) {
179397
179591
  lastCacheKeysRef.current = current2;
179398
179592
  }, [cache]);
179399
179593
  if (!activeWorkspaceId) return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative h-full w-full", children: emptyState });
179400
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative h-full w-full", children: Array.from(cache.values()).map(({ workspaceId }) => {
179594
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: wrapperRef, className: "relative h-full w-full", children: Array.from(cache.values()).map(({ workspaceId }) => {
179401
179595
  const isActive = workspaceId === activeWorkspaceId;
179402
179596
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
179403
179597
  "div",
@@ -202887,75 +203081,12 @@ function ToolbarOverflowProvider({ children: children2 }) {
202887
203081
  )
202888
203082
  ] });
202889
203083
  }
202890
- function ToolbarOverflowMenuItems() {
202891
- const ctx = reactExports.useContext(ToolbarOverflowContext);
202892
- if (!ctx) {
202893
- throw new Error("ToolbarOverflowMenuItems must be used inside ToolbarOverflowProvider");
202894
- }
202895
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
202896
- /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onClick: ctx.openTasks, children: [
202897
- /* @__PURE__ */ jsxRuntimeExports.jsx(ListTodo, { className: "size-4" }),
202898
- "Tasks"
202899
- ] }),
202900
- /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onClick: ctx.openCronjobs, children: [
202901
- /* @__PURE__ */ jsxRuntimeExports.jsx(Timer$1, { className: "size-4" }),
202902
- "Cronjobs"
202903
- ] }),
202904
- /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onClick: ctx.openReports, "data-testid": "menu__reports", children: [
202905
- /* @__PURE__ */ jsxRuntimeExports.jsx(ChartColumn, { className: "size-4" }),
202906
- "Usage"
202907
- ] }),
202908
- /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onClick: ctx.openTunnel, children: [
202909
- /* @__PURE__ */ jsxRuntimeExports.jsx(
202910
- Globe,
202911
- {
202912
- className: ctx.tunnelStatus === "error" ? "size-4 text-red-500" : ctx.tunnelStatus === "running" ? "size-4 text-green-500" : "size-4"
202913
- }
202914
- ),
202915
- ctx.tunnelStatus === "running" ? "Mobile access" : "Start tunnel"
202916
- ] }),
202917
- /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onClick: ctx.openResources, "data-testid": "menu__resources", children: [
202918
- /* @__PURE__ */ jsxRuntimeExports.jsx(Activity, { className: "size-4" }),
202919
- "Resources"
202920
- ] })
202921
- ] });
202922
- }
202923
203084
  function ToolbarActionBar() {
202924
203085
  const ctx = reactExports.useContext(ToolbarOverflowContext);
202925
203086
  if (!ctx) {
202926
203087
  throw new Error("ToolbarActionBar must be used inside ToolbarOverflowProvider");
202927
203088
  }
202928
203089
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
202929
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
202930
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
202931
- Button,
202932
- {
202933
- size: "icon-sm",
202934
- variant: "ghost",
202935
- className: "text-muted-foreground",
202936
- "aria-label": "Resources",
202937
- "data-testid": "project-list__resources-button",
202938
- onClick: ctx.openResources,
202939
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Activity, { className: "size-4" })
202940
- }
202941
- ) }),
202942
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "top", children: "Resources" })
202943
- ] }),
202944
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
202945
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
202946
- Button,
202947
- {
202948
- size: "icon-sm",
202949
- variant: "ghost",
202950
- className: "text-muted-foreground",
202951
- "aria-label": "Usage",
202952
- "data-testid": "project-list__usage-button",
202953
- onClick: ctx.openReports,
202954
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChartColumn, { className: "size-4" })
202955
- }
202956
- ) }),
202957
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "top", children: "Usage" })
202958
- ] }),
202959
203090
  /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
202960
203091
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
202961
203092
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -202966,7 +203097,7 @@ function ToolbarActionBar() {
202966
203097
  className: "text-muted-foreground",
202967
203098
  "aria-label": "More actions",
202968
203099
  "data-testid": "project-list__overflow-trigger",
202969
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Ellipsis, { className: "size-4" })
203100
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(EllipsisVertical, { className: "size-4" })
202970
203101
  }
202971
203102
  ) }) }),
202972
203103
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "top", children: "More" })
@@ -202990,6 +203121,36 @@ function ToolbarActionBar() {
202990
203121
  ctx.tunnelStatus === "running" ? "Mobile access" : "Start tunnel"
202991
203122
  ] })
202992
203123
  ] })
203124
+ ] }),
203125
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
203126
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
203127
+ Button,
203128
+ {
203129
+ size: "icon-sm",
203130
+ variant: "ghost",
203131
+ className: "text-muted-foreground",
203132
+ "aria-label": "Resources",
203133
+ "data-testid": "project-list__resources-button",
203134
+ onClick: ctx.openResources,
203135
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Activity, { className: "size-4" })
203136
+ }
203137
+ ) }),
203138
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "top", children: "Resources" })
203139
+ ] }),
203140
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
203141
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
203142
+ Button,
203143
+ {
203144
+ size: "icon-sm",
203145
+ variant: "ghost",
203146
+ className: "text-muted-foreground",
203147
+ "aria-label": "Usage",
203148
+ "data-testid": "project-list__usage-button",
203149
+ onClick: ctx.openReports,
203150
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChartColumn, { className: "size-4" })
203151
+ }
203152
+ ) }),
203153
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "top", children: "Usage" })
202993
203154
  ] })
202994
203155
  ] });
202995
203156
  }
@@ -203012,12 +203173,12 @@ const PANEL_SHORTCUTS = {
203012
203173
  browser: "⇧⌘B"
203013
203174
  };
203014
203175
  const DockviewTerminalContainer = reactExports.lazy(
203015
- () => import("./DockviewTerminalContainer-DQYYK-79.js").then((m2) => ({
203176
+ () => import("./DockviewTerminalContainer-BIJPTTun.js").then((m2) => ({
203016
203177
  default: m2.DockviewTerminalContainer
203017
203178
  }))
203018
203179
  );
203019
203180
  const DockviewBrowserContainer = reactExports.lazy(
203020
- () => import("./DockviewBrowserContainer-BxukCnRj.js").then((m2) => ({
203181
+ () => import("./DockviewBrowserContainer-CxzZY1qq.js").then((m2) => ({
203021
203182
  default: m2.DockviewBrowserContainer
203022
203183
  }))
203023
203184
  );
@@ -203519,6 +203680,20 @@ function SharedDockviewLayout() {
203519
203680
  detail: { workspaceId: ws, filePath }
203520
203681
  })
203521
203682
  );
203683
+ },
203684
+ editorGoBack: () => {
203685
+ const ws = activeWorkspaceIdRef.current;
203686
+ if (!ws) return;
203687
+ window.dispatchEvent(
203688
+ new CustomEvent("band:editor-go-back", { detail: { workspaceId: ws } })
203689
+ );
203690
+ },
203691
+ editorGoForward: () => {
203692
+ const ws = activeWorkspaceIdRef.current;
203693
+ if (!ws) return;
203694
+ window.dispatchEvent(
203695
+ new CustomEvent("band:editor-go-forward", { detail: { workspaceId: ws } })
203696
+ );
203522
203697
  }
203523
203698
  }),
203524
203699
  []
@@ -203942,6 +204117,7 @@ function SharedDockviewLayout() {
203942
204117
  }
203943
204118
  if (initialActiveState?.maximizedGroup) {
203944
204119
  applyMaximizedGroupToApi(event.api, initialActiveState.maximizedGroup);
204120
+ applyMaximizeEdgeVisibility(event.api, true);
203945
204121
  }
203946
204122
  event.api.onDidLayoutChange(() => {
203947
204123
  if (!initializedRef.current) return;
@@ -203951,6 +204127,7 @@ function SharedDockviewLayout() {
203951
204127
  (e3) => {
203952
204128
  if (!initializedRef.current) return;
203953
204129
  if (inSaveLayoutToJSON) return;
204130
+ applyMaximizeEdgeVisibility(event.api, !!e3.isMaximized, containerRef.current);
203954
204131
  const workspaceId = activeWorkspaceIdRef.current;
203955
204132
  if (!workspaceId) return;
203956
204133
  if (e3.isMaximized && !e3.group?.id) return;
@@ -203985,6 +204162,7 @@ function SharedDockviewLayout() {
203985
204162
  applyGroupActiveViewsToApi(api, activeState);
203986
204163
  }
203987
204164
  applyMaximizedGroupToApi(api, activeState?.maximizedGroup);
204165
+ applyMaximizeEdgeVisibility(api, !!activeState?.maximizedGroup);
203988
204166
  }, [activeWorkspaceId]);
203989
204167
  const prevHiddenRef = reactExports.useRef(hiddenPanels);
203990
204168
  reactExports.useEffect(() => {
@@ -204554,9 +204732,11 @@ function AppShell() {
204554
204732
  const animateSidebarToggle = reactExports.useCallback(() => {
204555
204733
  const sidebar = sidebarElRef.current;
204556
204734
  if (!sidebar) return;
204735
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
204557
204736
  const els = [sidebar, mainElRef.current];
204558
204737
  for (const el of els) {
204559
- if (el) el.style.transition = "flex-grow 200ms ease, flex-basis 200ms ease";
204738
+ if (el)
204739
+ el.style.transition = "flex-grow 200ms cubic-bezier(0.77, 0, 0.175, 1), flex-basis 200ms cubic-bezier(0.77, 0, 0.175, 1)";
204560
204740
  }
204561
204741
  let timer2 = 0;
204562
204742
  const clear3 = (e3) => {
@@ -204596,28 +204776,8 @@ function AppShell() {
204596
204776
  },
204597
204777
  []
204598
204778
  );
204599
- const menuItems = reactExports.useMemo(
204600
- () => /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
204601
- /* @__PURE__ */ jsxRuntimeExports.jsx(ToolbarOverflowMenuItems, {}),
204602
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
204603
- DropdownMenuItem,
204604
- {
204605
- onClick: () => {
204606
- const fn2 = window.__bandOpenSettings;
204607
- fn2?.();
204608
- },
204609
- children: [
204610
- /* @__PURE__ */ jsxRuntimeExports.jsx(Settings$1, { className: "size-4" }),
204611
- "Settings"
204612
- ]
204613
- }
204614
- )
204615
- ] }),
204616
- []
204617
- );
204618
204779
  const navControlProps = reactExports.useMemo(
204619
204780
  () => ({
204620
- menuItems,
204621
204781
  onGoBack: navigationHistory.goBack,
204622
204782
  onGoForward: navigationHistory.goForward,
204623
204783
  canGoBack: navigationHistory.canGoBack,
@@ -204626,7 +204786,6 @@ function AppShell() {
204626
204786
  sidebarVisible
204627
204787
  }),
204628
204788
  [
204629
- menuItems,
204630
204789
  navigationHistory.goBack,
204631
204790
  navigationHistory.goForward,
204632
204791
  navigationHistory.canGoBack,
@@ -204666,14 +204825,7 @@ function AppShell() {
204666
204825
  className: "h-full flex flex-col overflow-hidden border-r border-border bg-sidebar",
204667
204826
  "data-testid": "app-shell__sidebar",
204668
204827
  children: [
204669
- /* @__PURE__ */ jsxRuntimeExports.jsx(
204670
- SidebarTitleBar,
204671
- {
204672
- ...navControlProps,
204673
- menuItems: void 0,
204674
- offsetClass: titleBarOffset
204675
- }
204676
- ),
204828
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarTitleBar, { ...navControlProps, offsetClass: titleBarOffset }),
204677
204829
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 min-h-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(DashboardShell, { hideTitleBar: true, bottomActions: /* @__PURE__ */ jsxRuntimeExports.jsx(ToolbarActionBar, {}) }) })
204678
204830
  ]
204679
204831
  }
@@ -204724,12 +204876,12 @@ function RootLayout() {
204724
204876
  ] })
204725
204877
  ] });
204726
204878
  }
204727
- const $$splitComponentImporter$1 = () => import("./index-DAqzmsPy.js");
204879
+ const $$splitComponentImporter$1 = () => import("./index-BVjGe10C.js");
204728
204880
  const Route$1 = createFileRoute("/")({
204729
204881
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
204730
204882
  });
204731
- const $$splitNotFoundComponentImporter = () => import("./workspace._workspaceId-CHMs1pW4.js");
204732
- const $$splitComponentImporter = () => import("./workspace._workspaceId-MLWQzLSj.js");
204883
+ const $$splitNotFoundComponentImporter = () => import("./workspace._workspaceId-joQQNCnQ.js");
204884
+ const $$splitComponentImporter = () => import("./workspace._workspaceId-GwRuI3oS.js");
204733
204885
  const Route2 = createFileRoute("/workspace/$workspaceId")({
204734
204886
  component: lazyRouteComponent($$splitComponentImporter, "component"),
204735
204887
  // Bookmarks / shared links from before route unification (`/workspace/$id/changes`,
@@ -204865,7 +205017,7 @@ export {
204865
205017
  cos as ay,
204866
205018
  sin as az,
204867
205019
  LRLanguage as b,
204868
- Close as b$,
205020
+ Content$1 as b$,
204869
205021
  insertCluster as b0,
204870
205022
  insertNode as b1,
204871
205023
  positionNode as b2,
@@ -204901,8 +205053,8 @@ export {
204901
205053
  isDesktop as bW,
204902
205054
  array$2 as bX,
204903
205055
  ordinal as bY,
204904
- Root$5 as bZ,
204905
- Content$1 as b_,
205056
+ getUserDefinedConfig as bZ,
205057
+ Root$5 as b_,
204906
205058
  delimitedIndent as ba,
204907
205059
  NodeWeakMap as bb,
204908
205060
  snippetCompletion as bc,
@@ -204930,44 +205082,44 @@ export {
204930
205082
  constant as by,
204931
205083
  isFunction$1 as bz,
204932
205084
  continuedIndent as c,
204933
- timeSunday as c$,
204934
- cn$2 as c0,
204935
- Title as c1,
204936
- Description as c2,
204937
- Portal$4 as c3,
204938
- Overlay$1 as c4,
204939
- GitCompare as c5,
204940
- FolderOpen as c6,
204941
- useDashboardStore as c7,
204942
- DesktopDragRegion as c8,
204943
- Menu$1 as c9,
204944
- reactDomExports as cA,
204945
- Globe as cB,
204946
- Popover as cC,
204947
- PopoverTrigger as cD,
204948
- PopoverContent as cE,
204949
- Search as cF,
204950
- Trash2 as cG,
204951
- DropdownMenu as cH,
204952
- DropdownMenuTrigger as cI,
204953
- ChevronDown as cJ,
204954
- DropdownMenuContent as cK,
204955
- DropdownMenuItem as cL,
204956
- TriangleAlert as cM,
204957
- RotateCw as cN,
204958
- Rgb as cO,
204959
- rgbConvert as cP,
204960
- define as cQ,
204961
- extend$2 as cR,
204962
- Color as cS,
204963
- nogamma as cT,
204964
- hue as cU,
204965
- time$2 as cV,
204966
- min$1 as cW,
204967
- max$1 as cX,
204968
- dayjs2 as cY,
204969
- timeFormat as cZ,
204970
- timeMonth as c_,
205085
+ timeSaturday as c$,
205086
+ Close as c0,
205087
+ cn$2 as c1,
205088
+ Title as c2,
205089
+ Description as c3,
205090
+ Portal$4 as c4,
205091
+ Overlay$1 as c5,
205092
+ GitCompare as c6,
205093
+ FolderOpen as c7,
205094
+ useDashboardStore as c8,
205095
+ DesktopDragRegion as c9,
205096
+ Globe as cA,
205097
+ Popover as cB,
205098
+ PopoverTrigger as cC,
205099
+ PopoverContent as cD,
205100
+ Search as cE,
205101
+ Trash2 as cF,
205102
+ DropdownMenu as cG,
205103
+ DropdownMenuTrigger as cH,
205104
+ ChevronDown as cI,
205105
+ DropdownMenuContent as cJ,
205106
+ DropdownMenuItem as cK,
205107
+ TriangleAlert as cL,
205108
+ RotateCw as cM,
205109
+ Rgb as cN,
205110
+ rgbConvert as cO,
205111
+ define as cP,
205112
+ extend$2 as cQ,
205113
+ Color as cR,
205114
+ nogamma as cS,
205115
+ hue as cT,
205116
+ time$2 as cU,
205117
+ min$1 as cV,
205118
+ max$1 as cW,
205119
+ dayjs2 as cX,
205120
+ timeFormat as cY,
205121
+ timeMonth as cZ,
205122
+ timeSunday as c_,
204971
205123
  ChevronsUpDown as ca,
204972
205124
  DiffView as cb,
204973
205125
  CodeBrowserView as cc,
@@ -204978,78 +205130,77 @@ export {
204978
205130
  useSettingsQuery as ch,
204979
205131
  agentTypeSupportsSessionListing as ci,
204980
205132
  ChatView as cj,
204981
- getUserDefinedConfig as ck,
204982
- writeClipboardText as cl,
204983
- readClipboardText as cm,
204984
- ArrowLeft as cn,
204985
- ArrowUp as co,
204986
- ArrowDown as cp,
204987
- ArrowRight as cq,
204988
- ClipboardCopy as cr,
204989
- ClipboardPaste as cs,
204990
- getOrCreateTerminal as ct,
204991
- SearchBar as cu,
204992
- getIconSVG as cv,
204993
- registerIconPacks as cw,
204994
- unknownIcon as cx,
204995
- invoke as cy,
204996
- listen as cz,
205133
+ writeClipboardText as ck,
205134
+ readClipboardText as cl,
205135
+ ArrowLeft as cm,
205136
+ ArrowUp as cn,
205137
+ ArrowDown as co,
205138
+ ArrowRight as cp,
205139
+ ClipboardCopy as cq,
205140
+ ClipboardPaste as cr,
205141
+ getOrCreateTerminal as cs,
205142
+ SearchBar as ct,
205143
+ getIconSVG as cu,
205144
+ registerIconPacks as cv,
205145
+ unknownIcon as cw,
205146
+ invoke as cx,
205147
+ listen as cy,
205148
+ reactDomExports as cz,
204997
205149
  foldInside as d,
204998
- timeSaturday as d0,
204999
- timeFriday as d1,
205000
- timeThursday as d2,
205001
- timeWednesday as d3,
205002
- timeTuesday as d4,
205003
- timeMonday as d5,
205004
- timeDay as d6,
205005
- timeHour as d7,
205006
- timeMinute as d8,
205007
- second as d9,
205008
- isArguments$1 as dA,
205009
- copyObject as dB,
205010
- getPrototype as dC,
205011
- cloneArrayBuffer as dD,
205012
- cloneTypedArray as dE,
205013
- getTag$1 as dF,
205014
- nodeUtil as dG,
205015
- copyArray as dH,
205016
- isBuffer$1 as dI,
205017
- cloneBuffer as dJ,
205018
- initCloneObject as dK,
205019
- Stack as dL,
205020
- MapCache as dM,
205021
- Uint8Array$1 as dN,
205022
- isTypedArray$1 as dO,
205023
- isLength$1 as dP,
205024
- Set$1 as dQ,
205025
- createAssigner as dR,
205026
- isPrototype as dS,
205027
- router as dT,
205028
- millisecond as da,
205029
- isObject$2 as db,
205030
- isIterateeCall$1 as dc,
205031
- keysIn as dd,
205032
- eq as de,
205033
- isArrayLike$1 as df,
205034
- isArray$1 as dg,
205035
- identity$1 as dh,
205036
- isIndex$1 as di,
205037
- assignValue as dj,
205038
- format as dk,
205039
- styles2String as dl,
205040
- isLabelStyle as dm,
205041
- setToString as dn,
205042
- overRest as dp,
205043
- baseFor as dq,
205044
- baseAssignValue as dr,
205045
- baseUnary as ds,
205046
- merge$1 as dt,
205047
- isObjectLike$1 as du,
205048
- baseGetTag as dv,
205049
- Symbol$1 as dw,
205050
- arrayLikeKeys as dx,
205051
- baseKeys as dy,
205052
- memoize as dz,
205150
+ timeFriday as d0,
205151
+ timeThursday as d1,
205152
+ timeWednesday as d2,
205153
+ timeTuesday as d3,
205154
+ timeMonday as d4,
205155
+ timeDay as d5,
205156
+ timeHour as d6,
205157
+ timeMinute as d7,
205158
+ second as d8,
205159
+ millisecond as d9,
205160
+ copyObject as dA,
205161
+ getPrototype as dB,
205162
+ cloneArrayBuffer as dC,
205163
+ cloneTypedArray as dD,
205164
+ getTag$1 as dE,
205165
+ nodeUtil as dF,
205166
+ copyArray as dG,
205167
+ isBuffer$1 as dH,
205168
+ cloneBuffer as dI,
205169
+ initCloneObject as dJ,
205170
+ Stack as dK,
205171
+ MapCache as dL,
205172
+ Uint8Array$1 as dM,
205173
+ isTypedArray$1 as dN,
205174
+ isLength$1 as dO,
205175
+ Set$1 as dP,
205176
+ createAssigner as dQ,
205177
+ isPrototype as dR,
205178
+ router as dS,
205179
+ isObject$2 as da,
205180
+ isIterateeCall$1 as db,
205181
+ keysIn as dc,
205182
+ eq as dd,
205183
+ isArrayLike$1 as de,
205184
+ isArray$1 as df,
205185
+ identity$1 as dg,
205186
+ isIndex$1 as dh,
205187
+ assignValue as di,
205188
+ format as dj,
205189
+ styles2String as dk,
205190
+ isLabelStyle as dl,
205191
+ setToString as dm,
205192
+ overRest as dn,
205193
+ baseFor as dp,
205194
+ baseAssignValue as dq,
205195
+ baseUnary as dr,
205196
+ merge$1 as ds,
205197
+ isObjectLike$1 as dt,
205198
+ baseGetTag as du,
205199
+ Symbol$1 as dv,
205200
+ arrayLikeKeys as dw,
205201
+ baseKeys as dx,
205202
+ memoize as dy,
205203
+ isArguments$1 as dz,
205053
205204
  ifNotIn as e,
205054
205205
  foldNodeProp as f,
205055
205206
  completeFromList as g,