@band-app/server 0.19.1 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/dist/client/assets/DockviewBrowserContainer-DqC_h-bo.js +5 -0
  2. package/dist/client/assets/{DockviewTerminalContainer-DWva1wNl.js → DockviewTerminalContainer-DyBQtb3U.js} +2 -2
  3. package/dist/client/assets/TerminalPanel-CFDxHN4Q.js +5 -0
  4. package/dist/client/assets/{_basePickBy-CV44VSwA.js → _basePickBy-Dcf1Y8Iq.js} +1 -1
  5. package/dist/client/assets/{_baseUniq-Bqa44Er5.js → _baseUniq-Cy98IGsx.js} +1 -1
  6. package/dist/client/assets/{arc-4rU3SEWf.js → arc-rOBphWj1.js} +1 -1
  7. package/dist/client/assets/{architectureDiagram-VXUJARFQ-CapSrTlr.js → architectureDiagram-VXUJARFQ-C54lj_mp.js} +1 -1
  8. package/dist/client/assets/{blockDiagram-VD42YOAC-DnapbSnI.js → blockDiagram-VD42YOAC-IXpkKl99.js} +1 -1
  9. package/dist/client/assets/{c4Diagram-YG6GDRKO-9mZ9PPiM.js → c4Diagram-YG6GDRKO-eHkAJFz1.js} +1 -1
  10. package/dist/client/assets/channel-DDj6wNE3.js +1 -0
  11. package/dist/client/assets/{chunk-4BX2VUAB--rr32b4E.js → chunk-4BX2VUAB-BVtvPQLw.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-DfxuD1M3.js → chunk-55IACEB6-DWUF7TBt.js} +1 -1
  13. package/dist/client/assets/{chunk-B4BG7PRW-CxvnNatf.js → chunk-B4BG7PRW-BT2NV-OP.js} +1 -1
  14. package/dist/client/assets/{chunk-DI55MBZ5-F51NTwRL.js → chunk-DI55MBZ5-Cg5CF9C8.js} +1 -1
  15. package/dist/client/assets/{chunk-FMBD7UC4-S03fYfOP.js → chunk-FMBD7UC4-B0SYeHBH.js} +1 -1
  16. package/dist/client/assets/{chunk-QN33PNHL-BQWA4OqL.js → chunk-QN33PNHL-C5tEKH2s.js} +1 -1
  17. package/dist/client/assets/{chunk-QZHKN3VN-DuLFP0og.js → chunk-QZHKN3VN-B3eOtTKT.js} +1 -1
  18. package/dist/client/assets/{chunk-TZMSLE5B-BXGn_e4G.js → chunk-TZMSLE5B-C2LU8iG2.js} +1 -1
  19. package/dist/client/assets/classDiagram-2ON5EDUG-DEMr_v7L.js +1 -0
  20. package/dist/client/assets/classDiagram-v2-WZHVMYZB-DEMr_v7L.js +1 -0
  21. package/dist/client/assets/clone-BsghsKY1.js +1 -0
  22. package/dist/client/assets/{cose-bilkent-S5V4N54A-BD5JLmQ6.js → cose-bilkent-S5V4N54A-DMEstRG3.js} +1 -1
  23. package/dist/client/assets/{dagre-6UL2VRFP-jd9MqFa1.js → dagre-6UL2VRFP-Dnk33exg.js} +1 -1
  24. package/dist/client/assets/{diagram-PSM6KHXK-Bv0WGkj7.js → diagram-PSM6KHXK-mrXKTY_T.js} +1 -1
  25. package/dist/client/assets/{diagram-QEK2KX5R-oszH6q3s.js → diagram-QEK2KX5R-BzHK-hsq.js} +1 -1
  26. package/dist/client/assets/{diagram-S2PKOQOG-D7rVDuLY.js → diagram-S2PKOQOG-CQCxQKV-.js} +1 -1
  27. package/dist/client/assets/{erDiagram-Q2GNP2WA-BL9gntWo.js → erDiagram-Q2GNP2WA-BPDJfava.js} +1 -1
  28. package/dist/client/assets/{flowDiagram-NV44I4VS-1FCz1fgN.js → flowDiagram-NV44I4VS-C6Mmdoua.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-JELNMOA3-DggjOINy.js → ganttDiagram-JELNMOA3-DLbgXlJh.js} +1 -1
  30. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-uoayvKXp.js → gitGraphDiagram-V2S2FVAM-DVLRTDa6.js} +1 -1
  31. package/dist/client/assets/{graph-CKeOhxc0.js → graph-Cwyvupsz.js} +1 -1
  32. package/dist/client/assets/{highlighted-body-B3W2YXNL-BfaZeU0X.js → highlighted-body-B3W2YXNL-C0bhSLak.js} +1 -1
  33. package/dist/client/assets/{index-Ddvrjwlp.js → index-8fmEfQXt.js} +1 -1
  34. package/dist/client/assets/{index-kGHlsI7U.js → index-8qew1yXR.js} +1 -1
  35. package/dist/client/assets/{index-BVhi8EPL.js → index-BEfdqN9O.js} +1 -1
  36. package/dist/client/assets/{index-DsvlvI8i.js → index-BjRdyIjf.js} +1 -1
  37. package/dist/client/assets/{index-BhrvrUs_.js → index-BwEcNyXc.js} +1 -1
  38. package/dist/client/assets/{index-Be24TlVT.js → index-Bx_OaRaP.js} +1 -1
  39. package/dist/client/assets/{index-Doe-oMI1.js → index-BzF5H3v-.js} +1 -1
  40. package/dist/client/assets/{index-BOdO7r_p.js → index-CA4qMsBj.js} +1 -1
  41. package/dist/client/assets/{index-SC22AP5M.js → index-CCvDsqEy.js} +1 -1
  42. package/dist/client/assets/{index-DTOEFzQN.js → index-CXNMB7pL.js} +1 -1
  43. package/dist/client/assets/{index-Cx9QoFI1.js → index-CbBtBBYr.js} +1 -1
  44. package/dist/client/assets/{index-BZW8u43a.js → index-CqhJvfhF.js} +1 -1
  45. package/dist/client/assets/{index-DtoczokG.js → index-DWLuzOpi.js} +1 -1
  46. package/dist/client/assets/{index-CdwShVnF.js → index-DsTs1gei.js} +1 -1
  47. package/dist/client/assets/{index-ro4XgOVe.js → index-ERt8cxUV.js} +1 -1
  48. package/dist/client/assets/{index-BmEmzTZO.js → index-FSq9CQql.js} +1 -1
  49. package/dist/client/assets/{index-bY8CiPGQ.js → index-UCQ1zVBi.js} +1 -1
  50. package/dist/client/assets/{index-ChvBXbK8.js → index-fifqJXyx.js} +1 -1
  51. package/dist/client/assets/{infoDiagram-HS3SLOUP-9HRNM_Iq.js → infoDiagram-HS3SLOUP-7Hhl73vO.js} +1 -1
  52. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-BYEjH_SV.js → journeyDiagram-XKPGCS4Q-CJcXgH51.js} +1 -1
  53. package/dist/client/assets/{kanban-definition-3W4ZIXB7-s6ZYKbvm.js → kanban-definition-3W4ZIXB7-CBsuk1vp.js} +1 -1
  54. package/dist/client/assets/{layout-DlcfRJkl.js → layout-ZjLAsNj-.js} +1 -1
  55. package/dist/client/assets/{main-DsoPLGrb.css → main-BzKe6bG7.css} +1 -1
  56. package/dist/client/assets/{main-Ct1o5WmJ.js → main-QmYiKgqv.js} +271 -271
  57. package/dist/client/assets/{mindmap-definition-VGOIOE7T-CDeQcF1U.js → mindmap-definition-VGOIOE7T-doqFtLjy.js} +1 -1
  58. package/dist/client/assets/{pieDiagram-ADFJNKIX-CWdMTKnD.js → pieDiagram-ADFJNKIX-Bzaqqvl9.js} +1 -1
  59. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-C-Zcxmv2.js → quadrantDiagram-AYHSOK5B-DxzHu9fl.js} +1 -1
  60. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-B3JunJUh.js → requirementDiagram-UZGBJVZJ-Cp3foAel.js} +1 -1
  61. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-BRUxMlQD.js → sankeyDiagram-TZEHDZUN-BQx6TKI3.js} +1 -1
  62. package/dist/client/assets/{sequenceDiagram-WL72ISMW--nulyPWN.js → sequenceDiagram-WL72ISMW-Cd_242bL.js} +1 -1
  63. package/dist/client/assets/{square-terminal-xTmJg69x.js → square-terminal-bliRzpRN.js} +1 -1
  64. package/dist/client/assets/{stateDiagram-FKZM4ZOC-DUZeZHou.js → stateDiagram-FKZM4ZOC-GZM9iqTD.js} +1 -1
  65. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-yLFyTsJU.js +1 -0
  66. package/dist/client/assets/{timeline-definition-IT6M3QCI-DgsIAJxu.js → timeline-definition-IT6M3QCI-D5mcm-Qu.js} +1 -1
  67. package/dist/client/assets/{treemap-GDKQZRPO-DzbbBVNz.js → treemap-GDKQZRPO-CkKCE0F7.js} +1 -1
  68. package/dist/client/assets/{workspace._workspaceId-C2eftsxg.js → workspace._workspaceId-CQVHqxcU.js} +1 -1
  69. package/dist/client/assets/{workspace._workspaceId-CX0zbe5I.js → workspace._workspaceId-DFvkHRHC.js} +2 -2
  70. package/dist/client/assets/{xychartDiagram-PRI3JC2R-B11oaEXR.js → xychartDiagram-PRI3JC2R-Djg2lfgU.js} +1 -1
  71. package/dist/migrations/20260619184346_drop_tasks_max_turns/migration.sql +1 -0
  72. package/dist/migrations/20260619184346_drop_tasks_max_turns/snapshot.json +1157 -0
  73. package/dist/openapi.json +268 -48
  74. package/dist/server/assets/{DockviewBrowserContainer-BcfLe0jL.js → DockviewBrowserContainer-Btjtd2O1.js} +29 -34
  75. package/dist/server/assets/{DockviewTerminalContainer-zVckKR1x.js → DockviewTerminalContainer-bMEUzx6R.js} +3 -3
  76. package/dist/server/assets/{TerminalPanel-7JfdUecD.js → TerminalPanel-DDazs1HR.js} +1 -49
  77. package/dist/server/assets/{_basePickBy-3tZLkfZU.js → _basePickBy-BR2ebl6H.js} +2 -2
  78. package/dist/server/assets/{_baseUniq-Dz_kdarY.js → _baseUniq-C7-_tYXk.js} +1 -1
  79. package/dist/server/assets/_tanstack-start-manifest_v-TcfwNbuH.js +4 -0
  80. package/dist/server/assets/{arc-B7a2pVpn.js → arc-CWFSWY_u.js} +1 -1
  81. package/dist/server/assets/{architecture-7HQA4BMR-9XWqJEVf.js → architecture-7HQA4BMR-DDMO671Z.js} +6 -6
  82. package/dist/server/assets/{architectureDiagram-VXUJARFQ-Vt3dNClh.js → architectureDiagram-VXUJARFQ-vPxmruSN.js} +6 -6
  83. package/dist/server/assets/{blockDiagram-VD42YOAC-DR7gt_eL.js → blockDiagram-VD42YOAC-DGV6m5iW.js} +6 -6
  84. package/dist/server/assets/{c4Diagram-YG6GDRKO-DYC3sqOW.js → c4Diagram-YG6GDRKO-9PjJESuA.js} +2 -2
  85. package/dist/server/assets/{channel-DzI1wGYl.js → channel-DzyKDZfe.js} +1 -1
  86. package/dist/server/assets/{chunk-4BX2VUAB-DVHBGPAd.js → chunk-4BX2VUAB-MyrUiBmB.js} +1 -1
  87. package/dist/server/assets/{chunk-55IACEB6-BXeWT-V1.js → chunk-55IACEB6-CJ4fKFif.js} +1 -1
  88. package/dist/server/assets/{chunk-B4BG7PRW-BngOdF6s.js → chunk-B4BG7PRW-CKzqfTU-.js} +4 -4
  89. package/dist/server/assets/{chunk-DI55MBZ5-Co1ugmE2.js → chunk-DI55MBZ5-DrXLxcKs.js} +3 -3
  90. package/dist/server/assets/{chunk-FMBD7UC4-BSvY40K1.js → chunk-FMBD7UC4-yeB6m7NE.js} +1 -1
  91. package/dist/server/assets/{chunk-QN33PNHL-Bld2F-bV.js → chunk-QN33PNHL-qCq8pCkn.js} +1 -1
  92. package/dist/server/assets/{chunk-QZHKN3VN-CbcRrDQ5.js → chunk-QZHKN3VN-CHvK5Ic5.js} +1 -1
  93. package/dist/server/assets/{chunk-TZMSLE5B-FZqT6NRx.js → chunk-TZMSLE5B-wF9ZPcJp.js} +1 -1
  94. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-CqTf3oAt.js → classDiagram-2ON5EDUG-D1OcdIXp.js} +5 -5
  95. package/dist/server/assets/{classDiagram-2ON5EDUG-CqTf3oAt.js → classDiagram-v2-WZHVMYZB-D1OcdIXp.js} +5 -5
  96. package/dist/server/assets/{clone-DFaP-n7G.js → clone-BH4YtRmr.js} +1 -1
  97. package/dist/server/assets/{cose-bilkent-S5V4N54A-Cm4DnyNk.js → cose-bilkent-S5V4N54A-BiP6P-09.js} +1 -1
  98. package/dist/server/assets/{dagre-6UL2VRFP-DWtR7ypz.js → dagre-6UL2VRFP-BKfzYlJQ.js} +6 -6
  99. package/dist/server/assets/{diagram-PSM6KHXK-3K0tKsmi.js → diagram-PSM6KHXK-BF6r9xQS.js} +7 -7
  100. package/dist/server/assets/{diagram-QEK2KX5R-C_GABXU2.js → diagram-QEK2KX5R-CxL6qeVX.js} +6 -6
  101. package/dist/server/assets/{diagram-S2PKOQOG-x_2H2okG.js → diagram-S2PKOQOG-CUKugrbt.js} +6 -6
  102. package/dist/server/assets/{erDiagram-Q2GNP2WA-DYAuTF-e.js → erDiagram-Q2GNP2WA-CRPjeaHB.js} +4 -4
  103. package/dist/server/assets/{flowDiagram-NV44I4VS-CMgKpatm.js → flowDiagram-NV44I4VS-CXnLZPl0.js} +5 -5
  104. package/dist/server/assets/{ganttDiagram-JELNMOA3-BqUjIeN-.js → ganttDiagram-JELNMOA3-CP5EwGxj.js} +1 -1
  105. package/dist/server/assets/{gitGraph-G5XIXVHT-BOFl30qK.js → gitGraph-G5XIXVHT-UYMoyufq.js} +6 -6
  106. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-CSFtzM0S.js → gitGraphDiagram-V2S2FVAM-CZNtwgUE.js} +7 -7
  107. package/dist/server/assets/{graph-Da9wNyd4.js → graph-BB1_2Q0x.js} +2 -2
  108. package/dist/server/assets/{highlighted-body-B3W2YXNL-CSDiX8tu.js → highlighted-body-B3W2YXNL-C6BqMnvu.js} +1 -1
  109. package/dist/server/assets/{index-CFVkYUnG.js → index-B5V3PU-n.js} +2 -2
  110. package/dist/server/assets/{index-ZFp3vFxe.js → index-BHQ8bMg_.js} +3 -3
  111. package/dist/server/assets/{index-D9Pfuy6s.js → index-BUm0x4GN.js} +2 -2
  112. package/dist/server/assets/{index-DC0ng9YX.js → index-Bay77lf3.js} +2 -2
  113. package/dist/server/assets/{index-C-7KLTyL.js → index-BbUtF3L1.js} +2 -2
  114. package/dist/server/assets/{index-ki-c1Gyj.js → index-Bme4JhwA.js} +1 -1
  115. package/dist/server/assets/{index-CrGR0Fcd.js → index-CMxtCPk9.js} +2 -2
  116. package/dist/server/assets/{index-Av31QpwJ.js → index-Ct5-lZTn.js} +2 -2
  117. package/dist/server/assets/{index-BZPQn4AB.js → index-D49PP401.js} +3 -3
  118. package/dist/server/assets/{index-CjJe7VSH.js → index-D5hMY11m.js} +4 -4
  119. package/dist/server/assets/{index-DwBbgNmR.js → index-DC1gaho7.js} +5 -5
  120. package/dist/server/assets/{index-CqNkm5pZ.js → index-DH3a6-do.js} +2 -2
  121. package/dist/server/assets/{index-DkCUbYql.js → index-DLEtsdeb.js} +2 -2
  122. package/dist/server/assets/{index-BXCk5sug.js → index-DLV7EX0H.js} +1 -1
  123. package/dist/server/assets/{index-CFt-wi4p.js → index-Dqk2jQZ7.js} +2 -2
  124. package/dist/server/assets/{index-CS2NcwnS.js → index-DrWaYPW7.js} +2 -2
  125. package/dist/server/assets/{index-B9YQ_ief.js → index-DsrV0B5O.js} +5 -5
  126. package/dist/server/assets/{index-iQ9auLjI.js → index-lmhecPWc.js} +2 -2
  127. package/dist/server/assets/{info-VBDWY6EO-mGUaI27c.js → info-VBDWY6EO-X8DJfp6J.js} +6 -6
  128. package/dist/server/assets/{infoDiagram-HS3SLOUP-CMic1Hhh.js → infoDiagram-HS3SLOUP-BqzWimk3.js} +5 -5
  129. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-CravZq_h.js → journeyDiagram-XKPGCS4Q-TTA7OGV5.js} +4 -4
  130. package/dist/server/assets/{kanban-definition-3W4ZIXB7-Ik9j3Xny.js → kanban-definition-3W4ZIXB7-DxNhleha.js} +2 -2
  131. package/dist/server/assets/{layout-DNctAx-v.js → layout-CdOkK52n.js} +4 -4
  132. package/dist/server/assets/{mermaid-3ZIDBTTL-Bo2_mtnV.js → mermaid-3ZIDBTTL-Cof8t4J_.js} +1 -1
  133. package/dist/server/assets/{mermaid-parser.core-oaV6PZnA.js → mermaid-parser.core-Cqz_DwKC.js} +11 -11
  134. package/dist/server/assets/{mindmap-definition-VGOIOE7T-DNTQXwUn.js → mindmap-definition-VGOIOE7T-DeGYTIld.js} +3 -3
  135. package/dist/server/assets/{packet-DYOGHKS2-Bm5PEDRe.js → packet-DYOGHKS2-TuIP3-Qx.js} +6 -6
  136. package/dist/server/assets/{pie-VRWISCQL-BOs-4VKW.js → pie-VRWISCQL-DH44dC73.js} +6 -6
  137. package/dist/server/assets/{pieDiagram-ADFJNKIX-CEDLfCSy.js → pieDiagram-ADFJNKIX-BPUa7SIP.js} +7 -7
  138. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-CWfJcZnB.js → quadrantDiagram-AYHSOK5B-CkonmhO6.js} +1 -1
  139. package/dist/server/assets/{radar-ZZBFDIW7-CMUO9a2O.js → radar-ZZBFDIW7-oedT_dlV.js} +6 -6
  140. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-0SINZ3cV.js → requirementDiagram-UZGBJVZJ-B39ng8tF.js} +3 -3
  141. package/dist/server/assets/{router-PewB2VMR.js → router-Dz7oMBKX.js} +2331 -453
  142. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-U0rb6LX8.js → sankeyDiagram-TZEHDZUN-61A7I6h9.js} +1 -1
  143. package/dist/server/assets/{sequenceDiagram-WL72ISMW-BV5_vSVf.js → sequenceDiagram-WL72ISMW-CXIpjJu4.js} +3 -3
  144. package/dist/server/assets/{square-terminal-DdT3sDE4.js → square-terminal-D86hckth.js} +1 -1
  145. package/dist/server/assets/{stateDiagram-FKZM4ZOC-C3wAlRbY.js → stateDiagram-FKZM4ZOC-DSp5PEkn.js} +8 -8
  146. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-BvzsTmR_.js → stateDiagram-v2-4FDKWEC3-B5TiwK_8.js} +4 -4
  147. package/dist/server/assets/{timeline-definition-IT6M3QCI-BwVTrWyj.js → timeline-definition-IT6M3QCI-DvosEzgh.js} +2 -2
  148. package/dist/server/assets/{treemap-GDKQZRPO-Bohb153V.js → treemap-GDKQZRPO-BOdkONyj.js} +6 -6
  149. package/dist/server/assets/{workspace._workspaceId-BWs5oKO5.js → workspace._workspaceId-CvbciLVC.js} +3 -3
  150. package/dist/server/assets/{workspace._workspaceId-DkyiAy0e.js → workspace._workspaceId-Dcw9dnbJ.js} +1 -1
  151. package/dist/server/assets/{xychartDiagram-PRI3JC2R-XlYGoU4Z.js → xychartDiagram-PRI3JC2R-C22gtuGl.js} +1 -1
  152. package/dist/server/server.js +2 -2
  153. package/dist/start-server.mjs +1871 -816
  154. package/package.json +5 -4
  155. package/dist/client/assets/DockviewBrowserContainer-4SeBGy5m.js +0 -5
  156. package/dist/client/assets/TerminalPanel-CEmBYkjb.js +0 -5
  157. package/dist/client/assets/channel-NIcS3uxn.js +0 -1
  158. package/dist/client/assets/classDiagram-2ON5EDUG-8p3oACYV.js +0 -1
  159. package/dist/client/assets/classDiagram-v2-WZHVMYZB-8p3oACYV.js +0 -1
  160. package/dist/client/assets/clone-Be31g1pc.js +0 -1
  161. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-nq3cGsuB.js +0 -1
  162. package/dist/server/assets/_tanstack-start-manifest_v-BBzH3QaA.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$1q = [
1229
+ const __iconNode$1r = [
1230
1230
  [
1231
1231
  "path",
1232
1232
  {
@@ -1235,45 +1235,45 @@ const __iconNode$1q = [
1235
1235
  }
1236
1236
  ]
1237
1237
  ];
1238
- const Activity = createLucideIcon("activity", __iconNode$1q);
1239
- const __iconNode$1p = [
1238
+ const Activity = createLucideIcon("activity", __iconNode$1r);
1239
+ const __iconNode$1q = [
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$1p);
1245
- const __iconNode$1o = [
1244
+ const ArrowDownToLine = createLucideIcon("arrow-down-to-line", __iconNode$1q);
1245
+ const __iconNode$1p = [
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$1o);
1250
- const __iconNode$1n = [
1249
+ const ArrowDown = createLucideIcon("arrow-down", __iconNode$1p);
1250
+ const __iconNode$1o = [
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$1n);
1255
- const __iconNode$1m = [
1254
+ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$1o);
1255
+ const __iconNode$1n = [
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$1m);
1260
- const __iconNode$1l = [
1259
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$1n);
1260
+ const __iconNode$1m = [
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$1l);
1266
- const __iconNode$1k = [
1265
+ const ArrowUpFromLine = createLucideIcon("arrow-up-from-line", __iconNode$1m);
1266
+ const __iconNode$1l = [
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$1k);
1271
- const __iconNode$1j = [
1270
+ const ArrowUp = createLucideIcon("arrow-up", __iconNode$1l);
1271
+ const __iconNode$1k = [
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$1j);
1276
- const __iconNode$1i = [
1275
+ const Ban = createLucideIcon("ban", __iconNode$1k);
1276
+ const __iconNode$1j = [
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,69 +1281,69 @@ const __iconNode$1i = [
1281
1281
  ["path", { d: "M15 13v2", key: "1xurst" }],
1282
1282
  ["path", { d: "M9 13v2", key: "rq6x2g" }]
1283
1283
  ];
1284
- const Bot = createLucideIcon("bot", __iconNode$1i);
1285
- const __iconNode$1h = [
1284
+ const Bot = createLucideIcon("bot", __iconNode$1j);
1285
+ const __iconNode$1i = [
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$1h);
1292
- const __iconNode$1g = [
1291
+ const CaseSensitive = createLucideIcon("case-sensitive", __iconNode$1i);
1292
+ const __iconNode$1h = [
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$1g);
1299
- const __iconNode$1f = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
1300
- const Check = createLucideIcon("check", __iconNode$1f);
1301
- const __iconNode$1e = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1302
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$1e);
1303
- const __iconNode$1d = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
1304
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1d);
1305
- const __iconNode$1c = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1306
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$1c);
1307
- const __iconNode$1b = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
1308
- const ChevronUp = createLucideIcon("chevron-up", __iconNode$1b);
1309
- const __iconNode$1a = [
1298
+ const ChartColumn = createLucideIcon("chart-column", __iconNode$1h);
1299
+ const __iconNode$1g = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
1300
+ const Check = createLucideIcon("check", __iconNode$1g);
1301
+ const __iconNode$1f = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1302
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$1f);
1303
+ const __iconNode$1e = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
1304
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1e);
1305
+ const __iconNode$1d = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1306
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$1d);
1307
+ const __iconNode$1c = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
1308
+ const ChevronUp = createLucideIcon("chevron-up", __iconNode$1c);
1309
+ const __iconNode$1b = [
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$1a);
1314
- const __iconNode$19 = [
1313
+ const ChevronsDownUp = createLucideIcon("chevrons-down-up", __iconNode$1b);
1314
+ const __iconNode$1a = [
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$19);
1319
- const __iconNode$18 = [
1318
+ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$1a);
1319
+ const __iconNode$19 = [
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$18);
1325
- const __iconNode$17 = [
1324
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$19);
1325
+ const __iconNode$18 = [
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$17);
1330
- const __iconNode$16 = [
1329
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$18);
1330
+ const __iconNode$17 = [
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$16);
1336
- const __iconNode$15 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
1337
- const Circle = createLucideIcon("circle", __iconNode$15);
1338
- const __iconNode$14 = [
1335
+ const CircleX = createLucideIcon("circle-x", __iconNode$17);
1336
+ const __iconNode$16 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
1337
+ const Circle = createLucideIcon("circle", __iconNode$16);
1338
+ const __iconNode$15 = [
1339
1339
  ["path", { d: "M11 14h10", key: "1w8e9d" }],
1340
1340
  ["path", { d: "M16 4h2a2 2 0 0 1 2 2v1.344", key: "1e62lh" }],
1341
1341
  ["path", { d: "m17 18 4-4-4-4", key: "z2g111" }],
1342
1342
  ["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" }],
1343
1343
  ["rect", { x: "8", y: "2", width: "8", height: "4", rx: "1", key: "ublpy" }]
1344
1344
  ];
1345
- const ClipboardPaste = createLucideIcon("clipboard-paste", __iconNode$14);
1346
- const __iconNode$13 = [
1345
+ const ClipboardPaste = createLucideIcon("clipboard-paste", __iconNode$15);
1346
+ const __iconNode$14 = [
1347
1347
  ["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
1348
1348
  [
1349
1349
  "path",
@@ -1353,53 +1353,53 @@ const __iconNode$13 = [
1353
1353
  }
1354
1354
  ]
1355
1355
  ];
1356
- const Clipboard = createLucideIcon("clipboard", __iconNode$13);
1357
- const __iconNode$12 = [
1356
+ const Clipboard = createLucideIcon("clipboard", __iconNode$14);
1357
+ const __iconNode$13 = [
1358
1358
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1359
1359
  ["path", { d: "M12 6v6l4 2", key: "mmk7yg" }]
1360
1360
  ];
1361
- const Clock = createLucideIcon("clock", __iconNode$12);
1362
- const __iconNode$11 = [
1361
+ const Clock = createLucideIcon("clock", __iconNode$13);
1362
+ const __iconNode$12 = [
1363
1363
  ["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
1364
1364
  ["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
1365
1365
  ["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
1366
1366
  ];
1367
- const CodeXml = createLucideIcon("code-xml", __iconNode$11);
1368
- const __iconNode$10 = [
1367
+ const CodeXml = createLucideIcon("code-xml", __iconNode$12);
1368
+ const __iconNode$11 = [
1369
1369
  ["path", { d: "m16 18 6-6-6-6", key: "eg8j8" }],
1370
1370
  ["path", { d: "m8 6-6 6 6 6", key: "ppft3o" }]
1371
1371
  ];
1372
- const Code = createLucideIcon("code", __iconNode$10);
1373
- const __iconNode$$ = [
1372
+ const Code = createLucideIcon("code", __iconNode$11);
1373
+ const __iconNode$10 = [
1374
1374
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1375
1375
  ["path", { d: "M12 3v18", key: "108xh3" }]
1376
1376
  ];
1377
- const Columns2 = createLucideIcon("columns-2", __iconNode$$);
1378
- const __iconNode$_ = [
1377
+ const Columns2 = createLucideIcon("columns-2", __iconNode$10);
1378
+ const __iconNode$$ = [
1379
1379
  [
1380
1380
  "path",
1381
1381
  { 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" }
1382
1382
  ]
1383
1383
  ];
1384
- const Command$1 = createLucideIcon("command", __iconNode$_);
1385
- const __iconNode$Z = [
1384
+ const Command$1 = createLucideIcon("command", __iconNode$$);
1385
+ const __iconNode$_ = [
1386
1386
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
1387
1387
  ["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" }]
1388
1388
  ];
1389
- const Copy = createLucideIcon("copy", __iconNode$Z);
1390
- const __iconNode$Y = [
1389
+ const Copy = createLucideIcon("copy", __iconNode$_);
1390
+ const __iconNode$Z = [
1391
1391
  ["path", { d: "M12 15V3", key: "m9g1x1" }],
1392
1392
  ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
1393
1393
  ["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
1394
1394
  ];
1395
- const Download = createLucideIcon("download", __iconNode$Y);
1396
- const __iconNode$X = [
1395
+ const Download = createLucideIcon("download", __iconNode$Z);
1396
+ const __iconNode$Y = [
1397
1397
  ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
1398
1398
  ["circle", { cx: "12", cy: "5", r: "1", key: "gxeob9" }],
1399
1399
  ["circle", { cx: "12", cy: "19", r: "1", key: "lyex9k" }]
1400
1400
  ];
1401
- const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$X);
1402
- const __iconNode$W = [
1401
+ const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$Y);
1402
+ const __iconNode$X = [
1403
1403
  ["path", { d: "m15 15 6 6", key: "1s409w" }],
1404
1404
  ["path", { d: "m15 9 6-6", key: "ko1vev" }],
1405
1405
  ["path", { d: "M21 16v5h-5", key: "1ck2sf" }],
@@ -1409,14 +1409,14 @@ const __iconNode$W = [
1409
1409
  ["path", { d: "M3 8V3h5", key: "1ln10m" }],
1410
1410
  ["path", { d: "M9 9 3 3", key: "v551iv" }]
1411
1411
  ];
1412
- const Expand = createLucideIcon("expand", __iconNode$W);
1413
- const __iconNode$V = [
1412
+ const Expand = createLucideIcon("expand", __iconNode$X);
1413
+ const __iconNode$W = [
1414
1414
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
1415
1415
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
1416
1416
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
1417
1417
  ];
1418
- const ExternalLink$1 = createLucideIcon("external-link", __iconNode$V);
1419
- const __iconNode$U = [
1418
+ const ExternalLink$1 = createLucideIcon("external-link", __iconNode$W);
1419
+ const __iconNode$V = [
1420
1420
  [
1421
1421
  "path",
1422
1422
  {
@@ -1426,8 +1426,8 @@ const __iconNode$U = [
1426
1426
  ],
1427
1427
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
1428
1428
  ];
1429
- const Eye = createLucideIcon("eye", __iconNode$U);
1430
- const __iconNode$T = [
1429
+ const Eye = createLucideIcon("eye", __iconNode$V);
1430
+ const __iconNode$U = [
1431
1431
  [
1432
1432
  "path",
1433
1433
  {
@@ -1438,8 +1438,8 @@ const __iconNode$T = [
1438
1438
  ["path", { d: "M12 9v4", key: "juzpu7" }],
1439
1439
  ["path", { d: "M12 17h.01", key: "p32p05" }]
1440
1440
  ];
1441
- const FileExclamationPoint = createLucideIcon("file-exclamation-point", __iconNode$T);
1442
- const __iconNode$S = [
1441
+ const FileExclamationPoint = createLucideIcon("file-exclamation-point", __iconNode$U);
1442
+ const __iconNode$T = [
1443
1443
  [
1444
1444
  "path",
1445
1445
  {
@@ -1451,8 +1451,8 @@ const __iconNode$S = [
1451
1451
  ["path", { d: "M2 15h10", key: "jfw4w8" }],
1452
1452
  ["path", { d: "m9 18 3-3-3-3", key: "112psh" }]
1453
1453
  ];
1454
- const FileInput = createLucideIcon("file-input", __iconNode$S);
1455
- const __iconNode$R = [
1454
+ const FileInput = createLucideIcon("file-input", __iconNode$T);
1455
+ const __iconNode$S = [
1456
1456
  [
1457
1457
  "path",
1458
1458
  {
@@ -1464,8 +1464,8 @@ const __iconNode$R = [
1464
1464
  ["path", { d: "M9 15h6", key: "cctwl0" }],
1465
1465
  ["path", { d: "M12 18v-6", key: "17g6i2" }]
1466
1466
  ];
1467
- const FilePlus = createLucideIcon("file-plus", __iconNode$R);
1468
- const __iconNode$Q = [
1467
+ const FilePlus = createLucideIcon("file-plus", __iconNode$S);
1468
+ const __iconNode$R = [
1469
1469
  [
1470
1470
  "path",
1471
1471
  {
@@ -1478,8 +1478,8 @@ const __iconNode$Q = [
1478
1478
  ["path", { d: "M16 13H8", key: "t4e002" }],
1479
1479
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
1480
1480
  ];
1481
- const FileText = createLucideIcon("file-text", __iconNode$Q);
1482
- const __iconNode$P = [
1481
+ const FileText = createLucideIcon("file-text", __iconNode$R);
1482
+ const __iconNode$Q = [
1483
1483
  [
1484
1484
  "path",
1485
1485
  {
@@ -1489,8 +1489,8 @@ const __iconNode$P = [
1489
1489
  ],
1490
1490
  ["path", { d: "M14 2v5a1 1 0 0 0 1 1h5", key: "wfsgrz" }]
1491
1491
  ];
1492
- const File$1 = createLucideIcon("file", __iconNode$P);
1493
- const __iconNode$O = [
1492
+ const File$1 = createLucideIcon("file", __iconNode$Q);
1493
+ const __iconNode$P = [
1494
1494
  [
1495
1495
  "path",
1496
1496
  {
@@ -1499,8 +1499,8 @@ const __iconNode$O = [
1499
1499
  }
1500
1500
  ]
1501
1501
  ];
1502
- const FolderOpen = createLucideIcon("folder-open", __iconNode$O);
1503
- const __iconNode$N = [
1502
+ const FolderOpen = createLucideIcon("folder-open", __iconNode$P);
1503
+ const __iconNode$O = [
1504
1504
  ["path", { d: "M12 10v6", key: "1bos4e" }],
1505
1505
  ["path", { d: "M9 13h6", key: "1uhe8q" }],
1506
1506
  [
@@ -1511,8 +1511,8 @@ const __iconNode$N = [
1511
1511
  }
1512
1512
  ]
1513
1513
  ];
1514
- const FolderPlus = createLucideIcon("folder-plus", __iconNode$N);
1515
- const __iconNode$M = [
1514
+ const FolderPlus = createLucideIcon("folder-plus", __iconNode$O);
1515
+ const __iconNode$N = [
1516
1516
  [
1517
1517
  "path",
1518
1518
  {
@@ -1521,8 +1521,8 @@ const __iconNode$M = [
1521
1521
  }
1522
1522
  ]
1523
1523
  ];
1524
- const Folder = createLucideIcon("folder", __iconNode$M);
1525
- const __iconNode$L = [
1524
+ const Folder = createLucideIcon("folder", __iconNode$N);
1525
+ const __iconNode$M = [
1526
1526
  [
1527
1527
  "path",
1528
1528
  {
@@ -1535,39 +1535,39 @@ const __iconNode$L = [
1535
1535
  { d: "M3 8.268a2 2 0 0 0-1 1.738V19a2 2 0 0 0 2 2h11a2 2 0 0 0 1.732-1", key: "yxbcw3" }
1536
1536
  ]
1537
1537
  ];
1538
- const Folders = createLucideIcon("folders", __iconNode$L);
1539
- const __iconNode$K = [
1538
+ const Folders = createLucideIcon("folders", __iconNode$M);
1539
+ const __iconNode$L = [
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$K);
1545
- const __iconNode$J = [
1544
+ const GitBranch = createLucideIcon("git-branch", __iconNode$L);
1545
+ const __iconNode$K = [
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$J);
1551
- const __iconNode$I = [
1550
+ const GitCommitHorizontal = createLucideIcon("git-commit-horizontal", __iconNode$K);
1551
+ const __iconNode$J = [
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$I);
1558
- const __iconNode$H = [
1557
+ const GitCompare = createLucideIcon("git-compare", __iconNode$J);
1558
+ const __iconNode$I = [
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$H);
1564
- const __iconNode$G = [
1563
+ const GitMerge = createLucideIcon("git-merge", __iconNode$I);
1564
+ const __iconNode$H = [
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$G);
1570
- const __iconNode$F = [
1569
+ const Globe = createLucideIcon("globe", __iconNode$H);
1570
+ const __iconNode$G = [
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,8 +1575,8 @@ const __iconNode$F = [
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$F);
1579
- const __iconNode$E = [
1578
+ const GripHorizontal = createLucideIcon("grip-horizontal", __iconNode$G);
1579
+ const __iconNode$F = [
1580
1580
  ["line", { x1: "2", x2: "22", y1: "2", y2: "22", key: "a6p6uj" }],
1581
1581
  ["path", { d: "M10.41 10.41a2 2 0 1 1-2.83-2.83", key: "1bzlo9" }],
1582
1582
  ["line", { x1: "13.5", x2: "6", y1: "13.5", y2: "21", key: "1q0aeu" }],
@@ -1590,31 +1590,31 @@ const __iconNode$E = [
1590
1590
  ],
1591
1591
  ["path", { d: "M21 15V5a2 2 0 0 0-2-2H9", key: "43el77" }]
1592
1592
  ];
1593
- const ImageOff = createLucideIcon("image-off", __iconNode$E);
1594
- const __iconNode$D = [
1593
+ const ImageOff = createLucideIcon("image-off", __iconNode$F);
1594
+ const __iconNode$E = [
1595
1595
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1596
1596
  ["path", { d: "M12 16v-4", key: "1dtifu" }],
1597
1597
  ["path", { d: "M12 8h.01", key: "e9boi3" }]
1598
1598
  ];
1599
- const Info$1 = createLucideIcon("info", __iconNode$D);
1600
- const __iconNode$C = [
1599
+ const Info$1 = createLucideIcon("info", __iconNode$E);
1600
+ const __iconNode$D = [
1601
1601
  ["path", { d: "M16 5H3", key: "m91uny" }],
1602
1602
  ["path", { d: "M11 12H3", key: "51ecnj" }],
1603
1603
  ["path", { d: "M16 19H3", key: "zzsher" }],
1604
1604
  ["path", { d: "M21 12h-6", key: "bt1uis" }]
1605
1605
  ];
1606
- const ListMinus = createLucideIcon("list-minus", __iconNode$C);
1607
- const __iconNode$B = [
1606
+ const ListMinus = createLucideIcon("list-minus", __iconNode$D);
1607
+ const __iconNode$C = [
1608
1608
  ["path", { d: "M13 5h8", key: "a7qcls" }],
1609
1609
  ["path", { d: "M13 12h8", key: "h98zly" }],
1610
1610
  ["path", { d: "M13 19h8", key: "c3s6r1" }],
1611
1611
  ["path", { d: "m3 17 2 2 4-4", key: "1jhpwq" }],
1612
1612
  ["rect", { x: "3", y: "4", width: "6", height: "6", rx: "1", key: "cif1o7" }]
1613
1613
  ];
1614
- const ListTodo = createLucideIcon("list-todo", __iconNode$B);
1615
- const __iconNode$A = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
1616
- const LoaderCircle = createLucideIcon("loader-circle", __iconNode$A);
1617
- const __iconNode$z = [
1614
+ const ListTodo = createLucideIcon("list-todo", __iconNode$C);
1615
+ const __iconNode$B = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
1616
+ const LoaderCircle = createLucideIcon("loader-circle", __iconNode$B);
1617
+ const __iconNode$A = [
1618
1618
  ["path", { d: "M12 2v4", key: "3427ic" }],
1619
1619
  ["path", { d: "m16.2 7.8 2.9-2.9", key: "r700ao" }],
1620
1620
  ["path", { d: "M18 12h4", key: "wj9ykh" }],
@@ -1624,21 +1624,21 @@ const __iconNode$z = [
1624
1624
  ["path", { d: "M2 12h4", key: "j09sii" }],
1625
1625
  ["path", { d: "m4.9 4.9 2.9 2.9", key: "giyufr" }]
1626
1626
  ];
1627
- const Loader = createLucideIcon("loader", __iconNode$z);
1628
- const __iconNode$y = [
1627
+ const Loader = createLucideIcon("loader", __iconNode$A);
1628
+ const __iconNode$z = [
1629
1629
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
1630
1630
  ["path", { d: "m21 3-7 7", key: "1l2asr" }],
1631
1631
  ["path", { d: "m3 21 7-7", key: "tjx5ai" }],
1632
1632
  ["path", { d: "M9 21H3v-6", key: "wtvkvv" }]
1633
1633
  ];
1634
- const Maximize2 = createLucideIcon("maximize-2", __iconNode$y);
1635
- const __iconNode$x = [
1634
+ const Maximize2 = createLucideIcon("maximize-2", __iconNode$z);
1635
+ const __iconNode$y = [
1636
1636
  ["path", { d: "M4 5h16", key: "1tepv9" }],
1637
1637
  ["path", { d: "M4 12h16", key: "1lakjw" }],
1638
1638
  ["path", { d: "M4 19h16", key: "1djgab" }]
1639
1639
  ];
1640
- const Menu$1 = createLucideIcon("menu", __iconNode$x);
1641
- const __iconNode$w = [
1640
+ const Menu$1 = createLucideIcon("menu", __iconNode$y);
1641
+ const __iconNode$x = [
1642
1642
  [
1643
1643
  "path",
1644
1644
  {
@@ -1647,25 +1647,25 @@ const __iconNode$w = [
1647
1647
  }
1648
1648
  ]
1649
1649
  ];
1650
- const MessageSquare = createLucideIcon("message-square", __iconNode$w);
1651
- const __iconNode$v = [
1650
+ const MessageSquare = createLucideIcon("message-square", __iconNode$x);
1651
+ const __iconNode$w = [
1652
1652
  ["path", { d: "m14 10 7-7", key: "oa77jy" }],
1653
1653
  ["path", { d: "M20 10h-6V4", key: "mjg0md" }],
1654
1654
  ["path", { d: "m3 21 7-7", key: "tjx5ai" }],
1655
1655
  ["path", { d: "M4 14h6v6", key: "rmj7iw" }]
1656
1656
  ];
1657
- const Minimize2 = createLucideIcon("minimize-2", __iconNode$v);
1658
- const __iconNode$u = [
1657
+ const Minimize2 = createLucideIcon("minimize-2", __iconNode$w);
1658
+ const __iconNode$v = [
1659
1659
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1660
1660
  ["path", { d: "M9 3v18", key: "fh3hqa" }]
1661
1661
  ];
1662
- const PanelLeft = createLucideIcon("panel-left", __iconNode$u);
1663
- const __iconNode$t = [
1662
+ const PanelLeft = createLucideIcon("panel-left", __iconNode$v);
1663
+ const __iconNode$u = [
1664
1664
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1665
1665
  ["path", { d: "M3 9h18", key: "1pudct" }]
1666
1666
  ];
1667
- const PanelTop = createLucideIcon("panel-top", __iconNode$t);
1668
- const __iconNode$s = [
1667
+ const PanelTop = createLucideIcon("panel-top", __iconNode$u);
1668
+ const __iconNode$t = [
1669
1669
  [
1670
1670
  "path",
1671
1671
  {
@@ -1674,8 +1674,8 @@ const __iconNode$s = [
1674
1674
  }
1675
1675
  ]
1676
1676
  ];
1677
- const Paperclip = createLucideIcon("paperclip", __iconNode$s);
1678
- const __iconNode$r = [
1677
+ const Paperclip = createLucideIcon("paperclip", __iconNode$t);
1678
+ const __iconNode$s = [
1679
1679
  [
1680
1680
  "path",
1681
1681
  {
@@ -1685,8 +1685,8 @@ const __iconNode$r = [
1685
1685
  ],
1686
1686
  ["path", { d: "m15 5 4 4", key: "1mk7zo" }]
1687
1687
  ];
1688
- const Pencil = createLucideIcon("pencil", __iconNode$r);
1689
- const __iconNode$q = [
1688
+ const Pencil = createLucideIcon("pencil", __iconNode$s);
1689
+ const __iconNode$r = [
1690
1690
  ["path", { d: "M12 17v5", key: "bb1du9" }],
1691
1691
  ["path", { d: "M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89", key: "znwnzq" }],
1692
1692
  ["path", { d: "m2 2 20 20", key: "1ooewy" }],
@@ -1698,8 +1698,8 @@ const __iconNode$q = [
1698
1698
  }
1699
1699
  ]
1700
1700
  ];
1701
- const PinOff = createLucideIcon("pin-off", __iconNode$q);
1702
- const __iconNode$p = [
1701
+ const PinOff = createLucideIcon("pin-off", __iconNode$r);
1702
+ const __iconNode$q = [
1703
1703
  ["path", { d: "M12 17v5", key: "bb1du9" }],
1704
1704
  [
1705
1705
  "path",
@@ -1709,8 +1709,8 @@ const __iconNode$p = [
1709
1709
  }
1710
1710
  ]
1711
1711
  ];
1712
- const Pin = createLucideIcon("pin", __iconNode$p);
1713
- const __iconNode$o = [
1712
+ const Pin = createLucideIcon("pin", __iconNode$q);
1713
+ const __iconNode$p = [
1714
1714
  [
1715
1715
  "path",
1716
1716
  {
@@ -1719,12 +1719,19 @@ const __iconNode$o = [
1719
1719
  }
1720
1720
  ]
1721
1721
  ];
1722
- const Play = createLucideIcon("play", __iconNode$o);
1723
- const __iconNode$n = [
1722
+ const Play = createLucideIcon("play", __iconNode$p);
1723
+ const __iconNode$o = [
1724
1724
  ["path", { d: "M5 12h14", key: "1ays0h" }],
1725
1725
  ["path", { d: "M12 5v14", key: "s699le" }]
1726
1726
  ];
1727
- const Plus = createLucideIcon("plus", __iconNode$n);
1727
+ const Plus = createLucideIcon("plus", __iconNode$o);
1728
+ const __iconNode$n = [
1729
+ ["path", { d: "M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "14sxne" }],
1730
+ ["path", { d: "M3 3v5h5", key: "1xhq8a" }],
1731
+ ["path", { d: "M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16", key: "1hlbsb" }],
1732
+ ["path", { d: "M16 16h5v5", key: "ccwih5" }]
1733
+ ];
1734
+ const RefreshCcw = createLucideIcon("refresh-ccw", __iconNode$n);
1728
1735
  const __iconNode$m = [
1729
1736
  ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
1730
1737
  ["path", { d: "M21 3v5h-5", key: "1q7to0" }],
@@ -3395,7 +3402,7 @@ function useCallbackRef(initialValue, callback) {
3395
3402
  ref.callback = callback;
3396
3403
  return ref.facade;
3397
3404
  }
3398
- var useIsomorphicLayoutEffect$3 = typeof window !== "undefined" ? reactExports.useLayoutEffect : reactExports.useEffect;
3405
+ var useIsomorphicLayoutEffect$4 = typeof window !== "undefined" ? reactExports.useLayoutEffect : reactExports.useEffect;
3399
3406
  var currentValues = /* @__PURE__ */ new WeakMap();
3400
3407
  function useMergeRefs(refs, defaultValue2) {
3401
3408
  var callbackRef = useCallbackRef(null, function(newValue) {
@@ -3403,7 +3410,7 @@ function useMergeRefs(refs, defaultValue2) {
3403
3410
  return assignRef(ref, newValue);
3404
3411
  });
3405
3412
  });
3406
- useIsomorphicLayoutEffect$3(function() {
3413
+ useIsomorphicLayoutEffect$4(function() {
3407
3414
  var oldValue = currentValues.get(callbackRef);
3408
3415
  if (oldValue) {
3409
3416
  var prevRefs_1 = new Set(oldValue);
@@ -3789,10 +3796,10 @@ var handleScroll = function(axis, endTarget, event, sourceDelta, noOverscroll) {
3789
3796
  break;
3790
3797
  }
3791
3798
  var _a3 = getScrollVariables(axis, target), position2 = _a3[0], scroll_1 = _a3[1], capacity = _a3[2];
3792
- var elementScroll = scroll_1 - capacity - directionFactor * position2;
3793
- if (position2 || elementScroll) {
3799
+ var elementScroll2 = scroll_1 - capacity - directionFactor * position2;
3800
+ if (position2 || elementScroll2) {
3794
3801
  if (elementCouldBeScrolled(axis, target)) {
3795
- availableScroll += elementScroll;
3802
+ availableScroll += elementScroll2;
3796
3803
  availableScrollTop += position2;
3797
3804
  }
3798
3805
  }
@@ -14966,12 +14973,22 @@ function ContextMenuPortal({ ...props }) {
14966
14973
  }
14967
14974
  function ContextMenuContent({
14968
14975
  className,
14976
+ onPointerDownCapture,
14977
+ onPointerUpCapture,
14969
14978
  ...props
14970
14979
  }) {
14971
14980
  return /* @__PURE__ */ jsxRuntimeExports.jsx(Portal2$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
14972
14981
  Content2$4,
14973
14982
  {
14974
14983
  "data-slot": "context-menu-content",
14984
+ onPointerDownCapture: (event) => {
14985
+ onPointerDownCapture?.(event);
14986
+ if (event.button === 2) event.stopPropagation();
14987
+ },
14988
+ onPointerUpCapture: (event) => {
14989
+ onPointerUpCapture?.(event);
14990
+ if (event.button === 2) event.stopPropagation();
14991
+ },
14975
14992
  className: cn$2(
14976
14993
  "z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
14977
14994
  className
@@ -40651,53 +40668,53 @@ async function loadLanguage(lang) {
40651
40668
  try {
40652
40669
  switch (lang) {
40653
40670
  case "javascript":
40654
- return import("./index-Av31QpwJ.js").then((m2) => m2.javascript());
40671
+ return import("./index-Ct5-lZTn.js").then((m2) => m2.javascript());
40655
40672
  case "jsx":
40656
- return import("./index-Av31QpwJ.js").then((m2) => m2.javascript({ jsx: true }));
40673
+ return import("./index-Ct5-lZTn.js").then((m2) => m2.javascript({ jsx: true }));
40657
40674
  case "typescript":
40658
- return import("./index-Av31QpwJ.js").then(
40675
+ return import("./index-Ct5-lZTn.js").then(
40659
40676
  (m2) => m2.javascript({ typescript: true })
40660
40677
  );
40661
40678
  case "tsx":
40662
- return import("./index-Av31QpwJ.js").then(
40679
+ return import("./index-Ct5-lZTn.js").then(
40663
40680
  (m2) => m2.javascript({ jsx: true, typescript: true })
40664
40681
  );
40665
40682
  case "python":
40666
- return import("./index-DkCUbYql.js").then((m2) => m2.python());
40683
+ return import("./index-DLEtsdeb.js").then((m2) => m2.python());
40667
40684
  case "html":
40668
- return import("./index-CjJe7VSH.js").then((m2) => m2.html());
40685
+ return import("./index-D5hMY11m.js").then((m2) => m2.html());
40669
40686
  case "css":
40670
- return import("./index-CFt-wi4p.js").then((m2) => m2.css());
40687
+ return import("./index-Dqk2jQZ7.js").then((m2) => m2.css());
40671
40688
  case "scss":
40672
40689
  case "sass":
40673
- return import("./index-BZPQn4AB.js").then((m2) => m2.sass());
40690
+ return import("./index-D49PP401.js").then((m2) => m2.sass());
40674
40691
  case "less":
40675
- return import("./index-ZFp3vFxe.js").then((m2) => m2.less());
40692
+ return import("./index-BHQ8bMg_.js").then((m2) => m2.less());
40676
40693
  case "json":
40677
40694
  case "jsonc":
40678
- return import("./index-DC0ng9YX.js").then((m2) => m2.json());
40695
+ return import("./index-Bay77lf3.js").then((m2) => m2.json());
40679
40696
  case "markdown":
40680
40697
  case "mdx":
40681
- return import("./index-DwBbgNmR.js").then((m2) => m2.markdown());
40698
+ return import("./index-DC1gaho7.js").then((m2) => m2.markdown());
40682
40699
  case "xml":
40683
- return import("./index-D9Pfuy6s.js").then((m2) => m2.xml());
40700
+ return import("./index-BUm0x4GN.js").then((m2) => m2.xml());
40684
40701
  case "yaml":
40685
- return import("./index-iQ9auLjI.js").then((m2) => m2.yaml());
40702
+ return import("./index-lmhecPWc.js").then((m2) => m2.yaml());
40686
40703
  case "sql":
40687
- return import("./index-C-7KLTyL.js").then((m2) => m2.sql());
40704
+ return import("./index-BbUtF3L1.js").then((m2) => m2.sql());
40688
40705
  case "rust":
40689
- return import("./index-CqNkm5pZ.js").then((m2) => m2.rust());
40706
+ return import("./index-DH3a6-do.js").then((m2) => m2.rust());
40690
40707
  case "go":
40691
- return import("./index-CS2NcwnS.js").then((m2) => m2.go());
40708
+ return import("./index-DrWaYPW7.js").then((m2) => m2.go());
40692
40709
  case "java":
40693
- return import("./index-CrGR0Fcd.js").then((m2) => m2.java());
40710
+ return import("./index-CMxtCPk9.js").then((m2) => m2.java());
40694
40711
  case "kotlin":
40695
- return import("./index-CrGR0Fcd.js").then((m2) => m2.java());
40712
+ return import("./index-CMxtCPk9.js").then((m2) => m2.java());
40696
40713
  case "c":
40697
40714
  case "cpp":
40698
- return import("./index-CFVkYUnG.js").then((m2) => m2.cpp());
40715
+ return import("./index-B5V3PU-n.js").then((m2) => m2.cpp());
40699
40716
  case "php":
40700
- return import("./index-B9YQ_ief.js").then((m2) => m2.php());
40717
+ return import("./index-DsrV0B5O.js").then((m2) => m2.php());
40701
40718
  // Legacy modes via StreamLanguage
40702
40719
  case "bash":
40703
40720
  case "fish":
@@ -42429,10 +42446,10 @@ function getOwnerDocument(target) {
42429
42446
  }
42430
42447
  return document;
42431
42448
  }
42432
- const useIsomorphicLayoutEffect$2 = canUseDOM$1 ? reactExports.useLayoutEffect : reactExports.useEffect;
42449
+ const useIsomorphicLayoutEffect$3 = canUseDOM$1 ? reactExports.useLayoutEffect : reactExports.useEffect;
42433
42450
  function useEvent(handler) {
42434
42451
  const handlerRef = reactExports.useRef(handler);
42435
- useIsomorphicLayoutEffect$2(() => {
42452
+ useIsomorphicLayoutEffect$3(() => {
42436
42453
  handlerRef.current = handler;
42437
42454
  });
42438
42455
  return reactExports.useCallback(function() {
@@ -42460,7 +42477,7 @@ function useLatestValue(value, dependencies) {
42460
42477
  dependencies = [value];
42461
42478
  }
42462
42479
  const valueRef = reactExports.useRef(value);
42463
- useIsomorphicLayoutEffect$2(() => {
42480
+ useIsomorphicLayoutEffect$3(() => {
42464
42481
  if (valueRef.current !== value) {
42465
42482
  valueRef.current = value;
42466
42483
  }
@@ -44438,7 +44455,7 @@ function useRect(element2, measure, fallbackRect2) {
44438
44455
  const resizeObserver = useResizeObserver({
44439
44456
  callback: measureRect
44440
44457
  });
44441
- useIsomorphicLayoutEffect$2(() => {
44458
+ useIsomorphicLayoutEffect$3(() => {
44442
44459
  measureRect();
44443
44460
  if (element2) {
44444
44461
  resizeObserver == null ? void 0 : resizeObserver.observe(element2);
@@ -44612,7 +44629,7 @@ function useRects(elements, measure) {
44612
44629
  const resizeObserver = useResizeObserver({
44613
44630
  callback: measureRects
44614
44631
  });
44615
- useIsomorphicLayoutEffect$2(() => {
44632
+ useIsomorphicLayoutEffect$3(() => {
44616
44633
  resizeObserver == null ? void 0 : resizeObserver.disconnect();
44617
44634
  measureRects();
44618
44635
  elements.forEach((element2) => resizeObserver == null ? void 0 : resizeObserver.observe(element2));
@@ -44974,7 +44991,7 @@ function useLayoutShiftScrollCompensation(_ref2) {
44974
44991
  x: config2,
44975
44992
  y: config2
44976
44993
  } : config2;
44977
- useIsomorphicLayoutEffect$2(() => {
44994
+ useIsomorphicLayoutEffect$3(() => {
44978
44995
  const disabled = !x2 && !y4;
44979
44996
  if (disabled || !activeNode) {
44980
44997
  initialized.current = false;
@@ -45335,7 +45352,7 @@ const DndContext = /* @__PURE__ */ reactExports.memo(function DndContext2(_ref2)
45335
45352
  }, [draggableNodes, instantiateSensor]);
45336
45353
  const activators = useCombineActivators(sensors, bindActivatorToSensorInstantiator);
45337
45354
  useSensorSetup(sensors);
45338
- useIsomorphicLayoutEffect$2(() => {
45355
+ useIsomorphicLayoutEffect$3(() => {
45339
45356
  if (activeNodeRect && status === Status.Initializing) {
45340
45357
  setStatus(Status.Initialized);
45341
45358
  }
@@ -45419,7 +45436,7 @@ const DndContext = /* @__PURE__ */ reactExports.memo(function DndContext2(_ref2)
45419
45436
  // eslint-disable-next-line react-hooks/exhaustive-deps
45420
45437
  [overId]
45421
45438
  );
45422
- useIsomorphicLayoutEffect$2(() => {
45439
+ useIsomorphicLayoutEffect$3(() => {
45423
45440
  sensorContext.current = {
45424
45441
  activatorEvent,
45425
45442
  active,
@@ -45546,7 +45563,7 @@ function useDraggable(_ref2) {
45546
45563
  const [activatorNode, setActivatorNodeRef] = useNodeRef();
45547
45564
  const listeners2 = useSyntheticListeners(activators, id28);
45548
45565
  const dataRef = useLatestValue(data);
45549
- useIsomorphicLayoutEffect$2(
45566
+ useIsomorphicLayoutEffect$3(
45550
45567
  () => {
45551
45568
  draggableNodes.set(id28, {
45552
45569
  id: id28,
@@ -45719,7 +45736,7 @@ function AnimationManager(_ref2) {
45719
45736
  if (!children2 && !clonedChildren && previousChildren) {
45720
45737
  setClonedChildren(previousChildren);
45721
45738
  }
45722
- useIsomorphicLayoutEffect$2(() => {
45739
+ useIsomorphicLayoutEffect$3(() => {
45723
45740
  if (!element2) {
45724
45741
  return;
45725
45742
  }
@@ -46219,7 +46236,7 @@ function SortableContext(_ref2) {
46219
46236
  const itemsHaveChanged = !itemsEqual(items, previousItemsRef.current);
46220
46237
  const disableTransforms = overIndex !== -1 && activeIndex === -1 || itemsHaveChanged;
46221
46238
  const disabled = normalizeDisabled(disabledProp);
46222
- useIsomorphicLayoutEffect$2(() => {
46239
+ useIsomorphicLayoutEffect$3(() => {
46223
46240
  if (itemsHaveChanged && isDragging) {
46224
46241
  measureDroppableContainers(items);
46225
46242
  }
@@ -46300,7 +46317,7 @@ function useDerivedTransform(_ref2) {
46300
46317
  } = _ref2;
46301
46318
  const [derivedTransform, setDerivedtransform] = reactExports.useState(null);
46302
46319
  const previousIndex = reactExports.useRef(index2);
46303
- useIsomorphicLayoutEffect$2(() => {
46320
+ useIsomorphicLayoutEffect$3(() => {
46304
46321
  if (!disabled && index2 !== previousIndex.current && node2.current) {
46305
46322
  const initial = rect2.current;
46306
46323
  if (initial) {
@@ -46624,17 +46641,32 @@ function DeleteWorkspaceDialog({
46624
46641
  ] })
46625
46642
  ] }) });
46626
46643
  }
46644
+ function slugifyBranchName(input) {
46645
+ return input.toLowerCase().replace(/\s+/g, "-").replace(/[^a-z0-9\-/]/g, "").replace(/-{2,}/g, "-").replace(/\/+/g, "/").replace(/^[-/]+|[-/]+$/g, "");
46646
+ }
46627
46647
  function NewWorkspaceDialog({ projectName, open: open2, onOpenChange }) {
46628
46648
  const [branch, setBranch] = reactExports.useState("");
46629
46649
  const [base2, setBase] = reactExports.useState("");
46630
46650
  const [prompt, setPrompt] = reactExports.useState("");
46631
46651
  const createWorkspaceMutation = useCreateWorkspace();
46652
+ const { projects } = useProjects();
46653
+ const slug = slugifyBranchName(branch);
46654
+ const slugError = (() => {
46655
+ if (branch && !slug) return "Branch name contains no valid characters.";
46656
+ if (slug) {
46657
+ const project = projects.find((p2) => p2.name === projectName);
46658
+ if (project?.worktrees.some((wt2) => wt2.branch === slug)) {
46659
+ return `A workspace named "${slug}" already exists.`;
46660
+ }
46661
+ }
46662
+ return null;
46663
+ })();
46632
46664
  const handleSubmit = async (e3) => {
46633
46665
  e3.preventDefault();
46634
- if (!branch.trim()) return;
46666
+ if (!slug || slugError) return;
46635
46667
  await createWorkspaceMutation.mutateAsync({
46636
46668
  project: projectName,
46637
- branch: branch.trim(),
46669
+ branch: slug,
46638
46670
  base: base2.trim() || void 0,
46639
46671
  prompt: prompt.trim() || void 0
46640
46672
  });
@@ -46667,6 +46699,11 @@ function NewWorkspaceDialog({ projectName, open: open2, onOpenChange }) {
46667
46699
  autoFocus: true
46668
46700
  }
46669
46701
  ),
46702
+ branch && slug !== branch && !slugError && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-muted-foreground", children: [
46703
+ "Will be created as: ",
46704
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: slug })
46705
+ ] }),
46706
+ slugError && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-destructive", children: slugError }),
46670
46707
  /* @__PURE__ */ jsxRuntimeExports.jsx(Label$1, { htmlFor: "base-branch", children: "Base branch (optional)" }),
46671
46708
  /* @__PURE__ */ jsxRuntimeExports.jsx(
46672
46709
  Input,
@@ -46694,7 +46731,14 @@ function NewWorkspaceDialog({ projectName, open: open2, onOpenChange }) {
46694
46731
  ] }),
46695
46732
  /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogFooter, { children: [
46696
46733
  /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { type: "button", variant: "ghost", onClick: () => onOpenChange(false), children: "Cancel" }),
46697
- /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { type: "submit", children: "Create" })
46734
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
46735
+ Button,
46736
+ {
46737
+ type: "submit",
46738
+ disabled: !slug || !!slugError || createWorkspaceMutation.isPending,
46739
+ children: "Create"
46740
+ }
46741
+ )
46698
46742
  ] })
46699
46743
  ] }) }) });
46700
46744
  }
@@ -46881,7 +46925,7 @@ const WorkspaceCard = reactExports.memo(function WorkspaceCard2({
46881
46925
  };
46882
46926
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenu, { children: [
46883
46927
  /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ...containerProps, children: [
46884
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { children: [
46928
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip$1, { delayDuration: 800, children: [
46885
46929
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 min-w-0 overflow-hidden", children: [
46886
46930
  /* @__PURE__ */ jsxRuntimeExports.jsx(AgentStatusIndicator, { agent: status?.agent, isActive }),
46887
46931
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -46892,7 +46936,7 @@ const WorkspaceCard = reactExports.memo(function WorkspaceCard2({
46892
46936
  }
46893
46937
  )
46894
46938
  ] }) }),
46895
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "top", children: showProjectName ? worktree.path : worktree.branch })
46939
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "right", children: `${projectName}/${worktree.branch}` })
46896
46940
  ] }),
46897
46941
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "hidden @[10rem]:flex group-hover:flex items-center gap-2 shrink-0 ml-auto pl-2", children: [
46898
46942
  /* @__PURE__ */ jsxRuntimeExports.jsx(SetupStatusIndicator, { setup: setupStatus }),
@@ -46999,6 +47043,7 @@ function SortableProject({
46999
47043
  "div",
47000
47044
  {
47001
47045
  className: headerClassName,
47046
+ "data-testid": `project-list__project-header--${project.name}`,
47002
47047
  onClick: () => isPlain ? handlePlainOpen() : onToggleCollapse(project.name),
47003
47048
  children: [
47004
47049
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -47036,7 +47081,7 @@ function SortableProject({
47036
47081
  children: project.name
47037
47082
  }
47038
47083
  ) }),
47039
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "top", children: project.name })
47084
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "right", children: project.name })
47040
47085
  ] })
47041
47086
  ]
47042
47087
  }
@@ -47061,10 +47106,17 @@ function SortableProject({
47061
47106
  }
47062
47107
  ) }),
47063
47108
  /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuContent, { children: [
47064
- !isPlain && /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuItem, { onClick: () => onToggleCollapse(project.name), children: [
47065
- /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: collapsed ? "" : "rotate-90" }),
47066
- collapsed ? "Expand" : "Collapse"
47067
- ] }),
47109
+ !isPlain && /* @__PURE__ */ jsxRuntimeExports.jsxs(
47110
+ ContextMenuItem,
47111
+ {
47112
+ "data-testid": "project-list__context-menu-item--collapse",
47113
+ onClick: () => onToggleCollapse(project.name),
47114
+ children: [
47115
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: collapsed ? "" : "rotate-90" }),
47116
+ collapsed ? "Expand" : "Collapse"
47117
+ ]
47118
+ }
47119
+ ),
47068
47120
  labels.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuSub, { children: [
47069
47121
  /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuSubTrigger, { children: [
47070
47122
  /* @__PURE__ */ jsxRuntimeExports.jsx(Tag$1, { className: "size-4 mr-2" }),
@@ -47735,6 +47787,7 @@ const KNOWN_AGENTS = [
47735
47787
  { id: "opencode", type: "opencode", label: "OpenCode", defaultCommand: "opencode" }
47736
47788
  ];
47737
47789
  const MODEL_DEFAULT_SENTINEL = "__band_default__";
47790
+ const ID_DELIMITER = "";
47738
47791
  function formatCtxWindow$1(n2) {
47739
47792
  if (n2 >= 1e6) {
47740
47793
  const m2 = n2 / 1e6;
@@ -47743,6 +47796,18 @@ function formatCtxWindow$1(n2) {
47743
47796
  if (n2 >= 1e3) return `${Math.round(n2 / 1e3)}k`;
47744
47797
  return String(n2);
47745
47798
  }
47799
+ function formatLastRefreshed(epochMs) {
47800
+ const diff2 = Date.now() - epochMs;
47801
+ if (diff2 < 6e4) return "just now";
47802
+ if (diff2 < 60 * 6e4) return `${Math.round(diff2 / 6e4)}m ago`;
47803
+ if (diff2 < 24 * 60 * 6e4) return `${Math.round(diff2 / (60 * 6e4))}h ago`;
47804
+ if (diff2 < 48 * 60 * 6e4) return "yesterday";
47805
+ try {
47806
+ return new Date(epochMs).toLocaleDateString();
47807
+ } catch {
47808
+ return new Date(epochMs).toISOString();
47809
+ }
47810
+ }
47746
47811
  function SettingsPage({ open: open2, onOpenChange }) {
47747
47812
  const { settings } = useSettingsQuery();
47748
47813
  const updateSettingsMutation = useUpdateSettings();
@@ -47787,15 +47852,96 @@ function SettingsPage({ open: open2, onOpenChange }) {
47787
47852
  const [agentModels, setAgentModels] = reactExports.useState({});
47788
47853
  const [contextMeterEnabled, setContextMeterEnabled] = useExperimentalContextMeter();
47789
47854
  const adapter2 = useAdapter();
47855
+ const mergeAgentModels = reactExports.useCallback(
47856
+ (agentId, patch2) => setAgentModels((prev2) => ({
47857
+ ...prev2,
47858
+ [agentId]: {
47859
+ models: patch2.models ?? prev2[agentId]?.models ?? [],
47860
+ updatedAt: "updatedAt" in patch2 ? patch2.updatedAt : prev2[agentId]?.updatedAt,
47861
+ isRefreshing: patch2.isRefreshing ?? prev2[agentId]?.isRefreshing ?? false,
47862
+ error: "error" in patch2 ? patch2.error : prev2[agentId]?.error
47863
+ }
47864
+ })),
47865
+ []
47866
+ );
47867
+ const agentIdsKey = reactExports.useMemo(
47868
+ () => codingAgents.map((a2) => a2.id).join(ID_DELIMITER),
47869
+ [codingAgents]
47870
+ );
47871
+ const agentIds = reactExports.useMemo(
47872
+ () => agentIdsKey === "" ? [] : agentIdsKey.split(ID_DELIMITER),
47873
+ [agentIdsKey]
47874
+ );
47790
47875
  reactExports.useEffect(() => {
47791
- if (!adapter2.listModels) return;
47792
- for (const agent of codingAgents) {
47793
- adapter2.listModels(agent.id).then((models) => {
47794
- setAgentModels((prev2) => ({ ...prev2, [agent.type]: models }));
47876
+ setAgentModels((prev2) => {
47877
+ const allowed = new Set(agentIds);
47878
+ const next2 = {};
47879
+ let changed = false;
47880
+ for (const [id28, entry] of Object.entries(prev2)) {
47881
+ if (allowed.has(id28)) {
47882
+ next2[id28] = entry;
47883
+ } else {
47884
+ changed = true;
47885
+ }
47886
+ }
47887
+ return changed ? next2 : prev2;
47888
+ });
47889
+ let aborted2 = false;
47890
+ if (adapter2.listAllModels) {
47891
+ const allowed = new Set(agentIds);
47892
+ adapter2.listAllModels().then((data) => {
47893
+ if (aborted2) return;
47894
+ for (const entry of data.agents) {
47895
+ if (!allowed.has(entry.agentId)) continue;
47896
+ mergeAgentModels(entry.agentId, {
47897
+ models: entry.models,
47898
+ updatedAt: entry.updatedAt
47899
+ });
47900
+ }
47795
47901
  }).catch(() => {
47796
47902
  });
47903
+ } else {
47904
+ for (const id28 of agentIds) {
47905
+ adapter2.listModels?.(id28).then((data) => {
47906
+ if (aborted2) return;
47907
+ mergeAgentModels(id28, { models: data.models, updatedAt: data.updatedAt });
47908
+ }).catch(() => {
47909
+ });
47910
+ }
47797
47911
  }
47798
- }, [codingAgents, adapter2]);
47912
+ return () => {
47913
+ aborted2 = true;
47914
+ };
47915
+ }, [agentIds, adapter2, mergeAgentModels]);
47916
+ const handleRefreshModels = reactExports.useCallback(
47917
+ async (agentId) => {
47918
+ if (!adapter2.refreshModels) return;
47919
+ mergeAgentModels(agentId, { isRefreshing: true, error: void 0 });
47920
+ try {
47921
+ const data = await adapter2.refreshModels(agentId);
47922
+ const result = data.results.find((r2) => r2.agentId === agentId);
47923
+ if (result) {
47924
+ mergeAgentModels(agentId, {
47925
+ models: result.models,
47926
+ updatedAt: result.updatedAt,
47927
+ isRefreshing: false,
47928
+ error: result.error
47929
+ });
47930
+ } else {
47931
+ mergeAgentModels(agentId, {
47932
+ isRefreshing: false,
47933
+ error: `server returned no refresh result for ${agentId}`
47934
+ });
47935
+ }
47936
+ } catch (err) {
47937
+ mergeAgentModels(agentId, {
47938
+ isRefreshing: false,
47939
+ error: err instanceof Error ? err.message : String(err)
47940
+ });
47941
+ }
47942
+ },
47943
+ [adapter2, mergeAgentModels]
47944
+ );
47799
47945
  const isDirty = reactExports.useMemo(() => {
47800
47946
  if (worktreesDir !== (settings.worktreesDir ?? "")) return true;
47801
47947
  if (JSON.stringify(codingAgents) !== JSON.stringify(Array.isArray(settings.codingAgents) ? settings.codingAgents : []))
@@ -48224,7 +48370,11 @@ function SettingsPage({ open: open2, onOpenChange }) {
48224
48370
  /* @__PURE__ */ jsxRuntimeExports.jsx(Accordion, { type: "multiple", className: "w-full", children: KNOWN_AGENTS.map((known) => {
48225
48371
  const agent = codingAgents.find((a2) => a2.type === known.type);
48226
48372
  const enabled = !!agent;
48227
- const models = agentModels[known.type] ?? [];
48373
+ const modelState = agent ? agentModels[agent.id] : void 0;
48374
+ const models = modelState?.models ?? [];
48375
+ const isRefreshing = modelState?.isRefreshing ?? false;
48376
+ const updatedAt = modelState?.updatedAt;
48377
+ const refreshError = modelState?.error;
48228
48378
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
48229
48379
  AccordionItem,
48230
48380
  {
@@ -48300,7 +48450,70 @@ function SettingsPage({ open: open2, onOpenChange }) {
48300
48450
  }
48301
48451
  )
48302
48452
  ] }),
48303
- models.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
48453
+ agent && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
48454
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
48455
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Label$1, { className: "text-xs text-muted-foreground", children: [
48456
+ "Models ",
48457
+ models.length > 0 && `(${models.length})`
48458
+ ] }),
48459
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
48460
+ Button,
48461
+ {
48462
+ type: "button",
48463
+ variant: "ghost",
48464
+ size: "sm",
48465
+ className: "h-6 gap-1 px-2 text-xs",
48466
+ disabled: !enabled || isRefreshing,
48467
+ onClick: () => handleRefreshModels(agent.id),
48468
+ "aria-label": `Refresh models for ${known.label}`,
48469
+ "data-testid": `settings-page__refresh-models-${agent.id}`,
48470
+ children: [
48471
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
48472
+ RefreshCcw,
48473
+ {
48474
+ className: cn$2("size-3", isRefreshing && "animate-spin")
48475
+ }
48476
+ ),
48477
+ isRefreshing ? "Refreshing…" : "Refresh"
48478
+ ]
48479
+ }
48480
+ )
48481
+ ] }),
48482
+ models.length > 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx(
48483
+ "ul",
48484
+ {
48485
+ className: "rounded-md border border-border bg-muted/30 px-2 py-1 text-xs",
48486
+ "data-testid": `settings-page__model-list-${agent.id}`,
48487
+ children: models.map((m2) => (
48488
+ // Two-line layout, mirroring the chat-pane
48489
+ // model dropdown (`ModelLine` in ChatView):
48490
+ // top row is name + optional context-window
48491
+ // pill, second row is the description.
48492
+ // Keeps Settings and the chat picker
48493
+ // visually consistent.
48494
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { className: "flex flex-col items-start gap-0.5 py-1", children: [
48495
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex w-full items-baseline justify-between gap-2", children: [
48496
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium", children: m2.name }),
48497
+ m2.contextWindow !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[10px] uppercase tabular-nums text-muted-foreground", children: [
48498
+ formatCtxWindow$1(m2.contextWindow),
48499
+ " ctx"
48500
+ ] })
48501
+ ] }),
48502
+ m2.description && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-muted-foreground", children: m2.description })
48503
+ ] }, m2.id)
48504
+ ))
48505
+ }
48506
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[11px] text-muted-foreground", children: "No models cached yet — click Refresh." }),
48507
+ refreshError && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-[11px] text-destructive", children: [
48508
+ "Refresh failed: ",
48509
+ refreshError
48510
+ ] }),
48511
+ updatedAt !== void 0 && updatedAt > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-[10px] text-muted-foreground", children: [
48512
+ "Last refreshed ",
48513
+ formatLastRefreshed(updatedAt)
48514
+ ] })
48515
+ ] }),
48516
+ agent && models.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
48304
48517
  /* @__PURE__ */ jsxRuntimeExports.jsx(Label$1, { className: "text-xs text-muted-foreground", children: "Default model" }),
48305
48518
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
48306
48519
  Select,
@@ -63048,13 +63261,13 @@ const noop$5 = () => {
63048
63261
  const freezeIfAvailable = (obj) => {
63049
63262
  if (Object.freeze) Object.freeze(obj);
63050
63263
  };
63051
- function createInnerProxy(callback, path2, memo) {
63264
+ function createInnerProxy(callback, path2, memo2) {
63052
63265
  var _memo$cacheKey;
63053
63266
  const cacheKey = path2.join(".");
63054
- (_memo$cacheKey = memo[cacheKey]) !== null && _memo$cacheKey !== void 0 || (memo[cacheKey] = new Proxy(noop$5, {
63267
+ (_memo$cacheKey = memo2[cacheKey]) !== null && _memo$cacheKey !== void 0 || (memo2[cacheKey] = new Proxy(noop$5, {
63055
63268
  get(_obj, key2) {
63056
63269
  if (typeof key2 !== "string" || key2 === "then") return void 0;
63057
- return createInnerProxy(callback, [...path2, key2], memo);
63270
+ return createInnerProxy(callback, [...path2, key2], memo2);
63058
63271
  },
63059
63272
  apply(_1, _2, args) {
63060
63273
  const lastOfPath = path2[path2.length - 1];
@@ -63075,7 +63288,7 @@ function createInnerProxy(callback, path2, memo) {
63075
63288
  return callback(opts);
63076
63289
  }
63077
63290
  }));
63078
- return memo[cacheKey];
63291
+ return memo2[cacheKey];
63079
63292
  }
63080
63293
  const createRecursiveProxy = (callback) => createInnerProxy(callback, [], emptyObject());
63081
63294
  const createFlatProxy = (callback) => {
@@ -64547,7 +64760,15 @@ class WebDashboardAdapter {
64547
64760
  }
64548
64761
  async listModels(agentId) {
64549
64762
  const data = await this.trpc.models.list.query({ agentId });
64550
- return data.models;
64763
+ return data;
64764
+ }
64765
+ async listAllModels() {
64766
+ const data = await this.trpc.models.listAll.query();
64767
+ return data;
64768
+ }
64769
+ async refreshModels(agentId) {
64770
+ const data = await this.trpc.models.refresh.mutate({ agentId });
64771
+ return data;
64551
64772
  }
64552
64773
  statusHandlers = /* @__PURE__ */ new Set();
64553
64774
  statusSubscription = null;
@@ -80430,6 +80651,18 @@ function applyMaximizedGroupToApi(api, desired) {
80430
80651
  if (next2.api.isMaximized()) return;
80431
80652
  next2.api.maximize();
80432
80653
  }
80654
+ function applyGroupActiveViewsToApi(api, state2) {
80655
+ try {
80656
+ for (const viewId of Object.values(state2.groups)) {
80657
+ const panel = api.getPanel(viewId);
80658
+ if (!panel) continue;
80659
+ if (panel.api.isActive) continue;
80660
+ if (panel.group.panels.length <= 1) continue;
80661
+ panel.api.setActive();
80662
+ }
80663
+ } catch {
80664
+ }
80665
+ }
80433
80666
  const EDGE_GROUP_IDS$1 = {
80434
80667
  left: "edge-left",
80435
80668
  right: "edge-right",
@@ -108750,7 +108983,7 @@ var tn = f$5("block", "before:content-[counter(line)]", "before:inline-block", "
108750
108983
  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 });
108751
108984
  var Se$1 = reactExports.createContext({ code: "" }), de$2 = () => reactExports.useContext(Se$1);
108752
108985
  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 }) });
108753
- var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-CSDiX8tu.js").then((e3) => ({ default: e3.HighlightedCodeBlockBody }))), rt = ({ code: e3, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
108986
+ var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-C6BqMnvu.js").then((e3) => ({ default: e3.HighlightedCodeBlockBody }))), rt = ({ code: e3, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
108754
108987
  let i2 = reactExports.useMemo(() => e3.replace(cn, ""), [e3]), c2 = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i2.split(`
108755
108988
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i2]);
108756
108989
  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 }) })] }) });
@@ -109072,7 +109305,7 @@ var Dt = ({ children: e3, className: t2, onDownload: o3, onError: n2 }) => {
109072
109305
  }, []), 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] });
109073
109306
  };
109074
109307
  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 }) })] });
109075
- var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-Bo2_mtnV.js").then((e3) => ({ default: e3.Mermaid }))), Kn = /language-([^\s]+)/;
109308
+ var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-Cof8t4J_.js").then((e3) => ({ default: e3.Mermaid }))), Kn = /language-([^\s]+)/;
109076
109309
  function ke$1(e3, t2) {
109077
109310
  if (!(e3 != null && e3.position || t2 != null && t2.position)) return true;
109078
109311
  if (!(e3 != null && e3.position && (t2 != null && t2.position))) return false;
@@ -161243,12 +161476,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
161243
161476
  registerLayoutLoaders([
161244
161477
  {
161245
161478
  name: "dagre",
161246
- loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-DWtR7ypz.js"), "loader")
161479
+ loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-BKfzYlJQ.js"), "loader")
161247
161480
  },
161248
161481
  ...[
161249
161482
  {
161250
161483
  name: "cose-bilkent",
161251
- loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-Cm4DnyNk.js"), "loader")
161484
+ loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-BiP6P-09.js"), "loader")
161252
161485
  }
161253
161486
  ]
161254
161487
  ]);
@@ -161687,7 +161920,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
161687
161920
  return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
161688
161921
  }, "detector");
161689
161922
  var loader = /* @__PURE__ */ __name(async () => {
161690
- const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-DYC3sqOW.js");
161923
+ const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-9PjJESuA.js");
161691
161924
  return { id, diagram: diagram2 };
161692
161925
  }, "loader");
161693
161926
  var plugin = {
@@ -161704,7 +161937,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
161704
161937
  return /^\s*graph/.test(txt);
161705
161938
  }, "detector");
161706
161939
  var loader2 = /* @__PURE__ */ __name(async () => {
161707
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CMgKpatm.js");
161940
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CXnLZPl0.js");
161708
161941
  return { id: id2, diagram: diagram2 };
161709
161942
  }, "loader");
161710
161943
  var plugin2 = {
@@ -161727,7 +161960,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
161727
161960
  return /^\s*flowchart/.test(txt);
161728
161961
  }, "detector");
161729
161962
  var loader3 = /* @__PURE__ */ __name(async () => {
161730
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CMgKpatm.js");
161963
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CXnLZPl0.js");
161731
161964
  return { id: id3, diagram: diagram2 };
161732
161965
  }, "loader");
161733
161966
  var plugin3 = {
@@ -161741,7 +161974,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
161741
161974
  return /^\s*erDiagram/.test(txt);
161742
161975
  }, "detector");
161743
161976
  var loader4 = /* @__PURE__ */ __name(async () => {
161744
- const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-DYAuTF-e.js");
161977
+ const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-CRPjeaHB.js");
161745
161978
  return { id: id4, diagram: diagram2 };
161746
161979
  }, "loader");
161747
161980
  var plugin4 = {
@@ -161755,7 +161988,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
161755
161988
  return /^\s*gitGraph/.test(txt);
161756
161989
  }, "detector");
161757
161990
  var loader5 = /* @__PURE__ */ __name(async () => {
161758
- const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-CSFtzM0S.js");
161991
+ const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-CZNtwgUE.js");
161759
161992
  return { id: id5, diagram: diagram2 };
161760
161993
  }, "loader");
161761
161994
  var plugin5 = {
@@ -161769,7 +162002,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
161769
162002
  return /^\s*gantt/.test(txt);
161770
162003
  }, "detector");
161771
162004
  var loader6 = /* @__PURE__ */ __name(async () => {
161772
- const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-BqUjIeN-.js");
162005
+ const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-CP5EwGxj.js");
161773
162006
  return { id: id6, diagram: diagram2 };
161774
162007
  }, "loader");
161775
162008
  var plugin6 = {
@@ -161783,7 +162016,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
161783
162016
  return /^\s*info/.test(txt);
161784
162017
  }, "detector");
161785
162018
  var loader7 = /* @__PURE__ */ __name(async () => {
161786
- const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-CMic1Hhh.js");
162019
+ const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-BqzWimk3.js");
161787
162020
  return { id: id7, diagram: diagram2 };
161788
162021
  }, "loader");
161789
162022
  var info = {
@@ -161796,7 +162029,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
161796
162029
  return /^\s*pie/.test(txt);
161797
162030
  }, "detector");
161798
162031
  var loader8 = /* @__PURE__ */ __name(async () => {
161799
- const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-CEDLfCSy.js");
162032
+ const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-BPUa7SIP.js");
161800
162033
  return { id: id8, diagram: diagram2 };
161801
162034
  }, "loader");
161802
162035
  var pie = {
@@ -161809,7 +162042,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
161809
162042
  return /^\s*quadrantChart/.test(txt);
161810
162043
  }, "detector");
161811
162044
  var loader9 = /* @__PURE__ */ __name(async () => {
161812
- const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-CWfJcZnB.js");
162045
+ const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-CkonmhO6.js");
161813
162046
  return { id: id9, diagram: diagram2 };
161814
162047
  }, "loader");
161815
162048
  var plugin7 = {
@@ -161823,7 +162056,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
161823
162056
  return /^\s*xychart(-beta)?/.test(txt);
161824
162057
  }, "detector");
161825
162058
  var loader10 = /* @__PURE__ */ __name(async () => {
161826
- const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-XlYGoU4Z.js");
162059
+ const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-C22gtuGl.js");
161827
162060
  return { id: id10, diagram: diagram2 };
161828
162061
  }, "loader");
161829
162062
  var plugin8 = {
@@ -161837,7 +162070,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
161837
162070
  return /^\s*requirement(Diagram)?/.test(txt);
161838
162071
  }, "detector");
161839
162072
  var loader11 = /* @__PURE__ */ __name(async () => {
161840
- const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-0SINZ3cV.js");
162073
+ const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-B39ng8tF.js");
161841
162074
  return { id: id11, diagram: diagram2 };
161842
162075
  }, "loader");
161843
162076
  var plugin9 = {
@@ -161851,7 +162084,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
161851
162084
  return /^\s*sequenceDiagram/.test(txt);
161852
162085
  }, "detector");
161853
162086
  var loader12 = /* @__PURE__ */ __name(async () => {
161854
- const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-BV5_vSVf.js");
162087
+ const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-CXIpjJu4.js");
161855
162088
  return { id: id12, diagram: diagram2 };
161856
162089
  }, "loader");
161857
162090
  var plugin10 = {
@@ -161868,7 +162101,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
161868
162101
  return /^\s*classDiagram/.test(txt);
161869
162102
  }, "detector");
161870
162103
  var loader13 = /* @__PURE__ */ __name(async () => {
161871
- const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-CqTf3oAt.js");
162104
+ const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-D1OcdIXp.js");
161872
162105
  return { id: id13, diagram: diagram2 };
161873
162106
  }, "loader");
161874
162107
  var plugin11 = {
@@ -161885,7 +162118,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
161885
162118
  return /^\s*classDiagram-v2/.test(txt);
161886
162119
  }, "detector");
161887
162120
  var loader14 = /* @__PURE__ */ __name(async () => {
161888
- const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-CqTf3oAt.js");
162121
+ const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-D1OcdIXp.js");
161889
162122
  return { id: id14, diagram: diagram2 };
161890
162123
  }, "loader");
161891
162124
  var plugin12 = {
@@ -161902,7 +162135,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
161902
162135
  return /^\s*stateDiagram/.test(txt);
161903
162136
  }, "detector");
161904
162137
  var loader15 = /* @__PURE__ */ __name(async () => {
161905
- const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-C3wAlRbY.js");
162138
+ const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-DSp5PEkn.js");
161906
162139
  return { id: id15, diagram: diagram2 };
161907
162140
  }, "loader");
161908
162141
  var plugin13 = {
@@ -161922,7 +162155,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
161922
162155
  return false;
161923
162156
  }, "detector");
161924
162157
  var loader16 = /* @__PURE__ */ __name(async () => {
161925
- const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-BvzsTmR_.js");
162158
+ const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-B5TiwK_8.js");
161926
162159
  return { id: id16, diagram: diagram2 };
161927
162160
  }, "loader");
161928
162161
  var plugin14 = {
@@ -161936,7 +162169,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
161936
162169
  return /^\s*journey/.test(txt);
161937
162170
  }, "detector");
161938
162171
  var loader17 = /* @__PURE__ */ __name(async () => {
161939
- const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-CravZq_h.js");
162172
+ const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-TTA7OGV5.js");
161940
162173
  return { id: id17, diagram: diagram2 };
161941
162174
  }, "loader");
161942
162175
  var plugin15 = {
@@ -162003,7 +162236,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
162003
162236
  return false;
162004
162237
  }, "detector");
162005
162238
  var loader18 = /* @__PURE__ */ __name(async () => {
162006
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CMgKpatm.js");
162239
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CXnLZPl0.js");
162007
162240
  return { id: id18, diagram: diagram2 };
162008
162241
  }, "loader");
162009
162242
  var plugin16 = {
@@ -162017,7 +162250,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
162017
162250
  return /^\s*timeline/.test(txt);
162018
162251
  }, "detector");
162019
162252
  var loader19 = /* @__PURE__ */ __name(async () => {
162020
- const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-BwVTrWyj.js");
162253
+ const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-DvosEzgh.js");
162021
162254
  return { id: id19, diagram: diagram2 };
162022
162255
  }, "loader");
162023
162256
  var plugin17 = {
@@ -162031,7 +162264,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
162031
162264
  return /^\s*mindmap/.test(txt);
162032
162265
  }, "detector");
162033
162266
  var loader20 = /* @__PURE__ */ __name(async () => {
162034
- const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-DNTQXwUn.js");
162267
+ const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-DeGYTIld.js");
162035
162268
  return { id: id20, diagram: diagram2 };
162036
162269
  }, "loader");
162037
162270
  var plugin18 = {
@@ -162045,7 +162278,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
162045
162278
  return /^\s*kanban/.test(txt);
162046
162279
  }, "detector");
162047
162280
  var loader21 = /* @__PURE__ */ __name(async () => {
162048
- const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-Ik9j3Xny.js");
162281
+ const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-DxNhleha.js");
162049
162282
  return { id: id21, diagram: diagram2 };
162050
162283
  }, "loader");
162051
162284
  var plugin19 = {
@@ -162059,7 +162292,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
162059
162292
  return /^\s*sankey(-beta)?/.test(txt);
162060
162293
  }, "detector");
162061
162294
  var loader22 = /* @__PURE__ */ __name(async () => {
162062
- const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-U0rb6LX8.js");
162295
+ const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-61A7I6h9.js");
162063
162296
  return { id: id22, diagram: diagram2 };
162064
162297
  }, "loader");
162065
162298
  var plugin20 = {
@@ -162073,7 +162306,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
162073
162306
  return /^\s*packet(-beta)?/.test(txt);
162074
162307
  }, "detector");
162075
162308
  var loader23 = /* @__PURE__ */ __name(async () => {
162076
- const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-x_2H2okG.js");
162309
+ const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-CUKugrbt.js");
162077
162310
  return { id: id23, diagram: diagram2 };
162078
162311
  }, "loader");
162079
162312
  var packet = {
@@ -162086,7 +162319,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
162086
162319
  return /^\s*radar-beta/.test(txt);
162087
162320
  }, "detector");
162088
162321
  var loader24 = /* @__PURE__ */ __name(async () => {
162089
- const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-C_GABXU2.js");
162322
+ const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-CxL6qeVX.js");
162090
162323
  return { id: id24, diagram: diagram2 };
162091
162324
  }, "loader");
162092
162325
  var radar = {
@@ -162099,7 +162332,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
162099
162332
  return /^\s*block(-beta)?/.test(txt);
162100
162333
  }, "detector");
162101
162334
  var loader25 = /* @__PURE__ */ __name(async () => {
162102
- const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-DR7gt_eL.js");
162335
+ const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-DGV6m5iW.js");
162103
162336
  return { id: id25, diagram: diagram2 };
162104
162337
  }, "loader");
162105
162338
  var plugin21 = {
@@ -162113,7 +162346,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
162113
162346
  return /^\s*architecture/.test(txt);
162114
162347
  }, "detector");
162115
162348
  var loader26 = /* @__PURE__ */ __name(async () => {
162116
- const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-Vt3dNClh.js");
162349
+ const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-vPxmruSN.js");
162117
162350
  return { id: id26, diagram: diagram2 };
162118
162351
  }, "loader");
162119
162352
  var architecture = {
@@ -162127,7 +162360,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
162127
162360
  return /^\s*treemap/.test(txt);
162128
162361
  }, "detector");
162129
162362
  var loader27 = /* @__PURE__ */ __name(async () => {
162130
- const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-3K0tKsmi.js");
162363
+ const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-BF6r9xQS.js");
162131
162364
  return { id: id27, diagram: diagram2 };
162132
162365
  }, "loader");
162133
162366
  var treemap = {
@@ -164442,6 +164675,54 @@ function CodeBrowserView({
164442
164675
  ) })
164443
164676
  );
164444
164677
  }
164678
+ async function writeClipboardText(text2) {
164679
+ if (typeof navigator !== "undefined" && navigator.clipboard?.writeText) {
164680
+ try {
164681
+ await navigator.clipboard.writeText(text2);
164682
+ return true;
164683
+ } catch {
164684
+ }
164685
+ }
164686
+ return legacyCopy(text2);
164687
+ }
164688
+ function legacyCopy(text2) {
164689
+ if (typeof document === "undefined") return false;
164690
+ const textarea = document.createElement("textarea");
164691
+ textarea.value = text2;
164692
+ textarea.setAttribute("readonly", "");
164693
+ textarea.style.position = "fixed";
164694
+ textarea.style.top = "0";
164695
+ textarea.style.left = "0";
164696
+ textarea.style.width = "1px";
164697
+ textarea.style.height = "1px";
164698
+ textarea.style.padding = "0";
164699
+ textarea.style.border = "0";
164700
+ textarea.style.opacity = "0";
164701
+ textarea.style.pointerEvents = "none";
164702
+ document.body.appendChild(textarea);
164703
+ const previouslyFocused = document.activeElement;
164704
+ try {
164705
+ textarea.focus();
164706
+ textarea.select();
164707
+ textarea.setSelectionRange(0, text2.length);
164708
+ return document.execCommand("copy");
164709
+ } catch {
164710
+ return false;
164711
+ } finally {
164712
+ document.body.removeChild(textarea);
164713
+ previouslyFocused?.focus?.();
164714
+ }
164715
+ }
164716
+ async function readClipboardText() {
164717
+ if (typeof navigator === "undefined" || !navigator.clipboard?.readText) {
164718
+ return "";
164719
+ }
164720
+ try {
164721
+ return await navigator.clipboard.readText();
164722
+ } catch {
164723
+ return "";
164724
+ }
164725
+ }
164445
164726
  function cycleTabsInActiveGroup(api, direction, refocus) {
164446
164727
  const group = api?.activeGroup;
164447
164728
  if (!api || !group) return;
@@ -171436,7 +171717,7 @@ function mergeAnimations(...animations) {
171436
171717
  return instant ? "instant" : animationCache.get(key2);
171437
171718
  }
171438
171719
  const StickToBottomContext = reactExports.createContext(null);
171439
- const useIsomorphicLayoutEffect$1 = typeof window !== "undefined" ? reactExports.useLayoutEffect : reactExports.useEffect;
171720
+ const useIsomorphicLayoutEffect$2 = typeof window !== "undefined" ? reactExports.useLayoutEffect : reactExports.useEffect;
171440
171721
  function StickToBottom({ instance, children: children2, resize, initial, mass, damping, stiffness, targetScrollTop: currentTargetScrollTop, contextRef, ...props }) {
171441
171722
  const customTargetScrollTop = reactExports.useRef(null);
171442
171723
  const targetScrollTop = reactExports.useCallback((target, elements) => {
@@ -171476,7 +171757,7 @@ function StickToBottom({ instance, children: children2, resize, initial, mass, d
171476
171757
  state2
171477
171758
  ]);
171478
171759
  reactExports.useImperativeHandle(contextRef, () => context2, [context2]);
171479
- useIsomorphicLayoutEffect$1(() => {
171760
+ useIsomorphicLayoutEffect$2(() => {
171480
171761
  if (!scrollRef.current) {
171481
171762
  return;
171482
171763
  }
@@ -172605,6 +172886,7 @@ function TextPreview({ url, filename }) {
172605
172886
  const Message = ({ className, from: from2, ...props }) => /* @__PURE__ */ jsxRuntimeExports.jsx(
172606
172887
  "div",
172607
172888
  {
172889
+ "data-testid": from2 === "user" ? "chat-pane__user-message" : "chat-pane__assistant-message",
172608
172890
  className: cn$2(
172609
172891
  "group flex w-full min-w-0 flex-col gap-2",
172610
172892
  from2 === "user" ? "is-user ml-auto max-w-[90%] justify-end" : "is-assistant",
@@ -173821,6 +174103,1466 @@ function useChatSubscription(opts) {
173821
174103
  cancel
173822
174104
  };
173823
174105
  }
174106
+ function createLazyMeasurementsView(count2, flat, getItemKey) {
174107
+ const cache = new Array(count2);
174108
+ return new Proxy(cache, {
174109
+ get(target, prop, receiver) {
174110
+ if (typeof prop === "string") {
174111
+ const c2 = prop.charCodeAt(0);
174112
+ if (c2 >= 48 && c2 <= 57) {
174113
+ const i2 = +prop;
174114
+ if (Number.isInteger(i2) && i2 >= 0 && i2 < count2) {
174115
+ let v2 = target[i2];
174116
+ if (!v2) {
174117
+ const s2 = flat[i2 * 2];
174118
+ v2 = target[i2] = {
174119
+ index: i2,
174120
+ key: getItemKey(i2),
174121
+ start: s2,
174122
+ size: flat[i2 * 2 + 1],
174123
+ end: s2 + flat[i2 * 2 + 1],
174124
+ lane: 0
174125
+ };
174126
+ }
174127
+ return v2;
174128
+ }
174129
+ }
174130
+ if (prop === "length") return count2;
174131
+ }
174132
+ return Reflect.get(target, prop, receiver);
174133
+ }
174134
+ });
174135
+ }
174136
+ function memo(getDeps, fn2, opts) {
174137
+ let deps = opts.initialDeps ?? [];
174138
+ let result;
174139
+ let isInitial = true;
174140
+ function memoizedFunction() {
174141
+ const newDeps = getDeps();
174142
+ const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index2) => deps[index2] !== dep);
174143
+ if (!depsChanged) {
174144
+ return result;
174145
+ }
174146
+ deps = newDeps;
174147
+ result = fn2(...newDeps);
174148
+ if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {
174149
+ opts.onChange(result);
174150
+ }
174151
+ isInitial = false;
174152
+ return result;
174153
+ }
174154
+ memoizedFunction.updateDeps = (newDeps) => {
174155
+ deps = newDeps;
174156
+ };
174157
+ return memoizedFunction;
174158
+ }
174159
+ function notUndefined(value, msg) {
174160
+ if (value === void 0) {
174161
+ throw new Error(`Unexpected undefined${""}`);
174162
+ } else {
174163
+ return value;
174164
+ }
174165
+ }
174166
+ const approxEqual = (a2, b2) => Math.abs(a2 - b2) < 1.01;
174167
+ const debounce$2 = (targetWindow, fn2, ms) => {
174168
+ let timeoutId2;
174169
+ return function(...args) {
174170
+ targetWindow.clearTimeout(timeoutId2);
174171
+ timeoutId2 = targetWindow.setTimeout(() => fn2.apply(this, args), ms);
174172
+ };
174173
+ };
174174
+ let _isIOSResult;
174175
+ const isIOSWebKit = () => {
174176
+ if (_isIOSResult !== void 0) return _isIOSResult;
174177
+ if (typeof navigator === "undefined") return _isIOSResult = false;
174178
+ if (/iP(hone|od|ad)/.test(navigator.userAgent)) return _isIOSResult = true;
174179
+ const mtp = navigator.maxTouchPoints;
174180
+ return _isIOSResult = navigator.platform === "MacIntel" && mtp !== void 0 && mtp > 0;
174181
+ };
174182
+ const getRect = (element2) => {
174183
+ const { offsetWidth, offsetHeight } = element2;
174184
+ return { width: offsetWidth, height: offsetHeight };
174185
+ };
174186
+ const defaultKeyExtractor = (index2) => index2;
174187
+ const defaultRangeExtractor = (range2) => {
174188
+ const start2 = Math.max(range2.startIndex - range2.overscan, 0);
174189
+ const end = Math.min(range2.endIndex + range2.overscan, range2.count - 1);
174190
+ const len = end - start2 + 1;
174191
+ const arr = new Array(len);
174192
+ for (let i2 = 0; i2 < len; i2++) {
174193
+ arr[i2] = start2 + i2;
174194
+ }
174195
+ return arr;
174196
+ };
174197
+ const observeElementRect = (instance, cb) => {
174198
+ const element2 = instance.scrollElement;
174199
+ if (!element2) {
174200
+ return;
174201
+ }
174202
+ const targetWindow = instance.targetWindow;
174203
+ if (!targetWindow) {
174204
+ return;
174205
+ }
174206
+ const handler = (rect2) => {
174207
+ const { width, height } = rect2;
174208
+ cb({ width: Math.round(width), height: Math.round(height) });
174209
+ };
174210
+ handler(getRect(element2));
174211
+ if (!targetWindow.ResizeObserver) {
174212
+ return () => {
174213
+ };
174214
+ }
174215
+ const observer = new targetWindow.ResizeObserver((entries2) => {
174216
+ const run2 = () => {
174217
+ const entry = entries2[0];
174218
+ if (entry == null ? void 0 : entry.borderBoxSize) {
174219
+ const box = entry.borderBoxSize[0];
174220
+ if (box) {
174221
+ handler({ width: box.inlineSize, height: box.blockSize });
174222
+ return;
174223
+ }
174224
+ }
174225
+ handler(getRect(element2));
174226
+ };
174227
+ instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run2) : run2();
174228
+ });
174229
+ observer.observe(element2, { box: "border-box" });
174230
+ return () => {
174231
+ observer.unobserve(element2);
174232
+ };
174233
+ };
174234
+ const addEventListenerOptions = {
174235
+ passive: true
174236
+ };
174237
+ const supportsScrollend = typeof window == "undefined" ? true : "onscrollend" in window;
174238
+ const observeOffset = (instance, cb, readOffset) => {
174239
+ const element2 = instance.scrollElement;
174240
+ if (!element2) {
174241
+ return;
174242
+ }
174243
+ const targetWindow = instance.targetWindow;
174244
+ if (!targetWindow) {
174245
+ return;
174246
+ }
174247
+ const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;
174248
+ let offset2 = 0;
174249
+ const fallback = registerScrollendEvent ? null : debounce$2(
174250
+ targetWindow,
174251
+ () => cb(offset2, false),
174252
+ instance.options.isScrollingResetDelay
174253
+ );
174254
+ const createHandler = (isScrolling) => () => {
174255
+ offset2 = readOffset(element2);
174256
+ fallback == null ? void 0 : fallback();
174257
+ cb(offset2, isScrolling);
174258
+ };
174259
+ const handler = createHandler(true);
174260
+ const endHandler = createHandler(false);
174261
+ element2.addEventListener("scroll", handler, addEventListenerOptions);
174262
+ if (registerScrollendEvent) {
174263
+ element2.addEventListener("scrollend", endHandler, addEventListenerOptions);
174264
+ }
174265
+ return () => {
174266
+ element2.removeEventListener("scroll", handler);
174267
+ if (registerScrollendEvent) {
174268
+ element2.removeEventListener("scrollend", endHandler);
174269
+ }
174270
+ };
174271
+ };
174272
+ const observeElementOffset = (instance, cb) => observeOffset(instance, cb, (el) => {
174273
+ const { horizontal, isRtl } = instance.options;
174274
+ return horizontal ? el.scrollLeft * (isRtl && -1 || 1) : el.scrollTop;
174275
+ });
174276
+ const measureElement = (element2, entry, instance) => {
174277
+ if (instance.options.useCachedMeasurements) {
174278
+ const index2 = instance.indexFromElement(element2);
174279
+ const key2 = instance.options.getItemKey(index2);
174280
+ return instance.itemSizeCache.get(key2) ?? instance.options.estimateSize(index2);
174281
+ }
174282
+ if (entry == null ? void 0 : entry.borderBoxSize) {
174283
+ const box = entry.borderBoxSize[0];
174284
+ if (box) {
174285
+ const size2 = Math.round(
174286
+ box[instance.options.horizontal ? "inlineSize" : "blockSize"]
174287
+ );
174288
+ return size2;
174289
+ }
174290
+ }
174291
+ if (!entry) {
174292
+ const index2 = instance.indexFromElement(element2);
174293
+ const key2 = instance.options.getItemKey(index2);
174294
+ const cachedSize = instance.itemSizeCache.get(key2);
174295
+ if (cachedSize !== void 0) {
174296
+ return cachedSize;
174297
+ }
174298
+ }
174299
+ return element2[instance.options.horizontal ? "offsetWidth" : "offsetHeight"];
174300
+ };
174301
+ const scrollWithAdjustments = (offset2, {
174302
+ adjustments = 0,
174303
+ behavior
174304
+ }, instance) => {
174305
+ var _a3, _b3;
174306
+ (_b3 = (_a3 = instance.scrollElement) == null ? void 0 : _a3.scrollTo) == null ? void 0 : _b3.call(_a3, {
174307
+ [instance.options.horizontal ? "left" : "top"]: offset2 + adjustments,
174308
+ behavior
174309
+ });
174310
+ };
174311
+ const elementScroll = scrollWithAdjustments;
174312
+ class Virtualizer {
174313
+ constructor(opts) {
174314
+ this.unsubs = [];
174315
+ this.scrollElement = null;
174316
+ this.targetWindow = null;
174317
+ this.isScrolling = false;
174318
+ this.scrollState = null;
174319
+ this.measurementsCache = [];
174320
+ this._flatMeasurements = null;
174321
+ this.itemSizeCache = /* @__PURE__ */ new Map();
174322
+ this.itemSizeCacheVersion = 0;
174323
+ this.laneAssignments = /* @__PURE__ */ new Map();
174324
+ this.pendingMin = null;
174325
+ this.prevLanes = void 0;
174326
+ this.lanesChangedFlag = false;
174327
+ this.lanesSettling = false;
174328
+ this.pendingScrollAnchor = null;
174329
+ this.scrollRect = null;
174330
+ this.scrollOffset = null;
174331
+ this.scrollDirection = null;
174332
+ this.scrollAdjustments = 0;
174333
+ this._iosDeferredAdjustment = 0;
174334
+ this._iosTouching = false;
174335
+ this._iosJustTouchEnded = false;
174336
+ this._iosTouchEndTimerId = null;
174337
+ this._intendedScrollOffset = null;
174338
+ this.elementsCache = /* @__PURE__ */ new Map();
174339
+ this.now = () => {
174340
+ var _a3, _b3, _c2;
174341
+ return ((_c2 = (_b3 = (_a3 = this.targetWindow) == null ? void 0 : _a3.performance) == null ? void 0 : _b3.now) == null ? void 0 : _c2.call(_b3)) ?? Date.now();
174342
+ };
174343
+ this.observer = /* @__PURE__ */ (() => {
174344
+ let _ro = null;
174345
+ const get2 = () => {
174346
+ if (_ro) {
174347
+ return _ro;
174348
+ }
174349
+ if (!this.targetWindow || !this.targetWindow.ResizeObserver) {
174350
+ return null;
174351
+ }
174352
+ return _ro = new this.targetWindow.ResizeObserver((entries2) => {
174353
+ entries2.forEach((entry) => {
174354
+ const run2 = () => {
174355
+ const node2 = entry.target;
174356
+ const index2 = this.indexFromElement(node2);
174357
+ if (!node2.isConnected) {
174358
+ this.observer.unobserve(node2);
174359
+ for (const [cacheKey, cachedNode] of this.elementsCache) {
174360
+ if (cachedNode === node2) {
174361
+ this.elementsCache.delete(cacheKey);
174362
+ break;
174363
+ }
174364
+ }
174365
+ return;
174366
+ }
174367
+ if (this.shouldMeasureDuringScroll(index2)) {
174368
+ this.resizeItem(
174369
+ index2,
174370
+ this.options.measureElement(node2, entry, this)
174371
+ );
174372
+ }
174373
+ };
174374
+ this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run2) : run2();
174375
+ });
174376
+ });
174377
+ };
174378
+ return {
174379
+ disconnect: () => {
174380
+ var _a3;
174381
+ (_a3 = get2()) == null ? void 0 : _a3.disconnect();
174382
+ _ro = null;
174383
+ },
174384
+ observe: (target) => {
174385
+ var _a3;
174386
+ return (_a3 = get2()) == null ? void 0 : _a3.observe(target, { box: "border-box" });
174387
+ },
174388
+ unobserve: (target) => {
174389
+ var _a3;
174390
+ return (_a3 = get2()) == null ? void 0 : _a3.unobserve(target);
174391
+ }
174392
+ };
174393
+ })();
174394
+ this.range = null;
174395
+ this.setOptions = (opts2) => {
174396
+ var _a3, _b3;
174397
+ const merged = {
174398
+ debug: false,
174399
+ initialOffset: 0,
174400
+ overscan: 1,
174401
+ paddingStart: 0,
174402
+ paddingEnd: 0,
174403
+ scrollPaddingStart: 0,
174404
+ scrollPaddingEnd: 0,
174405
+ horizontal: false,
174406
+ getItemKey: defaultKeyExtractor,
174407
+ rangeExtractor: defaultRangeExtractor,
174408
+ onChange: () => {
174409
+ },
174410
+ measureElement,
174411
+ initialRect: { width: 0, height: 0 },
174412
+ scrollMargin: 0,
174413
+ gap: 0,
174414
+ indexAttribute: "data-index",
174415
+ initialMeasurementsCache: [],
174416
+ lanes: 1,
174417
+ anchorTo: "start",
174418
+ followOnAppend: false,
174419
+ scrollEndThreshold: 1,
174420
+ isScrollingResetDelay: 150,
174421
+ enabled: true,
174422
+ isRtl: false,
174423
+ useScrollendEvent: false,
174424
+ useAnimationFrameWithResizeObserver: false,
174425
+ laneAssignmentMode: "estimate",
174426
+ useCachedMeasurements: false
174427
+ };
174428
+ for (const key2 in opts2) {
174429
+ const v2 = opts2[key2];
174430
+ if (v2 !== void 0) merged[key2] = v2;
174431
+ }
174432
+ const prevOptions = this.options;
174433
+ let anchor2 = null;
174434
+ let followOnAppend = null;
174435
+ let edgeKeysChanged = false;
174436
+ if (prevOptions !== void 0 && prevOptions.enabled && merged.enabled && merged.anchorTo === "end" && this.scrollElement !== null) {
174437
+ const prevCount = prevOptions.count;
174438
+ const nextCount = merged.count;
174439
+ const measurements = this.getMeasurements();
174440
+ const prevFirstKey = prevCount > 0 ? ((_a3 = measurements[0]) == null ? void 0 : _a3.key) ?? prevOptions.getItemKey(0) : null;
174441
+ const prevLastKey = prevCount > 0 ? ((_b3 = measurements[prevCount - 1]) == null ? void 0 : _b3.key) ?? prevOptions.getItemKey(prevCount - 1) : null;
174442
+ const didCountChange = nextCount !== prevCount;
174443
+ const didEdgeKeysChange = didCountChange || prevCount > 0 && nextCount > 0 && (merged.getItemKey(0) !== prevFirstKey || merged.getItemKey(nextCount - 1) !== prevLastKey);
174444
+ if (didEdgeKeysChange) {
174445
+ edgeKeysChanged = true;
174446
+ const item = prevCount > 0 ? this.getVirtualItemForOffset(this.getScrollOffset()) ?? measurements[0] : null;
174447
+ if (item) {
174448
+ anchor2 = [item.key, this.getScrollOffset() - item.start];
174449
+ }
174450
+ const behavior = merged.followOnAppend === true ? "auto" : merged.followOnAppend || null;
174451
+ if (behavior && nextCount > prevCount && this.isAtEnd(prevOptions.scrollEndThreshold) && (prevCount === 0 || merged.getItemKey(nextCount - 1) !== prevLastKey)) {
174452
+ followOnAppend = behavior;
174453
+ }
174454
+ }
174455
+ }
174456
+ this.options = merged;
174457
+ if (edgeKeysChanged) {
174458
+ this.pendingMin = 0;
174459
+ this.itemSizeCacheVersion++;
174460
+ }
174461
+ let anchorResolved = false;
174462
+ let anchorDelta = 0;
174463
+ if (anchor2 && this.scrollOffset !== null) {
174464
+ const [anchorKey, anchorOffset] = anchor2;
174465
+ const newMeasurements = this.getMeasurements();
174466
+ const { count: count2, getItemKey } = this.options;
174467
+ let idx = 0;
174468
+ while (idx < count2 && getItemKey(idx) !== anchorKey) {
174469
+ idx++;
174470
+ }
174471
+ if (idx < count2) {
174472
+ const anchorItem = newMeasurements[idx];
174473
+ if (anchorItem) {
174474
+ const newOffset = anchorItem.start + anchorOffset;
174475
+ if (newOffset !== this.scrollOffset) {
174476
+ anchorDelta = newOffset - this.scrollOffset;
174477
+ this.scrollOffset = newOffset;
174478
+ anchorResolved = true;
174479
+ }
174480
+ }
174481
+ }
174482
+ }
174483
+ if (anchorResolved || followOnAppend) {
174484
+ this.pendingScrollAnchor = [
174485
+ anchorResolved ? anchor2[0] : null,
174486
+ anchorResolved ? anchor2[1] : 0,
174487
+ followOnAppend,
174488
+ anchorDelta
174489
+ ];
174490
+ }
174491
+ };
174492
+ this.notify = (sync) => {
174493
+ var _a3, _b3;
174494
+ (_b3 = (_a3 = this.options).onChange) == null ? void 0 : _b3.call(_a3, this, sync);
174495
+ };
174496
+ this.maybeNotify = memo(
174497
+ () => {
174498
+ this.calculateRange();
174499
+ return [
174500
+ this.isScrolling,
174501
+ this.range ? this.range.startIndex : null,
174502
+ this.range ? this.range.endIndex : null
174503
+ ];
174504
+ },
174505
+ (isScrolling) => {
174506
+ this.notify(isScrolling);
174507
+ },
174508
+ {
174509
+ key: false,
174510
+ debug: () => this.options.debug,
174511
+ initialDeps: [
174512
+ this.isScrolling,
174513
+ this.range ? this.range.startIndex : null,
174514
+ this.range ? this.range.endIndex : null
174515
+ ]
174516
+ }
174517
+ );
174518
+ this.cleanup = () => {
174519
+ this.unsubs.filter(Boolean).forEach((d2) => d2());
174520
+ this.unsubs = [];
174521
+ this.observer.disconnect();
174522
+ if (this.rafId != null && this.targetWindow) {
174523
+ this.targetWindow.cancelAnimationFrame(this.rafId);
174524
+ this.rafId = null;
174525
+ }
174526
+ this.scrollState = null;
174527
+ this.scrollElement = null;
174528
+ this.targetWindow = null;
174529
+ };
174530
+ this._didMount = () => {
174531
+ return () => {
174532
+ this.cleanup();
174533
+ };
174534
+ };
174535
+ this._willUpdate = () => {
174536
+ var _a3;
174537
+ const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;
174538
+ if (this.scrollElement !== scrollElement) {
174539
+ this.cleanup();
174540
+ if (!scrollElement) {
174541
+ this.maybeNotify();
174542
+ return;
174543
+ }
174544
+ this.scrollElement = scrollElement;
174545
+ if (this.scrollElement && "ownerDocument" in this.scrollElement) {
174546
+ this.targetWindow = this.scrollElement.ownerDocument.defaultView;
174547
+ } else {
174548
+ this.targetWindow = ((_a3 = this.scrollElement) == null ? void 0 : _a3.window) ?? null;
174549
+ }
174550
+ this.elementsCache.forEach((cached2) => {
174551
+ this.observer.observe(cached2);
174552
+ });
174553
+ this.unsubs.push(
174554
+ this.options.observeElementRect(this, (rect2) => {
174555
+ this.scrollRect = rect2;
174556
+ this.maybeNotify();
174557
+ })
174558
+ );
174559
+ this.unsubs.push(
174560
+ this.options.observeElementOffset(this, (offset2, isScrolling) => {
174561
+ if (this._intendedScrollOffset !== null && Math.abs(offset2 - this._intendedScrollOffset) < 1.5) {
174562
+ offset2 = this._intendedScrollOffset;
174563
+ }
174564
+ this._intendedScrollOffset = null;
174565
+ this.scrollAdjustments = 0;
174566
+ this.scrollDirection = isScrolling ? this.getScrollOffset() < offset2 ? "forward" : "backward" : null;
174567
+ this.scrollOffset = offset2;
174568
+ this.isScrolling = isScrolling;
174569
+ this._flushIosDeferredIfReady();
174570
+ if (this.scrollState) {
174571
+ this.scheduleScrollReconcile();
174572
+ }
174573
+ this.maybeNotify();
174574
+ })
174575
+ );
174576
+ if ("addEventListener" in this.scrollElement) {
174577
+ const scrollEl = this.scrollElement;
174578
+ const onTouchStart = () => {
174579
+ this._iosTouching = true;
174580
+ this._iosJustTouchEnded = false;
174581
+ if (this._iosTouchEndTimerId !== null && this.targetWindow != null) {
174582
+ this.targetWindow.clearTimeout(this._iosTouchEndTimerId);
174583
+ this._iosTouchEndTimerId = null;
174584
+ }
174585
+ };
174586
+ const onTouchEnd = () => {
174587
+ this._iosTouching = false;
174588
+ if (!isIOSWebKit() || this.targetWindow == null) {
174589
+ return;
174590
+ }
174591
+ this._iosJustTouchEnded = true;
174592
+ this._iosTouchEndTimerId = this.targetWindow.setTimeout(() => {
174593
+ this._iosJustTouchEnded = false;
174594
+ this._iosTouchEndTimerId = null;
174595
+ this._flushIosDeferredIfReady();
174596
+ }, 150);
174597
+ };
174598
+ scrollEl.addEventListener(
174599
+ "touchstart",
174600
+ onTouchStart,
174601
+ addEventListenerOptions
174602
+ );
174603
+ scrollEl.addEventListener(
174604
+ "touchend",
174605
+ onTouchEnd,
174606
+ addEventListenerOptions
174607
+ );
174608
+ this.unsubs.push(() => {
174609
+ scrollEl.removeEventListener("touchstart", onTouchStart);
174610
+ scrollEl.removeEventListener("touchend", onTouchEnd);
174611
+ if (this._iosTouchEndTimerId !== null && this.targetWindow != null) {
174612
+ this.targetWindow.clearTimeout(this._iosTouchEndTimerId);
174613
+ this._iosTouchEndTimerId = null;
174614
+ }
174615
+ });
174616
+ }
174617
+ this._scrollToOffset(this.getScrollOffset(), {
174618
+ adjustments: void 0,
174619
+ behavior: void 0
174620
+ });
174621
+ }
174622
+ const anchor2 = this.pendingScrollAnchor;
174623
+ this.pendingScrollAnchor = null;
174624
+ if (anchor2 && this.scrollElement && this.options.enabled) {
174625
+ const [key2, _offset, followOnAppend, anchorDelta] = anchor2;
174626
+ if (key2 !== null && !followOnAppend) {
174627
+ if (isIOSWebKit() && (this.isScrolling || this._iosTouching || this._iosJustTouchEnded)) {
174628
+ if (anchorDelta !== 0) {
174629
+ this._iosDeferredAdjustment += anchorDelta;
174630
+ }
174631
+ } else {
174632
+ this._scrollToOffset(this.getScrollOffset(), {
174633
+ adjustments: void 0,
174634
+ behavior: void 0
174635
+ });
174636
+ }
174637
+ }
174638
+ if (followOnAppend) {
174639
+ this.scrollToEnd({ behavior: followOnAppend });
174640
+ }
174641
+ }
174642
+ };
174643
+ this._flushIosDeferredIfReady = () => {
174644
+ if (this._iosDeferredAdjustment === 0) return;
174645
+ if (this.isScrolling) return;
174646
+ if (this._iosTouching) return;
174647
+ if (this._iosJustTouchEnded) return;
174648
+ const cur2 = this.getScrollOffset();
174649
+ const max2 = this.getMaxScrollOffset();
174650
+ if (cur2 < 0 || cur2 > max2) return;
174651
+ const delta = this._iosDeferredAdjustment;
174652
+ this._iosDeferredAdjustment = 0;
174653
+ this._scrollToOffset(cur2, {
174654
+ adjustments: this.scrollAdjustments += delta,
174655
+ behavior: void 0
174656
+ });
174657
+ };
174658
+ this.rafId = null;
174659
+ this.getSize = () => {
174660
+ if (!this.options.enabled) {
174661
+ this.scrollRect = null;
174662
+ return 0;
174663
+ }
174664
+ this.scrollRect = this.scrollRect ?? this.options.initialRect;
174665
+ return this.scrollRect[this.options.horizontal ? "width" : "height"];
174666
+ };
174667
+ this.getScrollOffset = () => {
174668
+ if (!this.options.enabled) {
174669
+ this.scrollOffset = null;
174670
+ return 0;
174671
+ }
174672
+ this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === "function" ? this.options.initialOffset() : this.options.initialOffset);
174673
+ return this.scrollOffset;
174674
+ };
174675
+ this.getFurthestMeasurement = (measurements, index2) => {
174676
+ const furthestMeasurementsFound = /* @__PURE__ */ new Map();
174677
+ const furthestMeasurements = /* @__PURE__ */ new Map();
174678
+ for (let m2 = index2 - 1; m2 >= 0; m2--) {
174679
+ const measurement = measurements[m2];
174680
+ if (furthestMeasurementsFound.has(measurement.lane)) {
174681
+ continue;
174682
+ }
174683
+ const previousFurthestMeasurement = furthestMeasurements.get(
174684
+ measurement.lane
174685
+ );
174686
+ if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {
174687
+ furthestMeasurements.set(measurement.lane, measurement);
174688
+ } else if (measurement.end < previousFurthestMeasurement.end) {
174689
+ furthestMeasurementsFound.set(measurement.lane, true);
174690
+ }
174691
+ if (furthestMeasurementsFound.size === this.options.lanes) {
174692
+ break;
174693
+ }
174694
+ }
174695
+ return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a2, b2) => {
174696
+ if (a2.end === b2.end) {
174697
+ return a2.index - b2.index;
174698
+ }
174699
+ return a2.end - b2.end;
174700
+ })[0] : void 0;
174701
+ };
174702
+ this.getMeasurementOptions = memo(
174703
+ () => [
174704
+ this.options.count,
174705
+ this.options.paddingStart,
174706
+ this.options.scrollMargin,
174707
+ this.options.getItemKey,
174708
+ this.options.enabled,
174709
+ this.options.lanes,
174710
+ this.options.laneAssignmentMode
174711
+ ],
174712
+ (count2, paddingStart, scrollMargin, getItemKey, enabled, lanes, laneAssignmentMode) => {
174713
+ const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;
174714
+ if (lanesChanged) {
174715
+ this.lanesChangedFlag = true;
174716
+ }
174717
+ this.prevLanes = lanes;
174718
+ this.pendingMin = null;
174719
+ return {
174720
+ count: count2,
174721
+ paddingStart,
174722
+ scrollMargin,
174723
+ getItemKey,
174724
+ enabled,
174725
+ lanes,
174726
+ laneAssignmentMode
174727
+ };
174728
+ },
174729
+ {
174730
+ key: false
174731
+ }
174732
+ );
174733
+ this.getMeasurements = memo(
174734
+ () => [this.getMeasurementOptions(), this.itemSizeCacheVersion],
174735
+ ({
174736
+ count: count2,
174737
+ paddingStart,
174738
+ scrollMargin,
174739
+ getItemKey,
174740
+ enabled,
174741
+ lanes,
174742
+ laneAssignmentMode
174743
+ }, _itemSizeCacheVersion) => {
174744
+ const itemSizeCache = this.itemSizeCache;
174745
+ if (!enabled) {
174746
+ this.measurementsCache = [];
174747
+ this.itemSizeCache.clear();
174748
+ this.laneAssignments.clear();
174749
+ return [];
174750
+ }
174751
+ if (this.laneAssignments.size > count2) {
174752
+ for (const index2 of this.laneAssignments.keys()) {
174753
+ if (index2 >= count2) {
174754
+ this.laneAssignments.delete(index2);
174755
+ }
174756
+ }
174757
+ }
174758
+ if (this.lanesChangedFlag) {
174759
+ this.lanesChangedFlag = false;
174760
+ this.lanesSettling = true;
174761
+ this.measurementsCache = [];
174762
+ this.itemSizeCache.clear();
174763
+ this.laneAssignments.clear();
174764
+ this.pendingMin = null;
174765
+ }
174766
+ if (this.measurementsCache.length === 0 && !this.lanesSettling) {
174767
+ this.measurementsCache = this.options.initialMeasurementsCache;
174768
+ this.measurementsCache.forEach((item) => {
174769
+ this.itemSizeCache.set(item.key, item.size);
174770
+ });
174771
+ }
174772
+ const min2 = this.lanesSettling ? 0 : this.pendingMin ?? 0;
174773
+ this.pendingMin = null;
174774
+ if (this.lanesSettling && this.measurementsCache.length === count2) {
174775
+ this.lanesSettling = false;
174776
+ }
174777
+ if (lanes === 1) {
174778
+ const gap = this.options.gap;
174779
+ const need = count2 * 2;
174780
+ let flat = this._flatMeasurements;
174781
+ if (!flat || flat.length < need) {
174782
+ const next2 = new Float64Array(need);
174783
+ if (flat && min2 > 0) next2.set(flat.subarray(0, min2 * 2));
174784
+ flat = next2;
174785
+ this._flatMeasurements = flat;
174786
+ }
174787
+ let runningStart;
174788
+ if (min2 === 0) {
174789
+ runningStart = paddingStart + scrollMargin;
174790
+ } else {
174791
+ const prevIdx = min2 - 1;
174792
+ runningStart = flat[prevIdx * 2] + flat[prevIdx * 2 + 1] + gap;
174793
+ }
174794
+ for (let i2 = min2; i2 < count2; i2++) {
174795
+ const key2 = getItemKey(i2);
174796
+ const measuredSize = itemSizeCache.get(key2);
174797
+ const size2 = typeof measuredSize === "number" ? measuredSize : this.options.estimateSize(i2);
174798
+ flat[i2 * 2] = runningStart;
174799
+ flat[i2 * 2 + 1] = size2;
174800
+ runningStart += size2 + gap;
174801
+ }
174802
+ const view = createLazyMeasurementsView(count2, flat, getItemKey);
174803
+ this.measurementsCache = view;
174804
+ return view;
174805
+ }
174806
+ const measurements = this.measurementsCache.slice(0, min2);
174807
+ const laneLastIndex = new Array(lanes).fill(
174808
+ void 0
174809
+ );
174810
+ for (let m2 = 0; m2 < min2; m2++) {
174811
+ const item = measurements[m2];
174812
+ if (item) {
174813
+ laneLastIndex[item.lane] = m2;
174814
+ }
174815
+ }
174816
+ for (let i2 = min2; i2 < count2; i2++) {
174817
+ const key2 = getItemKey(i2);
174818
+ const cachedLane = this.laneAssignments.get(i2);
174819
+ let lane;
174820
+ let start2;
174821
+ const shouldCacheLane = laneAssignmentMode === "estimate" || itemSizeCache.has(key2);
174822
+ if (cachedLane !== void 0 && this.options.lanes > 1) {
174823
+ lane = cachedLane;
174824
+ const prevIndex = laneLastIndex[lane];
174825
+ const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;
174826
+ start2 = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;
174827
+ } else {
174828
+ const furthestMeasurement = this.options.lanes === 1 ? measurements[i2 - 1] : this.getFurthestMeasurement(measurements, i2);
174829
+ start2 = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;
174830
+ lane = furthestMeasurement ? furthestMeasurement.lane : i2 % this.options.lanes;
174831
+ if (this.options.lanes > 1 && shouldCacheLane) {
174832
+ this.laneAssignments.set(i2, lane);
174833
+ }
174834
+ }
174835
+ const measuredSize = itemSizeCache.get(key2);
174836
+ const size2 = typeof measuredSize === "number" ? measuredSize : this.options.estimateSize(i2);
174837
+ const end = start2 + size2;
174838
+ measurements[i2] = {
174839
+ index: i2,
174840
+ start: start2,
174841
+ size: size2,
174842
+ end,
174843
+ key: key2,
174844
+ lane
174845
+ };
174846
+ laneLastIndex[lane] = i2;
174847
+ }
174848
+ this.measurementsCache = measurements;
174849
+ return measurements;
174850
+ },
174851
+ {
174852
+ key: false,
174853
+ debug: () => this.options.debug
174854
+ }
174855
+ );
174856
+ this.calculateRange = memo(
174857
+ () => [
174858
+ this.getMeasurements(),
174859
+ this.getSize(),
174860
+ this.getScrollOffset(),
174861
+ this.options.lanes
174862
+ ],
174863
+ (measurements, outerSize, scrollOffset, lanes) => {
174864
+ return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({
174865
+ measurements,
174866
+ outerSize,
174867
+ scrollOffset,
174868
+ lanes,
174869
+ // Pass the typed array so binary search + forward-walk can
174870
+ // read start/end directly from Float64Array, skipping the
174871
+ // Proxy traps that materialize a full VirtualItem per probe.
174872
+ flat: lanes === 1 && this._flatMeasurements != null ? this._flatMeasurements : null
174873
+ }) : null;
174874
+ },
174875
+ {
174876
+ key: false,
174877
+ debug: () => this.options.debug
174878
+ }
174879
+ );
174880
+ this.getVirtualIndexes = memo(
174881
+ () => {
174882
+ let startIndex = null;
174883
+ let endIndex = null;
174884
+ const range2 = this.calculateRange();
174885
+ if (range2) {
174886
+ startIndex = range2.startIndex;
174887
+ endIndex = range2.endIndex;
174888
+ }
174889
+ this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);
174890
+ return [
174891
+ this.options.rangeExtractor,
174892
+ this.options.overscan,
174893
+ this.options.count,
174894
+ startIndex,
174895
+ endIndex
174896
+ ];
174897
+ },
174898
+ (rangeExtractor, overscan, count2, startIndex, endIndex) => {
174899
+ return startIndex === null || endIndex === null ? [] : rangeExtractor({
174900
+ startIndex,
174901
+ endIndex,
174902
+ overscan,
174903
+ count: count2
174904
+ });
174905
+ },
174906
+ {
174907
+ key: false,
174908
+ debug: () => this.options.debug
174909
+ }
174910
+ );
174911
+ this.indexFromElement = (node2) => {
174912
+ const attributeName = this.options.indexAttribute;
174913
+ const indexStr = node2.getAttribute(attributeName);
174914
+ if (!indexStr) {
174915
+ console.warn(
174916
+ `Missing attribute name '${attributeName}={index}' on measured element.`
174917
+ );
174918
+ return -1;
174919
+ }
174920
+ return parseInt(indexStr, 10);
174921
+ };
174922
+ this.shouldMeasureDuringScroll = (index2) => {
174923
+ var _a3;
174924
+ if (!this.scrollState || this.scrollState.behavior !== "smooth") {
174925
+ return true;
174926
+ }
174927
+ const scrollIndex = this.scrollState.index ?? ((_a3 = this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)) == null ? void 0 : _a3.index);
174928
+ if (scrollIndex !== void 0 && this.range) {
174929
+ const bufferSize = Math.max(
174930
+ this.options.overscan,
174931
+ Math.ceil((this.range.endIndex - this.range.startIndex) / 2)
174932
+ );
174933
+ const minIndex = Math.max(0, scrollIndex - bufferSize);
174934
+ const maxIndex = Math.min(
174935
+ this.options.count - 1,
174936
+ scrollIndex + bufferSize
174937
+ );
174938
+ return index2 >= minIndex && index2 <= maxIndex;
174939
+ }
174940
+ return true;
174941
+ };
174942
+ this.measureElement = (node2) => {
174943
+ if (!node2) {
174944
+ this.elementsCache.forEach((cached2, key22) => {
174945
+ if (!cached2.isConnected) {
174946
+ this.observer.unobserve(cached2);
174947
+ this.elementsCache.delete(key22);
174948
+ }
174949
+ });
174950
+ return;
174951
+ }
174952
+ const index2 = this.indexFromElement(node2);
174953
+ const key2 = this.options.getItemKey(index2);
174954
+ const prevNode = this.elementsCache.get(key2);
174955
+ if (prevNode !== node2) {
174956
+ if (prevNode) {
174957
+ this.observer.unobserve(prevNode);
174958
+ }
174959
+ this.observer.observe(node2);
174960
+ this.elementsCache.set(key2, node2);
174961
+ }
174962
+ if ((!this.isScrolling || this.scrollState) && this.shouldMeasureDuringScroll(index2)) {
174963
+ this.resizeItem(index2, this.options.measureElement(node2, void 0, this));
174964
+ }
174965
+ };
174966
+ this.resizeItem = (index2, size2) => {
174967
+ var _a3, _b3;
174968
+ if (index2 < 0 || index2 >= this.options.count) return;
174969
+ let cachedSize;
174970
+ let itemStart;
174971
+ let key2;
174972
+ const flat = this._flatMeasurements;
174973
+ if (this.options.lanes === 1 && flat !== null) {
174974
+ key2 = this.options.getItemKey(index2);
174975
+ itemStart = flat[index2 * 2];
174976
+ cachedSize = flat[index2 * 2 + 1];
174977
+ } else {
174978
+ const item = this.measurementsCache[index2];
174979
+ if (!item) return;
174980
+ key2 = item.key;
174981
+ itemStart = item.start;
174982
+ cachedSize = item.size;
174983
+ }
174984
+ const itemSize = this.itemSizeCache.get(key2) ?? cachedSize;
174985
+ const delta = size2 - itemSize;
174986
+ if (delta !== 0) {
174987
+ const wasAtEnd = this.options.anchorTo === "end" && ((_a3 = this.scrollState) == null ? void 0 : _a3.behavior) !== "smooth" && this.getVirtualDistanceFromEnd() <= this.options.scrollEndThreshold;
174988
+ const prevTotalSize = wasAtEnd ? this.getTotalSize() : 0;
174989
+ const shouldAdjustScroll = ((_b3 = this.scrollState) == null ? void 0 : _b3.behavior) !== "smooth" && (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(
174990
+ // The callback expects a VirtualItem; build one lazily only
174991
+ // when the consumer actually supplied a custom predicate.
174992
+ this.measurementsCache[index2] ?? {
174993
+ index: index2,
174994
+ key: key2,
174995
+ start: itemStart,
174996
+ size: cachedSize,
174997
+ end: itemStart + cachedSize,
174998
+ lane: 0
174999
+ },
175000
+ delta,
175001
+ this
175002
+ ) : (
175003
+ // Default: adjust when the resize is an above-viewport item.
175004
+ // First measurement (!has(key)): always adjust — the item
175005
+ // has never been sized, so the estimate→actual delta must
175006
+ // be compensated regardless of scroll direction.
175007
+ // Re-measurement (has(key)): skip during backward scroll
175008
+ // to avoid the "items jump while scrolling up" cascade.
175009
+ itemStart < this.getScrollOffset() + this.scrollAdjustments && (!this.itemSizeCache.has(key2) || this.scrollDirection !== "backward")
175010
+ ));
175011
+ if (this.pendingMin === null || index2 < this.pendingMin) {
175012
+ this.pendingMin = index2;
175013
+ }
175014
+ this.itemSizeCache.set(key2, size2);
175015
+ this.itemSizeCacheVersion++;
175016
+ if (wasAtEnd) {
175017
+ this.applyScrollAdjustment(this.getTotalSize() - prevTotalSize);
175018
+ } else if (shouldAdjustScroll) {
175019
+ this.applyScrollAdjustment(delta);
175020
+ }
175021
+ this.notify(false);
175022
+ }
175023
+ };
175024
+ this.getVirtualItems = memo(
175025
+ () => [this.getVirtualIndexes(), this.getMeasurements()],
175026
+ (indexes, measurements) => {
175027
+ const virtualItems = [];
175028
+ for (let k2 = 0, len = indexes.length; k2 < len; k2++) {
175029
+ const i2 = indexes[k2];
175030
+ const measurement = measurements[i2];
175031
+ virtualItems.push(measurement);
175032
+ }
175033
+ return virtualItems;
175034
+ },
175035
+ {
175036
+ key: false,
175037
+ debug: () => this.options.debug
175038
+ }
175039
+ );
175040
+ this.getVirtualItemForOffset = (offset2) => {
175041
+ const measurements = this.getMeasurements();
175042
+ if (measurements.length === 0) {
175043
+ return void 0;
175044
+ }
175045
+ const flat = this._flatMeasurements;
175046
+ const useFlat = this.options.lanes === 1 && flat != null;
175047
+ const idx = findNearestBinarySearch(
175048
+ 0,
175049
+ measurements.length - 1,
175050
+ useFlat ? (i2) => flat[i2 * 2] : (i2) => notUndefined(measurements[i2]).start,
175051
+ offset2
175052
+ );
175053
+ return notUndefined(measurements[idx]);
175054
+ };
175055
+ this.getMaxScrollOffset = () => {
175056
+ if (!this.scrollElement) return 0;
175057
+ if ("scrollHeight" in this.scrollElement) {
175058
+ return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;
175059
+ } else {
175060
+ const doc2 = this.scrollElement.document.documentElement;
175061
+ return this.options.horizontal ? doc2.scrollWidth - this.scrollElement.innerWidth : doc2.scrollHeight - this.scrollElement.innerHeight;
175062
+ }
175063
+ };
175064
+ this.getVirtualDistanceFromEnd = () => {
175065
+ return Math.max(
175066
+ this.getTotalSize() - this.getSize() - this.getScrollOffset(),
175067
+ 0
175068
+ );
175069
+ };
175070
+ this.getDistanceFromEnd = () => {
175071
+ return Math.max(this.getMaxScrollOffset() - this.getScrollOffset(), 0);
175072
+ };
175073
+ this.isAtEnd = (threshold2 = this.options.scrollEndThreshold) => {
175074
+ return this.getDistanceFromEnd() <= threshold2;
175075
+ };
175076
+ this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {
175077
+ if (!this.scrollElement) return 0;
175078
+ const size2 = this.getSize();
175079
+ const scrollOffset = this.getScrollOffset();
175080
+ if (align === "auto") {
175081
+ align = toOffset >= scrollOffset + size2 ? "end" : "start";
175082
+ }
175083
+ if (align === "center") {
175084
+ toOffset += (itemSize - size2) / 2;
175085
+ } else if (align === "end") {
175086
+ toOffset -= size2;
175087
+ }
175088
+ const maxOffset2 = this.getMaxScrollOffset();
175089
+ return Math.max(Math.min(maxOffset2, toOffset), 0);
175090
+ };
175091
+ this.getOffsetForIndex = (index2, align = "auto") => {
175092
+ index2 = Math.max(0, Math.min(index2, this.options.count - 1));
175093
+ const size2 = this.getSize();
175094
+ const scrollOffset = this.getScrollOffset();
175095
+ const item = this.measurementsCache[index2];
175096
+ if (!item) return;
175097
+ if (align === "auto") {
175098
+ if (item.end >= scrollOffset + size2 - this.options.scrollPaddingEnd) {
175099
+ align = "end";
175100
+ } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {
175101
+ align = "start";
175102
+ } else {
175103
+ return [scrollOffset, align];
175104
+ }
175105
+ }
175106
+ if (align === "end" && index2 === this.options.count - 1) {
175107
+ return [this.getMaxScrollOffset(), align];
175108
+ }
175109
+ const toOffset = align === "end" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;
175110
+ return [
175111
+ this.getOffsetForAlignment(toOffset, align, item.size),
175112
+ align
175113
+ ];
175114
+ };
175115
+ this.scrollToOffset = (toOffset, { align = "start", behavior = "auto" } = {}) => {
175116
+ const offset2 = this.getOffsetForAlignment(toOffset, align);
175117
+ const now2 = this.now();
175118
+ this.scrollState = {
175119
+ index: null,
175120
+ align,
175121
+ behavior,
175122
+ startedAt: now2,
175123
+ lastTargetOffset: offset2,
175124
+ stableFrames: 0
175125
+ };
175126
+ this._scrollToOffset(offset2, { adjustments: void 0, behavior });
175127
+ this.scheduleScrollReconcile();
175128
+ };
175129
+ this.scrollToIndex = (index2, {
175130
+ align: initialAlign = "auto",
175131
+ behavior = "auto"
175132
+ } = {}) => {
175133
+ index2 = Math.max(0, Math.min(index2, this.options.count - 1));
175134
+ const offsetInfo = this.getOffsetForIndex(index2, initialAlign);
175135
+ if (!offsetInfo) {
175136
+ return;
175137
+ }
175138
+ const [offset2, align] = offsetInfo;
175139
+ const now2 = this.now();
175140
+ this.scrollState = {
175141
+ index: index2,
175142
+ align,
175143
+ behavior,
175144
+ startedAt: now2,
175145
+ lastTargetOffset: offset2,
175146
+ stableFrames: 0
175147
+ };
175148
+ this._scrollToOffset(offset2, { adjustments: void 0, behavior });
175149
+ this.scheduleScrollReconcile();
175150
+ };
175151
+ this.scrollBy = (delta, { behavior = "auto" } = {}) => {
175152
+ const offset2 = this.getScrollOffset() + delta;
175153
+ const now2 = this.now();
175154
+ this.scrollState = {
175155
+ index: null,
175156
+ align: "start",
175157
+ behavior,
175158
+ startedAt: now2,
175159
+ lastTargetOffset: offset2,
175160
+ stableFrames: 0
175161
+ };
175162
+ this._scrollToOffset(offset2, { adjustments: void 0, behavior });
175163
+ this.scheduleScrollReconcile();
175164
+ };
175165
+ this.scrollToEnd = ({ behavior = "auto" } = {}) => {
175166
+ if (this.options.count > 0) {
175167
+ this.scrollToIndex(this.options.count - 1, {
175168
+ align: "end",
175169
+ behavior
175170
+ });
175171
+ return;
175172
+ }
175173
+ this.scrollToOffset(Math.max(this.getTotalSize() - this.getSize(), 0), {
175174
+ behavior
175175
+ });
175176
+ };
175177
+ this.getTotalSize = () => {
175178
+ var _a3;
175179
+ const measurements = this.getMeasurements();
175180
+ let end;
175181
+ if (measurements.length === 0) {
175182
+ end = this.options.paddingStart;
175183
+ } else if (this.options.lanes === 1) {
175184
+ const lastIdx = measurements.length - 1;
175185
+ const flat = this._flatMeasurements;
175186
+ if (flat != null) {
175187
+ end = flat[lastIdx * 2] + flat[lastIdx * 2 + 1];
175188
+ } else {
175189
+ end = ((_a3 = measurements[lastIdx]) == null ? void 0 : _a3.end) ?? 0;
175190
+ }
175191
+ } else {
175192
+ const endByLane = Array(this.options.lanes).fill(null);
175193
+ let endIndex = measurements.length - 1;
175194
+ while (endIndex >= 0 && endByLane.some((val) => val === null)) {
175195
+ const item = measurements[endIndex];
175196
+ if (endByLane[item.lane] === null) {
175197
+ endByLane[item.lane] = item.end;
175198
+ }
175199
+ endIndex--;
175200
+ }
175201
+ end = Math.max(...endByLane.filter((val) => val !== null));
175202
+ }
175203
+ return Math.max(
175204
+ end - this.options.scrollMargin + this.options.paddingEnd,
175205
+ 0
175206
+ );
175207
+ };
175208
+ this.takeSnapshot = () => {
175209
+ const snapshot = [];
175210
+ if (this.itemSizeCache.size === 0) return snapshot;
175211
+ const m2 = this.getMeasurements();
175212
+ for (const item of m2) {
175213
+ if (item && this.itemSizeCache.has(item.key)) {
175214
+ snapshot.push({
175215
+ index: item.index,
175216
+ key: item.key,
175217
+ start: item.start,
175218
+ size: item.size,
175219
+ end: item.end,
175220
+ lane: item.lane
175221
+ });
175222
+ }
175223
+ }
175224
+ return snapshot;
175225
+ };
175226
+ this._scrollToOffset = (offset2, {
175227
+ adjustments,
175228
+ behavior
175229
+ }) => {
175230
+ this._intendedScrollOffset = offset2 + (adjustments ?? 0);
175231
+ this.options.scrollToFn(offset2, { behavior, adjustments }, this);
175232
+ };
175233
+ this.measure = () => {
175234
+ this.pendingMin = null;
175235
+ this.itemSizeCache.clear();
175236
+ this.laneAssignments.clear();
175237
+ this.itemSizeCacheVersion++;
175238
+ this.notify(false);
175239
+ };
175240
+ this.setOptions(opts);
175241
+ }
175242
+ applyScrollAdjustment(delta, behavior) {
175243
+ if (delta === 0) return;
175244
+ if (isIOSWebKit() && (this.isScrolling || this._iosTouching || this._iosJustTouchEnded)) {
175245
+ this._iosDeferredAdjustment += delta;
175246
+ } else {
175247
+ this._scrollToOffset(this.getScrollOffset(), {
175248
+ adjustments: this.scrollAdjustments += delta,
175249
+ behavior
175250
+ });
175251
+ }
175252
+ }
175253
+ scheduleScrollReconcile() {
175254
+ if (!this.targetWindow) {
175255
+ this.scrollState = null;
175256
+ return;
175257
+ }
175258
+ if (this.rafId != null) return;
175259
+ this.rafId = this.targetWindow.requestAnimationFrame(() => {
175260
+ this.rafId = null;
175261
+ this.reconcileScroll();
175262
+ });
175263
+ }
175264
+ reconcileScroll() {
175265
+ if (!this.scrollState) return;
175266
+ const el = this.scrollElement;
175267
+ if (!el) return;
175268
+ const MAX_RECONCILE_MS = 5e3;
175269
+ if (this.now() - this.scrollState.startedAt > MAX_RECONCILE_MS) {
175270
+ this.scrollState = null;
175271
+ return;
175272
+ }
175273
+ const offsetInfo = this.scrollState.index != null ? this.getOffsetForIndex(this.scrollState.index, this.scrollState.align) : void 0;
175274
+ const targetOffset = offsetInfo ? offsetInfo[0] : this.scrollState.lastTargetOffset;
175275
+ const STABLE_FRAMES = 1;
175276
+ const targetChanged = targetOffset !== this.scrollState.lastTargetOffset;
175277
+ if (!targetChanged && approxEqual(targetOffset, this.getScrollOffset())) {
175278
+ this.scrollState.stableFrames++;
175279
+ if (this.scrollState.stableFrames >= STABLE_FRAMES) {
175280
+ if (this.getScrollOffset() !== targetOffset) {
175281
+ this._scrollToOffset(targetOffset, {
175282
+ adjustments: void 0,
175283
+ behavior: "auto"
175284
+ });
175285
+ }
175286
+ this.scrollState = null;
175287
+ return;
175288
+ }
175289
+ } else {
175290
+ this.scrollState.stableFrames = 0;
175291
+ if (targetChanged) {
175292
+ const viewport = this.getSize() || 600;
175293
+ const distance2 = Math.abs(targetOffset - this.getScrollOffset());
175294
+ const keepSmooth = this.scrollState.behavior === "smooth" && distance2 > viewport;
175295
+ this.scrollState.lastTargetOffset = targetOffset;
175296
+ if (!keepSmooth) {
175297
+ this.scrollState.behavior = "auto";
175298
+ }
175299
+ this._scrollToOffset(targetOffset, {
175300
+ adjustments: void 0,
175301
+ behavior: keepSmooth ? "smooth" : "auto"
175302
+ });
175303
+ }
175304
+ }
175305
+ this.scheduleScrollReconcile();
175306
+ }
175307
+ }
175308
+ const findNearestBinarySearch = (low, high, getCurrentValue, value) => {
175309
+ while (low <= high) {
175310
+ const middle = (low + high) / 2 | 0;
175311
+ const currentValue = getCurrentValue(middle);
175312
+ if (currentValue < value) {
175313
+ low = middle + 1;
175314
+ } else if (currentValue > value) {
175315
+ high = middle - 1;
175316
+ } else {
175317
+ return middle;
175318
+ }
175319
+ }
175320
+ if (low > 0) {
175321
+ return low - 1;
175322
+ } else {
175323
+ return 0;
175324
+ }
175325
+ };
175326
+ function calculateRange({
175327
+ measurements,
175328
+ outerSize,
175329
+ scrollOffset,
175330
+ lanes,
175331
+ flat
175332
+ }) {
175333
+ const lastIndex = measurements.length - 1;
175334
+ const getStart = flat ? (index2) => flat[index2 * 2] : (index2) => measurements[index2].start;
175335
+ const getEnd = flat ? (index2) => flat[index2 * 2] + flat[index2 * 2 + 1] : (index2) => measurements[index2].end;
175336
+ if (measurements.length <= lanes) {
175337
+ return {
175338
+ startIndex: 0,
175339
+ endIndex: lastIndex
175340
+ };
175341
+ }
175342
+ let startIndex = findNearestBinarySearch(0, lastIndex, getStart, scrollOffset);
175343
+ let endIndex = startIndex;
175344
+ if (lanes === 1) {
175345
+ while (endIndex < lastIndex && getEnd(endIndex) < scrollOffset + outerSize) {
175346
+ endIndex++;
175347
+ }
175348
+ } else if (lanes > 1) {
175349
+ const endPerLane = Array(lanes).fill(0);
175350
+ while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {
175351
+ const item = measurements[endIndex];
175352
+ endPerLane[item.lane] = item.end;
175353
+ endIndex++;
175354
+ }
175355
+ const startPerLane = Array(lanes).fill(scrollOffset + outerSize);
175356
+ while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {
175357
+ const item = measurements[startIndex];
175358
+ startPerLane[item.lane] = item.start;
175359
+ startIndex--;
175360
+ }
175361
+ startIndex = Math.max(0, startIndex - startIndex % lanes);
175362
+ endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));
175363
+ }
175364
+ return { startIndex, endIndex };
175365
+ }
175366
+ const useIsomorphicLayoutEffect$1 = typeof document !== "undefined" ? reactExports.useLayoutEffect : reactExports.useEffect;
175367
+ function useVirtualizerBase({
175368
+ useFlushSync = true,
175369
+ directDomUpdates = false,
175370
+ directDomUpdatesMode = "transform",
175371
+ ...options
175372
+ }) {
175373
+ const rerender = reactExports.useReducer((x2) => x2 + 1, 0)[1];
175374
+ const directRef = reactExports.useRef({
175375
+ enabled: directDomUpdates,
175376
+ mode: directDomUpdatesMode,
175377
+ container: null,
175378
+ lastSize: null,
175379
+ // Keyed by the element itself so a remounted node (same key, new DOM
175380
+ // node — e.g. when `enabled` is toggled off then on) is treated as fresh
175381
+ // and gets its style written.
175382
+ lastPositions: /* @__PURE__ */ new WeakMap(),
175383
+ prevRange: null
175384
+ });
175385
+ directRef.current.enabled = directDomUpdates;
175386
+ directRef.current.mode = directDomUpdatesMode;
175387
+ const applyDirectStyles = (instance2) => {
175388
+ const state2 = directRef.current;
175389
+ if (!state2.enabled || !state2.container) return;
175390
+ const totalSize = instance2.getTotalSize();
175391
+ if (totalSize !== state2.lastSize) {
175392
+ state2.lastSize = totalSize;
175393
+ const sizeAxis = instance2.options.horizontal ? "width" : "height";
175394
+ state2.container.style[sizeAxis] = `${totalSize}px`;
175395
+ }
175396
+ const horizontal = !!instance2.options.horizontal;
175397
+ const useTransform = state2.mode === "transform";
175398
+ const posAxis = horizontal ? "left" : "top";
175399
+ const scrollMargin = instance2.options.scrollMargin;
175400
+ const items = instance2.getVirtualItems();
175401
+ for (const item of items) {
175402
+ const next2 = item.start - scrollMargin;
175403
+ const el = instance2.elementsCache.get(item.key);
175404
+ if (!el) continue;
175405
+ if (state2.lastPositions.get(el) === next2) continue;
175406
+ state2.lastPositions.set(el, next2);
175407
+ if (useTransform) {
175408
+ el.style.transform = horizontal ? `translate3d(${next2}px, 0, 0)` : `translate3d(0, ${next2}px, 0)`;
175409
+ } else {
175410
+ el.style[posAxis] = `${next2}px`;
175411
+ }
175412
+ }
175413
+ };
175414
+ const resolvedOptions = {
175415
+ ...options,
175416
+ onChange: (instance2, sync) => {
175417
+ var _a3;
175418
+ const state2 = directRef.current;
175419
+ let shouldRerender = true;
175420
+ if (state2.enabled) {
175421
+ applyDirectStyles(instance2);
175422
+ const range2 = instance2.range;
175423
+ const prev2 = state2.prevRange;
175424
+ shouldRerender = !prev2 || prev2.isScrolling !== instance2.isScrolling || prev2.startIndex !== (range2 == null ? void 0 : range2.startIndex) || prev2.endIndex !== (range2 == null ? void 0 : range2.endIndex);
175425
+ if (shouldRerender) {
175426
+ state2.prevRange = range2 ? {
175427
+ startIndex: range2.startIndex,
175428
+ endIndex: range2.endIndex,
175429
+ isScrolling: instance2.isScrolling
175430
+ } : null;
175431
+ }
175432
+ }
175433
+ if (shouldRerender) {
175434
+ if (useFlushSync && sync) {
175435
+ reactDomExports.flushSync(rerender);
175436
+ } else {
175437
+ rerender();
175438
+ }
175439
+ }
175440
+ (_a3 = options.onChange) == null ? void 0 : _a3.call(options, instance2, sync);
175441
+ }
175442
+ };
175443
+ const [instance] = reactExports.useState(() => {
175444
+ const v2 = new Virtualizer(resolvedOptions);
175445
+ return Object.assign(v2, {
175446
+ containerRef: (node2) => {
175447
+ const state2 = directRef.current;
175448
+ state2.container = node2;
175449
+ state2.lastSize = null;
175450
+ if (node2 && state2.enabled) {
175451
+ const total = v2.getTotalSize();
175452
+ state2.lastSize = total;
175453
+ const axis = v2.options.horizontal ? "width" : "height";
175454
+ node2.style[axis] = `${total}px`;
175455
+ }
175456
+ }
175457
+ });
175458
+ });
175459
+ instance.setOptions(resolvedOptions);
175460
+ useIsomorphicLayoutEffect$1(() => {
175461
+ return instance._didMount();
175462
+ }, []);
175463
+ useIsomorphicLayoutEffect$1(() => {
175464
+ return instance._willUpdate();
175465
+ });
175466
+ useIsomorphicLayoutEffect$1(() => {
175467
+ applyDirectStyles(instance);
175468
+ });
175469
+ return instance;
175470
+ }
175471
+ function useVirtualizer(options) {
175472
+ return useVirtualizerBase({
175473
+ observeElementRect,
175474
+ observeElementOffset,
175475
+ scrollToFn: elementScroll,
175476
+ ...options
175477
+ });
175478
+ }
175479
+ function VirtualizedMessageList({
175480
+ items,
175481
+ getKey,
175482
+ renderItem,
175483
+ estimateSize = 220,
175484
+ overscan = 5
175485
+ }) {
175486
+ const { scrollRef } = useStickToBottomContext();
175487
+ const estimateSizeFn = reactExports.useCallback(() => estimateSize, [estimateSize]);
175488
+ const itemsRef = reactExports.useRef(items);
175489
+ itemsRef.current = items;
175490
+ const getItemKeyFn = reactExports.useCallback(
175491
+ (index2) => getKey(itemsRef.current[index2], index2),
175492
+ [getKey]
175493
+ );
175494
+ const getScrollElement = reactExports.useCallback(() => scrollRef.current, [scrollRef]);
175495
+ const virtualizer = useVirtualizer({
175496
+ count: items.length,
175497
+ getScrollElement,
175498
+ estimateSize: estimateSizeFn,
175499
+ overscan,
175500
+ // Stable key per item — important so React reuses the same DOM row
175501
+ // when items shift (e.g. a new message pushes earlier ones up).
175502
+ getItemKey: getItemKeyFn
175503
+ });
175504
+ const virtualItems = virtualizer.getVirtualItems();
175505
+ const totalSize = virtualizer.getTotalSize();
175506
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
175507
+ "div",
175508
+ {
175509
+ "data-testid": "chat-pane__virtual-list",
175510
+ style: {
175511
+ // Explicit total height so the parent flex container's
175512
+ // ResizeObserver (use-stick-to-bottom) sees growth and the
175513
+ // scrollbar shows the correct extent.
175514
+ height: `${totalSize}px`,
175515
+ width: "100%",
175516
+ position: "relative"
175517
+ },
175518
+ children: virtualItems.map((virtualRow) => {
175519
+ const item = items[virtualRow.index];
175520
+ const isLast = virtualRow.index === items.length - 1;
175521
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
175522
+ VirtualRow,
175523
+ {
175524
+ item,
175525
+ index: virtualRow.index,
175526
+ start: virtualRow.start,
175527
+ isLast,
175528
+ renderItem,
175529
+ measureRef: virtualizer.measureElement
175530
+ },
175531
+ virtualRow.key
175532
+ );
175533
+ })
175534
+ }
175535
+ );
175536
+ }
175537
+ function VirtualRowImpl({
175538
+ item,
175539
+ index: index2,
175540
+ start: start2,
175541
+ isLast,
175542
+ renderItem,
175543
+ measureRef
175544
+ }) {
175545
+ const content2 = renderItem(item, index2);
175546
+ const padding = content2 == null || isLast ? "" : "pb-4";
175547
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
175548
+ "div",
175549
+ {
175550
+ "data-index": index2,
175551
+ "data-testid": content2 == null ? void 0 : "chat-pane__message-row",
175552
+ ref: measureRef,
175553
+ style: {
175554
+ position: "absolute",
175555
+ top: 0,
175556
+ left: 0,
175557
+ width: "100%",
175558
+ transform: `translateY(${start2}px)`
175559
+ },
175560
+ className: padding,
175561
+ children: content2
175562
+ }
175563
+ );
175564
+ }
175565
+ const VirtualRow = reactExports.memo(VirtualRowImpl);
173824
175566
  const IN_PROGRESS_STATES = /* @__PURE__ */ new Set([
173825
175567
  "input-available",
173826
175568
  "input-streaming",
@@ -173872,18 +175614,18 @@ function ConversationSkeleton() {
173872
175614
  "aria-busy": "true",
173873
175615
  "aria-label": "Loading messages",
173874
175616
  children: [
173875
- /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "user", children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 py-1", children: [
175617
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "user", "data-testid": void 0, children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 py-1", children: [
173876
175618
  /* @__PURE__ */ jsxRuntimeExports.jsx(SkeletonBar, { widthClass: "w-48", className: "bg-foreground/10" }),
173877
175619
  /* @__PURE__ */ jsxRuntimeExports.jsx(SkeletonBar, { widthClass: "w-32", className: "bg-foreground/10" })
173878
175620
  ] }) }) }),
173879
- /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "assistant", children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 pt-1", children: [
175621
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "assistant", "data-testid": void 0, children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 pt-1", children: [
173880
175622
  /* @__PURE__ */ jsxRuntimeExports.jsx(SkeletonBar, { widthClass: "w-3/4" }),
173881
175623
  /* @__PURE__ */ jsxRuntimeExports.jsx(SkeletonBar, { widthClass: "w-full" }),
173882
175624
  /* @__PURE__ */ jsxRuntimeExports.jsx(SkeletonBar, { widthClass: "w-5/6" }),
173883
175625
  /* @__PURE__ */ jsxRuntimeExports.jsx(SkeletonBar, { widthClass: "w-2/3" })
173884
175626
  ] }) }) }),
173885
- /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "user", children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-2 py-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SkeletonBar, { widthClass: "w-40", className: "bg-foreground/10" }) }) }) }),
173886
- /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "assistant", children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 pt-1", children: [
175627
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "user", "data-testid": void 0, children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-2 py-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SkeletonBar, { widthClass: "w-40", className: "bg-foreground/10" }) }) }) }),
175628
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "assistant", "data-testid": void 0, children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 pt-1", children: [
173887
175629
  /* @__PURE__ */ jsxRuntimeExports.jsx(SkeletonBar, { widthClass: "w-2/3" }),
173888
175630
  /* @__PURE__ */ jsxRuntimeExports.jsx(SkeletonBar, { widthClass: "w-4/5" }),
173889
175631
  /* @__PURE__ */ jsxRuntimeExports.jsx(SkeletonBar, { widthClass: "w-1/2" })
@@ -173917,6 +175659,29 @@ function ChatView({
173917
175659
  reactExports.useRef(null);
173918
175660
  const stickyContextRef = reactExports.useRef(null);
173919
175661
  const prevVisibleRef = reactExports.useRef(visible);
175662
+ reactExports.useEffect(() => {
175663
+ let raf = 0;
175664
+ let attempts = 0;
175665
+ const attach = () => {
175666
+ attempts += 1;
175667
+ const el = stickyContextRef.current?.scrollRef?.current;
175668
+ if (el) {
175669
+ if (!el.dataset.testid) el.dataset.testid = "chat-pane__scroller";
175670
+ return;
175671
+ }
175672
+ if (attempts >= 10) {
175673
+ console.warn(
175674
+ "[ChatView] StickToBottom scrollRef did not resolve within 10 frames; chat-pane__scroller testid not attached"
175675
+ );
175676
+ return;
175677
+ }
175678
+ raf = requestAnimationFrame(attach);
175679
+ };
175680
+ attach();
175681
+ return () => {
175682
+ if (raf) cancelAnimationFrame(raf);
175683
+ };
175684
+ }, []);
173920
175685
  reactExports.useEffect(() => {
173921
175686
  const wasHidden = prevVisibleRef.current === false;
173922
175687
  prevVisibleRef.current = visible;
@@ -174146,14 +175911,76 @@ function ChatView({
174146
175911
  }
174147
175912
  return map2;
174148
175913
  }, [messages]);
175914
+ const getMessageKey = reactExports.useCallback((message) => message.id, []);
175915
+ const messagesRef = reactExports.useRef(messages);
175916
+ messagesRef.current = messages;
175917
+ const isStreamingRef = reactExports.useRef(isStreaming);
175918
+ isStreamingRef.current = isStreaming;
175919
+ const renderMessageItem = reactExports.useCallback((message, messageIndex) => {
175920
+ const currentMessages = messagesRef.current;
175921
+ const currentIsStreaming = isStreamingRef.current;
175922
+ const isLastMessage = messageIndex === currentMessages.length - 1;
175923
+ const isLastAssistant = message.role === "assistant" && isLastMessage;
175924
+ const hasPendingInteractiveTool = isLastAssistant && message.parts.some((p2) => {
175925
+ if (!isToolUIPart(p2) || !IN_PROGRESS_STATES.has(p2.state)) return false;
175926
+ const name2 = getToolName(p2);
175927
+ return name2 === "AskUserQuestion" || name2 === "ExitPlanMode";
175928
+ });
175929
+ const showThinking = isLastAssistant && currentIsStreaming && !hasPendingInteractiveTool;
175930
+ const segments = groupMessageParts(message.parts);
175931
+ if (message.role !== "assistant") {
175932
+ if (segments.length === 0) return null;
175933
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "user", children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: segments.map((segment) => {
175934
+ if (segment.type === "text" && segment.part.type === "text" && segment.part.text.trim()) {
175935
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(MessageResponse, { children: segment.part.text }, `${message.id}-text-${segment.partIndex}`);
175936
+ }
175937
+ if (segment.type === "file") {
175938
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
175939
+ MessageFilePart,
175940
+ {
175941
+ part: segment.part
175942
+ },
175943
+ `${message.id}-file-${segment.partIndex}`
175944
+ );
175945
+ }
175946
+ return null;
175947
+ }) }) });
175948
+ }
175949
+ if (segments.length === 0 && !showThinking) return null;
175950
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "assistant", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(MessageContent, { children: [
175951
+ segments.map((segment) => {
175952
+ if (segment.type === "text") {
175953
+ const { part, partIndex } = segment;
175954
+ if (part.type === "text" && part.text.trim()) {
175955
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(MessageResponse, { children: part.text }, `${message.id}-text-${partIndex}`);
175956
+ }
175957
+ return null;
175958
+ }
175959
+ if (segment.type === "file") {
175960
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
175961
+ MessageFilePart,
175962
+ {
175963
+ part: segment.part
175964
+ },
175965
+ `${message.id}-file-${segment.partIndex}`
175966
+ );
175967
+ }
175968
+ const item = toolPartToItem(segment.part);
175969
+ if (isTaskTool(item.toolName)) return null;
175970
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ToolCall, { item }, `${message.id}-tool-${segment.partIndex}`);
175971
+ }),
175972
+ showThinking && /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingIndicator, {})
175973
+ ] }) });
175974
+ }, []);
174149
175975
  const getLastUserMessage = reactExports.useCallback(() => {
174150
- for (let i2 = messages.length - 1; i2 >= 0; i2--) {
174151
- if (messages[i2].role !== "user") continue;
174152
- const text2 = messages[i2].parts.filter((p2) => p2.type === "text").map((p2) => p2.text).join("\n").trim();
175976
+ const currentMessages = messagesRef.current;
175977
+ for (let i2 = currentMessages.length - 1; i2 >= 0; i2--) {
175978
+ if (currentMessages[i2].role !== "user") continue;
175979
+ const text2 = currentMessages[i2].parts.filter((p2) => p2.type === "text").map((p2) => p2.text).join("\n").trim();
174153
175980
  if (text2) return text2;
174154
175981
  }
174155
175982
  return void 0;
174156
- }, [messages]);
175983
+ }, []);
174157
175984
  return (
174158
175985
  // Scope every `band-file:` link clicked inside this chat to *this*
174159
175986
  // workspace — `dispatchOpenFile` reads the id from context, so a
@@ -174177,64 +176004,21 @@ function ChatView({
174177
176004
  description: "Send a message to start coding"
174178
176005
  }
174179
176006
  ),
174180
- (() => {
174181
- return messages.map((message, messageIndex) => {
174182
- const isLastMessage = messageIndex === messages.length - 1;
174183
- const isLastAssistant = message.role === "assistant" && isLastMessage;
174184
- const hasPendingInteractiveTool = isLastAssistant && message.parts.some(
174185
- (p2) => isToolUIPart(p2) && IN_PROGRESS_STATES.has(p2.state) && (getToolName(p2) === "AskUserQuestion" || getToolName(p2) === "ExitPlanMode")
174186
- );
174187
- const showThinking = isLastAssistant && isStreaming && !hasPendingInteractiveTool;
174188
- if (message.role !== "assistant") {
174189
- const userParts = groupMessageParts(message.parts);
174190
- if (userParts.length === 0) return null;
174191
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "user", children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: userParts.map((segment) => {
174192
- if (segment.type === "text" && segment.part.type === "text" && segment.part.text.trim()) {
174193
- return /* @__PURE__ */ jsxRuntimeExports.jsx(MessageResponse, { children: segment.part.text }, `${message.id}-text-${segment.partIndex}`);
174194
- }
174195
- if (segment.type === "file") {
174196
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
174197
- MessageFilePart,
174198
- {
174199
- part: segment.part
174200
- },
174201
- `${message.id}-file-${segment.partIndex}`
174202
- );
174203
- }
174204
- return null;
174205
- }) }) }, message.id);
174206
- }
174207
- const visibleParts = message.parts.filter(
174208
- (p2) => p2.type === "text" && p2.text.trim() || p2.type === "file" || isToolUIPart(p2)
174209
- );
174210
- if (visibleParts.length === 0 && !showThinking) return null;
174211
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "assistant", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(MessageContent, { children: [
174212
- groupMessageParts(message.parts).map((segment) => {
174213
- if (segment.type === "text") {
174214
- const { part, partIndex } = segment;
174215
- if (part.type === "text" && part.text.trim()) {
174216
- return /* @__PURE__ */ jsxRuntimeExports.jsx(MessageResponse, { children: part.text }, `${message.id}-text-${partIndex}`);
174217
- }
174218
- return null;
174219
- }
174220
- if (segment.type === "file") {
174221
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
174222
- MessageFilePart,
174223
- {
174224
- part: segment.part
174225
- },
174226
- `${message.id}-file-${segment.partIndex}`
174227
- );
174228
- }
174229
- const item = toolPartToItem(segment.part);
174230
- if (isTaskTool(item.toolName)) return null;
174231
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ToolCall, { item }, `${message.id}-tool-${segment.partIndex}`);
174232
- }),
174233
- showThinking && /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingIndicator, {})
174234
- ] }) }, message.id);
174235
- });
174236
- })(),
174237
- isStreaming && (!messages.length || messages[messages.length - 1].role === "user") && /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "assistant", children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingIndicator, {}) }) }),
176007
+ messages.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
176008
+ VirtualizedMessageList,
176009
+ {
176010
+ items: messages,
176011
+ getKey: getMessageKey,
176012
+ renderItem: renderMessageItem
176013
+ }
176014
+ ),
176015
+ isStreaming && (!messages.length || messages[messages.length - 1].role === "user") && // No `chat-pane__assistant-message` testid on the
176016
+ // standalone thinking bubble — locators that target
176017
+ // assistant message bubbles should never pick up the
176018
+ // intermediate "agent is thinking" placeholder. The
176019
+ // dedicated `chat-pane__thinking-indicator` testid on
176020
+ // `ThinkingIndicator` is what tests use for this state.
176021
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Message, { from: "assistant", "data-testid": void 0, children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingIndicator, {}) }) }),
174238
176022
  queuedMessagesView.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
174239
176023
  DndContext,
174240
176024
  {
@@ -174499,11 +176283,13 @@ const MODEL_CONTEXT_WINDOWS = {
174499
176283
  "gemini-2.5-pro": 1e6,
174500
176284
  "gemini-2.5-flash": 1e6
174501
176285
  };
176286
+ const SORTED_MODEL_CONTEXT_ENTRIES = Object.entries(
176287
+ MODEL_CONTEXT_WINDOWS
176288
+ ).sort(([a2], [b2]) => b2.length - a2.length);
174502
176289
  function getContextWindow(model) {
174503
176290
  if (!model) return 2e5;
174504
176291
  if (MODEL_CONTEXT_WINDOWS[model]) return MODEL_CONTEXT_WINDOWS[model];
174505
- const entries2 = Object.entries(MODEL_CONTEXT_WINDOWS).sort(([a2], [b2]) => b2.length - a2.length);
174506
- for (const [key2, value] of entries2) {
176292
+ for (const [key2, value] of SORTED_MODEL_CONTEXT_ENTRIES) {
174507
176293
  if (model.startsWith(key2)) return value;
174508
176294
  }
174509
176295
  return 2e5;
@@ -175035,6 +176821,20 @@ function newChatId() {
175035
176821
  function chatLayoutKey(workspaceId) {
175036
176822
  return ["chatLayout", workspaceId];
175037
176823
  }
176824
+ let sharedSettingsPromise = null;
176825
+ let sharedSettingsAt = 0;
176826
+ const SHARED_SETTINGS_TTL_MS = 5e3;
176827
+ function getSharedSettings() {
176828
+ const now2 = Date.now();
176829
+ if (!sharedSettingsPromise || now2 - sharedSettingsAt > SHARED_SETTINGS_TTL_MS) {
176830
+ sharedSettingsAt = now2;
176831
+ sharedSettingsPromise = trpc.settings.get.query().catch(() => {
176832
+ sharedSettingsPromise = null;
176833
+ return null;
176834
+ });
176835
+ }
176836
+ return sharedSettingsPromise;
176837
+ }
175038
176838
  const saveTimers = /* @__PURE__ */ new Map();
175039
176839
  function persistToServer(workspaceId, layout, opts) {
175040
176840
  if (opts?.queryClient) {
@@ -175141,11 +176941,13 @@ function writeCachedTabMeta(chatId, patch2) {
175141
176941
  } catch {
175142
176942
  }
175143
176943
  }
176944
+ const RESUME_CAPABLE_AGENT_TYPES = /* @__PURE__ */ new Set(["claude-code", "codex", "opencode"]);
175144
176945
  function ChatTab(props) {
175145
176946
  const initialChatId = props.params.chatId;
175146
176947
  const initialCache = readCachedTabMeta(initialChatId);
175147
176948
  const [title, setTitle] = reactExports.useState(initialCache.title ?? props.api.title ?? "Chat");
175148
176949
  const [agentType, setAgentType] = reactExports.useState(initialCache.agentType);
176950
+ const [sessionId, setSessionId] = reactExports.useState(void 0);
175149
176951
  const [panelCount, setPanelCount] = reactExports.useState(props.containerApi.panels.length);
175150
176952
  reactExports.useEffect(() => {
175151
176953
  const d2 = props.api.onDidTitleChange(() => {
@@ -175167,28 +176969,61 @@ function ChatTab(props) {
175167
176969
  }, [props.containerApi]);
175168
176970
  const chatId = props.params.chatId;
175169
176971
  const workspaceId = props.params.workspaceId;
176972
+ const mountedRef = reactExports.useRef(true);
175170
176973
  reactExports.useEffect(() => {
176974
+ return () => {
176975
+ mountedRef.current = false;
176976
+ };
176977
+ }, []);
176978
+ const codingAgentsRef = reactExports.useRef([]);
176979
+ const defaultAgentIdRef = reactExports.useRef(void 0);
176980
+ const applyChatMeta = reactExports.useCallback(
176981
+ (chat) => {
176982
+ if (!mountedRef.current) return;
176983
+ setSessionId(chat?.activeSessionId ?? void 0);
176984
+ const agentId = chat?.agent ?? defaultAgentIdRef.current ?? "";
176985
+ const found = codingAgentsRef.current.find((a2) => a2.id === agentId);
176986
+ if (found) {
176987
+ setAgentType(found.type);
176988
+ writeCachedTabMeta(chatId, { agentType: found.type });
176989
+ }
176990
+ },
176991
+ [chatId]
176992
+ );
176993
+ const refreshTabMeta = reactExports.useCallback(() => {
175171
176994
  if (!chatId || !workspaceId) return;
175172
- let cancelled2 = false;
175173
176995
  Promise.all([
175174
- trpc.settings.get.query().catch(() => null),
176996
+ getSharedSettings(),
175175
176997
  trpc.chats.get.query({ chatId }).catch(() => ({ chat: null }))
175176
176998
  ]).then(([settings, chatResult]) => {
175177
- if (cancelled2) return;
176999
+ if (!mountedRef.current) return;
175178
177000
  const raw2 = settings?.codingAgents;
175179
- const codingAgents = Array.isArray(raw2) ? raw2 : [];
175180
- const defaultAgentId = settings?.defaultCodingAgent;
175181
- const agentId = chatResult.chat?.agent ?? defaultAgentId ?? "";
175182
- const found = codingAgents.find((a2) => a2.id === agentId);
175183
- if (found) {
175184
- setAgentType(found.type);
175185
- writeCachedTabMeta(chatId, { agentType: found.type });
175186
- }
177001
+ codingAgentsRef.current = Array.isArray(raw2) ? raw2 : [];
177002
+ defaultAgentIdRef.current = settings?.defaultCodingAgent;
177003
+ applyChatMeta(chatResult.chat);
177004
+ }).catch(() => {
177005
+ });
177006
+ }, [chatId, workspaceId, applyChatMeta]);
177007
+ const refreshChatMeta = reactExports.useCallback(() => {
177008
+ if (!chatId) return;
177009
+ trpc.chats.get.query({ chatId }).then((res) => applyChatMeta(res.chat)).catch(() => {
177010
+ });
177011
+ }, [chatId, applyChatMeta]);
177012
+ reactExports.useEffect(() => {
177013
+ refreshTabMeta();
177014
+ }, [refreshTabMeta]);
177015
+ const canResume = !!sessionId && !!agentType && RESUME_CAPABLE_AGENT_TYPES.has(agentType);
177016
+ const handleContinueInTerminal = reactExports.useCallback(() => {
177017
+ trpc.chats.continueInTerminal.mutate({ chatId }).then(() => {
177018
+ crossPanelHandlers.onActivateTerminalPanel(workspaceId);
177019
+ }).catch((err) => {
177020
+ console.error("[ChatTab] continue in terminal failed:", err);
175187
177021
  });
175188
- return () => {
175189
- cancelled2 = true;
175190
- };
175191
177022
  }, [chatId, workspaceId]);
177023
+ const handleCopySessionId = reactExports.useCallback(() => {
177024
+ if (!sessionId) return;
177025
+ void writeClipboardText(sessionId);
177026
+ }, [sessionId]);
175192
177027
  const handleClose2 = reactExports.useCallback(
175193
177028
  (e3) => {
175194
177029
  e3.stopPropagation();
@@ -175197,35 +177032,65 @@ function ChatTab(props) {
175197
177032
  [chatId]
175198
177033
  );
175199
177034
  const showClose = panelCount > 1;
175200
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "dv-default-tab", children: [
175201
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5 min-w-0", children: [
175202
- /* @__PURE__ */ jsxRuntimeExports.jsx(
175203
- "span",
175204
- {
175205
- className: "inline-flex size-3.5 shrink-0 items-center justify-center transition-opacity duration-150",
175206
- style: { opacity: agentType ? 1 : 0 },
175207
- children: agentType && /* @__PURE__ */ jsxRuntimeExports.jsx(AgentIcon, { type: agentType, className: "size-3.5" })
175208
- }
175209
- ),
175210
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate min-w-[6rem] max-w-[14rem]", children: title })
175211
- ] }),
175212
- /* @__PURE__ */ jsxRuntimeExports.jsx(
175213
- "button",
175214
- {
175215
- type: "button",
175216
- "aria-hidden": !showClose,
175217
- tabIndex: showClose ? 0 : -1,
175218
- className: "ml-1 inline-flex size-4 items-center justify-center rounded-sm opacity-60 hover:opacity-100 hover:bg-accent transition-opacity",
175219
- style: {
175220
- opacity: showClose ? void 0 : 0,
175221
- pointerEvents: showClose ? void 0 : "none"
175222
- },
175223
- onClick: handleClose2,
175224
- title: "Close tab",
175225
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(X$7, { className: "size-3" })
175226
- }
175227
- )
175228
- ] });
177035
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
177036
+ ContextMenu,
177037
+ {
177038
+ onOpenChange: (open2) => {
177039
+ if (open2) refreshChatMeta();
177040
+ },
177041
+ children: [
177042
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "dv-default-tab", "data-testid": `chat-tab__trigger--${chatId}`, children: [
177043
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5 min-w-0", children: [
177044
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
177045
+ "span",
177046
+ {
177047
+ className: "inline-flex size-3.5 shrink-0 items-center justify-center transition-opacity duration-150",
177048
+ style: { opacity: agentType ? 1 : 0 },
177049
+ children: agentType && /* @__PURE__ */ jsxRuntimeExports.jsx(AgentIcon, { type: agentType, className: "size-3.5" })
177050
+ }
177051
+ ),
177052
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate min-w-[6rem] max-w-[14rem]", children: title })
177053
+ ] }),
177054
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
177055
+ "button",
177056
+ {
177057
+ type: "button",
177058
+ "aria-hidden": !showClose,
177059
+ tabIndex: showClose ? 0 : -1,
177060
+ className: "ml-1 inline-flex size-4 items-center justify-center rounded-sm opacity-60 hover:opacity-100 hover:bg-accent transition-opacity",
177061
+ style: {
177062
+ opacity: showClose ? void 0 : 0,
177063
+ pointerEvents: showClose ? void 0 : "none"
177064
+ },
177065
+ onClick: handleClose2,
177066
+ title: "Close tab",
177067
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(X$7, { className: "size-3" })
177068
+ }
177069
+ )
177070
+ ] }) }),
177071
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(ContextMenuContent, { "data-testid": "chat-tab__context-menu", children: [
177072
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
177073
+ ContextMenuItem,
177074
+ {
177075
+ disabled: !canResume,
177076
+ onClick: handleContinueInTerminal,
177077
+ "data-testid": "chat-tab__context-menu-item--continue-in-terminal",
177078
+ children: "Continue in terminal"
177079
+ }
177080
+ ),
177081
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
177082
+ ContextMenuItem,
177083
+ {
177084
+ disabled: !sessionId,
177085
+ onClick: handleCopySessionId,
177086
+ "data-testid": "chat-tab__context-menu-item--copy-session-id",
177087
+ children: "Copy session ID"
177088
+ }
177089
+ )
177090
+ ] })
177091
+ ]
177092
+ }
177093
+ );
175229
177094
  }
175230
177095
  const addTabRef = {
175231
177096
  current: { onAdd: () => {
@@ -175641,6 +177506,15 @@ function usePerWorkspaceState(workspaceId) {
175641
177506
  }
175642
177507
  const DEFAULT_MAX_CACHED_WORKSPACES = 3;
175643
177508
  const MIN_MAX_CACHED_WORKSPACES = 1;
177509
+ const ACTIVE_ENTRY_STYLE = {
177510
+ visibility: "visible",
177511
+ contentVisibility: "visible"
177512
+ };
177513
+ const HIDDEN_ENTRY_STYLE = {
177514
+ visibility: "hidden",
177515
+ contentVisibility: "hidden",
177516
+ pointerEvents: "none"
177517
+ };
175644
177518
  function MultiWorkspacePanelHost({ emptyState, children: children2 }) {
175645
177519
  const [cache, setCache] = reactExports.useState(/* @__PURE__ */ new Map());
175646
177520
  const pathname = useRouterState({ select: (s2) => s2.location.pathname });
@@ -175724,11 +177598,8 @@ function MultiWorkspacePanelHost({ emptyState, children: children2 }) {
175724
177598
  "div",
175725
177599
  {
175726
177600
  "data-testid": `workspace-panel-host__cached-entry--${workspaceId}`,
175727
- className: "absolute inset-0 transition-opacity duration-150 ease-out",
175728
- style: {
175729
- opacity: isActive ? 1 : 0,
175730
- pointerEvents: isActive ? void 0 : "none"
175731
- },
177601
+ className: "absolute inset-0",
177602
+ style: isActive ? ACTIVE_ENTRY_STYLE : HIDDEN_ENTRY_STYLE,
175732
177603
  children: children2(workspaceId, isActive)
175733
177604
  },
175734
177605
  workspaceId
@@ -199076,12 +200947,12 @@ const PANEL_SHORTCUTS = {
199076
200947
  browser: "⇧⌘B"
199077
200948
  };
199078
200949
  const DockviewTerminalContainer = reactExports.lazy(
199079
- () => import("./DockviewTerminalContainer-zVckKR1x.js").then((m2) => ({
200950
+ () => import("./DockviewTerminalContainer-bMEUzx6R.js").then((m2) => ({
199080
200951
  default: m2.DockviewTerminalContainer
199081
200952
  }))
199082
200953
  );
199083
200954
  const DockviewBrowserContainer = reactExports.lazy(
199084
- () => import("./DockviewBrowserContainer-BcfLe0jL.js").then((m2) => ({
200955
+ () => import("./DockviewBrowserContainer-Btjtd2O1.js").then((m2) => ({
199085
200956
  default: m2.DockviewBrowserContainer
199086
200957
  }))
199087
200958
  );
@@ -199095,6 +200966,8 @@ const crossPanelHandlers = {
199095
200966
  onFindInFile: () => {
199096
200967
  },
199097
200968
  onActivateFilesPanel: () => {
200969
+ },
200970
+ onActivateTerminalPanel: () => {
199098
200971
  }
199099
200972
  };
199100
200973
  function NoWorkspaceMessage({ Icon: Icon2 }) {
@@ -199534,11 +201407,20 @@ function SharedDockviewLayout() {
199534
201407
  apiRef.current?.getPanel("files")?.api.setActive();
199535
201408
  }
199536
201409
  }, []);
201410
+ const handleActivateTerminalPanel = reactExports.useCallback((workspaceId) => {
201411
+ if (workspaceId !== activeWorkspaceIdRef.current) return;
201412
+ if (hiddenPanelsRef.current.includes("terminal")) return;
201413
+ apiRef.current?.getPanel("terminal")?.api.setActive();
201414
+ queueMicrotask(() => {
201415
+ window.dispatchEvent(new CustomEvent("band:focus-terminal"));
201416
+ });
201417
+ }, []);
199537
201418
  crossPanelHandlers.onOpenFile = handleOpenFile;
199538
201419
  crossPanelHandlers.onFileOpened = handleFileOpened;
199539
201420
  crossPanelHandlers.onSelectFile = handleSelectFile;
199540
201421
  crossPanelHandlers.onFindInFile = handleSetFindInFile;
199541
201422
  crossPanelHandlers.onActivateFilesPanel = handleActivateFilesPanel;
201423
+ crossPanelHandlers.onActivateTerminalPanel = handleActivateTerminalPanel;
199542
201424
  const paletteCommands = reactExports.useMemo(
199543
201425
  () => buildCommands({
199544
201426
  getApi: () => apiRef.current,
@@ -199963,6 +201845,9 @@ function SharedDockviewLayout() {
199963
201845
  lastStructureRef.current = getStructuralFingerprint(initJson);
199964
201846
  }
199965
201847
  const initialActiveState = loadActiveState(initialWorkspaceId);
201848
+ if (initialActiveState) {
201849
+ applyGroupActiveViewsToApi(event.api, initialActiveState);
201850
+ }
199966
201851
  if (initialActiveState?.maximizedGroup) {
199967
201852
  applyMaximizedGroupToApi(event.api, initialActiveState.maximizedGroup);
199968
201853
  }
@@ -200005,16 +201890,7 @@ function SharedDockviewLayout() {
200005
201890
  if (!api || !activeWorkspaceId) return;
200006
201891
  const activeState = loadActiveState(activeWorkspaceId);
200007
201892
  if (activeState) {
200008
- try {
200009
- for (const [_groupId, viewId] of Object.entries(activeState.groups)) {
200010
- const panel = api.getPanel(viewId);
200011
- if (!panel) continue;
200012
- if (panel.api.isActive) continue;
200013
- if (panel.group.panels.length <= 1) continue;
200014
- panel.api.setActive();
200015
- }
200016
- } catch {
200017
- }
201893
+ applyGroupActiveViewsToApi(api, activeState);
200018
201894
  }
200019
201895
  applyMaximizedGroupToApi(api, activeState?.maximizedGroup);
200020
201896
  }, [activeWorkspaceId]);
@@ -200615,12 +202491,12 @@ function RootLayout() {
200615
202491
  ] })
200616
202492
  ] });
200617
202493
  }
200618
- const $$splitComponentImporter$1 = () => import("./index-BXCk5sug.js");
202494
+ const $$splitComponentImporter$1 = () => import("./index-DLV7EX0H.js");
200619
202495
  const Route$1 = createFileRoute("/")({
200620
202496
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
200621
202497
  });
200622
- const $$splitNotFoundComponentImporter = () => import("./workspace._workspaceId-DkyiAy0e.js");
200623
- const $$splitComponentImporter = () => import("./workspace._workspaceId-BWs5oKO5.js");
202498
+ const $$splitNotFoundComponentImporter = () => import("./workspace._workspaceId-Dcw9dnbJ.js");
202499
+ const $$splitComponentImporter = () => import("./workspace._workspaceId-CvbciLVC.js");
200624
202500
  const Route2 = createFileRoute("/workspace/$workspaceId")({
200625
202501
  component: lazyRouteComponent($$splitComponentImporter, "component"),
200626
202502
  // Bookmarks / shared links from before route unification (`/workspace/$id/changes`,
@@ -200821,7 +202697,7 @@ export {
200821
202697
  isFunction$1 as by,
200822
202698
  isEmpty as bz,
200823
202699
  continuedIndent as c,
200824
- isIterateeCall$1 as c$,
202700
+ millisecond as c$,
200825
202701
  SearchFilesDialog as c0,
200826
202702
  WorkspacePickerDialog as c1,
200827
202703
  useDiffTarget as c2,
@@ -200832,102 +202708,104 @@ export {
200832
202708
  ordinal as c7,
200833
202709
  getUserDefinedConfig as c8,
200834
202710
  getIconSVG as c9,
200835
- RotateCw as cA,
200836
- Rgb as cB,
200837
- rgbConvert as cC,
200838
- define as cD,
200839
- extend$2 as cE,
200840
- Color as cF,
200841
- nogamma as cG,
200842
- hue as cH,
200843
- time$2 as cI,
200844
- min$1 as cJ,
200845
- max$1 as cK,
200846
- dayjs2 as cL,
200847
- timeFormat as cM,
200848
- timeMonth as cN,
200849
- timeSunday as cO,
200850
- timeSaturday as cP,
200851
- timeFriday as cQ,
200852
- timeThursday as cR,
200853
- timeWednesday as cS,
200854
- timeTuesday as cT,
200855
- timeMonday as cU,
200856
- timeDay as cV,
200857
- timeHour as cW,
200858
- timeMinute as cX,
200859
- second as cY,
200860
- millisecond as cZ,
200861
- isObject$2 as c_,
202711
+ DropdownMenuItem as cA,
202712
+ TriangleAlert as cB,
202713
+ RotateCw as cC,
202714
+ Rgb as cD,
202715
+ rgbConvert as cE,
202716
+ define as cF,
202717
+ extend$2 as cG,
202718
+ Color as cH,
202719
+ nogamma as cI,
202720
+ hue as cJ,
202721
+ time$2 as cK,
202722
+ min$1 as cL,
202723
+ max$1 as cM,
202724
+ dayjs2 as cN,
202725
+ timeFormat as cO,
202726
+ timeMonth as cP,
202727
+ timeSunday as cQ,
202728
+ timeSaturday as cR,
202729
+ timeFriday as cS,
202730
+ timeThursday as cT,
202731
+ timeWednesday as cU,
202732
+ timeTuesday as cV,
202733
+ timeMonday as cW,
202734
+ timeDay as cX,
202735
+ timeHour as cY,
202736
+ timeMinute as cZ,
202737
+ second as c_,
200862
202738
  registerIconPacks as ca,
200863
202739
  unknownIcon as cb,
200864
- ArrowUp as cc,
200865
- ArrowDown as cd,
200866
- ArrowRight as ce,
200867
- ClipboardPaste as cf,
200868
- getCurrentZoomLevel as cg,
200869
- openExternalUrl as ch,
200870
- subscribeToZoomChanges as ci,
200871
- SearchBar as cj,
200872
- ZOOM_CSS_VAR as ck,
200873
- invoke as cl,
200874
- listen as cm,
200875
- reactDomExports as cn,
200876
- Globe as co,
200877
- Popover as cp,
200878
- PopoverTrigger as cq,
200879
- PopoverContent as cr,
200880
- Search as cs,
200881
- Trash2 as ct,
200882
- DropdownMenu as cu,
200883
- DropdownMenuTrigger as cv,
200884
- ChevronDown as cw,
200885
- DropdownMenuContent as cx,
200886
- DropdownMenuItem as cy,
200887
- TriangleAlert as cz,
202740
+ writeClipboardText as cc,
202741
+ readClipboardText as cd,
202742
+ ArrowUp as ce,
202743
+ ArrowDown as cf,
202744
+ ArrowRight as cg,
202745
+ ClipboardPaste as ch,
202746
+ getCurrentZoomLevel as ci,
202747
+ openExternalUrl as cj,
202748
+ subscribeToZoomChanges as ck,
202749
+ SearchBar as cl,
202750
+ ZOOM_CSS_VAR as cm,
202751
+ invoke as cn,
202752
+ listen as co,
202753
+ reactDomExports as cp,
202754
+ Globe as cq,
202755
+ Popover as cr,
202756
+ PopoverTrigger as cs,
202757
+ PopoverContent as ct,
202758
+ Search as cu,
202759
+ Trash2 as cv,
202760
+ DropdownMenu as cw,
202761
+ DropdownMenuTrigger as cx,
202762
+ ChevronDown as cy,
202763
+ DropdownMenuContent as cz,
200888
202764
  foldInside as d,
200889
- keysIn as d0,
200890
- eq as d1,
200891
- isArrayLike$1 as d2,
200892
- isArray$1 as d3,
200893
- identity$1 as d4,
200894
- isIndex$1 as d5,
200895
- assignValue as d6,
200896
- format as d7,
200897
- styles2String as d8,
200898
- isLabelStyle as d9,
200899
- Uint8Array$1 as dA,
200900
- isTypedArray$1 as dB,
200901
- isLength$1 as dC,
200902
- Set$1 as dD,
200903
- createAssigner as dE,
200904
- isPrototype as dF,
200905
- router as dG,
200906
- setToString as da,
200907
- overRest as db,
200908
- baseFor as dc,
200909
- baseAssignValue as dd,
200910
- baseUnary as de,
200911
- merge$1 as df,
200912
- isObjectLike$1 as dg,
200913
- baseGetTag as dh,
200914
- Symbol$1 as di,
200915
- arrayLikeKeys as dj,
200916
- baseKeys as dk,
200917
- memoize as dl,
200918
- isArguments$1 as dm,
200919
- copyObject as dn,
200920
- getPrototype as dp,
200921
- cloneArrayBuffer as dq,
200922
- cloneTypedArray as dr,
200923
- getTag$1 as ds,
200924
- nodeUtil as dt,
200925
- copyArray as du,
200926
- isBuffer$1 as dv,
200927
- cloneBuffer as dw,
200928
- initCloneObject as dx,
200929
- Stack as dy,
200930
- MapCache as dz,
202765
+ isObject$2 as d0,
202766
+ isIterateeCall$1 as d1,
202767
+ keysIn as d2,
202768
+ eq as d3,
202769
+ isArrayLike$1 as d4,
202770
+ isArray$1 as d5,
202771
+ identity$1 as d6,
202772
+ isIndex$1 as d7,
202773
+ assignValue as d8,
202774
+ format as d9,
202775
+ Stack as dA,
202776
+ MapCache as dB,
202777
+ Uint8Array$1 as dC,
202778
+ isTypedArray$1 as dD,
202779
+ isLength$1 as dE,
202780
+ Set$1 as dF,
202781
+ createAssigner as dG,
202782
+ isPrototype as dH,
202783
+ router as dI,
202784
+ styles2String as da,
202785
+ isLabelStyle as db,
202786
+ setToString as dc,
202787
+ overRest as dd,
202788
+ baseFor as de,
202789
+ baseAssignValue as df,
202790
+ baseUnary as dg,
202791
+ merge$1 as dh,
202792
+ isObjectLike$1 as di,
202793
+ baseGetTag as dj,
202794
+ Symbol$1 as dk,
202795
+ arrayLikeKeys as dl,
202796
+ baseKeys as dm,
202797
+ memoize as dn,
202798
+ isArguments$1 as dp,
202799
+ copyObject as dq,
202800
+ getPrototype as dr,
202801
+ cloneArrayBuffer as ds,
202802
+ cloneTypedArray as dt,
202803
+ getTag$1 as du,
202804
+ nodeUtil as dv,
202805
+ copyArray as dw,
202806
+ isBuffer$1 as dx,
202807
+ cloneBuffer as dy,
202808
+ initCloneObject as dz,
200931
202809
  ifNotIn as e,
200932
202810
  foldNodeProp as f,
200933
202811
  completeFromList as g,