@band-app/server 0.16.8 → 0.16.9

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 (172) hide show
  1. package/dist/client/assets/DockviewBrowserContainer-CCBAkU1p.js +5 -0
  2. package/dist/client/assets/DockviewTerminalContainer-B9hdDoMz.js +2 -0
  3. package/dist/client/assets/{TerminalPanel-C6VJtwdn.js → TerminalPanel-BKfWmj6W.js} +1 -1
  4. package/dist/client/assets/_basePickBy-uVqvgsJc.js +1 -0
  5. package/dist/client/assets/{_baseUniq-K3DMbXu0.js → _baseUniq-7i7L1uNE.js} +1 -1
  6. package/dist/client/assets/{arc-BkgOQsVG.js → arc-DiYEQGs3.js} +1 -1
  7. package/dist/client/assets/{architectureDiagram-VXUJARFQ-CD44Dllc.js → architectureDiagram-VXUJARFQ-C5z8L1iK.js} +1 -1
  8. package/dist/client/assets/{blockDiagram-VD42YOAC-BKiU7fF0.js → blockDiagram-VD42YOAC-CXQSSz3O.js} +1 -1
  9. package/dist/client/assets/{c4Diagram-YG6GDRKO-CYISxlyF.js → c4Diagram-YG6GDRKO-DplRXCR2.js} +1 -1
  10. package/dist/client/assets/channel-BnMJuhcI.js +1 -0
  11. package/dist/client/assets/{chunk-4BX2VUAB-Bphc00nU.js → chunk-4BX2VUAB-B4Mk_d7A.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-CfN6hb2c.js → chunk-55IACEB6-B0hf8Eje.js} +1 -1
  13. package/dist/client/assets/{chunk-B4BG7PRW-DltWViHS.js → chunk-B4BG7PRW-DlN9tUxh.js} +1 -1
  14. package/dist/client/assets/{chunk-DI55MBZ5-51JXB972.js → chunk-DI55MBZ5-a11zyhq4.js} +1 -1
  15. package/dist/client/assets/{chunk-FMBD7UC4-CynepQnx.js → chunk-FMBD7UC4-aGGVV1yn.js} +1 -1
  16. package/dist/client/assets/{chunk-QN33PNHL-B45qeM-p.js → chunk-QN33PNHL-Dit4S-yJ.js} +1 -1
  17. package/dist/client/assets/{chunk-QZHKN3VN-1ObdmeeM.js → chunk-QZHKN3VN-L-h1VSi0.js} +1 -1
  18. package/dist/client/assets/{chunk-TZMSLE5B-CWtn_mgw.js → chunk-TZMSLE5B-DpK-hWaC.js} +1 -1
  19. package/dist/client/assets/classDiagram-2ON5EDUG-D89oCSXI.js +1 -0
  20. package/dist/client/assets/classDiagram-v2-WZHVMYZB-D89oCSXI.js +1 -0
  21. package/dist/client/assets/clone-X7FA7kE2.js +1 -0
  22. package/dist/client/assets/{cose-bilkent-S5V4N54A-B4IAbafd.js → cose-bilkent-S5V4N54A-CzoIK-3W.js} +1 -1
  23. package/dist/client/assets/{dagre-6UL2VRFP-BGoRZDH9.js → dagre-6UL2VRFP-BhfXeb7k.js} +1 -1
  24. package/dist/client/assets/{diagram-PSM6KHXK-DIkN7d-V.js → diagram-PSM6KHXK-BwFVwR1b.js} +1 -1
  25. package/dist/client/assets/{diagram-QEK2KX5R-B-hPXzou.js → diagram-QEK2KX5R-BO-CEopy.js} +1 -1
  26. package/dist/client/assets/{diagram-S2PKOQOG-BlUeis_2.js → diagram-S2PKOQOG-BxiH83lN.js} +1 -1
  27. package/dist/client/assets/{erDiagram-Q2GNP2WA-DZUjamhk.js → erDiagram-Q2GNP2WA-kUd-gmjz.js} +1 -1
  28. package/dist/client/assets/{flowDiagram-NV44I4VS-oIHer-h-.js → flowDiagram-NV44I4VS-CHbLqCKB.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-JELNMOA3-D8LfLthv.js → ganttDiagram-JELNMOA3-B7gBcAFl.js} +4 -4
  30. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-BgFUKaMK.js → gitGraphDiagram-V2S2FVAM-gca_jqKQ.js} +1 -1
  31. package/dist/client/assets/{graph-r-V7AF54.js → graph-CSi_akmB.js} +1 -1
  32. package/dist/client/assets/{highlighted-body-B3W2YXNL-BHkeGyHR.js → highlighted-body-B3W2YXNL-C2a-lsk8.js} +1 -1
  33. package/dist/client/assets/{index-fbwZk1fH.js → index-2F-slvqo.js} +1 -1
  34. package/dist/client/assets/{index-BDQWeqNk.js → index-5X7JRvnK.js} +1 -1
  35. package/dist/client/assets/{index-u_2V_RF4.js → index-B0ZcEU4c.js} +1 -1
  36. package/dist/client/assets/{index-CYvgC-U1.js → index-BJP1qdPz.js} +1 -1
  37. package/dist/client/assets/{index-W1CPMGYX.js → index-BPf6S9f1.js} +1 -1
  38. package/dist/client/assets/{index-BiUUT09K.js → index-C-3PAt1d.js} +1 -1
  39. package/dist/client/assets/{index-DQixQE5Y.js → index-C-6dsPog.js} +1 -1
  40. package/dist/client/assets/{index-DLFTwdhm.js → index-C4PISrIW.js} +1 -1
  41. package/dist/client/assets/{index-foc9a7eE.js → index-C4ee_PQ0.js} +1 -1
  42. package/dist/client/assets/{index-BvWkKnfY.js → index-CA1NuCd_.js} +1 -1
  43. package/dist/client/assets/{index-NMjGSNmU.js → index-CNQHGhCu.js} +1 -1
  44. package/dist/client/assets/{index-CXHZbHRT.js → index-CiKTedrx.js} +1 -1
  45. package/dist/client/assets/{index-CNerXIiJ.js → index-DNrK0iIn.js} +1 -1
  46. package/dist/client/assets/{index-DhTLiwux.js → index-DfHcm4JM.js} +1 -1
  47. package/dist/client/assets/{index-CdJ3WH3f.js → index-T_1b5WRg.js} +1 -1
  48. package/dist/client/assets/{index-CFEu-Cf9.js → index-oolizINO.js} +1 -1
  49. package/dist/client/assets/{index-y0IIofTa.js → index-spwNnd85.js} +1 -1
  50. package/dist/client/assets/{index-DAMgQMyn.js → index-udv0M-ix.js} +1 -1
  51. package/dist/client/assets/{infoDiagram-HS3SLOUP-xB0m1ffH.js → infoDiagram-HS3SLOUP-BK3MmhkJ.js} +1 -1
  52. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-E4OGYZo3.js → journeyDiagram-XKPGCS4Q-DIY8FE8Z.js} +1 -1
  53. package/dist/client/assets/{kanban-definition-3W4ZIXB7-DDOW42i6.js → kanban-definition-3W4ZIXB7-Cd_JJ8FN.js} +1 -1
  54. package/dist/client/assets/{layout-BU7n9QQq.js → layout-Bhb5FQCr.js} +1 -1
  55. package/dist/client/assets/{linear-CFFUeqRn.js → linear-Cmk2RyH_.js} +1 -1
  56. package/dist/client/assets/{main-onb8WwfN.js → main-BlRcPsmZ.js} +231 -235
  57. package/dist/client/assets/{mindmap-definition-VGOIOE7T-BQlhTP7t.js → mindmap-definition-VGOIOE7T-B-WhBVeY.js} +1 -1
  58. package/dist/client/assets/{pieDiagram-ADFJNKIX-khlEdX5z.js → pieDiagram-ADFJNKIX-CYoHsaM9.js} +1 -1
  59. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-D7D_64Ur.js → quadrantDiagram-AYHSOK5B-DHBoMUCQ.js} +1 -1
  60. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-Dd-Qxkau.js → requirementDiagram-UZGBJVZJ-DjS5RONh.js} +1 -1
  61. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-BxF-L0mm.js → sankeyDiagram-TZEHDZUN-DmhEbBY-.js} +1 -1
  62. package/dist/client/assets/{sequenceDiagram-WL72ISMW-UH13bSlf.js → sequenceDiagram-WL72ISMW-CzqbRfb_.js} +1 -1
  63. package/dist/client/assets/{square-terminal-BgnPkQhG.js → square-terminal-CNHJa6OY.js} +1 -1
  64. package/dist/client/assets/{stateDiagram-FKZM4ZOC-DJXW-Mwx.js → stateDiagram-FKZM4ZOC-CafvdTb3.js} +1 -1
  65. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BkKHK-CQ.js +1 -0
  66. package/dist/client/assets/{timeline-definition-IT6M3QCI-DoLvii7e.js → timeline-definition-IT6M3QCI-CNKMKDwq.js} +1 -1
  67. package/dist/client/assets/{treemap-GDKQZRPO-C6cooeby.js → treemap-GDKQZRPO-DCEPrZh7.js} +1 -1
  68. package/dist/client/assets/{useSessionListContext-DJKT08Su.js → useSessionListContext-xer-Wcmf.js} +1 -1
  69. package/dist/client/assets/{workspace._workspaceId-BZyIo0Fq.js → workspace._workspaceId-CgG1n_1x.js} +1 -1
  70. package/dist/client/assets/{workspace._workspaceId.changes-WzxDrDHA.js → workspace._workspaceId.changes-BKX7lUhX.js} +1 -1
  71. package/dist/client/assets/workspace._workspaceId.code-BcnxRdZi.js +1 -0
  72. package/dist/client/assets/{workspace._workspaceId.code._-DjAaAaSY.js → workspace._workspaceId.code._-BbOt6tOD.js} +1 -1
  73. package/dist/client/assets/{workspace._workspaceId.code.index-D0PytT4F.js → workspace._workspaceId.code.index-DC2535x-.js} +1 -1
  74. package/dist/client/assets/workspace._workspaceId.index-CNjq1nDf.js +1 -0
  75. package/dist/client/assets/{workspace._workspaceId.terminal-BeG77FAq.js → workspace._workspaceId.terminal-DhYn8I5t.js} +2 -2
  76. package/dist/client/assets/{xychartDiagram-PRI3JC2R-DjUMVf0W.js → xychartDiagram-PRI3JC2R-Cr18I3A3.js} +1 -1
  77. package/dist/openapi.json +17 -12
  78. package/dist/server/assets/DockviewBrowserContainer-Bm7ARaqd.js +1934 -0
  79. package/dist/server/assets/{DockviewTerminalContainer-Dl-H-7q5.js → DockviewTerminalContainer-BbMZgBJ8.js} +32 -3
  80. package/dist/server/assets/{TerminalPanel-Nx4CmvlW.js → TerminalPanel-BmhYCf33.js} +1 -1
  81. package/dist/server/assets/{_basePickBy-BG2OhlJc.js → _basePickBy-C7CNOUDi.js} +2 -2
  82. package/dist/server/assets/{_baseUniq-DB6mvOCI.js → _baseUniq-DeF47vVO.js} +1 -1
  83. package/dist/server/assets/{_tanstack-start-manifest_v-2XlZMknZ.js → _tanstack-start-manifest_v-BNCQ-izx.js} +1 -1
  84. package/dist/server/assets/{arc-DaVwrLrM.js → arc-P5FY7IYH.js} +1 -1
  85. package/dist/server/assets/{architecture-7HQA4BMR-DIi4TM4E.js → architecture-7HQA4BMR-LvprLHYS.js} +6 -6
  86. package/dist/server/assets/{architectureDiagram-VXUJARFQ-DBRmPh1t.js → architectureDiagram-VXUJARFQ-Br4iiUzH.js} +6 -6
  87. package/dist/server/assets/{blockDiagram-VD42YOAC-CFdPLnD-.js → blockDiagram-VD42YOAC-BahODDhX.js} +6 -6
  88. package/dist/server/assets/{c4Diagram-YG6GDRKO-BJi6gbIt.js → c4Diagram-YG6GDRKO-CQcZX6cr.js} +2 -2
  89. package/dist/server/assets/{channel-DkntTxx0.js → channel-BmAB_ZKU.js} +1 -1
  90. package/dist/server/assets/{chunk-4BX2VUAB-D2FiW3aP.js → chunk-4BX2VUAB-YUvszr4w.js} +1 -1
  91. package/dist/server/assets/{chunk-55IACEB6-jZmh1Z5I.js → chunk-55IACEB6-BUgBPiJd.js} +1 -1
  92. package/dist/server/assets/{chunk-B4BG7PRW-CNZgnxgA.js → chunk-B4BG7PRW-BxuWeZlV.js} +4 -4
  93. package/dist/server/assets/{chunk-DI55MBZ5-q0pODS0a.js → chunk-DI55MBZ5-DuGkdvte.js} +3 -3
  94. package/dist/server/assets/{chunk-FMBD7UC4-C96aN_Us.js → chunk-FMBD7UC4-qY-BVG34.js} +1 -1
  95. package/dist/server/assets/{chunk-QN33PNHL-Dam5gy0m.js → chunk-QN33PNHL-BM_oi8-e.js} +1 -1
  96. package/dist/server/assets/{chunk-QZHKN3VN-CXCmBbbu.js → chunk-QZHKN3VN-BL6_-at8.js} +1 -1
  97. package/dist/server/assets/{chunk-TZMSLE5B-CbK3gIHb.js → chunk-TZMSLE5B-38NhX5at.js} +1 -1
  98. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-BHB2vhDs.js → classDiagram-2ON5EDUG-CwIsZ53p.js} +5 -5
  99. package/dist/server/assets/{classDiagram-2ON5EDUG-BHB2vhDs.js → classDiagram-v2-WZHVMYZB-CwIsZ53p.js} +5 -5
  100. package/dist/server/assets/{clone-CN5lfg2Z.js → clone-BXHuGM8i.js} +1 -1
  101. package/dist/server/assets/{cose-bilkent-S5V4N54A-Bq-O80sc.js → cose-bilkent-S5V4N54A-D1CdgGvI.js} +1 -1
  102. package/dist/server/assets/{dagre-6UL2VRFP-U80sNC8f.js → dagre-6UL2VRFP-UMvdMLG3.js} +6 -6
  103. package/dist/server/assets/{diagram-PSM6KHXK-5ksUDb2Z.js → diagram-PSM6KHXK-DtOD93m7.js} +7 -7
  104. package/dist/server/assets/{diagram-QEK2KX5R-COmUOoRU.js → diagram-QEK2KX5R-DViyYq-y.js} +6 -6
  105. package/dist/server/assets/{diagram-S2PKOQOG-BOTznhFu.js → diagram-S2PKOQOG-C42mRVEn.js} +6 -6
  106. package/dist/server/assets/{erDiagram-Q2GNP2WA-CZOlCzBi.js → erDiagram-Q2GNP2WA-D14z9IvB.js} +4 -4
  107. package/dist/server/assets/{flowDiagram-NV44I4VS-ObYcdqyZ.js → flowDiagram-NV44I4VS-BYBNOZwM.js} +5 -5
  108. package/dist/server/assets/{ganttDiagram-JELNMOA3-6c9A3Tfv.js → ganttDiagram-JELNMOA3-CaG3uoK-.js} +2 -2
  109. package/dist/server/assets/{gitGraph-G5XIXVHT-Q_zXZbiJ.js → gitGraph-G5XIXVHT-Dsx3dV0R.js} +6 -6
  110. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-C-GqaejI.js → gitGraphDiagram-V2S2FVAM-CrSfx7b3.js} +7 -7
  111. package/dist/server/assets/{graph-CGXsNa6T.js → graph-gBFInK6H.js} +2 -2
  112. package/dist/server/assets/{highlighted-body-B3W2YXNL-CjyCfwez.js → highlighted-body-B3W2YXNL-DjTWk17l.js} +1 -1
  113. package/dist/server/assets/{index-BaYLnq50.js → index-2gWBdIrR.js} +2 -2
  114. package/dist/server/assets/{index-CAfRymUE.js → index-3wtbr7va.js} +3 -3
  115. package/dist/server/assets/{index-C0kihLnk.js → index-5N2Gh0ba.js} +2 -2
  116. package/dist/server/assets/{index-DIdSfU9-.js → index-6Zof9vm8.js} +1 -1
  117. package/dist/server/assets/{index-DIahp6rS.js → index-B84Urg23.js} +2 -2
  118. package/dist/server/assets/{index-D_0vKELK.js → index-Bd5jTryJ.js} +2 -2
  119. package/dist/server/assets/{index-BBvVnzgd.js → index-Bs6a6-xI.js} +5 -5
  120. package/dist/server/assets/{index-DnWmaxai.js → index-Bw42FDwO.js} +2 -2
  121. package/dist/server/assets/{index-DKtCHZcS.js → index-C245EJn1.js} +2 -2
  122. package/dist/server/assets/{index-C-7vS9m8.js → index-C3N_Nx6h.js} +2 -2
  123. package/dist/server/assets/{index-DU_XVqOC.js → index-CD97pPmc.js} +1 -1
  124. package/dist/server/assets/{index-BfyUYDbk.js → index-CwQ5qWPC.js} +5 -5
  125. package/dist/server/assets/{index-C71uG8NB.js → index-DXgP0Lsu.js} +2 -2
  126. package/dist/server/assets/{index-CxSyZwen.js → index-DZZ6NiTf.js} +3 -3
  127. package/dist/server/assets/{index-DejplVdQ.js → index-DsGPaWHg.js} +2 -2
  128. package/dist/server/assets/{index-73YfcfUk.js → index-Dv-16VYI.js} +2 -2
  129. package/dist/server/assets/{index-B3U9PRLr.js → index-QxgXX0fb.js} +2 -2
  130. package/dist/server/assets/{index-ukALXr65.js → index-egmIrLx2.js} +4 -4
  131. package/dist/server/assets/{info-VBDWY6EO-BsWgc-Ym.js → info-VBDWY6EO-CueOsYFZ.js} +6 -6
  132. package/dist/server/assets/{infoDiagram-HS3SLOUP-C04udjz-.js → infoDiagram-HS3SLOUP-CeyMzohL.js} +5 -5
  133. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-D3MBfJwF.js → journeyDiagram-XKPGCS4Q-ANqeM_TM.js} +4 -4
  134. package/dist/server/assets/{kanban-definition-3W4ZIXB7-Czuz4I_Q.js → kanban-definition-3W4ZIXB7-B0RkH45q.js} +2 -2
  135. package/dist/server/assets/{layout-D6n2z2ff.js → layout-JjP5jdu6.js} +4 -4
  136. package/dist/server/assets/{linear-BDP9KC1O.js → linear-BJgoq5J4.js} +1 -1
  137. package/dist/server/assets/{mermaid-3ZIDBTTL-oS_2f_Id.js → mermaid-3ZIDBTTL-CFPuUseQ.js} +1 -1
  138. package/dist/server/assets/{mermaid-parser.core-DRwka5gl.js → mermaid-parser.core-CKKZ1VFr.js} +11 -11
  139. package/dist/server/assets/{mindmap-definition-VGOIOE7T-BPhhfr5z.js → mindmap-definition-VGOIOE7T-DlEXF5z8.js} +3 -3
  140. package/dist/server/assets/{packet-DYOGHKS2-XJIQk327.js → packet-DYOGHKS2-CvyxHTRM.js} +6 -6
  141. package/dist/server/assets/{pie-VRWISCQL-BEbH9jgO.js → pie-VRWISCQL-DfpVZlpC.js} +6 -6
  142. package/dist/server/assets/{pieDiagram-ADFJNKIX-oLEFnRFT.js → pieDiagram-ADFJNKIX-CWkrHsNk.js} +7 -7
  143. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-nsrtyikJ.js → quadrantDiagram-AYHSOK5B-C25p2xz7.js} +2 -2
  144. package/dist/server/assets/{radar-ZZBFDIW7-XJaR0sVv.js → radar-ZZBFDIW7-DWqPsDMi.js} +6 -6
  145. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-CHkWIv3O.js → requirementDiagram-UZGBJVZJ-ACRVXQGO.js} +3 -3
  146. package/dist/server/assets/{router-DqGeMR0F.js → router-GhGSLKfP.js} +415 -2225
  147. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-XynupQoy.js → sankeyDiagram-TZEHDZUN-uzNSHudY.js} +1 -1
  148. package/dist/server/assets/{sequenceDiagram-WL72ISMW-Cnkmy2xq.js → sequenceDiagram-WL72ISMW-C_wFtq8b.js} +3 -3
  149. package/dist/server/assets/{square-terminal-D7AxF9nB.js → square-terminal-cghvb5Il.js} +1 -1
  150. package/dist/server/assets/{stateDiagram-FKZM4ZOC-Chk4nsf_.js → stateDiagram-FKZM4ZOC-B9MGwsuS.js} +8 -8
  151. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-DNIM2ODr.js → stateDiagram-v2-4FDKWEC3-CLHd8oUa.js} +4 -4
  152. package/dist/server/assets/{timeline-definition-IT6M3QCI-Fz2nlxYj.js → timeline-definition-IT6M3QCI-CqKot5RT.js} +2 -2
  153. package/dist/server/assets/{treemap-GDKQZRPO-DNxd_7q0.js → treemap-GDKQZRPO-mMRojqRQ.js} +6 -6
  154. package/dist/server/assets/{workspace._workspaceId-KoR0msx0.js → workspace._workspaceId-DwsRTXCg.js} +2 -2
  155. package/dist/server/assets/{workspace._workspaceId.changes-BJoSmFXW.js → workspace._workspaceId.changes-C6vwSbUh.js} +1 -1
  156. package/dist/server/assets/{workspace._workspaceId.code._-D3Ifnqrr.js → workspace._workspaceId.code._-BJdg1-Gs.js} +1 -1
  157. package/dist/server/assets/{workspace._workspaceId.code.index-DZZZQ6sT.js → workspace._workspaceId.code.index-CE_CMD_I.js} +1 -1
  158. package/dist/server/assets/{workspace._workspaceId.index-D1ULJxZJ.js → workspace._workspaceId.index-BPhXMwl8.js} +18 -2
  159. package/dist/server/assets/{workspace._workspaceId.terminal-BaKW7ZGQ.js → workspace._workspaceId.terminal-BdVDaWNH.js} +2 -2
  160. package/dist/server/assets/{xychartDiagram-PRI3JC2R-DtoxEUbW.js → xychartDiagram-PRI3JC2R-j8PckQEj.js} +2 -2
  161. package/dist/server/server.js +2 -2
  162. package/dist/start-server.mjs +211 -61
  163. package/package.json +4 -4
  164. package/dist/client/assets/DockviewTerminalContainer-CfWqm1iB.js +0 -2
  165. package/dist/client/assets/_basePickBy-CIXRHkYC.js +0 -1
  166. package/dist/client/assets/channel-DjN8EGMy.js +0 -1
  167. package/dist/client/assets/classDiagram-2ON5EDUG-C3N3Omm0.js +0 -1
  168. package/dist/client/assets/classDiagram-v2-WZHVMYZB-C3N3Omm0.js +0 -1
  169. package/dist/client/assets/clone-Co6N-TQN.js +0 -1
  170. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BCtCzm2C.js +0 -1
  171. package/dist/client/assets/workspace._workspaceId.code-DGeXE4KO.js +0 -1
  172. package/dist/client/assets/workspace._workspaceId.index-DUzba27e.js +0 -1
