@band-app/server 0.27.0 → 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 (162) hide show
  1. package/dist/client/assets/{DockviewBrowserContainer-CGJxcrlC.js → DockviewBrowserContainer-BT0Xf-Qd.js} +1 -1
  2. package/dist/client/assets/{DockviewTerminalContainer-Ch1hGjB3.js → DockviewTerminalContainer-Cfq2Horm.js} +2 -2
  3. package/dist/client/assets/{TerminalPanel-D6316IRS.js → TerminalPanel-BmTjgsHC.js} +1 -1
  4. package/dist/client/assets/{_basePickBy-CmBV18rc.js → _basePickBy-C5e3lPfw.js} +1 -1
  5. package/dist/client/assets/{_baseUniq-U0BTd0Rz.js → _baseUniq-BWawrl1m.js} +1 -1
  6. package/dist/client/assets/{arc-BsQxyIE1.js → arc-kL4UMvqY.js} +1 -1
  7. package/dist/client/assets/{architectureDiagram-VXUJARFQ-utzNWMoy.js → architectureDiagram-VXUJARFQ-CgqIs59Y.js} +1 -1
  8. package/dist/client/assets/{blockDiagram-VD42YOAC-xxfCrQvu.js → blockDiagram-VD42YOAC-CMeufhUZ.js} +1 -1
  9. package/dist/client/assets/{c4Diagram-YG6GDRKO-CYbkaWJ4.js → c4Diagram-YG6GDRKO-CAuYwvwS.js} +1 -1
  10. package/dist/client/assets/channel-C29TlOk_.js +1 -0
  11. package/dist/client/assets/{chunk-4BX2VUAB-DKCxjb37.js → chunk-4BX2VUAB-6Xmnr9re.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-B9W9ltjh.js → chunk-55IACEB6-Dyqy3jY2.js} +1 -1
  13. package/dist/client/assets/{chunk-B4BG7PRW-0MSaUsdv.js → chunk-B4BG7PRW-CHkzDkkl.js} +1 -1
  14. package/dist/client/assets/{chunk-DI55MBZ5-K1HZY-B4.js → chunk-DI55MBZ5-Bm8dHcM7.js} +1 -1
  15. package/dist/client/assets/{chunk-FMBD7UC4-DL19-zkO.js → chunk-FMBD7UC4-DUSTPPko.js} +1 -1
  16. package/dist/client/assets/{chunk-QN33PNHL-Bjj5Xo40.js → chunk-QN33PNHL-lANEHpc4.js} +1 -1
  17. package/dist/client/assets/{chunk-QZHKN3VN-B7u9UlRD.js → chunk-QZHKN3VN-CdOUQvqm.js} +1 -1
  18. package/dist/client/assets/{chunk-TZMSLE5B-1C4Ii4Su.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-PGTI-4nv.js → cose-bilkent-S5V4N54A-DysgQPxt.js} +1 -1
  23. package/dist/client/assets/{dagre-6UL2VRFP-SduuRX7O.js → dagre-6UL2VRFP-Dlzo9Msc.js} +1 -1
  24. package/dist/client/assets/{diagram-PSM6KHXK-CBSJaBQx.js → diagram-PSM6KHXK-BYb3WSVe.js} +1 -1
  25. package/dist/client/assets/{diagram-QEK2KX5R-BtO_0TYR.js → diagram-QEK2KX5R-DQ47fOtM.js} +1 -1
  26. package/dist/client/assets/{diagram-S2PKOQOG-CU-3HUn7.js → diagram-S2PKOQOG-8W5mRzVZ.js} +1 -1
  27. package/dist/client/assets/{erDiagram-Q2GNP2WA-B7YcBWa7.js → erDiagram-Q2GNP2WA-mgQREmQi.js} +1 -1
  28. package/dist/client/assets/{flowDiagram-NV44I4VS-B_exjXhH.js → flowDiagram-NV44I4VS-B3xMnHpg.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-JELNMOA3-K_s2lhZo.js → ganttDiagram-JELNMOA3-uAMwC_fw.js} +1 -1
  30. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-Cy8dWU3T.js → gitGraphDiagram-V2S2FVAM-CMzRWjLs.js} +1 -1
  31. package/dist/client/assets/{graph-F7Go3eb_.js → graph-BmHmHBlj.js} +1 -1
  32. package/dist/client/assets/{highlighted-body-B3W2YXNL-JIbcl_Gj.js → highlighted-body-B3W2YXNL-CktG8_2q.js} +1 -1
  33. package/dist/client/assets/{index-T2mcmOLE.js → index-7ksyuzec.js} +1 -1
  34. package/dist/client/assets/{index-CpaiC9qY.js → index-B5eLE5g9.js} +1 -1
  35. package/dist/client/assets/{index-VnMyG1bC.js → index-BAkL31T9.js} +1 -1
  36. package/dist/client/assets/{index-C8kfQI4r.js → index-BVM1YUvk.js} +1 -1
  37. package/dist/client/assets/{index-Ckir_3bE.js → index-Bl_qcgmA.js} +1 -1
  38. package/dist/client/assets/{index-QMtr_UY_.js → index-C17JkYK9.js} +1 -1
  39. package/dist/client/assets/{index-BwLCRFTA.js → index-CE-YdiiQ.js} +1 -1
  40. package/dist/client/assets/{index-Cg4Lw3Yz.js → index-CO5pYvVV.js} +1 -1
  41. package/dist/client/assets/{index-DKc3v7ID.js → index-CVhvgW2f.js} +1 -1
  42. package/dist/client/assets/{index-DtwjNrea.js → index-CmBpodpp.js} +1 -1
  43. package/dist/client/assets/{index-DR5Cdr17.js → index-CuFyr77F.js} +1 -1
  44. package/dist/client/assets/{index-Cy5Bsovp.js → index-CyIB4sGJ.js} +1 -1
  45. package/dist/client/assets/{index-O8FbcZ5P.js → index-DDjGWZqJ.js} +1 -1
  46. package/dist/client/assets/{index-qr9Za9SW.js → index-DOcXD6ZB.js} +1 -1
  47. package/dist/client/assets/{index-D2dWAqXm.js → index-DWrfvgIb.js} +1 -1
  48. package/dist/client/assets/{index-2I1ScAnS.js → index-Db-V2kYr.js} +1 -1
  49. package/dist/client/assets/{index-D3_75AIk.js → index-Dt1N14f0.js} +1 -1
  50. package/dist/client/assets/{index-CyKK9pLi.js → index-cr1Bo2U9.js} +1 -1
  51. package/dist/client/assets/{infoDiagram-HS3SLOUP-DwTbDgO5.js → infoDiagram-HS3SLOUP-BfGNNAH4.js} +1 -1
  52. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-Di8V2Erc.js → journeyDiagram-XKPGCS4Q-Ds8ah4VH.js} +1 -1
  53. package/dist/client/assets/{kanban-definition-3W4ZIXB7-CsLOWnzV.js → kanban-definition-3W4ZIXB7-C8PaE0y4.js} +1 -1
  54. package/dist/client/assets/{layout-C3qPiTeF.js → layout-D5O5pfhp.js} +1 -1
  55. package/dist/client/assets/{main-C0_EuI87.js → main-CWjuaHE2.js} +238 -238
  56. package/dist/client/assets/main-Di-3Gk2i.css +1 -0
  57. package/dist/client/assets/{mindmap-definition-VGOIOE7T-CTcR694h.js → mindmap-definition-VGOIOE7T-DmB2qgHj.js} +1 -1
  58. package/dist/client/assets/{pieDiagram-ADFJNKIX-B-gdfE-T.js → pieDiagram-ADFJNKIX-BhZD1Pjg.js} +1 -1
  59. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-B0wmCtBi.js → quadrantDiagram-AYHSOK5B-Dm615XC6.js} +1 -1
  60. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-B1DgDXmR.js → requirementDiagram-UZGBJVZJ-ezxSkCjp.js} +1 -1
  61. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-B-onab8X.js → sankeyDiagram-TZEHDZUN-NLwGtj2u.js} +1 -1
  62. package/dist/client/assets/{sequenceDiagram-WL72ISMW-B8sIiN1d.js → sequenceDiagram-WL72ISMW-D8C_g8jv.js} +1 -1
  63. package/dist/client/assets/{square-terminal-Bi7EDEf7.js → square-terminal-DAMJq3wS.js} +1 -1
  64. package/dist/client/assets/{stateDiagram-FKZM4ZOC-CTETJ7q1.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-DYNUQPry.js → timeline-definition-IT6M3QCI-DyPfcP9V.js} +1 -1
  67. package/dist/client/assets/{treemap-GDKQZRPO-extyB4z8.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-D0Fj26bF.js → workspace._workspaceId-COpAN_jv.js} +1 -1
  70. package/dist/client/assets/{xychartDiagram-PRI3JC2R-BtUY3rKA.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-BjdfNGy8.js → DockviewBrowserContainer-CxzZY1qq.js} +1 -1
  75. package/dist/server/assets/{DockviewTerminalContainer-CwXOWGN4.js → DockviewTerminalContainer-BIJPTTun.js} +3 -3
  76. package/dist/server/assets/{TerminalPanel-BkB-gDqg.js → TerminalPanel-kEsEEcuZ.js} +1 -1
  77. package/dist/server/assets/{_basePickBy-8tzGwV15.js → _basePickBy-n4A54Vhz.js} +2 -2
  78. package/dist/server/assets/{_baseUniq-CTXsu8pj.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-DfLShGGX.js → arc-C0mFTnQ4.js} +1 -1
  81. package/dist/server/assets/{architecture-7HQA4BMR-B3ThBUTU.js → architecture-7HQA4BMR-D3tywrA5.js} +6 -6
  82. package/dist/server/assets/{architectureDiagram-VXUJARFQ-CWzfFX__.js → architectureDiagram-VXUJARFQ-B9hdFdgc.js} +6 -6
  83. package/dist/server/assets/{blockDiagram-VD42YOAC-DCaPOrQR.js → blockDiagram-VD42YOAC-Bjf6umts.js} +6 -6
  84. package/dist/server/assets/{c4Diagram-YG6GDRKO-BU-dO_db.js → c4Diagram-YG6GDRKO-B1Go7qzd.js} +2 -2
  85. package/dist/server/assets/{channel-Bs5JejOk.js → channel-Dqy7JuGG.js} +1 -1
  86. package/dist/server/assets/{chunk-4BX2VUAB-BuiyFSiN.js → chunk-4BX2VUAB-DABywcCU.js} +1 -1
  87. package/dist/server/assets/{chunk-55IACEB6-CPYazKTg.js → chunk-55IACEB6-WikJyoE2.js} +1 -1
  88. package/dist/server/assets/{chunk-B4BG7PRW-Kknt_fVn.js → chunk-B4BG7PRW-CUCrrQLt.js} +4 -4
  89. package/dist/server/assets/{chunk-DI55MBZ5-9Ix3Oo-P.js → chunk-DI55MBZ5-CAaqT17X.js} +3 -3
  90. package/dist/server/assets/{chunk-FMBD7UC4-OhxFQXHM.js → chunk-FMBD7UC4-CX_v_cac.js} +1 -1
  91. package/dist/server/assets/{chunk-QN33PNHL-LsrLj9Ip.js → chunk-QN33PNHL-VLbTMtxB.js} +1 -1
  92. package/dist/server/assets/{chunk-QZHKN3VN-BwJQ_Q1g.js → chunk-QZHKN3VN-QB2sRPFp.js} +1 -1
  93. package/dist/server/assets/{chunk-TZMSLE5B-Bl5v6Ae6.js → chunk-TZMSLE5B-C9MxtgP2.js} +1 -1
  94. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-C6GK2Aoj.js → classDiagram-2ON5EDUG-UX-9XQ-6.js} +5 -5
  95. package/dist/server/assets/{classDiagram-2ON5EDUG-C6GK2Aoj.js → classDiagram-v2-WZHVMYZB-UX-9XQ-6.js} +5 -5
  96. package/dist/server/assets/{clone-DqNWgXxT.js → clone-Jt6nkb9-.js} +1 -1
  97. package/dist/server/assets/{cose-bilkent-S5V4N54A-qzfBNLDd.js → cose-bilkent-S5V4N54A-j4JEpP33.js} +1 -1
  98. package/dist/server/assets/{dagre-6UL2VRFP-DNZS86ly.js → dagre-6UL2VRFP-CRjo2D7K.js} +6 -6
  99. package/dist/server/assets/{diagram-PSM6KHXK-C6ImURyq.js → diagram-PSM6KHXK-CdcM_CoU.js} +7 -7
  100. package/dist/server/assets/{diagram-QEK2KX5R-diOF3OBK.js → diagram-QEK2KX5R-DXbEv4yb.js} +6 -6
  101. package/dist/server/assets/{diagram-S2PKOQOG-CP1GoHeA.js → diagram-S2PKOQOG-Bzc1B5Be.js} +6 -6
  102. package/dist/server/assets/{erDiagram-Q2GNP2WA-DnkGfUio.js → erDiagram-Q2GNP2WA-Gt2ujaN1.js} +4 -4
  103. package/dist/server/assets/{flowDiagram-NV44I4VS-B1dpItw0.js → flowDiagram-NV44I4VS-CONOX4ru.js} +5 -5
  104. package/dist/server/assets/{ganttDiagram-JELNMOA3-CfB_h9HP.js → ganttDiagram-JELNMOA3-LO1CZhBF.js} +1 -1
  105. package/dist/server/assets/{gitGraph-G5XIXVHT-uIxmtjOh.js → gitGraph-G5XIXVHT-CYME5GNN.js} +6 -6
  106. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-BWi1KybI.js → gitGraphDiagram-V2S2FVAM-JAQOltND.js} +7 -7
  107. package/dist/server/assets/{graph-BpINl381.js → graph-DDw3y63Y.js} +2 -2
  108. package/dist/server/assets/{highlighted-body-B3W2YXNL-X1-_bh6z.js → highlighted-body-B3W2YXNL-Bl56ZglV.js} +1 -1
  109. package/dist/server/assets/{index-IM5Lznch.js → index-B9mYm2Iv.js} +3 -3
  110. package/dist/server/assets/{index-CyY0UzHL.js → index-BDXNcXpX.js} +2 -2
  111. package/dist/server/assets/{index-CF9A2ZU-.js → index-BFxM6c1Y.js} +2 -2
  112. package/dist/server/assets/{index-BUCj1Yl_.js → index-BFyODGGJ.js} +4 -4
  113. package/dist/server/assets/{index-Ch5w2qx-.js → index-BPA-V89G.js} +2 -2
  114. package/dist/server/assets/{index-Bm4xacwx.js → index-BVjGe10C.js} +1 -1
  115. package/dist/server/assets/{index-Bqv1Yqbp.js → index-BuqNnUeC.js} +2 -2
  116. package/dist/server/assets/{index-CGqMcWZv.js → index-CEHzgT6Q.js} +5 -5
  117. package/dist/server/assets/{index-YfWUTx8U.js → index-CGdiDxDM.js} +2 -2
  118. package/dist/server/assets/{index-DXfbzq6y.js → index-CX4yKGY7.js} +2 -2
  119. package/dist/server/assets/{index-B_uZBCQp.js → index-CXNHt9Li.js} +2 -2
  120. package/dist/server/assets/{index-CecHlx7n.js → index-CZITjlKR.js} +1 -1
  121. package/dist/server/assets/{index-Cuy6v4sQ.js → index-D022D6yP.js} +5 -5
  122. package/dist/server/assets/{index-DEYBFbnW.js → index-DRNvWTdD.js} +2 -2
  123. package/dist/server/assets/{index-Bcu0C2js.js → index-DsR_UKQx.js} +3 -3
  124. package/dist/server/assets/{index-BIn7ueGd.js → index-DsyhmvSr.js} +2 -2
  125. package/dist/server/assets/{index-D3oif9Da.js → index-Dvcd3xwL.js} +2 -2
  126. package/dist/server/assets/{index-oLF27Nfu.js → index-jCxJanyY.js} +2 -2
  127. package/dist/server/assets/{info-VBDWY6EO-CqVqNO_U.js → info-VBDWY6EO-DnY-exPR.js} +6 -6
  128. package/dist/server/assets/{infoDiagram-HS3SLOUP-LstCwT5M.js → infoDiagram-HS3SLOUP-wZZ4hEZ9.js} +5 -5
  129. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-Bq4xdGvc.js → journeyDiagram-XKPGCS4Q-CBD0jzUu.js} +4 -4
  130. package/dist/server/assets/{kanban-definition-3W4ZIXB7-Cz8QJrE-.js → kanban-definition-3W4ZIXB7-9SKGIQ4n.js} +2 -2
  131. package/dist/server/assets/{layout-BR6KziPh.js → layout-C-xcL44a.js} +4 -4
  132. package/dist/server/assets/{mermaid-3ZIDBTTL-CX1H3heG.js → mermaid-3ZIDBTTL-DyXquuLm.js} +1 -1
  133. package/dist/server/assets/{mermaid-parser.core-DErnTWrV.js → mermaid-parser.core-DruUthGx.js} +11 -11
  134. package/dist/server/assets/{mindmap-definition-VGOIOE7T-OX1eekPS.js → mindmap-definition-VGOIOE7T-jjxDAUjJ.js} +3 -3
  135. package/dist/server/assets/{packet-DYOGHKS2-C8FvmUVf.js → packet-DYOGHKS2-CyXoagV-.js} +6 -6
  136. package/dist/server/assets/{pie-VRWISCQL-Bb_jFdxC.js → pie-VRWISCQL-1fjbRV6a.js} +6 -6
  137. package/dist/server/assets/{pieDiagram-ADFJNKIX-CyhwaYTd.js → pieDiagram-ADFJNKIX-5evhP6Hm.js} +7 -7
  138. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-BRzFRm7k.js → quadrantDiagram-AYHSOK5B-Cg2-kPDC.js} +1 -1
  139. package/dist/server/assets/{radar-ZZBFDIW7-C2cWeYfK.js → radar-ZZBFDIW7-DCBXoSHQ.js} +6 -6
  140. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-fJ6FCY2X.js → requirementDiagram-UZGBJVZJ-DjOyZt1t.js} +3 -3
  141. package/dist/server/assets/{router-BSilWMbB.js → router-BtsNvWXM.js} +607 -399
  142. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-DkGxRBc4.js → sankeyDiagram-TZEHDZUN-Bun0ZHSn.js} +1 -1
  143. package/dist/server/assets/{sequenceDiagram-WL72ISMW-Y9h8QzpA.js → sequenceDiagram-WL72ISMW-fn9HXFXZ.js} +3 -3
  144. package/dist/server/assets/{square-terminal-lPOPYTqx.js → square-terminal-CDDUQc-O.js} +1 -1
  145. package/dist/server/assets/{stateDiagram-FKZM4ZOC-D9Xo5bg5.js → stateDiagram-FKZM4ZOC-Ct7juWxD.js} +8 -8
  146. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-BBj6Aiwx.js → stateDiagram-v2-4FDKWEC3-Bp505XWR.js} +4 -4
  147. package/dist/server/assets/{timeline-definition-IT6M3QCI-oAS-tbgM.js → timeline-definition-IT6M3QCI-Dw8oeGiX.js} +2 -2
  148. package/dist/server/assets/{treemap-GDKQZRPO-BA7EQwOb.js → treemap-GDKQZRPO-BdIdWFqZ.js} +6 -6
  149. package/dist/server/assets/{workspace._workspaceId-CREreypp.js → workspace._workspaceId-GwRuI3oS.js} +4 -4
  150. package/dist/server/assets/{workspace._workspaceId-BAO3HXDS.js → workspace._workspaceId-joQQNCnQ.js} +1 -1
  151. package/dist/server/assets/{xychartDiagram-PRI3JC2R-CYgqsSC_.js → xychartDiagram-PRI3JC2R-BRCOemWX.js} +1 -1
  152. package/dist/server/server.js +2 -2
  153. package/dist/start-server.mjs +1225 -976
  154. package/package.json +4 -4
  155. package/dist/client/assets/channel-CpSzKNMk.js +0 -1
  156. package/dist/client/assets/classDiagram-2ON5EDUG-BgIuIwCk.js +0 -1
  157. package/dist/client/assets/classDiagram-v2-WZHVMYZB-BgIuIwCk.js +0 -1
  158. package/dist/client/assets/clone-BnxcJIG7.js +0 -1
  159. package/dist/client/assets/main-DFLn265W.css +0 -1
  160. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BvVewf6E.js +0 -1
  161. package/dist/client/assets/workspace._workspaceId-C8Z_0tr5.js +0 -2
  162. package/dist/server/assets/_tanstack-start-manifest_v-Bu_aDRUe.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$1r = [
1229
+ const __iconNode$1s = [
1230
1230
  [
1231
1231
  "path",
1232
1232
  {
@@ -1235,45 +1235,45 @@ const __iconNode$1r = [
1235
1235
  }
1236
1236
  ]
1237
1237
  ];
1238
- const Activity = createLucideIcon("activity", __iconNode$1r);
1239
- const __iconNode$1q = [
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$1q);
1245
- const __iconNode$1p = [
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$1p);
1250
- const __iconNode$1o = [
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$1o);
1255
- const __iconNode$1n = [
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$1n);
1260
- const __iconNode$1m = [
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$1m);
1266
- const __iconNode$1l = [
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$1l);
1271
- const __iconNode$1k = [
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$1k);
1276
- const __iconNode$1j = [
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$1j = [
1281
1281
  ["path", { d: "M15 13v2", key: "1xurst" }],
1282
1282
  ["path", { d: "M9 13v2", key: "rq6x2g" }]
1283
1283
  ];
1284
- const Bot = createLucideIcon("bot", __iconNode$1j);
1285
- const __iconNode$1i = [
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$1i);
1292
- const __iconNode$1h = [
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$1h);
1299
- const __iconNode$1g = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
1300
- const Check = createLucideIcon("check", __iconNode$1g);
1301
- const __iconNode$1f = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1302
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$1f);
1303
- const __iconNode$1e = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
1304
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1e);
1305
- const __iconNode$1d = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1306
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$1d);
1307
- const __iconNode$1c = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
1308
- const ChevronUp = createLucideIcon("chevron-up", __iconNode$1c);
1309
- const __iconNode$1b = [
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$1b);
1314
- const __iconNode$1a = [
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$1a);
1319
- const __iconNode$19 = [
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$19);
1325
- const __iconNode$18 = [
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$18);
1330
- const __iconNode$17 = [
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$17);
1336
- const __iconNode$16 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
1337
- const Circle = createLucideIcon("circle", __iconNode$16);
1338
- const __iconNode$15 = [
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$15);
1346
- const __iconNode$14 = [
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$14);
1354
- const __iconNode$13 = [
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,53 +1361,53 @@ const __iconNode$13 = [
1361
1361
  }
1362
1362
  ]
