@band-app/server 0.24.1 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/dist/client/assets/{DockviewBrowserContainer-pecXom0M.js → DockviewBrowserContainer-BiS2PXe9.js} +2 -2
  2. package/dist/client/assets/DockviewTerminalContainer-BFBZVril.js +2 -0
  3. package/dist/client/assets/TerminalPanel-CcBKJ24l.js +1 -0
  4. package/dist/client/assets/{_basePickBy-CtbD70T-.js → _basePickBy-CIajkJdO.js} +1 -1
  5. package/dist/client/assets/_baseUniq-DHw48s_G.js +1 -0
  6. package/dist/client/assets/{arc-BEzsE6TU.js → arc-DexZNm0-.js} +1 -1
  7. package/dist/client/assets/architectureDiagram-VXUJARFQ-DAFvsZAd.js +36 -0
  8. package/dist/client/assets/{blockDiagram-VD42YOAC-CVv0vV-s.js → blockDiagram-VD42YOAC-AWnBKy9Q.js} +1 -1
  9. package/dist/client/assets/{c4Diagram-YG6GDRKO-W3bslfZm.js → c4Diagram-YG6GDRKO-BddbyIic.js} +1 -1
  10. package/dist/client/assets/channel-BSRbBCzT.js +1 -0
  11. package/dist/client/assets/{chunk-4BX2VUAB-B4zNuPCM.js → chunk-4BX2VUAB-DnMh7Pc9.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-CJb5GOdO.js → chunk-55IACEB6-24SitHr9.js} +1 -1
  13. package/dist/client/assets/{chunk-B4BG7PRW-m9UNdA4H.js → chunk-B4BG7PRW-BOb93Gpn.js} +1 -1
  14. package/dist/client/assets/{chunk-DI55MBZ5-Dyl4ba3F.js → chunk-DI55MBZ5-oSbpJBti.js} +3 -3
  15. package/dist/client/assets/{chunk-FMBD7UC4-Ds1gRx94.js → chunk-FMBD7UC4-Dqfg6wVO.js} +1 -1
  16. package/dist/client/assets/chunk-QN33PNHL-C2cIUL6l.js +1 -0
  17. package/dist/client/assets/{chunk-QZHKN3VN-BiZtPmD0.js → chunk-QZHKN3VN-Ox_MiYok.js} +1 -1
  18. package/dist/client/assets/{chunk-TZMSLE5B-DCz64hjM.js → chunk-TZMSLE5B-CGaUt5wn.js} +1 -1
  19. package/dist/client/assets/classDiagram-2ON5EDUG-ntGI3hWd.js +1 -0
  20. package/dist/client/assets/classDiagram-v2-WZHVMYZB-ntGI3hWd.js +1 -0
  21. package/dist/client/assets/clone-Q7bdnWu2.js +1 -0
  22. package/dist/client/assets/cose-bilkent-S5V4N54A-D_3-w0MJ.js +1 -0
  23. package/dist/client/assets/dagre-6UL2VRFP-DTrojOKw.js +4 -0
  24. package/dist/client/assets/diagram-PSM6KHXK-D3nSuJ59.js +24 -0
  25. package/dist/client/assets/diagram-QEK2KX5R-h0Gm6yRs.js +43 -0
  26. package/dist/client/assets/diagram-S2PKOQOG-DIOqbA5d.js +24 -0
  27. package/dist/client/assets/{erDiagram-Q2GNP2WA-WnEcSFDk.js → erDiagram-Q2GNP2WA-BGWtWskF.js} +3 -3
  28. package/dist/client/assets/{flowDiagram-NV44I4VS-BONBJZ3h.js → flowDiagram-NV44I4VS-BHqUj91h.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-JELNMOA3-BDhpQL_t.js → ganttDiagram-JELNMOA3-CCA7lEel.js} +3 -3
  30. package/dist/client/assets/gitGraphDiagram-V2S2FVAM-CXisBbMV.js +65 -0
  31. package/dist/client/assets/{graph-DmGEXolJ.js → graph-C8GKZaWf.js} +1 -1
  32. package/dist/client/assets/{highlighted-body-B3W2YXNL-m0iS7EC3.js → highlighted-body-B3W2YXNL-Ckz9HnyE.js} +1 -1
  33. package/dist/client/assets/{index-D6Afu1pA.js → index-1qpYuqGB.js} +1 -1
  34. package/dist/client/assets/{index-BoLCZb5I.js → index-B7L6_ylA.js} +1 -1
  35. package/dist/client/assets/{index-CiKuHiO0.js → index-BROqtYkO.js} +1 -1
  36. package/dist/client/assets/{index-DBnjKdGf.js → index-BasWn2BQ.js} +1 -1
  37. package/dist/client/assets/{index-DgEnCq6K.js → index-C22P_3Ba.js} +1 -1
  38. package/dist/client/assets/{index-CfW6UcUl.js → index-CN7sJN1E.js} +1 -1
  39. package/dist/client/assets/{index-BpxKDn01.js → index-CNSO_MYp.js} +1 -1
  40. package/dist/client/assets/{index-CFnCbQSl.js → index-CmpISwt5.js} +1 -1
  41. package/dist/client/assets/{index-0oNHljPn.js → index-CyfIec3L.js} +1 -1
  42. package/dist/client/assets/{index-BMTzG2fm.js → index-D0m_DHVt.js} +1 -1
  43. package/dist/client/assets/{index-Dmse4WDP.js → index-D2Sje321.js} +1 -1
  44. package/dist/client/assets/{index-B102sYPH.js → index-D5Pn_WYc.js} +1 -1
  45. package/dist/client/assets/{index-C46YYuZo.js → index-DPLAjlSm.js} +1 -1
  46. package/dist/client/assets/{index-BBy73G4g.js → index-DfZlU-44.js} +1 -1
  47. package/dist/client/assets/{index-BvzISRCa.js → index-TsR4AJCf.js} +2 -2
  48. package/dist/client/assets/{index-CDJOOMr2.js → index-UViDhopU.js} +1 -1
  49. package/dist/client/assets/{index-B-4gD4iz.js → index-rwBKhhdF.js} +1 -1
  50. package/dist/client/assets/{index-3O6bsWX3.js → index-s1AHxiWE.js} +1 -1
  51. package/dist/client/assets/infoDiagram-HS3SLOUP-CbFZ5guu.js +2 -0
  52. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-Dlf8x32q.js → journeyDiagram-XKPGCS4Q-DgIR2fwH.js} +1 -1
  53. package/dist/client/assets/{kanban-definition-3W4ZIXB7-BVJThDju.js → kanban-definition-3W4ZIXB7-BvaiOaK8.js} +1 -1
  54. package/dist/client/assets/{layout-CbZgayJn.js → layout-BHFL_-2i.js} +1 -1
  55. package/dist/client/assets/main-DpPgdfV2.css +1 -0
  56. package/dist/client/assets/{main-RztHx-sU.js → main-Dtbkl2jA.js} +239 -232
  57. package/dist/client/assets/{mindmap-definition-VGOIOE7T-C4kJ6VHG.js → mindmap-definition-VGOIOE7T-BXmDj_SN.js} +3 -3
  58. package/dist/client/assets/pieDiagram-ADFJNKIX-DWBhs-q-.js +30 -0
  59. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-Bec9Hhh2.js → quadrantDiagram-AYHSOK5B-BLczU7TW.js} +1 -1
  60. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-CsOubtSM.js → requirementDiagram-UZGBJVZJ-lm071pmC.js} +1 -1
  61. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-C8Gm96t1.js → sankeyDiagram-TZEHDZUN-CWgkQuq0.js} +5 -5
  62. package/dist/client/assets/{sequenceDiagram-WL72ISMW-Bvgi8x7V.js → sequenceDiagram-WL72ISMW-DR0quDCJ.js} +6 -6
  63. package/dist/client/assets/{square-terminal-BHkrAD3A.js → square-terminal-ByCNqakb.js} +1 -1
  64. package/dist/client/assets/stateDiagram-FKZM4ZOC-CWjWCPZ4.js +1 -0
  65. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-CPppMgt3.js +1 -0
  66. package/dist/client/assets/{timeline-definition-IT6M3QCI-BNBrcAuE.js → timeline-definition-IT6M3QCI-BMaR6Nuo.js} +3 -3
  67. package/dist/client/assets/{treemap-GDKQZRPO-Dt5TrQzS.js → treemap-GDKQZRPO-CbRLz23z.js} +1 -1
  68. package/dist/client/assets/{workspace._workspaceId-DGQl6asL.js → workspace._workspaceId-4ah7xBuS.js} +1 -1
  69. package/dist/client/assets/{workspace._workspaceId-Cx9WUFHK.js → workspace._workspaceId-Dg3ERq5R.js} +2 -2
  70. package/dist/client/assets/{xychartDiagram-PRI3JC2R-BbVpQ6GU.js → xychartDiagram-PRI3JC2R-DNMYDMAj.js} +2 -2
  71. package/dist/server/assets/{DockviewBrowserContainer-BDsafKFK.js → DockviewBrowserContainer-BuItINME.js} +1 -1
  72. package/dist/server/assets/{DockviewTerminalContainer-CMbrr8wZ.js → DockviewTerminalContainer-TX2ecJ9k.js} +5 -3
  73. package/dist/server/assets/TerminalPanel-CvEpdUzO.js +425 -0
  74. package/dist/server/assets/{_basePickBy-ljLFy5Cm.js → _basePickBy-7qoOGcXD.js} +2 -2
  75. package/dist/server/assets/{_baseUniq-DQmNpetJ.js → _baseUniq-Cm0aWwLl.js} +1 -1
  76. package/dist/server/assets/_tanstack-start-manifest_v-DuTbaj5T.js +4 -0
  77. package/dist/server/assets/{arc-KHCw-8vd.js → arc-DH5jD29O.js} +1 -1
  78. package/dist/server/assets/{architecture-7HQA4BMR-BScKJqpc.js → architecture-7HQA4BMR-BQSW1CNO.js} +6 -6
  79. package/dist/server/assets/{architectureDiagram-VXUJARFQ-T9CAFBo1.js → architectureDiagram-VXUJARFQ-DgTZkqMC.js} +6 -6
  80. package/dist/server/assets/{blockDiagram-VD42YOAC-BKZ2vg7U.js → blockDiagram-VD42YOAC-CHY_BpPT.js} +6 -6
  81. package/dist/server/assets/{c4Diagram-YG6GDRKO-D585k1An.js → c4Diagram-YG6GDRKO-Buvaq10G.js} +2 -2
  82. package/dist/server/assets/{channel-CyG4ozZq.js → channel-CSV_0Wq9.js} +1 -1
  83. package/dist/server/assets/{chunk-4BX2VUAB-BHWbP2Lt.js → chunk-4BX2VUAB-B4TPMkRz.js} +1 -1
  84. package/dist/server/assets/{chunk-55IACEB6-CrerCu6v.js → chunk-55IACEB6-CTFAFIsE.js} +1 -1
  85. package/dist/server/assets/{chunk-B4BG7PRW-D3sl50Aa.js → chunk-B4BG7PRW-CR8829ZP.js} +4 -4
  86. package/dist/server/assets/{chunk-DI55MBZ5-DR6gThvq.js → chunk-DI55MBZ5-DetqjIc9.js} +3 -3
  87. package/dist/server/assets/{chunk-FMBD7UC4-Cil9b1Ts.js → chunk-FMBD7UC4-D6DpqSQ8.js} +1 -1
  88. package/dist/server/assets/{chunk-QN33PNHL-BAKy9Ygg.js → chunk-QN33PNHL-U9pD23ft.js} +1 -1
  89. package/dist/server/assets/{chunk-QZHKN3VN-G4fU4Ucn.js → chunk-QZHKN3VN-BK2E8m4j.js} +1 -1
  90. package/dist/server/assets/{chunk-TZMSLE5B-LzSrmWV5.js → chunk-TZMSLE5B-DRLbWC_A.js} +1 -1
  91. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-Ds7CCTUR.js → classDiagram-2ON5EDUG-BNcG92nY.js} +5 -5
  92. package/dist/server/assets/{classDiagram-2ON5EDUG-Ds7CCTUR.js → classDiagram-v2-WZHVMYZB-BNcG92nY.js} +5 -5
  93. package/dist/server/assets/{clone-B4KVJdwD.js → clone-CHpwEW-O.js} +1 -1
  94. package/dist/server/assets/{cose-bilkent-S5V4N54A-DaKuQRAN.js → cose-bilkent-S5V4N54A-700evsrQ.js} +1 -1
  95. package/dist/server/assets/{dagre-6UL2VRFP-CNIyd6rH.js → dagre-6UL2VRFP-B8Qw2znf.js} +6 -6
  96. package/dist/server/assets/{diagram-PSM6KHXK-ByElNwdP.js → diagram-PSM6KHXK-C6EJCqfL.js} +7 -7
  97. package/dist/server/assets/{diagram-QEK2KX5R-Bpupf8hI.js → diagram-QEK2KX5R-CQAcI4L4.js} +6 -6
  98. package/dist/server/assets/{diagram-S2PKOQOG-CSa3a_oJ.js → diagram-S2PKOQOG-DsDqxdmS.js} +6 -6
  99. package/dist/server/assets/{erDiagram-Q2GNP2WA-B3yUU2uu.js → erDiagram-Q2GNP2WA-DGEMY_JO.js} +4 -4
  100. package/dist/server/assets/{flowDiagram-NV44I4VS-CUlvxSwr.js → flowDiagram-NV44I4VS-DCV18CNa.js} +5 -5
  101. package/dist/server/assets/{ganttDiagram-JELNMOA3-BWxUm4vA.js → ganttDiagram-JELNMOA3-Cf9uIRTp.js} +1 -1
  102. package/dist/server/assets/{gitGraph-G5XIXVHT-DexlvPgJ.js → gitGraph-G5XIXVHT-Bphh3EfC.js} +6 -6
  103. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-CepF7ieg.js → gitGraphDiagram-V2S2FVAM-_q2n-s2e.js} +7 -7
  104. package/dist/server/assets/{graph-BB3rQyk7.js → graph-Ccd2dFz0.js} +2 -2
  105. package/dist/server/assets/{highlighted-body-B3W2YXNL-CktYi1nO.js → highlighted-body-B3W2YXNL-DYwYCtBU.js} +1 -1
  106. package/dist/server/assets/{index-zM-wWcHV.js → index-4y021XhL.js} +1 -1
  107. package/dist/server/assets/{index-DipxLM5f.js → index-B1VfjVjc.js} +2 -2
  108. package/dist/server/assets/{index-BDqHa1DL.js → index-B1aJ0zMt.js} +5 -5
  109. package/dist/server/assets/{index-DR892S39.js → index-BCLSgPI1.js} +2 -2
  110. package/dist/server/assets/{index-DYiuwMzT.js → index-BCTaINbC.js} +2 -2
  111. package/dist/server/assets/{index-dAOow3Ru.js → index-BhpCZORq.js} +2 -2
  112. package/dist/server/assets/{index-CUnnFiRO.js → index-C06ZyGGj.js} +4 -4
  113. package/dist/server/assets/{index-BiMwh0FT.js → index-CD62n4Wy.js} +3 -3
  114. package/dist/server/assets/{index-DsPBpNpr.js → index-CXEg-eDA.js} +2 -2
  115. package/dist/server/assets/{index-5St5BCcJ.js → index-CprdJ8Lo.js} +2 -2
  116. package/dist/server/assets/{index-8fW2N3v4.js → index-DGyXXlV8.js} +2 -2
  117. package/dist/server/assets/{index-BZSAPXc2.js → index-DHt4VQNS.js} +5 -5
  118. package/dist/server/assets/{index-DEZw9nkv.js → index-DXSqtFcT.js} +2 -2
  119. package/dist/server/assets/{index-O03NM4sL.js → index-WOVU_Ptt.js} +2 -2
  120. package/dist/server/assets/{index-igT3OuCm.js → index-dJOmGf_o.js} +2 -2
  121. package/dist/server/assets/{index-CGm8Czks.js → index-e4ZKMFB1.js} +2 -2
  122. package/dist/server/assets/{index-B9xqso9p.js → index-rF-uGnt9.js} +1 -1
  123. package/dist/server/assets/{index-bbP5Ilkt.js → index-tV4Tdk7z.js} +3 -3
  124. package/dist/server/assets/{info-VBDWY6EO-BDX5_HTZ.js → info-VBDWY6EO-CtEo3hWH.js} +6 -6
  125. package/dist/server/assets/{infoDiagram-HS3SLOUP-BMd22txJ.js → infoDiagram-HS3SLOUP-DlVfYs3y.js} +5 -5
  126. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-DyIx8DQc.js → journeyDiagram-XKPGCS4Q-DEvLjN67.js} +4 -4
  127. package/dist/server/assets/{kanban-definition-3W4ZIXB7-D6P6mjw2.js → kanban-definition-3W4ZIXB7-C8wt29HD.js} +2 -2
  128. package/dist/server/assets/{layout-_MqV9Ys8.js → layout-B3YZdVGY.js} +4 -4
  129. package/dist/server/assets/{mermaid-3ZIDBTTL-CIBz4-1r.js → mermaid-3ZIDBTTL-Drwee8F2.js} +1 -1
  130. package/dist/server/assets/{mermaid-parser.core-Cga0uwWI.js → mermaid-parser.core-BArH7IDC.js} +11 -11
  131. package/dist/server/assets/{mindmap-definition-VGOIOE7T-C2EIvkPG.js → mindmap-definition-VGOIOE7T-CLGmFN8m.js} +3 -3
  132. package/dist/server/assets/{packet-DYOGHKS2-CCOI47dY.js → packet-DYOGHKS2-BuBX0bTH.js} +6 -6
  133. package/dist/server/assets/{pie-VRWISCQL-BLqEHL1E.js → pie-VRWISCQL-CaZ9Z0V-.js} +6 -6
  134. package/dist/server/assets/{pieDiagram-ADFJNKIX-Cv-DbjH6.js → pieDiagram-ADFJNKIX-jGuNgZxo.js} +7 -7
  135. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-DFyjNST4.js → quadrantDiagram-AYHSOK5B-DAAEbR4l.js} +1 -1
  136. package/dist/server/assets/{radar-ZZBFDIW7-CWlYIMXf.js → radar-ZZBFDIW7-D80s-gzM.js} +6 -6
  137. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-DFM89i-H.js → requirementDiagram-UZGBJVZJ-DmT06vgs.js} +3 -3
  138. package/dist/server/assets/{router-cAoMUC9Q.js → router-PslJYw0K.js} +1798 -664
  139. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-Nmb2f9ga.js → sankeyDiagram-TZEHDZUN-DubOMd7c.js} +1 -1
  140. package/dist/server/assets/{sequenceDiagram-WL72ISMW-BiqqAguj.js → sequenceDiagram-WL72ISMW-V8TCpuJa.js} +3 -3
  141. package/dist/server/assets/{square-terminal-DerzWAi-.js → square-terminal-DqxGkh8h.js} +1 -1
  142. package/dist/server/assets/{stateDiagram-FKZM4ZOC-CkiJXki8.js → stateDiagram-FKZM4ZOC-DDhvvfjL.js} +8 -8
  143. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-Bt1BL33e.js → stateDiagram-v2-4FDKWEC3-CrVhacjl.js} +4 -4
  144. package/dist/server/assets/{timeline-definition-IT6M3QCI-DCRlJiLq.js → timeline-definition-IT6M3QCI-PRx7QaX4.js} +2 -2
  145. package/dist/server/assets/{treemap-GDKQZRPO-Ci-r6jiA.js → treemap-GDKQZRPO-DDEerlZp.js} +6 -6
  146. package/dist/server/assets/{workspace._workspaceId-Dj6Y8WPo.js → workspace._workspaceId-B_ziNHiq.js} +1 -1
  147. package/dist/server/assets/{workspace._workspaceId-BMnOV3pd.js → workspace._workspaceId-CO8mKKZW.js} +3 -3
  148. package/dist/server/assets/{xychartDiagram-PRI3JC2R-r_3LO6yK.js → xychartDiagram-PRI3JC2R-Cdaq77X5.js} +1 -1
  149. package/dist/server/server.js +2 -2
  150. package/dist/start-server.mjs +65 -7
  151. package/package.json +4 -4
  152. package/dist/client/assets/DockviewTerminalContainer-B_36q2Dz.js +0 -2
  153. package/dist/client/assets/TerminalPanel-DbxLiy2t.js +0 -5
  154. package/dist/client/assets/_baseUniq-Cb5igq_8.js +0 -1
  155. package/dist/client/assets/architectureDiagram-VXUJARFQ-BnV97au3.js +0 -36
  156. package/dist/client/assets/channel-2Of2aNA_.js +0 -1
  157. package/dist/client/assets/chunk-QN33PNHL-yK0yp12G.js +0 -1
  158. package/dist/client/assets/classDiagram-2ON5EDUG-D6UcKhcB.js +0 -1
  159. package/dist/client/assets/classDiagram-v2-WZHVMYZB-D6UcKhcB.js +0 -1
  160. package/dist/client/assets/clone-DBCpY5Fq.js +0 -1
  161. package/dist/client/assets/cose-bilkent-S5V4N54A-BZFGVpWR.js +0 -1
  162. package/dist/client/assets/dagre-6UL2VRFP-DRDPL67k.js +0 -4
  163. package/dist/client/assets/diagram-PSM6KHXK-DYAOsIc0.js +0 -24
  164. package/dist/client/assets/diagram-QEK2KX5R-CnjVQgn2.js +0 -43
  165. package/dist/client/assets/diagram-S2PKOQOG-B8sAgSNe.js +0 -24
  166. package/dist/client/assets/gitGraphDiagram-V2S2FVAM-CZGjCgZ_.js +0 -65
  167. package/dist/client/assets/infoDiagram-HS3SLOUP-Bf3MrisJ.js +0 -2
  168. package/dist/client/assets/main-DOmWiUwE.css +0 -1
  169. package/dist/client/assets/pieDiagram-ADFJNKIX-B4aWIFbt.js +0 -30
  170. package/dist/client/assets/stateDiagram-FKZM4ZOC-TzlVvqDv.js +0 -1
  171. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BibE5lUV.js +0 -1
  172. package/dist/server/assets/TerminalPanel-nFYTCFHx.js +0 -1238
  173. package/dist/server/assets/_tanstack-start-manifest_v-v9ri0NYD.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$1s = [
1229
+ const __iconNode$1t = [
1230
1230
  [
1231
1231
  "path",
1232
1232
  {
@@ -1235,45 +1235,45 @@ const __iconNode$1s = [
1235
1235
  }
1236
1236
  ]
1237
1237
  ];
1238
- const Activity = createLucideIcon("activity", __iconNode$1s);
1239
- const __iconNode$1r = [
1238
+ const Activity = createLucideIcon("activity", __iconNode$1t);
1239
+ const __iconNode$1s = [
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$1r);
1245
- const __iconNode$1q = [
1244
+ const ArrowDownToLine = createLucideIcon("arrow-down-to-line", __iconNode$1s);
1245
+ const __iconNode$1r = [
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$1q);
1250
- const __iconNode$1p = [
1249
+ const ArrowDown = createLucideIcon("arrow-down", __iconNode$1r);
1250
+ const __iconNode$1q = [
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$1p);
1255
- const __iconNode$1o = [
1254
+ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$1q);
1255
+ const __iconNode$1p = [
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$1o);
1260
- const __iconNode$1n = [
1259
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$1p);
1260
+ const __iconNode$1o = [
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$1n);
1266
- const __iconNode$1m = [
1265
+ const ArrowUpFromLine = createLucideIcon("arrow-up-from-line", __iconNode$1o);
1266
+ const __iconNode$1n = [
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$1m);
1271
- const __iconNode$1l = [
1270
+ const ArrowUp = createLucideIcon("arrow-up", __iconNode$1n);
1271
+ const __iconNode$1m = [
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$1l);
1276
- const __iconNode$1k = [
1275
+ const Ban = createLucideIcon("ban", __iconNode$1m);
1276
+ const __iconNode$1l = [
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$1k = [
1281
1281
  ["path", { d: "M15 13v2", key: "1xurst" }],
1282
1282
  ["path", { d: "M9 13v2", key: "rq6x2g" }]
1283
1283
  ];
1284
- const Bot = createLucideIcon("bot", __iconNode$1k);
1285
- const __iconNode$1j = [
1284
+ const Bot = createLucideIcon("bot", __iconNode$1l);
1285
+ const __iconNode$1k = [
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$1j);
1292
- const __iconNode$1i = [
1291
+ const CaseSensitive = createLucideIcon("case-sensitive", __iconNode$1k);
1292
+ const __iconNode$1j = [
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$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 = [
1298
+ const ChartColumn = createLucideIcon("chart-column", __iconNode$1j);
1299
+ const __iconNode$1i = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
1300
+ const Check = createLucideIcon("check", __iconNode$1i);
1301
+ const __iconNode$1h = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1302
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$1h);
1303
+ const __iconNode$1g = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
1304
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1g);
1305
+ const __iconNode$1f = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1306
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$1f);
1307
+ const __iconNode$1e = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
1308
+ const ChevronUp = createLucideIcon("chevron-up", __iconNode$1e);
1309
+ const __iconNode$1d = [
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$1c);
1314
- const __iconNode$1b = [
1313
+ const ChevronsDownUp = createLucideIcon("chevrons-down-up", __iconNode$1d);
1314
+ const __iconNode$1c = [
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$1b);
1319
- const __iconNode$1a = [
1318
+ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$1c);
1319
+ const __iconNode$1b = [
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$1a);
1325
- const __iconNode$19 = [
1324
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$1b);
1325
+ const __iconNode$1a = [
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$19);
1330
- const __iconNode$18 = [
1329
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$1a);
1330
+ const __iconNode$19 = [
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$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 = [
1335
+ const CircleX = createLucideIcon("circle-x", __iconNode$19);
1336
+ const __iconNode$18 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
1337
+ const Circle = createLucideIcon("circle", __iconNode$18);
1338
+ const __iconNode$17 = [
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$16);
1346
- const __iconNode$15 = [
1345
+ const ClipboardCopy = createLucideIcon("clipboard-copy", __iconNode$17);
1346
+ const __iconNode$16 = [
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$15);
1354
- const __iconNode$14 = [
1353
+ const ClipboardPaste = createLucideIcon("clipboard-paste", __iconNode$16);
1354
+ const __iconNode$15 = [
1355
1355
  ["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
1356
1356
  [
1357
1357
  "path",
@@ -1361,59 +1361,59 @@ const __iconNode$14 = [
1361
1361
  }
1362
1362
  ]
1363
1363
  ];
1364
- const Clipboard = createLucideIcon("clipboard", __iconNode$14);
1365
- const __iconNode$13 = [
1364
+ const Clipboard = createLucideIcon("clipboard", __iconNode$15);
1365
+ const __iconNode$14 = [
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$13);
1370
- const __iconNode$12 = [
1369
+ const Clock = createLucideIcon("clock", __iconNode$14);
1370
+ const __iconNode$13 = [
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$12);
1376
- const __iconNode$11 = [
1375
+ const CodeXml = createLucideIcon("code-xml", __iconNode$13);
1376
+ const __iconNode$12 = [
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$11);
1381
- const __iconNode$10 = [
1380
+ const Code = createLucideIcon("code", __iconNode$12);
1381
+ const __iconNode$11 = [
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$10);
1386
- const __iconNode$$ = [
1385
+ const Columns2 = createLucideIcon("columns-2", __iconNode$11);
1386
+ const __iconNode$10 = [
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$_ = [
1392
+ const Command$1 = createLucideIcon("command", __iconNode$10);
1393
+ const __iconNode$$ = [
1394
1394
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
1395
1395
  ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
1396
1396
  ];
1397
- const Copy = createLucideIcon("copy", __iconNode$_);
1398
- const __iconNode$Z = [
1397
+ const Copy = createLucideIcon("copy", __iconNode$$);
1398
+ const __iconNode$_ = [
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$Z);
1404
- const __iconNode$Y = [
1403
+ const Download = createLucideIcon("download", __iconNode$_);
1404
+ const __iconNode$Z = [
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$Y);
1410
- const __iconNode$X = [
1409
+ const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$Z);
1410
+ const __iconNode$Y = [
1411
1411
  ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
1412
1412
  ["circle", { cx: "19", cy: "12", r: "1", key: "1wjl8i" }],
1413
1413
  ["circle", { cx: "5", cy: "12", r: "1", key: "1pcz8c" }]
1414
1414
  ];
1415
- const Ellipsis = createLucideIcon("ellipsis", __iconNode$X);
1416
- const __iconNode$W = [
1415
+ const Ellipsis = createLucideIcon("ellipsis", __iconNode$Y);
1416
+ const __iconNode$X = [
1417
1417
  ["path", { d: "m15 15 6 6", key: "1s409w" }],
1418
1418
  ["path", { d: "m15 9 6-6", key: "ko1vev" }],
1419
1419
  ["path", { d: "M21 16v5h-5", key: "1ck2sf" }],
@@ -1423,14 +1423,14 @@ const __iconNode$W = [
1423
1423
  ["path", { d: "M3 8V3h5", key: "1ln10m" }],
1424
1424
  ["path", { d: "M9 9 3 3", key: "v551iv" }]
1425
1425
  ];
1426
- const Expand = createLucideIcon("expand", __iconNode$W);
1427
- const __iconNode$V = [
1426
+ const Expand = createLucideIcon("expand", __iconNode$X);
1427
+ const __iconNode$W = [
1428
1428
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
1429
1429
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
1430
1430
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
1431
1431
  ];
1432
- const ExternalLink$1 = createLucideIcon("external-link", __iconNode$V);
1433
- const __iconNode$U = [
1432
+ const ExternalLink$1 = createLucideIcon("external-link", __iconNode$W);
1433
+ const __iconNode$V = [
1434
1434
  [
1435
1435
  "path",
1436
1436
  {
@@ -1440,8 +1440,8 @@ const __iconNode$U = [
1440
1440
  ],
1441
1441
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
1442
1442
  ];
1443
- const Eye = createLucideIcon("eye", __iconNode$U);
1444
- const __iconNode$T = [
1443
+ const Eye = createLucideIcon("eye", __iconNode$V);
1444
+ const __iconNode$U = [
1445
1445
  [
1446
1446
  "path",
1447
1447
  {
@@ -1452,8 +1452,8 @@ const __iconNode$T = [
1452
1452
  ["path", { d: "M12 9v4", key: "juzpu7" }],
1453
1453
  ["path", { d: "M12 17h.01", key: "p32p05" }]
1454
1454
  ];
1455
- const FileExclamationPoint = createLucideIcon("file-exclamation-point", __iconNode$T);
1456
- const __iconNode$S = [
1455
+ const FileExclamationPoint = createLucideIcon("file-exclamation-point", __iconNode$U);
1456
+ const __iconNode$T = [
1457
1457
  [
1458
1458
  "path",
1459
1459
  {
@@ -1465,8 +1465,8 @@ const __iconNode$S = [
1465
1465
  ["path", { d: "M2 15h10", key: "jfw4w8" }],
1466
1466
  ["path", { d: "m9 18 3-3-3-3", key: "112psh" }]
1467
1467
  ];
1468
- const FileInput = createLucideIcon("file-input", __iconNode$S);
1469
- const __iconNode$R = [
1468
+ const FileInput = createLucideIcon("file-input", __iconNode$T);
1469
+ const __iconNode$S = [
1470
1470
  [
1471
1471
  "path",
1472
1472
  {
@@ -1478,8 +1478,8 @@ const __iconNode$R = [
1478
1478
  ["path", { d: "M9 15h6", key: "cctwl0" }],
1479
1479
  ["path", { d: "M12 18v-6", key: "17g6i2" }]
1480
1480
  ];
1481
- const FilePlus = createLucideIcon("file-plus", __iconNode$R);
1482
- const __iconNode$Q = [
1481
+ const FilePlus = createLucideIcon("file-plus", __iconNode$S);
1482
+ const __iconNode$R = [
1483
1483
  [
1484
1484
  "path",
1485
1485
  {
@@ -1492,8 +1492,8 @@ const __iconNode$Q = [
1492
1492
  ["path", { d: "M16 13H8", key: "t4e002" }],
1493
1493
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
1494
1494
  ];
1495
- const FileText = createLucideIcon("file-text", __iconNode$Q);
1496
- const __iconNode$P = [
1495
+ const FileText = createLucideIcon("file-text", __iconNode$R);
1496
+ const __iconNode$Q = [
1497
1497
  [
1498
1498
  "path",
1499
1499
  {
@@ -1503,8 +1503,8 @@ const __iconNode$P = [
1503
1503
  ],
1504
1504
  ["path", { d: "M14 2v5a1 1 0 0 0 1 1h5", key: "wfsgrz" }]
1505
1505
  ];
1506
- const File$1 = createLucideIcon("file", __iconNode$P);
1507
- const __iconNode$O = [
1506
+ const File$1 = createLucideIcon("file", __iconNode$Q);
1507
+ const __iconNode$P = [
1508
1508
  [
1509
1509
  "path",
1510
1510
  {
@@ -1513,8 +1513,8 @@ const __iconNode$O = [
1513
1513
  }
1514
1514
  ]
1515
1515
  ];
1516
- const FolderOpen = createLucideIcon("folder-open", __iconNode$O);
1517
- const __iconNode$N = [
1516
+ const FolderOpen = createLucideIcon("folder-open", __iconNode$P);
1517
+ const __iconNode$O = [
1518
1518
  ["path", { d: "M12 10v6", key: "1bos4e" }],
1519
1519
  ["path", { d: "M9 13h6", key: "1uhe8q" }],
1520
1520
  [
@@ -1525,8 +1525,8 @@ const __iconNode$N = [
1525
1525
  }
1526
1526
  ]
1527
1527
  ];
1528
- const FolderPlus = createLucideIcon("folder-plus", __iconNode$N);
1529
- const __iconNode$M = [
1528
+ const FolderPlus = createLucideIcon("folder-plus", __iconNode$O);
1529
+ const __iconNode$N = [
1530
1530
  [
1531
1531
  "path",
1532
1532
  {
@@ -1535,39 +1535,39 @@ const __iconNode$M = [
1535
1535
  }
1536
1536
  ]
1537
1537
  ];
1538
- const Folder = createLucideIcon("folder", __iconNode$M);
1539
- const __iconNode$L = [
1538
+ const Folder = createLucideIcon("folder", __iconNode$N);
1539
+ const __iconNode$M = [
1540
1540
  ["path", { d: "M15 6a9 9 0 0 0-9 9V3", key: "1cii5b" }],
1541
1541
  ["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
1542
1542
  ["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }]
1543
1543
  ];
1544
- const GitBranch = createLucideIcon("git-branch", __iconNode$L);
1545
- const __iconNode$K = [
1544
+ const GitBranch = createLucideIcon("git-branch", __iconNode$M);
1545
+ const __iconNode$L = [
1546
1546
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }],
1547
1547
  ["line", { x1: "3", x2: "9", y1: "12", y2: "12", key: "1dyftd" }],
1548
1548
  ["line", { x1: "15", x2: "21", y1: "12", y2: "12", key: "oup4p8" }]
1549
1549
  ];
1550
- const GitCommitHorizontal = createLucideIcon("git-commit-horizontal", __iconNode$K);
1551
- const __iconNode$J = [
1550
+ const GitCommitHorizontal = createLucideIcon("git-commit-horizontal", __iconNode$L);
1551
+ const __iconNode$K = [
1552
1552
  ["circle", { cx: "18", cy: "18", r: "3", key: "1xkwt0" }],
1553
1553
  ["circle", { cx: "6", cy: "6", r: "3", key: "1lh9wr" }],
1554
1554
  ["path", { d: "M13 6h3a2 2 0 0 1 2 2v7", key: "1yeb86" }],
1555
1555
  ["path", { d: "M11 18H8a2 2 0 0 1-2-2V9", key: "19pyzm" }]
1556
1556
  ];
1557
- const GitCompare = createLucideIcon("git-compare", __iconNode$J);
1558
- const __iconNode$I = [
1557
+ const GitCompare = createLucideIcon("git-compare", __iconNode$K);
1558
+ const __iconNode$J = [
1559
1559
  ["circle", { cx: "18", cy: "18", r: "3", key: "1xkwt0" }],
1560
1560
  ["circle", { cx: "6", cy: "6", r: "3", key: "1lh9wr" }],
1561
1561
  ["path", { d: "M6 21V9a9 9 0 0 0 9 9", key: "7kw0sc" }]
1562
1562
  ];
1563
- const GitMerge = createLucideIcon("git-merge", __iconNode$I);
1564
- const __iconNode$H = [
1563
+ const GitMerge = createLucideIcon("git-merge", __iconNode$J);
1564
+ const __iconNode$I = [
1565
1565
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1566
1566
  ["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
1567
1567
  ["path", { d: "M2 12h20", key: "9i4pu4" }]
1568
1568
  ];
1569
- const Globe = createLucideIcon("globe", __iconNode$H);
1570
- const __iconNode$G = [
1569
+ const Globe = createLucideIcon("globe", __iconNode$I);
1570
+ const __iconNode$H = [
1571
1571
  ["circle", { cx: "12", cy: "9", r: "1", key: "124mty" }],
1572
1572
  ["circle", { cx: "19", cy: "9", r: "1", key: "1ruzo2" }],
1573
1573
  ["circle", { cx: "5", cy: "9", r: "1", key: "1a8b28" }],
@@ -1575,7 +1575,18 @@ const __iconNode$G = [
1575
1575
  ["circle", { cx: "19", cy: "15", r: "1", key: "1a92ep" }],
1576
1576
  ["circle", { cx: "5", cy: "15", r: "1", key: "5r1jwy" }]
1577
1577
  ];
1578
- const GripHorizontal = createLucideIcon("grip-horizontal", __iconNode$G);
1578
+ const GripHorizontal = createLucideIcon("grip-horizontal", __iconNode$H);
1579
+ const __iconNode$G = [
1580
+ ["path", { d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8", key: "5wwlr5" }],
1581
+ [
1582
+ "path",
1583
+ {
1584
+ d: "M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",
1585
+ key: "r6nss1"
1586
+ }
1587
+ ]
1588
+ ];
1589
+ const House = createLucideIcon("house", __iconNode$G);
1579
1590
  const __iconNode$F = [
1580
1591
  ["line", { x1: "2", x2: "22", y1: "2", y2: "22", key: "a6p6uj" }],
1581
1592
  ["path", { d: "M10.41 10.41a2 2 0 1 1-2.83-2.83", key: "1bzlo9" }],
@@ -4470,7 +4481,7 @@ const oppositeSideMap = {
4470
4481
  bottom: "top",
4471
4482
  top: "bottom"
4472
4483
  };
4473
- function clamp$2(start2, value, end) {
4484
+ function clamp$3(start2, value, end) {
4474
4485
  return max$2(start2, min$2(value, end));
4475
4486
  }
4476
4487
  function evaluate$1(value, param) {
@@ -4827,7 +4838,7 @@ const arrow$3 = (options) => ({
4827
4838
  const min$12 = minPadding;
4828
4839
  const max2 = clientSize - arrowDimensions[length2] - maxPadding;
4829
4840
  const center = clientSize / 2 - arrowDimensions[length2] / 2 + centerToReference;
4830
- const offset2 = clamp$2(min$12, center, max2);
4841
+ const offset2 = clamp$3(min$12, center, max2);
4831
4842
  const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset2 && rects.reference[length2] / 2 - (center < min$12 ? minPadding : maxPadding) - arrowDimensions[length2] / 2 < 0;
4832
4843
  const alignmentOffset = shouldAddOffset ? center < min$12 ? center - min$12 : center - max2 : 0;
4833
4844
  return {
@@ -5126,14 +5137,14 @@ const shift$3 = function(options) {
5126
5137
  const maxSide = mainAxis === "y" ? "bottom" : "right";
5127
5138
  const min2 = mainAxisCoord + overflow[minSide];
5128
5139
  const max2 = mainAxisCoord - overflow[maxSide];
5129
- mainAxisCoord = clamp$2(min2, mainAxisCoord, max2);
5140
+ mainAxisCoord = clamp$3(min2, mainAxisCoord, max2);
5130
5141
  }
5131
5142
  if (checkCrossAxis) {
5132
5143
  const minSide = crossAxis === "y" ? "top" : "left";
5133
5144
  const maxSide = crossAxis === "y" ? "bottom" : "right";
5134
5145
  const min2 = crossAxisCoord + overflow[minSide];
5135
5146
  const max2 = crossAxisCoord - overflow[maxSide];
5136
- crossAxisCoord = clamp$2(min2, crossAxisCoord, max2);
5147
+ crossAxisCoord = clamp$3(min2, crossAxisCoord, max2);
5137
5148
  }
5138
5149
  const limitedCoords = limiter.fn({
5139
5150
  ...state2,
@@ -7944,9 +7955,9 @@ var Portal2$1 = ContextMenuPortal$1;
7944
7955
  var Content2$4 = ContextMenuContent$1;
7945
7956
  var Item2$1 = ContextMenuItem$1;
7946
7957
  var Separator2$1 = ContextMenuSeparator$1;
7947
- var Sub2 = ContextMenuSub$1;
7948
- var SubTrigger2 = ContextMenuSubTrigger$1;
7949
- var SubContent2 = ContextMenuSubContent$1;
7958
+ var Sub2$1 = ContextMenuSub$1;
7959
+ var SubTrigger2$1 = ContextMenuSubTrigger$1;
7960
+ var SubContent2$1 = ContextMenuSubContent$1;
7950
7961
  var DROPDOWN_MENU_NAME = "DropdownMenu";
7951
7962
  var [createDropdownMenuContext] = createContextScope(
7952
7963
  DROPDOWN_MENU_NAME,
@@ -8025,12 +8036,12 @@ var DropdownMenuTrigger$1 = reactExports.forwardRef(
8025
8036
  );
8026
8037
  DropdownMenuTrigger$1.displayName = TRIGGER_NAME$3;
8027
8038
  var PORTAL_NAME$3 = "DropdownMenuPortal";
8028
- var DropdownMenuPortal = (props) => {
8039
+ var DropdownMenuPortal$1 = (props) => {
8029
8040
  const { __scopeDropdownMenu, ...portalProps } = props;
8030
8041
  const menuScope = useMenuScope(__scopeDropdownMenu);
8031
8042
  return /* @__PURE__ */ jsxRuntimeExports.jsx(Portal$3, { ...menuScope, ...portalProps });
8032
8043
  };
8033
- DropdownMenuPortal.displayName = PORTAL_NAME$3;
8044
+ DropdownMenuPortal$1.displayName = PORTAL_NAME$3;
8034
8045
  var CONTENT_NAME$3 = "DropdownMenuContent";
8035
8046
  var DropdownMenuContent$1 = reactExports.forwardRef(
8036
8047
  (props, forwardedRef) => {
@@ -8144,15 +8155,26 @@ var DropdownMenuArrow = reactExports.forwardRef(
8144
8155
  }
8145
8156
  );
8146
8157
  DropdownMenuArrow.displayName = ARROW_NAME$3;
8158
+ var DropdownMenuSub$1 = (props) => {
8159
+ const { __scopeDropdownMenu, children: children2, open: openProp, onOpenChange, defaultOpen } = props;
8160
+ const menuScope = useMenuScope(__scopeDropdownMenu);
8161
+ const [open2, setOpen] = useControllableState({
8162
+ prop: openProp,
8163
+ defaultProp: defaultOpen ?? false,
8164
+ onChange: onOpenChange,
8165
+ caller: "DropdownMenuSub"
8166
+ });
8167
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Sub, { ...menuScope, open: open2, onOpenChange: setOpen, children: children2 });
8168
+ };
8147
8169
  var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger";
8148
- var DropdownMenuSubTrigger = reactExports.forwardRef((props, forwardedRef) => {
8170
+ var DropdownMenuSubTrigger$1 = reactExports.forwardRef((props, forwardedRef) => {
8149
8171
  const { __scopeDropdownMenu, ...subTriggerProps } = props;
8150
8172
  const menuScope = useMenuScope(__scopeDropdownMenu);
8151
8173
  return /* @__PURE__ */ jsxRuntimeExports.jsx(SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });
8152
8174
  });
8153
- DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
8175
+ DropdownMenuSubTrigger$1.displayName = SUB_TRIGGER_NAME;
8154
8176
  var SUB_CONTENT_NAME = "DropdownMenuSubContent";
8155
- var DropdownMenuSubContent = reactExports.forwardRef((props, forwardedRef) => {
8177
+ var DropdownMenuSubContent$1 = reactExports.forwardRef((props, forwardedRef) => {
8156
8178
  const { __scopeDropdownMenu, ...subContentProps } = props;
8157
8179
  const menuScope = useMenuScope(__scopeDropdownMenu);
8158
8180
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -8175,10 +8197,10 @@ var DropdownMenuSubContent = reactExports.forwardRef((props, forwardedRef) => {
8175
8197
  }
8176
8198
  );
8177
8199
  });
8178
- DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
8200
+ DropdownMenuSubContent$1.displayName = SUB_CONTENT_NAME;
8179
8201
  var Root2$2 = DropdownMenu$1;
8180
8202
  var Trigger$3 = DropdownMenuTrigger$1;
8181
- var Portal2 = DropdownMenuPortal;
8203
+ var Portal2 = DropdownMenuPortal$1;
8182
8204
  var Content2$3 = DropdownMenuContent$1;
8183
8205
  var Group2 = DropdownMenuGroup$1;
8184
8206
  var Label2 = DropdownMenuLabel$1;
@@ -8186,6 +8208,9 @@ var Item2 = DropdownMenuItem$1;
8186
8208
  var CheckboxItem2 = DropdownMenuCheckboxItem$1;
8187
8209
  var ItemIndicator2 = DropdownMenuItemIndicator;
8188
8210
  var Separator2 = DropdownMenuSeparator$1;
8211
+ var Sub2 = DropdownMenuSub$1;
8212
+ var SubTrigger2 = DropdownMenuSubTrigger$1;
8213
+ var SubContent2 = DropdownMenuSubContent$1;
8189
8214
  var NAME = "Label";
8190
8215
  var Label$2 = reactExports.forwardRef((props, forwardedRef) => {
8191
8216
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -8204,7 +8229,7 @@ var Label$2 = reactExports.forwardRef((props, forwardedRef) => {
8204
8229
  });
8205
8230
  Label$2.displayName = NAME;
8206
8231
  var Root$2 = Label$2;
8207
- function clamp$1(value, [min2, max2]) {
8232
+ function clamp$2(value, [min2, max2]) {
8208
8233
  return Math.min(max2, Math.max(min2, value));
8209
8234
  }
8210
8235
  var POPOVER_NAME = "Popover";
@@ -9132,7 +9157,7 @@ function getThumbOffsetFromScroll(scrollPos, sizes, dir = "ltr") {
9132
9157
  const maxScrollPos = sizes.content - sizes.viewport;
9133
9158
  const maxThumbPos = scrollbar - thumbSizePx;
9134
9159
  const scrollClampRange = dir === "ltr" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];
9135
- const scrollWithoutMomentum = clamp$1(scrollPos, scrollClampRange);
9160
+ const scrollWithoutMomentum = clamp$2(scrollPos, scrollClampRange);
9136
9161
  const interpolate2 = linearScale([0, maxScrollPos], [0, maxThumbPos]);
9137
9162
  return interpolate2(scrollWithoutMomentum);
9138
9163
  }
@@ -9694,7 +9719,7 @@ var SelectItemAlignedPosition = reactExports.forwardRef((props, forwardedRef) =>
9694
9719
  const minContentWidth = triggerRect.width + leftDelta;
9695
9720
  const contentWidth = Math.max(minContentWidth, contentRect.width);
9696
9721
  const rightEdge = window.innerWidth - CONTENT_MARGIN;
9697
- const clampedLeft = clamp$1(left, [
9722
+ const clampedLeft = clamp$2(left, [
9698
9723
  CONTENT_MARGIN,
9699
9724
  // Prevents the content from going off the starting edge of the
9700
9725
  // viewport. It may still go off the ending edge, but this can be
@@ -9712,7 +9737,7 @@ var SelectItemAlignedPosition = reactExports.forwardRef((props, forwardedRef) =>
9712
9737
  const minContentWidth = triggerRect.width + rightDelta;
9713
9738
  const contentWidth = Math.max(minContentWidth, contentRect.width);
9714
9739
  const leftEdge = window.innerWidth - CONTENT_MARGIN;
9715
- const clampedRight = clamp$1(right, [
9740
+ const clampedRight = clamp$2(right, [
9716
9741
  CONTENT_MARGIN,
9717
9742
  Math.max(CONTENT_MARGIN, leftEdge - contentWidth)
9718
9743
  ]);
@@ -15075,7 +15100,7 @@ function ContextMenuItem({
15075
15100
  );
15076
15101
  }
15077
15102
  function ContextMenuSub({ ...props }) {
15078
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Sub2, { "data-slot": "context-menu-sub", ...props });
15103
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Sub2$1, { "data-slot": "context-menu-sub", ...props });
15079
15104
  }
15080
15105
  function ContextMenuSubTrigger({
15081
15106
  className,
@@ -15084,7 +15109,7 @@ function ContextMenuSubTrigger({
15084
15109
  ...props
15085
15110
  }) {
15086
15111
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
15087
- SubTrigger2,
15112
+ SubTrigger2$1,
15088
15113
  {
15089
15114
  "data-slot": "context-menu-sub-trigger",
15090
15115
  "data-inset": inset,
@@ -15105,7 +15130,7 @@ function ContextMenuSubContent({
15105
15130
  ...props
15106
15131
  }) {
15107
15132
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
15108
- SubContent2,
15133
+ SubContent2$1,
15109
15134
  {
15110
15135
  "data-slot": "context-menu-sub-content",
15111
15136
  className: cn$2(
@@ -15132,6 +15157,11 @@ function ContextMenuSeparator({
15132
15157
  function DropdownMenu({ ...props }) {
15133
15158
  return /* @__PURE__ */ jsxRuntimeExports.jsx(Root2$2, { "data-slot": "dropdown-menu", ...props });
15134
15159
  }
15160
+ function DropdownMenuPortal({
15161
+ ...props
15162
+ }) {
15163
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Portal2, { "data-slot": "dropdown-menu-portal", ...props });
15164
+ }
15135
15165
  function DropdownMenuTrigger({
15136
15166
  ...props
15137
15167
  }) {
@@ -15239,6 +15269,48 @@ function DropdownMenuShortcut({ className, ...props }) {
15239
15269
  }
15240
15270
  );
15241
15271
  }
15272
+ function DropdownMenuSub({ ...props }) {
15273
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Sub2, { "data-slot": "dropdown-menu-sub", ...props });
15274
+ }
15275
+ function DropdownMenuSubTrigger({
15276
+ className,
15277
+ inset,
15278
+ children: children2,
15279
+ ...props
15280
+ }) {
15281
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
15282
+ SubTrigger2,
15283
+ {
15284
+ "data-slot": "dropdown-menu-sub-trigger",
15285
+ "data-inset": inset,
15286
+ className: cn$2(
15287
+ "flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground dark:focus:bg-neutral-700 data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground dark:data-[state=open]:bg-neutral-700 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
15288
+ className
15289
+ ),
15290
+ ...props,
15291
+ children: [
15292
+ children2,
15293
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "ml-auto size-4" })
15294
+ ]
15295
+ }
15296
+ );
15297
+ }
15298
+ function DropdownMenuSubContent({
15299
+ className,
15300
+ ...props
15301
+ }) {
15302
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
15303
+ SubContent2,
15304
+ {
15305
+ "data-slot": "dropdown-menu-sub-content",
15306
+ className: cn$2(
15307
+ "z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
15308
+ className
15309
+ ),
15310
+ ...props
15311
+ }
15312
+ );
15313
+ }
15242
15314
  function Textarea({ className, ...props }) {
15243
15315
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
15244
15316
  "textarea",
@@ -42763,53 +42835,53 @@ async function loadLanguage(lang) {
42763
42835
  try {
42764
42836
  switch (lang) {
42765
42837
  case "javascript":
42766
- return import("./index-8fW2N3v4.js").then((m2) => m2.javascript());
42838
+ return import("./index-DGyXXlV8.js").then((m2) => m2.javascript());
42767
42839
  case "jsx":
42768
- return import("./index-8fW2N3v4.js").then((m2) => m2.javascript({ jsx: true }));
42840
+ return import("./index-DGyXXlV8.js").then((m2) => m2.javascript({ jsx: true }));
42769
42841
  case "typescript":
42770
- return import("./index-8fW2N3v4.js").then(
42842
+ return import("./index-DGyXXlV8.js").then(
42771
42843
  (m2) => m2.javascript({ typescript: true })
42772
42844
  );
42773
42845
  case "tsx":
42774
- return import("./index-8fW2N3v4.js").then(
42846
+ return import("./index-DGyXXlV8.js").then(
42775
42847
  (m2) => m2.javascript({ jsx: true, typescript: true })
42776
42848
  );
42777
42849
  case "python":
42778
- return import("./index-DsPBpNpr.js").then((m2) => m2.python());
42850
+ return import("./index-CXEg-eDA.js").then((m2) => m2.python());
42779
42851
  case "html":
42780
- return import("./index-CUnnFiRO.js").then((m2) => m2.html());
42852
+ return import("./index-C06ZyGGj.js").then((m2) => m2.html());
42781
42853
  case "css":
42782
- return import("./index-O03NM4sL.js").then((m2) => m2.css());
42854
+ return import("./index-WOVU_Ptt.js").then((m2) => m2.css());
42783
42855
  case "scss":
42784
42856
  case "sass":
42785
- return import("./index-bbP5Ilkt.js").then((m2) => m2.sass());
42857
+ return import("./index-tV4Tdk7z.js").then((m2) => m2.sass());
42786
42858
  case "less":
42787
- return import("./index-BiMwh0FT.js").then((m2) => m2.less());
42859
+ return import("./index-CD62n4Wy.js").then((m2) => m2.less());
42788
42860
  case "json":
42789
42861
  case "jsonc":
42790
- return import("./index-DipxLM5f.js").then((m2) => m2.json());
42862
+ return import("./index-B1VfjVjc.js").then((m2) => m2.json());
42791
42863
  case "markdown":
42792
42864
  case "mdx":
42793
- return import("./index-BDqHa1DL.js").then((m2) => m2.markdown());
42865
+ return import("./index-B1aJ0zMt.js").then((m2) => m2.markdown());
42794
42866
  case "xml":
42795
- return import("./index-DEZw9nkv.js").then((m2) => m2.xml());
42867
+ return import("./index-DXSqtFcT.js").then((m2) => m2.xml());
42796
42868
  case "yaml":
42797
- return import("./index-dAOow3Ru.js").then((m2) => m2.yaml());
42869
+ return import("./index-BhpCZORq.js").then((m2) => m2.yaml());
42798
42870
  case "sql":
42799
- return import("./index-igT3OuCm.js").then((m2) => m2.sql());
42871
+ return import("./index-dJOmGf_o.js").then((m2) => m2.sql());
42800
42872
  case "rust":
42801
- return import("./index-CGm8Czks.js").then((m2) => m2.rust());
42873
+ return import("./index-e4ZKMFB1.js").then((m2) => m2.rust());
42802
42874
  case "go":
42803
- return import("./index-DYiuwMzT.js").then((m2) => m2.go());
42875
+ return import("./index-BCTaINbC.js").then((m2) => m2.go());
42804
42876
  case "java":
42805
- return import("./index-5St5BCcJ.js").then((m2) => m2.java());
42877
+ return import("./index-CprdJ8Lo.js").then((m2) => m2.java());
42806
42878
  case "kotlin":
42807
- return import("./index-5St5BCcJ.js").then((m2) => m2.java());
42879
+ return import("./index-CprdJ8Lo.js").then((m2) => m2.java());
42808
42880
  case "c":
42809
42881
  case "cpp":
42810
- return import("./index-DR892S39.js").then((m2) => m2.cpp());
42882
+ return import("./index-BCLSgPI1.js").then((m2) => m2.cpp());
42811
42883
  case "php":
42812
- return import("./index-BZSAPXc2.js").then((m2) => m2.php());
42884
+ return import("./index-DHt4VQNS.js").then((m2) => m2.php());
42813
42885
  // Legacy modes via StreamLanguage
42814
42886
  case "bash":
42815
42887
  case "fish":
@@ -48900,7 +48972,7 @@ function NewWorkspaceDialog({ projectName, open: open2, onOpenChange }) {
48900
48972
  setPrompt("");
48901
48973
  onOpenChange(false);
48902
48974
  };
48903
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Dialog, { open: open2, onOpenChange, children: /* @__PURE__ */ jsxRuntimeExports.jsx(DialogContent, { className: "sm:max-w-[425px]", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, children: [
48975
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Dialog, { open: open2, onOpenChange, children: /* @__PURE__ */ jsxRuntimeExports.jsx(DialogContent, { className: "sm:max-w-[425px]", "data-testid": "new-workspace-form__dialog", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, children: [
48904
48976
  /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogHeader, { children: [
48905
48977
  /* @__PURE__ */ jsxRuntimeExports.jsx(DialogTitle, { children: "Add Workspace" }),
48906
48978
  /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogDescription, { children: [
@@ -49087,6 +49159,8 @@ const WorkspaceCard = reactExports.memo(function WorkspaceCard2({
49087
49159
  const gitPush = useDashboardStore((s2) => s2.gitPush);
49088
49160
  const removeWorkspaceMutation = useRemoveWorkspace();
49089
49161
  const isPinned = worktree.pinned;
49162
+ const isRoot = !isPlain && worktree.name === defaultBranch;
49163
+ const agentActive = status?.agent?.status === "working" || status?.agent?.status === "needs_attention";
49090
49164
  const workspaceId = toWorkspaceId(projectName, worktree.name);
49091
49165
  const isActive = useDashboardStore((s2) => s2.activeWorkspaceId === workspaceId);
49092
49166
  const href = capabilities2.getWorkspaceHref?.(workspaceId);
@@ -49152,12 +49226,41 @@ const WorkspaceCard = reactExports.memo(function WorkspaceCard2({
49152
49226
  /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ...containerProps, children: [
49153
49227
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { delayDuration: 800, children: [
49154
49228
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 min-w-0 overflow-hidden", children: [
49155
- /* @__PURE__ */ jsxRuntimeExports.jsx(AgentStatusIndicator, { agent: status?.agent, isActive }),
49156
- /* @__PURE__ */ jsxRuntimeExports.jsx(
49229
+ isRoot ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
49230
+ agentActive && /* @__PURE__ */ jsxRuntimeExports.jsx(AgentStatusIndicator, { agent: status?.agent, isActive }),
49231
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
49232
+ House,
49233
+ {
49234
+ className: `size-3.5 shrink-0 ${isActive ? "text-primary" : "text-muted-foreground"}`
49235
+ }
49236
+ )
49237
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx(AgentStatusIndicator, { agent: status?.agent, isActive }),
49238
+ showProjectName ? (
49239
+ // Pinned section: stack the branch name over the project name
49240
+ // as a compact two-line block so a mixed list of pinned cards
49241
+ // stays scannable without a long, mid-truncated
49242
+ // `project/branch` string on one line.
49243
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col min-w-0 leading-tight", children: [
49244
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
49245
+ "span",
49246
+ {
49247
+ className: `text-sm truncate ${isActive ? "font-bold text-foreground" : "font-medium text-muted-foreground"}`,
49248
+ children: worktree.name
49249
+ }
49250
+ ),
49251
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
49252
+ "span",
49253
+ {
49254
+ className: `text-xs truncate ${isActive ? "text-foreground/80" : "text-muted-foreground"}`,
49255
+ children: projectName
49256
+ }
49257
+ )
49258
+ ] })
49259
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx(
49157
49260
  "span",
49158
49261
  {
49159
49262
  className: `text-sm truncate ${isActive ? "font-bold text-foreground" : "font-medium text-muted-foreground"}`,
49160
- children: showProjectName ? `${projectName}/${worktree.name}` : worktree.name
49263
+ children: worktree.name
49161
49264
  }
49162
49265
  )
49163
49266
  ] }) }),
@@ -49206,6 +49309,19 @@ const WorkspaceCard = reactExports.memo(function WorkspaceCard2({
49206
49309
  ] })
49207
49310
  ] });
49208
49311
  });
49312
+ function CollapsibleSection({
49313
+ collapsed,
49314
+ className,
49315
+ children: children2
49316
+ }) {
49317
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
49318
+ "div",
49319
+ {
49320
+ className: `grid transition-[grid-template-rows] duration-200 ease-out ${collapsed ? "grid-rows-[0fr]" : "grid-rows-[1fr]"}`,
49321
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `overflow-hidden ${className ?? ""}`, inert: collapsed, children: children2 })
49322
+ }
49323
+ );
49324
+ }
49209
49325
  function SortableProject({
49210
49326
  project,
49211
49327
  statuses,
@@ -49262,6 +49378,61 @@ function SortableProject({
49262
49378
  };
49263
49379
  let workspaceIndex = workspaceIndexStart;
49264
49380
  const headerClassName = isPlain ? `group flex items-center justify-between mb-0.5 rounded-md pl-1 pr-1 py-1.5 min-w-0 overflow-hidden cursor-pointer select-none touch-pan-y transition-colors hover:bg-accent/50 [@media(pointer:coarse)]:min-h-11 [@media(pointer:coarse)]:py-2.5 ${plainIsActive ? "bg-primary/15 hover:bg-primary/15" : plainIsFocused ? "bg-accent" : ""}` : `group flex items-center justify-between mb-0.5 pl-1 pr-0 rounded select-none touch-pan-y transition-colors hover:bg-accent/50 [@media(pointer:coarse)]:min-h-11`;
49381
+ const renderMenuItems = (menu) => {
49382
+ const { Item: Item3, Sub: Sub3, SubTrigger: SubTrigger3, SubContent: SubContent3, Portal: Portal3 } = menu;
49383
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
49384
+ !isPlain && /* @__PURE__ */ jsxRuntimeExports.jsxs(
49385
+ Item3,
49386
+ {
49387
+ "data-testid": "project-list__action--add-workspace",
49388
+ onClick: () => setWorkspaceDialog(project.name),
49389
+ children: [
49390
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Plus, {}),
49391
+ "Add workspace"
49392
+ ]
49393
+ }
49394
+ ),
49395
+ labels.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(Sub3, { children: [
49396
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(SubTrigger3, { children: [
49397
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tag$1, { className: "size-4 mr-2" }),
49398
+ "Set label"
49399
+ ] }),
49400
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Portal3, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(SubContent3, { children: [
49401
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Item3, { onClick: () => updateProjectLabel(project.name, null), children: [
49402
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1", children: "None" }),
49403
+ !project.label && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 ml-2" })
49404
+ ] }),
49405
+ labels.map((lbl) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Item3, { onClick: () => updateProjectLabel(project.name, lbl.id), children: [
49406
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
49407
+ "span",
49408
+ {
49409
+ className: "size-2.5 rounded-full shrink-0 mr-2",
49410
+ style: { backgroundColor: lbl.color }
49411
+ }
49412
+ ),
49413
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1", children: lbl.name }),
49414
+ project.label === lbl.id && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 ml-2" })
49415
+ ] }, lbl.id))
49416
+ ] }) })
49417
+ ] }),
49418
+ isPlain && canPromoteToGit && /* @__PURE__ */ jsxRuntimeExports.jsxs(Item3, { onClick: () => onPromoteToGit(project.name), children: [
49419
+ /* @__PURE__ */ jsxRuntimeExports.jsx(GitBranch, {}),
49420
+ "Promote to git…"
49421
+ ] }),
49422
+ capabilities2.copyPath && /* @__PURE__ */ jsxRuntimeExports.jsxs(Item3, { onClick: () => navigator.clipboard.writeText(project.path), children: [
49423
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Clipboard, {}),
49424
+ "Copy path"
49425
+ ] }),
49426
+ capabilities2.revealInFinder && /* @__PURE__ */ jsxRuntimeExports.jsxs(Item3, { onClick: () => capabilities2.revealInFinder(project.path), children: [
49427
+ /* @__PURE__ */ jsxRuntimeExports.jsx(FolderOpen, {}),
49428
+ "Open in Finder"
49429
+ ] }),
49430
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Item3, { onClick: () => removeProject(project.name), children: [
49431
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ListMinus, {}),
49432
+ "Remove from list"
49433
+ ] })
49434
+ ] });
49435
+ };
49265
49436
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: setNodeRef, style: style2, className: "min-w-0 px-2", children: [
49266
49437
  /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenu, { children: [
49267
49438
  /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -49311,89 +49482,60 @@ function SortableProject({
49311
49482
  ]
49312
49483
  }
49313
49484
  ),
49314
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center gap-1", children: !isPlain && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
49315
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
49316
- Button,
49317
- {
49318
- variant: "ghost",
49319
- size: "icon-xs",
49320
- onPointerDown: (e3) => e3.stopPropagation(),
49321
- onClick: (e3) => {
49322
- e3.stopPropagation();
49323
- setWorkspaceDialog(project.name);
49324
- },
49325
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Plus, {})
49326
- }
49327
- ) }),
49328
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Add workspace" })
49329
- ] }) })
49485
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100 focus-within:opacity-100 [@media(pointer:coarse)]:opacity-100", children: [
49486
+ !isPlain && /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
49487
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
49488
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
49489
+ Button,
49490
+ {
49491
+ variant: "ghost",
49492
+ size: "icon-xs",
49493
+ "aria-label": "Project actions",
49494
+ "data-testid": `project-list__project-menu-trigger--${project.name}`,
49495
+ onPointerDown: (e3) => e3.stopPropagation(),
49496
+ onClick: (e3) => e3.stopPropagation(),
49497
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(EllipsisVertical, {})
49498
+ }
49499
+ ) }) }),
49500
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "More actions" })
49501
+ ] }),
49502
+ /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuContent, { align: "end", children: renderMenuItems({
49503
+ Item: DropdownMenuItem,
49504
+ Sub: DropdownMenuSub,
49505
+ SubTrigger: DropdownMenuSubTrigger,
49506
+ SubContent: DropdownMenuSubContent,
49507
+ Portal: DropdownMenuPortal
49508
+ }) })
49509
+ ] }),
49510
+ !isPlain && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
49511
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
49512
+ Button,
49513
+ {
49514
+ variant: "ghost",
49515
+ size: "icon-xs",
49516
+ onPointerDown: (e3) => e3.stopPropagation(),
49517
+ onClick: (e3) => {
49518
+ e3.stopPropagation();
49519
+ setWorkspaceDialog(project.name);
49520
+ },
49521
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Plus, {})
49522
+ }
49523
+ ) }),
49524
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Add workspace" })
49525
+ ] })
49526
+ ] })
49330
49527
  ]
49331
49528
  }
49332
49529
  ) }),
49333
- /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuContent, { children: [
49334
- !isPlain && /* @__PURE__ */ jsxRuntimeExports.jsxs(
49335
- ContextMenuItem,
49336
- {
49337
- "data-testid": "project-list__context-menu-item--collapse",
49338
- onClick: () => onToggleCollapse(project.name),
49339
- children: [
49340
- /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: collapsed ? "" : "rotate-90" }),
49341
- collapsed ? "Expand" : "Collapse"
49342
- ]
49343
- }
49344
- ),
49345
- labels.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuSub, { children: [
49346
- /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuSubTrigger, { children: [
49347
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tag$1, { className: "size-4 mr-2" }),
49348
- "Set label"
49349
- ] }),
49350
- /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuPortal, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuSubContent, { children: [
49351
- /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuItem, { onClick: () => updateProjectLabel(project.name, null), children: [
49352
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1", children: "None" }),
49353
- !project.label && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 ml-2" })
49354
- ] }),
49355
- labels.map((lbl) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
49356
- ContextMenuItem,
49357
- {
49358
- onClick: () => updateProjectLabel(project.name, lbl.id),
49359
- children: [
49360
- /* @__PURE__ */ jsxRuntimeExports.jsx(
49361
- "span",
49362
- {
49363
- className: "size-2.5 rounded-full shrink-0 mr-2",
49364
- style: { backgroundColor: lbl.color }
49365
- }
49366
- ),
49367
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1", children: lbl.name }),
49368
- project.label === lbl.id && /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 ml-2" })
49369
- ]
49370
- },
49371
- lbl.id
49372
- ))
49373
- ] }) })
49374
- ] }),
49375
- isPlain && canPromoteToGit && /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuItem, { onClick: () => onPromoteToGit(project.name), children: [
49376
- /* @__PURE__ */ jsxRuntimeExports.jsx(GitBranch, {}),
49377
- "Promote to git…"
49378
- ] }),
49379
- capabilities2.copyPath && /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuItem, { onClick: () => navigator.clipboard.writeText(project.path), children: [
49380
- /* @__PURE__ */ jsxRuntimeExports.jsx(Clipboard, {}),
49381
- "Copy path"
49382
- ] }),
49383
- capabilities2.revealInFinder && /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuItem, { onClick: () => capabilities2.revealInFinder(project.path), children: [
49384
- /* @__PURE__ */ jsxRuntimeExports.jsx(FolderOpen, {}),
49385
- "Open in Finder"
49386
- ] }),
49387
- /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuItem, { onClick: () => removeProject(project.name), children: [
49388
- /* @__PURE__ */ jsxRuntimeExports.jsx(ListMinus, {}),
49389
- "Remove from list"
49390
- ] })
49391
- ] })
49530
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuContent, { children: renderMenuItems({
49531
+ Item: ContextMenuItem,
49532
+ Sub: ContextMenuSub,
49533
+ SubTrigger: ContextMenuSubTrigger,
49534
+ SubContent: ContextMenuSubContent,
49535
+ Portal: ContextMenuPortal
49536
+ }) })
49392
49537
  ] }),
49393
- !isPlain && !collapsed && // `ml-3` indents the branch list so the workspaces read as children of
49394
- // the project header above, not as sibling rows. The indentation alone
49395
- // (no divider rail) conveys the hierarchy, keeping the list uncluttered.
49396
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-0.5 overflow-hidden ml-3", children: project.worktrees.length === 0 ? hasPinnedSiblings ? null : /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground px-4 py-2", children: "No workspaces yet" }) : project.worktrees.map((wt2) => {
49538
+ !isPlain && /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleSection, { collapsed, className: "flex flex-col gap-0.5 ml-3", children: project.worktrees.length === 0 ? hasPinnedSiblings ? null : /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground px-4 py-2", children: "No workspaces yet" }) : project.worktrees.map((wt2) => {
49397
49539
  const wsId = toWorkspaceId(project.name, wt2.name);
49398
49540
  const currentIndex = workspaceIndex++;
49399
49541
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -49406,7 +49548,7 @@ function SortableProject({
49406
49548
  status: statuses.get(wsId),
49407
49549
  branchStatus: branchStatuses.get(wsId),
49408
49550
  setupStatus: setupStatuses.get(wsId),
49409
- isFocused: currentIndex === focusedIndex,
49551
+ isFocused: !collapsed && currentIndex === focusedIndex,
49410
49552
  onShowDeleteDialog,
49411
49553
  onTogglePinned
49412
49554
  },
@@ -49449,6 +49591,7 @@ function DroppableUnlabeledHeader({ collapsed, onToggle }) {
49449
49591
  "aria-expanded": !collapsed,
49450
49592
  className: `flex h-9 w-full items-center gap-2 pl-3 pr-4 mb-0.5 text-left transition-colors hover:bg-primary/10 ${isOver ? "bg-primary/20" : ""}`,
49451
49593
  children: [
49594
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Circle, { className: "size-2.5 shrink-0 text-muted-foreground" }),
49452
49595
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-semibold text-foreground/80", children: "Unlabeled" }),
49453
49596
  /* @__PURE__ */ jsxRuntimeExports.jsx(
49454
49597
  ChevronRight,
@@ -49737,23 +49880,30 @@ function ProjectList({ labelFilter }) {
49737
49880
  ]
49738
49881
  }
49739
49882
  ),
49740
- !pinnedSectionCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-0.5 px-2", children: pinnedEntries.map(({ project, worktree, workspaceId }, i2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
49741
- WorkspaceCard,
49883
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
49884
+ CollapsibleSection,
49742
49885
  {
49743
- worktree,
49744
- projectName: project.name,
49745
- defaultBranch: project.defaultBranch,
49746
- projectKind: project.kind,
49747
- status: statuses.get(workspaceId),
49748
- branchStatus: branchStatuses.get(workspaceId),
49749
- setupStatus: setupStatuses.get(workspaceId),
49750
- isFocused: i2 === focusedIndex,
49751
- onShowDeleteDialog: setDeleteDialog,
49752
- showProjectName: true,
49753
- onTogglePinned: togglePinned
49754
- },
49755
- workspaceId
49756
- )) })
49886
+ collapsed: pinnedSectionCollapsed,
49887
+ className: "flex flex-col gap-0.5 px-2",
49888
+ children: pinnedEntries.map(({ project, worktree, workspaceId }, i2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
49889
+ WorkspaceCard,
49890
+ {
49891
+ worktree,
49892
+ projectName: project.name,
49893
+ defaultBranch: project.defaultBranch,
49894
+ projectKind: project.kind,
49895
+ status: statuses.get(workspaceId),
49896
+ branchStatus: branchStatuses.get(workspaceId),
49897
+ setupStatus: setupStatuses.get(workspaceId),
49898
+ isFocused: !pinnedSectionCollapsed && i2 === focusedIndex,
49899
+ onShowDeleteDialog: setDeleteDialog,
49900
+ showProjectName: true,
49901
+ onTogglePinned: togglePinned
49902
+ },
49903
+ workspaceId
49904
+ ))
49905
+ }
49906
+ )
49757
49907
  ] }, "__pinned"),
49758
49908
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
49759
49909
  DndContext,
@@ -49783,7 +49933,7 @@ function ProjectList({ labelFilter }) {
49783
49933
  onToggle: () => labelCollapse.toggle(groupKey)
49784
49934
  }
49785
49935
  )),
49786
- !groupCollapsed && group.projects.map((project) => (
49936
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleSection, { collapsed: groupCollapsed, children: group.projects.map((project) => (
49787
49937
  // Consecutive projects in a label group are separated by
49788
49938
  // spacing alone (no divider line); the first row sits
49789
49939
  // flush under the label header.
@@ -49808,7 +49958,7 @@ function ProjectList({ labelFilter }) {
49808
49958
  onTogglePinned: togglePinned
49809
49959
  }
49810
49960
  ) }, project.name)
49811
- ))
49961
+ )) })
49812
49962
  ] }, groupKey);
49813
49963
  }) }),
49814
49964
  /* @__PURE__ */ jsxRuntimeExports.jsx(DragOverlay, { dropAnimation: null, children: activeDragId ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 px-1 py-1 bg-background rounded shadow-lg border", children: [
@@ -52956,7 +53106,7 @@ function useProjectKindForWorkspace(workspaceId) {
52956
53106
  const map2 = useProjectKindMap();
52957
53107
  return map2.get(workspaceId);
52958
53108
  }
52959
- const DEFAULT_SEARCH_OPTIONS = {
53109
+ const DEFAULT_SEARCH_OPTIONS$1 = {
52960
53110
  caseSensitive: false,
52961
53111
  wholeWord: false,
52962
53112
  regex: false
@@ -52968,9 +53118,9 @@ function useSearch({
52968
53118
  }) {
52969
53119
  const [searchOpen, setSearchOpen] = reactExports.useState(false);
52970
53120
  const [searchQuery, setSearchQueryText] = reactExports.useState("");
52971
- const [searchOptions, setSearchOptions] = reactExports.useState(DEFAULT_SEARCH_OPTIONS);
53121
+ const [searchOptions, setSearchOptions] = reactExports.useState(DEFAULT_SEARCH_OPTIONS$1);
52972
53122
  const searchQueryRef = reactExports.useRef("");
52973
- const searchOptionsRef = reactExports.useRef(DEFAULT_SEARCH_OPTIONS);
53123
+ const searchOptionsRef = reactExports.useRef(DEFAULT_SEARCH_OPTIONS$1);
52974
53124
  const [matchInfo, setMatchInfo] = reactExports.useState({
52975
53125
  total: 0,
52976
53126
  current: 0
@@ -67873,7 +68023,7 @@ function NavControls({
67873
68023
  "aria-label": "Toggle sidebar",
67874
68024
  "aria-pressed": sidebarVisible ?? false,
67875
68025
  "data-testid": "desktop-title-bar__sidebar-toggle",
67876
- className: `flex items-center justify-center rounded p-1 transition-colors hover:bg-accent/50 hover:text-foreground ${sidebarVisible ? "text-foreground" : "text-muted-foreground"}`,
68026
+ className: "flex items-center justify-center rounded p-1 text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground",
67877
68027
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(PanelLeft, { className: "size-5" })
67878
68028
  }
67879
68029
  ) }),
@@ -68715,7 +68865,7 @@ function remove$1(array2, value) {
68715
68865
  }
68716
68866
  return false;
68717
68867
  }
68718
- const clamp = (value, min2, max2) => {
68868
+ const clamp$1 = (value, min2, max2) => {
68719
68869
  if (min2 > max2) {
68720
68870
  return min2;
68721
68871
  }
@@ -68796,7 +68946,7 @@ class ViewItem {
68796
68946
  return;
68797
68947
  }
68798
68948
  if (visible) {
68799
- this.size = clamp((_a3 = this._cachedVisibleSize) !== null && _a3 !== void 0 ? _a3 : 0, this.viewMinimumSize, this.viewMaximumSize);
68949
+ this.size = clamp$1((_a3 = this._cachedVisibleSize) !== null && _a3 !== void 0 ? _a3 : 0, this.viewMinimumSize, this.viewMaximumSize);
68800
68950
  this._cachedVisibleSize = void 0;
68801
68951
  } else {
68802
68952
  this._cachedVisibleSize = typeof size2 === "number" ? size2 : this.size;
@@ -68978,12 +69128,12 @@ class Splitview {
68978
69128
  if (snapped) {
68979
69129
  return this.resize(index2, delta, sizes, lowPriorityIndexes, highPriorityIndexes, overloadMinDelta, overloadMaxDelta);
68980
69130
  }
68981
- const tentativeDelta = clamp(delta, minDelta, maxDelta);
69131
+ const tentativeDelta = clamp$1(delta, minDelta, maxDelta);
68982
69132
  let actualDelta = 0;
68983
69133
  let deltaUp = tentativeDelta;
68984
69134
  for (let i2 = 0; i2 < upItems.length; i2++) {
68985
69135
  const item = upItems[i2];
68986
- const size2 = clamp(upSizes[i2] + deltaUp, item.minimumSize, item.maximumSize);
69136
+ const size2 = clamp$1(upSizes[i2] + deltaUp, item.minimumSize, item.maximumSize);
68987
69137
  const viewDelta = size2 - upSizes[i2];
68988
69138
  actualDelta += viewDelta;
68989
69139
  deltaUp -= viewDelta;
@@ -68992,7 +69142,7 @@ class Splitview {
68992
69142
  let deltaDown = actualDelta;
68993
69143
  for (let i2 = 0; i2 < downItems.length; i2++) {
68994
69144
  const item = downItems[i2];
68995
- const size2 = clamp(downSizes[i2] - deltaDown, item.minimumSize, item.maximumSize);
69145
+ const size2 = clamp$1(downSizes[i2] - deltaDown, item.minimumSize, item.maximumSize);
68996
69146
  const viewDelta = size2 - downSizes[i2];
68997
69147
  deltaDown += viewDelta;
68998
69148
  item.size = size2;
@@ -69075,7 +69225,7 @@ class Splitview {
69075
69225
  const highPriorityIndexes = indexes.filter((i2) => this.viewItems[i2].priority === LayoutPriority.High);
69076
69226
  const item = this.viewItems[index2];
69077
69227
  size2 = Math.round(size2);
69078
- size2 = clamp(size2, item.minimumSize, Math.min(item.maximumSize, this._size));
69228
+ size2 = clamp$1(size2, item.minimumSize, Math.min(item.maximumSize, this._size));
69079
69229
  item.size = size2;
69080
69230
  this.relayout(lowPriorityIndexes, highPriorityIndexes);
69081
69231
  }
@@ -69088,7 +69238,7 @@ class Splitview {
69088
69238
  return;
69089
69239
  }
69090
69240
  size2 = typeof size2 === "number" ? size2 : item.size;
69091
- size2 = clamp(size2, item.minimumSize, item.maximumSize);
69241
+ size2 = clamp$1(size2, item.minimumSize, item.maximumSize);
69092
69242
  item.size = size2;
69093
69243
  const indexes = range$5(this.viewItems.length).filter((i2) => i2 !== index2);
69094
69244
  const lowPriorityIndexes = [
@@ -69220,7 +69370,7 @@ class Splitview {
69220
69370
  }
69221
69371
  const size2 = Math.floor(flexibleSize / flexibleViewItems.length);
69222
69372
  for (const item of flexibleViewItems) {
69223
- item.size = clamp(size2, item.minimumSize, item.maximumSize);
69373
+ item.size = clamp$1(size2, item.minimumSize, item.maximumSize);
69224
69374
  }
69225
69375
  const indexes = range$5(this.viewItems.length);
69226
69376
  const lowPriorityIndexes = indexes.filter((i2) => this.viewItems[i2].priority === LayoutPriority.Low);
@@ -69281,7 +69431,7 @@ class Splitview {
69281
69431
  const item = this.viewItems[i2];
69282
69432
  const proportion = this.proportions[i2];
69283
69433
  if (typeof proportion === "number" && total > 0) {
69284
- item.size = clamp(Math.round(proportion * size2 / total), item.minimumSize, item.maximumSize);
69434
+ item.size = clamp$1(Math.round(proportion * size2 / total), item.minimumSize, item.maximumSize);
69285
69435
  }
69286
69436
  }
69287
69437
  }
@@ -69312,7 +69462,7 @@ class Splitview {
69312
69462
  }
69313
69463
  for (let i2 = 0; emptyDelta !== 0 && i2 < indexes.length; i2++) {
69314
69464
  const item = this.viewItems[indexes[i2]];
69315
- const size2 = clamp(item.size + emptyDelta, item.minimumSize, item.maximumSize);
69465
+ const size2 = clamp$1(item.size + emptyDelta, item.minimumSize, item.maximumSize);
69316
69466
  const viewDelta = size2 - item.size;
69317
69467
  emptyDelta -= viewDelta;
69318
69468
  item.size = size2;
@@ -71991,13 +72141,13 @@ class Droptarget extends CompositeDisposable {
71991
72141
  let size2 = 1;
71992
72142
  const sizeOptions = (_h2 = (_g2 = this.options.overlayModel) === null || _g2 === void 0 ? void 0 : _g2.size) !== null && _h2 !== void 0 ? _h2 : DEFAULT_SIZE$1;
71993
72143
  if (sizeOptions.type === "percentage") {
71994
- size2 = clamp(sizeOptions.value, 0, 100) / 100;
72144
+ size2 = clamp$1(sizeOptions.value, 0, 100) / 100;
71995
72145
  } else {
71996
72146
  if (rightClass || leftClass) {
71997
- size2 = clamp(0, sizeOptions.value, width) / width;
72147
+ size2 = clamp$1(0, sizeOptions.value, width) / width;
71998
72148
  }
71999
72149
  if (topClass || bottomClass) {
72000
- size2 = clamp(0, sizeOptions.value, height) / height;
72150
+ size2 = clamp$1(0, sizeOptions.value, height) / height;
72001
72151
  }
72002
72152
  }
72003
72153
  if (target) {
@@ -73163,7 +73313,7 @@ class Scrollbar extends CompositeDisposable {
73163
73313
  this._scrollbar.style.height = `${px}px`;
73164
73314
  this._scrollbar.style.width = "";
73165
73315
  }
73166
- this._scrollOffset = clamp(this._scrollOffset, 0, scrollSize - clientSize);
73316
+ this._scrollOffset = clamp$1(this._scrollOffset, 0, scrollSize - clientSize);
73167
73317
  if (this._orientation === "horizontal") {
73168
73318
  this.scrollableElement.scrollLeft = this._scrollOffset;
73169
73319
  } else {
@@ -77673,22 +77823,22 @@ class Overlay extends CompositeDisposable {
77673
77823
  const xOffset = Math.max(0, this.getMinimumWidth(overlayRect.width));
77674
77824
  const yOffset = Math.max(0, this.getMinimumHeight(overlayRect.height));
77675
77825
  if (this.verticalAlignment === "top") {
77676
- const top2 = clamp(overlayRect.top - containerRect.top, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
77826
+ const top2 = clamp$1(overlayRect.top - containerRect.top, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
77677
77827
  this._element.style.top = `${top2}px`;
77678
77828
  this._element.style.bottom = "auto";
77679
77829
  }
77680
77830
  if (this.verticalAlignment === "bottom") {
77681
- const bottom = clamp(containerRect.bottom - overlayRect.bottom, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
77831
+ const bottom = clamp$1(containerRect.bottom - overlayRect.bottom, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
77682
77832
  this._element.style.bottom = `${bottom}px`;
77683
77833
  this._element.style.top = "auto";
77684
77834
  }
77685
77835
  if (this.horiziontalAlignment === "left") {
77686
- const left = clamp(overlayRect.left - containerRect.left, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
77836
+ const left = clamp$1(overlayRect.left - containerRect.left, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
77687
77837
  this._element.style.left = `${left}px`;
77688
77838
  this._element.style.right = "auto";
77689
77839
  }
77690
77840
  if (this.horiziontalAlignment === "right") {
77691
- const right = clamp(containerRect.right - overlayRect.right, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
77841
+ const right = clamp$1(containerRect.right - overlayRect.right, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
77692
77842
  this._element.style.right = `${right}px`;
77693
77843
  this._element.style.left = "auto";
77694
77844
  }
@@ -77739,10 +77889,10 @@ class Overlay extends CompositeDisposable {
77739
77889
  }
77740
77890
  const xOffset = Math.max(0, this.getMinimumWidth(overlayRect.width));
77741
77891
  const yOffset = Math.max(0, this.getMinimumHeight(overlayRect.height));
77742
- const top2 = clamp(y4 - offset2.y, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
77743
- const bottom = clamp(offset2.y - y4 + containerRect.height - overlayRect.height, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
77744
- const left = clamp(x2 - offset2.x, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
77745
- const right = clamp(offset2.x - x2 + containerRect.width - overlayRect.width, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
77892
+ const top2 = clamp$1(y4 - offset2.y, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
77893
+ const bottom = clamp$1(offset2.y - y4 + containerRect.height - overlayRect.height, -yOffset, Math.max(0, containerRect.height - overlayRect.height + yOffset));
77894
+ const left = clamp$1(x2 - offset2.x, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
77895
+ const right = clamp$1(offset2.x - x2 + containerRect.width - overlayRect.width, -xOffset, Math.max(0, containerRect.width - overlayRect.width + xOffset));
77746
77896
  const bounds = {};
77747
77897
  if (top2 <= bottom) {
77748
77898
  bounds.top = top2;
@@ -77817,7 +77967,7 @@ class Overlay extends CompositeDisposable {
77817
77967
  let width = void 0;
77818
77968
  const moveTop = () => {
77819
77969
  const maxTop = startPosition.originalY + startPosition.originalHeight > containerRect.height ? Math.max(0, containerRect.height - Overlay.MINIMUM_HEIGHT) : Math.max(0, startPosition.originalY + startPosition.originalHeight - Overlay.MINIMUM_HEIGHT);
77820
- top2 = clamp(y4, 0, maxTop);
77970
+ top2 = clamp$1(y4, 0, maxTop);
77821
77971
  height = startPosition.originalY + startPosition.originalHeight - top2;
77822
77972
  bottom = containerRect.height - top2 - height;
77823
77973
  };
@@ -77825,12 +77975,12 @@ class Overlay extends CompositeDisposable {
77825
77975
  top2 = startPosition.originalY - startPosition.originalHeight;
77826
77976
  const minHeight = top2 < 0 && typeof this.options.minimumInViewportHeight === "number" ? -top2 + this.options.minimumInViewportHeight : Overlay.MINIMUM_HEIGHT;
77827
77977
  const maxHeight = containerRect.height - Math.max(0, top2);
77828
- height = clamp(y4 - top2, minHeight, maxHeight);
77978
+ height = clamp$1(y4 - top2, minHeight, maxHeight);
77829
77979
  bottom = containerRect.height - top2 - height;
77830
77980
  };
77831
77981
  const moveLeft = () => {
77832
77982
  const maxLeft = startPosition.originalX + startPosition.originalWidth > containerRect.width ? Math.max(0, containerRect.width - Overlay.MINIMUM_WIDTH) : Math.max(0, startPosition.originalX + startPosition.originalWidth - Overlay.MINIMUM_WIDTH);
77833
- left = clamp(x2, 0, maxLeft);
77983
+ left = clamp$1(x2, 0, maxLeft);
77834
77984
  width = startPosition.originalX + startPosition.originalWidth - left;
77835
77985
  right = containerRect.width - left - width;
77836
77986
  };
@@ -77838,7 +77988,7 @@ class Overlay extends CompositeDisposable {
77838
77988
  left = startPosition.originalX - startPosition.originalWidth;
77839
77989
  const minWidth = left < 0 && typeof this.options.minimumInViewportWidth === "number" ? -left + this.options.minimumInViewportWidth : Overlay.MINIMUM_WIDTH;
77840
77990
  const maxWidth = containerRect.width - Math.max(0, left);
77841
- width = clamp(x2 - left, minWidth, maxWidth);
77991
+ width = clamp$1(x2 - left, minWidth, maxWidth);
77842
77992
  right = containerRect.width - left - width;
77843
77993
  };
77844
77994
  switch (direction) {
@@ -109379,7 +109529,7 @@ var tn = f$5("block", "before:content-[counter(line)]", "before:inline-block", "
109379
109529
  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 });
109380
109530
  var Se$1 = reactExports.createContext({ code: "" }), de$2 = () => reactExports.useContext(Se$1);
109381
109531
  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 }) });
109382
- var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-CktYi1nO.js").then((e3) => ({ default: e3.HighlightedCodeBlockBody }))), rt = ({ code: e3, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
109532
+ var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-DYwYCtBU.js").then((e3) => ({ default: e3.HighlightedCodeBlockBody }))), rt = ({ code: e3, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
109383
109533
  let i2 = reactExports.useMemo(() => e3.replace(cn, ""), [e3]), c2 = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i2.split(`
109384
109534
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i2]);
109385
109535
  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 }) })] }) });
@@ -109701,7 +109851,7 @@ var Dt = ({ children: e3, className: t2, onDownload: o3, onError: n2 }) => {
109701
109851
  }, []), 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] });
109702
109852
  };
109703
109853
  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 }) })] });
109704
- var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-CIBz4-1r.js").then((e3) => ({ default: e3.Mermaid }))), Kn = /language-([^\s]+)/;
109854
+ var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-Drwee8F2.js").then((e3) => ({ default: e3.Mermaid }))), Kn = /language-([^\s]+)/;
109705
109855
  function ke$1(e3, t2) {
109706
109856
  if (!(e3 != null && e3.position || t2 != null && t2.position)) return true;
109707
109857
  if (!(e3 != null && e3.position && (t2 != null && t2.position))) return false;
@@ -161872,12 +162022,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
161872
162022
  registerLayoutLoaders([
161873
162023
  {
161874
162024
  name: "dagre",
161875
- loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-CNIyd6rH.js"), "loader")
162025
+ loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-B8Qw2znf.js"), "loader")
161876
162026
  },
161877
162027
  ...[
161878
162028
  {
161879
162029
  name: "cose-bilkent",
161880
- loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-DaKuQRAN.js"), "loader")
162030
+ loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-700evsrQ.js"), "loader")
161881
162031
  }
161882
162032
  ]
161883
162033
  ]);
@@ -162316,7 +162466,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
162316
162466
  return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
162317
162467
  }, "detector");
162318
162468
  var loader = /* @__PURE__ */ __name(async () => {
162319
- const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-D585k1An.js");
162469
+ const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-Buvaq10G.js");
162320
162470
  return { id, diagram: diagram2 };
162321
162471
  }, "loader");
162322
162472
  var plugin = {
@@ -162333,7 +162483,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
162333
162483
  return /^\s*graph/.test(txt);
162334
162484
  }, "detector");
162335
162485
  var loader2 = /* @__PURE__ */ __name(async () => {
162336
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CUlvxSwr.js");
162486
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DCV18CNa.js");
162337
162487
  return { id: id2, diagram: diagram2 };
162338
162488
  }, "loader");
162339
162489
  var plugin2 = {
@@ -162356,7 +162506,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
162356
162506
  return /^\s*flowchart/.test(txt);
162357
162507
  }, "detector");
162358
162508
  var loader3 = /* @__PURE__ */ __name(async () => {
162359
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CUlvxSwr.js");
162509
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DCV18CNa.js");
162360
162510
  return { id: id3, diagram: diagram2 };
162361
162511
  }, "loader");
162362
162512
  var plugin3 = {
@@ -162370,7 +162520,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
162370
162520
  return /^\s*erDiagram/.test(txt);
162371
162521
  }, "detector");
162372
162522
  var loader4 = /* @__PURE__ */ __name(async () => {
162373
- const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-B3yUU2uu.js");
162523
+ const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-DGEMY_JO.js");
162374
162524
  return { id: id4, diagram: diagram2 };
162375
162525
  }, "loader");
162376
162526
  var plugin4 = {
@@ -162384,7 +162534,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
162384
162534
  return /^\s*gitGraph/.test(txt);
162385
162535
  }, "detector");
162386
162536
  var loader5 = /* @__PURE__ */ __name(async () => {
162387
- const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-CepF7ieg.js");
162537
+ const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-_q2n-s2e.js");
162388
162538
  return { id: id5, diagram: diagram2 };
162389
162539
  }, "loader");
162390
162540
  var plugin5 = {
@@ -162398,7 +162548,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
162398
162548
  return /^\s*gantt/.test(txt);
162399
162549
  }, "detector");
162400
162550
  var loader6 = /* @__PURE__ */ __name(async () => {
162401
- const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-BWxUm4vA.js");
162551
+ const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-Cf9uIRTp.js");
162402
162552
  return { id: id6, diagram: diagram2 };
162403
162553
  }, "loader");
162404
162554
  var plugin6 = {
@@ -162412,7 +162562,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
162412
162562
  return /^\s*info/.test(txt);
162413
162563
  }, "detector");
162414
162564
  var loader7 = /* @__PURE__ */ __name(async () => {
162415
- const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-BMd22txJ.js");
162565
+ const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-DlVfYs3y.js");
162416
162566
  return { id: id7, diagram: diagram2 };
162417
162567
  }, "loader");
162418
162568
  var info = {
@@ -162425,7 +162575,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
162425
162575
  return /^\s*pie/.test(txt);
162426
162576
  }, "detector");
162427
162577
  var loader8 = /* @__PURE__ */ __name(async () => {
162428
- const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-Cv-DbjH6.js");
162578
+ const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-jGuNgZxo.js");
162429
162579
  return { id: id8, diagram: diagram2 };
162430
162580
  }, "loader");
162431
162581
  var pie = {
@@ -162438,7 +162588,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
162438
162588
  return /^\s*quadrantChart/.test(txt);
162439
162589
  }, "detector");
162440
162590
  var loader9 = /* @__PURE__ */ __name(async () => {
162441
- const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-DFyjNST4.js");
162591
+ const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-DAAEbR4l.js");
162442
162592
  return { id: id9, diagram: diagram2 };
162443
162593
  }, "loader");
162444
162594
  var plugin7 = {
@@ -162452,7 +162602,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
162452
162602
  return /^\s*xychart(-beta)?/.test(txt);
162453
162603
  }, "detector");
162454
162604
  var loader10 = /* @__PURE__ */ __name(async () => {
162455
- const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-r_3LO6yK.js");
162605
+ const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-Cdaq77X5.js");
162456
162606
  return { id: id10, diagram: diagram2 };
162457
162607
  }, "loader");
162458
162608
  var plugin8 = {
@@ -162466,7 +162616,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
162466
162616
  return /^\s*requirement(Diagram)?/.test(txt);
162467
162617
  }, "detector");
162468
162618
  var loader11 = /* @__PURE__ */ __name(async () => {
162469
- const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-DFM89i-H.js");
162619
+ const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-DmT06vgs.js");
162470
162620
  return { id: id11, diagram: diagram2 };
162471
162621
  }, "loader");
162472
162622
  var plugin9 = {
@@ -162480,7 +162630,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
162480
162630
  return /^\s*sequenceDiagram/.test(txt);
162481
162631
  }, "detector");
162482
162632
  var loader12 = /* @__PURE__ */ __name(async () => {
162483
- const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-BiqqAguj.js");
162633
+ const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-V8TCpuJa.js");
162484
162634
  return { id: id12, diagram: diagram2 };
162485
162635
  }, "loader");
162486
162636
  var plugin10 = {
@@ -162497,7 +162647,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
162497
162647
  return /^\s*classDiagram/.test(txt);
162498
162648
  }, "detector");
162499
162649
  var loader13 = /* @__PURE__ */ __name(async () => {
162500
- const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-Ds7CCTUR.js");
162650
+ const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-BNcG92nY.js");
162501
162651
  return { id: id13, diagram: diagram2 };
162502
162652
  }, "loader");
162503
162653
  var plugin11 = {
@@ -162514,7 +162664,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
162514
162664
  return /^\s*classDiagram-v2/.test(txt);
162515
162665
  }, "detector");
162516
162666
  var loader14 = /* @__PURE__ */ __name(async () => {
162517
- const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-Ds7CCTUR.js");
162667
+ const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-BNcG92nY.js");
162518
162668
  return { id: id14, diagram: diagram2 };
162519
162669
  }, "loader");
162520
162670
  var plugin12 = {
@@ -162531,7 +162681,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
162531
162681
  return /^\s*stateDiagram/.test(txt);
162532
162682
  }, "detector");
162533
162683
  var loader15 = /* @__PURE__ */ __name(async () => {
162534
- const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-CkiJXki8.js");
162684
+ const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-DDhvvfjL.js");
162535
162685
  return { id: id15, diagram: diagram2 };
162536
162686
  }, "loader");
162537
162687
  var plugin13 = {
@@ -162551,7 +162701,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
162551
162701
  return false;
162552
162702
  }, "detector");
162553
162703
  var loader16 = /* @__PURE__ */ __name(async () => {
162554
- const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-Bt1BL33e.js");
162704
+ const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-CrVhacjl.js");
162555
162705
  return { id: id16, diagram: diagram2 };
162556
162706
  }, "loader");
162557
162707
  var plugin14 = {
@@ -162565,7 +162715,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
162565
162715
  return /^\s*journey/.test(txt);
162566
162716
  }, "detector");
162567
162717
  var loader17 = /* @__PURE__ */ __name(async () => {
162568
- const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-DyIx8DQc.js");
162718
+ const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-DEvLjN67.js");
162569
162719
  return { id: id17, diagram: diagram2 };
162570
162720
  }, "loader");
162571
162721
  var plugin15 = {
@@ -162632,7 +162782,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
162632
162782
  return false;
162633
162783
  }, "detector");
162634
162784
  var loader18 = /* @__PURE__ */ __name(async () => {
162635
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CUlvxSwr.js");
162785
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-DCV18CNa.js");
162636
162786
  return { id: id18, diagram: diagram2 };
162637
162787
  }, "loader");
162638
162788
  var plugin16 = {
@@ -162646,7 +162796,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
162646
162796
  return /^\s*timeline/.test(txt);
162647
162797
  }, "detector");
162648
162798
  var loader19 = /* @__PURE__ */ __name(async () => {
162649
- const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-DCRlJiLq.js");
162799
+ const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-PRx7QaX4.js");
162650
162800
  return { id: id19, diagram: diagram2 };
162651
162801
  }, "loader");
162652
162802
  var plugin17 = {
@@ -162660,7 +162810,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
162660
162810
  return /^\s*mindmap/.test(txt);
162661
162811
  }, "detector");
162662
162812
  var loader20 = /* @__PURE__ */ __name(async () => {
162663
- const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-C2EIvkPG.js");
162813
+ const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-CLGmFN8m.js");
162664
162814
  return { id: id20, diagram: diagram2 };
162665
162815
  }, "loader");
162666
162816
  var plugin18 = {
@@ -162674,7 +162824,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
162674
162824
  return /^\s*kanban/.test(txt);
162675
162825
  }, "detector");
162676
162826
  var loader21 = /* @__PURE__ */ __name(async () => {
162677
- const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-D6P6mjw2.js");
162827
+ const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-C8wt29HD.js");
162678
162828
  return { id: id21, diagram: diagram2 };
162679
162829
  }, "loader");
162680
162830
  var plugin19 = {
@@ -162688,7 +162838,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
162688
162838
  return /^\s*sankey(-beta)?/.test(txt);
162689
162839
  }, "detector");
162690
162840
  var loader22 = /* @__PURE__ */ __name(async () => {
162691
- const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-Nmb2f9ga.js");
162841
+ const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-DubOMd7c.js");
162692
162842
  return { id: id22, diagram: diagram2 };
162693
162843
  }, "loader");
162694
162844
  var plugin20 = {
@@ -162702,7 +162852,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
162702
162852
  return /^\s*packet(-beta)?/.test(txt);
162703
162853
  }, "detector");
162704
162854
  var loader23 = /* @__PURE__ */ __name(async () => {
162705
- const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-CSa3a_oJ.js");
162855
+ const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-DsDqxdmS.js");
162706
162856
  return { id: id23, diagram: diagram2 };
162707
162857
  }, "loader");
162708
162858
  var packet = {
@@ -162715,7 +162865,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
162715
162865
  return /^\s*radar-beta/.test(txt);
162716
162866
  }, "detector");
162717
162867
  var loader24 = /* @__PURE__ */ __name(async () => {
162718
- const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-Bpupf8hI.js");
162868
+ const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-CQAcI4L4.js");
162719
162869
  return { id: id24, diagram: diagram2 };
162720
162870
  }, "loader");
162721
162871
  var radar = {
@@ -162728,7 +162878,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
162728
162878
  return /^\s*block(-beta)?/.test(txt);
162729
162879
  }, "detector");
162730
162880
  var loader25 = /* @__PURE__ */ __name(async () => {
162731
- const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-BKZ2vg7U.js");
162881
+ const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-CHY_BpPT.js");
162732
162882
  return { id: id25, diagram: diagram2 };
162733
162883
  }, "loader");
162734
162884
  var plugin21 = {
@@ -162742,7 +162892,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
162742
162892
  return /^\s*architecture/.test(txt);
162743
162893
  }, "detector");
162744
162894
  var loader26 = /* @__PURE__ */ __name(async () => {
162745
- const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-T9CAFBo1.js");
162895
+ const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-DgTZkqMC.js");
162746
162896
  return { id: id26, diagram: diagram2 };
162747
162897
  }, "loader");
162748
162898
  var architecture = {
@@ -162756,7 +162906,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
162756
162906
  return /^\s*treemap/.test(txt);
162757
162907
  }, "detector");
162758
162908
  var loader27 = /* @__PURE__ */ __name(async () => {
162759
- const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-ByElNwdP.js");
162909
+ const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-C6EJCqfL.js");
162760
162910
  return { id: id27, diagram: diagram2 };
162761
162911
  }, "loader");
162762
162912
  var treemap = {
@@ -173914,7 +174064,7 @@ const CHAT_EVENT_TYPES = [
173914
174064
  "subscription-opened",
173915
174065
  "history-meta"
173916
174066
  ];
173917
- const INITIAL_STATE = {
174067
+ const INITIAL_STATE$1 = {
173918
174068
  messages: [],
173919
174069
  status: "idle",
173920
174070
  sessionId: void 0,
@@ -174357,7 +174507,7 @@ async function fileToWirePart(file2) {
174357
174507
  }
174358
174508
  function useChatSubscription(opts) {
174359
174509
  const { workspaceId, chatId, mode, model, codingAgentId, enabled = true } = opts;
174360
- const [state2, dispatch2] = reactExports.useReducer(chatEventReducer, INITIAL_STATE);
174510
+ const [state2, dispatch2] = reactExports.useReducer(chatEventReducer, INITIAL_STATE$1);
174361
174511
  const [isConnected, setIsConnected] = reactExports.useState(false);
174362
174512
  const [docVisible, setDocVisible] = reactExports.useState(
174363
174513
  () => typeof document === "undefined" ? true : document.visibilityState !== "hidden"
@@ -174551,7 +174701,7 @@ function useChatSubscription(opts) {
174551
174701
  );
174552
174702
  if (!res.ok) throw new Error(`history fetch failed: HTTP ${res.status}`);
174553
174703
  const data = await res.json();
174554
- const folded = applyEvents(INITIAL_STATE, data.events);
174704
+ const folded = applyEvents(INITIAL_STATE$1, data.events);
174555
174705
  const namespaced = folded.messages.map((m2) => ({ ...m2, id: `o${before}-${m2.id}` }));
174556
174706
  dispatch2({
174557
174707
  type: "prepend-messages",
@@ -178071,6 +178221,1042 @@ function createDefaultPanel(api, workspaceId) {
178071
178221
  position: centralPanelPosition(api)
178072
178222
  });
178073
178223
  }
178224
+ function findTerminalFileLinks(lineText) {
178225
+ const candidateRe = /[A-Za-z0-9._/@~+-]+(?::\d+(?:[-:]\d+)?)?/g;
178226
+ const matches2 = [];
178227
+ for (const match of lineText.matchAll(candidateRe)) {
178228
+ const text2 = match[0];
178229
+ if (isFilePath(text2)) {
178230
+ matches2.push({ text: text2, startIndex: match.index, endIndex: match.index + text2.length });
178231
+ }
178232
+ }
178233
+ return matches2;
178234
+ }
178235
+ function readLineColumns(terminal, line2) {
178236
+ const parts = [];
178237
+ const columnForIndex = [];
178238
+ let length2 = 0;
178239
+ let cell2;
178240
+ for (let x2 = 0; x2 < terminal.cols; x2++) {
178241
+ cell2 = line2.getCell(x2, cell2);
178242
+ if (!cell2) continue;
178243
+ if (cell2.getWidth() === 0) continue;
178244
+ const chars = cell2.getChars();
178245
+ const ch = chars.length > 0 ? chars : " ";
178246
+ columnForIndex[length2] = x2 + 1;
178247
+ parts.push(ch);
178248
+ length2 += ch.length;
178249
+ }
178250
+ return { text: parts.join(""), columnForIndex };
178251
+ }
178252
+ function createTerminalFileLinkProvider(terminal, onActivate) {
178253
+ return {
178254
+ provideLinks(bufferLineNumber, callback) {
178255
+ const line2 = terminal.buffer.active.getLine(bufferLineNumber - 1);
178256
+ if (!line2) {
178257
+ callback(void 0);
178258
+ return;
178259
+ }
178260
+ const { text: text2, columnForIndex } = readLineColumns(terminal, line2);
178261
+ const matches2 = findTerminalFileLinks(text2);
178262
+ if (matches2.length === 0) {
178263
+ callback(void 0);
178264
+ return;
178265
+ }
178266
+ const links = matches2.map((m2) => {
178267
+ const startColumn = columnForIndex[m2.startIndex] ?? 1;
178268
+ const endColumn = columnForIndex[m2.endIndex - 1] ?? terminal.cols;
178269
+ return {
178270
+ text: m2.text,
178271
+ range: {
178272
+ start: { x: startColumn, y: bufferLineNumber },
178273
+ end: { x: endColumn, y: bufferLineNumber }
178274
+ },
178275
+ decorations: { pointerCursor: true, underline: true },
178276
+ activate: (event) => {
178277
+ event.preventDefault();
178278
+ onActivate(m2.text);
178279
+ }
178280
+ };
178281
+ });
178282
+ callback(links);
178283
+ }
178284
+ };
178285
+ }
178286
+ const PARKING_WIDTH_PX = 800;
178287
+ const PARKING_HEIGHT_PX = 600;
178288
+ const PARKING_KEY = "__bandTerminalParking__";
178289
+ function getParkingContainer() {
178290
+ const store = globalThis;
178291
+ const existing = store[PARKING_KEY];
178292
+ if (existing?.isConnected) return existing;
178293
+ const container = document.createElement("div");
178294
+ container.dataset.testid = "terminal-parking";
178295
+ Object.assign(container.style, {
178296
+ position: "fixed",
178297
+ left: "-9999px",
178298
+ top: "-9999px",
178299
+ width: `${PARKING_WIDTH_PX}px`,
178300
+ height: `${PARKING_HEIGHT_PX}px`,
178301
+ overflow: "hidden",
178302
+ // Keep it out of the pointer/hit-testing path entirely.
178303
+ pointerEvents: "none"
178304
+ });
178305
+ container.inert = true;
178306
+ container.setAttribute("inert", "");
178307
+ container.setAttribute("aria-hidden", "true");
178308
+ document.body.appendChild(container);
178309
+ store[PARKING_KEY] = container;
178310
+ return container;
178311
+ }
178312
+ const WORD_RE = /[A-Za-z0-9_./:\-+@~]/;
178313
+ function pointToCell(clientX, clientY, terminal, screenEl) {
178314
+ const rect2 = screenEl.getBoundingClientRect();
178315
+ if (rect2.width <= 0 || rect2.height <= 0 || terminal.cols <= 0 || terminal.rows <= 0) {
178316
+ return { col: 0, row: terminal.buffer.active.viewportY };
178317
+ }
178318
+ const cellW = rect2.width / terminal.cols;
178319
+ const cellH = rect2.height / terminal.rows;
178320
+ const col = clamp(Math.floor((clientX - rect2.left) / cellW), 0, terminal.cols - 1);
178321
+ const viewportRow = clamp(Math.floor((clientY - rect2.top) / cellH), 0, terminal.rows - 1);
178322
+ return { col, row: terminal.buffer.active.viewportY + viewportRow };
178323
+ }
178324
+ function findWordBoundaries(line2, col) {
178325
+ if (col < 0 || col >= line2.length || !WORD_RE.test(line2[col])) {
178326
+ const safeCol = clamp(col, 0, Math.max(0, line2.length));
178327
+ return { start: safeCol, end: safeCol + 1 };
178328
+ }
178329
+ let start2 = col;
178330
+ while (start2 > 0 && WORD_RE.test(line2[start2 - 1])) start2--;
178331
+ let end = col + 1;
178332
+ while (end < line2.length && WORD_RE.test(line2[end])) end++;
178333
+ return { start: start2, end };
178334
+ }
178335
+ function getLineText(terminal, row2) {
178336
+ return terminal.buffer.active.getLine(row2)?.translateToString(false) ?? "";
178337
+ }
178338
+ function moveCell(cell2, dir, terminal) {
178339
+ const cols = terminal.cols;
178340
+ const lastRow = Math.max(0, terminal.buffer.active.length - 1);
178341
+ switch (dir) {
178342
+ case "left":
178343
+ if (cell2.col > 0) return { col: cell2.col - 1, row: cell2.row };
178344
+ if (cell2.row > 0) return { col: cols - 1, row: cell2.row - 1 };
178345
+ return cell2;
178346
+ case "right":
178347
+ if (cell2.col < cols - 1) return { col: cell2.col + 1, row: cell2.row };
178348
+ if (cell2.row < lastRow) return { col: 0, row: cell2.row + 1 };
178349
+ return cell2;
178350
+ case "up":
178351
+ if (cell2.row > 0) return { col: cell2.col, row: cell2.row - 1 };
178352
+ return cell2;
178353
+ case "down":
178354
+ if (cell2.row < lastRow) return { col: cell2.col, row: cell2.row + 1 };
178355
+ return cell2;
178356
+ }
178357
+ }
178358
+ function applySelection(terminal, anchor2, head2) {
178359
+ const cols = terminal.cols;
178360
+ if (cols <= 0) return;
178361
+ const anchorLinear = anchor2.row * cols + anchor2.col;
178362
+ const headLinear = head2.row * cols + head2.col;
178363
+ const startLinear = Math.min(anchorLinear, headLinear);
178364
+ const endLinear = Math.max(anchorLinear, headLinear);
178365
+ const length2 = endLinear - startLinear + 1;
178366
+ const startRow = Math.floor(startLinear / cols);
178367
+ const startCol = startLinear - startRow * cols;
178368
+ terminal.select(startCol, startRow, length2);
178369
+ }
178370
+ function wordSelectionAt(cell2, lineText) {
178371
+ const { start: start2, end } = findWordBoundaries(lineText, cell2.col);
178372
+ return {
178373
+ anchor: { col: start2, row: cell2.row },
178374
+ // `head` is the last cell of the selection (inclusive). `end` from
178375
+ // findWordBoundaries is exclusive, so subtract one.
178376
+ head: { col: Math.max(start2, end - 1), row: cell2.row }
178377
+ };
178378
+ }
178379
+ function clamp(n2, lo2, hi) {
178380
+ if (n2 < lo2) return lo2;
178381
+ if (n2 > hi) return hi;
178382
+ return n2;
178383
+ }
178384
+ const ZOOM_LEVEL_KEY = "band:zoom-level";
178385
+ const DEFAULT_ZOOM = 1;
178386
+ const MIN_ZOOM = 0.5;
178387
+ const MAX_ZOOM = 2;
178388
+ const ZOOM_STEP = 0.1;
178389
+ const ZOOM_CSS_VAR = "--app-zoom";
178390
+ const ZOOM_CHANGE_EVENT = "band:zoom-changed";
178391
+ function loadZoomLevel() {
178392
+ try {
178393
+ const stored = localStorage.getItem(ZOOM_LEVEL_KEY);
178394
+ if (stored) {
178395
+ const parsed = Number.parseFloat(stored);
178396
+ if (!Number.isNaN(parsed) && parsed >= MIN_ZOOM && parsed <= MAX_ZOOM) {
178397
+ return parsed;
178398
+ }
178399
+ }
178400
+ } catch {
178401
+ }
178402
+ return DEFAULT_ZOOM;
178403
+ }
178404
+ function saveZoomLevel(level) {
178405
+ const clamped = Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, level));
178406
+ const rounded = Math.round(clamped * 100) / 100;
178407
+ try {
178408
+ localStorage.setItem(ZOOM_LEVEL_KEY, String(rounded));
178409
+ } catch {
178410
+ }
178411
+ }
178412
+ function applyZoomLevelToDom(level) {
178413
+ const clamped = Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, level));
178414
+ const rounded = Math.round(clamped * 100) / 100;
178415
+ const root2 = document.documentElement;
178416
+ root2.style.zoom = String(rounded);
178417
+ root2.style.setProperty(ZOOM_CSS_VAR, String(rounded));
178418
+ window.dispatchEvent(new CustomEvent(ZOOM_CHANGE_EVENT, { detail: rounded }));
178419
+ return rounded;
178420
+ }
178421
+ function applyZoomLevel(level) {
178422
+ const clamped = Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, level));
178423
+ const rounded = Math.round(clamped * 100) / 100;
178424
+ saveZoomLevel(rounded);
178425
+ applyZoomLevelToDom(rounded);
178426
+ }
178427
+ function getCurrentZoomLevel() {
178428
+ if (typeof document !== "undefined") {
178429
+ const css = document.documentElement.style.getPropertyValue(ZOOM_CSS_VAR);
178430
+ if (css) {
178431
+ const parsed = Number.parseFloat(css);
178432
+ if (!Number.isNaN(parsed) && parsed >= MIN_ZOOM && parsed <= MAX_ZOOM) {
178433
+ return parsed;
178434
+ }
178435
+ }
178436
+ }
178437
+ return loadZoomLevel();
178438
+ }
178439
+ function subscribeToZoomChanges(handler) {
178440
+ if (typeof window === "undefined") return () => {
178441
+ };
178442
+ const listener2 = (e3) => {
178443
+ const detail = e3.detail;
178444
+ if (typeof detail === "number") handler(detail);
178445
+ };
178446
+ window.addEventListener(ZOOM_CHANGE_EVENT, listener2);
178447
+ return () => window.removeEventListener(ZOOM_CHANGE_EVENT, listener2);
178448
+ }
178449
+ function zoomIn() {
178450
+ applyZoomLevel(loadZoomLevel() + ZOOM_STEP);
178451
+ }
178452
+ function zoomOut() {
178453
+ applyZoomLevel(loadZoomLevel() - ZOOM_STEP);
178454
+ }
178455
+ function zoomReset() {
178456
+ applyZoomLevel(DEFAULT_ZOOM);
178457
+ }
178458
+ const BASE_FONT_SIZE = 13;
178459
+ const LONG_PRESS_MS = 500;
178460
+ const LONG_PRESS_SLOP_PX = 10;
178461
+ const SEARCH_DECORATIONS = {
178462
+ matchBackground: "#515c6a",
178463
+ activeMatchBackground: "#a9913680",
178464
+ matchOverviewRuler: "#a9913680",
178465
+ activeMatchColorOverviewRuler: "#a99136"
178466
+ };
178467
+ const DEFAULT_SEARCH_OPTIONS = {
178468
+ caseSensitive: false,
178469
+ wholeWord: false,
178470
+ regex: false
178471
+ };
178472
+ function toXtermSearchOptions(opts) {
178473
+ return {
178474
+ caseSensitive: opts.caseSensitive,
178475
+ wholeWord: opts.wholeWord,
178476
+ regex: opts.regex,
178477
+ decorations: SEARCH_DECORATIONS
178478
+ };
178479
+ }
178480
+ const DARK_TERMINAL_THEME = {
178481
+ background: "#1e1e1e",
178482
+ foreground: "#e8e8e8",
178483
+ cursor: "#e8e8e8",
178484
+ selectionBackground: "rgba(255, 255, 255, 0.2)",
178485
+ black: "#000000",
178486
+ red: "#cd3131",
178487
+ green: "#0dbc79",
178488
+ yellow: "#e5e510",
178489
+ blue: "#2472c8",
178490
+ magenta: "#bc3fbc",
178491
+ cyan: "#11a8cd",
178492
+ white: "#e5e5e5",
178493
+ brightBlack: "#666666",
178494
+ brightRed: "#f14c4c",
178495
+ brightGreen: "#23d18b",
178496
+ brightYellow: "#f5f543",
178497
+ brightBlue: "#3b8eea",
178498
+ brightMagenta: "#d670d6",
178499
+ brightCyan: "#29b8db",
178500
+ brightWhite: "#e5e5e5"
178501
+ };
178502
+ const LIGHT_TERMINAL_THEME = {
178503
+ background: "#ffffff",
178504
+ foreground: "#1e1e1e",
178505
+ cursor: "#1e1e1e",
178506
+ cursorAccent: "#ffffff",
178507
+ selectionBackground: "rgba(0, 0, 0, 0.15)",
178508
+ black: "#000000",
178509
+ red: "#cd3131",
178510
+ green: "#0a8043",
178511
+ yellow: "#946800",
178512
+ blue: "#0451a5",
178513
+ magenta: "#bc05bc",
178514
+ cyan: "#0598bc",
178515
+ white: "#555555",
178516
+ brightBlack: "#666666",
178517
+ brightRed: "#cd3131",
178518
+ brightGreen: "#0a8043",
178519
+ brightYellow: "#946800",
178520
+ brightBlue: "#0451a5",
178521
+ brightMagenta: "#bc05bc",
178522
+ brightCyan: "#0598bc",
178523
+ brightWhite: "#1e1e1e"
178524
+ };
178525
+ function isDarkMode() {
178526
+ return document.documentElement.classList.contains("dark");
178527
+ }
178528
+ function getTerminalTheme() {
178529
+ return isDarkMode() ? DARK_TERMINAL_THEME : LIGHT_TERMINAL_THEME;
178530
+ }
178531
+ const HEARTBEAT_INTERVAL_MS = 1e4;
178532
+ const HEARTBEAT_TIMEOUT_MS = 2e4;
178533
+ const RECONNECT_BASE_MS = 500;
178534
+ const RECONNECT_MAX_MS = 1e4;
178535
+ const MAX_LAYOUT_FRAMES = 5;
178536
+ const MAX_CACHED_TERMINALS = 8;
178537
+ const INITIAL_STATE = {
178538
+ ready: false,
178539
+ searchOpen: false,
178540
+ searchQuery: "",
178541
+ searchOptions: DEFAULT_SEARCH_OPTIONS,
178542
+ matchInfo: { total: 0, current: 0 },
178543
+ selectionMode: false,
178544
+ pendingCtrl: false,
178545
+ terminated: false
178546
+ };
178547
+ const CACHE_KEY = "__bandTerminalCache__";
178548
+ function getCache() {
178549
+ const store = globalThis;
178550
+ if (!store[CACHE_KEY]) store[CACHE_KEY] = /* @__PURE__ */ new Map();
178551
+ return store[CACHE_KEY];
178552
+ }
178553
+ function createEntry(terminalId, opts) {
178554
+ const { workspaceId, paneMetadata, useWebGL, autoFocus } = opts;
178555
+ const wrapper = document.createElement("div");
178556
+ wrapper.dataset.testid = "terminal-wrapper";
178557
+ wrapper.dataset.terminalId = terminalId;
178558
+ wrapper.dataset.workspaceId = workspaceId;
178559
+ wrapper.style.position = "absolute";
178560
+ wrapper.style.inset = "0";
178561
+ wrapper.style.overflow = "hidden";
178562
+ wrapper.style.setProperty("zoom", "calc(1 / var(--app-zoom, 1))");
178563
+ getParkingContainer().appendChild(wrapper);
178564
+ let state2 = INITIAL_STATE;
178565
+ const listeners2 = /* @__PURE__ */ new Set();
178566
+ const notify = () => {
178567
+ for (const l4 of listeners2) l4();
178568
+ };
178569
+ const setState = (patch2) => {
178570
+ state2 = { ...state2, ...patch2 };
178571
+ notify();
178572
+ };
178573
+ const connectListeners = /* @__PURE__ */ new Set();
178574
+ let titleListener = null;
178575
+ let lastTitle = null;
178576
+ const emitTitle = (title) => {
178577
+ lastTitle = title;
178578
+ titleListener?.(title);
178579
+ };
178580
+ let terminal = null;
178581
+ let searchAddon = null;
178582
+ let webglAddon = null;
178583
+ let ws = null;
178584
+ let liveContainer = null;
178585
+ let attached = false;
178586
+ let autoFocusPending = autoFocus ?? paneMetadata?.focus ?? false;
178587
+ let lastActive = Date.now();
178588
+ let webglSuspect = false;
178589
+ let selectionAnchor = null;
178590
+ let selectionHead = null;
178591
+ let destroyed = false;
178592
+ let cleanup = null;
178593
+ Promise.all([
178594
+ import("./xterm-CkV9CBvP.js"),
178595
+ import("./addon-fit-D89xfLfG.js"),
178596
+ import("./addon-web-links-CzLDtFWc.js"),
178597
+ import("./addon-search-BS53_-cp.js"),
178598
+ import("./addon-webgl-BeO2q2vc.js")
178599
+ ]).then(([xtermMod, fitMod, webLinksMod, searchMod, webglMod]) => {
178600
+ if (destroyed) return;
178601
+ const { Terminal: XTerm } = xtermMod;
178602
+ const { FitAddon: XFitAddon } = fitMod;
178603
+ const { WebLinksAddon: XWebLinksAddon } = webLinksMod;
178604
+ const { SearchAddon: XSearchAddon } = searchMod;
178605
+ const { WebglAddon: XWebglAddon } = webglMod;
178606
+ Promise.resolve({ });
178607
+ const term = new XTerm({
178608
+ allowProposedApi: true,
178609
+ cursorBlink: true,
178610
+ fontSize: BASE_FONT_SIZE * getCurrentZoomLevel(),
178611
+ fontFamily: "'SF Mono', Menlo, Monaco, 'Courier New', monospace",
178612
+ // 1.2 row spacing is only safe under WebGL (redraws continuous glyphs at
178613
+ // full cell rect); the DOM renderer needs 1.0 to keep box art continuous.
178614
+ lineHeight: useWebGL ? 1.2 : 1,
178615
+ macOptionIsMeta: true,
178616
+ scrollback: 1e4,
178617
+ theme: getTerminalTheme()
178618
+ });
178619
+ terminal = term;
178620
+ const themeObserver = new MutationObserver(() => {
178621
+ term.options.theme = getTerminalTheme();
178622
+ });
178623
+ themeObserver.observe(document.documentElement, {
178624
+ attributes: true,
178625
+ attributeFilter: ["class"]
178626
+ });
178627
+ const fit = new XFitAddon();
178628
+ term.loadAddon(fit);
178629
+ term.loadAddon(new XWebLinksAddon((_event, uri) => openExternalUrl(uri)));
178630
+ const fileLinkProviderDisposable = term.registerLinkProvider(
178631
+ createTerminalFileLinkProvider(term, (filename) => {
178632
+ window.dispatchEvent(
178633
+ new CustomEvent("band:open-file", { detail: { filename, workspaceId } })
178634
+ );
178635
+ })
178636
+ );
178637
+ term.open(wrapper);
178638
+ let webglContextLossDisposable;
178639
+ const attachWebGL = () => {
178640
+ try {
178641
+ const addon = new XWebglAddon({ customGlyphs: true });
178642
+ term.loadAddon(addon);
178643
+ const screenEl = wrapper.querySelector(".xterm-screen");
178644
+ const webglCanvas = screenEl?.querySelector(
178645
+ ":scope > canvas:last-of-type"
178646
+ );
178647
+ if (webglCanvas) {
178648
+ webglCanvas.style.pointerEvents = "none";
178649
+ webglCanvas.style.touchAction = "none";
178650
+ }
178651
+ webglAddon = addon;
178652
+ webglContextLossDisposable?.dispose();
178653
+ webglContextLossDisposable = addon.onContextLoss(() => {
178654
+ console.warn("[terminal-cache] WebGL context lost, reattaching addon");
178655
+ addon.dispose();
178656
+ webglAddon = null;
178657
+ if (attached && hostIsVisible()) {
178658
+ attachWebGL();
178659
+ } else {
178660
+ webglSuspect = true;
178661
+ }
178662
+ });
178663
+ return true;
178664
+ } catch (err) {
178665
+ console.warn("[terminal-cache] WebGL renderer unavailable, falling back to DOM", err);
178666
+ return false;
178667
+ }
178668
+ };
178669
+ if (useWebGL) attachWebGL();
178670
+ const search2 = new XSearchAddon();
178671
+ searchAddon = search2;
178672
+ term.loadAddon(search2);
178673
+ const searchResultsDisposable = search2.onDidChangeResults((event) => {
178674
+ setState({
178675
+ matchInfo: {
178676
+ total: event.resultCount,
178677
+ current: event.resultIndex >= 0 ? event.resultIndex + 1 : 0
178678
+ }
178679
+ });
178680
+ });
178681
+ term.attachCustomKeyEventHandler((e3) => {
178682
+ if (e3.type === "keydown") {
178683
+ if (state2.pendingCtrl && e3.key.length === 1 && !e3.metaKey && !e3.altKey && !e3.ctrlKey) {
178684
+ const lower2 = e3.key.toLowerCase();
178685
+ const code2 = lower2.charCodeAt(0);
178686
+ if (code2 >= 97 && code2 <= 122) {
178687
+ term.input(String.fromCharCode(code2 - 96));
178688
+ setState({ pendingCtrl: false });
178689
+ e3.preventDefault();
178690
+ return false;
178691
+ }
178692
+ setState({ pendingCtrl: false });
178693
+ }
178694
+ if ((e3.metaKey || e3.ctrlKey) && !e3.shiftKey && !e3.altKey && e3.key.toLowerCase() === "f") {
178695
+ e3.preventDefault();
178696
+ publicApi.openSearch();
178697
+ return false;
178698
+ }
178699
+ if (e3.key === "Enter" && e3.shiftKey && !e3.altKey && !e3.metaKey && !e3.ctrlKey) {
178700
+ e3.preventDefault();
178701
+ term.input("\n");
178702
+ return false;
178703
+ }
178704
+ if (e3.altKey && !e3.metaKey && !e3.ctrlKey) {
178705
+ if (e3.key === "ArrowLeft") {
178706
+ term.input("\x1Bb");
178707
+ return false;
178708
+ }
178709
+ if (e3.key === "ArrowRight") {
178710
+ term.input("\x1Bf");
178711
+ return false;
178712
+ }
178713
+ }
178714
+ }
178715
+ return true;
178716
+ });
178717
+ const viewportEl = wrapper.querySelector(".xterm-viewport");
178718
+ let lastTouchY = null;
178719
+ const onTouchStart = (e3) => {
178720
+ lastTouchY = e3.touches.length === 1 ? e3.touches[0].clientY : null;
178721
+ };
178722
+ const onTouchMove = (e3) => {
178723
+ if (e3.touches.length !== 1 || lastTouchY === null) return;
178724
+ const currentY = e3.touches[0].clientY;
178725
+ const deltaY = lastTouchY - currentY;
178726
+ const cellHeight = viewportEl && term.rows > 0 ? viewportEl.clientHeight / term.rows : 17;
178727
+ const lineDelta = Math.trunc(deltaY / cellHeight);
178728
+ if (lineDelta !== 0) {
178729
+ term.scrollLines(lineDelta);
178730
+ lastTouchY = currentY + (deltaY - lineDelta * cellHeight);
178731
+ e3.preventDefault();
178732
+ }
178733
+ };
178734
+ const onTouchEnd = () => {
178735
+ lastTouchY = null;
178736
+ };
178737
+ wrapper.addEventListener("touchstart", onTouchStart, { passive: true });
178738
+ wrapper.addEventListener("touchmove", onTouchMove, { passive: false });
178739
+ wrapper.addEventListener("touchend", onTouchEnd, { passive: true });
178740
+ wrapper.addEventListener("touchcancel", onTouchEnd, { passive: true });
178741
+ let longPressTimer = null;
178742
+ let longPressStart = null;
178743
+ const cancelLongPress = () => {
178744
+ if (longPressTimer !== null) {
178745
+ window.clearTimeout(longPressTimer);
178746
+ longPressTimer = null;
178747
+ }
178748
+ longPressStart = null;
178749
+ };
178750
+ const onLongPressStart = (e3) => {
178751
+ cancelLongPress();
178752
+ if (e3.touches.length !== 1) return;
178753
+ const t2 = e3.touches[0];
178754
+ longPressStart = { x: t2.clientX, y: t2.clientY };
178755
+ longPressTimer = window.setTimeout(() => {
178756
+ longPressTimer = null;
178757
+ const start2 = longPressStart;
178758
+ if (!start2) return;
178759
+ const screenEl = wrapper.querySelector(".xterm-screen");
178760
+ if (!screenEl) return;
178761
+ const cell2 = pointToCell(start2.x, start2.y, term, screenEl);
178762
+ const lineText = getLineText(term, cell2.row);
178763
+ const { anchor: anchor2, head: head2 } = wordSelectionAt(cell2, lineText);
178764
+ applySelection(term, anchor2, head2);
178765
+ selectionAnchor = anchor2;
178766
+ selectionHead = head2;
178767
+ setState({ selectionMode: true });
178768
+ tapStartX = null;
178769
+ tapStartY = null;
178770
+ term.blur();
178771
+ if (typeof navigator.vibrate === "function") {
178772
+ try {
178773
+ navigator.vibrate(15);
178774
+ } catch {
178775
+ }
178776
+ }
178777
+ }, LONG_PRESS_MS);
178778
+ };
178779
+ const onLongPressMove = (e3) => {
178780
+ if (!longPressStart || e3.touches.length !== 1) return;
178781
+ const t2 = e3.touches[0];
178782
+ const dx = Math.abs(t2.clientX - longPressStart.x);
178783
+ const dy = Math.abs(t2.clientY - longPressStart.y);
178784
+ if (dx > LONG_PRESS_SLOP_PX || dy > LONG_PRESS_SLOP_PX) cancelLongPress();
178785
+ };
178786
+ wrapper.addEventListener("touchstart", onLongPressStart, { passive: true });
178787
+ wrapper.addEventListener("touchmove", onLongPressMove, { passive: true });
178788
+ wrapper.addEventListener("touchend", cancelLongPress, { passive: true });
178789
+ wrapper.addEventListener("touchcancel", cancelLongPress, { passive: true });
178790
+ let tapStartX = null;
178791
+ let tapStartY = null;
178792
+ const onTapStart = (e3) => {
178793
+ if (e3.touches.length === 1) {
178794
+ tapStartX = e3.touches[0].clientX;
178795
+ tapStartY = e3.touches[0].clientY;
178796
+ } else {
178797
+ tapStartX = null;
178798
+ tapStartY = null;
178799
+ }
178800
+ };
178801
+ const onTapEnd = (e3) => {
178802
+ const startX = tapStartX;
178803
+ const startY = tapStartY;
178804
+ tapStartX = null;
178805
+ tapStartY = null;
178806
+ if (startX === null || startY === null || e3.changedTouches.length !== 1) return;
178807
+ const dx = Math.abs(e3.changedTouches[0].clientX - startX);
178808
+ const dy = Math.abs(e3.changedTouches[0].clientY - startY);
178809
+ if (dx < 10 && dy < 10) {
178810
+ if (selectionAnchor !== null) {
178811
+ selectionAnchor = null;
178812
+ selectionHead = null;
178813
+ setState({ selectionMode: false });
178814
+ term.clearSelection();
178815
+ }
178816
+ term.focus();
178817
+ }
178818
+ };
178819
+ const onTapCancel = () => {
178820
+ tapStartX = null;
178821
+ tapStartY = null;
178822
+ };
178823
+ wrapper.addEventListener("touchstart", onTapStart, { passive: true });
178824
+ wrapper.addEventListener("touchend", onTapEnd, { passive: true });
178825
+ wrapper.addEventListener("touchcancel", onTapCancel, { passive: true });
178826
+ const proto2 = location.protocol === "https:" ? "wss:" : "ws:";
178827
+ const wsUrl = `${proto2}//${location.host}/terminal?workspaceId=${encodeURIComponent(workspaceId)}&terminalId=${encodeURIComponent(terminalId)}`;
178828
+ let intentionalClose = false;
178829
+ let terminated = false;
178830
+ let didConnectOnce = false;
178831
+ let reconnectAttempts = 0;
178832
+ let reconnectTimer = null;
178833
+ let heartbeatTimer = null;
178834
+ let lastPongAt = 0;
178835
+ const clearReconnectTimer = () => {
178836
+ if (reconnectTimer !== null) {
178837
+ clearTimeout(reconnectTimer);
178838
+ reconnectTimer = null;
178839
+ }
178840
+ };
178841
+ const stopHeartbeat = () => {
178842
+ if (heartbeatTimer !== null) {
178843
+ clearInterval(heartbeatTimer);
178844
+ heartbeatTimer = null;
178845
+ }
178846
+ };
178847
+ const probeConnection = () => {
178848
+ const sock = ws;
178849
+ if (!sock || sock.readyState !== WebSocket.OPEN) return;
178850
+ if (Date.now() - lastPongAt > HEARTBEAT_TIMEOUT_MS) {
178851
+ sock.close();
178852
+ return;
178853
+ }
178854
+ try {
178855
+ sock.send(JSON.stringify({ type: "ping" }));
178856
+ } catch {
178857
+ sock.close();
178858
+ }
178859
+ };
178860
+ const scheduleReconnect = () => {
178861
+ if (intentionalClose || terminated || reconnectTimer !== null) return;
178862
+ const delay = Math.min(RECONNECT_BASE_MS * 2 ** reconnectAttempts, RECONNECT_MAX_MS);
178863
+ if (delay < RECONNECT_MAX_MS) reconnectAttempts += 1;
178864
+ reconnectTimer = setTimeout(() => {
178865
+ reconnectTimer = null;
178866
+ connect();
178867
+ }, delay);
178868
+ };
178869
+ function connect() {
178870
+ if (intentionalClose || terminated || destroyed) return;
178871
+ clearReconnectTimer();
178872
+ const isReconnect = didConnectOnce;
178873
+ const sock = new WebSocket(wsUrl);
178874
+ ws = sock;
178875
+ sock.binaryType = "arraybuffer";
178876
+ sock.onopen = () => {
178877
+ reconnectAttempts = 0;
178878
+ lastPongAt = Date.now();
178879
+ if (isReconnect) term.reset();
178880
+ if (!didConnectOnce && paneMetadata && (paneMetadata.command || paneMetadata.cwd || paneMetadata.env)) {
178881
+ const initMsg = { type: "init" };
178882
+ if (paneMetadata.command) initMsg.command = paneMetadata.command;
178883
+ if (paneMetadata.cwd) initMsg.cwd = paneMetadata.cwd;
178884
+ if (paneMetadata.env) initMsg.env = paneMetadata.env;
178885
+ sock.send(JSON.stringify(initMsg));
178886
+ }
178887
+ didConnectOnce = true;
178888
+ if (attached && hostIsVisible()) {
178889
+ fit.fit();
178890
+ sendPtyResize();
178891
+ if (autoFocusPending && !isReconnect) {
178892
+ term.focus();
178893
+ autoFocusPending = false;
178894
+ }
178895
+ }
178896
+ stopHeartbeat();
178897
+ heartbeatTimer = setInterval(probeConnection, HEARTBEAT_INTERVAL_MS);
178898
+ for (const l4 of connectListeners) l4();
178899
+ };
178900
+ sock.onmessage = (event) => {
178901
+ if (event.data instanceof ArrayBuffer) {
178902
+ term.write(new Uint8Array(event.data));
178903
+ } else {
178904
+ try {
178905
+ const msg = JSON.parse(event.data);
178906
+ if (msg.type === "pong") {
178907
+ lastPongAt = Date.now();
178908
+ } else if (msg.type === "title" && typeof msg.title === "string") {
178909
+ emitTitle(msg.title);
178910
+ } else if (msg.type === "error" && typeof msg.message === "string") {
178911
+ const safe = msg.message.replace(new RegExp("\\p{Cc}", "gu"), "");
178912
+ term.write(`\r
178913
+ \x1B[31m${safe}\x1B[0m\r
178914
+ `);
178915
+ }
178916
+ } catch {
178917
+ term.write(event.data);
178918
+ }
178919
+ }
178920
+ };
178921
+ sock.onclose = (event) => {
178922
+ if (ws !== sock) return;
178923
+ stopHeartbeat();
178924
+ if (intentionalClose) return;
178925
+ if (event.code === 1e3 || event.code >= 4e3) {
178926
+ terminated = true;
178927
+ if (event.code === 1e3) {
178928
+ term.write("\r\n\x1B[90m[Process completed]\x1B[0m\r\n");
178929
+ }
178930
+ setState({ terminated: true });
178931
+ return;
178932
+ }
178933
+ term.write("\r\n\x1B[90m[Reconnecting…]\x1B[0m\r\n");
178934
+ scheduleReconnect();
178935
+ };
178936
+ }
178937
+ const handleResume = () => {
178938
+ if (intentionalClose || terminated) return;
178939
+ const sock = ws;
178940
+ if (!sock || sock.readyState === WebSocket.CLOSED || sock.readyState === WebSocket.CLOSING) {
178941
+ reconnectAttempts = 0;
178942
+ clearReconnectTimer();
178943
+ connect();
178944
+ } else if (sock.readyState === WebSocket.OPEN) {
178945
+ probeConnection();
178946
+ }
178947
+ };
178948
+ const handleVisibility = () => {
178949
+ if (!document.hidden) handleResume();
178950
+ };
178951
+ window.addEventListener("online", handleResume);
178952
+ document.addEventListener("visibilitychange", handleVisibility);
178953
+ connect();
178954
+ term.onData((data) => {
178955
+ if (ws && ws.readyState === WebSocket.OPEN) ws.send(data);
178956
+ });
178957
+ term.onTitleChange((title) => emitTitle(title));
178958
+ let selectionRafId = null;
178959
+ const reapplySelectionOnNextFrame = () => {
178960
+ if (selectionRafId !== null) return;
178961
+ if (!selectionAnchor || !selectionHead) return;
178962
+ selectionRafId = requestAnimationFrame(() => {
178963
+ selectionRafId = null;
178964
+ if (selectionAnchor && selectionHead) applySelection(term, selectionAnchor, selectionHead);
178965
+ });
178966
+ };
178967
+ const selectionResizeDisposable = term.onResize(reapplySelectionOnNextFrame);
178968
+ let lastDpr = window.devicePixelRatio;
178969
+ const sendPtyResize = () => {
178970
+ if (!ws || ws.readyState !== WebSocket.OPEN) return;
178971
+ if (term.cols <= 0 || term.rows <= 0) return;
178972
+ ws.send(JSON.stringify({ type: "resize", cols: term.cols, rows: term.rows }));
178973
+ };
178974
+ const remeasureAndReattach = (opt = {}) => {
178975
+ const { newFontSize } = opt;
178976
+ if (newFontSize !== void 0) {
178977
+ if (term.options.fontSize !== newFontSize) term.options.fontSize = newFontSize;
178978
+ } else {
178979
+ const fs = term.options.fontSize;
178980
+ if (typeof fs === "number") {
178981
+ term.options.fontSize = fs + 1;
178982
+ term.options.fontSize = fs;
178983
+ }
178984
+ }
178985
+ if (!attached || !hostIsVisible()) {
178986
+ webglSuspect = true;
178987
+ return;
178988
+ }
178989
+ if (webglAddon) {
178990
+ webglAddon.dispose();
178991
+ webglAddon = null;
178992
+ attachWebGL();
178993
+ }
178994
+ fit.fit();
178995
+ };
178996
+ const handleDprChange = () => {
178997
+ const currentDpr = window.devicePixelRatio;
178998
+ if (currentDpr === lastDpr) return false;
178999
+ lastDpr = currentDpr;
179000
+ remeasureAndReattach();
179001
+ return true;
179002
+ };
179003
+ const resizeObserver = new ResizeObserver((entries2) => {
179004
+ const entry = entries2[0];
179005
+ if (!entry || entry.contentRect.width === 0 || entry.contentRect.height === 0) return;
179006
+ if (!attached || !hostIsVisible()) return;
179007
+ const dprChanged = handleDprChange();
179008
+ if (!dprChanged) fit.fit();
179009
+ sendPtyResize();
179010
+ });
179011
+ resizeObserver.observe(wrapper);
179012
+ const handleZoomChange = (zoom) => {
179013
+ const target = Math.round(BASE_FONT_SIZE * zoom * 100) / 100;
179014
+ if (term.options.fontSize === target) return;
179015
+ remeasureAndReattach({ newFontSize: target });
179016
+ if (attached && hostIsVisible()) sendPtyResize();
179017
+ };
179018
+ const unsubscribeZoom = subscribeToZoomChanges(handleZoomChange);
179019
+ let dprMql;
179020
+ const onDprMediaChange = () => {
179021
+ handleDprChange();
179022
+ dprMql?.removeEventListener("change", onDprMediaChange);
179023
+ bindDprListener();
179024
+ };
179025
+ const bindDprListener = () => {
179026
+ dprMql = window.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`);
179027
+ dprMql.addEventListener("change", onDprMediaChange);
179028
+ };
179029
+ bindDprListener();
179030
+ repairAndFit = () => {
179031
+ if (!attached || !hostIsVisible()) return;
179032
+ const dprChanged = handleDprChange();
179033
+ if (!dprChanged) {
179034
+ if (webglSuspect && webglAddon == null && useWebGL) {
179035
+ attachWebGL();
179036
+ } else if (webglSuspect && webglAddon) {
179037
+ webglAddon.dispose();
179038
+ webglAddon = null;
179039
+ attachWebGL();
179040
+ }
179041
+ fit.fit();
179042
+ }
179043
+ webglSuspect = false;
179044
+ if (term.rows > 0) term.refresh(0, term.rows - 1);
179045
+ sendPtyResize();
179046
+ };
179047
+ hostIsVisible = () => !!liveContainer && liveContainer.clientWidth > 0 && liveContainer.clientHeight > 0;
179048
+ if (attached) scheduleRepair();
179049
+ setState({ ready: true });
179050
+ cleanup = () => {
179051
+ intentionalClose = true;
179052
+ clearReconnectTimer();
179053
+ stopHeartbeat();
179054
+ window.removeEventListener("online", handleResume);
179055
+ document.removeEventListener("visibilitychange", handleVisibility);
179056
+ themeObserver.disconnect();
179057
+ resizeObserver.disconnect();
179058
+ searchResultsDisposable.dispose();
179059
+ selectionResizeDisposable.dispose();
179060
+ fileLinkProviderDisposable.dispose();
179061
+ if (selectionRafId !== null) cancelAnimationFrame(selectionRafId);
179062
+ webglContextLossDisposable?.dispose();
179063
+ dprMql?.removeEventListener("change", onDprMediaChange);
179064
+ unsubscribeZoom();
179065
+ cancelLongPress();
179066
+ ws?.close();
179067
+ term.dispose();
179068
+ };
179069
+ });
179070
+ let hostIsVisible = () => !!liveContainer && liveContainer.clientWidth > 0 && liveContainer.clientHeight > 0;
179071
+ let repairAndFit = () => {
179072
+ };
179073
+ let repairRafId = null;
179074
+ const scheduleRepair = () => {
179075
+ if (repairRafId !== null) return;
179076
+ let frame2 = 0;
179077
+ const run2 = () => {
179078
+ repairRafId = null;
179079
+ if (!attached) return;
179080
+ if (!hostIsVisible()) {
179081
+ if (frame2 < MAX_LAYOUT_FRAMES) {
179082
+ frame2 += 1;
179083
+ repairRafId = requestAnimationFrame(run2);
179084
+ }
179085
+ return;
179086
+ }
179087
+ repairAndFit();
179088
+ };
179089
+ repairRafId = requestAnimationFrame(run2);
179090
+ };
179091
+ const publicApi = {
179092
+ terminalId,
179093
+ workspaceId,
179094
+ getTerminal: () => terminal,
179095
+ attach(container, attachOpts) {
179096
+ if (destroyed) return;
179097
+ liveContainer = container;
179098
+ attached = true;
179099
+ lastActive = Date.now();
179100
+ if (attachOpts?.autoFocus) autoFocusPending = true;
179101
+ if (wrapper.parentElement !== container) container.appendChild(wrapper);
179102
+ scheduleRepair();
179103
+ },
179104
+ detach() {
179105
+ if (destroyed) return;
179106
+ attached = false;
179107
+ liveContainer = null;
179108
+ if (repairRafId !== null) {
179109
+ cancelAnimationFrame(repairRafId);
179110
+ repairRafId = null;
179111
+ }
179112
+ const parking = getParkingContainer();
179113
+ if (wrapper.parentElement !== parking) parking.appendChild(wrapper);
179114
+ evictLeastRecentlyUsed(terminalId);
179115
+ },
179116
+ getLastActive: () => lastActive,
179117
+ touch() {
179118
+ lastActive = Date.now();
179119
+ },
179120
+ isAttached: () => attached,
179121
+ isDestroyed: () => destroyed,
179122
+ subscribe(listener2) {
179123
+ listeners2.add(listener2);
179124
+ return () => listeners2.delete(listener2);
179125
+ },
179126
+ getSnapshot: () => state2,
179127
+ openSearch() {
179128
+ setState({ searchOpen: true });
179129
+ },
179130
+ closeSearch() {
179131
+ searchAddon?.clearDecorations();
179132
+ setState({ searchOpen: false, searchQuery: "", matchInfo: { total: 0, current: 0 } });
179133
+ terminal?.focus();
179134
+ },
179135
+ setSearchQuery(query) {
179136
+ setState({ searchQuery: query });
179137
+ const addon = searchAddon;
179138
+ if (!addon) return;
179139
+ if (!query) {
179140
+ addon.clearDecorations();
179141
+ setState({ matchInfo: { total: 0, current: 0 } });
179142
+ return;
179143
+ }
179144
+ addon.findNext(query, toXtermSearchOptions(state2.searchOptions));
179145
+ },
179146
+ setSearchOptions(options) {
179147
+ setState({ searchOptions: options });
179148
+ if (!searchAddon || !state2.searchQuery) return;
179149
+ searchAddon.findNext(state2.searchQuery, toXtermSearchOptions(options));
179150
+ },
179151
+ findNext() {
179152
+ if (!state2.searchQuery) return;
179153
+ searchAddon?.findNext(state2.searchQuery, toXtermSearchOptions(state2.searchOptions));
179154
+ },
179155
+ findPrevious() {
179156
+ if (!state2.searchQuery) return;
179157
+ searchAddon?.findPrevious(state2.searchQuery, toXtermSearchOptions(state2.searchOptions));
179158
+ },
179159
+ toggleCtrl() {
179160
+ setState({ pendingCtrl: !state2.pendingCtrl });
179161
+ },
179162
+ extendSelection(direction) {
179163
+ if (!terminal || !selectionAnchor || !selectionHead) return;
179164
+ const next2 = moveCell(selectionHead, direction, terminal);
179165
+ selectionHead = next2;
179166
+ applySelection(terminal, selectionAnchor, next2);
179167
+ },
179168
+ exitSelection() {
179169
+ selectionAnchor = null;
179170
+ selectionHead = null;
179171
+ setState({ selectionMode: false });
179172
+ terminal?.clearSelection();
179173
+ },
179174
+ selectAll() {
179175
+ if (!terminal) return;
179176
+ const anchor2 = { col: 0, row: 0 };
179177
+ const lastRow = Math.max(0, terminal.buffer.active.length - 1);
179178
+ const head2 = { col: Math.max(0, terminal.cols - 1), row: lastRow };
179179
+ applySelection(terminal, anchor2, head2);
179180
+ selectionAnchor = anchor2;
179181
+ selectionHead = head2;
179182
+ setState({ selectionMode: true });
179183
+ terminal.blur();
179184
+ },
179185
+ sendInput(data) {
179186
+ if (ws && ws.readyState === WebSocket.OPEN) ws.send(data);
179187
+ },
179188
+ isSocketOpen: () => !!ws && ws.readyState === WebSocket.OPEN,
179189
+ focus() {
179190
+ terminal?.focus();
179191
+ },
179192
+ subscribeConnect(listener2) {
179193
+ connectListeners.add(listener2);
179194
+ return () => connectListeners.delete(listener2);
179195
+ },
179196
+ registerTitleListener(listener2) {
179197
+ titleListener = listener2;
179198
+ if (lastTitle !== null) listener2(lastTitle);
179199
+ return () => {
179200
+ if (titleListener === listener2) titleListener = null;
179201
+ };
179202
+ },
179203
+ _destroy() {
179204
+ if (destroyed) return;
179205
+ destroyed = true;
179206
+ if (repairRafId !== null) {
179207
+ cancelAnimationFrame(repairRafId);
179208
+ repairRafId = null;
179209
+ }
179210
+ cleanup?.();
179211
+ cleanup = null;
179212
+ listeners2.clear();
179213
+ connectListeners.clear();
179214
+ titleListener = null;
179215
+ wrapper.remove();
179216
+ }
179217
+ };
179218
+ return publicApi;
179219
+ }
179220
+ function getOrCreateTerminal(terminalId, opts) {
179221
+ const cache = getCache();
179222
+ const existing = cache.get(terminalId);
179223
+ if (existing) {
179224
+ existing.touch();
179225
+ return existing;
179226
+ }
179227
+ const entry = createEntry(terminalId, opts);
179228
+ cache.set(terminalId, entry);
179229
+ evictLeastRecentlyUsed(terminalId);
179230
+ return entry;
179231
+ }
179232
+ function evictLeastRecentlyUsed(keepId) {
179233
+ const cache = getCache();
179234
+ if (cache.size <= MAX_CACHED_TERMINALS) return;
179235
+ const candidates = [...cache.values()].filter((e3) => e3.terminalId !== keepId && !e3.isAttached()).sort((a2, b2) => a2.getLastActive() - b2.getLastActive());
179236
+ let over = cache.size - MAX_CACHED_TERMINALS;
179237
+ for (const entry of candidates) {
179238
+ if (over <= 0) break;
179239
+ cache.delete(entry.terminalId);
179240
+ entry._destroy();
179241
+ over -= 1;
179242
+ }
179243
+ }
179244
+ function disposeTerminal(terminalId) {
179245
+ const cache = getCache();
179246
+ const entry = cache.get(terminalId);
179247
+ if (!entry) return;
179248
+ cache.delete(terminalId);
179249
+ entry._destroy();
179250
+ }
179251
+ function reconcileTerminalWorkspaces(validWorkspaceIds, activeWorkspaceId) {
179252
+ const cache = getCache();
179253
+ for (const [id28, entry] of cache) {
179254
+ if (!validWorkspaceIds.has(entry.workspaceId) && entry.workspaceId !== activeWorkspaceId) {
179255
+ cache.delete(id28);
179256
+ entry._destroy();
179257
+ }
179258
+ }
179259
+ }
178074
179260
  const states = /* @__PURE__ */ new Map();
178075
179261
  const listeners = /* @__PURE__ */ new Map();
178076
179262
  const EMPTY_STATE = Object.freeze({ openFilePath: null });
@@ -178167,6 +179353,7 @@ function MultiWorkspacePanelHost({ emptyState, children: children2 }) {
178167
179353
  validIds.add(toWorkspaceId(project.name, worktree.name));
178168
179354
  }
178169
179355
  }
179356
+ reconcileTerminalWorkspaces(validIds, activeWorkspaceId);
178170
179357
  setCache((prev2) => {
178171
179358
  let hasStale = false;
178172
179359
  for (const id28 of prev2.keys()) {
@@ -201809,12 +202996,12 @@ const PANEL_SHORTCUTS = {
201809
202996
  browser: "⇧⌘B"
201810
202997
  };
201811
202998
  const DockviewTerminalContainer = reactExports.lazy(
201812
- () => import("./DockviewTerminalContainer-CMbrr8wZ.js").then((m2) => ({
202999
+ () => import("./DockviewTerminalContainer-TX2ecJ9k.js").then((m2) => ({
201813
203000
  default: m2.DockviewTerminalContainer
201814
203001
  }))
201815
203002
  );
201816
203003
  const DockviewBrowserContainer = reactExports.lazy(
201817
- () => import("./DockviewBrowserContainer-BDsafKFK.js").then((m2) => ({
203004
+ () => import("./DockviewBrowserContainer-BuItINME.js").then((m2) => ({
201818
203005
  default: m2.DockviewBrowserContainer
201819
203006
  }))
201820
203007
  );
@@ -203027,80 +204214,6 @@ function useNavigationHistory(routerNavigate, capabilities2) {
203027
204214
  canGoForward: history2.cursor >= 0 && history2.cursor < history2.stack.length - 1
203028
204215
  };
203029
204216
  }
203030
- const ZOOM_LEVEL_KEY = "band:zoom-level";
203031
- const DEFAULT_ZOOM = 1;
203032
- const MIN_ZOOM = 0.5;
203033
- const MAX_ZOOM = 2;
203034
- const ZOOM_STEP = 0.1;
203035
- const ZOOM_CSS_VAR = "--app-zoom";
203036
- const ZOOM_CHANGE_EVENT = "band:zoom-changed";
203037
- function loadZoomLevel() {
203038
- try {
203039
- const stored = localStorage.getItem(ZOOM_LEVEL_KEY);
203040
- if (stored) {
203041
- const parsed = Number.parseFloat(stored);
203042
- if (!Number.isNaN(parsed) && parsed >= MIN_ZOOM && parsed <= MAX_ZOOM) {
203043
- return parsed;
203044
- }
203045
- }
203046
- } catch {
203047
- }
203048
- return DEFAULT_ZOOM;
203049
- }
203050
- function saveZoomLevel(level) {
203051
- const clamped = Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, level));
203052
- const rounded = Math.round(clamped * 100) / 100;
203053
- try {
203054
- localStorage.setItem(ZOOM_LEVEL_KEY, String(rounded));
203055
- } catch {
203056
- }
203057
- }
203058
- function applyZoomLevelToDom(level) {
203059
- const clamped = Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, level));
203060
- const rounded = Math.round(clamped * 100) / 100;
203061
- const root2 = document.documentElement;
203062
- root2.style.zoom = String(rounded);
203063
- root2.style.setProperty(ZOOM_CSS_VAR, String(rounded));
203064
- window.dispatchEvent(new CustomEvent(ZOOM_CHANGE_EVENT, { detail: rounded }));
203065
- return rounded;
203066
- }
203067
- function applyZoomLevel(level) {
203068
- const clamped = Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, level));
203069
- const rounded = Math.round(clamped * 100) / 100;
203070
- saveZoomLevel(rounded);
203071
- applyZoomLevelToDom(rounded);
203072
- }
203073
- function getCurrentZoomLevel() {
203074
- if (typeof document !== "undefined") {
203075
- const css = document.documentElement.style.getPropertyValue(ZOOM_CSS_VAR);
203076
- if (css) {
203077
- const parsed = Number.parseFloat(css);
203078
- if (!Number.isNaN(parsed) && parsed >= MIN_ZOOM && parsed <= MAX_ZOOM) {
203079
- return parsed;
203080
- }
203081
- }
203082
- }
203083
- return loadZoomLevel();
203084
- }
203085
- function subscribeToZoomChanges(handler) {
203086
- if (typeof window === "undefined") return () => {
203087
- };
203088
- const listener2 = (e3) => {
203089
- const detail = e3.detail;
203090
- if (typeof detail === "number") handler(detail);
203091
- };
203092
- window.addEventListener(ZOOM_CHANGE_EVENT, listener2);
203093
- return () => window.removeEventListener(ZOOM_CHANGE_EVENT, listener2);
203094
- }
203095
- function zoomIn() {
203096
- applyZoomLevel(loadZoomLevel() + ZOOM_STEP);
203097
- }
203098
- function zoomOut() {
203099
- applyZoomLevel(loadZoomLevel() - ZOOM_STEP);
203100
- }
203101
- function zoomReset() {
203102
- applyZoomLevel(DEFAULT_ZOOM);
203103
- }
203104
204217
  function useZoom() {
203105
204218
  reactExports.useEffect(() => {
203106
204219
  if (isDesktop) return;
@@ -203384,6 +204497,8 @@ function AppShell() {
203384
204497
  [settings, updateSettings]
203385
204498
  );
203386
204499
  const sidebarPanelRef = ln$2();
204500
+ const sidebarElRef = reactExports.useRef(null);
204501
+ const mainElRef = reactExports.useRef(null);
203387
204502
  const sidebarInit = reactExports.useRef({ collapsed: loadSidebarCollapsed(), width: loadSidebarWidth() });
203388
204503
  const [sidebarVisible, setSidebarVisible] = reactExports.useState(() => !sidebarInit.current.collapsed);
203389
204504
  const sidebarDefaultLayout = reactExports.useMemo(
@@ -203420,16 +204535,37 @@ function AppShell() {
203420
204535
  },
203421
204536
  []
203422
204537
  );
204538
+ const animateSidebarToggle = reactExports.useCallback(() => {
204539
+ const sidebar = sidebarElRef.current;
204540
+ if (!sidebar) return;
204541
+ const els = [sidebar, mainElRef.current];
204542
+ for (const el of els) {
204543
+ if (el) el.style.transition = "flex-grow 200ms ease, flex-basis 200ms ease";
204544
+ }
204545
+ let timer2 = 0;
204546
+ const clear3 = (e3) => {
204547
+ if (e3 && (e3.target !== sidebar || e3.propertyName !== "flex-grow")) return;
204548
+ for (const el of els) if (el) el.style.transition = "";
204549
+ sidebar.removeEventListener("transitionend", clear3);
204550
+ if (timer2) window.clearTimeout(timer2);
204551
+ };
204552
+ timer2 = window.setTimeout(clear3, 280);
204553
+ sidebar.addEventListener("transitionend", clear3);
204554
+ }, []);
203423
204555
  const toggleSidebar = reactExports.useCallback(() => {
203424
204556
  const panel = sidebarPanelRef.current;
203425
204557
  if (!panel) return;
204558
+ animateSidebarToggle();
203426
204559
  if (panel.isCollapsed()) panel.expand();
203427
204560
  else panel.collapse();
203428
- }, [sidebarPanelRef]);
204561
+ }, [sidebarPanelRef, animateSidebarToggle]);
203429
204562
  reactExports.useEffect(() => {
203430
204563
  const onToggle = () => toggleSidebar();
203431
204564
  const onShow = () => {
203432
- if (sidebarPanelRef.current?.isCollapsed()) sidebarPanelRef.current.expand();
204565
+ if (sidebarPanelRef.current?.isCollapsed()) {
204566
+ animateSidebarToggle();
204567
+ sidebarPanelRef.current.expand();
204568
+ }
203433
204569
  };
203434
204570
  window.addEventListener("band:toggle-sidebar", onToggle);
203435
204571
  window.addEventListener("band:show-sidebar", onShow);
@@ -203437,7 +204573,7 @@ function AppShell() {
203437
204573
  window.removeEventListener("band:toggle-sidebar", onToggle);
203438
204574
  window.removeEventListener("band:show-sidebar", onShow);
203439
204575
  };
203440
- }, [toggleSidebar, sidebarPanelRef]);
204576
+ }, [toggleSidebar, sidebarPanelRef, animateSidebarToggle]);
203441
204577
  reactExports.useEffect(
203442
204578
  () => () => {
203443
204579
  if (sidebarWidthRafRef.current != null) cancelAnimationFrame(sidebarWidthRafRef.current);
@@ -203501,6 +204637,7 @@ function AppShell() {
203501
204637
  {
203502
204638
  id: "sidebar",
203503
204639
  panelRef: sidebarPanelRef,
204640
+ elementRef: sidebarElRef,
203504
204641
  defaultSize: SIDEBAR_MIN_SIZE,
203505
204642
  minSize: SIDEBAR_MIN_SIZE,
203506
204643
  maxSize: SIDEBAR_MAX_SIZE,
@@ -203528,7 +204665,7 @@ function AppShell() {
203528
204665
  }
203529
204666
  ),
203530
204667
  /* @__PURE__ */ jsxRuntimeExports.jsx(Qt$1, { className: "w-[3px] bg-transparent hover:bg-accent-foreground/20 active:bg-accent-foreground/30 transition-colors cursor-col-resize" }),
203531
- /* @__PURE__ */ jsxRuntimeExports.jsx(Yt$1, { id: "main", minSize: "20%", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "h-full flex flex-col min-w-0 overflow-hidden", children: [
204668
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Yt$1, { id: "main", elementRef: mainElRef, minSize: "20%", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "h-full flex flex-col min-w-0 overflow-hidden", children: [
203532
204669
  /* @__PURE__ */ jsxRuntimeExports.jsx(
203533
204670
  WorkspaceTitleBar,
203534
204671
  {
@@ -203571,12 +204708,12 @@ function RootLayout() {
203571
204708
  ] })
203572
204709
  ] });
203573
204710
  }
203574
- const $$splitComponentImporter$1 = () => import("./index-B9xqso9p.js");
204711
+ const $$splitComponentImporter$1 = () => import("./index-rF-uGnt9.js");
203575
204712
  const Route$1 = createFileRoute("/")({
203576
204713
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
203577
204714
  });
203578
- const $$splitNotFoundComponentImporter = () => import("./workspace._workspaceId-Dj6Y8WPo.js");
203579
- const $$splitComponentImporter = () => import("./workspace._workspaceId-BMnOV3pd.js");
204715
+ const $$splitNotFoundComponentImporter = () => import("./workspace._workspaceId-B_ziNHiq.js");
204716
+ const $$splitComponentImporter = () => import("./workspace._workspaceId-CO8mKKZW.js");
203580
204717
  const Route2 = createFileRoute("/workspace/$workspaceId")({
203581
204718
  component: lazyRouteComponent($$splitComponentImporter, "component"),
203582
204719
  // Bookmarks / shared links from before route unification (`/workspace/$id/changes`,
@@ -203618,288 +204755,285 @@ const router = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
203618
204755
  getRouter
203619
204756
  }, Symbol.toStringTag, { value: "Module" }));
203620
204757
  export {
203621
- calculateTextWidth as $,
203622
- Rows2 as A,
203623
- Plus as B,
204758
+ assignWithDepth_default as $,
204759
+ DockviewReact as A,
204760
+ Rows2 as B,
203624
204761
  Columns2 as C,
203625
204762
  DefaultBufferLength as D,
203626
- usePanelVisibility as E,
203627
- cycleTabsInActiveGroup as F,
203628
- cycleGridGroups as G,
203629
- R$4 as H,
204763
+ Plus as E,
204764
+ usePanelVisibility as F,
204765
+ cycleTabsInActiveGroup as G,
204766
+ cycleGridGroups as H,
203630
204767
  IterMode as I,
203631
- setAccDescription as J,
204768
+ R$4 as J,
203632
204769
  Ks as K,
203633
204770
  LanguageSupport as L,
203634
- getAccDescription as M,
204771
+ setAccDescription as M,
203635
204772
  Nt as N,
203636
- getAccTitle as O,
204773
+ getAccDescription as O,
203637
204774
  Parser$2 as P,
203638
204775
  Qe$1 as Q,
203639
204776
  Route2 as R,
203640
- setAccTitle as S,
204777
+ getAccTitle as S,
203641
204778
  Tree as T,
203642
- getConfig2 as U,
203643
- select as V,
203644
- log$1 as W,
204779
+ setAccTitle as U,
204780
+ getConfig2 as V,
204781
+ select as W,
203645
204782
  X$7 as X,
203646
- configureSvgSize as Y,
203647
- assignWithDepth_default as Z,
204783
+ log$1 as Y,
204784
+ configureSvgSize as Z,
203648
204785
  __name as _,
203649
204786
  Navigate as a,
203650
- insertCluster as a$,
203651
- sanitizeText as a0,
203652
- distExports as a1,
203653
- wrapLabel as a2,
203654
- common_default as a3,
203655
- calculateTextHeight as a4,
203656
- lineBreakRegex as a5,
203657
- setConfig2 as a6,
203658
- getRegisteredLayoutAlgorithm as a7,
203659
- render$1 as a8,
203660
- utils_default as a9,
203661
- abs$1 as aA,
203662
- pi as aB,
203663
- sqrt as aC,
203664
- atan2 as aD,
203665
- constant$1 as aE,
203666
- asin as aF,
203667
- acos as aG,
203668
- max as aH,
203669
- linear as aI,
203670
- getThemeVariables3 as aJ,
203671
- band as aK,
203672
- computeDimensionOfText as aL,
203673
- line$1 as aM,
203674
- hasKatex as aN,
203675
- calculateMathMLDimensions as aO,
203676
- parseFontSize as aP,
203677
- ZERO_WIDTH_SPACE as aQ,
203678
- getUrl as aR,
203679
- renderKatexSanitized as aS,
203680
- parseGenericTypes as aT,
203681
- curveBasis as aU,
203682
- generateId as aV,
203683
- setupGraphViewbox as aW,
203684
- isDark as aX,
203685
- lighten as aY,
203686
- darken as aZ,
203687
- commonDb_exports as a_,
203688
- setDiagramTitle as aa,
203689
- getDiagramTitle as ab,
203690
- load as ac,
203691
- JSON_SCHEMA as ad,
203692
- isValidShape as ae,
203693
- getEdgeId as af,
203694
- clear$2 as ag,
203695
- defaultConfig2 as ah,
203696
- rgba$1 as ai,
203697
- Utils as aj,
203698
- Color$1 as ak,
203699
- __export$1 as al,
203700
- setupGraphViewbox2 as am,
203701
- cleanAndMerge as an,
203702
- defaultConfig_default as ao,
203703
- getConfig as ap,
203704
- random as aq,
203705
- selectSvgElement as ar,
203706
- package_default as as,
203707
- withPath as at,
203708
- halfPi as au,
203709
- epsilon as av,
203710
- tau as aw,
203711
- cos as ax,
203712
- sin as ay,
203713
- min as az,
204787
+ commonDb_exports as a$,
204788
+ calculateTextWidth as a0,
204789
+ sanitizeText as a1,
204790
+ distExports as a2,
204791
+ wrapLabel as a3,
204792
+ common_default as a4,
204793
+ calculateTextHeight as a5,
204794
+ lineBreakRegex as a6,
204795
+ setConfig2 as a7,
204796
+ getRegisteredLayoutAlgorithm as a8,
204797
+ render$1 as a9,
204798
+ min as aA,
204799
+ abs$1 as aB,
204800
+ pi as aC,
204801
+ sqrt as aD,
204802
+ atan2 as aE,
204803
+ constant$1 as aF,
204804
+ asin as aG,
204805
+ acos as aH,
204806
+ max as aI,
204807
+ linear as aJ,
204808
+ getThemeVariables3 as aK,
204809
+ band as aL,
204810
+ computeDimensionOfText as aM,
204811
+ line$1 as aN,
204812
+ hasKatex as aO,
204813
+ calculateMathMLDimensions as aP,
204814
+ parseFontSize as aQ,
204815
+ ZERO_WIDTH_SPACE as aR,
204816
+ getUrl as aS,
204817
+ renderKatexSanitized as aT,
204818
+ parseGenericTypes as aU,
204819
+ curveBasis as aV,
204820
+ generateId as aW,
204821
+ setupGraphViewbox as aX,
204822
+ isDark as aY,
204823
+ lighten as aZ,
204824
+ darken as a_,
204825
+ utils_default as aa,
204826
+ setDiagramTitle as ab,
204827
+ getDiagramTitle as ac,
204828
+ load as ad,
204829
+ JSON_SCHEMA as ae,
204830
+ isValidShape as af,
204831
+ getEdgeId as ag,
204832
+ clear$2 as ah,
204833
+ defaultConfig2 as ai,
204834
+ rgba$1 as aj,
204835
+ Utils as ak,
204836
+ Color$1 as al,
204837
+ __export$1 as am,
204838
+ setupGraphViewbox2 as an,
204839
+ cleanAndMerge as ao,
204840
+ defaultConfig_default as ap,
204841
+ getConfig as aq,
204842
+ random as ar,
204843
+ selectSvgElement as as,
204844
+ package_default as at,
204845
+ withPath as au,
204846
+ halfPi as av,
204847
+ epsilon as aw,
204848
+ tau as ax,
204849
+ cos as ay,
204850
+ sin as az,
203714
204851
  LRLanguage as b,
203715
- cn$2 as b$,
203716
- insertNode as b0,
203717
- positionNode as b1,
203718
- getLineFunctionsWithOffset as b2,
203719
- evaluate as b3,
203720
- createText as b4,
203721
- getSubGraphTitleMargins as b5,
203722
- replaceIconSubstring as b6,
203723
- decodeEntities as b7,
203724
- getStylesFromArray as b8,
203725
- delimitedIndent as b9,
203726
- markers_default as bA,
203727
- clear2 as bB,
203728
- clear as bC,
203729
- clear$1 as bD,
203730
- updateNodeBounds as bE,
203731
- setNodeElem as bF,
203732
- insertEdge as bG,
203733
- positionEdgeLabel as bH,
203734
- insertEdgeLabel as bI,
203735
- loadSidebarWidth as bJ,
203736
- saveSidebarWidth as bK,
203737
- Ut$1 as bL,
203738
- Yt$1 as bM,
203739
- SIDEBAR_MAX_SIZE as bN,
203740
- SIDEBAR_MIN_SIZE as bO,
203741
- DashboardShell as bP,
203742
- Qt$1 as bQ,
203743
- MessageSquare as bR,
203744
- useIsDesktop as bS,
203745
- ToolbarOverflowProvider as bT,
203746
- ToolbarActionBar as bU,
203747
- isDesktop as bV,
203748
- array$2 as bW,
203749
- ordinal as bX,
203750
- Root$5 as bY,
203751
- Content$1 as bZ,
203752
- Close as b_,
203753
- NodeWeakMap as ba,
203754
- snippetCompletion as bb,
203755
- Tag as bc,
203756
- parseMixed as bd,
203757
- EditorSelection as be,
203758
- countColumn as bf,
203759
- Prec as bg,
203760
- keymap as bh,
203761
- EditorView as bi,
203762
- Language as bj,
203763
- indentUnit as bk,
203764
- foldService as bl,
203765
- defineLanguageFacet as bm,
203766
- CompletionContext as bn,
203767
- EditorState as bo,
203768
- languageDataProp as bp,
203769
- LanguageDescription as bq,
203770
- ParseContext as br,
203771
- bracketMatchingHandle as bs,
203772
- flatIndent as bt,
203773
- sublanguageProp as bu,
203774
- baseRest as bv,
203775
- isArrayLikeObject$1 as bw,
203776
- constant as bx,
203777
- isFunction$1 as by,
203778
- isEmpty as bz,
204852
+ Close as b$,
204853
+ insertCluster as b0,
204854
+ insertNode as b1,
204855
+ positionNode as b2,
204856
+ getLineFunctionsWithOffset as b3,
204857
+ evaluate as b4,
204858
+ createText as b5,
204859
+ getSubGraphTitleMargins as b6,
204860
+ replaceIconSubstring as b7,
204861
+ decodeEntities as b8,
204862
+ getStylesFromArray as b9,
204863
+ isEmpty as bA,
204864
+ markers_default as bB,
204865
+ clear2 as bC,
204866
+ clear as bD,
204867
+ clear$1 as bE,
204868
+ updateNodeBounds as bF,
204869
+ setNodeElem as bG,
204870
+ insertEdge as bH,
204871
+ positionEdgeLabel as bI,
204872
+ insertEdgeLabel as bJ,
204873
+ loadSidebarWidth as bK,
204874
+ saveSidebarWidth as bL,
204875
+ Ut$1 as bM,
204876
+ Yt$1 as bN,
204877
+ SIDEBAR_MAX_SIZE as bO,
204878
+ SIDEBAR_MIN_SIZE as bP,
204879
+ DashboardShell as bQ,
204880
+ Qt$1 as bR,
204881
+ MessageSquare as bS,
204882
+ useIsDesktop as bT,
204883
+ ToolbarOverflowProvider as bU,
204884
+ ToolbarActionBar as bV,
204885
+ isDesktop as bW,
204886
+ array$2 as bX,
204887
+ ordinal as bY,
204888
+ Root$5 as bZ,
204889
+ Content$1 as b_,
204890
+ delimitedIndent as ba,
204891
+ NodeWeakMap as bb,
204892
+ snippetCompletion as bc,
204893
+ Tag as bd,
204894
+ parseMixed as be,
204895
+ EditorSelection as bf,
204896
+ countColumn as bg,
204897
+ Prec as bh,
204898
+ keymap as bi,
204899
+ EditorView as bj,
204900
+ Language as bk,
204901
+ indentUnit as bl,
204902
+ foldService as bm,
204903
+ defineLanguageFacet as bn,
204904
+ CompletionContext as bo,
204905
+ EditorState as bp,
204906
+ languageDataProp as bq,
204907
+ LanguageDescription as br,
204908
+ ParseContext as bs,
204909
+ bracketMatchingHandle as bt,
204910
+ flatIndent as bu,
204911
+ sublanguageProp as bv,
204912
+ baseRest as bw,
204913
+ isArrayLikeObject$1 as bx,
204914
+ constant as by,
204915
+ isFunction$1 as bz,
203779
204916
  continuedIndent as c,
203780
- dayjs2 as c$,
203781
- Title as c0,
203782
- Description as c1,
203783
- Portal$4 as c2,
203784
- Overlay$1 as c3,
203785
- GitCompare as c4,
203786
- FolderOpen as c5,
203787
- useDashboardStore as c6,
203788
- DesktopDragRegion as c7,
203789
- Menu$1 as c8,
203790
- ChevronsUpDown as c9,
203791
- ZOOM_CSS_VAR as cA,
203792
- invoke as cB,
203793
- listen as cC,
203794
- reactDomExports as cD,
203795
- Globe as cE,
203796
- Popover as cF,
203797
- PopoverTrigger as cG,
203798
- PopoverContent as cH,
203799
- Search as cI,
203800
- Trash2 as cJ,
203801
- DropdownMenu as cK,
203802
- DropdownMenuTrigger as cL,
203803
- ChevronDown as cM,
203804
- DropdownMenuContent as cN,
203805
- DropdownMenuItem as cO,
203806
- TriangleAlert as cP,
203807
- RotateCw as cQ,
203808
- Rgb as cR,
203809
- rgbConvert as cS,
203810
- define as cT,
203811
- extend$2 as cU,
203812
- Color as cV,
203813
- nogamma as cW,
203814
- hue as cX,
203815
- time$2 as cY,
203816
- min$1 as cZ,
203817
- max$1 as c_,
203818
- DiffView as ca,
203819
- CodeBrowserView as cb,
203820
- QuickOpenDialog as cc,
203821
- SearchFilesDialog as cd,
203822
- WorkspacePickerDialog as ce,
203823
- useDiffTarget as cf,
203824
- useSettingsQuery as cg,
203825
- agentTypeSupportsSessionListing as ch,
203826
- ChatView as ci,
203827
- getUserDefinedConfig as cj,
203828
- getIconSVG as ck,
203829
- registerIconPacks as cl,
203830
- unknownIcon as cm,
203831
- isFilePath as cn,
203832
- writeClipboardText as co,
203833
- readClipboardText as cp,
203834
- ArrowLeft as cq,
203835
- ArrowUp as cr,
203836
- ArrowDown as cs,
203837
- ArrowRight as ct,
203838
- ClipboardCopy as cu,
203839
- ClipboardPaste as cv,
203840
- getCurrentZoomLevel as cw,
203841
- openExternalUrl as cx,
203842
- subscribeToZoomChanges as cy,
203843
- SearchBar as cz,
204917
+ timeSunday as c$,
204918
+ cn$2 as c0,
204919
+ Title as c1,
204920
+ Description as c2,
204921
+ Portal$4 as c3,
204922
+ Overlay$1 as c4,
204923
+ GitCompare as c5,
204924
+ FolderOpen as c6,
204925
+ useDashboardStore as c7,
204926
+ DesktopDragRegion as c8,
204927
+ Menu$1 as c9,
204928
+ reactDomExports as cA,
204929
+ Globe as cB,
204930
+ Popover as cC,
204931
+ PopoverTrigger as cD,
204932
+ PopoverContent as cE,
204933
+ Search as cF,
204934
+ Trash2 as cG,
204935
+ DropdownMenu as cH,
204936
+ DropdownMenuTrigger as cI,
204937
+ ChevronDown as cJ,
204938
+ DropdownMenuContent as cK,
204939
+ DropdownMenuItem as cL,
204940
+ TriangleAlert as cM,
204941
+ RotateCw as cN,
204942
+ Rgb as cO,
204943
+ rgbConvert as cP,
204944
+ define as cQ,
204945
+ extend$2 as cR,
204946
+ Color as cS,
204947
+ nogamma as cT,
204948
+ hue as cU,
204949
+ time$2 as cV,
204950
+ min$1 as cW,
204951
+ max$1 as cX,
204952
+ dayjs2 as cY,
204953
+ timeFormat as cZ,
204954
+ timeMonth as c_,
204955
+ ChevronsUpDown as ca,
204956
+ DiffView as cb,
204957
+ CodeBrowserView as cc,
204958
+ QuickOpenDialog as cd,
204959
+ SearchFilesDialog as ce,
204960
+ WorkspacePickerDialog as cf,
204961
+ useDiffTarget as cg,
204962
+ useSettingsQuery as ch,
204963
+ agentTypeSupportsSessionListing as ci,
204964
+ ChatView as cj,
204965
+ getUserDefinedConfig as ck,
204966
+ writeClipboardText as cl,
204967
+ readClipboardText as cm,
204968
+ ArrowLeft as cn,
204969
+ ArrowUp as co,
204970
+ ArrowDown as cp,
204971
+ ArrowRight as cq,
204972
+ ClipboardCopy as cr,
204973
+ ClipboardPaste as cs,
204974
+ getOrCreateTerminal as ct,
204975
+ SearchBar as cu,
204976
+ getIconSVG as cv,
204977
+ registerIconPacks as cw,
204978
+ unknownIcon as cx,
204979
+ invoke as cy,
204980
+ listen as cz,
203844
204981
  foldInside as d,
203845
- timeFormat as d0,
203846
- timeMonth as d1,
203847
- timeSunday as d2,
203848
- timeSaturday as d3,
203849
- timeFriday as d4,
203850
- timeThursday as d5,
203851
- timeWednesday as d6,
203852
- timeTuesday as d7,
203853
- timeMonday as d8,
203854
- timeDay as d9,
203855
- arrayLikeKeys as dA,
203856
- baseKeys as dB,
203857
- memoize as dC,
203858
- isArguments$1 as dD,
203859
- copyObject as dE,
203860
- getPrototype as dF,
203861
- cloneArrayBuffer as dG,
203862
- cloneTypedArray as dH,
203863
- getTag$1 as dI,
203864
- nodeUtil as dJ,
203865
- copyArray as dK,
203866
- isBuffer$1 as dL,
203867
- cloneBuffer as dM,
203868
- initCloneObject as dN,
203869
- Stack as dO,
203870
- MapCache as dP,
203871
- Uint8Array$1 as dQ,
203872
- isTypedArray$1 as dR,
203873
- isLength$1 as dS,
203874
- Set$1 as dT,
203875
- createAssigner as dU,
203876
- isPrototype as dV,
203877
- router as dW,
203878
- timeHour as da,
203879
- timeMinute as db,
203880
- second as dc,
203881
- millisecond as dd,
203882
- isObject$2 as de,
203883
- isIterateeCall$1 as df,
203884
- keysIn as dg,
203885
- eq as dh,
203886
- isArrayLike$1 as di,
203887
- isArray$1 as dj,
203888
- identity$1 as dk,
203889
- isIndex$1 as dl,
203890
- assignValue as dm,
203891
- format as dn,
203892
- styles2String as dp,
203893
- isLabelStyle as dq,
203894
- setToString as dr,
203895
- overRest as ds,
203896
- baseFor as dt,
203897
- baseAssignValue as du,
203898
- baseUnary as dv,
203899
- merge$1 as dw,
203900
- isObjectLike$1 as dx,
203901
- baseGetTag as dy,
203902
- Symbol$1 as dz,
204982
+ timeSaturday as d0,
204983
+ timeFriday as d1,
204984
+ timeThursday as d2,
204985
+ timeWednesday as d3,
204986
+ timeTuesday as d4,
204987
+ timeMonday as d5,
204988
+ timeDay as d6,
204989
+ timeHour as d7,
204990
+ timeMinute as d8,
204991
+ second as d9,
204992
+ isArguments$1 as dA,
204993
+ copyObject as dB,
204994
+ getPrototype as dC,
204995
+ cloneArrayBuffer as dD,
204996
+ cloneTypedArray as dE,
204997
+ getTag$1 as dF,
204998
+ nodeUtil as dG,
204999
+ copyArray as dH,
205000
+ isBuffer$1 as dI,
205001
+ cloneBuffer as dJ,
205002
+ initCloneObject as dK,
205003
+ Stack as dL,
205004
+ MapCache as dM,
205005
+ Uint8Array$1 as dN,
205006
+ isTypedArray$1 as dO,
205007
+ isLength$1 as dP,
205008
+ Set$1 as dQ,
205009
+ createAssigner as dR,
205010
+ isPrototype as dS,
205011
+ router as dT,
205012
+ millisecond as da,
205013
+ isObject$2 as db,
205014
+ isIterateeCall$1 as dc,
205015
+ keysIn as dd,
205016
+ eq as de,
205017
+ isArrayLike$1 as df,
205018
+ isArray$1 as dg,
205019
+ identity$1 as dh,
205020
+ isIndex$1 as di,
205021
+ assignValue as dj,
205022
+ format as dk,
205023
+ styles2String as dl,
205024
+ isLabelStyle as dm,
205025
+ setToString as dn,
205026
+ overRest as dp,
205027
+ baseFor as dq,
205028
+ baseAssignValue as dr,
205029
+ baseUnary as ds,
205030
+ merge$1 as dt,
205031
+ isObjectLike$1 as du,
205032
+ baseGetTag as dv,
205033
+ Symbol$1 as dw,
205034
+ arrayLikeKeys as dx,
205035
+ baseKeys as dy,
205036
+ memoize as dz,
203903
205037
  ifNotIn as e,
203904
205038
  foldNodeProp as f,
203905
205039
  completeFromList as g,
@@ -203913,13 +205047,13 @@ export {
203913
205047
  useQuery as o,
203914
205048
  trpc as p,
203915
205049
  selectNeighbourBeforeRemove as q,
203916
- centralPanelPosition as r,
205050
+ disposeTerminal as r,
203917
205051
  styleTags as s,
203918
205052
  tags$1 as t,
203919
205053
  useAdapter as u,
203920
- ensureEdgeGroups as v,
203921
- attachEdgeGroupDragVisibility as w,
203922
- registerInnerDockview as x,
203923
- PanelVisibilityContext as y,
203924
- DockviewReact as z
205054
+ centralPanelPosition as v,
205055
+ ensureEdgeGroups as w,
205056
+ attachEdgeGroupDragVisibility as x,
205057
+ registerInnerDockview as y,
205058
+ PanelVisibilityContext as z
203925
205059
  };