@@ -1093,44 +1093,44 @@ const createLucideIcon = (iconName, iconNode) => {
1093
1093
  Component.displayName = toPascalCase(iconName);
1094
1094
  return Component;
1095
1095
  };
1096
- const __iconNode$1q = [
1096
+ const __iconNode$1o = [
1097
1097
  ["path", { d: "M12 17V3", key: "1cwfxf" }],
1098
1098
  ["path", { d: "m6 11 6 6 6-6", key: "12ii2o" }],
1099
1099
  ["path", { d: "M19 21H5", key: "150jfl" }]
1100
1100
  ];
1101
- const ArrowDownToLine = createLucideIcon("arrow-down-to-line", __iconNode$1q);
1102
- const __iconNode$1p = [
1101
+ const ArrowDownToLine = createLucideIcon("arrow-down-to-line", __iconNode$1o);
1102
+ const __iconNode$1n = [
1103
1103
  ["path", { d: "M12 5v14", key: "s699le" }],
1104
1104
  ["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
1105
1105
  ];
1106
- const ArrowDown = createLucideIcon("arrow-down", __iconNode$1p);
1107
- const __iconNode$1o = [
1106
+ const ArrowDown = createLucideIcon("arrow-down", __iconNode$1n);
1107
+ const __iconNode$1m = [
1108
1108
  ["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
1109
1109
  ["path", { d: "M19 12H5", key: "x3x0zl" }]
1110
1110
  ];
1111
- const ArrowLeft = createLucideIcon("arrow-left", __iconNode$1o);
1112
- const __iconNode$1n = [
1111
+ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$1m);
1112
+ const __iconNode$1l = [
1113
1113
  ["path", { d: "M5 12h14", key: "1ays0h" }],
1114
1114
  ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
1115
1115
  ];
1116
- const ArrowRight = createLucideIcon("arrow-right", __iconNode$1n);
1117
- const __iconNode$1m = [
1116
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$1l);
1117
+ const __iconNode$1k = [
1118
1118
  ["path", { d: "m18 9-6-6-6 6", key: "kcunyi" }],
1119
1119
  ["path", { d: "M12 3v14", key: "7cf3v8" }],
1120
1120
  ["path", { d: "M5 21h14", key: "11awu3" }]
1121
1121
  ];
1122
- const ArrowUpFromLine = createLucideIcon("arrow-up-from-line", __iconNode$1m);
1123
- const __iconNode$1l = [
1122
+ const ArrowUpFromLine = createLucideIcon("arrow-up-from-line", __iconNode$1k);
1123
+ const __iconNode$1j = [
1124
1124
  ["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
1125
1125
  ["path", { d: "M12 19V5", key: "x0mq9r" }]
1126
1126
  ];
1127
- const ArrowUp = createLucideIcon("arrow-up", __iconNode$1l);
1128
- const __iconNode$1k = [
1127
+ const ArrowUp = createLucideIcon("arrow-up", __iconNode$1j);
1128
+ const __iconNode$1i = [
1129
1129
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1130
1130
  ["path", { d: "M4.929 4.929 19.07 19.071", key: "196cmz" }]
1131
1131
  ];
1132
- const Ban = createLucideIcon("ban", __iconNode$1k);
1133
- const __iconNode$1j = [
1132
+ const Ban = createLucideIcon("ban", __iconNode$1i);
1133
+ const __iconNode$1h = [
1134
1134
  ["path", { d: "M12 8V4H8", key: "hb8ula" }],
1135
1135
  ["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }],
1136
1136
  ["path", { d: "M2 14h2", key: "vft8re" }],
@@ -1138,62 +1138,62 @@ const __iconNode$1j = [
1138
1138
  ["path", { d: "M15 13v2", key: "1xurst" }],
1139
1139
  ["path", { d: "M9 13v2", key: "rq6x2g" }]
1140
1140
  ];
1141
- const Bot = createLucideIcon("bot", __iconNode$1j);
1142
- const __iconNode$1i = [
1141
+ const Bot = createLucideIcon("bot", __iconNode$1h);
1142
+ const __iconNode$1g = [
1143
1143
  ["path", { d: "m2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16", key: "d5nyq2" }],
1144
1144
  ["path", { d: "M22 9v7", key: "pvm9v3" }],
1145
1145
  ["path", { d: "M3.304 13h6.392", key: "1q3zxz" }],
1146
1146
  ["circle", { cx: "18.5", cy: "12.5", r: "3.5", key: "z97x68" }]
1147
1147
  ];
1148
- const CaseSensitive = createLucideIcon("case-sensitive", __iconNode$1i);
1149
- const __iconNode$1h = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
1150
- const Check = createLucideIcon("check", __iconNode$1h);
1151
- const __iconNode$1g = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1152
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$1g);
1153
- const __iconNode$1f = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
1154
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1f);
1155
- const __iconNode$1e = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1156
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$1e);
1157
- const __iconNode$1d = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
1158
- const ChevronUp = createLucideIcon("chevron-up", __iconNode$1d);
1159
- const __iconNode$1c = [
1148
+ const CaseSensitive = createLucideIcon("case-sensitive", __iconNode$1g);
1149
+ const __iconNode$1f = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
1150
+ const Check = createLucideIcon("check", __iconNode$1f);
1151
+ const __iconNode$1e = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1152
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$1e);
1153
+ const __iconNode$1d = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
1154
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1d);
1155
+ const __iconNode$1c = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1156
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$1c);
1157
+ const __iconNode$1b = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
1158
+ const ChevronUp = createLucideIcon("chevron-up", __iconNode$1b);
1159
+ const __iconNode$1a = [
1160
1160
  ["path", { d: "m7 20 5-5 5 5", key: "13a0gw" }],
1161
1161
  ["path", { d: "m7 4 5 5 5-5", key: "1kwcof" }]
1162
1162
  ];
1163
- const ChevronsDownUp = createLucideIcon("chevrons-down-up", __iconNode$1c);
1164
- const __iconNode$1b = [
1163
+ const ChevronsDownUp = createLucideIcon("chevrons-down-up", __iconNode$1a);
1164
+ const __iconNode$19 = [
1165
1165
  ["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
1166
1166
  ["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
1167
1167
  ];
1168
- const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$1b);
1169
- const __iconNode$1a = [
1168
+ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$19);
1169
+ const __iconNode$18 = [
1170
1170
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1171
1171
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
1172
1172
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
1173
1173
  ];
1174
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$1a);
1175
- const __iconNode$19 = [
1174
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$18);
1175
+ const __iconNode$17 = [
1176
1176
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1177
1177
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
1178
1178
  ];
1179
- const CircleCheck = createLucideIcon("circle-check", __iconNode$19);
1180
- const __iconNode$18 = [
1179
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$17);
1180
+ const __iconNode$16 = [
1181
1181
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1182
1182
  ["path", { d: "m15 9-6 6", key: "1uzhvr" }],
1183
1183
  ["path", { d: "m9 9 6 6", key: "z0biqf" }]
1184
1184
  ];
1185
- const CircleX = createLucideIcon("circle-x", __iconNode$18);
1186
- const __iconNode$17 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
1187
- const Circle = createLucideIcon("circle", __iconNode$17);
1188
- const __iconNode$16 = [
1185
+ const CircleX = createLucideIcon("circle-x", __iconNode$16);
1186
+ const __iconNode$15 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
1187
+ const Circle = createLucideIcon("circle", __iconNode$15);
1188
+ const __iconNode$14 = [
1189
1189
  ["path", { d: "M11 14h10", key: "1w8e9d" }],
1190
1190
  ["path", { d: "M16 4h2a2 2 0 0 1 2 2v1.344", key: "1e62lh" }],
1191
1191
  ["path", { d: "m17 18 4-4-4-4", key: "z2g111" }],
1192
1192
  ["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" }],
1193
1193
  ["rect", { x: "8", y: "2", width: "8", height: "4", rx: "1", key: "ublpy" }]
1194
1194
  ];
1195
- const ClipboardPaste = createLucideIcon("clipboard-paste", __iconNode$16);
1196
- const __iconNode$15 = [
1195
+ const ClipboardPaste = createLucideIcon("clipboard-paste", __iconNode$14);
1196
+ const __iconNode$13 = [
1197
1197
  ["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
1198
1198
  [
1199
1199
  "path",
@@ -1203,53 +1203,53 @@ const __iconNode$15 = [
1203
1203
  }
1204
1204
  ]
1205
1205
  ];
1206
- const Clipboard = createLucideIcon("clipboard", __iconNode$15);
1207
- const __iconNode$14 = [
1206
+ const Clipboard = createLucideIcon("clipboard", __iconNode$13);
1207
+ const __iconNode$12 = [
1208
1208
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1209
1209
  ["path", { d: "M12 6v6l4 2", key: "mmk7yg" }]
1210
1210
  ];
1211
- const Clock = createLucideIcon("clock", __iconNode$14);
1212
- const __iconNode$13 = [
1211
+ const Clock = createLucideIcon("clock", __iconNode$12);
1212
+ const __iconNode$11 = [
1213
1213
  ["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
1214
1214
  ["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
1215
1215
  ["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
1216
1216
  ];
1217
- const CodeXml = createLucideIcon("code-xml", __iconNode$13);
1218
- const __iconNode$12 = [
1217
+ const CodeXml = createLucideIcon("code-xml", __iconNode$11);
1218
+ const __iconNode$10 = [
1219
1219
  ["path", { d: "m16 18 6-6-6-6", key: "eg8j8" }],
1220
1220
  ["path", { d: "m8 6-6 6 6 6", key: "ppft3o" }]
1221
1221
  ];
1222
- const Code = createLucideIcon("code", __iconNode$12);
1223
- const __iconNode$11 = [
1222
+ const Code = createLucideIcon("code", __iconNode$10);
1223
+ const __iconNode$$ = [
1224
1224
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1225
1225
  ["path", { d: "M12 3v18", key: "108xh3" }]
1226
1226
  ];
1227
- const Columns2 = createLucideIcon("columns-2", __iconNode$11);
1228
- const __iconNode$10 = [
1227
+ const Columns2 = createLucideIcon("columns-2", __iconNode$$);
1228
+ const __iconNode$_ = [
1229
1229
  [
1230
1230
  "path",
1231
1231
  { 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" }
1232
1232
  ]
1233
1233
  ];
1234
- const Command$1 = createLucideIcon("command", __iconNode$10);
1235
- const __iconNode$$ = [
1234
+ const Command$1 = createLucideIcon("command", __iconNode$_);
1235
+ const __iconNode$Z = [
1236
1236
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
1237
1237
  ["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" }]
1238
1238
  ];
1239
- const Copy = createLucideIcon("copy", __iconNode$$);
1240
- const __iconNode$_ = [
1239
+ const Copy = createLucideIcon("copy", __iconNode$Z);
1240
+ const __iconNode$Y = [
1241
1241
  ["path", { d: "M12 15V3", key: "m9g1x1" }],
1242
1242
  ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
1243
1243
  ["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
1244
1244
  ];
1245
- const Download = createLucideIcon("download", __iconNode$_);
1246
- const __iconNode$Z = [
1245
+ const Download = createLucideIcon("download", __iconNode$Y);
1246
+ const __iconNode$X = [
1247
1247
  ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
1248
1248
  ["circle", { cx: "12", cy: "5", r: "1", key: "gxeob9" }],
1249
1249
  ["circle", { cx: "12", cy: "19", r: "1", key: "lyex9k" }]
1250
1250
  ];
1251
- const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$Z);
1252
- const __iconNode$Y = [
1251
+ const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$X);
1252
+ const __iconNode$W = [
1253
1253
  ["path", { d: "m15 15 6 6", key: "1s409w" }],
1254
1254
  ["path", { d: "m15 9 6-6", key: "ko1vev" }],
1255
1255
  ["path", { d: "M21 16v5h-5", key: "1ck2sf" }],
@@ -1259,14 +1259,14 @@ const __iconNode$Y = [
1259
1259
  ["path", { d: "M3 8V3h5", key: "1ln10m" }],
1260
1260
  ["path", { d: "M9 9 3 3", key: "v551iv" }]
1261
1261
  ];
1262
- const Expand = createLucideIcon("expand", __iconNode$Y);
1263
- const __iconNode$X = [
1262
+ const Expand = createLucideIcon("expand", __iconNode$W);
1263
+ const __iconNode$V = [
1264
1264
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
1265
1265
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
1266
1266
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
1267
1267
  ];
1268
- const ExternalLink$1 = createLucideIcon("external-link", __iconNode$X);
1269
- const __iconNode$W = [
1268
+ const ExternalLink$1 = createLucideIcon("external-link", __iconNode$V);
1269
+ const __iconNode$U = [
1270
1270
  [
1271
1271
  "path",
1272
1272
  {
@@ -1276,8 +1276,8 @@ const __iconNode$W = [
1276
1276
  ],
1277
1277
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
1278
1278
  ];
1279
- const Eye = createLucideIcon("eye", __iconNode$W);
1280
- const __iconNode$V = [
1279
+ const Eye = createLucideIcon("eye", __iconNode$U);
1280
+ const __iconNode$T = [
1281
1281
  [
1282
1282
  "path",
1283
1283
  {
@@ -1288,8 +1288,8 @@ const __iconNode$V = [
1288
1288
  ["path", { d: "M12 9v4", key: "juzpu7" }],
1289
1289
  ["path", { d: "M12 17h.01", key: "p32p05" }]
1290
1290
  ];
1291
- const FileExclamationPoint = createLucideIcon("file-exclamation-point", __iconNode$V);
1292
- const __iconNode$U = [
1291
+ const FileExclamationPoint = createLucideIcon("file-exclamation-point", __iconNode$T);
1292
+ const __iconNode$S = [
1293
1293
  [
1294
1294
  "path",
1295
1295
  {
@@ -1301,8 +1301,8 @@ const __iconNode$U = [
1301
1301
  ["path", { d: "M2 15h10", key: "jfw4w8" }],
1302
1302
  ["path", { d: "m9 18 3-3-3-3", key: "112psh" }]
1303
1303
  ];
1304
- const FileInput = createLucideIcon("file-input", __iconNode$U);
1305
- const __iconNode$T = [
1304
+ const FileInput = createLucideIcon("file-input", __iconNode$S);
1305
+ const __iconNode$R = [
1306
1306
  [
1307
1307
  "path",
1308
1308
  {
@@ -1314,8 +1314,8 @@ const __iconNode$T = [
1314
1314
  ["path", { d: "M9 15h6", key: "cctwl0" }],
1315
1315
  ["path", { d: "M12 18v-6", key: "17g6i2" }]
1316
1316
  ];
1317
- const FilePlus = createLucideIcon("file-plus", __iconNode$T);
1318
- const __iconNode$S = [
1317
+ const FilePlus = createLucideIcon("file-plus", __iconNode$R);
1318
+ const __iconNode$Q = [
1319
1319
  [
1320
1320
  "path",
1321
1321
  {
@@ -1328,8 +1328,8 @@ const __iconNode$S = [
1328
1328
  ["path", { d: "M16 13H8", key: "t4e002" }],
1329
1329
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
1330
1330
  ];
1331
- const FileText = createLucideIcon("file-text", __iconNode$S);
1332
- const __iconNode$R = [
1331
+ const FileText = createLucideIcon("file-text", __iconNode$Q);
1332
+ const __iconNode$P = [
1333
1333
  [
1334
1334
  "path",
1335
1335
  {
@@ -1339,8 +1339,8 @@ const __iconNode$R = [
1339
1339
  ],
1340
1340
  ["path", { d: "M14 2v5a1 1 0 0 0 1 1h5", key: "wfsgrz" }]
1341
1341
  ];
1342
- const File = createLucideIcon("file", __iconNode$R);
1343
- const __iconNode$Q = [
1342
+ const File = createLucideIcon("file", __iconNode$P);
1343
+ const __iconNode$O = [
1344
1344
  [
1345
1345
  "path",
1346
1346
  {
@@ -1349,8 +1349,8 @@ const __iconNode$Q = [
1349
1349
  }
1350
1350
  ]
1351
1351
  ];
1352
- const FolderOpen = createLucideIcon("folder-open", __iconNode$Q);
1353
- const __iconNode$P = [
1352
+ const FolderOpen = createLucideIcon("folder-open", __iconNode$O);
1353
+ const __iconNode$N = [
1354
1354
  ["path", { d: "M12 10v6", key: "1bos4e" }],
1355
1355
  ["path", { d: "M9 13h6", key: "1uhe8q" }],
1356
1356
  [
@@ -1361,8 +1361,8 @@ const __iconNode$P = [
1361
1361
  }
1362
1362
  ]
1363
1363
  ];
1364
- const FolderPlus = createLucideIcon("folder-plus", __iconNode$P);
1365
- const __iconNode$O = [
1364
+ const FolderPlus = createLucideIcon("folder-plus", __iconNode$N);
1365
+ const __iconNode$M = [
1366
1366
  [
1367
1367
  "path",
1368
1368
  {
@@ -1371,8 +1371,8 @@ const __iconNode$O = [
1371
1371
  }
1372
1372
  ]
1373
1373
  ];
1374
- const Folder = createLucideIcon("folder", __iconNode$O);
1375
- const __iconNode$N = [
1374
+ const Folder = createLucideIcon("folder", __iconNode$M);
1375
+ const __iconNode$L = [
1376
1376
  [
1377
1377
  "path",
1378
1378
  {
@@ -1385,39 +1385,39 @@ const __iconNode$N = [
1385
1385
  { 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" }
1386
1386
  ]
1387
1387
  ];
1388
- const Folders = createLucideIcon("folders", __iconNode$N);
1389
- const __iconNode$M = [
1388
+ const Folders = createLucideIcon("folders", __iconNode$L);
1389
+ const __iconNode$K = [
1390
1390
  ["path", { d: "M15 6a9 9 0 0 0-9 9V3", key: "1cii5b" }],
1391
1391
  ["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
1392
1392
  ["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }]
1393
1393
  ];
1394
- const GitBranch = createLucideIcon("git-branch", __iconNode$M);
1395
- const __iconNode$L = [
1394
+ const GitBranch = createLucideIcon("git-branch", __iconNode$K);
1395
+ const __iconNode$J = [
1396
1396
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }],
1397
1397
  ["line", { x1: "3", x2: "9", y1: "12", y2: "12", key: "1dyftd" }],
1398
1398
  ["line", { x1: "15", x2: "21", y1: "12", y2: "12", key: "oup4p8" }]
1399
1399
  ];
1400
- const GitCommitHorizontal = createLucideIcon("git-commit-horizontal", __iconNode$L);
1401
- const __iconNode$K = [
1400
+ const GitCommitHorizontal = createLucideIcon("git-commit-horizontal", __iconNode$J);
1401
+ const __iconNode$I = [
1402
1402
  ["circle", { cx: "18", cy: "18", r: "3", key: "1xkwt0" }],
1403
1403
  ["circle", { cx: "6", cy: "6", r: "3", key: "1lh9wr" }],
1404
1404
  ["path", { d: "M13 6h3a2 2 0 0 1 2 2v7", key: "1yeb86" }],
1405
1405
  ["path", { d: "M11 18H8a2 2 0 0 1-2-2V9", key: "19pyzm" }]
1406
1406
  ];
1407
- const GitCompare = createLucideIcon("git-compare", __iconNode$K);
1408
- const __iconNode$J = [
1407
+ const GitCompare = createLucideIcon("git-compare", __iconNode$I);
1408
+ const __iconNode$H = [
1409
1409
  ["circle", { cx: "18", cy: "18", r: "3", key: "1xkwt0" }],
1410
1410
  ["circle", { cx: "6", cy: "6", r: "3", key: "1lh9wr" }],
1411
1411
  ["path", { d: "M6 21V9a9 9 0 0 0 9 9", key: "7kw0sc" }]
1412
1412
  ];
1413
- const GitMerge = createLucideIcon("git-merge", __iconNode$J);
1414
- const __iconNode$I = [
1413
+ const GitMerge = createLucideIcon("git-merge", __iconNode$H);
1414
+ const __iconNode$G = [
1415
1415
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1416
1416
  ["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
1417
1417
  ["path", { d: "M2 12h20", key: "9i4pu4" }]
1418
1418
  ];
1419
- const Globe = createLucideIcon("globe", __iconNode$I);
1420
- const __iconNode$H = [
1419
+ const Globe = createLucideIcon("globe", __iconNode$G);
1420
+ const __iconNode$F = [
1421
1421
  ["circle", { cx: "12", cy: "9", r: "1", key: "124mty" }],
1422
1422
  ["circle", { cx: "19", cy: "9", r: "1", key: "1ruzo2" }],
1423
1423
  ["circle", { cx: "5", cy: "9", r: "1", key: "1a8b28" }],
@@ -1425,14 +1425,8 @@ const __iconNode$H = [
1425
1425
  ["circle", { cx: "19", cy: "15", r: "1", key: "1a92ep" }],
1426
1426
  ["circle", { cx: "5", cy: "15", r: "1", key: "5r1jwy" }]
1427
1427
  ];
1428
- const GripHorizontal = createLucideIcon("grip-horizontal", __iconNode$H);
1429
- const __iconNode$G = [
1430
- ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
1431
- ["path", { d: "M3 3v5h5", key: "1xhq8a" }],
1432
- ["path", { d: "M12 7v5l4 2", key: "1fdv2h" }]
1433
- ];
1434
- const History = createLucideIcon("history", __iconNode$G);
1435
- const __iconNode$F = [
1428
+ const GripHorizontal = createLucideIcon("grip-horizontal", __iconNode$F);
1429
+ const __iconNode$E = [
1436
1430
  ["line", { x1: "2", x2: "22", y1: "2", y2: "22", key: "a6p6uj" }],
1437
1431
  ["path", { d: "M10.41 10.41a2 2 0 1 1-2.83-2.83", key: "1bzlo9" }],
1438
1432
  ["line", { x1: "13.5", x2: "6", y1: "13.5", y2: "21", key: "1q0aeu" }],
@@ -1446,31 +1440,31 @@ const __iconNode$F = [
1446
1440
  ],
1447
1441
  ["path", { d: "M21 15V5a2 2 0 0 0-2-2H9", key: "43el77" }]
1448
1442
  ];
1449
- const ImageOff = createLucideIcon("image-off", __iconNode$F);
1450
- const __iconNode$E = [
1443
+ const ImageOff = createLucideIcon("image-off", __iconNode$E);
1444
+ const __iconNode$D = [
1451
1445
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1452
1446
  ["path", { d: "M12 16v-4", key: "1dtifu" }],
1453
1447
  ["path", { d: "M12 8h.01", key: "e9boi3" }]
1454
1448
  ];
1455
- const Info$1 = createLucideIcon("info", __iconNode$E);
1456
- const __iconNode$D = [
1449
+ const Info$1 = createLucideIcon("info", __iconNode$D);
1450
+ const __iconNode$C = [
1457
1451
  ["path", { d: "M16 5H3", key: "m91uny" }],
1458
1452
  ["path", { d: "M11 12H3", key: "51ecnj" }],
1459
1453
  ["path", { d: "M16 19H3", key: "zzsher" }],
1460
1454
  ["path", { d: "M21 12h-6", key: "bt1uis" }]
1461
1455
  ];
1462
- const ListMinus = createLucideIcon("list-minus", __iconNode$D);
1463
- const __iconNode$C = [
1456
+ const ListMinus = createLucideIcon("list-minus", __iconNode$C);
1457
+ const __iconNode$B = [
1464
1458
  ["path", { d: "M13 5h8", key: "a7qcls" }],
1465
1459
  ["path", { d: "M13 12h8", key: "h98zly" }],
1466
1460
  ["path", { d: "M13 19h8", key: "c3s6r1" }],
1467
1461
  ["path", { d: "m3 17 2 2 4-4", key: "1jhpwq" }],
1468
1462
  ["rect", { x: "3", y: "4", width: "6", height: "6", rx: "1", key: "cif1o7" }]
1469
1463
  ];
1470
- const ListTodo = createLucideIcon("list-todo", __iconNode$C);
1471
- const __iconNode$B = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
1472
- const LoaderCircle = createLucideIcon("loader-circle", __iconNode$B);
1473
- const __iconNode$A = [
1464
+ const ListTodo = createLucideIcon("list-todo", __iconNode$B);
1465
+ const __iconNode$A = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
1466
+ const LoaderCircle = createLucideIcon("loader-circle", __iconNode$A);
1467
+ const __iconNode$z = [
1474
1468
  ["path", { d: "M12 2v4", key: "3427ic" }],
1475
1469
  ["path", { d: "m16.2 7.8 2.9-2.9", key: "r700ao" }],
1476
1470
  ["path", { d: "M18 12h4", key: "wj9ykh" }],
@@ -1480,21 +1474,21 @@ const __iconNode$A = [
1480
1474
  ["path", { d: "M2 12h4", key: "j09sii" }],
1481
1475
  ["path", { d: "m4.9 4.9 2.9 2.9", key: "giyufr" }]
1482
1476
  ];
1483
- const Loader = createLucideIcon("loader", __iconNode$A);
1484
- const __iconNode$z = [
1477
+ const Loader = createLucideIcon("loader", __iconNode$z);
1478
+ const __iconNode$y = [
1485
1479
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
1486
1480
  ["path", { d: "m21 3-7 7", key: "1l2asr" }],
1487
1481
  ["path", { d: "m3 21 7-7", key: "tjx5ai" }],
1488
1482
  ["path", { d: "M9 21H3v-6", key: "wtvkvv" }]
1489
1483
  ];
1490
- const Maximize2 = createLucideIcon("maximize-2", __iconNode$z);
1491
- const __iconNode$y = [
1484
+ const Maximize2 = createLucideIcon("maximize-2", __iconNode$y);
1485
+ const __iconNode$x = [
1492
1486
  ["path", { d: "M4 5h16", key: "1tepv9" }],
1493
1487
  ["path", { d: "M4 12h16", key: "1lakjw" }],
1494
1488
  ["path", { d: "M4 19h16", key: "1djgab" }]
1495
1489
  ];
1496
- const Menu$1 = createLucideIcon("menu", __iconNode$y);
1497
- const __iconNode$x = [
1490
+ const Menu$1 = createLucideIcon("menu", __iconNode$x);
1491
+ const __iconNode$w = [
1498
1492
  [
1499
1493
  "path",
1500
1494
  {
@@ -1503,25 +1497,25 @@ const __iconNode$x = [
1503
1497
  }
1504
1498
  ]
1505
1499
  ];
1506
- const MessageSquare = createLucideIcon("message-square", __iconNode$x);
1507
- const __iconNode$w = [
1500
+ const MessageSquare = createLucideIcon("message-square", __iconNode$w);
1501
+ const __iconNode$v = [
1508
1502
  ["path", { d: "m14 10 7-7", key: "oa77jy" }],
1509
1503
  ["path", { d: "M20 10h-6V4", key: "mjg0md" }],
1510
1504
  ["path", { d: "m3 21 7-7", key: "tjx5ai" }],
1511
1505
  ["path", { d: "M4 14h6v6", key: "rmj7iw" }]
1512
1506
  ];
1513
- const Minimize2 = createLucideIcon("minimize-2", __iconNode$w);
1514
- const __iconNode$v = [
1507
+ const Minimize2 = createLucideIcon("minimize-2", __iconNode$v);
1508
+ const __iconNode$u = [
1515
1509
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1516
1510
  ["path", { d: "M9 3v18", key: "fh3hqa" }]
1517
1511
  ];
1518
- const PanelLeft = createLucideIcon("panel-left", __iconNode$v);
1519
- const __iconNode$u = [
1512
+ const PanelLeft = createLucideIcon("panel-left", __iconNode$u);
1513
+ const __iconNode$t = [
1520
1514
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1521
1515
  ["path", { d: "M3 9h18", key: "1pudct" }]
1522
1516
  ];
1523
- const PanelTop = createLucideIcon("panel-top", __iconNode$u);
1524
- const __iconNode$t = [
1517
+ const PanelTop = createLucideIcon("panel-top", __iconNode$t);
1518
+ const __iconNode$s = [
1525
1519
  [
1526
1520
  "path",
1527
1521
  {
@@ -1530,8 +1524,8 @@ const __iconNode$t = [
1530
1524
  }
1531
1525
  ]
1532
1526
  ];
1533
- const Paperclip = createLucideIcon("paperclip", __iconNode$t);
1534
- const __iconNode$s = [
1527
+ const Paperclip = createLucideIcon("paperclip", __iconNode$s);
1528
+ const __iconNode$r = [
1535
1529
  [
1536
1530
  "path",
1537
1531
  {
@@ -1541,8 +1535,8 @@ const __iconNode$s = [
1541
1535
  ],
1542
1536
  ["path", { d: "m15 5 4 4", key: "1mk7zo" }]
1543
1537
  ];
1544
- const Pencil = createLucideIcon("pencil", __iconNode$s);
1545
- const __iconNode$r = [
1538
+ const Pencil = createLucideIcon("pencil", __iconNode$r);
1539
+ const __iconNode$q = [
1546
1540
  ["path", { d: "M12 17v5", key: "bb1du9" }],
1547
1541
  ["path", { d: "M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89", key: "znwnzq" }],
1548
1542
  ["path", { d: "m2 2 20 20", key: "1ooewy" }],
@@ -1554,8 +1548,8 @@ const __iconNode$r = [
1554
1548
  }
1555
1549
  ]
1556
1550
  ];
1557
- const PinOff = createLucideIcon("pin-off", __iconNode$r);
1558
- const __iconNode$q = [
1551
+ const PinOff = createLucideIcon("pin-off", __iconNode$q);
1552
+ const __iconNode$p = [
1559
1553
  ["path", { d: "M12 17v5", key: "bb1du9" }],
1560
1554
  [
1561
1555
  "path",
@@ -1565,8 +1559,8 @@ const __iconNode$q = [
1565
1559
  }
1566
1560
  ]
1567
1561
  ];
1568
- const Pin = createLucideIcon("pin", __iconNode$q);
1569
- const __iconNode$p = [
1562
+ const Pin = createLucideIcon("pin", __iconNode$p);
1563
+ const __iconNode$o = [
1570
1564
  [
1571
1565
  "path",
1572
1566
  {
@@ -1575,20 +1569,20 @@ const __iconNode$p = [
1575
1569
  }
1576
1570
  ]
1577
1571
  ];
1578
- const Play = createLucideIcon("play", __iconNode$p);
1579
- const __iconNode$o = [
1572
+ const Play = createLucideIcon("play", __iconNode$o);
1573
+ const __iconNode$n = [
1580
1574
  ["path", { d: "M5 12h14", key: "1ays0h" }],
1581
1575
  ["path", { d: "M12 5v14", key: "s699le" }]
1582
1576
  ];
1583
- const Plus = createLucideIcon("plus", __iconNode$o);
1584
- const __iconNode$n = [
1577
+ const Plus = createLucideIcon("plus", __iconNode$n);
1578
+ const __iconNode$m = [
1585
1579
  ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
1586
1580
  ["path", { d: "M21 3v5h-5", key: "1q7to0" }],
1587
1581
  ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }],
1588
1582
  ["path", { d: "M8 16H3v5", key: "1cv678" }]
1589
1583
  ];
1590
- const RefreshCw = createLucideIcon("refresh-cw", __iconNode$n);
1591
- const __iconNode$m = [
1584
+ const RefreshCw = createLucideIcon("refresh-cw", __iconNode$m);
1585
+ const __iconNode$l = [
1592
1586
  ["path", { d: "M17 3v10", key: "15fgeh" }],
1593
1587
  ["path", { d: "m12.67 5.5 8.66 5", key: "1gpheq" }],
1594
1588
  ["path", { d: "m12.67 10.5 8.66-5", key: "1dkfa6" }],
@@ -1597,23 +1591,23 @@ const __iconNode$m = [
1597
1591
  { d: "M9 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2v-2z", key: "swwfx4" }
1598
1592
  ]
1599
1593
  ];
1600
- const Regex = createLucideIcon("regex", __iconNode$m);
1601
- const __iconNode$l = [
1594
+ const Regex = createLucideIcon("regex", __iconNode$l);
1595
+ const __iconNode$k = [
1602
1596
  ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
1603
1597
  ["path", { d: "M3 3v5h5", key: "1xhq8a" }]
1604
1598
  ];
1605
- const RotateCcw = createLucideIcon("rotate-ccw", __iconNode$l);
1606
- const __iconNode$k = [
1599
+ const RotateCcw = createLucideIcon("rotate-ccw", __iconNode$k);
1600
+ const __iconNode$j = [
1607
1601
  ["path", { d: "M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8", key: "1p45f6" }],
1608
1602
  ["path", { d: "M21 3v5h-5", key: "1q7to0" }]
1609
1603
  ];
1610
- const RotateCw = createLucideIcon("rotate-cw", __iconNode$k);
1611
- const __iconNode$j = [
1604
+ const RotateCw = createLucideIcon("rotate-cw", __iconNode$j);
1605
+ const __iconNode$i = [
1612
1606
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1613
1607
  ["path", { d: "M3 12h18", key: "1i2n21" }]
1614
1608
  ];
1615
- const Rows2 = createLucideIcon("rows-2", __iconNode$j);
1616
- const __iconNode$i = [
1609
+ const Rows2 = createLucideIcon("rows-2", __iconNode$i);
1610
+ const __iconNode$h = [
1617
1611
  [
1618
1612
  "path",
1619
1613
  {
@@ -1624,16 +1618,16 @@ const __iconNode$i = [
1624
1618
  ["path", { d: "M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7", key: "1ydtos" }],
1625
1619
  ["path", { d: "M7 3v4a1 1 0 0 0 1 1h7", key: "t51u73" }]
1626
1620
  ];
1627
- const Save = createLucideIcon("save", __iconNode$i);
1628
- const __iconNode$h = [
1621
+ const Save = createLucideIcon("save", __iconNode$h);
1622
+ const __iconNode$g = [
1629
1623
  ["circle", { cx: "6", cy: "6", r: "3", key: "1lh9wr" }],
1630
1624
  ["path", { d: "M8.12 8.12 12 12", key: "1alkpv" }],
1631
1625
  ["path", { d: "M20 4 8.12 15.88", key: "xgtan2" }],
1632
1626
  ["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }],
1633
1627
  ["path", { d: "M14.8 14.8 20 20", key: "ptml3r" }]
1634
1628
  ];
1635
- const Scissors = createLucideIcon("scissors", __iconNode$h);
1636
- const __iconNode$g = [
1629
+ const Scissors = createLucideIcon("scissors", __iconNode$g);
1630
+ const __iconNode$f = [
1637
1631
  ["path", { d: "M15 12h-5", key: "r7krc0" }],
1638
1632
  ["path", { d: "M15 8h-5", key: "1khuty" }],
1639
1633
  ["path", { d: "M19 17V5a2 2 0 0 0-2-2H4", key: "zz82l3" }],
@@ -1645,13 +1639,13 @@ const __iconNode$g = [
1645
1639
  }
1646
1640
  ]
1647
1641
  ];
1648
- const ScrollText = createLucideIcon("scroll-text", __iconNode$g);
1649
- const __iconNode$f = [
1642
+ const ScrollText = createLucideIcon("scroll-text", __iconNode$f);
1643
+ const __iconNode$e = [
1650
1644
  ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
1651
1645
  ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
1652
1646
  ];
1653
- const Search = createLucideIcon("search", __iconNode$f);
1654
- const __iconNode$e = [
1647
+ const Search = createLucideIcon("search", __iconNode$e);
1648
+ const __iconNode$d = [
1655
1649
  [
1656
1650
  "path",
1657
1651
  {
@@ -1661,8 +1655,8 @@ const __iconNode$e = [
1661
1655
  ],
1662
1656
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
1663
1657
  ];
1664
- const Settings$1 = createLucideIcon("settings", __iconNode$e);
1665
- const __iconNode$d = [
1658
+ const Settings$1 = createLucideIcon("settings", __iconNode$d);
1659
+ const __iconNode$c = [
1666
1660
  [
1667
1661
  "path",
1668
1662
  {
@@ -1674,18 +1668,18 @@ const __iconNode$d = [
1674
1668
  ["path", { d: "M22 4h-4", key: "gwowj6" }],
1675
1669
  ["circle", { cx: "4", cy: "20", r: "2", key: "6kqj1y" }]
1676
1670
  ];
1677
- const Sparkles = createLucideIcon("sparkles", __iconNode$d);
1678
- const __iconNode$c = [
1671
+ const Sparkles = createLucideIcon("sparkles", __iconNode$c);
1672
+ const __iconNode$b = [
1679
1673
  ["path", { d: "M21 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h6", key: "y09zxi" }],
1680
1674
  ["path", { d: "m21 3-9 9", key: "mpx6sq" }],
1681
1675
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }]
1682
1676
  ];
1683
- const SquareArrowOutUpRight = createLucideIcon("square-arrow-out-up-right", __iconNode$c);
1684
- const __iconNode$b = [
1677
+ const SquareArrowOutUpRight = createLucideIcon("square-arrow-out-up-right", __iconNode$b);
1678
+ const __iconNode$a = [
1685
1679
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }]
1686
1680
  ];
1687
- const Square = createLucideIcon("square", __iconNode$b);
1688
- const __iconNode$a = [
1681
+ const Square = createLucideIcon("square", __iconNode$a);
1682
+ const __iconNode$9 = [
1689
1683
  [
1690
1684
  "path",
1691
1685
  {
@@ -1695,35 +1689,35 @@ const __iconNode$a = [
1695
1689
  ],
1696
1690
  ["circle", { cx: "7.5", cy: "7.5", r: ".5", fill: "currentColor", key: "kqv944" }]
1697
1691
  ];
1698
- const Tag$1 = createLucideIcon("tag", __iconNode$a);
1699
- const __iconNode$9 = [
1692
+ const Tag$1 = createLucideIcon("tag", __iconNode$9);
1693
+ const __iconNode$8 = [
1700
1694
  ["path", { d: "M12 19h8", key: "baeox8" }],
1701
1695
  ["path", { d: "m4 17 6-6-6-6", key: "1yngyt" }]
1702
1696
  ];
1703
- const Terminal = createLucideIcon("terminal", __iconNode$9);
1704
- const __iconNode$8 = [
1697
+ const Terminal = createLucideIcon("terminal", __iconNode$8);
1698
+ const __iconNode$7 = [
1705
1699
  ["path", { d: "M21 5H3", key: "1fi0y6" }],
1706
1700
  ["path", { d: "M10 12H3", key: "1ulcyk" }],
1707
1701
  ["path", { d: "M10 19H3", key: "108z41" }],
1708
1702
  ["circle", { cx: "17", cy: "15", r: "3", key: "1upz2a" }],
1709
1703
  ["path", { d: "m21 19-1.9-1.9", key: "dwi7p8" }]
1710
1704
  ];
1711
- const TextSearch = createLucideIcon("text-search", __iconNode$8);
1712
- const __iconNode$7 = [
1705
+ const TextSearch = createLucideIcon("text-search", __iconNode$7);
1706
+ const __iconNode$6 = [
1713
1707
  ["line", { x1: "10", x2: "14", y1: "2", y2: "2", key: "14vaq8" }],
1714
1708
  ["line", { x1: "12", x2: "15", y1: "14", y2: "11", key: "17fdiu" }],
1715
1709
  ["circle", { cx: "12", cy: "14", r: "8", key: "1e1u0o" }]
1716
1710
  ];
1717
- const Timer$1 = createLucideIcon("timer", __iconNode$7);
1718
- const __iconNode$6 = [
1711
+ const Timer$1 = createLucideIcon("timer", __iconNode$6);
1712
+ const __iconNode$5 = [
1719
1713
  ["path", { d: "M10 11v6", key: "nco0om" }],
1720
1714
  ["path", { d: "M14 11v6", key: "outv1u" }],
1721
1715
  ["path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6", key: "miytrc" }],
1722
1716
  ["path", { d: "M3 6h18", key: "d0wm0j" }],
1723
1717
  ["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }]
1724
1718
  ];
1725
- const Trash2 = createLucideIcon("trash-2", __iconNode$6);
1726
- const __iconNode$5 = [
1719
+ const Trash2 = createLucideIcon("trash-2", __iconNode$5);
1720
+ const __iconNode$4 = [
1727
1721
  [
1728
1722
  "path",
1729
1723
  {
@@ -1734,13 +1728,13 @@ const __iconNode$5 = [
1734
1728
  ["path", { d: "M12 9v4", key: "juzpu7" }],
1735
1729
  ["path", { d: "M12 17h.01", key: "p32p05" }]
1736
1730
  ];
1737
- const TriangleAlert = createLucideIcon("triangle-alert", __iconNode$5);
1738
- const __iconNode$4 = [
1731
+ const TriangleAlert = createLucideIcon("triangle-alert", __iconNode$4);
1732
+ const __iconNode$3 = [
1739
1733
  ["path", { d: "M9 14 4 9l5-5", key: "102s5s" }],
1740
1734
  ["path", { d: "M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11", key: "f3b9sd" }]
1741
1735
  ];
1742
- const Undo2 = createLucideIcon("undo-2", __iconNode$4);
1743
- const __iconNode$3 = [
1736
+ const Undo2 = createLucideIcon("undo-2", __iconNode$3);
1737
+ const __iconNode$2 = [
1744
1738
  [
1745
1739
  "path",
1746
1740
  {
@@ -1756,25 +1750,15 @@ const __iconNode$3 = [
1756
1750
  ["path", { d: "M21 16h-4", key: "1cnmox" }],
1757
1751
  ["path", { d: "M11 3H9", key: "1obp7u" }]
1758
1752
  ];
1759
- const WandSparkles = createLucideIcon("wand-sparkles", __iconNode$3);
1760
- const __iconNode$2 = [
1753
+ const WandSparkles = createLucideIcon("wand-sparkles", __iconNode$2);
1754
+ const __iconNode$1 = [
1761
1755
  ["circle", { cx: "7", cy: "12", r: "3", key: "12clwm" }],
1762
1756
  ["path", { d: "M10 9v6", key: "17i7lo" }],
1763
1757
  ["circle", { cx: "17", cy: "12", r: "3", key: "gl7c2s" }],
1764
1758
  ["path", { d: "M14 7v8", key: "dl84cr" }],
1765
1759
  ["path", { d: "M22 17v1c0 .5-.5 1-1 1H3c-.5 0-1-.5-1-1v-1", key: "lt2kga" }]
1766
1760
  ];
1767
- const WholeWord = createLucideIcon("whole-word", __iconNode$2);
1768
- const __iconNode$1 = [
1769
- [
1770
- "path",
1771
- {
1772
- d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",
1773
- key: "1ngwbx"
1774
- }
1775
- ]
1776
- ];
1777
- const Wrench = createLucideIcon("wrench", __iconNode$1);
1761
+ const WholeWord = createLucideIcon("whole-word", __iconNode$1);
1778
1762
  const __iconNode = [
1779
1763
  ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
1780
1764
  ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
@@ -40516,53 +40500,53 @@ async function loadLanguage(lang) {
40516
40500
  try {
40517
40501
  switch (lang) {
40518
40502
  case "javascript":
40519
- return import("./index-B3U9PRLr.js").then((m2) => m2.javascript());
40503
+ return import("./index-QxgXX0fb.js").then((m2) => m2.javascript());
40520
40504
  case "jsx":
40521
- return import("./index-B3U9PRLr.js").then((m2) => m2.javascript({ jsx: true }));
40505
+ return import("./index-QxgXX0fb.js").then((m2) => m2.javascript({ jsx: true }));
40522
40506
  case "typescript":
40523
- return import("./index-B3U9PRLr.js").then(
40507
+ return import("./index-QxgXX0fb.js").then(
40524
40508
  (m2) => m2.javascript({ typescript: true })
40525
40509
  );
40526
40510
  case "tsx":
40527
- return import("./index-B3U9PRLr.js").then(
40511
+ return import("./index-QxgXX0fb.js").then(
40528
40512
  (m2) => m2.javascript({ jsx: true, typescript: true })
40529
40513
  );
40530
40514
  case "python":
40531
- return import("./index-DejplVdQ.js").then((m2) => m2.python());
40515
+ return import("./index-DsGPaWHg.js").then((m2) => m2.python());
40532
40516
  case "html":
40533
- return import("./index-ukALXr65.js").then((m2) => m2.html());
40517
+ return import("./index-egmIrLx2.js").then((m2) => m2.html());
40534
40518
  case "css":
40535
- return import("./index-DKtCHZcS.js").then((m2) => m2.css());
40519
+ return import("./index-C245EJn1.js").then((m2) => m2.css());
40536
40520
  case "scss":
40537
40521
  case "sass":
40538
- return import("./index-CAfRymUE.js").then((m2) => m2.sass());
40522
+ return import("./index-3wtbr7va.js").then((m2) => m2.sass());
40539
40523
  case "less":
40540
- return import("./index-CxSyZwen.js").then((m2) => m2.less());
40524
+ return import("./index-DZZ6NiTf.js").then((m2) => m2.less());
40541
40525
  case "json":
40542
40526
  case "jsonc":
40543
- return import("./index-C71uG8NB.js").then((m2) => m2.json());
40527
+ return import("./index-DXgP0Lsu.js").then((m2) => m2.json());
40544
40528
  case "markdown":
40545
40529
  case "mdx":
40546
- return import("./index-BBvVnzgd.js").then((m2) => m2.markdown());
40530
+ return import("./index-Bs6a6-xI.js").then((m2) => m2.markdown());
40547
40531
  case "xml":
40548
- return import("./index-C0kihLnk.js").then((m2) => m2.xml());
40532
+ return import("./index-5N2Gh0ba.js").then((m2) => m2.xml());
40549
40533
  case "yaml":
40550
- return import("./index-DnWmaxai.js").then((m2) => m2.yaml());
40534
+ return import("./index-Bw42FDwO.js").then((m2) => m2.yaml());
40551
40535
  case "sql":
40552
- return import("./index-73YfcfUk.js").then((m2) => m2.sql());
40536
+ return import("./index-Dv-16VYI.js").then((m2) => m2.sql());
40553
40537
  case "rust":
40554
- return import("./index-C-7vS9m8.js").then((m2) => m2.rust());
40538
+ return import("./index-C3N_Nx6h.js").then((m2) => m2.rust());
40555
40539
  case "go":
40556
- return import("./index-DIahp6rS.js").then((m2) => m2.go());
40540
+ return import("./index-B84Urg23.js").then((m2) => m2.go());
40557
40541
  case "java":
40558
- return import("./index-D_0vKELK.js").then((m2) => m2.java());
40542
+ return import("./index-Bd5jTryJ.js").then((m2) => m2.java());
40559
40543
  case "kotlin":
40560
- return import("./index-D_0vKELK.js").then((m2) => m2.java());
40544
+ return import("./index-Bd5jTryJ.js").then((m2) => m2.java());
40561
40545
  case "c":
40562
40546
  case "cpp":
40563
- return import("./index-BaYLnq50.js").then((m2) => m2.cpp());
40547
+ return import("./index-2gWBdIrR.js").then((m2) => m2.cpp());
40564
40548
  case "php":
40565
- return import("./index-BfyUYDbk.js").then((m2) => m2.php());
40549
+ return import("./index-CwQ5qWPC.js").then((m2) => m2.php());
40566
40550
  // Legacy modes via StreamLanguage
40567
40551
  case "bash":
40568
40552
  case "fish":
@@ -40618,6 +40602,17 @@ async function loadLanguage(lang) {
40618
40602
  }
40619
40603
  }
40620
40604
  function baseViewerExtensions(isDark2 = true, opts) {
40605
+ const naturalHeight = opts?.naturalHeight ?? false;
40606
+ const rootDarkStyles = { fontSize: "13px" };
40607
+ const rootLightStyles = {
40608
+ fontSize: "13px",
40609
+ backgroundColor: "var(--background)"
40610
+ };
40611
+ if (!naturalHeight) {
40612
+ rootDarkStyles.height = "100%";
40613
+ rootLightStyles.height = "100%";
40614
+ }
40615
+ const scrollerStyles = naturalHeight ? { overflow: "visible" } : { overflow: "auto" };
40621
40616
  return [
40622
40617
  EditorState.readOnly.of(true),
40623
40618
  EditorView.editable.of(false),
@@ -40638,8 +40633,8 @@ function baseViewerExtensions(isDark2 = true, opts) {
40638
40633
  // Viewer-specific overrides
40639
40634
  EditorView.theme(
40640
40635
  isDark2 ? {
40641
- "&": { height: "100%", fontSize: "13px" },
40642
- ".cm-scroller": { overflow: "auto" },
40636
+ "&": rootDarkStyles,
40637
+ ".cm-scroller": scrollerStyles,
40643
40638
  ".cm-lineNumbers": { paddingLeft: "12px", paddingRight: "12px" },
40644
40639
  ".cm-activeLineGutter": { backgroundColor: "transparent" },
40645
40640
  ".cm-searchMatch": {
@@ -40650,8 +40645,8 @@ function baseViewerExtensions(isDark2 = true, opts) {
40650
40645
  backgroundColor: "rgba(255, 150, 50, 0.5)"
40651
40646
  }
40652
40647
  } : {
40653
- "&": { height: "100%", fontSize: "13px", backgroundColor: "var(--background)" },
40654
- ".cm-scroller": { overflow: "auto" },
40648
+ "&": rootLightStyles,
40649
+ ".cm-scroller": scrollerStyles,
40655
40650
  ".cm-lineNumbers": { paddingLeft: "12px", paddingRight: "12px" },
40656
40651
  ".cm-gutters": {
40657
40652
  backgroundColor: "var(--background)",
@@ -53972,7 +53967,7 @@ function DiffFileContent({
53972
53967
  a: {
53973
53968
  doc: oldText,
53974
53969
  extensions: [
53975
- ...baseViewerExtensions(isDark2, { skipLineNumbers: true }),
53970
+ ...baseViewerExtensions(isDark2, { skipLineNumbers: true, naturalHeight: true }),
53976
53971
  makeLineNumbers(oldLineNumbers),
53977
53972
  hunkSeparatorExtension(oldHunkBoundaryLines, loadMore),
53978
53973
  selectionToChatExtension(filename, oldLineNumbers),
@@ -53982,7 +53977,7 @@ function DiffFileContent({
53982
53977
  b: {
53983
53978
  doc: newText,
53984
53979
  extensions: [
53985
- ...baseViewerExtensions(isDark2, { skipLineNumbers: true }),
53980
+ ...baseViewerExtensions(isDark2, { skipLineNumbers: true, naturalHeight: true }),
53986
53981
  makeLineNumbers(newLineNumbers),
53987
53982
  hunkSeparatorExtension(newHunkBoundaryLines, loadMore),
53988
53983
  selectionToChatExtension(filename, newLineNumbers),
@@ -53996,7 +53991,7 @@ function DiffFileContent({
53996
53991
  onEditorViewsRef.current?.([viewRef.current.a, viewRef.current.b]);
53997
53992
  } else {
53998
53993
  const extensions = [
53999
- ...baseViewerExtensions(isDark2, { skipLineNumbers: true }),
53994
+ ...baseViewerExtensions(isDark2, { skipLineNumbers: true, naturalHeight: true }),
54000
53995
  makeLineNumbers(newLineNumbers),
54001
53996
  hunkSeparatorExtension(newHunkBoundaryLines, loadMore),
54002
53997
  searchHighlightOnly(),
@@ -54023,7 +54018,11 @@ function DiffFileContent({
54023
54018
  onEditorViewsRef.current?.([viewRef.current]);
54024
54019
  }
54025
54020
  };
54026
- setup();
54021
+ setup().catch((err) => {
54022
+ if (cancelled) return;
54023
+ console.error("[DiffFileContent] editor setup failed", err);
54024
+ onEditorViewsRef.current?.([]);
54025
+ });
54027
54026
  return () => {
54028
54027
  cancelled = true;
54029
54028
  if (viewRef.current) {
@@ -54069,6 +54068,16 @@ function LazyFileRow({
54069
54068
  const containerRef = reactExports.useRef(null);
54070
54069
  const diffBodyRef = reactExports.useRef(null);
54071
54070
  const [shouldMount, setShouldMount] = reactExports.useState(false);
54071
+ const [editorRendered, setEditorRendered] = reactExports.useState(false);
54072
+ const editorRenderRafRef = reactExports.useRef(null);
54073
+ reactExports.useEffect(() => {
54074
+ return () => {
54075
+ if (editorRenderRafRef.current != null) {
54076
+ cancelAnimationFrame(editorRenderRafRef.current);
54077
+ editorRenderRafRef.current = null;
54078
+ }
54079
+ };
54080
+ }, []);
54072
54081
  reactExports.useEffect(() => {
54073
54082
  if (!isOpen) {
54074
54083
  setShouldMount(false);
@@ -54098,7 +54107,7 @@ function LazyFileRow({
54098
54107
  return () => observer.disconnect();
54099
54108
  }, [isOpen, scrollContainerEl]);
54100
54109
  reactExports.useEffect(() => {
54101
- if (!shouldMount || !onMeasureHeight) return;
54110
+ if (!shouldMount || !editorRendered || !onMeasureHeight) return;
54102
54111
  const el = diffBodyRef.current;
54103
54112
  if (!el) return;
54104
54113
  if (typeof ResizeObserver === "undefined") return;
@@ -54123,10 +54132,22 @@ function LazyFileRow({
54123
54132
  if (frame2 != null) cancelAnimationFrame(frame2);
54124
54133
  observer.disconnect();
54125
54134
  };
54126
- }, [shouldMount, filename, onMeasureHeight]);
54135
+ }, [shouldMount, editorRendered, filename, onMeasureHeight]);
54127
54136
  const handleEditorViews = reactExports.useCallback(
54128
54137
  (views) => {
54129
54138
  onEditorViews?.(filename, views);
54139
+ if (editorRenderRafRef.current != null) {
54140
+ cancelAnimationFrame(editorRenderRafRef.current);
54141
+ editorRenderRafRef.current = null;
54142
+ }
54143
+ if (views.length === 0) {
54144
+ setEditorRendered(false);
54145
+ return;
54146
+ }
54147
+ editorRenderRafRef.current = requestAnimationFrame(() => {
54148
+ editorRenderRafRef.current = null;
54149
+ setEditorRendered(true);
54150
+ });
54130
54151
  },
54131
54152
  [filename, onEditorViews]
54132
54153
  );
@@ -54271,27 +54292,48 @@ function LazyFileRow({
54271
54292
  // CodeMirror editor — is reported back as
54272
54293
  // `measuredHeight`, then reused verbatim as the placeholder
54273
54294
  // height on the next unmount cycle.
54274
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: diffBodyRef, children: [
54275
- canLoadMore && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center border-b border-border/20 px-4 py-1.5", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
54276
- "button",
54277
- {
54278
- type: "button",
54279
- onClick: () => onShowFullFile(filename),
54280
- className: "text-xs text-muted-foreground transition-colors hover:text-foreground",
54281
- children: "Show full file"
54282
- }
54283
- ) }),
54284
- /* @__PURE__ */ jsxRuntimeExports.jsx(
54285
- DiffFileContent,
54286
- {
54287
- hunks: diff2,
54288
- filename,
54289
- viewMode,
54290
- onEditorViews: handleEditorViews,
54291
- onLoadMoreContext: canLoadMore ? () => onLoadMoreContext(filename) : void 0
54292
- }
54293
- )
54294
- ] })
54295
+ //
54296
+ // The `minHeight` hold prevents a layout shift during the
54297
+ // window between (a) shouldMount flipping to true and (b)
54298
+ // the editor's async `setup` finishing (loadLanguage await
54299
+ // + new MergeView() + first paint). Without it the wrapper
54300
+ // is empty-auto-height for that window, collapsing the row
54301
+ // to the "Show full file" bar (~30px) and pushing every
54302
+ // row below it upward; when the editor paints they snap
54303
+ // back down. We pin the wrapper to the cached/estimated
54304
+ // height (the same value the placeholder uses) until
54305
+ // `editorRendered` flips, then let the editor's natural
54306
+ // height take over. The ResizeObserver only attaches once
54307
+ // `editorRendered` is true (see deps above), so the held
54308
+ // value never bleeds into the measuredHeight cache.
54309
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
54310
+ "div",
54311
+ {
54312
+ ref: diffBodyRef,
54313
+ style: editorRendered ? void 0 : { minHeight: placeholderHeight },
54314
+ children: [
54315
+ canLoadMore && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center border-b border-border/20 px-4 py-1.5", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
54316
+ "button",
54317
+ {
54318
+ type: "button",
54319
+ onClick: () => onShowFullFile(filename),
54320
+ className: "text-xs text-muted-foreground transition-colors hover:text-foreground",
54321
+ children: "Show full file"
54322
+ }
54323
+ ) }),
54324
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
54325
+ DiffFileContent,
54326
+ {
54327
+ hunks: diff2,
54328
+ filename,
54329
+ viewMode,
54330
+ onEditorViews: handleEditorViews,
54331
+ onLoadMoreContext: canLoadMore ? () => onLoadMoreContext(filename) : void 0
54332
+ }
54333
+ )
54334
+ ]
54335
+ }
54336
+ )
54295
54337
  ) : (
54296
54338
  // Placeholder occupying the SAME pixel height the CodeMirror
54297
54339
  // editor would render at, so the row's overall size doesn't
@@ -82265,19 +82307,19 @@ function useFileTabs(workspaceId) {
82265
82307
  };
82266
82308
  }
82267
82309
  const DESKTOP_QUERY = "(min-width: 1024px)";
82268
- function subscribe$2(cb) {
82310
+ function subscribe(cb) {
82269
82311
  const mql = window.matchMedia(DESKTOP_QUERY);
82270
82312
  mql.addEventListener("change", cb);
82271
82313
  return () => mql.removeEventListener("change", cb);
82272
82314
  }
82273
- function getSnapshot$2() {
82315
+ function getSnapshot() {
82274
82316
  return window.matchMedia(DESKTOP_QUERY).matches;
82275
82317
  }
82276
82318
  function getServerSnapshot() {
82277
82319
  return false;
82278
82320
  }
82279
82321
  function useIsDesktop() {
82280
- return reactExports.useSyncExternalStore(subscribe$2, getSnapshot$2, getServerSnapshot);
82322
+ return reactExports.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
82281
82323
  }
82282
82324
  function storageKey(workspaceId) {
82283
82325
  return `band-tab-state:${workspaceId}`;
@@ -82424,10 +82466,10 @@ function pathInside(parent, child) {
82424
82466
  return child.slice(prefix.length);
82425
82467
  }
82426
82468
  const pending = /* @__PURE__ */ new Map();
82427
- const listeners$3 = /* @__PURE__ */ new Set();
82469
+ const listeners$1 = /* @__PURE__ */ new Set();
82428
82470
  function enqueueExternalOpen(workspaceId, filePath) {
82429
82471
  pending.set(workspaceId, { filePath });
82430
- for (const listener of listeners$3) listener();
82472
+ for (const listener of listeners$1) listener();
82431
82473
  }
82432
82474
  function consumeExternalOpen(workspaceId) {
82433
82475
  const value = pending.get(workspaceId);
@@ -82436,9 +82478,9 @@ function consumeExternalOpen(workspaceId) {
82436
82478
  return value;
82437
82479
  }
82438
82480
  function subscribeExternalOpens(cb) {
82439
- listeners$3.add(cb);
82481
+ listeners$1.add(cb);
82440
82482
  return () => {
82441
- listeners$3.delete(cb);
82483
+ listeners$1.delete(cb);
82442
82484
  };
82443
82485
  }
82444
82486
  function getBasename$1(filePath) {
@@ -108117,7 +108159,7 @@ var tn = f$5("block", "before:content-[counter(line)]", "before:inline-block", "
108117
108159
  var et$1 = ({ className: e2, 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", e2), "data-incomplete": n2 || void 0, "data-language": t2, "data-streamdown": "code-block", style: { contentVisibility: "auto", containIntrinsicSize: "auto 200px", ...o3 }, ...s2 });
108118
108160
  var Se$1 = reactExports.createContext({ code: "" }), de$2 = () => reactExports.useContext(Se$1);
108119
108161
  var ot$1 = ({ language: e2 }) => jsxRuntimeExports.jsx("div", { className: "flex h-8 items-center text-muted-foreground text-xs", "data-language": e2, "data-streamdown": "code-block-header", children: jsxRuntimeExports.jsx("span", { className: "ml-1 font-mono lowercase", children: e2 }) });
108120
- var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-CjyCfwez.js").then((e2) => ({ default: e2.HighlightedCodeBlockBody }))), rt = ({ code: e2, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
108162
+ var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-DjTWk17l.js").then((e2) => ({ default: e2.HighlightedCodeBlockBody }))), rt = ({ code: e2, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
108121
108163
  let i2 = reactExports.useMemo(() => e2.replace(cn, ""), [e2]), c2 = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i2.split(`
108122
108164
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i2]);
108123
108165
  return jsxRuntimeExports.jsx(Se$1.Provider, { value: { code: e2 }, 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 }) })] }) });
@@ -108439,7 +108481,7 @@ var Dt = ({ children: e2, className: t2, onDownload: o3, onError: n2 }) => {
108439
108481
  }, []), 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: e2 != null ? e2 : 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] });
108440
108482
  };
108441
108483
  var Vt = ({ children: e2, className: t2, showControls: o3, ...n2 }) => jsxRuntimeExports.jsxs("div", { className: "my-4 flex flex-col gap-2 rounded-lg border border-border bg-sidebar p-2", "data-streamdown": "table-wrapper", children: [o3 ? jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-end gap-1", children: [jsxRuntimeExports.jsx(Ht, {}), jsxRuntimeExports.jsx(Dt, {})] }) : null, jsxRuntimeExports.jsx("div", { className: "border-collapse overflow-x-auto overscroll-y-auto rounded-md border border-border bg-background", children: jsxRuntimeExports.jsx("table", { className: f$5("w-full divide-y divide-border", t2), "data-streamdown": "table", ...n2, children: e2 }) })] });
108442
- var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-oS_2f_Id.js").then((e2) => ({ default: e2.Mermaid }))), Kn = /language-([^\s]+)/;
108484
+ var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-CFPuUseQ.js").then((e2) => ({ default: e2.Mermaid }))), Kn = /language-([^\s]+)/;
108443
108485
  function ke$1(e2, t2) {
108444
108486
  if (!(e2 != null && e2.position || t2 != null && t2.position)) return true;
108445
108487
  if (!(e2 != null && e2.position && (t2 != null && t2.position))) return false;
@@ -138071,7 +138113,7 @@ const invert = (color2, weight = 100) => {
138071
138113
  const {
138072
138114
  entries,
138073
138115
  setPrototypeOf,
138074
- isFrozen: isFrozen$1,
138116
+ isFrozen,
138075
138117
  getPrototypeOf,
138076
138118
  getOwnPropertyDescriptor
138077
138119
  } = Object;
@@ -138154,7 +138196,7 @@ function addToSet(set2, array2) {
138154
138196
  if (typeof element2 === "string") {
138155
138197
  const lcElement = transformCaseFunc(element2);
138156
138198
  if (lcElement !== element2) {
138157
- if (!isFrozen$1(array2)) {
138199
+ if (!isFrozen(array2)) {
138158
138200
  array2[l4] = lcElement;
138159
138201
  }
138160
138202
  element2 = lcElement;
@@ -158241,12 +158283,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
158241
158283
  registerLayoutLoaders([
158242
158284
  {
158243
158285
  name: "dagre",
158244
- loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-U80sNC8f.js"), "loader")
158286
+ loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-UMvdMLG3.js"), "loader")
158245
158287
  },
158246
158288
  ...[
158247
158289
  {
158248
158290
  name: "cose-bilkent",
158249
- loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-Bq-O80sc.js"), "loader")
158291
+ loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-D1CdgGvI.js"), "loader")
158250
158292
  }
158251
158293
  ]
158252
158294
  ]);
@@ -158685,7 +158727,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
158685
158727
  return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
158686
158728
  }, "detector");
158687
158729
  var loader = /* @__PURE__ */ __name(async () => {
158688
- const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-BJi6gbIt.js");
158730
+ const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-CQcZX6cr.js");
158689
158731
  return { id, diagram: diagram2 };
158690
158732
  }, "loader");
158691
158733
  var plugin = {
@@ -158702,7 +158744,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
158702
158744
  return /^\s*graph/.test(txt);
158703
158745
  }, "detector");
158704
158746
  var loader2 = /* @__PURE__ */ __name(async () => {
158705
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-ObYcdqyZ.js");
158747
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-BYBNOZwM.js");
158706
158748
  return { id: id2, diagram: diagram2 };
158707
158749
  }, "loader");
158708
158750
  var plugin2 = {
@@ -158725,7 +158767,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
158725
158767
  return /^\s*flowchart/.test(txt);
158726
158768
  }, "detector");
158727
158769
  var loader3 = /* @__PURE__ */ __name(async () => {
158728
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-ObYcdqyZ.js");
158770
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-BYBNOZwM.js");
158729
158771
  return { id: id3, diagram: diagram2 };
158730
158772
  }, "loader");
158731
158773
  var plugin3 = {
@@ -158739,7 +158781,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
158739
158781
  return /^\s*erDiagram/.test(txt);
158740
158782
  }, "detector");
158741
158783
  var loader4 = /* @__PURE__ */ __name(async () => {
158742
- const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-CZOlCzBi.js");
158784
+ const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-D14z9IvB.js");
158743
158785
  return { id: id4, diagram: diagram2 };
158744
158786
  }, "loader");
158745
158787
  var plugin4 = {
@@ -158753,7 +158795,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
158753
158795
  return /^\s*gitGraph/.test(txt);
158754
158796
  }, "detector");
158755
158797
  var loader5 = /* @__PURE__ */ __name(async () => {
158756
- const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-C-GqaejI.js");
158798
+ const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-CrSfx7b3.js");
158757
158799
  return { id: id5, diagram: diagram2 };
158758
158800
  }, "loader");
158759
158801
  var plugin5 = {
@@ -158767,7 +158809,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
158767
158809
  return /^\s*gantt/.test(txt);
158768
158810
  }, "detector");
158769
158811
  var loader6 = /* @__PURE__ */ __name(async () => {
158770
- const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-6c9A3Tfv.js");
158812
+ const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-CaG3uoK-.js");
158771
158813
  return { id: id6, diagram: diagram2 };
158772
158814
  }, "loader");
158773
158815
  var plugin6 = {
@@ -158781,7 +158823,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
158781
158823
  return /^\s*info/.test(txt);
158782
158824
  }, "detector");
158783
158825
  var loader7 = /* @__PURE__ */ __name(async () => {
158784
- const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-C04udjz-.js");
158826
+ const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-CeyMzohL.js");
158785
158827
  return { id: id7, diagram: diagram2 };
158786
158828
  }, "loader");
158787
158829
  var info = {
@@ -158794,7 +158836,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
158794
158836
  return /^\s*pie/.test(txt);
158795
158837
  }, "detector");
158796
158838
  var loader8 = /* @__PURE__ */ __name(async () => {
158797
- const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-oLEFnRFT.js");
158839
+ const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-CWkrHsNk.js");
158798
158840
  return { id: id8, diagram: diagram2 };
158799
158841
  }, "loader");
158800
158842
  var pie = {
@@ -158807,7 +158849,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
158807
158849
  return /^\s*quadrantChart/.test(txt);
158808
158850
  }, "detector");
158809
158851
  var loader9 = /* @__PURE__ */ __name(async () => {
158810
- const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-nsrtyikJ.js");
158852
+ const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-C25p2xz7.js");
158811
158853
  return { id: id9, diagram: diagram2 };
158812
158854
  }, "loader");
158813
158855
  var plugin7 = {
@@ -158821,7 +158863,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
158821
158863
  return /^\s*xychart(-beta)?/.test(txt);
158822
158864
  }, "detector");
158823
158865
  var loader10 = /* @__PURE__ */ __name(async () => {
158824
- const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-DtoxEUbW.js");
158866
+ const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-j8PckQEj.js");
158825
158867
  return { id: id10, diagram: diagram2 };
158826
158868
  }, "loader");
158827
158869
  var plugin8 = {
@@ -158835,7 +158877,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
158835
158877
  return /^\s*requirement(Diagram)?/.test(txt);
158836
158878
  }, "detector");
158837
158879
  var loader11 = /* @__PURE__ */ __name(async () => {
158838
- const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-CHkWIv3O.js");
158880
+ const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-ACRVXQGO.js");
158839
158881
  return { id: id11, diagram: diagram2 };
158840
158882
  }, "loader");
158841
158883
  var plugin9 = {
@@ -158849,7 +158891,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
158849
158891
  return /^\s*sequenceDiagram/.test(txt);
158850
158892
  }, "detector");
158851
158893
  var loader12 = /* @__PURE__ */ __name(async () => {
158852
- const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-Cnkmy2xq.js");
158894
+ const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-C_wFtq8b.js");
158853
158895
  return { id: id12, diagram: diagram2 };
158854
158896
  }, "loader");
158855
158897
  var plugin10 = {
@@ -158866,7 +158908,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
158866
158908
  return /^\s*classDiagram/.test(txt);
158867
158909
  }, "detector");
158868
158910
  var loader13 = /* @__PURE__ */ __name(async () => {
158869
- const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-BHB2vhDs.js");
158911
+ const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-CwIsZ53p.js");
158870
158912
  return { id: id13, diagram: diagram2 };
158871
158913
  }, "loader");
158872
158914
  var plugin11 = {
@@ -158883,7 +158925,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
158883
158925
  return /^\s*classDiagram-v2/.test(txt);
158884
158926
  }, "detector");
158885
158927
  var loader14 = /* @__PURE__ */ __name(async () => {
158886
- const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-BHB2vhDs.js");
158928
+ const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-CwIsZ53p.js");
158887
158929
  return { id: id14, diagram: diagram2 };
158888
158930
  }, "loader");
158889
158931
  var plugin12 = {
@@ -158900,7 +158942,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
158900
158942
  return /^\s*stateDiagram/.test(txt);
158901
158943
  }, "detector");
158902
158944
  var loader15 = /* @__PURE__ */ __name(async () => {
158903
- const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-Chk4nsf_.js");
158945
+ const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-B9MGwsuS.js");
158904
158946
  return { id: id15, diagram: diagram2 };
158905
158947
  }, "loader");
158906
158948
  var plugin13 = {
@@ -158920,7 +158962,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
158920
158962
  return false;
158921
158963
  }, "detector");
158922
158964
  var loader16 = /* @__PURE__ */ __name(async () => {
158923
- const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-DNIM2ODr.js");
158965
+ const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-CLHd8oUa.js");
158924
158966
  return { id: id16, diagram: diagram2 };
158925
158967
  }, "loader");
158926
158968
  var plugin14 = {
@@ -158934,7 +158976,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
158934
158976
  return /^\s*journey/.test(txt);
158935
158977
  }, "detector");
158936
158978
  var loader17 = /* @__PURE__ */ __name(async () => {
158937
- const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-D3MBfJwF.js");
158979
+ const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-ANqeM_TM.js");
158938
158980
  return { id: id17, diagram: diagram2 };
158939
158981
  }, "loader");
158940
158982
  var plugin15 = {
@@ -159001,7 +159043,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
159001
159043
  return false;
159002
159044
  }, "detector");
159003
159045
  var loader18 = /* @__PURE__ */ __name(async () => {
159004
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-ObYcdqyZ.js");
159046
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-BYBNOZwM.js");
159005
159047
  return { id: id18, diagram: diagram2 };
159006
159048
  }, "loader");
159007
159049
  var plugin16 = {
@@ -159015,7 +159057,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
159015
159057
  return /^\s*timeline/.test(txt);
159016
159058
  }, "detector");
159017
159059
  var loader19 = /* @__PURE__ */ __name(async () => {
159018
- const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-Fz2nlxYj.js");
159060
+ const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-CqKot5RT.js");
159019
159061
  return { id: id19, diagram: diagram2 };
159020
159062
  }, "loader");
159021
159063
  var plugin17 = {
@@ -159029,7 +159071,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
159029
159071
  return /^\s*mindmap/.test(txt);
159030
159072
  }, "detector");
159031
159073
  var loader20 = /* @__PURE__ */ __name(async () => {
159032
- const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-BPhhfr5z.js");
159074
+ const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-DlEXF5z8.js");
159033
159075
  return { id: id20, diagram: diagram2 };
159034
159076
  }, "loader");
159035
159077
  var plugin18 = {
@@ -159043,7 +159085,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
159043
159085
  return /^\s*kanban/.test(txt);
159044
159086
  }, "detector");
159045
159087
  var loader21 = /* @__PURE__ */ __name(async () => {
159046
- const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-Czuz4I_Q.js");
159088
+ const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-B0RkH45q.js");
159047
159089
  return { id: id21, diagram: diagram2 };
159048
159090
  }, "loader");
159049
159091
  var plugin19 = {
@@ -159057,7 +159099,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
159057
159099
  return /^\s*sankey(-beta)?/.test(txt);
159058
159100
  }, "detector");
159059
159101
  var loader22 = /* @__PURE__ */ __name(async () => {
159060
- const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-XynupQoy.js");
159102
+ const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-uzNSHudY.js");
159061
159103
  return { id: id22, diagram: diagram2 };
159062
159104
  }, "loader");
159063
159105
  var plugin20 = {
@@ -159071,7 +159113,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
159071
159113
  return /^\s*packet(-beta)?/.test(txt);
159072
159114
  }, "detector");
159073
159115
  var loader23 = /* @__PURE__ */ __name(async () => {
159074
- const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-BOTznhFu.js");
159116
+ const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-C42mRVEn.js");
159075
159117
  return { id: id23, diagram: diagram2 };
159076
159118
  }, "loader");
159077
159119
  var packet = {
@@ -159084,7 +159126,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
159084
159126
  return /^\s*radar-beta/.test(txt);
159085
159127
  }, "detector");
159086
159128
  var loader24 = /* @__PURE__ */ __name(async () => {
159087
- const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-COmUOoRU.js");
159129
+ const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-DViyYq-y.js");
159088
159130
  return { id: id24, diagram: diagram2 };
159089
159131
  }, "loader");
159090
159132
  var radar = {
@@ -159097,7 +159139,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
159097
159139
  return /^\s*block(-beta)?/.test(txt);
159098
159140
  }, "detector");
159099
159141
  var loader25 = /* @__PURE__ */ __name(async () => {
159100
- const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-CFdPLnD-.js");
159142
+ const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-BahODDhX.js");
159101
159143
  return { id: id25, diagram: diagram2 };
159102
159144
  }, "loader");
159103
159145
  var plugin21 = {
@@ -159111,7 +159153,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
159111
159153
  return /^\s*architecture/.test(txt);
159112
159154
  }, "detector");
159113
159155
  var loader26 = /* @__PURE__ */ __name(async () => {
159114
- const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-DBRmPh1t.js");
159156
+ const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-Br4iiUzH.js");
159115
159157
  return { id: id26, diagram: diagram2 };
159116
159158
  }, "loader");
159117
159159
  var architecture = {
@@ -159125,7 +159167,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
159125
159167
  return /^\s*treemap/.test(txt);
159126
159168
  }, "detector");
159127
159169
  var loader27 = /* @__PURE__ */ __name(async () => {
159128
- const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-5ksUDb2Z.js");
159170
+ const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-DtOD93m7.js");
159129
159171
  return { id: id27, diagram: diagram2 };
159130
159172
  }, "loader");
159131
159173
  var treemap = {
@@ -161427,28 +161469,6 @@ function CodeBrowserView({
161427
161469
  ) })
161428
161470
  );
161429
161471
  }
161430
- function injectInitialUrls(layout, urls) {
161431
- if (!urls || urls.size === 0) return layout;
161432
- if (typeof layout !== "object" || layout === null) return layout;
161433
- const panels = layout.panels;
161434
- if (typeof panels !== "object" || panels === null) return layout;
161435
- let changed = false;
161436
- const nextPanels = {};
161437
- for (const [id28, panel] of Object.entries(panels)) {
161438
- const url = urls.get(id28);
161439
- if (url && typeof panel === "object" && panel !== null && typeof panel.params === "object" && panel.params !== null) {
161440
- const params = panel.params;
161441
- if (!params.initialUrl) {
161442
- nextPanels[id28] = { ...panel, params: { ...params, initialUrl: url } };
161443
- changed = true;
161444
- continue;
161445
- }
161446
- }
161447
- nextPanels[id28] = panel;
161448
- }
161449
- if (!changed) return layout;
161450
- return { ...layout, panels: nextPanels };
161451
- }
161452
161472
  function cycleTabsInActiveGroup(api, direction, refocus) {
161453
161473
  const group = api?.activeGroup;
161454
161474
  if (!api || !group) return;
@@ -161523,1857 +161543,6 @@ function selectNeighbourBeforeRemove(api, panelId) {
161523
161543
  const previous2 = ordered[groupIdx === 0 ? ordered.length - 1 : groupIdx - 1];
161524
161544
  previous2?.activePanel?.api.setActive();
161525
161545
  }
161526
- let domOverlayCount = 0;
161527
- let manualHoldCount = 0;
161528
- const listeners$2 = /* @__PURE__ */ new Set();
161529
- let lastEmitted = false;
161530
- function isFrozen() {
161531
- return domOverlayCount + manualHoldCount > 0;
161532
- }
161533
- function emitIfChanged() {
161534
- const next2 = isFrozen();
161535
- if (next2 === lastEmitted) return;
161536
- lastEmitted = next2;
161537
- for (const l4 of listeners$2) l4();
161538
- }
161539
- function subscribe$1(l4) {
161540
- listeners$2.add(l4);
161541
- return () => {
161542
- listeners$2.delete(l4);
161543
- };
161544
- }
161545
- function getSnapshot$1() {
161546
- return lastEmitted;
161547
- }
161548
- function useBrowserPaneFrozen() {
161549
- return reactExports.useSyncExternalStore(subscribe$1, getSnapshot$1, getSnapshot$1);
161550
- }
161551
- function acquireFreezeHold() {
161552
- manualHoldCount += 1;
161553
- emitIfChanged();
161554
- let released = false;
161555
- return () => {
161556
- if (released) return;
161557
- released = true;
161558
- manualHoldCount = Math.max(0, manualHoldCount - 1);
161559
- emitIfChanged();
161560
- };
161561
- }
161562
- function useFreezeWhile(open2) {
161563
- reactExports.useEffect(() => {
161564
- if (!open2) return;
161565
- return acquireFreezeHold();
161566
- }, [open2]);
161567
- }
161568
- const DEFAULT_OPTIONS = {
161569
- caseSensitive: false,
161570
- wholeWord: false,
161571
- regex: false
161572
- };
161573
- function useBrowserFindInPage({
161574
- key: key2,
161575
- keyName: keyName2
161576
- }) {
161577
- const [isOpen, setIsOpen] = reactExports.useState(false);
161578
- const [query, setQuery] = reactExports.useState("");
161579
- const [options, setOptions] = reactExports.useState(DEFAULT_OPTIONS);
161580
- const [matchInfo, setMatchInfo] = reactExports.useState(null);
161581
- const searchBarRef = reactExports.useRef(null);
161582
- const keyRef = reactExports.useRef(key2);
161583
- keyRef.current = key2;
161584
- const activeRequestIdRef = reactExports.useRef(null);
161585
- const payloadKey = reactExports.useCallback(
161586
- (payload) => keyName2 === "browserId" ? payload.browser_id : payload.workspace_id,
161587
- [keyName2]
161588
- );
161589
- const buildArgs = reactExports.useCallback(
161590
- (extra = {}) => ({ [keyName2]: keyRef.current, ...extra }),
161591
- [keyName2]
161592
- );
161593
- const focusInput = reactExports.useCallback(() => {
161594
- requestAnimationFrame(() => {
161595
- searchBarRef.current?.focus();
161596
- searchBarRef.current?.select();
161597
- });
161598
- }, []);
161599
- const issueFind = reactExports.useCallback(
161600
- async (text2, opts = {}) => {
161601
- if (!isDesktop) return;
161602
- if (!text2) {
161603
- setMatchInfo(null);
161604
- activeRequestIdRef.current = null;
161605
- try {
161606
- await invoke("browser_stop_find_in_page", buildArgs({ action: "clearSelection" }));
161607
- } catch {
161608
- }
161609
- return;
161610
- }
161611
- if (!(opts.findNext ?? false)) {
161612
- setMatchInfo(null);
161613
- activeRequestIdRef.current = null;
161614
- }
161615
- try {
161616
- const reqId = await invoke(
161617
- "browser_find_in_page",
161618
- buildArgs({
161619
- text: text2,
161620
- options: {
161621
- matchCase: options.caseSensitive,
161622
- // First search for a query → omit findNext so Chromium
161623
- // rescans. Stepping → set findNext: true and toggle forward.
161624
- findNext: opts.findNext ?? false,
161625
- forward: opts.forward ?? true
161626
- }
161627
- })
161628
- );
161629
- if (typeof reqId === "number") activeRequestIdRef.current = reqId;
161630
- } catch (e2) {
161631
- console.error("browser_find_in_page failed:", e2);
161632
- }
161633
- },
161634
- [buildArgs, options.caseSensitive]
161635
- );
161636
- const close2 = reactExports.useCallback(() => {
161637
- setIsOpen(false);
161638
- setQuery("");
161639
- setMatchInfo(null);
161640
- activeRequestIdRef.current = null;
161641
- if (!isDesktop) return;
161642
- invoke("browser_stop_find_in_page", buildArgs({ action: "clearSelection" })).catch(
161643
- () => {
161644
- }
161645
- );
161646
- }, [buildArgs]);
161647
- const open2 = reactExports.useCallback(() => {
161648
- setIsOpen(true);
161649
- focusInput();
161650
- }, [focusInput]);
161651
- reactExports.useEffect(() => {
161652
- if (!isOpen) return;
161653
- void issueFind(query);
161654
- }, [query, isOpen, issueFind]);
161655
- reactExports.useEffect(() => {
161656
- if (!isDesktop) return;
161657
- let unlisten;
161658
- void (async () => {
161659
- unlisten = await listen("browser-found-in-page", (event) => {
161660
- if (payloadKey(event.payload) !== keyRef.current) return;
161661
- if (activeRequestIdRef.current !== null && event.payload.request_id !== activeRequestIdRef.current) {
161662
- return;
161663
- }
161664
- setMatchInfo({
161665
- total: event.payload.matches,
161666
- // Chromium reports `0` while a query is being typed and the
161667
- // scan is mid-flight; promote to 0 of N so the UI shows
161668
- // "No results" until a match is selected.
161669
- current: event.payload.active_match_ordinal
161670
- });
161671
- });
161672
- })();
161673
- return () => unlisten?.();
161674
- }, [payloadKey]);
161675
- reactExports.useEffect(() => {
161676
- if (!isDesktop) return;
161677
- let unlisten;
161678
- void (async () => {
161679
- unlisten = await listen("browser-find-shortcut", (event) => {
161680
- if (payloadKey(event.payload) !== keyRef.current) return;
161681
- setIsOpen(true);
161682
- focusInput();
161683
- });
161684
- })();
161685
- return () => unlisten?.();
161686
- }, [focusInput, payloadKey]);
161687
- reactExports.useEffect(() => {
161688
- if (!isDesktop) return;
161689
- let unlisten;
161690
- void (async () => {
161691
- unlisten = await listen("browser-url-changed", (event) => {
161692
- if (payloadKey(event.payload) !== keyRef.current) return;
161693
- if (event.payload.loading) {
161694
- close2();
161695
- }
161696
- });
161697
- })();
161698
- return () => unlisten?.();
161699
- }, [close2, payloadKey]);
161700
- const findNext = reactExports.useCallback(() => {
161701
- if (!query) return;
161702
- void issueFind(query, { findNext: true, forward: true });
161703
- }, [query, issueFind]);
161704
- const findPrevious = reactExports.useCallback(() => {
161705
- if (!query) return;
161706
- void issueFind(query, { findNext: true, forward: false });
161707
- }, [query, issueFind]);
161708
- return {
161709
- isOpen,
161710
- open: open2,
161711
- close: close2,
161712
- query,
161713
- setQuery,
161714
- options,
161715
- setOptions,
161716
- matchInfo,
161717
- findNext,
161718
- findPrevious,
161719
- searchBarRef
161720
- };
161721
- }
161722
- const AUTOCOMPLETE_DEBOUNCE_MS = 50;
161723
- const AUTOCOMPLETE_BLUR_CLOSE_MS = 100;
161724
- function useBrowserPaneControls(args) {
161725
- const { key: key2, keyName: keyName2, workspaceId, currentUrlRef, setInputUrl, inputUrl, onNavigate } = args;
161726
- const find2 = useBrowserFindInPage({ key: key2, keyName: keyName2 });
161727
- const addressInputFocusedRef = reactExports.useRef(false);
161728
- const [autocompleteItems, setAutocompleteItems] = reactExports.useState([]);
161729
- const [autocompleteIsOpen, setAutocompleteIsOpen] = reactExports.useState(false);
161730
- const [autocompleteSelectedIndex, setAutocompleteSelectedIndex] = reactExports.useState(0);
161731
- useFreezeWhile(autocompleteIsOpen);
161732
- const closeAutocomplete = reactExports.useCallback(() => {
161733
- setAutocompleteIsOpen(false);
161734
- setAutocompleteItems([]);
161735
- setAutocompleteSelectedIndex(0);
161736
- }, []);
161737
- reactExports.useEffect(() => {
161738
- if (!addressInputFocusedRef.current) return;
161739
- const trimmed = inputUrl.trim();
161740
- if (trimmed === "") {
161741
- closeAutocomplete();
161742
- return;
161743
- }
161744
- if (trimmed === currentUrlRef.current.trim()) {
161745
- closeAutocomplete();
161746
- return;
161747
- }
161748
- let cancelled = false;
161749
- const handle2 = setTimeout(() => {
161750
- trpc.history.search.query({ workspaceId, query: trimmed, limit: 8 }).then((result) => {
161751
- if (cancelled) return;
161752
- if (result.entries.length === 0) {
161753
- closeAutocomplete();
161754
- return;
161755
- }
161756
- setAutocompleteItems(result.entries);
161757
- setAutocompleteIsOpen(true);
161758
- setAutocompleteSelectedIndex(0);
161759
- }).catch(() => {
161760
- if (!cancelled) closeAutocomplete();
161761
- });
161762
- }, AUTOCOMPLETE_DEBOUNCE_MS);
161763
- return () => {
161764
- cancelled = true;
161765
- clearTimeout(handle2);
161766
- };
161767
- }, [inputUrl, workspaceId, closeAutocomplete, currentUrlRef]);
161768
- const handleAddressFocus = reactExports.useCallback((e2) => {
161769
- addressInputFocusedRef.current = true;
161770
- e2.target.select();
161771
- }, []);
161772
- const handleAddressBlur = reactExports.useCallback(() => {
161773
- addressInputFocusedRef.current = false;
161774
- setInputUrl(currentUrlRef.current);
161775
- setTimeout(() => {
161776
- if (!addressInputFocusedRef.current) closeAutocomplete();
161777
- }, AUTOCOMPLETE_BLUR_CLOSE_MS);
161778
- }, [currentUrlRef, setInputUrl, closeAutocomplete]);
161779
- const handleAddressKeyDown = reactExports.useCallback(
161780
- (e2) => {
161781
- if (autocompleteIsOpen) {
161782
- if (e2.key === "ArrowDown") {
161783
- e2.preventDefault();
161784
- setAutocompleteSelectedIndex((i2) => Math.min(i2 + 1, autocompleteItems.length - 1));
161785
- return;
161786
- }
161787
- if (e2.key === "ArrowUp") {
161788
- e2.preventDefault();
161789
- setAutocompleteSelectedIndex((i2) => Math.max(i2 - 1, 0));
161790
- return;
161791
- }
161792
- if (e2.key === "Enter") {
161793
- const selected = autocompleteItems[autocompleteSelectedIndex];
161794
- if (selected) {
161795
- e2.preventDefault();
161796
- closeAutocomplete();
161797
- onNavigate(selected.url);
161798
- return;
161799
- }
161800
- }
161801
- if (e2.key === "Escape") {
161802
- e2.preventDefault();
161803
- closeAutocomplete();
161804
- return;
161805
- }
161806
- }
161807
- if (e2.key === "Enter") {
161808
- e2.preventDefault();
161809
- closeAutocomplete();
161810
- onNavigate(inputUrl);
161811
- return;
161812
- }
161813
- if (e2.key === "Escape") {
161814
- e2.preventDefault();
161815
- setInputUrl(currentUrlRef.current);
161816
- const input = e2.currentTarget;
161817
- requestAnimationFrame(() => {
161818
- if (input.isConnected) input.select();
161819
- });
161820
- }
161821
- },
161822
- [
161823
- inputUrl,
161824
- onNavigate,
161825
- setInputUrl,
161826
- currentUrlRef,
161827
- autocompleteIsOpen,
161828
- autocompleteItems,
161829
- autocompleteSelectedIndex,
161830
- closeAutocomplete
161831
- ]
161832
- );
161833
- const handlePaneKeyDown = reactExports.useCallback(
161834
- (e2) => {
161835
- if (e2.key.toLowerCase() !== "f") return;
161836
- if (e2.shiftKey || e2.altKey) return;
161837
- const isMac = /mac/i.test(navigator.userAgent);
161838
- const wantsFind = isMac ? e2.metaKey && !e2.ctrlKey : e2.ctrlKey && !e2.metaKey;
161839
- if (!wantsFind) return;
161840
- e2.preventDefault();
161841
- e2.stopPropagation();
161842
- find2.open();
161843
- },
161844
- [find2]
161845
- );
161846
- const handleToggleDevTools = reactExports.useCallback(async () => {
161847
- if (!isDesktop) return;
161848
- try {
161849
- await invoke("browser_toggle_dev_tools", { [keyName2]: key2 });
161850
- } catch (e2) {
161851
- console.error("browser_toggle_dev_tools failed:", e2);
161852
- }
161853
- }, [key2, keyName2]);
161854
- return {
161855
- find: find2,
161856
- addressInputFocusedRef,
161857
- handleAddressFocus,
161858
- handleAddressBlur,
161859
- handleAddressKeyDown,
161860
- handlePaneKeyDown,
161861
- handleToggleDevTools,
161862
- autocomplete: {
161863
- isOpen: autocompleteIsOpen,
161864
- items: autocompleteItems,
161865
- selectedIndex: autocompleteSelectedIndex,
161866
- close: closeAutocomplete,
161867
- setSelectedIndex: setAutocompleteSelectedIndex
161868
- },
161869
- paneDataAttrs: {
161870
- "data-band-browser-pane": "",
161871
- "data-band-browser-pane-key": key2,
161872
- "data-band-browser-pane-keyname": keyName2
161873
- }
161874
- };
161875
- }
161876
- function waitForPaint() {
161877
- return new Promise((resolve2) => {
161878
- requestAnimationFrame(() => requestAnimationFrame(() => resolve2()));
161879
- });
161880
- }
161881
- function useBrowserPaneFreeze(args) {
161882
- const { created, visible, ipcKeyRef } = args;
161883
- const frozen = useBrowserPaneFrozen();
161884
- const [snapshot, setSnapshot] = reactExports.useState(null);
161885
- const freezeAppliedRef = reactExports.useRef(false);
161886
- reactExports.useEffect(() => {
161887
- if (!isDesktop || !created) return;
161888
- let cancelled = false;
161889
- if (frozen) {
161890
- if (!visible) return;
161891
- const ipcKey = ipcKeyRef.current;
161892
- (async () => {
161893
- try {
161894
- const dataUrl = await invoke("browser_capture_page", ipcKey);
161895
- if (!cancelled && dataUrl) {
161896
- reactDomExports.flushSync(() => setSnapshot(dataUrl));
161897
- await waitForPaint();
161898
- }
161899
- } catch {
161900
- }
161901
- if (cancelled) return;
161902
- freezeAppliedRef.current = true;
161903
- invoke("browser_pause_media", ipcKey).catch(() => {
161904
- });
161905
- invoke("browser_hide", ipcKey).catch(() => {
161906
- });
161907
- })();
161908
- } else {
161909
- if (freezeAppliedRef.current) {
161910
- freezeAppliedRef.current = false;
161911
- const ipcKey = ipcKeyRef.current;
161912
- invoke("browser_show", ipcKey).catch(() => {
161913
- });
161914
- invoke("browser_resume_media", ipcKey).catch(() => {
161915
- });
161916
- (async () => {
161917
- await waitForPaint();
161918
- if (!cancelled) setSnapshot(null);
161919
- })();
161920
- } else {
161921
- setSnapshot(null);
161922
- }
161923
- }
161924
- return () => {
161925
- cancelled = true;
161926
- };
161927
- }, [frozen, created, visible, ipcKeyRef]);
161928
- return { snapshot };
161929
- }
161930
- let hosts = /* @__PURE__ */ new Set();
161931
- const listeners$1 = /* @__PURE__ */ new Set();
161932
- let bootstrapped = false;
161933
- function setHosts(updater) {
161934
- const next2 = updater(hosts);
161935
- if (next2 === hosts) return;
161936
- hosts = next2;
161937
- for (const cb of listeners$1) cb();
161938
- }
161939
- function addHost(raw2) {
161940
- const h2 = raw2.toLowerCase();
161941
- if (!h2 || hosts.has(h2)) return;
161942
- setHosts((prev2) => {
161943
- const next2 = new Set(prev2);
161944
- next2.add(h2);
161945
- return next2;
161946
- });
161947
- }
161948
- function bootstrap() {
161949
- if (bootstrapped) return;
161950
- if (!isDesktop) return;
161951
- bootstrapped = true;
161952
- void listen("browser-host-overridden", (event) => {
161953
- if (event.payload.host) addHost(event.payload.host);
161954
- }).catch((err) => {
161955
- console.error("browser-host-overridden listen failed:", err);
161956
- bootstrapped = false;
161957
- });
161958
- invoke("browser_get_overridden_hosts").then((list2) => {
161959
- if (!Array.isArray(list2)) return;
161960
- for (const h2 of list2) addHost(h2);
161961
- }).catch((err) => {
161962
- console.error("browser_get_overridden_hosts failed:", err);
161963
- });
161964
- }
161965
- function subscribe(cb) {
161966
- bootstrap();
161967
- listeners$1.add(cb);
161968
- return () => {
161969
- listeners$1.delete(cb);
161970
- };
161971
- }
161972
- function getSnapshot() {
161973
- return hosts;
161974
- }
161975
- function useOverriddenHosts() {
161976
- const currentHosts = reactExports.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
161977
- const isOverriddenHost = reactExports.useCallback(
161978
- (currentUrl) => {
161979
- if (!currentUrl) return false;
161980
- let host;
161981
- try {
161982
- host = new URL(currentUrl).hostname.toLowerCase();
161983
- } catch {
161984
- return false;
161985
- }
161986
- return currentHosts.has(host);
161987
- },
161988
- [currentHosts]
161989
- );
161990
- return { isOverriddenHost };
161991
- }
161992
- function AddressBarAutocomplete({ state: state2, onSelect }) {
161993
- if (!state2.isOpen || state2.items.length === 0) return null;
161994
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
161995
- "div",
161996
- {
161997
- className: "absolute top-full left-0 right-0 z-20 mx-2 mt-1 overflow-hidden rounded-md border border-border bg-popover shadow-md",
161998
- onMouseDown: (e2) => {
161999
- e2.preventDefault();
162000
- },
162001
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "max-h-80 overflow-y-auto py-1", children: state2.items.map((item, index2) => {
162002
- const selected = index2 === state2.selectedIndex;
162003
- return /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
162004
- "button",
162005
- {
162006
- type: "button",
162007
- onMouseDown: (e2) => {
162008
- e2.preventDefault();
162009
- onSelect(item.url);
162010
- state2.close();
162011
- },
162012
- onMouseEnter: () => state2.setSelectedIndex(index2),
162013
- className: `flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm transition-colors ${selected ? "bg-accent text-foreground" : "text-foreground hover:bg-accent/60"}`,
162014
- children: [
162015
- item.faviconUrl ? /* @__PURE__ */ jsxRuntimeExports.jsx(
162016
- "img",
162017
- {
162018
- src: item.faviconUrl,
162019
- alt: "",
162020
- className: "size-4 shrink-0 rounded-sm",
162021
- onError: (e2) => {
162022
- e2.currentTarget.style.display = "none";
162023
- }
162024
- }
162025
- ) : /* @__PURE__ */ jsxRuntimeExports.jsx(Globe, { className: "size-4 shrink-0 text-muted-foreground" }),
162026
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
162027
- item.title ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate font-medium leading-tight", children: item.title }) : null,
162028
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162029
- "span",
162030
- {
162031
- className: `truncate text-xs leading-tight ${item.title ? "text-muted-foreground" : "text-foreground"}`,
162032
- children: item.url
162033
- }
162034
- )
162035
- ] })
162036
- ]
162037
- }
162038
- ) }, item.id);
162039
- }) })
162040
- }
162041
- );
162042
- }
162043
- function BrowserFindBar({ find: find2 }) {
162044
- if (!find2.isOpen) return null;
162045
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
162046
- SearchBar,
162047
- {
162048
- ref: find2.searchBarRef,
162049
- query: find2.query,
162050
- onQueryChange: find2.setQuery,
162051
- options: find2.options,
162052
- onOptionsChange: find2.setOptions,
162053
- placeholder: "Find in page",
162054
- matchInfo: find2.matchInfo ?? void 0,
162055
- onNext: find2.findNext,
162056
- onPrevious: find2.findPrevious,
162057
- onClose: find2.close,
162058
- visibleOptions: ["caseSensitive"]
162059
- }
162060
- );
162061
- }
162062
- const SEARCH_DEBOUNCE_MS = 150;
162063
- const LIST_LIMIT = 200;
162064
- function groupByDay(entries2) {
162065
- const groups = /* @__PURE__ */ new Map();
162066
- const order2 = [];
162067
- for (const entry of entries2) {
162068
- const dayKey = dayKeyFor(entry.lastVisitedAt);
162069
- let group = groups.get(dayKey);
162070
- if (!group) {
162071
- group = { label: labelFor(dayKey), entries: [] };
162072
- groups.set(dayKey, group);
162073
- order2.push(dayKey);
162074
- }
162075
- group.entries.push(entry);
162076
- }
162077
- return order2.map((k2) => groups.get(k2));
162078
- }
162079
- function dayKeyFor(ts) {
162080
- const d2 = new Date(ts);
162081
- const y4 = d2.getFullYear();
162082
- const m2 = String(d2.getMonth() + 1).padStart(2, "0");
162083
- const day = String(d2.getDate()).padStart(2, "0");
162084
- return `${y4}-${m2}-${day}`;
162085
- }
162086
- function labelFor(dayKey) {
162087
- const now2 = /* @__PURE__ */ new Date();
162088
- const today = dayKeyFor(now2.getTime());
162089
- const yesterdayDate = new Date(now2.getFullYear(), now2.getMonth(), now2.getDate() - 1);
162090
- const yesterday = dayKeyFor(yesterdayDate.getTime());
162091
- if (dayKey === today) return "Today";
162092
- if (dayKey === yesterday) return "Yesterday";
162093
- const [y4, m2, d2] = dayKey.split("-").map(Number);
162094
- const date2 = new Date(y4, m2 - 1, d2);
162095
- const daysSince = Math.floor((Date.now() - date2.getTime()) / (24 * 60 * 60 * 1e3));
162096
- if (daysSince <= 7) {
162097
- return date2.toLocaleDateString(void 0, { weekday: "long", month: "short", day: "numeric" });
162098
- }
162099
- return date2.toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" });
162100
- }
162101
- function timeFor(ts) {
162102
- return new Date(ts).toLocaleTimeString(void 0, { hour: "numeric", minute: "2-digit" });
162103
- }
162104
- function HistoryPopover({ workspaceId, onNavigate }) {
162105
- const searchId = reactExports.useId();
162106
- const [open2, setOpen] = reactExports.useState(false);
162107
- const [query, setQuery] = reactExports.useState("");
162108
- const [entries2, setEntries] = reactExports.useState([]);
162109
- const [loading, setLoading] = reactExports.useState(false);
162110
- const [reloadKey, setReloadKey] = reactExports.useState(0);
162111
- const refresh = reactExports.useCallback(() => {
162112
- setReloadKey((k2) => k2 + 1);
162113
- }, []);
162114
- reactExports.useEffect(() => {
162115
- if (!open2) return;
162116
- let cancelled = false;
162117
- setLoading(true);
162118
- const trimmed = query.trim();
162119
- const fire = () => {
162120
- const promise = trimmed ? trpc.history.search.query({ workspaceId, query: trimmed, limit: 50 }) : trpc.history.list.query({ workspaceId, limit: LIST_LIMIT });
162121
- promise.then((result) => {
162122
- if (cancelled) return;
162123
- setEntries(result.entries);
162124
- }).catch(() => {
162125
- if (!cancelled) setEntries([]);
162126
- }).finally(() => {
162127
- if (!cancelled) setLoading(false);
162128
- });
162129
- };
162130
- const delay = trimmed ? SEARCH_DEBOUNCE_MS : 0;
162131
- const handle2 = setTimeout(fire, delay);
162132
- return () => {
162133
- cancelled = true;
162134
- clearTimeout(handle2);
162135
- };
162136
- }, [open2, query, workspaceId, reloadKey]);
162137
- const groups = reactExports.useMemo(() => groupByDay(entries2), [entries2]);
162138
- const handleNavigate = reactExports.useCallback(
162139
- (url) => {
162140
- onNavigate(url);
162141
- setOpen(false);
162142
- },
162143
- [onNavigate]
162144
- );
162145
- const handleDelete2 = reactExports.useCallback(
162146
- async (id28) => {
162147
- await trpc.history.delete.mutate({ id: id28, workspaceId }).catch(() => {
162148
- });
162149
- refresh();
162150
- },
162151
- [refresh, workspaceId]
162152
- );
162153
- const handleClear = reactExports.useCallback(
162154
- async (range2) => {
162155
- await trpc.history.clear.mutate({ workspaceId, range: range2 }).catch(() => {
162156
- });
162157
- refresh();
162158
- },
162159
- [refresh, workspaceId]
162160
- );
162161
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(Popover, { open: open2, onOpenChange: setOpen, children: [
162162
- /* @__PURE__ */ jsxRuntimeExports.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
162163
- "button",
162164
- {
162165
- type: "button",
162166
- className: "flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162167
- title: "History",
162168
- "aria-label": "Browser history",
162169
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(History, { className: "size-4" })
162170
- }
162171
- ) }),
162172
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
162173
- PopoverContent,
162174
- {
162175
- align: "end",
162176
- sideOffset: 6,
162177
- className: "w-[440px] p-0",
162178
- onOpenAutoFocus: (e2) => {
162179
- e2.preventDefault();
162180
- const input = document.getElementById(searchId);
162181
- if (input) input.focus();
162182
- },
162183
- children: [
162184
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 border-b border-border px-3 py-2", children: [
162185
- /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { className: "size-4 shrink-0 text-muted-foreground" }),
162186
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162187
- "input",
162188
- {
162189
- id: searchId,
162190
- type: "text",
162191
- value: query,
162192
- onChange: (e2) => setQuery(e2.target.value),
162193
- placeholder: "Search history",
162194
- className: "min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground"
162195
- }
162196
- )
162197
- ] }),
162198
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-h-[420px] overflow-y-auto", children: loading && entries2.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 py-6 text-center text-sm text-muted-foreground", children: "Loading…" }) : groups.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 py-6 text-center text-sm text-muted-foreground", children: query ? "No matching history" : "No history yet" }) : groups.map((group) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
162199
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "sticky top-0 z-10 border-b border-border bg-popover px-3 py-1 text-xs font-medium text-muted-foreground", children: group.label }),
162200
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: group.entries.map((entry) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
162201
- "li",
162202
- {
162203
- className: "group relative flex min-w-0 items-center gap-2 py-1.5 pl-3 pr-2 hover:bg-accent/60",
162204
- children: [
162205
- entry.faviconUrl ? /* @__PURE__ */ jsxRuntimeExports.jsx(
162206
- "img",
162207
- {
162208
- src: entry.faviconUrl,
162209
- alt: "",
162210
- className: "size-4 shrink-0 rounded-sm",
162211
- onError: (e2) => {
162212
- e2.currentTarget.style.display = "none";
162213
- }
162214
- }
162215
- ) : /* @__PURE__ */ jsxRuntimeExports.jsx(Globe, { className: "size-4 shrink-0 text-muted-foreground" }),
162216
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
162217
- "button",
162218
- {
162219
- type: "button",
162220
- onClick: () => handleNavigate(entry.url),
162221
- className: "flex min-w-0 flex-1 flex-col items-stretch gap-0.5 overflow-hidden pr-6 text-left",
162222
- children: [
162223
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block truncate text-sm font-medium leading-tight text-foreground", children: entry.title || entry.url }),
162224
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex min-w-0 items-baseline gap-2 leading-tight", children: [
162225
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "min-w-0 flex-1 truncate text-xs text-muted-foreground", children: entry.url }),
162226
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 text-[11px] text-muted-foreground tabular-nums", children: timeFor(entry.lastVisitedAt) })
162227
- ] })
162228
- ]
162229
- }
162230
- ),
162231
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162232
- "button",
162233
- {
162234
- type: "button",
162235
- onClick: () => handleDelete2(entry.id),
162236
- className: "absolute right-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-muted-foreground opacity-0 transition-opacity hover:bg-destructive/10 hover:text-destructive group-hover:opacity-100",
162237
- title: "Delete entry",
162238
- "aria-label": "Delete entry",
162239
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { className: "size-3.5" })
162240
- }
162241
- )
162242
- ]
162243
- },
162244
- entry.id
162245
- )) })
162246
- ] }, group.label)) }),
162247
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center justify-end border-t border-border px-3 py-2", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
162248
- /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
162249
- "button",
162250
- {
162251
- type: "button",
162252
- className: "flex items-center gap-1 rounded px-2 py-1 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162253
- children: [
162254
- "Clear ",
162255
- /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3" })
162256
- ]
162257
- }
162258
- ) }),
162259
- /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuContent, { align: "end", children: [
162260
- /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuItem, { onSelect: () => handleClear("hour"), children: "Last hour" }),
162261
- /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuItem, { onSelect: () => handleClear("day"), children: "Last 24 hours" }),
162262
- /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuItem, { onSelect: () => handleClear("week"), children: "Last week" }),
162263
- /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuItem, { onSelect: () => handleClear("all"), children: "All time" })
162264
- ] })
162265
- ] }) })
162266
- ]
162267
- }
162268
- )
162269
- ] });
162270
- }
162271
- function NotSecureBadge() {
162272
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
162273
- "span",
162274
- {
162275
- className: "inline-flex shrink-0 items-center gap-1 rounded bg-destructive/10 px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-destructive",
162276
- title: "The certificate for this site was overridden for the current session. Use with caution.",
162277
- "data-testid": "cert-not-secure-badge",
162278
- children: [
162279
- /* @__PURE__ */ jsxRuntimeExports.jsx(TriangleAlert, { className: "size-3", "aria-hidden": true }),
162280
- "Not secure"
162281
- ]
162282
- }
162283
- );
162284
- }
162285
- const DEFAULT_URL = "";
162286
- const BLANK_URL = "about:blank";
162287
- const faviconMap = /* @__PURE__ */ new Map();
162288
- const faviconListeners$1 = /* @__PURE__ */ new Set();
162289
- function setFaviconUrl(browserId, url) {
162290
- if (faviconMap.get(browserId) !== url) {
162291
- faviconMap.set(browserId, url);
162292
- for (const listener of faviconListeners$1) listener();
162293
- }
162294
- }
162295
- function subscribeFavicons$1(cb) {
162296
- faviconListeners$1.add(cb);
162297
- return () => {
162298
- faviconListeners$1.delete(cb);
162299
- };
162300
- }
162301
- function useFavicon(browserId) {
162302
- return reactExports.useSyncExternalStore(subscribeFavicons$1, () => faviconMap.get(browserId));
162303
- }
162304
- function BrowserPaneComponent({
162305
- params,
162306
- api
162307
- }) {
162308
- const { browserId, initialUrl, workspaceId: workspaceIdParam } = params;
162309
- const [currentUrl, setCurrentUrl] = reactExports.useState(() => initialUrl ?? DEFAULT_URL);
162310
- const [inputUrl, setInputUrl] = reactExports.useState(() => initialUrl ?? DEFAULT_URL);
162311
- const [loading, setLoading] = reactExports.useState(false);
162312
- const [created, setCreated] = reactExports.useState(false);
162313
- const createdRef = reactExports.useRef(false);
162314
- const placeholderRef = reactExports.useRef(null);
162315
- const creatingRef = reactExports.useRef(false);
162316
- const pendingNavRef = reactExports.useRef(null);
162317
- const browserIdRef = reactExports.useRef(browserId);
162318
- browserIdRef.current = browserId;
162319
- const currentUrlRef = reactExports.useRef(currentUrl);
162320
- currentUrlRef.current = currentUrl;
162321
- const [workspaceId, setWorkspaceId] = reactExports.useState(workspaceIdParam ?? "");
162322
- const workspaceIdRef = reactExports.useRef(workspaceId);
162323
- workspaceIdRef.current = workspaceId;
162324
- const ipcKeyRef = reactExports.useRef({ browserId });
162325
- ipcKeyRef.current = { browserId };
162326
- const { snapshot } = useBrowserPaneFreeze({
162327
- created,
162328
- visible: api.isVisible && params.wsActive !== false,
162329
- ipcKeyRef
162330
- });
162331
- const { isOverriddenHost } = useOverriddenHosts();
162332
- const getBounds = reactExports.useCallback(() => {
162333
- const el = placeholderRef.current;
162334
- if (!el) return null;
162335
- const rect2 = el.getBoundingClientRect();
162336
- return {
162337
- x: rect2.left + 1,
162338
- y: rect2.top,
162339
- width: Math.max(0, rect2.width - 2),
162340
- height: rect2.height
162341
- };
162342
- }, []);
162343
- const invoke$1 = reactExports.useCallback(async (cmd2, args) => {
162344
- if (!isDesktop) return;
162345
- return invoke(cmd2, args);
162346
- }, []);
162347
- reactExports.useEffect(() => {
162348
- if (!browserId || initialUrl) return;
162349
- let cancelled = false;
162350
- trpc.browsers.get.query({ browserId }).then((result) => {
162351
- if (cancelled) return;
162352
- const ws = result.browser?.workspaceId;
162353
- if (ws && !workspaceIdRef.current) {
162354
- setWorkspaceId(ws);
162355
- }
162356
- const url = result.browser?.url;
162357
- if (!url || url === "" || url === BLANK_URL) return;
162358
- setCurrentUrl(url);
162359
- setInputUrl(url);
162360
- if (createdRef.current) {
162361
- invoke$1("browser_navigate", { browserId, url }).catch(() => {
162362
- });
162363
- } else {
162364
- pendingNavRef.current = url;
162365
- }
162366
- }).catch(() => {
162367
- });
162368
- return () => {
162369
- cancelled = true;
162370
- };
162371
- }, [browserId, initialUrl, invoke$1]);
162372
- reactExports.useEffect(() => {
162373
- if (!isDesktop || created || creatingRef.current) return;
162374
- const el = placeholderRef.current;
162375
- if (!el) return;
162376
- let cancelled = false;
162377
- const tryCreate = async () => {
162378
- if (cancelled || createdRef.current || creatingRef.current) return;
162379
- const bounds = getBounds();
162380
- if (!bounds || bounds.width === 0 || bounds.height === 0) return;
162381
- observer.disconnect();
162382
- creatingRef.current = true;
162383
- try {
162384
- await invoke$1("browser_create", {
162385
- browserId,
162386
- ...bounds,
162387
- url: currentUrlRef.current || BLANK_URL
162388
- });
162389
- createdRef.current = true;
162390
- setCreated(true);
162391
- const pending2 = pendingNavRef.current;
162392
- if (pending2) {
162393
- pendingNavRef.current = null;
162394
- await invoke$1("browser_navigate", {
162395
- browserId: browserIdRef.current,
162396
- url: pending2
162397
- });
162398
- }
162399
- } catch (e2) {
162400
- console.error("Failed to create browser webview:", e2);
162401
- } finally {
162402
- creatingRef.current = false;
162403
- }
162404
- };
162405
- const observer = new ResizeObserver(() => {
162406
- tryCreate();
162407
- });
162408
- observer.observe(el);
162409
- const timer2 = setTimeout(tryCreate, 50);
162410
- return () => {
162411
- cancelled = true;
162412
- clearTimeout(timer2);
162413
- observer.disconnect();
162414
- };
162415
- }, [created, getBounds, invoke$1, browserId]);
162416
- const urlPersistTimer = reactExports.useRef(null);
162417
- reactExports.useEffect(() => {
162418
- if (!isDesktop) return;
162419
- let unlistenUrl;
162420
- let unlistenTitle;
162421
- (async () => {
162422
- unlistenUrl = await listen("browser-url-changed", (event) => {
162423
- if (event.payload.browser_id !== browserIdRef.current) return;
162424
- const url = event.payload.url;
162425
- setLoading(event.payload.loading);
162426
- if (url === BLANK_URL) return;
162427
- setCurrentUrl(url);
162428
- if (!addressInputFocusedRef.current) {
162429
- setInputUrl(url);
162430
- }
162431
- if (urlPersistTimer.current) clearTimeout(urlPersistTimer.current);
162432
- urlPersistTimer.current = setTimeout(() => {
162433
- trpc.browsers.navigate.mutate({ browserId: browserIdRef.current, url }).catch(() => {
162434
- });
162435
- }, 500);
162436
- let faviconForHistory;
162437
- try {
162438
- const origin = new URL(url).origin;
162439
- faviconForHistory = `${origin}/favicon.ico`;
162440
- setFaviconUrl(browserIdRef.current, faviconForHistory);
162441
- } catch {
162442
- }
162443
- if (!event.payload.loading && workspaceIdRef.current) {
162444
- trpc.history.record.mutate({
162445
- workspaceId: workspaceIdRef.current,
162446
- url,
162447
- faviconUrl: faviconForHistory
162448
- }).catch(() => {
162449
- });
162450
- }
162451
- });
162452
- unlistenTitle = await listen(
162453
- "browser-title-changed",
162454
- (event) => {
162455
- if (event.payload.browser_id !== browserIdRef.current) return;
162456
- if (event.payload.title) {
162457
- api.setTitle(event.payload.title);
162458
- const url = currentUrlRef.current;
162459
- if (url && url !== BLANK_URL && workspaceIdRef.current) {
162460
- trpc.history.updateMeta.mutate({
162461
- workspaceId: workspaceIdRef.current,
162462
- url,
162463
- title: event.payload.title
162464
- }).catch(() => {
162465
- });
162466
- }
162467
- }
162468
- }
162469
- );
162470
- })();
162471
- return () => {
162472
- unlistenUrl?.();
162473
- unlistenTitle?.();
162474
- if (urlPersistTimer.current) {
162475
- clearTimeout(urlPersistTimer.current);
162476
- urlPersistTimer.current = null;
162477
- const finalUrl = currentUrlRef.current;
162478
- if (finalUrl && finalUrl !== BLANK_URL) {
162479
- trpc.browsers.navigate.mutate({ browserId: browserIdRef.current, url: finalUrl }).catch(() => {
162480
- });
162481
- }
162482
- }
162483
- };
162484
- }, [api]);
162485
- reactExports.useEffect(() => {
162486
- if (!isDesktop || !created) return;
162487
- const showWebview = async () => {
162488
- await invoke$1("browser_show", { browserId });
162489
- const bounds = getBounds();
162490
- if (bounds && bounds.width > 0 && bounds.height > 0) {
162491
- await invoke$1("browser_set_bounds", { browserId, ...bounds });
162492
- }
162493
- };
162494
- const hideWebview = async () => {
162495
- await invoke$1("browser_hide", { browserId });
162496
- };
162497
- const d2 = api.onDidVisibilityChange((e2) => {
162498
- if (e2.isVisible) {
162499
- showWebview();
162500
- } else {
162501
- hideWebview();
162502
- }
162503
- });
162504
- return () => {
162505
- d2.dispose();
162506
- };
162507
- }, [api, created, getBounds, invoke$1, browserId]);
162508
- reactExports.useEffect(() => {
162509
- if (!isDesktop || !created) return;
162510
- const wsActive = params.wsActive !== false;
162511
- if (!wsActive) {
162512
- invoke$1("browser_hide", { browserId }).catch(() => {
162513
- });
162514
- } else if (api.isVisible) {
162515
- invoke$1("browser_show", { browserId }).catch(() => {
162516
- });
162517
- const bounds = getBounds();
162518
- if (bounds && bounds.width > 0 && bounds.height > 0) {
162519
- invoke$1("browser_set_bounds", { browserId, ...bounds }).catch(() => {
162520
- });
162521
- }
162522
- }
162523
- }, [params.wsActive, api, created, getBounds, invoke$1, browserId]);
162524
- reactExports.useEffect(() => {
162525
- if (!isDesktop || !created) return;
162526
- const el = placeholderRef.current;
162527
- if (!el) return;
162528
- const observer = new ResizeObserver(() => {
162529
- const bounds = getBounds();
162530
- if (!bounds || bounds.width === 0 || bounds.height === 0) return;
162531
- invoke$1("browser_set_bounds", { browserId, ...bounds }).catch(() => {
162532
- });
162533
- });
162534
- observer.observe(el);
162535
- return () => observer.disconnect();
162536
- }, [created, getBounds, invoke$1, browserId]);
162537
- reactExports.useEffect(() => {
162538
- return () => {
162539
- if (isDesktop) {
162540
- const bId = browserIdRef.current;
162541
- invoke("browser_destroy", { browserId: bId }).catch(() => {
162542
- });
162543
- }
162544
- };
162545
- }, []);
162546
- const handleNavigate = reactExports.useCallback(
162547
- async (rawUrl) => {
162548
- let normalized = rawUrl.trim();
162549
- if (!normalized) {
162550
- setCurrentUrl("");
162551
- setInputUrl("");
162552
- setLoading(false);
162553
- if (createdRef.current) {
162554
- try {
162555
- await invoke$1("browser_navigate", { browserId, url: BLANK_URL });
162556
- } catch (e2) {
162557
- console.error("browser_navigate failed:", e2);
162558
- }
162559
- } else {
162560
- pendingNavRef.current = BLANK_URL;
162561
- }
162562
- return;
162563
- }
162564
- if (!normalized.startsWith("http://") && !normalized.startsWith("https://")) {
162565
- if (normalized.includes(".") && !normalized.includes(" ")) {
162566
- normalized = `https://${normalized}`;
162567
- } else {
162568
- normalized = `https://www.google.com/search?q=${encodeURIComponent(normalized)}`;
162569
- }
162570
- }
162571
- setCurrentUrl(normalized);
162572
- setInputUrl(normalized);
162573
- setLoading(true);
162574
- if (createdRef.current) {
162575
- try {
162576
- await invoke$1("browser_navigate", { browserId, url: normalized });
162577
- } catch (e2) {
162578
- console.error("browser_navigate failed:", e2);
162579
- }
162580
- } else {
162581
- pendingNavRef.current = normalized;
162582
- }
162583
- },
162584
- [invoke$1, browserId]
162585
- );
162586
- const handleBack = reactExports.useCallback(async () => {
162587
- try {
162588
- await invoke$1("browser_go_back", { browserId });
162589
- } catch (e2) {
162590
- console.error("browser_go_back failed:", e2);
162591
- }
162592
- }, [invoke$1, browserId]);
162593
- const handleForward = reactExports.useCallback(async () => {
162594
- try {
162595
- await invoke$1("browser_go_forward", { browserId });
162596
- } catch (e2) {
162597
- console.error("browser_go_forward failed:", e2);
162598
- }
162599
- }, [invoke$1, browserId]);
162600
- const handleReload = reactExports.useCallback(async () => {
162601
- try {
162602
- setLoading(true);
162603
- await invoke$1("browser_reload", { browserId });
162604
- } catch (e2) {
162605
- console.error("browser_reload failed:", e2);
162606
- }
162607
- }, [invoke$1, browserId]);
162608
- const handleStop = reactExports.useCallback(async () => {
162609
- try {
162610
- await invoke$1("browser_eval", { browserId, js: "window.stop()" });
162611
- setLoading(false);
162612
- } catch {
162613
- setLoading(false);
162614
- }
162615
- }, [invoke$1, browserId]);
162616
- const {
162617
- find: find2,
162618
- addressInputFocusedRef,
162619
- handleAddressFocus,
162620
- handleAddressBlur,
162621
- handleAddressKeyDown,
162622
- handlePaneKeyDown,
162623
- handleToggleDevTools,
162624
- autocomplete,
162625
- paneDataAttrs
162626
- } = useBrowserPaneControls({
162627
- key: browserId,
162628
- keyName: "browserId",
162629
- workspaceId,
162630
- currentUrlRef,
162631
- setInputUrl,
162632
- inputUrl,
162633
- onNavigate: handleNavigate
162634
- });
162635
- if (!browserId) return null;
162636
- if (!isDesktop) {
162637
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full items-center justify-center text-muted-foreground", children: "Browser panel is only available in the desktop app" });
162638
- }
162639
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full w-full flex-col", onKeyDown: handlePaneKeyDown, ...paneDataAttrs, children: [
162640
- /* @__PURE__ */ jsxRuntimeExports.jsx("style", { children: `@keyframes browser-bar-slide {
162641
- 0% { transform: translateX(-100%); }
162642
- 50% { transform: translateX(200%); }
162643
- 100% { transform: translateX(-100%); }
162644
- }` }),
162645
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex h-10 shrink-0 items-center gap-1 border-b border-border bg-background px-2", children: [
162646
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162647
- "button",
162648
- {
162649
- type: "button",
162650
- onClick: handleBack,
162651
- className: "flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162652
- title: "Back",
162653
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowLeft, { className: "size-4" })
162654
- }
162655
- ),
162656
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162657
- "button",
162658
- {
162659
- type: "button",
162660
- onClick: handleForward,
162661
- className: "flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162662
- title: "Forward",
162663
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "size-4" })
162664
- }
162665
- ),
162666
- loading ? /* @__PURE__ */ jsxRuntimeExports.jsx(
162667
- "button",
162668
- {
162669
- type: "button",
162670
- onClick: handleStop,
162671
- className: "flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162672
- title: "Stop",
162673
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(X$7, { className: "size-4" })
162674
- }
162675
- ) : /* @__PURE__ */ jsxRuntimeExports.jsx(
162676
- "button",
162677
- {
162678
- type: "button",
162679
- onClick: handleReload,
162680
- className: "flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162681
- title: "Reload",
162682
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(RotateCw, { className: "size-4" })
162683
- }
162684
- ),
162685
- isOverriddenHost(currentUrl) ? /* @__PURE__ */ jsxRuntimeExports.jsx(NotSecureBadge, {}) : null,
162686
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162687
- "input",
162688
- {
162689
- type: "text",
162690
- value: inputUrl,
162691
- onChange: (e2) => setInputUrl(e2.target.value),
162692
- onKeyDown: handleAddressKeyDown,
162693
- onFocus: handleAddressFocus,
162694
- onBlur: handleAddressBlur,
162695
- className: "min-w-0 flex-1 rounded border border-transparent bg-muted/50 px-3 py-1.5 text-sm text-foreground outline-none transition-colors focus:border-border",
162696
- placeholder: "Enter URL or search...",
162697
- "data-band-address-input": ""
162698
- }
162699
- ),
162700
- workspaceId ? /* @__PURE__ */ jsxRuntimeExports.jsx(HistoryPopover, { workspaceId, onNavigate: handleNavigate }) : null,
162701
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162702
- "button",
162703
- {
162704
- type: "button",
162705
- onClick: handleToggleDevTools,
162706
- className: "flex items-center justify-center rounded p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162707
- title: "Toggle DevTools",
162708
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Wrench, { className: "size-4" })
162709
- }
162710
- ),
162711
- loading && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-x-0 bottom-0 h-0.5 overflow-hidden bg-blue-500/10", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
162712
- "div",
162713
- {
162714
- className: "h-full w-2/5 rounded-full bg-blue-500",
162715
- style: {
162716
- animation: "browser-bar-slide 1.4s ease-in-out infinite"
162717
- }
162718
- }
162719
- ) }),
162720
- /* @__PURE__ */ jsxRuntimeExports.jsx(AddressBarAutocomplete, { state: autocomplete, onSelect: handleNavigate })
162721
- ] }),
162722
- /* @__PURE__ */ jsxRuntimeExports.jsx(BrowserFindBar, { find: find2 }),
162723
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: placeholderRef, className: "relative min-h-0 flex-1", children: snapshot ? (
162724
- // `object-contain object-top` — see the identical block in
162725
- // `BrowserPanelComponent` for the DevTools-aware rationale.
162726
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162727
- "img",
162728
- {
162729
- src: snapshot,
162730
- alt: "",
162731
- className: "pointer-events-none absolute inset-0 size-full object-contain object-top",
162732
- draggable: false
162733
- }
162734
- )
162735
- ) : null })
162736
- ] });
162737
- }
162738
- const freshBrowserIds = /* @__PURE__ */ new Set();
162739
- function markBrowserFresh(browserId) {
162740
- freshBrowserIds.add(browserId);
162741
- }
162742
- function uuid$2() {
162743
- if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
162744
- return crypto.randomUUID();
162745
- }
162746
- const bytes = crypto.getRandomValues(new Uint8Array(16));
162747
- bytes[6] = bytes[6] & 15 | 64;
162748
- bytes[8] = bytes[8] & 63 | 128;
162749
- const hex2 = Array.from(bytes, (b2) => b2.toString(16).padStart(2, "0")).join("");
162750
- return `${hex2.slice(0, 8)}-${hex2.slice(8, 12)}-${hex2.slice(12, 16)}-${hex2.slice(16, 20)}-${hex2.slice(20)}`;
162751
- }
162752
- function newBrowserId() {
162753
- return `browser_${uuid$2()}`;
162754
- }
162755
- function browserLayoutKey(workspaceId) {
162756
- return ["browserLayout", workspaceId];
162757
- }
162758
- const saveTimers$1 = /* @__PURE__ */ new Map();
162759
- function panelIdsFromLayout(layout) {
162760
- if (typeof layout === "object" && layout !== null) {
162761
- const panels = layout.panels;
162762
- if (typeof panels === "object" && panels !== null) {
162763
- return new Set(Object.keys(panels));
162764
- }
162765
- }
162766
- return /* @__PURE__ */ new Set();
162767
- }
162768
- function persistToServer$1(workspaceId, layout, opts) {
162769
- if (opts?.queryClient) {
162770
- const prev2 = opts.queryClient.getQueryData(browserLayoutKey(workspaceId));
162771
- opts.queryClient.setQueryData(browserLayoutKey(workspaceId), {
162772
- layout,
162773
- browserIds: panelIdsFromLayout(layout),
162774
- urls: prev2?.urls ?? /* @__PURE__ */ new Map()
162775
- });
162776
- }
162777
- const existing = saveTimers$1.get(workspaceId);
162778
- if (existing) clearTimeout(existing);
162779
- saveTimers$1.set(
162780
- workspaceId,
162781
- setTimeout(() => {
162782
- saveTimers$1.delete(workspaceId);
162783
- trpc.browserLayout.save.mutate({ workspaceId, tree: layout }).catch((err) => {
162784
- console.error("[DockviewBrowserContainer] failed to persist layout:", err);
162785
- });
162786
- }, 500)
162787
- );
162788
- }
162789
- function isDockviewLayout$1(obj) {
162790
- if (typeof obj !== "object" || obj === null) return false;
162791
- const o3 = obj;
162792
- return typeof o3.grid === "object" && typeof o3.panels === "object";
162793
- }
162794
- const browserTabTheme = {
162795
- name: "band",
162796
- className: "dockview-theme-band dockview-browser-tabs"
162797
- };
162798
- const BrowserVisibilityContext = reactExports.createContext({ visible: true, wsActive: true });
162799
- function BrowserTabPanel({ params, api }) {
162800
- const { visible } = reactExports.useContext(BrowserVisibilityContext);
162801
- if (!params.workspaceId || !params.browserId) return null;
162802
- const paneParams = {
162803
- workspaceId: params.workspaceId,
162804
- browserId: params.browserId,
162805
- wsActive: visible,
162806
- initialUrl: params.initialUrl
162807
- };
162808
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full w-full flex-col overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
162809
- BrowserPaneComponent,
162810
- {
162811
- params: paneParams,
162812
- api,
162813
- ...{}
162814
- }
162815
- ) });
162816
- }
162817
- function BrowserTab(props) {
162818
- const [title, setTitle] = reactExports.useState(props.api.title ?? "New Tab");
162819
- const [panelCount, setPanelCount] = reactExports.useState(props.containerApi.panels.length);
162820
- const [faviconError, setFaviconError] = reactExports.useState(false);
162821
- const browserId = props.params.browserId;
162822
- const faviconUrl = useFavicon(browserId);
162823
- const prevFaviconRef = reactExports.useRef(faviconUrl);
162824
- if (faviconUrl !== prevFaviconRef.current) {
162825
- prevFaviconRef.current = faviconUrl;
162826
- if (faviconError) setFaviconError(false);
162827
- }
162828
- reactExports.useEffect(() => {
162829
- const d2 = props.api.onDidTitleChange(() => setTitle(props.api.title ?? "New Tab"));
162830
- return () => d2.dispose();
162831
- }, [props.api]);
162832
- reactExports.useEffect(() => {
162833
- const cApi = props.containerApi;
162834
- const update = () => setPanelCount(cApi.panels.length);
162835
- const d1 = cApi.onDidAddPanel(update);
162836
- const d2 = cApi.onDidRemovePanel(update);
162837
- return () => {
162838
- d1.dispose();
162839
- d2.dispose();
162840
- };
162841
- }, [props.containerApi]);
162842
- const handleClose2 = reactExports.useCallback(
162843
- (e2) => {
162844
- e2.stopPropagation();
162845
- closeTabRef$1.current?.(browserId);
162846
- },
162847
- [browserId]
162848
- );
162849
- const showClose = panelCount > 1;
162850
- const showFavicon = faviconUrl && !faviconError;
162851
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "dv-default-tab", children: [
162852
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5 min-w-0", children: [
162853
- showFavicon ? /* @__PURE__ */ jsxRuntimeExports.jsx(
162854
- "img",
162855
- {
162856
- src: faviconUrl,
162857
- alt: "",
162858
- className: "size-3.5 shrink-0",
162859
- onError: () => setFaviconError(true)
162860
- }
162861
- ) : /* @__PURE__ */ jsxRuntimeExports.jsx(Globe, { className: "size-3.5 shrink-0 text-muted-foreground" }),
162862
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: title })
162863
- ] }),
162864
- showClose && /* @__PURE__ */ jsxRuntimeExports.jsx(
162865
- "button",
162866
- {
162867
- type: "button",
162868
- className: "ml-1 inline-flex size-4 items-center justify-center rounded-sm opacity-60 hover:opacity-100 hover:bg-accent transition-colors",
162869
- onClick: handleClose2,
162870
- title: "Close tab",
162871
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(X$7, { className: "size-3" })
162872
- }
162873
- )
162874
- ] });
162875
- }
162876
- const addTabRef$1 = {
162877
- current: { onAdd: () => {
162878
- }, onSplit: () => {
162879
- } }
162880
- };
162881
- const closeTabRef$1 = {
162882
- current: null
162883
- };
162884
- const RightHeaderActions$1 = React$1.memo(function RightHeaderActions2(props) {
162885
- const groupId = props.group.id;
162886
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full items-center", children: [
162887
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162888
- "button",
162889
- {
162890
- type: "button",
162891
- className: "inline-flex size-8 items-center justify-center text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors",
162892
- onClick: () => addTabRef$1.current.onSplit(groupId, "right"),
162893
- title: "Split right",
162894
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Columns2, { className: "size-3.5" })
162895
- }
162896
- ),
162897
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162898
- "button",
162899
- {
162900
- type: "button",
162901
- className: "inline-flex size-8 items-center justify-center text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors",
162902
- onClick: () => addTabRef$1.current.onSplit(groupId, "below"),
162903
- title: "Split down",
162904
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Rows2, { className: "size-3.5" })
162905
- }
162906
- ),
162907
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162908
- "button",
162909
- {
162910
- type: "button",
162911
- className: "inline-flex size-8 items-center justify-center text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors",
162912
- onClick: () => addTabRef$1.current.onAdd(groupId),
162913
- title: "New browser tab",
162914
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Plus, { className: "size-4" })
162915
- }
162916
- )
162917
- ] });
162918
- });
162919
- const browserPanelComponents = {
162920
- browserTab: BrowserTabPanel
162921
- };
162922
- const browserTabComponents = {
162923
- browserTab: BrowserTab
162924
- };
162925
- function DockviewBrowserContainer({
162926
- workspaceId,
162927
- visible,
162928
- wsActive
162929
- }) {
162930
- const adapter2 = useAdapter();
162931
- const queryClient2 = useQueryClient();
162932
- const apiRef = reactExports.useRef(null);
162933
- const isRestoringRef = reactExports.useRef(false);
162934
- const containerRef = reactExports.useRef(null);
162935
- const { data: initialData } = useQuery({
162936
- queryKey: browserLayoutKey(workspaceId),
162937
- queryFn: async () => {
162938
- const [{ tree }, { browsers }] = await Promise.all([
162939
- trpc.browserLayout.get.query({ workspaceId }).catch(() => ({ tree: null })),
162940
- trpc.browsers.list.query({ workspaceId }).catch(() => ({ browsers: [] }))
162941
- ]);
162942
- const urls = /* @__PURE__ */ new Map();
162943
- for (const b2 of browsers) {
162944
- if (b2.url && b2.url !== "about:blank") urls.set(b2.id, b2.url);
162945
- }
162946
- return {
162947
- layout: tree,
162948
- browserIds: new Set(browsers.map((b2) => b2.id)),
162949
- urls
162950
- };
162951
- },
162952
- staleTime: Number.POSITIVE_INFINITY
162953
- // never auto-refetch — we manage persistence ourselves
162954
- });
162955
- const queryClientRef = reactExports.useRef(queryClient2);
162956
- queryClientRef.current = queryClient2;
162957
- const schedulePersist = reactExports.useCallback(() => {
162958
- if (isRestoringRef.current) return;
162959
- const api = apiRef.current;
162960
- if (!api) return;
162961
- persistToServer$1(workspaceId, api.toJSON(), { queryClient: queryClientRef.current });
162962
- }, [workspaceId]);
162963
- const handleAddTab = reactExports.useCallback(
162964
- async (groupId, addOptions) => {
162965
- const api = apiRef.current;
162966
- if (!api) return;
162967
- const browserId = newBrowserId();
162968
- markBrowserFresh(browserId);
162969
- const initialUrl = addOptions?.initialUrl;
162970
- const options = {
162971
- id: browserId,
162972
- component: "browserTab",
162973
- tabComponent: "browserTab",
162974
- title: "New Tab",
162975
- params: {
162976
- workspaceId,
162977
- browserId,
162978
- ...initialUrl ? { initialUrl } : {}
162979
- }
162980
- };
162981
- if (groupId) {
162982
- options.position = {
162983
- referenceGroup: groupId
162984
- };
162985
- }
162986
- api.addPanel(options);
162987
- try {
162988
- await trpc.browsers.create.mutate({
162989
- workspaceId,
162990
- id: browserId,
162991
- ...initialUrl ? { url: initialUrl } : {}
162992
- });
162993
- } catch (err) {
162994
- console.error("[DockviewBrowserContainer] error pre-creating browser:", err);
162995
- }
162996
- },
162997
- [workspaceId]
162998
- );
162999
- const handleSplit = reactExports.useCallback(
163000
- async (groupId, direction) => {
163001
- const api = apiRef.current;
163002
- if (!api) return;
163003
- const browserId = newBrowserId();
163004
- markBrowserFresh(browserId);
163005
- try {
163006
- api.addPanel({
163007
- id: browserId,
163008
- component: "browserTab",
163009
- tabComponent: "browserTab",
163010
- title: "New Tab",
163011
- params: {
163012
- workspaceId,
163013
- browserId
163014
- },
163015
- position: {
163016
- referenceGroup: groupId,
163017
- direction
163018
- }
163019
- });
163020
- } catch (err) {
163021
- console.error("[DockviewBrowserContainer] split addPanel threw:", err);
163022
- return;
163023
- }
163024
- try {
163025
- await trpc.browsers.create.mutate({ workspaceId, id: browserId });
163026
- } catch (err) {
163027
- console.error("[DockviewBrowserContainer] error creating split browser:", err);
163028
- }
163029
- },
163030
- [workspaceId]
163031
- );
163032
- const closeTab = reactExports.useCallback((browserId) => {
163033
- const api = apiRef.current;
163034
- if (!api || api.panels.length <= 1) return;
163035
- selectNeighbourBeforeRemove(api, browserId);
163036
- const panel = api.getPanel(browserId);
163037
- if (panel) {
163038
- api.removePanel(panel);
163039
- }
163040
- requestAnimationFrame(() => {
163041
- const activePanel = api.activePanel;
163042
- if (!activePanel) return;
163043
- activePanel.view.content.element.querySelector("[data-band-address-input]")?.focus();
163044
- });
163045
- trpc.browsers.remove.mutate({ browserId }).catch((err) => {
163046
- console.error("[DockviewBrowserContainer] failed to remove browser:", err);
163047
- });
163048
- }, []);
163049
- reactExports.useEffect(() => {
163050
- if (!visible) return;
163051
- const refocusAddressBar = () => {
163052
- const panel = apiRef.current?.activePanel;
163053
- if (!panel) return;
163054
- panel.view.content.element.querySelector("[data-band-address-input]")?.focus();
163055
- };
163056
- const cycleTabs = (direction) => {
163057
- cycleTabsInActiveGroup(apiRef.current, direction, () => {
163058
- requestAnimationFrame(refocusAddressBar);
163059
- });
163060
- };
163061
- const cycleGroups = (direction) => {
163062
- cycleGridGroups(apiRef.current, direction, () => {
163063
- requestAnimationFrame(refocusAddressBar);
163064
- });
163065
- };
163066
- const handler = (e2) => {
163067
- if (!containerRef.current?.contains(document.activeElement)) return;
163068
- const key2 = e2.key.toLowerCase();
163069
- if (e2.ctrlKey && !e2.metaKey && key2 === "tab") {
163070
- e2.preventDefault();
163071
- e2.stopPropagation();
163072
- cycleTabs(e2.shiftKey ? -1 : 1);
163073
- return;
163074
- }
163075
- const mod = e2.metaKey || e2.ctrlKey;
163076
- if (!mod) return;
163077
- if (e2.shiftKey && (key2 === "[" || key2 === "]")) {
163078
- e2.preventDefault();
163079
- e2.stopPropagation();
163080
- cycleTabs(key2 === "]" ? 1 : -1);
163081
- return;
163082
- }
163083
- if (!e2.shiftKey && (key2 === "[" || key2 === "]")) {
163084
- e2.preventDefault();
163085
- e2.stopPropagation();
163086
- cycleGroups(key2 === "]" ? 1 : -1);
163087
- return;
163088
- }
163089
- if (key2 === "t" && !e2.shiftKey) {
163090
- e2.preventDefault();
163091
- e2.stopPropagation();
163092
- handleAddTab().then(() => {
163093
- requestAnimationFrame(() => {
163094
- const panel = apiRef.current?.activePanel;
163095
- if (!panel) return;
163096
- panel.view.content.element.querySelector("[data-band-address-input]")?.focus();
163097
- });
163098
- });
163099
- } else if (key2 === "w" && !e2.shiftKey) {
163100
- const api = apiRef.current;
163101
- if (!api || api.panels.length <= 1) return;
163102
- e2.preventDefault();
163103
- e2.stopPropagation();
163104
- const active = api.activePanel;
163105
- if (active) {
163106
- closeTab(active.id);
163107
- }
163108
- } else if (key2 === "d") {
163109
- e2.preventDefault();
163110
- e2.stopPropagation();
163111
- const api = apiRef.current;
163112
- if (!api) return;
163113
- const activeGroup = api.activeGroup;
163114
- if (!activeGroup) return;
163115
- const direction = e2.shiftKey ? "below" : "right";
163116
- handleSplit(activeGroup.id, direction);
163117
- } else if (key2 === "r" && !e2.shiftKey && isDesktop) {
163118
- const api = apiRef.current;
163119
- if (!api) return;
163120
- const active = api.activePanel;
163121
- const browserId = active?.params?.browserId;
163122
- if (!browserId) return;
163123
- e2.preventDefault();
163124
- e2.stopPropagation();
163125
- invoke("browser_reload", { browserId }).catch((err) => {
163126
- console.error("[DockviewBrowserContainer] browser_reload failed:", err);
163127
- });
163128
- }
163129
- };
163130
- window.addEventListener("keydown", handler, true);
163131
- return () => window.removeEventListener("keydown", handler, true);
163132
- }, [visible, closeTab, handleSplit, handleAddTab]);
163133
- reactExports.useEffect(() => {
163134
- if (!visible) return;
163135
- const id28 = requestAnimationFrame(() => {
163136
- const panel = apiRef.current?.activePanel;
163137
- if (!panel) return;
163138
- panel.view.content.element.querySelector("[data-band-address-input]")?.focus();
163139
- });
163140
- return () => cancelAnimationFrame(id28);
163141
- }, [visible]);
163142
- reactExports.useEffect(() => {
163143
- if (!isDesktop) return;
163144
- let unlisten;
163145
- void (async () => {
163146
- unlisten = await listen(
163147
- "browser-new-tab-shortcut",
163148
- (event) => {
163149
- const api = apiRef.current;
163150
- if (!api) return;
163151
- const sourceId = event.payload.browser_id;
163152
- if (!sourceId || !api.getPanel(sourceId)) return;
163153
- void handleAddTab().then(() => {
163154
- requestAnimationFrame(() => {
163155
- const panel = apiRef.current?.activePanel;
163156
- panel?.view.content.element.querySelector("[data-band-address-input]")?.focus();
163157
- });
163158
- });
163159
- }
163160
- );
163161
- })();
163162
- return () => unlisten?.();
163163
- }, [handleAddTab]);
163164
- reactExports.useEffect(() => {
163165
- if (!isDesktop) return;
163166
- let unlisten;
163167
- let cancelled = false;
163168
- void (async () => {
163169
- const fn2 = await listen("browser-open-window", (event) => {
163170
- const api = apiRef.current;
163171
- if (!api) return;
163172
- const sourceId = event.payload.browser_id;
163173
- const sourcePanel = sourceId ? api.getPanel(sourceId) : void 0;
163174
- if (!sourcePanel) return;
163175
- const groupId = sourcePanel.group?.id;
163176
- const url = event.payload.url;
163177
- if (!url) return;
163178
- void handleAddTab(groupId, { initialUrl: url }).then(() => {
163179
- requestAnimationFrame(() => {
163180
- const panel = apiRef.current?.activePanel;
163181
- panel?.view.content.element.querySelector("[data-band-address-input]")?.focus();
163182
- });
163183
- }).catch((err) => {
163184
- console.error("[DockviewBrowserContainer] browser-open-window add-tab failed:", err);
163185
- });
163186
- });
163187
- if (cancelled) fn2();
163188
- else unlisten = fn2;
163189
- })();
163190
- return () => {
163191
- cancelled = true;
163192
- unlisten?.();
163193
- };
163194
- }, [handleAddTab]);
163195
- reactExports.useEffect(() => {
163196
- if (!isDesktop) return;
163197
- const unlisteners = [];
163198
- let cancelled = false;
163199
- const refocusAddressBar = () => {
163200
- const panel = apiRef.current?.activePanel;
163201
- panel?.view.content.element.querySelector("[data-band-address-input]")?.focus();
163202
- };
163203
- void (async () => {
163204
- const fns = await Promise.all([
163205
- listen("browser-split-shortcut", (event) => {
163206
- const api = apiRef.current;
163207
- if (!api) return;
163208
- const sourcePanel = api.getPanel(event.payload.browser_id);
163209
- if (!sourcePanel?.group) return;
163210
- void handleSplit(sourcePanel.group.id, event.payload.direction);
163211
- }),
163212
- listen("browser-close-shortcut", (event) => {
163213
- const api = apiRef.current;
163214
- if (!api) return;
163215
- const sourceId = event.payload.browser_id;
163216
- if (!api.getPanel(sourceId)) return;
163217
- closeTab(sourceId);
163218
- }),
163219
- listen("browser-cycle-shortcut", (event) => {
163220
- const api = apiRef.current;
163221
- if (!api) return;
163222
- const sourcePanel = api.getPanel(event.payload.browser_id);
163223
- if (!sourcePanel) return;
163224
- sourcePanel.api.setActive();
163225
- const refocus = () => requestAnimationFrame(refocusAddressBar);
163226
- if (event.payload.target === "tabs") {
163227
- cycleTabsInActiveGroup(apiRef.current, event.payload.direction, refocus);
163228
- } else {
163229
- cycleGridGroups(apiRef.current, event.payload.direction, refocus);
163230
- }
163231
- })
163232
- ]);
163233
- if (cancelled) {
163234
- for (const fn2 of fns) fn2();
163235
- } else {
163236
- unlisteners.push(...fns);
163237
- }
163238
- })();
163239
- return () => {
163240
- cancelled = true;
163241
- for (const unlisten of unlisteners) unlisten();
163242
- };
163243
- }, [handleSplit, closeTab]);
163244
- reactExports.useEffect(() => {
163245
- const handler = () => {
163246
- const root2 = containerRef.current;
163247
- if (!root2 || root2.offsetParent === null) return;
163248
- const inputs = root2.querySelectorAll("[data-band-address-input]");
163249
- for (const input of inputs) {
163250
- if (input.offsetParent !== null) {
163251
- input.focus({ preventScroll: true });
163252
- return;
163253
- }
163254
- }
163255
- };
163256
- window.addEventListener("band:focus-browser", handler);
163257
- return () => window.removeEventListener("band:focus-browser", handler);
163258
- }, []);
163259
- reactExports.useEffect(() => {
163260
- return adapter2.subscribeStatusEvents((event) => {
163261
- if (event.workspaceId !== workspaceId) return;
163262
- const api = apiRef.current;
163263
- if (!api) return;
163264
- if (event.kind === "browser-created" && typeof event.browserId === "string") {
163265
- if (api.getPanel(event.browserId)) return;
163266
- api.addPanel({
163267
- id: event.browserId,
163268
- component: "browserTab",
163269
- tabComponent: "browserTab",
163270
- title: "New Tab",
163271
- params: { workspaceId, browserId: event.browserId }
163272
- });
163273
- } else if (event.kind === "browser-removed" && typeof event.browserId === "string") {
163274
- const panel = api.getPanel(event.browserId);
163275
- if (panel) {
163276
- api.removePanel(panel);
163277
- if (api.panels.length === 0) {
163278
- createDefaultPanel$1(api, workspaceId);
163279
- }
163280
- }
163281
- }
163282
- });
163283
- }, [adapter2, workspaceId]);
163284
- addTabRef$1.current = { onAdd: handleAddTab, onSplit: handleSplit };
163285
- closeTabRef$1.current = closeTab;
163286
- const initialLayoutRef = reactExports.useRef(null);
163287
- initialLayoutRef.current = initialData?.layout ?? null;
163288
- const initialBrowserIdsRef = reactExports.useRef(null);
163289
- initialBrowserIdsRef.current = initialData?.browserIds ?? null;
163290
- const initialUrlsRef = reactExports.useRef(null);
163291
- initialUrlsRef.current = initialData?.urls ?? null;
163292
- const onReady = reactExports.useCallback(
163293
- (event) => {
163294
- apiRef.current = event.api;
163295
- const savedLayout = initialLayoutRef.current;
163296
- const knownBrowserIds = initialBrowserIdsRef.current;
163297
- const knownUrls = initialUrlsRef.current;
163298
- if (savedLayout && isDockviewLayout$1(savedLayout)) {
163299
- isRestoringRef.current = true;
163300
- const layoutToRestore = injectInitialUrls(savedLayout, knownUrls);
163301
- try {
163302
- event.api.fromJSON(layoutToRestore);
163303
- } catch (err) {
163304
- console.error("[DockviewBrowserContainer] fromJSON failed, creating default:", err);
163305
- createDefaultPanel$1(event.api, workspaceId);
163306
- }
163307
- let dropped = 0;
163308
- if (knownBrowserIds) {
163309
- const orphans = event.api.panels.filter((p2) => !knownBrowserIds.has(p2.id));
163310
- for (const orphan of orphans) {
163311
- event.api.removePanel(orphan);
163312
- dropped++;
163313
- }
163314
- if (event.api.panels.length === 0) {
163315
- createDefaultPanel$1(event.api, workspaceId);
163316
- dropped++;
163317
- }
163318
- }
163319
- setTimeout(() => {
163320
- isRestoringRef.current = false;
163321
- }, 0);
163322
- if (dropped > 0) {
163323
- persistToServer$1(workspaceId, event.api.toJSON(), {
163324
- queryClient: queryClientRef.current
163325
- });
163326
- }
163327
- } else {
163328
- createDefaultPanel$1(event.api, workspaceId);
163329
- persistToServer$1(workspaceId, event.api.toJSON(), { queryClient: queryClientRef.current });
163330
- }
163331
- const persist = () => schedulePersist();
163332
- event.api.onDidLayoutChange(persist);
163333
- event.api.onDidAddPanel(persist);
163334
- event.api.onDidRemovePanel(persist);
163335
- event.api.onDidActivePanelChange(persist);
163336
- event.api.onDidAddGroup(persist);
163337
- event.api.onDidRemoveGroup(persist);
163338
- },
163339
- [workspaceId, schedulePersist]
163340
- );
163341
- const visibilityValue = reactExports.useMemo(
163342
- () => ({ visible: visible && wsActive !== false, wsActive: wsActive !== false }),
163343
- [visible, wsActive]
163344
- );
163345
- if (!initialData) {
163346
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full w-full items-center justify-center" });
163347
- }
163348
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: containerRef, className: "flex h-full w-full flex-col overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsx(BrowserVisibilityContext.Provider, { value: visibilityValue, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
163349
- DockviewReact,
163350
- {
163351
- theme: browserTabTheme,
163352
- className: "h-full",
163353
- components: browserPanelComponents,
163354
- tabComponents: browserTabComponents,
163355
- defaultTabComponent: BrowserTab,
163356
- onReady,
163357
- rightHeaderActionsComponent: RightHeaderActions$1
163358
- }
163359
- ) }) });
163360
- }
163361
- function createDefaultPanel$1(api, workspaceId) {
163362
- const browserId = newBrowserId();
163363
- trpc.browsers.create.mutate({ workspaceId, id: browserId }).catch((err) => {
163364
- console.error("[DockviewBrowserContainer] error creating default browser:", err);
163365
- });
163366
- api.addPanel({
163367
- id: browserId,
163368
- component: "browserTab",
163369
- tabComponent: "browserTab",
163370
- title: "Browser",
163371
- params: {
163372
- workspaceId,
163373
- browserId
163374
- }
163375
- });
163376
- }
163377
161546
  var marker = "vercel.ai.error";
163378
161547
  var symbol = Symbol.for(marker);
163379
161548
  var _a, _b;
@@ -174002,7 +172171,7 @@ const addTabRef = {
174002
172171
  const closeTabRef = {
174003
172172
  current: null
174004
172173
  };
174005
- const RightHeaderActions = React$1.memo(function RightHeaderActions22(props) {
172174
+ const RightHeaderActions = React$1.memo(function RightHeaderActions2(props) {
174006
172175
  const { onAdd: onAdd2, onSplit } = addTabRef.current;
174007
172176
  const groupId = props.group.id;
174008
172177
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full items-center", children: [
@@ -177453,10 +175622,15 @@ const PANEL_SHORTCUTS = {
177453
175622
  browser: "⇧⌘B"
177454
175623
  };
177455
175624
  const DockviewTerminalContainer = reactExports.lazy(
177456
- () => import("./DockviewTerminalContainer-Dl-H-7q5.js").then((m2) => ({
175625
+ () => import("./DockviewTerminalContainer-BbMZgBJ8.js").then((m2) => ({
177457
175626
  default: m2.DockviewTerminalContainer
177458
175627
  }))
177459
175628
  );
175629
+ const DockviewBrowserContainer = reactExports.lazy(
175630
+ () => import("./DockviewBrowserContainer-Bm7ARaqd.js").then((m2) => ({
175631
+ default: m2.DockviewBrowserContainer
175632
+ }))
175633
+ );
177460
175634
  const crossPanelHandlers = {
177461
175635
  onOpenFile: () => {
177462
175636
  },
@@ -177558,14 +175732,14 @@ function BrowserPanelComponent({ api }) {
177558
175732
  "to use it from a browser tab."
177559
175733
  ] }) });
177560
175734
  }
177561
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
175735
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
177562
175736
  DockviewBrowserContainer,
177563
175737
  {
177564
175738
  workspaceId,
177565
175739
  visible,
177566
175740
  wsActive
177567
175741
  }
177568
- );
175742
+ ) });
177569
175743
  } });
177570
175744
  }
177571
175745
  function DefaultTab2(props) {
@@ -177576,7 +175750,7 @@ function DefaultTab2(props) {
177576
175750
  const d2 = props.api.onDidTitleChange(() => setTitle(props.api.title ?? ""));
177577
175751
  return () => d2.dispose();
177578
175752
  }, [props.api]);
177579
- const tab2 = /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "dv-default-tab", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
175753
+ const tab2 = /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "dv-default-tab", "data-testid": `workspace__tab--${props.api.component}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
177580
175754
  "div",
177581
175755
  {
177582
175756
  className: "dv-default-tab-content",
@@ -177614,7 +175788,7 @@ function BadgeTab(props) {
177614
175788
  return () => d2.dispose();
177615
175789
  }, [props.api]);
177616
175790
  const hasBadge = badge != null && badge > 0;
177617
- const tab2 = /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "dv-default-tab", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
175791
+ const tab2 = /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "dv-default-tab", "data-testid": `workspace__tab--${props.api.component}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
177618
175792
  "div",
177619
175793
  {
177620
175794
  className: "dv-default-tab-content",
@@ -179001,11 +177175,11 @@ function RootLayout() {
179001
177175
  ] })
179002
177176
  ] });
179003
177177
  }
179004
- const $$splitComponentImporter$7 = () => import("./index-DIdSfU9-.js");
177178
+ const $$splitComponentImporter$7 = () => import("./index-6Zof9vm8.js");
179005
177179
  const Route$7 = createFileRoute("/")({
179006
177180
  component: lazyRouteComponent($$splitComponentImporter$7, "component")
179007
177181
  });
179008
- const $$splitComponentImporter$6 = () => import("./workspace._workspaceId-KoR0msx0.js");
177182
+ const $$splitComponentImporter$6 = () => import("./workspace._workspaceId-DwsRTXCg.js");
179009
177183
  const Route$6 = createFileRoute("/workspace/$workspaceId")({
179010
177184
  component: lazyRouteComponent($$splitComponentImporter$6, "component")
179011
177185
  });
@@ -179024,11 +177198,11 @@ const FindInFileContext = reactExports.createContext({
179024
177198
  function useFindInFileContext() {
179025
177199
  return reactExports.useContext(FindInFileContext);
179026
177200
  }
179027
- const $$splitComponentImporter$5 = () => import("./workspace._workspaceId.index-D1ULJxZJ.js");
177201
+ const $$splitComponentImporter$5 = () => import("./workspace._workspaceId.index-BPhXMwl8.js");
179028
177202
  const Route$5 = createFileRoute("/workspace/$workspaceId/")({
179029
177203
  component: lazyRouteComponent($$splitComponentImporter$5, "component")
179030
177204
  });
179031
- const $$splitComponentImporter$4 = () => import("./workspace._workspaceId.terminal-BaKW7ZGQ.js");
177205
+ const $$splitComponentImporter$4 = () => import("./workspace._workspaceId.terminal-BdVDaWNH.js");
179032
177206
  const Route$4 = createFileRoute("/workspace/$workspaceId/terminal")({
179033
177207
  component: lazyRouteComponent($$splitComponentImporter$4, "component")
179034
177208
  });
@@ -179036,15 +177210,15 @@ const $$splitComponentImporter$3 = () => import("./workspace._workspaceId.code-C
179036
177210
  const Route$3 = createFileRoute("/workspace/$workspaceId/code")({
179037
177211
  component: lazyRouteComponent($$splitComponentImporter$3, "component")
179038
177212
  });
179039
- const $$splitComponentImporter$2 = () => import("./workspace._workspaceId.changes-BJoSmFXW.js");
177213
+ const $$splitComponentImporter$2 = () => import("./workspace._workspaceId.changes-C6vwSbUh.js");
179040
177214
  const Route$2 = createFileRoute("/workspace/$workspaceId/changes")({
179041
177215
  component: lazyRouteComponent($$splitComponentImporter$2, "component")
179042
177216
  });
179043
- const $$splitComponentImporter$1 = () => import("./workspace._workspaceId.code.index-DZZZQ6sT.js");
177217
+ const $$splitComponentImporter$1 = () => import("./workspace._workspaceId.code.index-CE_CMD_I.js");
179044
177218
  const Route$1 = createFileRoute("/workspace/$workspaceId/code/")({
179045
177219
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
179046
177220
  });
179047
- const $$splitComponentImporter = () => import("./workspace._workspaceId.code._-D3Ifnqrr.js");
177221
+ const $$splitComponentImporter = () => import("./workspace._workspaceId.code._-BJdg1-Gs.js");
179048
177222
  const Route2 = createFileRoute("/workspace/$workspaceId/code/$")({
179049
177223
  component: lazyRouteComponent($$splitComponentImporter, "component")
179050
177224
  });
@@ -179277,7 +177451,7 @@ export {
179277
177451
  Language as by,
179278
177452
  indentUnit as bz,
179279
177453
  agentTypeSupportsSessionListing as c,
179280
- initCloneObject as c$,
177454
+ isObjectLike as c$,
179281
177455
  Qt$1 as c0,
179282
177456
  ToolbarOverflowProvider as c1,
179283
177457
  ToolbarOverflowMenuItems as c2,
@@ -179288,33 +177462,33 @@ export {
179288
177462
  ArrowDown as c7,
179289
177463
  ClipboardPaste as c8,
179290
177464
  getCurrentZoomLevel as c9,
179291
- extend$2 as cA,
179292
- Color as cB,
179293
- nogamma as cC,
179294
- hue as cD,
179295
- dayjs2 as cE,
179296
- setToString as cF,
179297
- overRest as cG,
179298
- baseFor as cH,
179299
- baseAssignValue as cI,
179300
- baseUnary as cJ,
179301
- merge$1 as cK,
179302
- isObjectLike as cL,
179303
- baseGetTag as cM,
179304
- Symbol$1 as cN,
179305
- arrayLikeKeys as cO,
179306
- baseKeys as cP,
179307
- memoize as cQ,
179308
- isArguments as cR,
179309
- copyObject as cS,
179310
- getPrototype as cT,
179311
- cloneArrayBuffer as cU,
179312
- cloneTypedArray as cV,
179313
- getTag as cW,
179314
- nodeUtil as cX,
179315
- copyArray as cY,
179316
- isBuffer as cZ,
179317
- cloneBuffer as c_,
177465
+ eq as cA,
177466
+ isArrayLike as cB,
177467
+ isArray as cC,
177468
+ identity as cD,
177469
+ isIndex as cE,
177470
+ assignValue as cF,
177471
+ constant$2 as cG,
177472
+ interpolateNumber as cH,
177473
+ color as cI,
177474
+ interpolateRgb as cJ,
177475
+ interpolateString as cK,
177476
+ styles2String as cL,
177477
+ isLabelStyle as cM,
177478
+ Rgb as cN,
177479
+ rgbConvert as cO,
177480
+ define as cP,
177481
+ extend$2 as cQ,
177482
+ Color as cR,
177483
+ nogamma as cS,
177484
+ hue as cT,
177485
+ dayjs2 as cU,
177486
+ setToString as cV,
177487
+ overRest as cW,
177488
+ baseFor as cX,
177489
+ baseAssignValue as cY,
177490
+ baseUnary as cZ,
177491
+ merge$1 as c_,
179318
177492
  openExternalUrl as ca,
179319
177493
  subscribeToZoomChanges as cb,
179320
177494
  SearchBar as cc,
@@ -179322,35 +177496,51 @@ export {
179322
177496
  getIconSVG as ce,
179323
177497
  registerIconPacks as cf,
179324
177498
  unknownIcon as cg,
179325
- isObject$1 as ch,
179326
- isIterateeCall as ci,
179327
- keysIn as cj,
179328
- eq as ck,
179329
- isArrayLike as cl,
179330
- isArray as cm,
179331
- identity as cn,
179332
- isIndex as co,
179333
- assignValue as cp,
179334
- constant$2 as cq,
179335
- interpolateNumber as cr,
179336
- color as cs,
179337
- interpolateRgb as ct,
179338
- interpolateString as cu,
179339
- styles2String as cv,
179340
- isLabelStyle as cw,
179341
- Rgb as cx,
179342
- rgbConvert as cy,
179343
- define as cz,
177499
+ invoke as ch,
177500
+ listen as ci,
177501
+ reactDomExports as cj,
177502
+ Globe as ck,
177503
+ Popover as cl,
177504
+ PopoverTrigger as cm,
177505
+ PopoverContent as cn,
177506
+ Search as co,
177507
+ Trash2 as cp,
177508
+ DropdownMenu as cq,
177509
+ DropdownMenuTrigger as cr,
177510
+ ChevronDown as cs,
177511
+ DropdownMenuContent as ct,
177512
+ DropdownMenuItem as cu,
177513
+ TriangleAlert as cv,
177514
+ RotateCw as cw,
177515
+ isObject$1 as cx,
177516
+ isIterateeCall as cy,
177517
+ keysIn as cz,
179344
177518
  Route$4 as d,
179345
- Stack as d0,
179346
- MapCache as d1,
179347
- Uint8Array$1 as d2,
179348
- isTypedArray as d3,
179349
- isLength as d4,
179350
- Set$1 as d5,
179351
- createAssigner as d6,
179352
- isPrototype as d7,
179353
- router as d8,
177519
+ baseGetTag as d0,
177520
+ Symbol$1 as d1,
177521
+ arrayLikeKeys as d2,
177522
+ baseKeys as d3,
177523
+ memoize as d4,
177524
+ isArguments as d5,
177525
+ copyObject as d6,
177526
+ getPrototype as d7,
177527
+ cloneArrayBuffer as d8,
177528
+ cloneTypedArray as d9,
177529
+ getTag as da,
177530
+ nodeUtil as db,
177531
+ copyArray as dc,
177532
+ isBuffer as dd,
177533
+ cloneBuffer as de,
177534
+ initCloneObject as df,
177535
+ Stack as dg,
177536
+ MapCache as dh,
177537
+ Uint8Array$1 as di,
177538
+ isTypedArray as dj,
177539
+ isLength as dk,
177540
+ Set$1 as dl,
177541
+ createAssigner as dm,
177542
+ isPrototype as dn,
177543
+ router as dp,
179354
177544
  Route$2 as e,
179355
177545
  useNavigate as f,
179356
177546
  useDiffStatsContext as g,