1363
1363
  ];
1364
- const Clipboard = createLucideIcon("clipboard", __iconNode$13);
1365
- const __iconNode$12 = [
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$12);
1370
- const __iconNode$11 = [
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$11);
1376
- const __iconNode$10 = [
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$10);
1381
- const __iconNode$$ = [
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$$);
1386
- const __iconNode$_ = [
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$_);
1393
- const __iconNode$Z = [
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$Z);
1398
- const __iconNode$Y = [
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$Y);
1404
- const __iconNode$X = [
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$X);
1410
- const __iconNode$W = [
1409
+ const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$Y);
1410
+ const __iconNode$X = [
1411
1411
  ["path", { d: "m15 15 6 6", key: "1s409w" }],
1412
1412
  ["path", { d: "m15 9 6-6", key: "ko1vev" }],
1413
1413
  ["path", { d: "M21 16v5h-5", key: "1ck2sf" }],
@@ -1417,14 +1417,14 @@ const __iconNode$W = [
1417
1417
  ["path", { d: "M3 8V3h5", key: "1ln10m" }],
1418
1418
  ["path", { d: "M9 9 3 3", key: "v551iv" }]
1419
1419
  ];
1420
- const Expand = createLucideIcon("expand", __iconNode$W);
1421
- const __iconNode$V = [
1420
+ const Expand = createLucideIcon("expand", __iconNode$X);
1421
+ const __iconNode$W = [
1422
1422
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
1423
1423
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
1424
1424
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
1425
1425
  ];
1426
- const ExternalLink$1 = createLucideIcon("external-link", __iconNode$V);
1427
- const __iconNode$U = [
1426
+ const ExternalLink$1 = createLucideIcon("external-link", __iconNode$W);
1427
+ const __iconNode$V = [
1428
1428
  [
1429
1429
  "path",
1430
1430
  {
@@ -1434,8 +1434,8 @@ const __iconNode$U = [
1434
1434
  ],
1435
1435
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
1436
1436
  ];
1437
- const Eye = createLucideIcon("eye", __iconNode$U);
1438
- const __iconNode$T = [
1437
+ const Eye = createLucideIcon("eye", __iconNode$V);
1438
+ const __iconNode$U = [
1439
1439
  [
1440
1440
  "path",
1441
1441
  {
@@ -1446,8 +1446,8 @@ const __iconNode$T = [
1446
1446
  ["path", { d: "M12 9v4", key: "juzpu7" }],
1447
1447
  ["path", { d: "M12 17h.01", key: "p32p05" }]
1448
1448
  ];
1449
- const FileExclamationPoint = createLucideIcon("file-exclamation-point", __iconNode$T);
1450
- const __iconNode$S = [
1449
+ const FileExclamationPoint = createLucideIcon("file-exclamation-point", __iconNode$U);
1450
+ const __iconNode$T = [
1451
1451
  [
1452
1452
  "path",
1453
1453
  {
@@ -1459,8 +1459,8 @@ const __iconNode$S = [
1459
1459
  ["path", { d: "M2 15h10", key: "jfw4w8" }],
1460
1460
  ["path", { d: "m9 18 3-3-3-3", key: "112psh" }]
1461
1461
  ];
1462
- const FileInput = createLucideIcon("file-input", __iconNode$S);
1463
- const __iconNode$R = [
1462
+ const FileInput = createLucideIcon("file-input", __iconNode$T);
1463
+ const __iconNode$S = [
1464
1464
  [
1465
1465
  "path",
1466
1466
  {
@@ -1472,8 +1472,8 @@ const __iconNode$R = [
1472
1472
  ["path", { d: "M9 15h6", key: "cctwl0" }],
1473
1473
  ["path", { d: "M12 18v-6", key: "17g6i2" }]
1474
1474
  ];
1475
- const FilePlus = createLucideIcon("file-plus", __iconNode$R);
1476
- const __iconNode$Q = [
1475
+ const FilePlus = createLucideIcon("file-plus", __iconNode$S);
1476
+ const __iconNode$R = [
1477
1477
  [
1478
1478
  "path",
1479
1479
  {
@@ -1486,8 +1486,8 @@ const __iconNode$Q = [
1486
1486
  ["path", { d: "M16 13H8", key: "t4e002" }],
1487
1487
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
1488
1488
  ];
1489
- const FileText = createLucideIcon("file-text", __iconNode$Q);
1490
- const __iconNode$P = [
1489
+ const FileText = createLucideIcon("file-text", __iconNode$R);
1490
+ const __iconNode$Q = [
1491
1491
  [
1492
1492
  "path",
1493
1493
  {
@@ -1497,8 +1497,8 @@ const __iconNode$P = [
1497
1497
  ],
1498
1498
  ["path", { d: "M14 2v5a1 1 0 0 0 1 1h5", key: "wfsgrz" }]
1499
1499
  ];
1500
- const File$1 = createLucideIcon("file", __iconNode$P);
1501
- const __iconNode$O = [
1500
+ const File$1 = createLucideIcon("file", __iconNode$Q);
1501
+ const __iconNode$P = [
1502
1502
  [
1503
1503
  "path",
1504
1504
  {
@@ -1507,8 +1507,8 @@ const __iconNode$O = [
1507
1507
  }
1508
1508
  ]
1509
1509
  ];
1510
- const FolderOpen = createLucideIcon("folder-open", __iconNode$O);
1511
- const __iconNode$N = [
1510
+ const FolderOpen = createLucideIcon("folder-open", __iconNode$P);
1511
+ const __iconNode$O = [
1512
1512
  ["path", { d: "M12 10v6", key: "1bos4e" }],
1513
1513
  ["path", { d: "M9 13h6", key: "1uhe8q" }],
1514
1514
  [
@@ -1519,8 +1519,8 @@ const __iconNode$N = [
1519
1519
  }
1520
1520
  ]
1521
1521
  ];
1522
- const FolderPlus = createLucideIcon("folder-plus", __iconNode$N);
1523
- const __iconNode$M = [
1522
+ const FolderPlus = createLucideIcon("folder-plus", __iconNode$O);
1523
+ const __iconNode$N = [
1524
1524
  [
1525
1525
  "path",
1526
1526
  {
@@ -1529,39 +1529,39 @@ const __iconNode$M = [
1529
1529
  }
1530
1530
  ]
1531
1531
  ];
1532
- const Folder = createLucideIcon("folder", __iconNode$M);
1533
- const __iconNode$L = [
1532
+ const Folder = createLucideIcon("folder", __iconNode$N);
1533
+ const __iconNode$M = [
1534
1534
  ["path", { d: "M15 6a9 9 0 0 0-9 9V3", key: "1cii5b" }],
1535
1535
  ["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
1536
1536
  ["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }]
1537
1537
  ];
1538
- const GitBranch = createLucideIcon("git-branch", __iconNode$L);
1539
- const __iconNode$K = [
1538
+ const GitBranch = createLucideIcon("git-branch", __iconNode$M);
1539
+ const __iconNode$L = [
1540
1540
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }],
1541
1541
  ["line", { x1: "3", x2: "9", y1: "12", y2: "12", key: "1dyftd" }],
1542
1542
  ["line", { x1: "15", x2: "21", y1: "12", y2: "12", key: "oup4p8" }]
1543
1543
  ];
1544
- const GitCommitHorizontal = createLucideIcon("git-commit-horizontal", __iconNode$K);
1545
- const __iconNode$J = [
1544
+ const GitCommitHorizontal = createLucideIcon("git-commit-horizontal", __iconNode$L);
1545
+ const __iconNode$K = [
1546
1546
  ["circle", { cx: "18", cy: "18", r: "3", key: "1xkwt0" }],
1547
1547
  ["circle", { cx: "6", cy: "6", r: "3", key: "1lh9wr" }],
1548
1548
  ["path", { d: "M13 6h3a2 2 0 0 1 2 2v7", key: "1yeb86" }],
1549
1549
  ["path", { d: "M11 18H8a2 2 0 0 1-2-2V9", key: "19pyzm" }]
1550
1550
  ];
1551
- const GitCompare = createLucideIcon("git-compare", __iconNode$J);
1552
- const __iconNode$I = [
1551
+ const GitCompare = createLucideIcon("git-compare", __iconNode$K);
1552
+ const __iconNode$J = [
1553
1553
  ["circle", { cx: "18", cy: "18", r: "3", key: "1xkwt0" }],
1554
1554
  ["circle", { cx: "6", cy: "6", r: "3", key: "1lh9wr" }],
1555
1555
  ["path", { d: "M6 21V9a9 9 0 0 0 9 9", key: "7kw0sc" }]
1556
1556
  ];
1557
- const GitMerge = createLucideIcon("git-merge", __iconNode$I);
1558
- const __iconNode$H = [
1557
+ const GitMerge = createLucideIcon("git-merge", __iconNode$J);
1558
+ const __iconNode$I = [
1559
1559
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1560
1560
  ["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
1561
1561
  ["path", { d: "M2 12h20", key: "9i4pu4" }]
1562
1562
  ];
1563
- const Globe = createLucideIcon("globe", __iconNode$H);
1564
- const __iconNode$G = [
1563
+ const Globe = createLucideIcon("globe", __iconNode$I);
1564
+ const __iconNode$H = [
1565
1565
  ["circle", { cx: "12", cy: "9", r: "1", key: "124mty" }],
1566
1566
  ["circle", { cx: "19", cy: "9", r: "1", key: "1ruzo2" }],
1567
1567
  ["circle", { cx: "5", cy: "9", r: "1", key: "1a8b28" }],
@@ -1569,8 +1569,8 @@ const __iconNode$G = [
1569
1569
  ["circle", { cx: "19", cy: "15", r: "1", key: "1a92ep" }],
1570
1570
  ["circle", { cx: "5", cy: "15", r: "1", key: "5r1jwy" }]
1571
1571
  ];
1572
- const GripHorizontal = createLucideIcon("grip-horizontal", __iconNode$G);
1573
- const __iconNode$F = [
1572
+ const GripHorizontal = createLucideIcon("grip-horizontal", __iconNode$H);
1573
+ const __iconNode$G = [
1574
1574
  ["path", { d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8", key: "5wwlr5" }],
1575
1575
  [
1576
1576
  "path",
@@ -1580,8 +1580,8 @@ const __iconNode$F = [
1580
1580
  }
1581
1581
  ]
1582
1582
  ];
1583
- const House = createLucideIcon("house", __iconNode$F);
1584
- const __iconNode$E = [
1583
+ const House = createLucideIcon("house", __iconNode$G);
1584
+ const __iconNode$F = [
1585
1585
  ["line", { x1: "2", x2: "22", y1: "2", y2: "22", key: "a6p6uj" }],
1586
1586
  ["path", { d: "M10.41 10.41a2 2 0 1 1-2.83-2.83", key: "1bzlo9" }],
1587
1587
  ["line", { x1: "13.5", x2: "6", y1: "13.5", y2: "21", key: "1q0aeu" }],
@@ -1595,31 +1595,31 @@ const __iconNode$E = [
1595
1595
  ],
1596
1596
  ["path", { d: "M21 15V5a2 2 0 0 0-2-2H9", key: "43el77" }]
1597
1597
  ];
1598
- const ImageOff = createLucideIcon("image-off", __iconNode$E);
1599
- const __iconNode$D = [
1598
+ const ImageOff = createLucideIcon("image-off", __iconNode$F);
1599
+ const __iconNode$E = [
1600
1600
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1601
1601
  ["path", { d: "M12 16v-4", key: "1dtifu" }],
1602
1602
  ["path", { d: "M12 8h.01", key: "e9boi3" }]
1603
1603
  ];
1604
- const Info$1 = createLucideIcon("info", __iconNode$D);
1605
- const __iconNode$C = [
1604
+ const Info$1 = createLucideIcon("info", __iconNode$E);
1605
+ const __iconNode$D = [
1606
1606
  ["path", { d: "M16 5H3", key: "m91uny" }],
1607
1607
  ["path", { d: "M11 12H3", key: "51ecnj" }],
1608
1608
  ["path", { d: "M16 19H3", key: "zzsher" }],
1609
1609
  ["path", { d: "M21 12h-6", key: "bt1uis" }]
1610
1610
  ];
1611
- const ListMinus = createLucideIcon("list-minus", __iconNode$C);
1612
- const __iconNode$B = [
1611
+ const ListMinus = createLucideIcon("list-minus", __iconNode$D);
1612
+ const __iconNode$C = [
1613
1613
  ["path", { d: "M13 5h8", key: "a7qcls" }],
1614
1614
  ["path", { d: "M13 12h8", key: "h98zly" }],
1615
1615
  ["path", { d: "M13 19h8", key: "c3s6r1" }],
1616
1616
  ["path", { d: "m3 17 2 2 4-4", key: "1jhpwq" }],
1617
1617
  ["rect", { x: "3", y: "4", width: "6", height: "6", rx: "1", key: "cif1o7" }]
1618
1618
  ];
1619
- const ListTodo = createLucideIcon("list-todo", __iconNode$B);
1620
- const __iconNode$A = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
1621
- const LoaderCircle = createLucideIcon("loader-circle", __iconNode$A);
1622
- const __iconNode$z = [
1619
+ const ListTodo = createLucideIcon("list-todo", __iconNode$C);
1620
+ const __iconNode$B = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
1621
+ const LoaderCircle = createLucideIcon("loader-circle", __iconNode$B);
1622
+ const __iconNode$A = [
1623
1623
  ["path", { d: "M12 2v4", key: "3427ic" }],
1624
1624
  ["path", { d: "m16.2 7.8 2.9-2.9", key: "r700ao" }],
1625
1625
  ["path", { d: "M18 12h4", key: "wj9ykh" }],
@@ -1629,15 +1629,15 @@ const __iconNode$z = [
1629
1629
  ["path", { d: "M2 12h4", key: "j09sii" }],
1630
1630
  ["path", { d: "m4.9 4.9 2.9 2.9", key: "giyufr" }]
1631
1631
  ];
1632
- const Loader = createLucideIcon("loader", __iconNode$z);
1633
- const __iconNode$y = [
1632
+ const Loader = createLucideIcon("loader", __iconNode$A);
1633
+ const __iconNode$z = [
1634
1634
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
1635
1635
  ["path", { d: "m21 3-7 7", key: "1l2asr" }],
1636
1636
  ["path", { d: "m3 21 7-7", key: "tjx5ai" }],
1637
1637
  ["path", { d: "M9 21H3v-6", key: "wtvkvv" }]
1638
1638
  ];
1639
- const Maximize2 = createLucideIcon("maximize-2", __iconNode$y);
1640
- const __iconNode$x = [
1639
+ const Maximize2 = createLucideIcon("maximize-2", __iconNode$z);
1640
+ const __iconNode$y = [
1641
1641
  [
1642
1642
  "path",
1643
1643
  {
@@ -1646,19 +1646,24 @@ const __iconNode$x = [
1646
1646
  }
1647
1647
  ]
1648
1648
  ];
1649
- const MessageSquare = createLucideIcon("message-square", __iconNode$x);
1650
- const __iconNode$w = [
1649
+ const MessageSquare = createLucideIcon("message-square", __iconNode$y);
1650
+ const __iconNode$x = [
1651
1651
  ["path", { d: "m14 10 7-7", key: "oa77jy" }],
1652
1652
  ["path", { d: "M20 10h-6V4", key: "mjg0md" }],
1653
1653
  ["path", { d: "m3 21 7-7", key: "tjx5ai" }],
1654
1654
  ["path", { d: "M4 14h6v6", key: "rmj7iw" }]
1655
1655
  ];
1656
- const Minimize2 = createLucideIcon("minimize-2", __iconNode$w);
1657
- const __iconNode$v = [
1656
+ const Minimize2 = createLucideIcon("minimize-2", __iconNode$x);
1657
+ const __iconNode$w = [
1658
1658
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1659
1659
  ["path", { d: "M9 3v18", key: "fh3hqa" }]
1660
1660
  ];
1661
- 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);
1662
1667
  const __iconNode$u = [
1663
1668
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1664
1669
  ["path", { d: "M3 9h18", key: "1pudct" }]
@@ -14184,10 +14189,11 @@ function AccordionContent({
14184
14189
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
14185
14190
  Content2$6,
14186
14191
  {
14192
+ forceMount: true,
14187
14193
  "data-slot": "accordion-content",
14188
- 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",
14189
14195
  ...props,
14190
- 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 }) })
14191
14197
  }
14192
14198
  );
14193
14199
  }
@@ -14267,7 +14273,7 @@ function Badge({
14267
14273
  );
14268
14274
  }
14269
14275
  const buttonVariants = cva(
14270
- "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",
14271
14277
  {
14272
14278
  variants: {
14273
14279
  variant: {
@@ -14366,7 +14372,7 @@ function PopoverContent({
14366
14372
  align,
14367
14373
  sideOffset,
14368
14374
  className: cn$2(
14369
- "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",
14370
14376
  className
14371
14377
  ),
14372
14378
  ...props
@@ -14429,7 +14435,7 @@ function ColorPicker({ value, onChange, disabled, showHex = true, className }) {
14429
14435
  {
14430
14436
  type: "button",
14431
14437
  className: cn$2(
14432
- "w-7 h-7 rounded border-2 transition-all",
14438
+ "w-7 h-7 rounded border-2 transition-[border-color,transform]",
14433
14439
  colorValue === color2 ? "border-primary scale-110" : "border-transparent hover:border-border"
14434
14440
  ),
14435
14441
  style: { backgroundColor: color2 },
@@ -14782,10 +14788,10 @@ function DialogOverlay({
14782
14788
  );
14783
14789
  }
14784
14790
  const DIALOG_CONTENT_VARIANTS = {
14785
- 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",
14786
14792
  "bottom-sheet": [
14787
14793
  // Shared
14788
- "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",
14789
14795
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
14790
14796
  // Mobile (< lg): bottom drawer
14791
14797
  "inset-x-0 bottom-0 w-full max-w-none rounded-t-2xl border border-b-0 p-6",
@@ -14797,8 +14803,11 @@ const DIALOG_CONTENT_VARIANTS = {
14797
14803
  ].join(" "),
14798
14804
  "command-palette": [
14799
14805
  // Shared
14800
- "fixed z-50 flex flex-col bg-background shadow-lg duration-200 outline-none",
14801
- "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",
14802
14811
  // Mobile (< lg): bottom drawer with the input pinned to the bottom. Flip
14803
14812
  // the command's flex direction so the input sits below the results list,
14804
14813
  // and flip the input wrapper's divider to a top border to match. The sheet
@@ -14811,8 +14820,7 @@ const DIALOG_CONTENT_VARIANTS = {
14811
14820
  "max-lg:data-[state=open]:slide-in-from-bottom max-lg:data-[state=closed]:slide-out-to-bottom",
14812
14821
  // Desktop (lg+): anchored in the upper third by its TOP edge — no
14813
14822
  // `translate-y`, so the input never moves as the list grows downward.
14814
- "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",
14815
- "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"
14816
14824
  ].join(" ")
14817
14825
  };
14818
14826
  const keyboardInsetHolders = /* @__PURE__ */ new Set();
@@ -14848,7 +14856,15 @@ function DialogContent({
14848
14856
  }) {
14849
14857
  useKeyboardInset(variant === "command-palette");
14850
14858
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [
14851
- /* @__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
+ ),
14852
14868
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
14853
14869
  Content$1,
14854
14870
  {
@@ -15060,7 +15076,7 @@ function ContextMenuContent({
15060
15076
  if (event.button === 2) event.stopPropagation();
15061
15077
  },
15062
15078
  className: cn$2(
15063
- "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",
15064
15080
  className
15065
15081
  ),
15066
15082
  ...props
@@ -15122,7 +15138,7 @@ function ContextMenuSubContent({
15122
15138
  {
15123
15139
  "data-slot": "context-menu-sub-content",
15124
15140
  className: cn$2(
15125
- "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",
15126
15142
  className
15127
15143
  ),
15128
15144
  ...props
@@ -15166,7 +15182,7 @@ function DropdownMenuContent({
15166
15182
  "data-slot": "dropdown-menu-content",
15167
15183
  sideOffset,
15168
15184
  className: cn$2(
15169
- "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",
15170
15186
  className
15171
15187
  ),
15172
15188
  ...props
@@ -15292,7 +15308,7 @@ function DropdownMenuSubContent({
15292
15308
  {
15293
15309
  "data-slot": "dropdown-menu-sub-content",
15294
15310
  className: cn$2(
15295
- "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",
15296
15312
  className
15297
15313
  ),
15298
15314
  ...props
@@ -15419,7 +15435,7 @@ function SelectContent({
15419
15435
  // Mirror DropdownMenuContent so dropdowns and selects render
15420
15436
  // identically (popover surface, explicit border-border so the
15421
15437
  // outline doesn't fall back to currentColor).
15422
- "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",
15423
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",
15424
15440
  className
15425
15441
  ),
@@ -15547,7 +15563,7 @@ function TooltipContent({
15547
15563
  "data-slot": "tooltip-content",
15548
15564
  sideOffset,
15549
15565
  className: cn$2(
15550
- "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",
15551
15567
  className
15552
15568
  ),
15553
15569
  ...props,
@@ -42829,53 +42845,53 @@ async function loadLanguage(lang) {
42829
42845
  try {
42830
42846
  switch (lang) {
42831
42847
  case "javascript":
42832
- return import("./index-Bqv1Yqbp.js").then((m2) => m2.javascript());
42848
+ return import("./index-BuqNnUeC.js").then((m2) => m2.javascript());
42833
42849
  case "jsx":
42834
- return import("./index-Bqv1Yqbp.js").then((m2) => m2.javascript({ jsx: true }));
42850
+ return import("./index-BuqNnUeC.js").then((m2) => m2.javascript({ jsx: true }));
42835
42851
  case "typescript":
42836
- return import("./index-Bqv1Yqbp.js").then(
42852
+ return import("./index-BuqNnUeC.js").then(
42837
42853
  (m2) => m2.javascript({ typescript: true })
42838
42854
  );
42839
42855
  case "tsx":
42840
- return import("./index-Bqv1Yqbp.js").then(
42856
+ return import("./index-BuqNnUeC.js").then(
42841
42857
  (m2) => m2.javascript({ jsx: true, typescript: true })
42842
42858
  );
42843
42859
  case "python":
42844
- return import("./index-CyY0UzHL.js").then((m2) => m2.python());
42860
+ return import("./index-BDXNcXpX.js").then((m2) => m2.python());
42845
42861
  case "html":
42846
- return import("./index-BUCj1Yl_.js").then((m2) => m2.html());
42862
+ return import("./index-BFyODGGJ.js").then((m2) => m2.html());
42847
42863
  case "css":
42848
- return import("./index-oLF27Nfu.js").then((m2) => m2.css());
42864
+ return import("./index-jCxJanyY.js").then((m2) => m2.css());
42849
42865
  case "scss":
42850
42866
  case "sass":
42851
- return import("./index-Bcu0C2js.js").then((m2) => m2.sass());
42867
+ return import("./index-DsR_UKQx.js").then((m2) => m2.sass());
42852
42868
  case "less":
42853
- return import("./index-IM5Lznch.js").then((m2) => m2.less());
42869
+ return import("./index-B9mYm2Iv.js").then((m2) => m2.less());
42854
42870
  case "json":
42855
42871
  case "jsonc":
42856
- return import("./index-CF9A2ZU-.js").then((m2) => m2.json());
42872
+ return import("./index-BFxM6c1Y.js").then((m2) => m2.json());
42857
42873
  case "markdown":
42858
42874
  case "mdx":
42859
- return import("./index-CGqMcWZv.js").then((m2) => m2.markdown());
42875
+ return import("./index-CEHzgT6Q.js").then((m2) => m2.markdown());
42860
42876
  case "xml":
42861
- return import("./index-BIn7ueGd.js").then((m2) => m2.xml());
42877
+ return import("./index-DsyhmvSr.js").then((m2) => m2.xml());
42862
42878
  case "yaml":
42863
- return import("./index-DEYBFbnW.js").then((m2) => m2.yaml());
42879
+ return import("./index-DRNvWTdD.js").then((m2) => m2.yaml());
42864
42880
  case "sql":
42865
- return import("./index-YfWUTx8U.js").then((m2) => m2.sql());
42881
+ return import("./index-CGdiDxDM.js").then((m2) => m2.sql());
42866
42882
  case "rust":
42867
- return import("./index-D3oif9Da.js").then((m2) => m2.rust());
42883
+ return import("./index-Dvcd3xwL.js").then((m2) => m2.rust());
42868
42884
  case "go":
42869
- return import("./index-B_uZBCQp.js").then((m2) => m2.go());
42885
+ return import("./index-CXNHt9Li.js").then((m2) => m2.go());
42870
42886
  case "java":
42871
- return import("./index-Ch5w2qx-.js").then((m2) => m2.java());
42887
+ return import("./index-BPA-V89G.js").then((m2) => m2.java());
42872
42888
  case "kotlin":
42873
- return import("./index-Ch5w2qx-.js").then((m2) => m2.java());
42889
+ return import("./index-BPA-V89G.js").then((m2) => m2.java());
42874
42890
  case "c":
42875
42891
  case "cpp":
42876
- return import("./index-DXfbzq6y.js").then((m2) => m2.cpp());
42892
+ return import("./index-CX4yKGY7.js").then((m2) => m2.cpp());
42877
42893
  case "php":
42878
- return import("./index-Cuy6v4sQ.js").then((m2) => m2.php());
42894
+ return import("./index-D022D6yP.js").then((m2) => m2.php());
42879
42895
  // Legacy modes via StreamLanguage
42880
42896
  case "bash":
42881
42897
  case "fish":
@@ -43915,12 +43931,12 @@ function buildCommands(deps) {
43915
43931
  // FileViewer toolbar and via this palette entry.
43916
43932
  id: "editor-go-back",
43917
43933
  label: "Go Back",
43918
- action: () => window.dispatchEvent(new CustomEvent("band:editor-go-back"))
43934
+ action: () => deps.editorGoBack()
43919
43935
  },
43920
43936
  {
43921
43937
  id: "editor-go-forward",
43922
43938
  label: "Go Forward",
43923
- action: () => window.dispatchEvent(new CustomEvent("band:editor-go-forward"))
43939
+ action: () => deps.editorGoForward()
43924
43940
  },
43925
43941
  {
43926
43942
  // No shortcut advertised: Shift+Tab is wired only inside the chat
@@ -49327,7 +49343,7 @@ function CollapsibleSection({
49327
49343
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
49328
49344
  "div",
49329
49345
  {
49330
- 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]"}`,
49331
49347
  children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `overflow-hidden ${className ?? ""}`, inert: collapsed, children: children2 })
49332
49348
  }
49333
49349
  );
@@ -60205,7 +60221,14 @@ function FileViewer({
60205
60221
  toolbar,
60206
60222
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-h-0 min-w-0 flex-1 overflow-hidden", children: [
60207
60223
  loading && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-32 items-center justify-center text-sm text-muted-foreground", children: "Loading..." }),
60208
- 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
+ ),
60209
60232
  !loading && !error && previewType === "image" && fileUrl && /* @__PURE__ */ jsxRuntimeExports.jsx(ImagePreview$1, { src: fileUrl, alt: getFilename(filePath) }),
60210
60233
  !loading && !error && previewType === "pdf" && fileUrl && /* @__PURE__ */ jsxRuntimeExports.jsx(PdfPreview, { src: fileUrl, filename: getFilename(filePath) }),
60211
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) }) }),
@@ -65231,9 +65254,11 @@ class BandWorkspace extends Workspace {
65231
65254
  files = [];
65232
65255
  fileVersions = /* @__PURE__ */ Object.create(null);
65233
65256
  rootUri;
65234
- constructor(client, rootUri) {
65257
+ workspaceId;
65258
+ constructor(client, rootUri, workspaceId) {
65235
65259
  super(client);
65236
65260
  this.rootUri = rootUri;
65261
+ this.workspaceId = workspaceId;
65237
65262
  }
65238
65263
  nextFileVersion(uri) {
65239
65264
  const next2 = (this.fileVersions[uri] ?? -1) + 1;
@@ -65301,7 +65326,7 @@ class BandWorkspace extends Workspace {
65301
65326
  pendingNavigation = { resolve: resolve2, timer: timer2 };
65302
65327
  window.dispatchEvent(
65303
65328
  new CustomEvent("band:lsp-navigate", {
65304
- detail: { filePath }
65329
+ detail: { filePath, workspaceId: this.workspaceId }
65305
65330
  })
65306
65331
  );
65307
65332
  });
@@ -65354,7 +65379,7 @@ function createWebSocketTransport(url) {
65354
65379
  });
65355
65380
  }
65356
65381
  const clientCache = /* @__PURE__ */ new Map();
65357
- async function getOrCreateClient(wsUrl, rootUri) {
65382
+ async function getOrCreateClient(wsUrl, rootUri, workspaceId) {
65358
65383
  const cached2 = clientCache.get(wsUrl);
65359
65384
  if (cached2) {
65360
65385
  cached2.refCount++;
@@ -65362,7 +65387,7 @@ async function getOrCreateClient(wsUrl, rootUri) {
65362
65387
  }
65363
65388
  const client = new LSPClient({
65364
65389
  rootUri,
65365
- workspace: (c2) => new BandWorkspace(c2, rootUri),
65390
+ workspace: (c2) => new BandWorkspace(c2, rootUri, workspaceId),
65366
65391
  extensions: languageServerExtensions(),
65367
65392
  timeout: 1e4
65368
65393
  });
@@ -65479,8 +65504,8 @@ const cmdClickLinkPlugin = ViewPlugin.fromClass(
65479
65504
  },
65480
65505
  { decorations: (v2) => v2.decorations }
65481
65506
  );
65482
- async function createLspExtension(wsUrl, rootUri, documentUri, languageId) {
65483
- const client = await getOrCreateClient(wsUrl, rootUri);
65507
+ async function createLspExtension(wsUrl, rootUri, documentUri, languageId, workspaceId) {
65508
+ const client = await getOrCreateClient(wsUrl, rootUri, workspaceId);
65484
65509
  return [
65485
65510
  client.plugin(documentUri, languageId),
65486
65511
  // Cmd+Click (Mac) / Ctrl+Click (other) to jump to definition — the
@@ -83290,7 +83315,20 @@ function refreshEdgeGroupVisibility(api, forceVisible) {
83290
83315
  }
83291
83316
  }
83292
83317
  }
83293
- function applyMaximizeEdgeVisibility(api, maximized) {
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
+ }
83294
83332
  if (maximized) {
83295
83333
  for (const direction of Object.keys(EDGE_GROUP_IDS$1)) {
83296
83334
  try {
@@ -83890,6 +83928,7 @@ function FileTabBar({
83890
83928
  onSaveUntitled,
83891
83929
  actions,
83892
83930
  treeCollapsed,
83931
+ treeSide = "left",
83893
83932
  onToggleTree
83894
83933
  }) {
83895
83934
  const activeRef = reactExports.useRef(null);
@@ -83985,9 +84024,10 @@ function FileTabBar({
83985
84024
  "button",
83986
84025
  {
83987
84026
  type: "button",
84027
+ "data-testid": "file-tab-bar__tree-toggle",
83988
84028
  onClick: onToggleTree,
83989
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",
83990
- 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" })
83991
84031
  }
83992
84032
  ) }),
83993
84033
  /* @__PURE__ */ jsxRuntimeExports.jsxs(TooltipContent, { side: "bottom", className: "text-xs", children: [
@@ -109547,7 +109587,7 @@ var tn = f$5("block", "before:content-[counter(line)]", "before:inline-block", "
109547
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 });
109548
109588
  var Se$1 = reactExports.createContext({ code: "" }), de$2 = () => reactExports.useContext(Se$1);
109549
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 }) });
109550
- var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-X1-_bh6z.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 }) => {
109551
109591
  let i2 = reactExports.useMemo(() => e3.replace(cn, ""), [e3]), c2 = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i2.split(`
109552
109592
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i2]);
109553
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 }) })] }) });
@@ -109869,7 +109909,7 @@ var Dt = ({ children: e3, className: t2, onDownload: o3, onError: n2 }) => {
109869
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] });
109870
109910
  };
109871
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 }) })] });
109872
- var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-CX1H3heG.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]+)/;
109873
109913
  function ke$1(e3, t2) {
109874
109914
  if (!(e3 != null && e3.position || t2 != null && t2.position)) return true;
109875
109915
  if (!(e3 != null && e3.position && (t2 != null && t2.position))) return false;
@@ -162040,12 +162080,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
162040
162080
  registerLayoutLoaders([
162041
162081
  {
162042
162082
  name: "dagre",
162043
- loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-DNZS86ly.js"), "loader")
162083
+ loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-CRjo2D7K.js"), "loader")
162044
162084
  },
162045
162085
  ...[
162046
162086
  {
162047
162087
  name: "cose-bilkent",
162048
- loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-qzfBNLDd.js"), "loader")
162088
+ loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-j4JEpP33.js"), "loader")
162049
162089
  }
162050
162090
  ]
162051
162091
  ]);
@@ -162484,7 +162524,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
162484
162524
  return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
162485
162525
  }, "detector");
162486
162526
  var loader = /* @__PURE__ */ __name(async () => {
162487
- const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-BU-dO_db.js");
162527
+ const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-B1Go7qzd.js");
162488
162528
  return { id, diagram: diagram2 };
162489
162529
  }, "loader");
162490
162530
  var plugin = {
@@ -162501,7 +162541,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
162501
162541
  return /^\s*graph/.test(txt);
162502
162542
  }, "detector");
162503
162543
  var loader2 = /* @__PURE__ */ __name(async () => {
162504
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-B1dpItw0.js");
162544
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CONOX4ru.js");
162505
162545
  return { id: id2, diagram: diagram2 };
162506
162546
  }, "loader");
162507
162547
  var plugin2 = {
@@ -162524,7 +162564,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
162524
162564
  return /^\s*flowchart/.test(txt);
162525
162565
  }, "detector");
162526
162566
  var loader3 = /* @__PURE__ */ __name(async () => {
162527
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-B1dpItw0.js");
162567
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CONOX4ru.js");
162528
162568
  return { id: id3, diagram: diagram2 };
162529
162569
  }, "loader");
162530
162570
  var plugin3 = {
@@ -162538,7 +162578,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
162538
162578
  return /^\s*erDiagram/.test(txt);
162539
162579
  }, "detector");
162540
162580
  var loader4 = /* @__PURE__ */ __name(async () => {
162541
- const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-DnkGfUio.js");
162581
+ const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-Gt2ujaN1.js");
162542
162582
  return { id: id4, diagram: diagram2 };
162543
162583
  }, "loader");
162544
162584
  var plugin4 = {
@@ -162552,7 +162592,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
162552
162592
  return /^\s*gitGraph/.test(txt);
162553
162593
  }, "detector");
162554
162594
  var loader5 = /* @__PURE__ */ __name(async () => {
162555
- const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-BWi1KybI.js");
162595
+ const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-JAQOltND.js");
162556
162596
  return { id: id5, diagram: diagram2 };
162557
162597
  }, "loader");
162558
162598
  var plugin5 = {
@@ -162566,7 +162606,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
162566
162606
  return /^\s*gantt/.test(txt);
162567
162607
  }, "detector");
162568
162608
  var loader6 = /* @__PURE__ */ __name(async () => {
162569
- const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-CfB_h9HP.js");
162609
+ const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-LO1CZhBF.js");
162570
162610
  return { id: id6, diagram: diagram2 };
162571
162611
  }, "loader");
162572
162612
  var plugin6 = {
@@ -162580,7 +162620,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
162580
162620
  return /^\s*info/.test(txt);
162581
162621
  }, "detector");
162582
162622
  var loader7 = /* @__PURE__ */ __name(async () => {
162583
- const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-LstCwT5M.js");
162623
+ const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-wZZ4hEZ9.js");
162584
162624
  return { id: id7, diagram: diagram2 };
162585
162625
  }, "loader");
162586
162626
  var info = {
@@ -162593,7 +162633,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
162593
162633
  return /^\s*pie/.test(txt);
162594
162634
  }, "detector");
162595
162635
  var loader8 = /* @__PURE__ */ __name(async () => {
162596
- const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-CyhwaYTd.js");
162636
+ const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-5evhP6Hm.js");
162597
162637
  return { id: id8, diagram: diagram2 };
162598
162638
  }, "loader");
162599
162639
  var pie = {
@@ -162606,7 +162646,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
162606
162646
  return /^\s*quadrantChart/.test(txt);
162607
162647
  }, "detector");
162608
162648
  var loader9 = /* @__PURE__ */ __name(async () => {
162609
- const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-BRzFRm7k.js");
162649
+ const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-Cg2-kPDC.js");
162610
162650
  return { id: id9, diagram: diagram2 };
162611
162651
  }, "loader");
162612
162652
  var plugin7 = {
@@ -162620,7 +162660,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
162620
162660
  return /^\s*xychart(-beta)?/.test(txt);
162621
162661
  }, "detector");
162622
162662
  var loader10 = /* @__PURE__ */ __name(async () => {
162623
- const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-CYgqsSC_.js");
162663
+ const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-BRCOemWX.js");
162624
162664
  return { id: id10, diagram: diagram2 };
162625
162665
  }, "loader");
162626
162666
  var plugin8 = {
@@ -162634,7 +162674,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
162634
162674
  return /^\s*requirement(Diagram)?/.test(txt);
162635
162675
  }, "detector");
162636
162676
  var loader11 = /* @__PURE__ */ __name(async () => {
162637
- const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-fJ6FCY2X.js");
162677
+ const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-DjOyZt1t.js");
162638
162678
  return { id: id11, diagram: diagram2 };
162639
162679
  }, "loader");
162640
162680
  var plugin9 = {
@@ -162648,7 +162688,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
162648
162688
  return /^\s*sequenceDiagram/.test(txt);
162649
162689
  }, "detector");
162650
162690
  var loader12 = /* @__PURE__ */ __name(async () => {
162651
- const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-Y9h8QzpA.js");
162691
+ const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-fn9HXFXZ.js");
162652
162692
  return { id: id12, diagram: diagram2 };
162653
162693
  }, "loader");
162654
162694
  var plugin10 = {
@@ -162665,7 +162705,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
162665
162705
  return /^\s*classDiagram/.test(txt);
162666
162706
  }, "detector");
162667
162707
  var loader13 = /* @__PURE__ */ __name(async () => {
162668
- const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-C6GK2Aoj.js");
162708
+ const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-UX-9XQ-6.js");
162669
162709
  return { id: id13, diagram: diagram2 };
162670
162710
  }, "loader");
162671
162711
  var plugin11 = {
@@ -162682,7 +162722,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
162682
162722
  return /^\s*classDiagram-v2/.test(txt);
162683
162723
  }, "detector");
162684
162724
  var loader14 = /* @__PURE__ */ __name(async () => {
162685
- const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-C6GK2Aoj.js");
162725
+ const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-UX-9XQ-6.js");
162686
162726
  return { id: id14, diagram: diagram2 };
162687
162727
  }, "loader");
162688
162728
  var plugin12 = {
@@ -162699,7 +162739,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
162699
162739
  return /^\s*stateDiagram/.test(txt);
162700
162740
  }, "detector");
162701
162741
  var loader15 = /* @__PURE__ */ __name(async () => {
162702
- const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-D9Xo5bg5.js");
162742
+ const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-Ct7juWxD.js");
162703
162743
  return { id: id15, diagram: diagram2 };
162704
162744
  }, "loader");
162705
162745
  var plugin13 = {
@@ -162719,7 +162759,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
162719
162759
  return false;
162720
162760
  }, "detector");
162721
162761
  var loader16 = /* @__PURE__ */ __name(async () => {
162722
- const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-BBj6Aiwx.js");
162762
+ const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-Bp505XWR.js");
162723
162763
  return { id: id16, diagram: diagram2 };
162724
162764
  }, "loader");
162725
162765
  var plugin14 = {
@@ -162733,7 +162773,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
162733
162773
  return /^\s*journey/.test(txt);
162734
162774
  }, "detector");
162735
162775
  var loader17 = /* @__PURE__ */ __name(async () => {
162736
- const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-Bq4xdGvc.js");
162776
+ const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-CBD0jzUu.js");
162737
162777
  return { id: id17, diagram: diagram2 };
162738
162778
  }, "loader");
162739
162779
  var plugin15 = {
@@ -162800,7 +162840,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
162800
162840
  return false;
162801
162841
  }, "detector");
162802
162842
  var loader18 = /* @__PURE__ */ __name(async () => {
162803
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-B1dpItw0.js");
162843
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CONOX4ru.js");
162804
162844
  return { id: id18, diagram: diagram2 };
162805
162845
  }, "loader");
162806
162846
  var plugin16 = {
@@ -162814,7 +162854,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
162814
162854
  return /^\s*timeline/.test(txt);
162815
162855
  }, "detector");
162816
162856
  var loader19 = /* @__PURE__ */ __name(async () => {
162817
- const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-oAS-tbgM.js");
162857
+ const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-Dw8oeGiX.js");
162818
162858
  return { id: id19, diagram: diagram2 };
162819
162859
  }, "loader");
162820
162860
  var plugin17 = {
@@ -162828,7 +162868,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
162828
162868
  return /^\s*mindmap/.test(txt);
162829
162869
  }, "detector");
162830
162870
  var loader20 = /* @__PURE__ */ __name(async () => {
162831
- const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-OX1eekPS.js");
162871
+ const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-jjxDAUjJ.js");
162832
162872
  return { id: id20, diagram: diagram2 };
162833
162873
  }, "loader");
162834
162874
  var plugin18 = {
@@ -162842,7 +162882,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
162842
162882
  return /^\s*kanban/.test(txt);
162843
162883
  }, "detector");
162844
162884
  var loader21 = /* @__PURE__ */ __name(async () => {
162845
- const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-Cz8QJrE-.js");
162885
+ const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-9SKGIQ4n.js");
162846
162886
  return { id: id21, diagram: diagram2 };
162847
162887
  }, "loader");
162848
162888
  var plugin19 = {
@@ -162856,7 +162896,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
162856
162896
  return /^\s*sankey(-beta)?/.test(txt);
162857
162897
  }, "detector");
162858
162898
  var loader22 = /* @__PURE__ */ __name(async () => {
162859
- const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-DkGxRBc4.js");
162899
+ const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-Bun0ZHSn.js");
162860
162900
  return { id: id22, diagram: diagram2 };
162861
162901
  }, "loader");
162862
162902
  var plugin20 = {
@@ -162870,7 +162910,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
162870
162910
  return /^\s*packet(-beta)?/.test(txt);
162871
162911
  }, "detector");
162872
162912
  var loader23 = /* @__PURE__ */ __name(async () => {
162873
- const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-CP1GoHeA.js");
162913
+ const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-Bzc1B5Be.js");
162874
162914
  return { id: id23, diagram: diagram2 };
162875
162915
  }, "loader");
162876
162916
  var packet = {
@@ -162883,7 +162923,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
162883
162923
  return /^\s*radar-beta/.test(txt);
162884
162924
  }, "detector");
162885
162925
  var loader24 = /* @__PURE__ */ __name(async () => {
162886
- const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-diOF3OBK.js");
162926
+ const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-DXbEv4yb.js");
162887
162927
  return { id: id24, diagram: diagram2 };
162888
162928
  }, "loader");
162889
162929
  var radar = {
@@ -162896,7 +162936,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
162896
162936
  return /^\s*block(-beta)?/.test(txt);
162897
162937
  }, "detector");
162898
162938
  var loader25 = /* @__PURE__ */ __name(async () => {
162899
- const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-DCaPOrQR.js");
162939
+ const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-Bjf6umts.js");
162900
162940
  return { id: id25, diagram: diagram2 };
162901
162941
  }, "loader");
162902
162942
  var plugin21 = {
@@ -162910,7 +162950,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
162910
162950
  return /^\s*architecture/.test(txt);
162911
162951
  }, "detector");
162912
162952
  var loader26 = /* @__PURE__ */ __name(async () => {
162913
- const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-CWzfFX__.js");
162953
+ const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-B9hdFdgc.js");
162914
162954
  return { id: id26, diagram: diagram2 };
162915
162955
  }, "loader");
162916
162956
  var architecture = {
@@ -162924,7 +162964,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
162924
162964
  return /^\s*treemap/.test(txt);
162925
162965
  }, "detector");
162926
162966
  var loader27 = /* @__PURE__ */ __name(async () => {
162927
- const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-C6ImURyq.js");
162967
+ const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-CdcM_CoU.js");
162928
162968
  return { id: id27, diagram: diagram2 };
162929
162969
  }, "loader");
162930
162970
  var treemap = {
@@ -163931,24 +163971,31 @@ function getHighlightCtor() {
163931
163971
  return typeof ctor === "function" ? ctor : null;
163932
163972
  }
163933
163973
  function fileTreeWidthKey(wsId) {
163934
- return `band-file-tree-width:${wsId}`;
163974
+ return `band-file-tree-width-px:${wsId}`;
163935
163975
  }
163936
163976
  function fileTreeCollapsedKey(wsId) {
163937
163977
  return `band-file-tree-collapsed:${wsId}`;
163938
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;
163939
163986
  function loadFileTreeWidth(wsId) {
163940
163987
  try {
163941
163988
  const raw2 = localStorage.getItem(fileTreeWidthKey(wsId));
163942
163989
  if (raw2 == null) return null;
163943
163990
  const val = Number(raw2);
163944
- return Number.isFinite(val) ? val : null;
163991
+ return Number.isFinite(val) && val > 0 ? val : null;
163945
163992
  } catch {
163946
163993
  return null;
163947
163994
  }
163948
163995
  }
163949
- function saveFileTreeWidth(wsId, width) {
163996
+ function saveFileTreeWidth(wsId, widthPx) {
163950
163997
  try {
163951
- localStorage.setItem(fileTreeWidthKey(wsId), String(width));
163998
+ localStorage.setItem(fileTreeWidthKey(wsId), String(Math.round(widthPx)));
163952
163999
  } catch {
163953
164000
  }
163954
164001
  }
@@ -163965,6 +164012,19 @@ function saveFileTreeCollapsed(wsId, collapsed) {
163965
164012
  } catch {
163966
164013
  }
163967
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
+ }
163968
164028
  const TOOLBAR_COMPACT_BREAKPOINT = 200;
163969
164029
  const touchPointerUp = (fn2) => (e3) => {
163970
164030
  if (!fn2 || e3.pointerType === "mouse") return;
@@ -163977,7 +164037,9 @@ function FileTreeToolbar({
163977
164037
  onNewFile,
163978
164038
  onNewFolder,
163979
164039
  onOpenFile,
163980
- onNewUntitled
164040
+ onNewUntitled,
164041
+ side,
164042
+ onSetSide
163981
164043
  }) {
163982
164044
  const rootRef = reactExports.useRef(null);
163983
164045
  const [compact, setCompact] = reactExports.useState(false);
@@ -164008,10 +164070,11 @@ function FileTreeToolbar({
164008
164070
  pendingMenuAction.current = null;
164009
164071
  fn2?.();
164010
164072
  }, []);
164011
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
164073
+ const header = /* @__PURE__ */ jsxRuntimeExports.jsxs(
164012
164074
  "div",
164013
164075
  {
164014
164076
  ref: rootRef,
164077
+ "data-testid": "file-tree__toolbar",
164015
164078
  className: "flex h-9 shrink-0 items-center gap-0.5 border-b border-border/50 pl-3 pr-1.5",
164016
164079
  children: [
164017
164080
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium text-muted-foreground", children: "Files" }),
@@ -164146,6 +164209,22 @@ function FileTreeToolbar({
164146
164209
  ]
164147
164210
  }
164148
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
+ ] });
164149
164228
  }
164150
164229
  function CodeBrowserView({
164151
164230
  workspaceId,
@@ -164296,7 +164375,7 @@ function CodeBrowserView({
164296
164375
  };
164297
164376
  const cmLang = langMap[ext ?? ""];
164298
164377
  const languageId = cmLang ? getLspLanguageId(cmLang) : void 0;
164299
- createLspExtension(lspWsUrl, rootUri, documentUri, languageId).then((ext2) => {
164378
+ createLspExtension(lspWsUrl, rootUri, documentUri, languageId, workspaceId).then((ext2) => {
164300
164379
  if (!cancelled2) setLspExtension(ext2);
164301
164380
  }).catch((err) => {
164302
164381
  console.warn("LSP extension creation failed:", err);
@@ -164305,7 +164384,7 @@ function CodeBrowserView({
164305
164384
  return () => {
164306
164385
  cancelled2 = true;
164307
164386
  };
164308
- }, [lspWsUrl, workspacePath, viewFilePath]);
164387
+ }, [lspWsUrl, workspacePath, viewFilePath, workspaceId]);
164309
164388
  reactExports.useEffect(() => {
164310
164389
  return () => {
164311
164390
  if (lspWsUrl) releaseLspClient(lspWsUrl);
@@ -164568,20 +164647,22 @@ function CodeBrowserView({
164568
164647
  setViewColumn(void 0);
164569
164648
  notifySelectFile(null);
164570
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]);
164571
164663
  const handleTabSelect = reactExports.useCallback(
164572
164664
  (filePath) => {
164573
- const view = editorViewRef.current;
164574
- if (view && viewFilePath) {
164575
- try {
164576
- const state2 = serializeEditorState(view);
164577
- savedEditorStatesRef.current[viewFilePath] = state2;
164578
- tabState.update(viewFilePath, {
164579
- editorState: state2.editorState,
164580
- scrollTop: state2.scrollTop
164581
- });
164582
- } catch {
164583
- }
164584
- }
164665
+ persistActiveEditorState();
164585
164666
  if (filePath !== viewFilePath) skipFileEffectRef.current = true;
164586
164667
  fileTabs.setActiveTab(filePath);
164587
164668
  setViewFilePath(filePath);
@@ -164590,7 +164671,7 @@ function CodeBrowserView({
164590
164671
  setViewColumn(void 0);
164591
164672
  notifySelectFile(filePath);
164592
164673
  },
164593
- [fileTabs.setActiveTab, notifySelectFile, viewFilePath, tabState.update]
164674
+ [fileTabs.setActiveTab, notifySelectFile, viewFilePath, persistActiveEditorState]
164594
164675
  );
164595
164676
  const skipInitialTabSync = reactExports.useRef(true);
164596
164677
  reactExports.useEffect(() => {
@@ -164644,18 +164725,27 @@ function CodeBrowserView({
164644
164725
  if (entry) navigateToEntry(entry);
164645
164726
  }, [editorHistory.goForward, navigateToEntry]);
164646
164727
  reactExports.useEffect(() => {
164647
- const handleGoBack = () => handleEditorGoBack();
164648
- 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
+ };
164649
164738
  window.addEventListener("band:editor-go-back", handleGoBack);
164650
164739
  window.addEventListener("band:editor-go-forward", handleGoForward);
164651
164740
  return () => {
164652
164741
  window.removeEventListener("band:editor-go-back", handleGoBack);
164653
164742
  window.removeEventListener("band:editor-go-forward", handleGoForward);
164654
164743
  };
164655
- }, [handleEditorGoBack, handleEditorGoForward]);
164744
+ }, [handleEditorGoBack, handleEditorGoForward, workspaceId]);
164656
164745
  reactExports.useEffect(() => {
164657
164746
  const handleLspNavigate = (e3) => {
164658
164747
  const detail = e3.detail;
164748
+ if (detail?.workspaceId && detail.workspaceId !== workspaceId) return;
164659
164749
  if (detail?.filePath) {
164660
164750
  pushDepartureAndArrival({ filePath: detail.filePath });
164661
164751
  skipFileEffectRef.current = true;
@@ -164670,7 +164760,7 @@ function CodeBrowserView({
164670
164760
  };
164671
164761
  window.addEventListener("band:lsp-navigate", handleLspNavigate);
164672
164762
  return () => window.removeEventListener("band:lsp-navigate", handleLspNavigate);
164673
- }, [pushDepartureAndArrival, fileTabs.openTabPinned, notifySelectFile]);
164763
+ }, [pushDepartureAndArrival, fileTabs.openTabPinned, notifySelectFile, workspaceId]);
164674
164764
  reactExports.useEffect(() => {
164675
164765
  const cycleFileTabs = (direction) => {
164676
164766
  const tabs = fileTabs.openTabs;
@@ -164951,21 +165041,75 @@ function CodeBrowserView({
164951
165041
  );
164952
165042
  const treePanelRef = ln$2();
164953
165043
  const [treeCollapsed, setTreeCollapsed] = reactExports.useState(() => loadFileTreeCollapsed(workspaceId));
164954
- const skipFirstLayoutCallback = reactExports.useRef(true);
164955
- const savedCollapsed = loadFileTreeCollapsed(workspaceId);
164956
- const savedWidth = loadFileTreeWidth(workspaceId);
164957
- const defaultLayout = savedCollapsed ? { "file-tree": 0, "file-viewer": 100 } : savedWidth ? { "file-tree": savedWidth, "file-viewer": 100 - savedWidth } : void 0;
164958
- const handleLayoutChanged = reactExports.useCallback(
164959
- (layout) => {
164960
- if (skipFirstLayoutCallback.current) {
164961
- 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();
164962
165089
  return;
164963
165090
  }
164964
- if (layout["file-tree"] != null) {
164965
- 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`);
164966
165097
  }
164967
165098
  },
164968
- [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]
164969
165113
  );
164970
165114
  const toggleTree = reactExports.useCallback(() => {
164971
165115
  const panel = treePanelRef.current;
@@ -164986,6 +165130,72 @@ function CodeBrowserView({
164986
165130
  treePanelRef.current?.expand();
164987
165131
  }
164988
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
+ );
164989
165199
  return (
164990
165200
  // h-full + w-full + overflow-hidden + min-w-0 is required so that
164991
165201
  // CodeMirror's wide intrinsic content (long unwrapped lines, scrollable
@@ -165072,162 +165282,112 @@ function CodeBrowserView({
165072
165282
  ] })
165073
165283
  )
165074
165284
  ) : (
165075
- // Desktop: side-by-side layout with resizable file tree
165076
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
165077
- Ut$1,
165078
- {
165079
- orientation: "horizontal",
165080
- defaultLayout,
165081
- onLayoutChanged: handleLayoutChanged,
165082
- children: [
165083
- /* @__PURE__ */ jsxRuntimeExports.jsx(
165084
- Yt$1,
165085
- {
165086
- id: "file-tree",
165087
- defaultSize: "15rem",
165088
- minSize: "10rem",
165089
- maxSize: "50%",
165090
- collapsible: true,
165091
- collapsedSize: "0%",
165092
- panelRef: treePanelRef,
165093
- onResize: (size2) => {
165094
- const collapsed = size2.asPercentage === 0;
165095
- setTreeCollapsed(collapsed);
165096
- saveFileTreeCollapsed(workspaceId, collapsed);
165097
- },
165098
- children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full flex-col overflow-hidden border-r border-border", children: [
165099
- /* @__PURE__ */ jsxRuntimeExports.jsx(
165100
- 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",
165101
165316
  {
165102
- onNewFile: handleNewFile,
165103
- onNewFolder: handleNewFolder,
165104
- onOpenFile: pickFile ? handleOpenExternalFile : void 0,
165105
- 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" })
165106
165321
  }
165107
- ),
165108
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165109
- 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",
165110
165328
  {
165111
- ref: fileBrowserRef,
165112
- workspaceId,
165113
- workspacePath,
165114
- onOpenFile: handleSelectFile,
165115
- onOpenFilePinned: handleSelectFilePinned,
165116
- compact: true,
165117
- selectedFile: viewFilePath,
165118
- onPathRenamed: handlePathRenamed,
165119
- 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" })
165120
165333
  }
165121
- ) })
165334
+ ) }),
165335
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", className: "text-xs", children: "Source" })
165122
165336
  ] })
165123
- }
165124
- ),
165125
- /* @__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(
165126
- "button",
165127
- {
165128
- type: "button",
165129
- onClick: toggleTree,
165130
- 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",
165131
- children: treeCollapsed ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-4" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronLeft, { className: "size-4" })
165132
- }
165133
- ) }),
165134
- /* @__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: [
165135
- /* @__PURE__ */ jsxRuntimeExports.jsx(
165136
- 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,
165137
165368
  {
165138
- workspacePath,
165139
- tabs: fileTabs.openTabs,
165140
- activeTabPath: fileTabs.activeTabPath,
165141
- onSelectTab: handleTabSelect,
165142
- onCloseTab: handleTabClose,
165143
- onPinTab: fileTabs.pinTab,
165144
- onGoBack: handleEditorGoBack,
165145
- onGoForward: handleEditorGoForward,
165146
- canGoBack: editorHistory.canGoBack,
165147
- canGoForward: editorHistory.canGoForward,
165148
- isDirty: tabState.isDirty,
165149
- onSaveUntitled: pickSaveFile ? handleSaveUntitledForClose : void 0,
165150
- treeCollapsed,
165151
- onToggleTree: toggleTree,
165152
- actions: isMarkdown ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0.5", children: [
165153
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
165154
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165155
- "button",
165156
- {
165157
- type: "button",
165158
- onClick: () => setMdViewMode("preview"),
165159
- 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"}`,
165160
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Eye, { className: "size-3.5" })
165161
- }
165162
- ) }),
165163
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", className: "text-xs", children: "Preview" })
165164
- ] }),
165165
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
165166
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
165167
- "button",
165168
- {
165169
- type: "button",
165170
- onClick: () => setMdViewMode("source"),
165171
- 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"}`,
165172
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Code, { className: "size-3.5" })
165173
- }
165174
- ) }),
165175
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", className: "text-xs", children: "Source" })
165176
- ] })
165177
- ] }) : 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
165178
165379
  }
165179
- ),
165180
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 min-w-0 flex-1 overflow-hidden", children: viewFilePath ? /* @__PURE__ */ jsxRuntimeExports.jsx(
165181
- FileViewer,
165182
- {
165183
- workspaceId,
165184
- filePath: viewFilePath,
165185
- external: viewIsExternal,
165186
- untitled: isUntitledPath(viewFilePath),
165187
- line: viewLine,
165188
- lineEnd: viewLineEnd,
165189
- column: viewColumn,
165190
- onEditorView: handleEditorView,
165191
- onCursorLineChange: handleCursorLineChange,
165192
- renderMarkdown,
165193
- editable: true,
165194
- hideTitleBar: true,
165195
- lspExtension: viewIsExternal || isUntitledPath(viewFilePath) ? null : lspExtension,
165196
- viewMode: isMarkdown ? mdViewMode : void 0,
165197
- onViewModeChange: isMarkdown ? setMdViewMode : void 0,
165198
- initialEditedContent: tabState.get(viewFilePath)?.editedContent ?? null,
165199
- savedEditorState: savedEditorStatesRef.current[viewFilePath]?.editorState ?? tabState.get(viewFilePath)?.editorState,
165200
- savedScrollTop: savedEditorStatesRef.current[viewFilePath]?.scrollTop ?? tabState.get(viewFilePath)?.scrollTop,
165201
- onEditedContentChange: handleEditedContentChange,
165202
- languageOverride: tabState.getLanguage(viewFilePath),
165203
- onLanguageOverrideChange: (id28) => handleLanguageOverride(viewFilePath, id28),
165204
- onSaveAs: isUntitledPath(viewFilePath) && pickSaveFile ? (content2) => handleSaveUntitled(viewFilePath, content2) : void 0,
165205
- onLoadError: handleFileLoadError,
165206
- toolbar: search2.searchOpen ? /* @__PURE__ */ jsxRuntimeExports.jsx(
165207
- SearchBar,
165208
- {
165209
- ref: search2.searchBarRef,
165210
- query: search2.searchQuery,
165211
- onQueryChange: search2.setSearchQuery,
165212
- options: search2.searchOptions,
165213
- onOptionsChange: search2.setSearchOptions,
165214
- placeholder: isMarkdownPreviewActive ? "Find in preview..." : "Find in file...",
165215
- matchInfo: isMarkdownPreviewActive ? mdMatchInfo : search2.matchInfo,
165216
- onNext: handleSearchNext,
165217
- onPrevious: handleSearchPrevious,
165218
- onClose: handleSearchClose
165219
- }
165220
- ) : void 0
165221
- },
165222
- isUntitledPath(viewFilePath) ? viewFilePath : "file"
165223
- ) : /* @__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: [
165224
- /* @__PURE__ */ jsxRuntimeExports.jsx(File$1, { className: "size-8 text-muted-foreground/30" }),
165225
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Select a file to view" })
165226
- ] }) }) })
165227
- ] }) })
165228
- ]
165229
- }
165230
- )
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)
165231
165391
  ) })
165232
165392
  );
165233
165393
  }
@@ -176613,6 +176773,8 @@ function ChatView({
176613
176773
  const getMessageKey = reactExports.useCallback((message) => message.id, []);
176614
176774
  const messagesRef = reactExports.useRef(messages);
176615
176775
  messagesRef.current = messages;
176776
+ const seenMessageIdsRef = reactExports.useRef(null);
176777
+ const enteringIdsRef = reactExports.useRef(/* @__PURE__ */ new Set());
176616
176778
  reactExports.useEffect(() => {
176617
176779
  const sentinel = sentinelRef.current;
176618
176780
  if (!sentinel || !scrollEl || !hasMore || loadingHistory) return;
@@ -176633,6 +176795,20 @@ function ChatView({
176633
176795
  (message, messageIndex) => {
176634
176796
  const currentMessages = messagesRef.current;
176635
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
+ }
176636
176812
  const isLastAssistant = message.role === "assistant" && isLastMessage;
176637
176813
  const hasPendingInteractiveTool = isLastAssistant && message.parts.some((p2) => {
176638
176814
  if (!isToolUIPart(p2) || !IN_PROGRESS_STATES.has(p2.state)) return false;
@@ -176643,7 +176819,7 @@ function ChatView({
176643
176819
  const segments = groupMessageParts(message.parts);
176644
176820
  if (message.role !== "assistant") {
176645
176821
  if (segments.length === 0) return null;
176646
- 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) => {
176647
176823
  if (segment.type === "text" && segment.part.type === "text" && segment.part.text.trim()) {
176648
176824
  return /* @__PURE__ */ jsxRuntimeExports.jsx(MessageResponse, { children: segment.part.text }, `${message.id}-text-${segment.partIndex}`);
176649
176825
  }
@@ -176660,7 +176836,7 @@ function ChatView({
176660
176836
  }) }) });
176661
176837
  }
176662
176838
  if (segments.length === 0 && !showThinking) return null;
176663
- 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: [
176664
176840
  segments.map((segment) => {
176665
176841
  if (segment.type === "text") {
176666
176842
  const { part, partIndex } = segment;
@@ -177093,7 +177269,7 @@ function ContextMeter({
177093
177269
  cy: "12",
177094
177270
  r: DONUT_RADIUS,
177095
177271
  fill: "none",
177096
- className: cn$2("transition-all", progressColor),
177272
+ className: cn$2("transition-[stroke-dashoffset,stroke]", progressColor),
177097
177273
  strokeWidth: "3",
177098
177274
  strokeLinecap: "round",
177099
177275
  strokeDasharray: DONUT_CIRCUMFERENCE,
@@ -179330,6 +179506,8 @@ function MultiWorkspacePanelHost({ emptyState, children: children2 }) {
179330
179506
  settings.maxCachedWorkspaces ?? DEFAULT_MAX_CACHED_WORKSPACES
179331
179507
  );
179332
179508
  const activeWorkspaceId = parseWorkspaceFromPath(pathname);
179509
+ const wrapperRef = reactExports.useRef(null);
179510
+ const prevWorkspaceIdRef = reactExports.useRef(activeWorkspaceId);
179333
179511
  if (activeWorkspaceId && !cache.has(activeWorkspaceId)) {
179334
179512
  setCache((prev2) => {
179335
179513
  if (prev2.has(activeWorkspaceId)) return prev2;
@@ -179362,6 +179540,20 @@ function MultiWorkspacePanelHost({ emptyState, children: children2 }) {
179362
179540
  return next2;
179363
179541
  });
179364
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]);
179365
179557
  const { projects, isLoading, error } = useProjects();
179366
179558
  reactExports.useEffect(() => {
179367
179559
  if (isLoading || error) return;
@@ -179399,7 +179591,7 @@ function MultiWorkspacePanelHost({ emptyState, children: children2 }) {
179399
179591
  lastCacheKeysRef.current = current2;
179400
179592
  }, [cache]);
179401
179593
  if (!activeWorkspaceId) return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative h-full w-full", children: emptyState });
179402
- 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 }) => {
179403
179595
  const isActive = workspaceId === activeWorkspaceId;
179404
179596
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
179405
179597
  "div",
@@ -202981,12 +203173,12 @@ const PANEL_SHORTCUTS = {
202981
203173
  browser: "⇧⌘B"
202982
203174
  };
202983
203175
  const DockviewTerminalContainer = reactExports.lazy(
202984
- () => import("./DockviewTerminalContainer-CwXOWGN4.js").then((m2) => ({
203176
+ () => import("./DockviewTerminalContainer-BIJPTTun.js").then((m2) => ({
202985
203177
  default: m2.DockviewTerminalContainer
202986
203178
  }))
202987
203179
  );
202988
203180
  const DockviewBrowserContainer = reactExports.lazy(
202989
- () => import("./DockviewBrowserContainer-BjdfNGy8.js").then((m2) => ({
203181
+ () => import("./DockviewBrowserContainer-CxzZY1qq.js").then((m2) => ({
202990
203182
  default: m2.DockviewBrowserContainer
202991
203183
  }))
202992
203184
  );
@@ -203488,6 +203680,20 @@ function SharedDockviewLayout() {
203488
203680
  detail: { workspaceId: ws, filePath }
203489
203681
  })
203490
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
+ );
203491
203697
  }
203492
203698
  }),
203493
203699
  []
@@ -203921,7 +204127,7 @@ function SharedDockviewLayout() {
203921
204127
  (e3) => {
203922
204128
  if (!initializedRef.current) return;
203923
204129
  if (inSaveLayoutToJSON) return;
203924
- applyMaximizeEdgeVisibility(event.api, !!e3.isMaximized);
204130
+ applyMaximizeEdgeVisibility(event.api, !!e3.isMaximized, containerRef.current);
203925
204131
  const workspaceId = activeWorkspaceIdRef.current;
203926
204132
  if (!workspaceId) return;
203927
204133
  if (e3.isMaximized && !e3.group?.id) return;
@@ -204526,9 +204732,11 @@ function AppShell() {
204526
204732
  const animateSidebarToggle = reactExports.useCallback(() => {
204527
204733
  const sidebar = sidebarElRef.current;
204528
204734
  if (!sidebar) return;
204735
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
204529
204736
  const els = [sidebar, mainElRef.current];
204530
204737
  for (const el of els) {
204531
- 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)";
204532
204740
  }
204533
204741
  let timer2 = 0;
204534
204742
  const clear3 = (e3) => {
@@ -204668,12 +204876,12 @@ function RootLayout() {
204668
204876
  ] })
204669
204877
  ] });
204670
204878
  }
204671
- const $$splitComponentImporter$1 = () => import("./index-Bm4xacwx.js");
204879
+ const $$splitComponentImporter$1 = () => import("./index-BVjGe10C.js");
204672
204880
  const Route$1 = createFileRoute("/")({
204673
204881
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
204674
204882
  });
204675
- const $$splitNotFoundComponentImporter = () => import("./workspace._workspaceId-BAO3HXDS.js");
204676
- const $$splitComponentImporter = () => import("./workspace._workspaceId-CREreypp.js");
204883
+ const $$splitNotFoundComponentImporter = () => import("./workspace._workspaceId-joQQNCnQ.js");
204884
+ const $$splitComponentImporter = () => import("./workspace._workspaceId-GwRuI3oS.js");
204677
204885
  const Route2 = createFileRoute("/workspace/$workspaceId")({
204678
204886
  component: lazyRouteComponent($$splitComponentImporter, "component"),
204679
204887
  // Bookmarks / shared links from before route unification (`/workspace/$id/changes`,