@hienlh/ppm 0.23.8 → 0.23.10

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 (448) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CLAUDE.md +4 -0
  3. package/assets/skills/ppm/SKILL.md +1 -1
  4. package/assets/skills/ppm/references/cli-reference.md +4 -4
  5. package/assets/skills/ppm/references/http-api.md +1 -1
  6. package/dist/web/assets/accounts-settings-section-BOBJbG7i.js +1 -0
  7. package/dist/web/assets/accounts-settings-section-BOBJbG7i.js.br +0 -0
  8. package/dist/web/assets/accounts-settings-section-BOBJbG7i.js.gz +0 -0
  9. package/dist/web/assets/agent-session-sheet-CjD4hBZV.js +2 -0
  10. package/dist/web/assets/agent-session-sheet-CjD4hBZV.js.br +0 -0
  11. package/dist/web/assets/agent-session-sheet-CjD4hBZV.js.gz +0 -0
  12. package/dist/web/assets/agent-session-sheet-store-BcQbnaV2.js +1 -0
  13. package/dist/web/assets/agent-session-window-content-Drm1HsSn.js +1 -0
  14. package/dist/web/assets/agent-session-window-content-Drm1HsSn.js.br +0 -0
  15. package/dist/web/assets/agent-session-window-content-Drm1HsSn.js.gz +0 -0
  16. package/dist/web/assets/{ai-resource-editor-DfVRMUHS.js → ai-resource-editor-M1Eax2Hc.js} +1 -1
  17. package/dist/web/assets/ai-resource-editor-M1Eax2Hc.js.br +0 -0
  18. package/dist/web/assets/ai-resource-editor-M1Eax2Hc.js.gz +0 -0
  19. package/dist/web/assets/ai-settings-section-B73t9SXm.js +1 -0
  20. package/dist/web/assets/{ai-settings-section-Ezhw4Fef.js → ai-settings-section-H173dm1k.js} +1 -1
  21. package/dist/web/assets/ai-settings-section-H173dm1k.js.br +0 -0
  22. package/dist/web/assets/ai-settings-section-H173dm1k.js.gz +0 -0
  23. package/dist/web/assets/{api-settings-tYKJ5Fqk.js → api-settings-BA_n8cPt.js} +1 -1
  24. package/dist/web/assets/{appearance-settings-section-CPOAp0fY.js → appearance-settings-section-Dqu20pt8.js} +1 -1
  25. package/dist/web/assets/appearance-settings-section-Dqu20pt8.js.br +0 -0
  26. package/dist/web/assets/appearance-settings-section-Dqu20pt8.js.gz +0 -0
  27. package/dist/web/assets/{apps-panel-Cz7_o-M4.js → apps-panel-mkrzY7K0.js} +1 -1
  28. package/dist/web/assets/apps-panel-mkrzY7K0.js.br +0 -0
  29. package/dist/web/assets/apps-panel-mkrzY7K0.js.gz +0 -0
  30. package/dist/web/assets/branch-review-tab-Dw3bNixU.js +1 -0
  31. package/dist/web/assets/branch-review-tab-Dw3bNixU.js.br +0 -0
  32. package/dist/web/assets/branch-review-tab-Dw3bNixU.js.gz +0 -0
  33. package/dist/web/assets/chat-tab-BAbcVFzD.js +15 -0
  34. package/dist/web/assets/chat-tab-BAbcVFzD.js.br +0 -0
  35. package/dist/web/assets/chat-tab-BAbcVFzD.js.gz +0 -0
  36. package/dist/web/assets/chat-tab-BaXGaBEC.js +1 -0
  37. package/dist/web/assets/chat-tab-BaXGaBEC.js.br +4 -0
  38. package/dist/web/assets/chat-tab-BaXGaBEC.js.gz +0 -0
  39. package/dist/web/assets/code-editor-CXLANXnI.js +7 -0
  40. package/dist/web/assets/code-editor-CXLANXnI.js.br +0 -0
  41. package/dist/web/assets/code-editor-CXLANXnI.js.gz +0 -0
  42. package/dist/web/assets/{codex-reset-credit-button-D2hal4bG.js → codex-reset-credit-button-CB8Dfhki.js} +1 -1
  43. package/dist/web/assets/codex-reset-credit-button-CB8Dfhki.js.br +0 -0
  44. package/dist/web/assets/codex-reset-credit-button-CB8Dfhki.js.gz +0 -0
  45. package/dist/web/assets/{conflict-editor-Cj_gUncw.js → conflict-editor-CKsxIw3v.js} +2 -2
  46. package/dist/web/assets/conflict-editor-CKsxIw3v.js.br +0 -0
  47. package/dist/web/assets/conflict-editor-CKsxIw3v.js.gz +0 -0
  48. package/dist/web/assets/{csv-preview-Be3ODNj0.js → csv-preview-U0v_r_-7.js} +1 -1
  49. package/dist/web/assets/csv-preview-U0v_r_-7.js.br +0 -0
  50. package/dist/web/assets/csv-preview-U0v_r_-7.js.gz +0 -0
  51. package/dist/web/assets/{database-viewer-B1b--4y8.js → database-viewer-xQyUcBoL.js} +1 -1
  52. package/dist/web/assets/database-viewer-xQyUcBoL.js.br +0 -0
  53. package/dist/web/assets/database-viewer-xQyUcBoL.js.gz +0 -0
  54. package/dist/web/assets/{design-tab-8wi0IHss.js → design-tab-aaAt2_QE.js} +4 -4
  55. package/dist/web/assets/design-tab-aaAt2_QE.js.br +0 -0
  56. package/dist/web/assets/design-tab-aaAt2_QE.js.gz +0 -0
  57. package/dist/web/assets/{designs-sidebar-panel-D5-1Q8zQ.js → designs-sidebar-panel-CTzO4Thu.js} +1 -1
  58. package/dist/web/assets/designs-sidebar-panel-CTzO4Thu.js.br +0 -0
  59. package/dist/web/assets/designs-sidebar-panel-CTzO4Thu.js.gz +0 -0
  60. package/dist/web/assets/{diff-viewer-Dcxk6UTG.js → diff-viewer-CSE2-OE7.js} +1 -1
  61. package/dist/web/assets/diff-viewer-CSE2-OE7.js.br +0 -0
  62. package/dist/web/assets/diff-viewer-CSE2-OE7.js.gz +0 -0
  63. package/dist/web/assets/{edit-diff-preview-DxDAtYhi.js → edit-diff-preview-gH6pRk4S.js} +1 -1
  64. package/dist/web/assets/edit-diff-preview-gH6pRk4S.js.br +0 -0
  65. package/dist/web/assets/{edit-diff-preview-DxDAtYhi.js.gz → edit-diff-preview-gH6pRk4S.js.gz} +0 -0
  66. package/dist/web/assets/{editor-language-service-BVJQnTSV.js → editor-language-service-CYl04pUy.js} +1 -1
  67. package/dist/web/assets/editor-language-service-CYl04pUy.js.br +0 -0
  68. package/dist/web/assets/editor-language-service-CYl04pUy.js.gz +0 -0
  69. package/dist/web/assets/explorer-body-BBOcvwmV.js +2 -0
  70. package/dist/web/assets/explorer-body-BBOcvwmV.js.br +0 -0
  71. package/dist/web/assets/explorer-body-BBOcvwmV.js.gz +0 -0
  72. package/dist/web/assets/{explorer-window-content-DH5AD3Ng.js → explorer-window-content-juCGcrkc.js} +1 -1
  73. package/dist/web/assets/explorer-window-content-juCGcrkc.js.br +0 -0
  74. package/dist/web/assets/explorer-window-content-juCGcrkc.js.gz +0 -0
  75. package/dist/web/assets/{extension-manager-section-BJr6ccWw.js → extension-manager-section-poMRmwvg.js} +1 -1
  76. package/dist/web/assets/extension-manager-section-poMRmwvg.js.br +0 -0
  77. package/dist/web/assets/extension-manager-section-poMRmwvg.js.gz +0 -0
  78. package/dist/web/assets/{extension-webview-CYNXHd8D.js → extension-webview-0QfzTI6s.js} +1 -1
  79. package/dist/web/assets/extension-webview-0QfzTI6s.js.br +0 -0
  80. package/dist/web/assets/extension-webview-0QfzTI6s.js.gz +0 -0
  81. package/dist/web/assets/{files-settings-section-JX7o4lex.js → files-settings-section-DJptxRgH.js} +1 -1
  82. package/dist/web/assets/files-settings-section-DJptxRgH.js.br +0 -0
  83. package/dist/web/assets/files-settings-section-DJptxRgH.js.gz +0 -0
  84. package/dist/web/assets/{general-settings-section-kF94Mz5q.js → general-settings-section-BFNbdDNv.js} +1 -1
  85. package/dist/web/assets/general-settings-section-BFNbdDNv.js.br +0 -0
  86. package/dist/web/assets/general-settings-section-BFNbdDNv.js.gz +0 -0
  87. package/dist/web/assets/{git-log-panel-Crlp9ofM.js → git-log-panel-SMMIbjSe.js} +1 -1
  88. package/dist/web/assets/git-log-panel-SMMIbjSe.js.br +0 -0
  89. package/dist/web/assets/git-log-panel-SMMIbjSe.js.gz +0 -0
  90. package/dist/web/assets/{glide-data-grid-O6MO5dKU.js → glide-data-grid-DZVmgu0T.js} +3 -3
  91. package/dist/web/assets/glide-data-grid-DZVmgu0T.js.br +0 -0
  92. package/dist/web/assets/glide-data-grid-DZVmgu0T.js.gz +0 -0
  93. package/dist/web/assets/group-chat-tab-d_aaYuK_.js +1 -0
  94. package/dist/web/assets/group-chat-tab-d_aaYuK_.js.br +0 -0
  95. package/dist/web/assets/group-chat-tab-d_aaYuK_.js.gz +0 -0
  96. package/dist/web/assets/{index-DQCw6d-2.js → index-CIscPw4g.js} +6 -6
  97. package/dist/web/assets/index-CIscPw4g.js.br +0 -0
  98. package/dist/web/assets/index-CIscPw4g.js.gz +0 -0
  99. package/dist/web/assets/{jira-watcher-section-DwM7gqHT.js → jira-watcher-section-CsbhnLLn.js} +1 -1
  100. package/dist/web/assets/keybindings-store-BPs0pM0r.js +1 -0
  101. package/dist/web/assets/{keyboard-shortcuts-section-CewWGwiF.js → keyboard-shortcuts-section-CXqc2OtM.js} +1 -1
  102. package/dist/web/assets/keyboard-shortcuts-section-CXqc2OtM.js.br +0 -0
  103. package/dist/web/assets/keyboard-shortcuts-section-CXqc2OtM.js.gz +0 -0
  104. package/dist/web/assets/{language-servers-section-nricdxke.js → language-servers-section-B4FsBVvZ.js} +2 -2
  105. package/dist/web/assets/language-servers-section-B4FsBVvZ.js.br +0 -0
  106. package/dist/web/assets/language-servers-section-B4FsBVvZ.js.gz +0 -0
  107. package/dist/web/assets/{lsp-client-DRMEWb-z.js → lsp-client-MQ4mjDfT.js} +1 -1
  108. package/dist/web/assets/lsp-client-MQ4mjDfT.js.br +0 -0
  109. package/dist/web/assets/lsp-client-MQ4mjDfT.js.gz +0 -0
  110. package/dist/web/assets/markdown-renderer-BvCZZlue.js +1 -0
  111. package/dist/web/assets/{markdown-renderer-Dab9Us6u.js → markdown-renderer-CjPb5pns.js} +3 -3
  112. package/dist/web/assets/markdown-renderer-CjPb5pns.js.br +0 -0
  113. package/dist/web/assets/markdown-renderer-CjPb5pns.js.gz +0 -0
  114. package/dist/web/assets/{mobile-explorer-sheet-DtgdpvJ9.js → mobile-explorer-sheet-0aGhVQtI.js} +1 -1
  115. package/dist/web/assets/mobile-explorer-sheet-0aGhVQtI.js.br +0 -0
  116. package/dist/web/assets/mobile-explorer-sheet-0aGhVQtI.js.gz +0 -0
  117. package/dist/web/assets/{new-design-dialog-Dd5KDB_p.js → new-design-dialog-2oT2oc_F.js} +1 -1
  118. package/dist/web/assets/new-design-dialog-2oT2oc_F.js.br +0 -0
  119. package/dist/web/assets/new-design-dialog-2oT2oc_F.js.gz +0 -0
  120. package/dist/web/assets/notification-store-Dd25PMPQ.js +1 -0
  121. package/dist/web/assets/{panel-store-DrSH3Nhp.js → panel-store-1X6yM3XZ.js} +1 -1
  122. package/dist/web/assets/panel-store-1X6yM3XZ.js.br +0 -0
  123. package/dist/web/assets/panel-store-1X6yM3XZ.js.gz +0 -0
  124. package/dist/web/assets/performance-panel-Ub96qrEH.js +3 -0
  125. package/dist/web/assets/performance-panel-Ub96qrEH.js.br +0 -0
  126. package/dist/web/assets/performance-panel-Ub96qrEH.js.gz +0 -0
  127. package/dist/web/assets/{ppmbot-settings-section-D67u6gPi.js → ppmbot-settings-section-CPMGP66g.js} +1 -1
  128. package/dist/web/assets/ppmbot-settings-section-CPMGP66g.js.br +0 -0
  129. package/dist/web/assets/ppmbot-settings-section-CPMGP66g.js.gz +0 -0
  130. package/dist/web/assets/{problems-panel-DKgIw4uZ.js → problems-panel-CWwzZIP3.js} +1 -1
  131. package/dist/web/assets/problems-panel-CWwzZIP3.js.br +0 -0
  132. package/dist/web/assets/problems-panel-CWwzZIP3.js.gz +0 -0
  133. package/dist/web/assets/process-table-BwPws3zS.js +1 -0
  134. package/dist/web/assets/process-table-BwPws3zS.js.br +0 -0
  135. package/dist/web/assets/process-table-BwPws3zS.js.gz +0 -0
  136. package/dist/web/assets/{proxy-settings-section-CFiYcTBA.js → proxy-settings-section-nS8VbxI_.js} +1 -1
  137. package/dist/web/assets/proxy-settings-section-nS8VbxI_.js.br +0 -0
  138. package/dist/web/assets/proxy-settings-section-nS8VbxI_.js.gz +0 -0
  139. package/dist/web/assets/{query-audit-section-BybgiPsc.js → query-audit-section-Dv5Pxn-w.js} +1 -1
  140. package/dist/web/assets/query-audit-section-Dv5Pxn-w.js.br +0 -0
  141. package/dist/web/assets/query-audit-section-Dv5Pxn-w.js.gz +0 -0
  142. package/dist/web/assets/{remote-desktop-clipboard-notice-Bs3fZSRw.js → remote-desktop-clipboard-notice-DEbdu0hC.js} +1 -1
  143. package/dist/web/assets/remote-desktop-clipboard-notice-DEbdu0hC.js.br +0 -0
  144. package/dist/web/assets/remote-desktop-clipboard-notice-DEbdu0hC.js.gz +0 -0
  145. package/dist/web/assets/remote-desktop-mobile-sheet-BJm-akVY.js +2 -0
  146. package/dist/web/assets/remote-desktop-mobile-sheet-BJm-akVY.js.br +0 -0
  147. package/dist/web/assets/remote-desktop-mobile-sheet-BJm-akVY.js.gz +0 -0
  148. package/dist/web/assets/{remote-desktop-mobile-view-DgGOfPVY.js → remote-desktop-mobile-view-DPdGFD6C.js} +1 -1
  149. package/dist/web/assets/remote-desktop-mobile-view-DPdGFD6C.js.br +0 -0
  150. package/dist/web/assets/remote-desktop-mobile-view-DPdGFD6C.js.gz +0 -0
  151. package/dist/web/assets/{remote-desktop-readiness-gate-DOWryrQx.js → remote-desktop-readiness-gate-DV7YgSpP.js} +1 -1
  152. package/dist/web/assets/remote-desktop-readiness-gate-DV7YgSpP.js.br +0 -0
  153. package/dist/web/assets/remote-desktop-readiness-gate-DV7YgSpP.js.gz +0 -0
  154. package/dist/web/assets/remote-desktop-window-content-BktcWMjD.js +1 -0
  155. package/dist/web/assets/remote-desktop-window-content-BktcWMjD.js.br +0 -0
  156. package/dist/web/assets/remote-desktop-window-content-BktcWMjD.js.gz +0 -0
  157. package/dist/web/assets/{run-in-terminal-Cdn9PaAl.js → run-in-terminal-B_PCeBqG.js} +1 -1
  158. package/dist/web/assets/{schedules-settings-section-DGhG-b5O.js → schedules-settings-section-B3HYKSVh.js} +1 -1
  159. package/dist/web/assets/schedules-settings-section-B3HYKSVh.js.br +0 -0
  160. package/dist/web/assets/schedules-settings-section-B3HYKSVh.js.gz +0 -0
  161. package/dist/web/assets/{send-to-chat-B09VjsB5.js → send-to-chat-Bjg6c8Ld.js} +1 -1
  162. package/dist/web/assets/send-to-chat-Bjg6c8Ld.js.br +0 -0
  163. package/dist/web/assets/send-to-chat-Bjg6c8Ld.js.gz +0 -0
  164. package/dist/web/assets/{services-panel-0klE3O4g.js → services-panel-D6k6AVS4.js} +1 -1
  165. package/dist/web/assets/services-panel-D6k6AVS4.js.br +0 -0
  166. package/dist/web/assets/services-panel-D6k6AVS4.js.gz +0 -0
  167. package/dist/web/assets/{settings-body-CfqpqFfq.js → settings-body-Cu0mNA5x.js} +2 -2
  168. package/dist/web/assets/settings-body-Cu0mNA5x.js.br +0 -0
  169. package/dist/web/assets/settings-body-Cu0mNA5x.js.gz +0 -0
  170. package/dist/web/assets/{settings-store-3jIBB8gx.js → settings-store-DIV25PM_.js} +2 -2
  171. package/dist/web/assets/settings-store-DIV25PM_.js.br +0 -0
  172. package/dist/web/assets/settings-store-DIV25PM_.js.gz +0 -0
  173. package/dist/web/assets/{settings-tab-CHweH5Nh.js → settings-tab-C-A6RNQ3.js} +1 -1
  174. package/dist/web/assets/{settings-window-content-C6Od3qV7.js → settings-window-content-48e5FJAq.js} +1 -1
  175. package/dist/web/assets/{sql-query-editor-ALQ5_X0j.js → sql-query-editor-CgGWYu9K.js} +1 -1
  176. package/dist/web/assets/sql-query-editor-CgGWYu9K.js.br +0 -0
  177. package/dist/web/assets/sql-query-editor-CgGWYu9K.js.gz +0 -0
  178. package/dist/web/assets/{sqlite-viewer-DKTty_jR.js → sqlite-viewer-Co1Oi3dv.js} +1 -1
  179. package/dist/web/assets/sqlite-viewer-Co1Oi3dv.js.br +0 -0
  180. package/dist/web/assets/sqlite-viewer-Co1Oi3dv.js.gz +0 -0
  181. package/dist/web/assets/{system-monitor-body-D6J6lq7-.js → system-monitor-body-DxPKVa-W.js} +2 -2
  182. package/dist/web/assets/system-monitor-body-DxPKVa-W.js.br +0 -0
  183. package/dist/web/assets/system-monitor-body-DxPKVa-W.js.gz +0 -0
  184. package/dist/web/assets/system-monitor-tab-4miOZuQQ.js +1 -0
  185. package/dist/web/assets/{system-monitor-window-content-D1t30f32.js → system-monitor-window-content-B-A7DdML.js} +1 -1
  186. package/dist/web/assets/{tab-host-window-content-DTcx2D0O.js → tab-host-window-content-CChcpg1v.js} +1 -1
  187. package/dist/web/assets/tab-host-window-content-CChcpg1v.js.br +0 -0
  188. package/dist/web/assets/tab-host-window-content-CChcpg1v.js.gz +0 -0
  189. package/dist/web/assets/{tab-store-CUPgQIQz.js → tab-store-D33icgdA.js} +1 -1
  190. package/dist/web/assets/{terminal-tab-DgTfQKBI.js → terminal-tab-BDqlyBLK.js} +2 -2
  191. package/dist/web/assets/terminal-tab-BDqlyBLK.js.br +0 -0
  192. package/dist/web/assets/terminal-tab-BDqlyBLK.js.gz +0 -0
  193. package/dist/web/assets/tool-cards-iJ8tyrLq.js +9 -0
  194. package/dist/web/assets/tool-cards-iJ8tyrLq.js.br +0 -0
  195. package/dist/web/assets/tool-cards-iJ8tyrLq.js.gz +0 -0
  196. package/dist/web/assets/{use-inline-blame-Dv111BKY.js → use-inline-blame-D9js570a.js} +4 -4
  197. package/dist/web/assets/use-inline-blame-D9js570a.js.br +0 -0
  198. package/dist/web/assets/use-inline-blame-D9js570a.js.gz +0 -0
  199. package/dist/web/assets/{use-lsp-CZTFJIXX.js → use-lsp-BYtylZId.js} +1 -1
  200. package/dist/web/assets/use-lsp-BYtylZId.js.br +0 -0
  201. package/dist/web/assets/use-lsp-BYtylZId.js.gz +0 -0
  202. package/dist/web/assets/{use-monaco-theme-DL2dIG5L.js → use-monaco-theme-DJ8y_7IZ.js} +1 -1
  203. package/dist/web/assets/{use-process-kill-D7D9QvJG.js → use-process-kill-BS84S-kD.js} +1 -1
  204. package/dist/web/assets/use-process-kill-BS84S-kD.js.br +0 -0
  205. package/dist/web/assets/use-process-kill-BS84S-kD.js.gz +0 -0
  206. package/dist/web/assets/{use-websocket-ziY-Gz_B.js → use-websocket-Mqj27umG.js} +1 -1
  207. package/dist/web/assets/{video-preview-DzwY3q9W.js → video-preview-BuzUAIma.js} +1 -1
  208. package/dist/web/assets/video-preview-BuzUAIma.js.br +0 -0
  209. package/dist/web/assets/video-preview-BuzUAIma.js.gz +0 -0
  210. package/dist/web/assets/{voice-settings-section-B7zMHsuz.js → voice-settings-section-DnwQjBbw.js} +1 -1
  211. package/dist/web/assets/voice-settings-section-DnwQjBbw.js.br +0 -0
  212. package/dist/web/assets/voice-settings-section-DnwQjBbw.js.gz +0 -0
  213. package/dist/web/assets/{window-pip-registry-dxrBFfkP.js → window-pip-registry-Bl--fK8-.js} +1 -1
  214. package/dist/web/assets/window-store-vo1N70nK.js +1 -0
  215. package/dist/web/assets/window-store-vo1N70nK.js.br +0 -0
  216. package/dist/web/assets/window-store-vo1N70nK.js.gz +0 -0
  217. package/dist/web/index.html +6 -6
  218. package/dist/web/index.html.br +0 -0
  219. package/dist/web/index.html.gz +0 -0
  220. package/dist/web/sw.js +1 -1
  221. package/dist/web/sw.js.br +0 -0
  222. package/dist/web/sw.js.gz +0 -0
  223. package/docs/architecture/ai-chat-and-providers.md +66 -0
  224. package/docs/architecture/workspace-and-ui.md +15 -3
  225. package/docs/design-guidelines.md +6 -1
  226. package/package.json +1 -1
  227. package/src/providers/codex-app-server/codex-history.ts +4 -4
  228. package/src/providers/codex-app-server/codex-provider.ts +1 -1
  229. package/src/providers/codex-app-server/codex-rollout-tail-parser.ts +203 -0
  230. package/src/providers/codex-app-server/codex-subagent-thread.ts +7 -1
  231. package/src/server/index.ts +7 -2
  232. package/src/server/routes/chat.ts +12 -4
  233. package/src/server/ws/global.ts +19 -3
  234. package/src/services/agent-transcript/agent-transcript-activity.ts +72 -0
  235. package/src/services/agent-transcript/agent-transcript-codex-activity.ts +161 -0
  236. package/src/services/agent-transcript/agent-transcript-codex-tail-cache.ts +85 -0
  237. package/src/services/agent-transcript/agent-transcript-envelope.ts +86 -0
  238. package/src/services/agent-transcript/agent-transcript-error-map.ts +33 -0
  239. package/src/services/agent-transcript/agent-transcript-file-tail-feed.ts +180 -0
  240. package/src/services/agent-transcript/agent-transcript-file-tail-state.ts +100 -0
  241. package/src/services/agent-transcript/agent-transcript-fs-io.ts +79 -0
  242. package/src/services/agent-transcript/agent-transcript-hub-clock.ts +37 -0
  243. package/src/services/agent-transcript/agent-transcript-hub-registry.ts +153 -0
  244. package/src/services/agent-transcript/agent-transcript-hub.ts +103 -0
  245. package/src/services/agent-transcript/agent-transcript-index-cache.ts +85 -0
  246. package/src/services/agent-transcript/agent-transcript-session-hub-activity.ts +103 -0
  247. package/src/services/agent-transcript/agent-transcript-session-hub-read.ts +194 -0
  248. package/src/services/agent-transcript/agent-transcript-session-hub-types.ts +81 -0
  249. package/src/services/agent-transcript/agent-transcript-session-hub.ts +196 -0
  250. package/src/services/agent-transcript/agent-transcript-sources.ts +199 -0
  251. package/src/services/agent-transcript/agent-transcript-ws-like.ts +19 -0
  252. package/src/services/agent-transcript/claude-projects-root.ts +21 -0
  253. package/src/services/agent-transcript/session-ownership.ts +152 -0
  254. package/src/services/nested-subagent-spy.ts +3 -3
  255. package/src/services/subagent-transcript-merger.ts +21 -7
  256. package/src/shared/agent-transcript-protocol.ts +158 -0
  257. package/src/types/chat.ts +27 -3
  258. package/src/web/app.tsx +5 -5
  259. package/src/web/components/chat/agent-card-summary.tsx +73 -0
  260. package/src/web/components/chat/agent-session-context.ts +34 -0
  261. package/src/web/components/chat/agent-session-fallback-store.ts +60 -0
  262. package/src/web/components/chat/agent-session-sheet-store.ts +23 -0
  263. package/src/web/components/chat/{team-member-sheet.tsx → agent-session-sheet.tsx} +12 -12
  264. package/src/web/components/chat/agent-session-window-content.tsx +133 -0
  265. package/src/web/components/chat/chat-history-bar.tsx +1 -0
  266. package/src/web/components/chat/chat-tab.tsx +21 -4
  267. package/src/web/components/chat/codex-usage-panel.tsx +26 -8
  268. package/src/web/components/chat/running-agents-bar.tsx +93 -0
  269. package/src/web/components/chat/team-activity-panel.tsx +19 -5
  270. package/src/web/components/chat/tool-cards.tsx +73 -4
  271. package/src/web/components/chat/use-open-agent-session.ts +83 -0
  272. package/src/web/components/floating-window/window-content-registry.ts +4 -5
  273. package/src/web/components/floating-window/window-geometry.ts +18 -0
  274. package/src/web/components/floating-window/window-persistence.ts +5 -4
  275. package/src/web/components/floating-window/window-store-types.ts +1 -1
  276. package/src/web/components/settings/resolve-open-settings-action.ts +1 -1
  277. package/src/web/components/system/resolve-open-system-monitor-action.ts +1 -1
  278. package/src/web/hooks/use-agent-activity.ts +65 -0
  279. package/src/web/hooks/use-agent-session-stream.ts +134 -0
  280. package/src/web/hooks/use-chat.ts +12 -18
  281. package/src/web/hooks/use-global-events.ts +35 -2
  282. package/src/web/lib/agent-session-stream-merge.ts +48 -0
  283. package/src/web/lib/agent-step-summary.ts +331 -0
  284. package/src/web/lib/global-ws-channel.ts +41 -0
  285. package/src/web/lib/running-agent-rows.ts +115 -0
  286. package/dist/web/assets/accounts-settings-section-BNcPvEq1.js +0 -1
  287. package/dist/web/assets/accounts-settings-section-BNcPvEq1.js.br +0 -0
  288. package/dist/web/assets/accounts-settings-section-BNcPvEq1.js.gz +0 -0
  289. package/dist/web/assets/ai-resource-editor-DfVRMUHS.js.br +0 -0
  290. package/dist/web/assets/ai-resource-editor-DfVRMUHS.js.gz +0 -0
  291. package/dist/web/assets/ai-settings-section-B_0-P8jx.js +0 -1
  292. package/dist/web/assets/ai-settings-section-Ezhw4Fef.js.br +0 -0
  293. package/dist/web/assets/ai-settings-section-Ezhw4Fef.js.gz +0 -0
  294. package/dist/web/assets/appearance-settings-section-CPOAp0fY.js.br +0 -0
  295. package/dist/web/assets/appearance-settings-section-CPOAp0fY.js.gz +0 -0
  296. package/dist/web/assets/apps-panel-Cz7_o-M4.js.br +0 -0
  297. package/dist/web/assets/apps-panel-Cz7_o-M4.js.gz +0 -0
  298. package/dist/web/assets/branch-review-tab-BPx3kHrM.js +0 -1
  299. package/dist/web/assets/branch-review-tab-BPx3kHrM.js.br +0 -0
  300. package/dist/web/assets/branch-review-tab-BPx3kHrM.js.gz +0 -0
  301. package/dist/web/assets/chat-tab-BadDM_j8.js +0 -1
  302. package/dist/web/assets/chat-tab-BadDM_j8.js.br +0 -0
  303. package/dist/web/assets/chat-tab-BadDM_j8.js.gz +0 -0
  304. package/dist/web/assets/chat-tab-IqAY4c7p.js +0 -15
  305. package/dist/web/assets/chat-tab-IqAY4c7p.js.br +0 -0
  306. package/dist/web/assets/chat-tab-IqAY4c7p.js.gz +0 -0
  307. package/dist/web/assets/code-editor-Dmitw9QS.js +0 -7
  308. package/dist/web/assets/code-editor-Dmitw9QS.js.br +0 -0
  309. package/dist/web/assets/code-editor-Dmitw9QS.js.gz +0 -0
  310. package/dist/web/assets/codex-reset-credit-button-D2hal4bG.js.br +0 -0
  311. package/dist/web/assets/codex-reset-credit-button-D2hal4bG.js.gz +0 -0
  312. package/dist/web/assets/conflict-editor-Cj_gUncw.js.br +0 -0
  313. package/dist/web/assets/conflict-editor-Cj_gUncw.js.gz +0 -0
  314. package/dist/web/assets/csv-preview-Be3ODNj0.js.br +0 -0
  315. package/dist/web/assets/csv-preview-Be3ODNj0.js.gz +0 -0
  316. package/dist/web/assets/database-viewer-B1b--4y8.js.br +0 -0
  317. package/dist/web/assets/database-viewer-B1b--4y8.js.gz +0 -0
  318. package/dist/web/assets/design-tab-8wi0IHss.js.br +0 -0
  319. package/dist/web/assets/design-tab-8wi0IHss.js.gz +0 -0
  320. package/dist/web/assets/designs-sidebar-panel-D5-1Q8zQ.js.br +0 -0
  321. package/dist/web/assets/designs-sidebar-panel-D5-1Q8zQ.js.gz +0 -0
  322. package/dist/web/assets/diff-viewer-Dcxk6UTG.js.br +0 -0
  323. package/dist/web/assets/diff-viewer-Dcxk6UTG.js.gz +0 -0
  324. package/dist/web/assets/edit-diff-preview-DxDAtYhi.js.br +0 -0
  325. package/dist/web/assets/editor-language-service-BVJQnTSV.js.br +0 -0
  326. package/dist/web/assets/editor-language-service-BVJQnTSV.js.gz +0 -0
  327. package/dist/web/assets/explorer-body-CTkrlrI3.js +0 -2
  328. package/dist/web/assets/explorer-body-CTkrlrI3.js.br +0 -0
  329. package/dist/web/assets/explorer-body-CTkrlrI3.js.gz +0 -0
  330. package/dist/web/assets/explorer-window-content-DH5AD3Ng.js.br +0 -0
  331. package/dist/web/assets/explorer-window-content-DH5AD3Ng.js.gz +0 -0
  332. package/dist/web/assets/extension-manager-section-BJr6ccWw.js.br +0 -0
  333. package/dist/web/assets/extension-manager-section-BJr6ccWw.js.gz +0 -0
  334. package/dist/web/assets/extension-webview-CYNXHd8D.js.br +0 -0
  335. package/dist/web/assets/extension-webview-CYNXHd8D.js.gz +0 -0
  336. package/dist/web/assets/files-settings-section-JX7o4lex.js.br +0 -0
  337. package/dist/web/assets/files-settings-section-JX7o4lex.js.gz +0 -0
  338. package/dist/web/assets/general-settings-section-kF94Mz5q.js.br +0 -0
  339. package/dist/web/assets/general-settings-section-kF94Mz5q.js.gz +0 -0
  340. package/dist/web/assets/git-log-panel-Crlp9ofM.js.br +0 -0
  341. package/dist/web/assets/git-log-panel-Crlp9ofM.js.gz +0 -0
  342. package/dist/web/assets/glide-data-grid-O6MO5dKU.js.br +0 -0
  343. package/dist/web/assets/glide-data-grid-O6MO5dKU.js.gz +0 -0
  344. package/dist/web/assets/group-chat-tab-DGLSGf37.js +0 -1
  345. package/dist/web/assets/group-chat-tab-DGLSGf37.js.br +0 -0
  346. package/dist/web/assets/group-chat-tab-DGLSGf37.js.gz +0 -0
  347. package/dist/web/assets/index-DQCw6d-2.js.br +0 -0
  348. package/dist/web/assets/index-DQCw6d-2.js.gz +0 -0
  349. package/dist/web/assets/keybindings-store-CJtEHFIQ.js +0 -1
  350. package/dist/web/assets/keyboard-shortcuts-section-CewWGwiF.js.br +0 -0
  351. package/dist/web/assets/keyboard-shortcuts-section-CewWGwiF.js.gz +0 -0
  352. package/dist/web/assets/language-servers-section-nricdxke.js.br +0 -0
  353. package/dist/web/assets/language-servers-section-nricdxke.js.gz +0 -0
  354. package/dist/web/assets/lsp-client-DRMEWb-z.js.br +0 -0
  355. package/dist/web/assets/lsp-client-DRMEWb-z.js.gz +0 -0
  356. package/dist/web/assets/markdown-renderer-D5-xliE9.js +0 -1
  357. package/dist/web/assets/markdown-renderer-Dab9Us6u.js.br +0 -0
  358. package/dist/web/assets/markdown-renderer-Dab9Us6u.js.gz +0 -0
  359. package/dist/web/assets/mobile-explorer-sheet-DtgdpvJ9.js.br +0 -0
  360. package/dist/web/assets/mobile-explorer-sheet-DtgdpvJ9.js.gz +0 -0
  361. package/dist/web/assets/new-design-dialog-Dd5KDB_p.js.br +0 -0
  362. package/dist/web/assets/new-design-dialog-Dd5KDB_p.js.gz +0 -0
  363. package/dist/web/assets/notification-store-D2vTyp_Q.js +0 -1
  364. package/dist/web/assets/panel-store-DrSH3Nhp.js.br +0 -0
  365. package/dist/web/assets/panel-store-DrSH3Nhp.js.gz +0 -0
  366. package/dist/web/assets/performance-panel-LMGefOQ2.js +0 -3
  367. package/dist/web/assets/performance-panel-LMGefOQ2.js.br +0 -0
  368. package/dist/web/assets/performance-panel-LMGefOQ2.js.gz +0 -0
  369. package/dist/web/assets/ppmbot-settings-section-D67u6gPi.js.br +0 -0
  370. package/dist/web/assets/ppmbot-settings-section-D67u6gPi.js.gz +0 -0
  371. package/dist/web/assets/problems-panel-DKgIw4uZ.js.br +0 -0
  372. package/dist/web/assets/problems-panel-DKgIw4uZ.js.gz +0 -0
  373. package/dist/web/assets/process-table-BIAgC_jG.js +0 -1
  374. package/dist/web/assets/process-table-BIAgC_jG.js.br +0 -0
  375. package/dist/web/assets/process-table-BIAgC_jG.js.gz +0 -0
  376. package/dist/web/assets/proxy-settings-section-CFiYcTBA.js.br +0 -0
  377. package/dist/web/assets/proxy-settings-section-CFiYcTBA.js.gz +0 -0
  378. package/dist/web/assets/query-audit-section-BybgiPsc.js.br +0 -0
  379. package/dist/web/assets/query-audit-section-BybgiPsc.js.gz +0 -0
  380. package/dist/web/assets/remote-desktop-clipboard-notice-Bs3fZSRw.js.br +0 -0
  381. package/dist/web/assets/remote-desktop-clipboard-notice-Bs3fZSRw.js.gz +0 -0
  382. package/dist/web/assets/remote-desktop-mobile-sheet-DgxTdWMh.js +0 -2
  383. package/dist/web/assets/remote-desktop-mobile-sheet-DgxTdWMh.js.br +0 -0
  384. package/dist/web/assets/remote-desktop-mobile-sheet-DgxTdWMh.js.gz +0 -0
  385. package/dist/web/assets/remote-desktop-mobile-view-DgGOfPVY.js.br +0 -0
  386. package/dist/web/assets/remote-desktop-mobile-view-DgGOfPVY.js.gz +0 -0
  387. package/dist/web/assets/remote-desktop-readiness-gate-DOWryrQx.js.br +0 -0
  388. package/dist/web/assets/remote-desktop-readiness-gate-DOWryrQx.js.gz +0 -0
  389. package/dist/web/assets/remote-desktop-window-content-7t0wQsHx.js +0 -1
  390. package/dist/web/assets/remote-desktop-window-content-7t0wQsHx.js.br +0 -0
  391. package/dist/web/assets/remote-desktop-window-content-7t0wQsHx.js.gz +0 -0
  392. package/dist/web/assets/schedules-settings-section-DGhG-b5O.js.br +0 -0
  393. package/dist/web/assets/schedules-settings-section-DGhG-b5O.js.gz +0 -0
  394. package/dist/web/assets/send-to-chat-B09VjsB5.js.br +0 -0
  395. package/dist/web/assets/send-to-chat-B09VjsB5.js.gz +0 -0
  396. package/dist/web/assets/services-panel-0klE3O4g.js.br +0 -0
  397. package/dist/web/assets/services-panel-0klE3O4g.js.gz +0 -0
  398. package/dist/web/assets/settings-body-CfqpqFfq.js.br +0 -0
  399. package/dist/web/assets/settings-body-CfqpqFfq.js.gz +0 -0
  400. package/dist/web/assets/settings-store-3jIBB8gx.js.br +0 -0
  401. package/dist/web/assets/settings-store-3jIBB8gx.js.gz +0 -0
  402. package/dist/web/assets/sql-query-editor-ALQ5_X0j.js.br +0 -0
  403. package/dist/web/assets/sql-query-editor-ALQ5_X0j.js.gz +0 -0
  404. package/dist/web/assets/sqlite-viewer-DKTty_jR.js.br +0 -0
  405. package/dist/web/assets/sqlite-viewer-DKTty_jR.js.gz +0 -0
  406. package/dist/web/assets/system-monitor-body-D6J6lq7-.js.br +0 -0
  407. package/dist/web/assets/system-monitor-body-D6J6lq7-.js.gz +0 -0
  408. package/dist/web/assets/system-monitor-tab-Di18zNNS.js +0 -1
  409. package/dist/web/assets/tab-host-window-content-DTcx2D0O.js.br +0 -0
  410. package/dist/web/assets/tab-host-window-content-DTcx2D0O.js.gz +0 -0
  411. package/dist/web/assets/team-member-sheet-CFSbPG6n.js +0 -2
  412. package/dist/web/assets/team-member-sheet-CFSbPG6n.js.br +0 -0
  413. package/dist/web/assets/team-member-sheet-CFSbPG6n.js.gz +0 -0
  414. package/dist/web/assets/team-member-window-content-VeI6DGeM.js +0 -1
  415. package/dist/web/assets/team-member-window-content-VeI6DGeM.js.br +0 -0
  416. package/dist/web/assets/team-member-window-content-VeI6DGeM.js.gz +0 -0
  417. package/dist/web/assets/terminal-tab-DgTfQKBI.js.br +0 -0
  418. package/dist/web/assets/terminal-tab-DgTfQKBI.js.gz +0 -0
  419. package/dist/web/assets/tool-cards-_fpYI1hB.js +0 -9
  420. package/dist/web/assets/tool-cards-_fpYI1hB.js.br +0 -0
  421. package/dist/web/assets/tool-cards-_fpYI1hB.js.gz +0 -0
  422. package/dist/web/assets/use-inline-blame-Dv111BKY.js.br +0 -0
  423. package/dist/web/assets/use-inline-blame-Dv111BKY.js.gz +0 -0
  424. package/dist/web/assets/use-lsp-CZTFJIXX.js.br +0 -0
  425. package/dist/web/assets/use-lsp-CZTFJIXX.js.gz +0 -0
  426. package/dist/web/assets/use-open-team-member-ElN3KmCI.js +0 -1
  427. package/dist/web/assets/use-process-kill-D7D9QvJG.js.br +0 -0
  428. package/dist/web/assets/use-process-kill-D7D9QvJG.js.gz +0 -0
  429. package/dist/web/assets/video-preview-DzwY3q9W.js.br +0 -0
  430. package/dist/web/assets/video-preview-DzwY3q9W.js.gz +0 -0
  431. package/dist/web/assets/voice-settings-section-B7zMHsuz.js.br +0 -0
  432. package/dist/web/assets/voice-settings-section-B7zMHsuz.js.gz +0 -0
  433. package/dist/web/assets/window-store-B4cbZ5rr.js +0 -1
  434. package/dist/web/assets/window-store-B4cbZ5rr.js.br +0 -0
  435. package/dist/web/assets/window-store-B4cbZ5rr.js.gz +0 -0
  436. package/src/web/components/chat/team-member-window-content.tsx +0 -66
  437. package/src/web/components/chat/team-working-bar.tsx +0 -62
  438. package/src/web/components/chat/use-open-team-member.ts +0 -41
  439. package/src/web/hooks/use-member-transcript-tail.ts +0 -95
  440. /package/dist/web/assets/{api-settings-BeINN5Dy.js → api-settings-BWgfXl7o.js} +0 -0
  441. /package/dist/web/assets/{api-settings-BeINN5Dy.js.br → api-settings-BWgfXl7o.js.br} +0 -0
  442. /package/dist/web/assets/{api-settings-BeINN5Dy.js.gz → api-settings-BWgfXl7o.js.gz} +0 -0
  443. /package/dist/web/assets/{libesm-CxeQSM3t.js → libesm-DAF5_F99.js} +0 -0
  444. /package/dist/web/assets/{libesm-CxeQSM3t.js.br → libesm-DAF5_F99.js.br} +0 -0
  445. /package/dist/web/assets/{libesm-CxeQSM3t.js.gz → libesm-DAF5_F99.js.gz} +0 -0
  446. /package/dist/web/assets/{onboarding-entry-DD3QSDiz.js → onboarding-entry-Bh-WE3vq.js} +0 -0
  447. /package/dist/web/assets/{onboarding-entry-DD3QSDiz.js.br → onboarding-entry-Bh-WE3vq.js.br} +0 -0
  448. /package/dist/web/assets/{onboarding-entry-DD3QSDiz.js.gz → onboarding-entry-Bh-WE3vq.js.gz} +0 -0
@@ -1,7 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-renderer-D5-xliE9.js","assets/vendor-ui-P9Ym7hCv.js","assets/rolldown-runtime-C5c2KzVm.js","assets/vendor-markdown-QKPNiWEd.js","assets/markdown-renderer-Dab9Us6u.js","assets/index-DQCw6d-2.js","assets/preload-helper-BEFjQwLd.js","assets/button-CsmGH5xa.js","assets/utils-btZ8C8-R.js","assets/createLucideIcon-DBXq3G0e.js","assets/api-client-F5Zi1sR0.js","assets/react-CzUPVyyG.js","assets/panel-store-DrSH3Nhp.js","assets/window-store-B4cbZ5rr.js","assets/project-store-CCimwgGF.js","assets/settings-store-3jIBB8gx.js","assets/file-store-DCU7_YyB.js","assets/window-pip-registry-dxrBFfkP.js","assets/onboarding-quick-orientation-WLKI95GY.js","assets/dialog-z8PLkL8n.js","assets/portal-container-context-NFSuymMu.js","assets/icons-CO_II6D-.js","assets/use-is-mobile-CkO33jqU.js","assets/format-file-meta-B0ZpqzSM.js","assets/fs-api-vF_bQoeL.js","assets/context-menu-CH1mvCwA.js","assets/input-CP31LZnN.js","assets/mobile-bottom-sheet-CLic9ovp.js","assets/use-visual-viewport-C307OVeV.js","assets/scroll-area-Dp-P38kg.js","assets/chat-preparation-cache-DoS7sdal.js","assets/file-icons-Ed_yLyef.js","assets/format-date-Fd9tpNaw.js","assets/git-repo-store-CdoOpvmf.js","assets/ws-auth-J3hw0Mhc.js","assets/tab-store-CUPgQIQz.js","assets/apply-theme-aVoqSG0I.js","assets/resolve-theme-B87m6l4i.js","assets/index-BmsPSBtF.css","assets/image-gallery-FN-9YT5_.js","assets/run-in-terminal-Cdn9PaAl.js","assets/editor-language-service-BVJQnTSV.js","assets/use-lsp-CZTFJIXX.js","assets/lsp-client-DRMEWb-z.js","assets/csv-preview-Be3ODNj0.js","assets/lib-g-qFlogj.js","assets/csv-parser-CoLcPhFa.js","assets/image-preview-DuODZoNO.js","assets/use-blob-url-B3R1DMZ0.js","assets/pdf-preview-PWDBbNwt.js","assets/video-preview-DzwY3q9W.js","assets/can-open-in-ppm-B9ZwTOGE.js","assets/media-url-mOPwQ_ey.js","assets/audio-preview-BrS2qNK0.js","assets/docx-preview-b-Ui9jDq.js"])))=>i.map(i=>d[i]);
2
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{$r as r,An as i,Br as a,Dt as o,Fr as s,Jr as c,Lt as l,Qr as u,Tr as d,Yn as f,Z as p,_r as ee,at as te,bt as ne,ct as m,dt as re,gr as ie,ir as ae,j as oe,lt as se,nt as ce,pt as h,q as g,qr as _,r as v,rr as y,st as b,un as x,vt as le,w as ue,yt as S}from"./icons-CO_II6D-.js";import{t as de}from"./createLucideIcon-DBXq3G0e.js";import{o as fe,r as C}from"./api-client-F5Zi1sR0.js";import{t as w}from"./settings-store-3jIBB8gx.js";import{t as T}from"./preload-helper-BEFjQwLd.js";import{t as E}from"./utils-btZ8C8-R.js";import"./portal-container-context-NFSuymMu.js";import{t as pe}from"./panel-store-DrSH3Nhp.js";import"./window-store-B4cbZ5rr.js";import{i as me}from"./project-store-CCimwgGF.js";import{t as D}from"./tab-store-CUPgQIQz.js";import{o as O}from"./file-store-DCU7_YyB.js";import{n as he,t as ge}from"./use-is-mobile-CkO33jqU.js";import"./git-repo-store-CdoOpvmf.js";import{t as _e}from"./button-CsmGH5xa.js";import{a as ve,i as ye,n as be,o as xe,t as Se}from"./dialog-z8PLkL8n.js";import"./file-icons-Ed_yLyef.js";import{t as Ce}from"./mobile-bottom-sheet-CLic9ovp.js";import"./use-visual-viewport-C307OVeV.js";import"./fs-api-vF_bQoeL.js";import"./format-file-meta-B0ZpqzSM.js";import{t as k}from"./input-CP31LZnN.js";import"./scroll-area-Dp-P38kg.js";import{A as we,Cn as Te,Ct as Ee,Dn as A,En as De,Ln as Oe,On as ke,Pt as Ae,Sn as je,Tn as j,Tt as M,_n as N,bn as P,gn as Me,k as Ne,v as Pe,vn as F,wn as Fe,wt as Ie,yn as I,zn as Le}from"./index-DQCw6d-2.js";import"./data-grid-types-DatI2Wee.js";import"./marked.esm-BHcxKPtl.js";import{t as Re}from"./use-monaco-theme-DL2dIG5L.js";import{n as ze,t as Be}from"./editor-font-BWW2uS94.js";import{t as Ve}from"./use-inline-blame-Dv111BKY.js";import{n as He,r as Ue}from"./monaco-dotenv-language-CQpgAhmX.js";import{i as We,n as Ge,r as Ke,t as qe}from"./can-open-in-ppm-B9ZwTOGE.js";import{a as Je,i as Ye,o as Xe,r as Ze,t as Qe}from"./glide-data-grid-O6MO5dKU.js";var $e=de(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),L=e(t(),1),R=n();function et({projectName:e,filePath:t,tabId:n,ready:r,children:i}){let a=(0,L.useRef)(null),o=D(e=>e.activeTabId);return(0,L.useEffect)(()=>{let i=()=>{if(!r||!e||!t||!n||o!==n)return;let i=!!a.current?.checkVisibility({checkOpacity:!0,checkVisibilityCSS:!0});i&&Ae({type:`file-ready`,projectName:e,tabId:n,visible:i,isRunDocument:/^readme(?:\.[^/\\]+)?$/i.test(t.split(/[/\\]/).pop()??``)})};return i(),window.addEventListener(`ppm:onboarding-refresh`,i),()=>window.removeEventListener(`ppm:onboarding-refresh`,i)},[e,t,n,r,o]),(0,R.jsx)(`div`,{ref:a,className:`flex flex-1 min-h-0 flex-col`,children:i})}var tt=[`completionItems`,`hovers`,`documentSymbols`,`definitions`,`references`,`documentHighlights`,`rename`,`diagnostics`,`documentRangeFormattingEdits`,`signatureHelp`,`onTypeFormattingEdits`,`codeActions`,`inlayHints`];function nt(e){return Object.fromEntries(tt.map(t=>[t,e]))}var rt=nt(!1),it=nt(!0),z={noSemanticValidation:!0,noSyntaxValidation:!0,noSuggestionDiagnostics:!0},at=1;function ot(e,t){for(let n of[e,t])n.setModeConfiguration({...rt}),n.setDiagnosticsOptions({...z})}function B(e,t){for(let n of[e,t])n.setCompilerOptions({...n.getCompilerOptions(),jsx:at,allowJs:!0,allowNonTsExtensions:!0}),n.setModeConfiguration({...it}),n.setDiagnosticsOptions({...z})}function st(e,t,n){e?ot(t,n):B(t,n)}function ct({enabled:e,onToggle:t,status:n,diagnostics:i,onInstall:a}){let[o,s]=(0,L.useState)(!1),c=he();if(!e)return(0,R.jsxs)(`button`,{type:`button`,onClick:()=>t(!0),title:`Language server: off. Turn it on for completions, hover, go to definition, rename and quick fix from a real server. It runs as a process on the host.`,className:`flex items-center gap-1 rounded px-1.5 text-xs text-muted-foreground hover:bg-muted active:scale-95 transition-colors ${c?`min-h-11`:`py-0.5`}`,children:[(0,R.jsx)(r,{className:`size-3 shrink-0`}),(0,R.jsx)(`span`,{children:`LSP off`})]});if(!n)return null;let l=i.filter(e=>e.severity===1).length,d=i.filter(e=>e.severity===2).length,f=n.state===`ready`?n.server.displayName:n.state===`opening`?`Starting…`:n.server?.displayName??`No server`,p=n.state===`unavailable`&&n.reason===`not-installed`;return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(`button`,{type:`button`,onClick:()=>s(!0),title:n.state===`ready`?`${n.server.displayName} — rooted at ${n.server.rootPath}`:n.state===`unavailable`?n.message:`Starting the language server`,className:`flex items-center gap-1 rounded px-1.5 hover:bg-muted active:scale-95 transition-colors text-xs ${c?`min-h-11`:`py-0.5`} ${p?`text-amber-500`:`text-muted-foreground`}`,children:[n.state===`opening`?(0,R.jsx)(x,{className:`size-3 animate-spin shrink-0`}):p?(0,R.jsx)(v,{className:`size-3 shrink-0`}):(0,R.jsx)(u,{className:`size-3 shrink-0`}),(0,R.jsx)(`span`,{className:`max-w-24 truncate`,children:f}),l>0&&(0,R.jsx)(`span`,{className:`text-red-500`,children:l}),l===0&&d>0&&(0,R.jsx)(`span`,{className:`text-amber-500`,children:d})]}),o&&(0,R.jsx)(V,{status:n,errors:l,warnings:d,isMobile:c,onToggle:t,onInstall:a,onClose:()=>s(!1)})]})}function V({status:e,errors:t,warnings:n,isMobile:r,onToggle:i,onInstall:a,onClose:o}){let s=(0,R.jsx)(lt,{status:e,errors:t,warnings:n,isMobile:r,onToggle:i,onInstall:a});return r?(0,R.jsx)(Ce,{open:!0,onClose:o,className:`popover-solid max-h-[85dvh] flex flex-col`,children:s}):(0,R.jsx)(Se,{open:!0,onOpenChange:e=>!e&&o(),children:(0,R.jsxs)(be,{className:`sm:max-w-lg`,children:[(0,R.jsx)(xe,{children:`Language server`}),s]})})}function lt({status:e,errors:t,warnings:n,isMobile:r,onToggle:i,onInstall:a}){return(0,R.jsxs)(`div`,{className:`p-4 space-y-4 overflow-y-auto text-sm leading-relaxed`,children:[e.state===`ready`&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(H,{label:`Server`,value:e.server.displayName}),(0,R.jsx)(H,{label:`Language`,value:e.languageId}),(0,R.jsx)(H,{label:`Project root`,value:e.server.rootPath,mono:!0}),(0,R.jsx)(H,{label:`Problems`,value:`${t} error${t===1?``:`s`}, ${n} warning${n===1?``:`s`}`}),(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Completions, hover, go to definition (F12), find references (Shift+F12), rename (F2), quick fix (Ctrl+.) and format (Shift+Alt+F) all come from this server.`})]}),e.state===`opening`&&(0,R.jsx)(`p`,{className:`text-muted-foreground`,children:`Starting the language server. A cold start reads the project's dependencies, so the first completion in a large project can take a few seconds.`}),e.state===`unavailable`&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{children:e.message}),e.server&&(0,R.jsxs)(`div`,{className:`space-y-2`,children:[e.reason===`not-installed`&&e.server.installable&&a?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:ut(e.server.installWith)}),(0,R.jsx)(ft,{server:e.server,isMobile:r,onInstall:a}),(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Or run it yourself:`})]}):(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:dt(e.server.installWith)}),(0,R.jsx)(pt,{command:e.server.installHint,isMobile:r})]}),e.reason===`no-language`&&(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No language server is registered for this file type.`})]}),(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-3 border-t border-border pt-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`p`,{className:`text-xs font-medium`,children:`Language server`}),(0,R.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`On for this device. Turning it off stops the process.`})]}),(0,R.jsx)(Ee,{checked:!0,onCheckedChange:e=>i(e)})]})]})}function ut(e){switch(e){case`go`:return`PPM builds it with the Go on this machine and keeps the binary in its own folder, leaving your GOBIN alone. A first build takes a minute or two.`;case`rustup`:return`PPM asks rustup to add the component to the toolchain this project uses — the same as running the command below yourself.`;default:return`PPM downloads it from npm into its own folder. Nothing you installed globally changes, and this file picks it up without being reopened.`}}function dt(e){switch(e){case`go`:return`Install it, then reopen this file. PPM installs language servers but never toolchains, and it cannot find a Go on this host.`;case`rustup`:return`Install it, then reopen this file. PPM installs language servers but never toolchains, and it cannot find rustup on this host.`;default:return`Install it, then reopen this file. This one comes from a system package manager, which PPM will not run on your behalf.`}}function ft({server:e,isMobile:t,onInstall:n}){let[r,i]=(0,L.useState)(!1),[a,o]=(0,L.useState)(null);return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(_e,{type:`button`,disabled:r,onClick:()=>{i(!0),o(null),n(e.id).catch(e=>o(e instanceof Error?e.message:String(e))).finally(()=>i(!1))},className:`w-full ${t?`min-h-11`:``}`,children:[r?(0,R.jsx)(x,{className:`size-4 animate-spin`}):(0,R.jsx)(b,{className:`size-4`}),r?`Installing ${e.displayName}…`:`Install ${e.displayName}`]}),a&&(0,R.jsx)(`p`,{className:`text-xs text-red-500 break-words`,children:a})]})}function H({label:e,value:t,mono:n}){return(0,R.jsxs)(`div`,{className:`flex gap-2 items-baseline`,children:[(0,R.jsx)(`span`,{className:`text-muted-foreground shrink-0 w-24 text-xs`,children:e}),(0,R.jsx)(`span`,{className:`min-w-0 break-all ${n?`font-mono text-xs`:``}`,children:t})]})}function pt({command:e,isMobile:t}){let[n,r]=(0,L.useState)(!1);return(0,R.jsxs)(`button`,{type:`button`,onClick:()=>{navigator.clipboard?.writeText(e).then(()=>{r(!0),setTimeout(()=>r(!1),1500)})},className:`w-full flex items-center gap-2 rounded border border-border bg-muted/40 px-3 text-left font-mono text-xs hover:bg-muted active:scale-[0.99] transition ${t?`min-h-11 py-3`:`py-2`}`,children:[(0,R.jsx)(`span`,{className:`flex-1 break-all`,children:e}),n?(0,R.jsx)(ue,{className:`size-3.5 shrink-0 text-green-500`}):(0,R.jsx)(ce,{className:`size-3.5 shrink-0 opacity-60`})]})}function mt(e){let t=e.startsWith(`/`),n=e.split(/[/\\]/).filter(Boolean),r=e=>{let r=(t?`/`:``)+n.slice(0,e+1).join(`/`);return/^[A-Za-z]:$/.test(r)?r+`/`:r},i=t?`/`:(n[0]??``)+`/`;return n.map((e,t)=>({name:e,absPath:r(t),parentDir:t>0?r(t-1):i}))}async function ht(e){return(await C.get(`/api/fs/browse?path=${encodeURIComponent(e)}`)).entries}function U({filePath:e,projectName:t,tabId:n,className:r}){let{updateTab:i,openTab:a}=D(Me(e=>({updateTab:e.updateTab,openTab:e.openTab}))),o=(0,L.useRef)(null),s=(0,L.useMemo)(()=>mt(e),[e]);(0,L.useEffect)(()=>{o.current&&(o.current.scrollLeft=o.current.scrollWidth)},[s]);let c=(0,L.useCallback)((e,r)=>{let o=E(e),s={filePath:e,projectName:t};r.metaKey||r.ctrlKey?a({type:`editor`,title:o,metadata:s,projectId:t,closable:!0}):i(n,{title:o,metadata:s})},[t,n,a,i]);return(0,R.jsx)(`div`,{ref:o,className:r,children:s.map((e,t)=>(0,R.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[t>0&&(0,R.jsx)(oe,{className:`size-3 text-muted-foreground shrink-0 mx-0.5`}),(0,R.jsx)(W,{segment:e,isLast:t===s.length-1,onFileClick:c})]},e.absPath))})}function W({segment:e,isLast:t,onFileClick:n}){let[r,i]=(0,L.useState)(null),[a,o]=(0,L.useState)(null);function s(t){t&&r===null&&ht(e.parentDir).then(i).catch(e=>{o(e.message||`Failed to browse`),i([])})}return(0,R.jsxs)(N,{onOpenChange:s,children:[(0,R.jsx)(ke,{asChild:!0,children:(0,R.jsx)(`button`,{type:`button`,className:`text-xs px-1 py-0.5 rounded hover:bg-muted transition-colors truncate max-w-[120px] ${t?`text-foreground font-medium`:`text-muted-foreground`}`,children:e.name})}),(0,R.jsx)(I,{align:`start`,className:`max-h-[300px] overflow-y-auto p-1`,children:r===null?(0,R.jsx)(P,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):a?(0,R.jsx)(P,{disabled:!0,className:`text-xs text-destructive`,children:a}):r.length===0?(0,R.jsx)(P,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Empty`}):r.map(t=>(0,R.jsx)(gt,{entry:t,activePath:e.absPath,onFileClick:n},t.path))})]})}function gt({entry:e,activePath:t,onFileClick:n}){let r=G(e.name,e.type===`directory`),i=e.path===t,[a,o]=(0,L.useState)(null);if(e.type===`directory`){function s(t){t&&a===null&&ht(e.path).then(o).catch(()=>o([]))}return(0,R.jsxs)(j,{onOpenChange:s,children:[(0,R.jsxs)(A,{className:`text-xs gap-1.5 ${i?`bg-muted`:``}`,children:[(0,R.jsx)(r,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,R.jsx)(`span`,{className:`truncate`,children:e.name})]}),(0,R.jsx)(De,{className:`max-h-[300px] overflow-y-auto p-1`,children:a===null?(0,R.jsx)(P,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):a.length===0?(0,R.jsx)(P,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Empty`}):a.map(e=>(0,R.jsx)(gt,{entry:e,activePath:t,onFileClick:n},e.path))})]})}return(0,R.jsxs)(P,{className:`text-xs gap-1.5 cursor-pointer ${i?`bg-muted`:``}`,onClick:t=>n(e.path,t),children:[(0,R.jsx)(r,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,R.jsx)(`span`,{className:`truncate`,children:e.name})]})}var _t={ts:h,tsx:h,js:h,jsx:h,py:h,rs:h,go:h,html:h,css:h,scss:h,json:$e,md:le,txt:le,yaml:S,yml:S};function G(e,t){return t?o:_t[e.split(`.`).pop()?.toLowerCase()??``]??re}function K(e,t){let n=[],r=e,i=``;for(let e=0;e<t.length;e++){let a=t[e],o=t.slice(0,e+1).join(`/`),s=r.find(e=>e.name===a);if(n.push({name:a,fullPath:o,node:s??null,siblings:r,parentPath:i}),s?.children)i=s.path,r=s.children;else{for(let r=e+1;r<t.length;r++)n.push({name:t[r],fullPath:t.slice(0,r+1).join(`/`),node:null,siblings:[],parentPath:t.slice(0,r).join(`/`)});break}}return n}function vt(e){return[...e].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1)}function yt({filePath:e,projectName:t,tabId:n,className:r}){let i=O(e=>e.tree),{updateTab:a,openTab:o}=D(Me(e=>({updateTab:e.updateTab,openTab:e.openTab}))),s=me(e=>e.projects.find(e=>e.name===t)?.path??``),c=(0,L.useRef)(null),{prefixParts:l,relativePath:u,isExternal:d}=(0,L.useMemo)(()=>{let t=e.startsWith(`/`)?e.slice(1):e,n=s.startsWith(`/`)?s.slice(1):s;if(n&&t.startsWith(n+`/`)){let e=t.slice(n.length+1);return{prefixParts:n.split(`/`),relativePath:e,isExternal:!1}}return{prefixParts:[],relativePath:t,isExternal:/^(\/|[A-Za-z]:[/\\])/.test(e)}},[e,s]),f=(0,L.useMemo)(()=>K(i,u.split(`/`).filter(Boolean)),[i,u]);(0,L.useEffect)(()=>{c.current&&(c.current.scrollLeft=c.current.scrollWidth)},[f]);function p(e,r){let i=E(e);r.metaKey||r.ctrlKey?o({type:`editor`,title:i,metadata:{filePath:e,projectName:t},projectId:t,closable:!0}):a(n,{title:i,metadata:{filePath:e,projectName:t}})}return d?(0,R.jsx)(U,{filePath:e,projectName:t,tabId:n,className:r}):(0,R.jsxs)(`div`,{ref:c,className:r,children:[l.map((e,t)=>(0,R.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[t>0&&(0,R.jsx)(oe,{className:`size-3 text-muted-foreground shrink-0 mx-0.5`}),(0,R.jsx)(`span`,{className:`text-xs text-muted-foreground px-1 py-0.5`,children:e})]},`prefix-${t}`)),f.map((e,n)=>(0,R.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[(n>0||l.length>0)&&(0,R.jsx)(oe,{className:`size-3 text-muted-foreground shrink-0 mx-0.5`}),(0,R.jsx)(bt,{segment:e,isLast:n===f.length-1,projectName:t,onFileClick:p})]},e.fullPath))]})}function bt({segment:e,isLast:t,projectName:n,onFileClick:r}){let i=O(e=>e.loadChildren),a=O(e=>e.loadedPaths),o=(0,L.useMemo)(()=>vt(e.siblings),[e.siblings]),s=a.has(e.parentPath);function c(t){if(t&&!s){let t=e.parentPath.split(`/`).filter(Boolean);(async()=>{for(let e=0;e<=t.length;e++)await i(n,t.slice(0,e).join(`/`))})()}}return(0,R.jsxs)(N,{onOpenChange:c,children:[(0,R.jsx)(ke,{asChild:!0,children:(0,R.jsx)(`button`,{type:`button`,className:`text-xs px-1 py-0.5 rounded hover:bg-muted transition-colors truncate max-w-[120px] ${t?`text-foreground font-medium`:`text-muted-foreground`}`,children:e.name})}),(0,R.jsx)(I,{align:`start`,className:`max-h-[300px] p-1`,children:o.length===0?(0,R.jsx)(P,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):o.map(t=>(0,R.jsx)(xt,{node:t,projectName:n,activePath:e.fullPath,onFileClick:r},t.path))})]})}function xt({node:e,projectName:t,activePath:n,onFileClick:r}){let i=G(e.name,e.type===`directory`),a=e.path===n,o=O(e=>e.loadChildren),s=O(e=>e.loadedPaths);if(e.type===`directory`){let c=e.children??[],l=s.has(e.path);function u(n){n&&!l&&o(t,e.path)}return(0,R.jsxs)(j,{onOpenChange:u,children:[(0,R.jsxs)(A,{className:`text-xs gap-1.5 ${a?`bg-muted`:``}`,children:[(0,R.jsx)(i,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,R.jsx)(`span`,{className:`truncate`,children:e.name})]}),(0,R.jsx)(De,{className:`max-h-[300px] overflow-y-auto p-1`,children:c.length===0?(0,R.jsx)(P,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):vt(c).map(e=>(0,R.jsx)(xt,{node:e,projectName:t,activePath:n,onFileClick:r},e.path))})]})}return(0,R.jsxs)(P,{className:`text-xs gap-1.5 cursor-pointer ${a?`bg-muted`:``}`,onSelect:e=>{},onClick:t=>{r(e.path,t)},children:[(0,R.jsx)(i,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,R.jsx)(`span`,{className:`truncate`,children:e.name})]})}function q({active:e,onClick:t,icon:n,label:r,title:i}){return(0,R.jsxs)(`button`,{type:`button`,title:i,onClick:t,className:`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${e?`bg-muted text-foreground`:`text-muted-foreground hover:text-foreground`}`,children:[(0,R.jsx)(n,{className:`size-3`}),(0,R.jsx)(`span`,{className:`hidden sm:inline`,children:r})]})}function St({ext:e,mdMode:t,onMdModeChange:n,csvMode:r,onCsvModeChange:i,wordWrap:o,onToggleWordWrap:s,inlineBlame:c,onToggleInlineBlame:l,blameStale:u,onRefresh:f,refreshing:ee,filePath:te,projectName:ne,className:m}){return(0,R.jsxs)(`div`,{className:m,children:[(e===`md`||e===`mdx`)&&n&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(q,{active:t===`edit`,onClick:()=>n(`edit`),icon:p,label:`Edit`}),(0,R.jsx)(q,{active:t===`preview`,onClick:()=>n(`preview`),icon:se,label:`Preview`})]}),e===`csv`&&i&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(q,{active:r===`table`,onClick:()=>i(`table`),icon:d,label:`Table`}),(0,R.jsx)(q,{active:r===`raw`,onClick:()=>i(`raw`),icon:p,label:`Raw`})]}),(0,R.jsx)(q,{active:o,onClick:s,icon:_,label:`Wrap`}),l&&(0,R.jsx)(q,{active:c===!0,onClick:l,icon:a,label:`Blame`,title:c&&u?`Blame is hidden until this file is saved — the line numbers have moved`:`Inline blame (Alt+B)`}),f&&(0,R.jsxs)(`button`,{type:`button`,onClick:f,disabled:ee,title:`Reload file from disk`,className:`flex items-center gap-1 px-2 py-1 rounded text-xs text-muted-foreground hover:text-foreground transition-colors disabled:opacity-50`,children:[(0,R.jsx)(ae,{className:`size-3 ${ee?`animate-spin`:``}`}),(0,R.jsx)(`span`,{className:`hidden sm:inline`,children:`Refresh`})]}),te&&ne&&(0,R.jsx)(q,{active:!1,onClick:()=>Oe(ne,te),icon:b,label:`Download`})]})}function Ct({filePath:e,projectName:t,revision:n}){let[r,i]=(0,L.useState)(),[a,o]=(0,L.useState)();return(0,L.useEffect)(()=>{let n=new AbortController;i(void 0),o(void 0);let r=setTimeout(()=>n.abort(Error(`Preview request timed out. Try Refresh.`)),3e4),a=!0;return C.post(`/api/html-preview`,{filePath:e,projectName:t},{signal:n.signal}).then(e=>{a&&i(e.url)}).catch(e=>{a&&o(e instanceof Error?e.message:`Could not open HTML preview`)}).finally(()=>clearTimeout(r)),()=>{a=!1,clearTimeout(r),n.abort()}},[e,t,n]),a?(0,R.jsxs)(`div`,{role:`alert`,className:`p-4 text-sm text-destructive`,children:[a,`. Use Refresh to retry.`]}):r?(0,R.jsx)(`iframe`,{title:`HTML preview`,src:r,sandbox:`allow-scripts`,referrerPolicy:`no-referrer`,className:`flex-1 min-h-0 w-full border-0 bg-white`}):(0,R.jsxs)(`div`,{role:`status`,className:`flex flex-1 items-center justify-center gap-2 text-sm text-muted-foreground`,children:[(0,R.jsx)(x,{className:`size-5 animate-spin`}),`Loading preview…`]})}var wt=[{id:`plaintext`,label:`Plain Text`},{id:`javascript`,label:`JavaScript`},{id:`typescript`,label:`TypeScript`},{id:`sql`,label:`SQL`},{id:`json`,label:`JSON`},{id:`xml`,label:`XML`},{id:`html`,label:`HTML`},{id:`css`,label:`CSS`},{id:`python`,label:`Python`},{id:`markdown`,label:`Markdown`},{id:`yaml`,label:`YAML`},{id:`shell`,label:`Shell`},{id:`dotenv`,label:`Dotenv`}];function Tt({value:e,onChange:t}){return(0,R.jsxs)(`div`,{className:`shrink-0 flex items-center gap-1 px-2 border-l border-border`,children:[(0,R.jsx)(h,{className:`size-3 text-muted-foreground`}),(0,R.jsx)(`select`,{value:e,onChange:e=>t(e.target.value),className:`h-5 text-[10px] bg-transparent border border-border rounded px-1 text-foreground outline-none max-w-[120px]`,title:`Select editor language`,children:wt.map(e=>(0,R.jsx)(`option`,{value:e.id,children:e.label},e.id))})]})}var J=`flex items-center justify-center gap-1.5 rounded px-2 min-h-11 min-w-11 md:min-h-7 md:min-w-7 text-xs text-muted-foreground hover:text-foreground hover:bg-muted`,Y=`min-h-11 md:min-h-8 px-2`,Et=`${Y} pr-8 [&>span]:left-auto [&>span]:right-2`;function Dt(e){let{mode:t,onModeChange:n,onRefresh:r,unsaved:o,breadcrumb:s}=e;return(0,R.jsxs)(`div`,{className:`flex items-center gap-2 md:gap-1 border-b border-border bg-background px-2 shrink-0 h-12 md:h-8`,role:`toolbar`,"aria-label":`HTML preview`,children:[(0,R.jsx)(`div`,{className:`hidden md:flex flex-1 min-w-0 overflow-hidden`,children:s}),t===`preview`&&(0,R.jsx)(`button`,{type:`button`,onClick:r,title:`Reload the original HTML file`,"aria-label":`Refresh preview`,className:J,children:(0,R.jsx)(ae,{className:`size-4`})}),[[`edit`,`Code`,p],[`preview`,`Preview`,se]].map(([e,r,i])=>(0,R.jsxs)(`button`,{type:`button`,"aria-pressed":t===e,onClick:()=>n(e),className:`${J} ${t===e?`bg-muted text-foreground`:``}`,children:[(0,R.jsx)(i,{className:`size-3.5`}),r]},e)),o&&(0,R.jsx)(`span`,{role:`status`,title:`Preview uses the saved file`,"aria-label":`Preview uses the saved file`,className:`text-amber-500 text-xs`,children:`●`}),(0,R.jsxs)(N,{children:[(0,R.jsx)(ke,{asChild:!0,children:(0,R.jsx)(`button`,{type:`button`,title:`More HTML actions`,"aria-label":`More HTML actions`,className:`${J} ml-auto md:ml-0`,children:(0,R.jsx)(i,{className:`size-4`})})}),(0,R.jsxs)(I,{align:`end`,className:`w-52`,children:[t===`edit`&&(0,R.jsxs)(P,{className:Y,disabled:o||e.refreshing,onSelect:e.onReloadCode,children:[(0,R.jsx)(ae,{}),`Reload code from disk`]}),(0,R.jsxs)(P,{className:Y,onSelect:()=>void Oe(e.projectName??``,e.filePath),children:[(0,R.jsx)(b,{}),`Download`]}),(0,R.jsx)(Fe,{}),(0,R.jsxs)(F,{className:Et,checked:e.wordWrap,onCheckedChange:e.onToggleWordWrap,children:[(0,R.jsx)(_,{className:`size-4 text-muted-foreground`}),`Word wrap`]}),e.onToggleInlineBlame&&(0,R.jsxs)(F,{className:Et,checked:e.inlineBlame,onCheckedChange:e.onToggleInlineBlame,children:[(0,R.jsx)(a,{className:`size-4 text-muted-foreground`}),`Inline blame`]}),e.onToggleLsp&&(0,R.jsxs)(F,{className:Et,checked:e.lspEnabled,onCheckedChange:e.onToggleLsp,children:[(0,R.jsx)(u,{className:`size-4 text-muted-foreground`}),`Language server`]}),(0,R.jsxs)(j,{children:[(0,R.jsxs)(A,{className:`${Y} gap-2`,children:[(0,R.jsx)(h,{className:`size-4 text-muted-foreground`}),`Editor language`]}),(0,R.jsx)(De,{className:`max-h-80 overflow-y-auto`,children:(0,R.jsx)(je,{value:e.language,onValueChange:e.onLanguageChange,children:wt.map(e=>(0,R.jsx)(Te,{className:`min-h-11 md:min-h-8`,value:e.id,children:e.label},e.id))})})]})]})]})]})}function Ot({open:e,defaultName:t,content:n,onSave:r,onCancel:i}){let[a,o]=(0,L.useState)(t),[s,c]=(0,L.useState)(!1),[l,u]=(0,L.useState)(``),d=me(e=>e.activeProject),f=(0,L.useCallback)(()=>{let e=a.trim();if(!e){u(`Filename cannot be empty`);return}if(/[/\\]/.test(e)){u(`Filename cannot contain / or \\`);return}u(``),c(!0)},[a]),p=(0,L.useCallback)(e=>{let t=e.includes(`\\`)?`\\`:`/`;r(e.endsWith(t)?`${e}${a.trim()}`:`${e}${t}${a.trim()}`,n)},[a,n,r]);return s?(0,R.jsx)(M,{open:!0,mode:`folder`,root:d?.path,title:`Save "${a.trim()}" to...`,onSelect:p,onCancel:()=>c(!1)}):(0,R.jsx)(Se,{open:e,onOpenChange:e=>{e||i()},children:(0,R.jsxs)(be,{className:`sm:max-w-md`,children:[(0,R.jsx)(ve,{children:(0,R.jsx)(xe,{children:`Save As`})}),(0,R.jsxs)(`div`,{className:`flex flex-col gap-2 py-2`,children:[(0,R.jsx)(`label`,{className:`text-sm text-muted-foreground`,children:`Filename`}),(0,R.jsx)(k,{value:a,onChange:e=>{o(e.target.value),u(``)},onKeyDown:e=>{e.key===`Enter`&&f()},placeholder:`e.g. my-file.ts`,autoFocus:!0}),l&&(0,R.jsx)(`p`,{className:`text-xs text-destructive`,children:l})]}),(0,R.jsxs)(ye,{children:[(0,R.jsx)(_e,{variant:`outline`,onClick:i,children:`Cancel`}),(0,R.jsx)(_e,{onClick:f,children:`Choose Folder...`})]})]})})}var kt=typeof window<`u`&&window.isSecureContext,At=[`(`,`)`,`{`,`}`,`[`,`]`,`<`,`>`,`;`,`:`,`=`,`"`,`'`,"`",`/`,`\\`,`_`,`#`],X=`px-2 py-1.5 rounded text-xs min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,jt=`px-3 py-1.5 rounded text-xs font-mono min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,Mt=`w-px h-5 bg-border mx-0.5 shrink-0`;function Nt({editorRef:e,readOnly:t,wrapOn:n,onToggleWrap:r}){let i=(0,L.useCallback)(()=>e.current,[e]),a=(0,L.useCallback)(e=>{let t=i();if(!t)return;t.focus();let n=t.getSelection();n&&t.executeEdits(`mobile-toolbar`,[{range:n,text:e}])},[i]),[o,l]=(0,L.useState)(!1),u=(0,L.useRef)(null),d=(0,L.useCallback)(async()=>{try{let e=await navigator.clipboard.readText();e&&a(e)}catch{}},[a]),f=(0,L.useCallback)(()=>{l(!0),requestAnimationFrame(()=>u.current?.focus())},[]),p=(0,L.useCallback)(e=>{e.preventDefault();let t=e.clipboardData.getData(`text/plain`);t&&(l(!1),a(t))},[a]),ee=(0,L.useCallback)(()=>{let e=i();e&&(e.focus(),e.trigger(`mobile-toolbar`,`undo`,null))},[i]),te=(0,L.useCallback)(()=>{let e=i();e&&(e.focus(),e.trigger(`mobile-toolbar`,`redo`,null))},[i]),ne=(0,L.useCallback)(()=>{let e=i();e&&(e.focus(),e.trigger(`mobile-toolbar`,`tab`,null))},[i]);return t?null:(0,R.jsxs)(`div`,{className:`shrink-0 border-t border-border bg-surface`,children:[!kt&&o&&(0,R.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1.5 border-b border-border bg-muted/50`,children:[(0,R.jsx)(`textarea`,{ref:u,onPaste:p,placeholder:`Long-press here → Paste`,className:`flex-1 h-8 rounded border border-border bg-background text-foreground text-xs px-2 py-1.5 resize-none focus:outline-none focus:ring-1 focus:ring-primary`}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>l(!1),className:`p-1.5 rounded text-muted-foreground active:bg-muted transition-colors`,children:(0,R.jsx)(c,{size:14})})]}),(0,R.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1.5 overflow-x-auto`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:kt?d:f,className:X,title:`Paste`,children:(0,R.jsx)(g,{size:14})}),(0,R.jsx)(`button`,{type:`button`,onClick:ee,className:X,title:`Undo`,children:(0,R.jsx)(s,{size:14})}),(0,R.jsx)(`button`,{type:`button`,onClick:te,className:X,title:`Redo`,children:(0,R.jsx)(y,{size:14})}),(0,R.jsx)(`button`,{type:`button`,onClick:r,className:`${X} ${n?`text-primary`:``}`,title:n?`Wrapping long lines — tap to scroll sideways instead`:`Wrap long lines`,children:(0,R.jsx)(_,{size:14})}),(0,R.jsx)(`div`,{className:Mt}),(0,R.jsx)(`button`,{type:`button`,onClick:ne,className:jt,children:`Tab`}),(0,R.jsx)(`div`,{className:Mt}),At.map(e=>(0,R.jsx)(`button`,{type:`button`,onClick:()=>a(e),className:jt,children:e},e))]})]})}var Pt=(0,L.lazy)(()=>T(()=>import(`./markdown-renderer-D5-xliE9.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40]))),Ft=(0,L.lazy)(()=>T(()=>import(`./editor-language-service-BVJQnTSV.js`).then(e=>({default:e.EditorLanguageService})),__vite__mapDeps([41,2,1,3,10,42,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,43]))),It=(0,L.lazy)(()=>T(()=>import(`./csv-preview-Be3ODNj0.js`).then(e=>({default:e.CsvPreview})),__vite__mapDeps([44,2,5,6,1,3,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,45,46]))),Lt=(0,L.lazy)(()=>T(()=>import(`./image-preview-DuODZoNO.js`).then(e=>({default:e.ImagePreview})),__vite__mapDeps([47,1,2,3,10,48,21]))),Rt=(0,L.lazy)(()=>T(()=>import(`./pdf-preview-PWDBbNwt.js`).then(e=>({default:e.PdfPreview})),__vite__mapDeps([49,2,1,3,10,21]))),zt=(0,L.lazy)(()=>T(()=>import(`./video-preview-DzwY3q9W.js`).then(e=>({default:e.VideoPreview})),__vite__mapDeps([50,2,5,6,1,3,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,51,52]))),Bt=(0,L.lazy)(()=>T(()=>import(`./audio-preview-BrS2qNK0.js`).then(e=>({default:e.AudioPreview})),__vite__mapDeps([53,2,1,3,8,10,21,52]))),Vt=(0,L.lazy)(()=>T(()=>import(`./docx-preview-b-Ui9jDq.js`).then(e=>({default:e.DocxPreview})),__vite__mapDeps([54,2,1,3,10,21])));function Ht(e){return e.split(`.`).pop()?.toLowerCase()??``}function Ut(e){return{js:`javascript`,jsx:`javascript`,ts:`typescript`,tsx:`typescript`,py:`python`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,mdx:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,bash:`shell`,sql:`sql`}[Ht(e)]??(He(e)?`dotenv`:`plaintext`)}var Wt=(0,L.memo)(function({metadata:e,tabId:t}){let n=e?.filePath,r=e?.projectName,i=e?.inlineContent,a=e?.inlineLanguage,[o,s]=(0,L.useState)(i??null),[c,l]=(0,L.useState)(`utf-8`),[u,d]=(0,L.useState)(!0),[p,m]=(0,L.useState)(null),[re,ae]=(0,L.useState)(null),oe=D(e=>e.activeTabId),[se,ce]=(0,L.useState)(0);(0,L.useEffect)(()=>{let e=()=>ce(e=>e+1);return window.addEventListener(`ppm:onboarding-refresh`,e),()=>window.removeEventListener(`ppm:onboarding-refresh`,e)},[]);let[h,g]=(0,L.useState)(!1),_=(0,L.useRef)(null),v=(0,L.useRef)(``),y=(0,L.useRef)(null),[b,le]=(0,L.useState)(null),{tabs:ue,updateTab:S}=D(Me(e=>({tabs:e.tabs,updateTab:e.updateTab}))),{wordWrap:de,toggleWordWrap:me,mobileWordWrap:O,toggleMobileWordWrap:_e}=w(Me(e=>({wordWrap:e.wordWrap,toggleWordWrap:e.toggleWordWrap,mobileWordWrap:e.mobileWordWrap,toggleMobileWordWrap:e.toggleMobileWordWrap}))),ve=w(e=>e.inlineBlame),ye=w(e=>e.toggleInlineBlame),be=w(e=>e.lspEnabled),xe=w(e=>e.setLspEnabled),Se=he(),Ce=Pe(),k=Se?O:de,Te=Se?_e:me,Ee=Re(),A=e?.isUntitled===!0,De=e?.unsavedContent,[Oe,ke]=(0,L.useState)(!1),je=ue.find(e=>e.id===t),j=n?Ht(n):``,M=Ge.has(j),N=j===`pdf`,P=j===`docx`,F=We.has(j),Fe=qe.has(j),I=Ke.has(j),He=j===`md`||j===`mdx`,Qe=(j===`html`||j===`htm`)&&!A&&i==null,[$e,et]=(0,L.useState)(`preview`),[tt,nt]=(0,L.useState)(0),[rt,it]=(0,L.useState)(!1),z=Qe&&$e===`preview`,at=j===`csv`,ot=e?.language,B=a??ot??Ut(n??``),V=B===`sql`,[lt,ut]=(0,L.useState)(`preview`),[dt,ft]=(0,L.useState)(`table`),{connections:H,cachedTables:pt,refreshTables:mt,updateConnection:ht}=Ie(),U=n?`ppm:sql-conn:${n}`:t?`ppm:sql-conn:tab:${t}`:null,[W,gt]=(0,L.useState)(()=>{if(!U)return null;let e=localStorage.getItem(U);return e?Number(e):null}),_t=(0,L.useRef)(null),G=(0,L.useRef)(null),K=(0,L.useMemo)(()=>H.find(e=>e.id===W)??null,[H,W]),vt=i!=null&&(a===`json`||a===`xml`),[bt,xt]=(0,L.useState)(!1),q=(0,L.useCallback)(()=>{if(i)if(bt)s(i),xt(!1);else{let e=i.trimStart();if(a===`json`)try{s(JSON.stringify(JSON.parse(e),null,2)),xt(!0)}catch{}else if(a===`xml`){let t=0;s(e.replace(/(>)(<)(\/*)/g,`$1
3
- $2$3`).split(`
4
- `).map(e=>{let n=e.trim();n.startsWith(`</`)&&(t=Math.max(0,t-1));let r=` `.repeat(t)+n;return n.startsWith(`<`)&&!n.startsWith(`</`)&&!n.endsWith(`/>`)&&!n.includes(`</`)&&t++,r}).join(`
5
- `)),xt(!0)}}},[i,a,bt]),wt=(0,L.useCallback)(e=>{gt(e),U&&localStorage.setItem(U,String(e)),mt(e).catch(()=>{})},[U,mt]),J=(0,L.useCallback)(n=>{t&&S(t,{metadata:{...e,language:n}})},[t,e,S]),Y=(0,L.useMemo)(()=>{if(!V||!W)return;let e=(pt.get(W)??[]).map(e=>({name:e.tableName,schema:e.schemaName}));if(e.length!==0)return{tables:e,getColumns:async(e,t)=>C.get(`/api/db/connections/${W}/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`)}},[V,W,pt]);(0,L.useEffect)(()=>{if(!(!_t.current||!Y))return G.current?.dispose(),Ze(),G.current=_t.current.languages.registerCompletionItemProvider(`sql`,Ye(_t.current,Y)),()=>{G.current?.dispose()}},[Y]);let Et=D(e=>e.openTab),[kt,At]=(0,L.useState)(null),[X,jt]=(0,L.useState)(null),[Mt,Pt]=(0,L.useState)(!1),[Wt,Gt]=(0,L.useState)(``),Yt=(0,L.useCallback)(async e=>{if(K){Pt(!0),jt(null),Gt(e);try{At(await C.post(`/api/db/connections/${K.id}/query`,{sql:e}))}catch(e){jt(e.message),At(null)}finally{Pt(!1)}}},[K]),Xt=(0,L.useCallback)(()=>{!K||!Wt||Et({type:`database`,title:`${K.name} · Query`,projectId:null,closable:!0,metadata:{connectionId:K.id,connectionName:K.name,dbType:K.type,initialSql:Wt}})},[K,Et,Wt]),Zt=(0,L.useCallback)(()=>{if(!y.current||!K)return;let e=y.current,t=e.getSelection();Yt(t&&!t.isEmpty()?e.getModel()?.getValueInRange(t)??e.getValue():e.getValue())},[K,Yt]),Qt=typeof window<`u`&&`ontouchstart`in window,$t=(0,L.useRef)(null),[en,tn]=(0,L.useState)(null);(0,L.useEffect)(()=>{if(!Qt)return;let e=window.visualViewport;if(!e)return;let t=()=>{let t=$t.current;if(!t)return;let n=t.getBoundingClientRect().top;tn(e.height-Math.max(0,n))};return e.addEventListener(`resize`,t),e.addEventListener(`scroll`,t),()=>{e.removeEventListener(`resize`,t),e.removeEventListener(`scroll`,t)}},[Qt]),(0,L.useEffect)(()=>Le($t.current,()=>y.current?.layout()),[u,p]);let Z=(0,L.useRef)([]),nn=(0,L.useRef)(Yt);nn.current=Yt,(0,L.useEffect)(()=>()=>{Z.current.forEach(e=>e.dispose()),Z.current=[]},[]),(0,L.useEffect)(()=>{I&&t&&S(t,{type:`sqlite`})},[I,t,S]);let Q=n?/^(\/|[A-Za-z]:[/\\])/.test(n):!1;(0,L.useEffect)(()=>{if(!r||!n||!t||oe!==t||u||p||!b||re!==`${r}:${n}`||i!=null||A||I||c===`base64`||z||M||N||P||F||Fe||He&&lt===`preview`||at&&dt===`table`)return;let e=b.editor.getDomNode(),a=!!e?.isConnected&&!!e.checkVisibility({checkOpacity:!0,checkVisibilityCSS:!0});a&&Ae({type:`file-ready`,projectName:r,tabId:t,visible:a,isRunDocument:/^(readme(?:\..*)?|package\.json)$/i.test(E(n))})},[se,r,n,t,oe,u,p,b,re,i,A,I,c,M,N,P,F,Fe,He,lt,at,dt,z]),(0,L.useEffect)(()=>{if(i!=null){d(!1);return}if(A){s(De??``),v.current=De??``,d(!1),De&&g(!0);return}if(!n||!Q&&!r)return;if(M||N||P||F||Fe){d(!1);return}d(!0),m(null),ae(null);let e=!1,t=Q?`/api/fs/read?path=${encodeURIComponent(n)}`:`${fe(r)}/files/read?path=${encodeURIComponent(n)}`;return C.get(t).then(t=>{e||(s(t.content),l(t.encoding??`utf-8`),ae(`${r}:${n}`),v.current=t.content,d(!1))}).catch(t=>{e||(m(t instanceof Error?t.message:`Failed to load file`),d(!1))}),()=>{e=!0,_.current&&clearTimeout(_.current)}},[n,r,M,N,P,Q,A]);let[rn,an]=(0,L.useState)(!1),on=(0,L.useCallback)(()=>{if(!n||i!=null||A||!Q&&!r)return;let e=Q?`/api/fs/read?path=${encodeURIComponent(n)}`:`${fe(r)}/files/read?path=${encodeURIComponent(n)}`;an(!0),C.get(e).then(e=>{s(e.content),v.current=e.content,e.encoding&&l(e.encoding),g(!1),m(null)}).catch(e=>m(e instanceof Error?e.message:`Failed to reload file`)).finally(()=>an(!1))},[n,r,Q,i,A]),sn=(0,L.useRef)(h);sn.current=h,(0,L.useEffect)(()=>{if(!n||!r||i!=null||A)return;let e=e=>{let t=e.detail;if(t.projectName!==r||t.path!==n||sn.current)return;let i=Q?`/api/fs/read?path=${encodeURIComponent(n)}`:`${fe(r)}/files/read?path=${encodeURIComponent(n)}`;C.get(i).then(e=>{e.content!==v.current&&(s(e.content),v.current=e.content,e.encoding&&l(e.encoding))}).catch(()=>{})};return window.addEventListener(`file:changed`,e),()=>window.removeEventListener(`file:changed`,e)},[n,r,Q,i,A]),(0,L.useEffect)(()=>{if(!je||i!=null)return;let t=A?`Untitled-${e?.untitledNumber??1}`:n?E(n):`Untitled`,r=h?`${t} \u25CF`:t;je.title!==r&&S(je.id,{title:r})},[h]);let cn=!A&&i==null&&!!n&&!!r&&!Se,ln=Ve({editor:b?.editor??null,monaco:b?.monaco??null,projectName:r,filePath:cn?n:void 0,enabled:ve&&cn}),un=!A&&!Q&&i==null&&!!n&&!!r,dn=be&&!Ce,fn=dn&&un&&!z,[pn,mn]=(0,L.useState)({status:null,diagnostics:[]}),hn=(0,L.useCallback)(e=>mn(e),[]),gn=(0,L.useCallback)(async e=>{if(n&&!(!Q&&!r))try{Q?await C.put(`/api/fs/write`,{path:n,content:e}):await C.put(`${fe(r)}/files/write`,{path:n,content:e}),g(!1),ln.refresh(),fn&&r&&n&&T(()=>import(`./use-lsp-CZTFJIXX.js`).then(t=>t.notifyLspSave(r,n,e)),__vite__mapDeps([42,2,5,6,1,3,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,43]))}catch{}},[n,r,Q,fn,ln.refresh]);function _n(n){let r=n??``;s(r),v.current=r,g(!0),_.current&&clearTimeout(_.current),A?_.current=setTimeout(()=>{t&&S(t,{metadata:{...e,unsavedContent:v.current}})},2e3):_.current=setTimeout(()=>gn(v.current),1e3)}let vn=(0,L.useCallback)(async(e,n)=>{try{if(_.current&&clearTimeout(_.current),await C.put(`/api/fs/write`,{path:e,content:n}),t){let{closeTab:n,openTab:r}=pe.getState();n(t),r({type:`editor`,title:E(e),projectId:null,metadata:{filePath:e},closable:!0})}g(!1),ke(!1)}catch{}},[t]),$=e?.lineNumber,yn=e?.endLine,bn=e?.revealAt,xn=(0,L.useCallback)(()=>{let e=y.current;if(!(!e||!$||$<=0)){if(e.revealLineInCenter($),e.setPosition({lineNumber:$,column:1}),yn&&yn>=$){let t=e.getModel(),n=t?.getLineCount()??$,r=Math.min(yn,n),i=t?.getLineMaxColumn(r)??1;e.setSelection({startLineNumber:$,startColumn:1,endLineNumber:r,endColumn:i})}e.focus()}},[$,yn]);(0,L.useEffect)(()=>{bn!=null&&xn()},[bn,xn]),(0,L.useEffect)(()=>{let e=b?.monaco;e&&st(dn,e.languages.typescript.typescriptDefaults,e.languages.typescript.javascriptDefaults)},[b,dn]);let Sn=(0,L.useCallback)((e,t)=>{if(y.current=e,_t.current=t,le({editor:e,monaco:t}),$&&$>0&&setTimeout(()=>xn(),100),A&&e.addCommand(t.KeyMod.CtrlCmd|t.KeyCode.KeyS,()=>ke(!0)),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyZ,()=>{let e=w.getState();ge()?e.toggleMobileWordWrap():e.toggleWordWrap()}),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyB,()=>w.getState().toggleInlineBlame()),Y&&(G.current?.dispose(),G.current=t.languages.registerCompletionItemProvider(`sql`,Ye(t,Y))),V){e.addAction({id:`run-sql-at-cursor`,label:`Run Statement at Cursor`,keybindings:[t.KeyMod.CtrlCmd|t.KeyCode.Enter],run:e=>{let t=e.getPosition();if(!t)return;let n=Je(e.getValue(),t.lineNumber);n&&nn.current(n)}}),Z.current.forEach(e=>e.dispose()),Z.current=[];let n=e.getModel(),r=e.addCommand(0,(e,t)=>{t&&nn.current(t)});if(r&&n){let e=t.languages.registerCodeLensProvider(`sql`,{provideCodeLenses:e=>{if(e!==n)return{lenses:[],dispose:()=>{}};let t=[],i=(e,n,i=`▷ Run`)=>{let a=n.trim();a&&t.push({range:{startLineNumber:e,startColumn:1,endLineNumber:e,endColumn:1},command:{id:r,title:i,arguments:[a]}})},a=/^(BEGIN|COMMIT|ROLLBACK|END)(;|\s|$)/i,o=-1,s=[];for(let{sql:t,startLine:n}of Xe(e.getValue())){let e=/^BEGIN(;|\s|$)/i.test(t),r=/^(COMMIT|ROLLBACK|END)(;|\s|$)/i.test(t);o===-1&&e?(o=n,s=[t]):o>-1?(s.push(t),!r&&!a.test(t)&&i(n,t),r&&(i(o,s.join(`
6
- `),`▷ Run Transaction`),o=-1,s=[])):i(n,t)}return o>-1&&s.length>1&&i(o,s.join(`
7
- `),`▷ Run Transaction`),{lenses:t,dispose:()=>{}}}});Z.current.push(e);let i=t.languages.registerFoldingRangeProvider(`sql`,{provideFoldingRanges:e=>{if(e!==n)return[];let r=[],i=e.getLineCount(),a=[];for(let n=1;n<=i;n++){let i=e.getLineContent(n).trim();if(/^BEGIN(;|\s|$)/i.test(i))a.push(n);else if(/^(COMMIT|ROLLBACK|END)(;|\s|$)/i.test(i)&&a.length>0){let e=a.pop();r.push({start:e,end:n,kind:t.languages.FoldingRangeKind.Region})}}return r}});Z.current.push(i)}}},[Y,V]);if(!i&&!A&&(!n||!Q&&!r))return(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:`No file selected.`});if(u)return(0,R.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-text-secondary`,children:[(0,R.jsx)(x,{className:`size-5 animate-spin`}),(0,R.jsx)(`span`,{className:`text-sm`,children:`Loading file...`})]});if(p)return(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full text-error text-sm`,children:p});if(M)return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(qt,{}),children:(0,R.jsx)(Lt,{filePath:n,projectName:r})});if(N)return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(qt,{}),children:(0,R.jsx)(Rt,{filePath:n,projectName:r})});if(P)return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(qt,{}),children:(0,R.jsx)(Vt,{filePath:n,projectName:r})});if(F)return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(qt,{}),children:(0,R.jsx)(zt,{filePath:n,projectName:r})});if(Fe)return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(qt,{}),children:(0,R.jsx)(Bt,{filePath:n,projectName:r})});if(c===`base64`)return(0,R.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,R.jsx)(ne,{className:`size-10 text-text-subtle`}),(0,R.jsx)(`p`,{className:`text-sm`,children:`This file is a binary format and cannot be displayed.`}),(0,R.jsx)(`p`,{className:`text-xs text-text-subtle`,children:n})]});let Cn=V?(0,R.jsxs)(`div`,{className:`shrink-0 flex items-center gap-1 px-2 border-l border-border`,children:[(0,R.jsx)(te,{className:`size-3 text-muted-foreground`}),(0,R.jsxs)(`select`,{value:W??``,onChange:e=>{let t=Number(e.target.value);t&&wt(t)},className:`h-5 text-[10px] bg-transparent border border-border rounded px-1 text-foreground outline-none max-w-[140px]`,title:`Select connection for autocomplete`,children:[(0,R.jsx)(`option`,{value:``,children:`Connection…`}),H.map(e=>(0,R.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,R.jsx)(`button`,{type:`button`,onClick:Zt,disabled:!K,className:`p-0.5 rounded text-muted-foreground hover:text-primary disabled:opacity-30 transition-colors`,title:`Run SQL`,children:(0,R.jsx)(f,{className:`size-3.5`})}),K&&(0,R.jsx)(`button`,{type:`button`,onClick:()=>ht(K.id,{readonly:K.readonly?0:1}),className:`flex items-center gap-0.5 px-1 py-0.5 rounded text-[10px] transition-colors ${K.readonly?`text-muted-foreground hover:text-foreground`:`bg-destructive/15 text-destructive`}`,title:K.readonly?`Readonly — click to allow writes`:`WRITE mode — click to enable readonly`,children:K.readonly?(0,R.jsx)(ie,{className:`size-3`}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(ee,{className:`size-3`}),(0,R.jsx)(`span`,{className:`font-medium`,children:`WRITE`})]})})]}):null;return(0,R.jsxs)(`div`,{ref:$t,"data-onboarding":`file`,className:`flex flex-col h-full w-full overflow-hidden`,style:en?{height:`${en}px`,maxHeight:`${en}px`}:void 0,children:[fn&&b&&n&&r&&(0,R.jsx)(L.Suspense,{fallback:null,children:(0,R.jsx)(Ft,{editor:b.editor,monaco:b.monaco,projectName:r,filePath:n,onState:hn})}),i!=null&&vt&&(0,R.jsx)(`div`,{className:`flex items-center h-7 border-b border-border bg-background shrink-0 px-2 gap-2`,children:(0,R.jsx)(`button`,{type:`button`,onClick:q,className:`text-[10px] px-2 py-0.5 rounded border border-border hover:bg-muted transition-colors text-foreground`,children:bt?`Raw`:`Beautify`})}),!Qe&&n&&r&&t&&(0,R.jsxs)(`div`,{className:`hidden md:flex items-center h-7 border-b border-border bg-background shrink-0`,children:[(0,R.jsx)(yt,{filePath:n,projectName:r,tabId:t,className:`flex items-center flex-1 min-w-0 overflow-x-auto scrollbar-none px-2 gap-0.5`}),un&&!Ce&&(0,R.jsx)(ct,{enabled:dn,onToggle:xe,status:pn.status,diagnostics:pn.diagnostics,onInstall:pn.install}),(0,R.jsx)(Tt,{value:B,onChange:J}),Cn,(0,R.jsx)(St,{ext:j,mdMode:lt,onMdModeChange:ut,csvMode:dt,onCsvModeChange:ft,wordWrap:k,onToggleWordWrap:Te,inlineBlame:ve,onToggleInlineBlame:cn?ye:void 0,blameStale:ln.stale,onRefresh:on,refreshing:rn,filePath:n,projectName:r,className:`shrink-0 flex items-center gap-1 px-2`})]}),!Qe&&i==null&&t&&(A||n&&!r)&&(0,R.jsxs)(`div`,{className:`hidden md:flex items-center h-7 border-b border-border bg-background shrink-0 px-2`,children:[(0,R.jsx)(`span`,{className:`text-xs text-muted-foreground truncate flex-1`,children:A?`Untitled-${e?.untitledNumber??1}`:n?E(n):`Untitled`}),(0,R.jsx)(Tt,{value:B,onChange:J}),Cn]}),Qe&&n&&(0,R.jsx)(Dt,{mode:$e,onModeChange:e=>{e===`edit`&&it(!0),et(e)},onRefresh:()=>{et(`preview`),nt(e=>e+1)},unsaved:h,onReloadCode:on,refreshing:rn,breadcrumb:r&&t?(0,R.jsx)(yt,{filePath:n,projectName:r,tabId:t,className:`flex items-center min-w-0 overflow-x-auto scrollbar-none gap-0.5`}):(0,R.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:E(n)}),filePath:n,projectName:r,wordWrap:k,onToggleWordWrap:Te,inlineBlame:ve,onToggleInlineBlame:cn?ye:void 0,language:B,onLanguageChange:J,lspEnabled:dn,onToggleLsp:un&&!Ce?xe:void 0}),z&&n&&(0,R.jsx)(Ct,{filePath:n,projectName:r,revision:tt}),z&&!rt?null:at&&dt===`table`?(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,R.jsx)(x,{className:`size-5 animate-spin text-text-subtle`})}),children:(0,R.jsx)(It,{content:o??``,onContentChange:_n,wordWrap:k})}):He&&lt===`preview`?(0,R.jsx)(Jt,{content:o??``,projectName:r,filePath:n,tabId:t,ready:!u&&!p&&re===`${r}:${n}`&&i==null&&!A}):(0,R.jsx)(`div`,{className:z?`hidden`:`flex-1 overflow-hidden min-h-0`,children:(0,R.jsx)(we,{height:`100%`,language:B,beforeMount:e=>{Ne(e),Ue(e)},value:o??``,onChange:i==null?_n:void 0,onMount:Sn,theme:Ee,options:{fontSize:14,fontFamily:Be,fontLigatures:ze,wordWrap:k?`on`:`off`,minimap:{enabled:!1},scrollBeyondLastLine:!1,automaticLayout:!0,lineNumbers:`on`,folding:!0,bracketPairColorization:{enabled:!0},readOnly:i!=null,quickSuggestions:{other:!0,comments:!1,strings:!1},suggestOnTriggerCharacters:!0,acceptSuggestionOnEnter:`on`,suggestSelection:`first`,parameterHints:{enabled:!0},inlayHints:{enabled:`on`},"semanticHighlighting.enabled":!0,stickyScroll:{enabled:!Qt},peekWidgetDefaultFocus:`editor`},loading:(0,R.jsx)(x,{className:`size-5 animate-spin text-text-subtle`})},B)}),V&&(kt||X||Mt)&&(0,R.jsx)(Kt,{result:kt,error:X,loading:Mt,connName:K?.name,onClose:()=>{At(null),jt(null),Pt(!1)},onOpenInTab:Xt}),Qt&&!z&&(0,R.jsx)(Nt,{editorRef:y,readOnly:i!=null,wrapOn:k,onToggleWrap:Te}),Oe&&(0,R.jsx)(Ot,{open:Oe,defaultName:`Untitled-${e?.untitledNumber??1}`,content:v.current,onSave:vn,onCancel:()=>ke(!1)})]})}),Gt=()=>{};function Kt({result:e,error:t,loading:n,connName:r,onClose:i,onOpenInTab:a}){let o=(0,L.useMemo)(()=>e?.changeType===`select`&&e.rows.length>0?{columns:e.columns,rows:e.rows,total:e.rows.length,limit:e.rows.length}:null,[e]),s=(0,L.useMemo)(()=>(e?.columns??[]).map(e=>({name:e,type:`text`,nullable:!0,pk:!1,defaultValue:null})),[e?.columns]),[u,d]=(0,L.useState)(250),f=(0,L.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=u,r=e.currentTarget.ownerDocument,i=e=>d(Math.max(80,n+(t-e.clientY))),a=()=>{r.removeEventListener(`mousemove`,i),r.removeEventListener(`mouseup`,a)};r.addEventListener(`mousemove`,i),r.addEventListener(`mouseup`,a)},[u]);return(0,R.jsxs)(`div`,{className:`shrink-0 border-t border-border flex flex-col`,style:{height:u},children:[(0,R.jsx)(`div`,{onMouseDown:f,className:`shrink-0 h-1.5 cursor-row-resize bg-border/50 hover:bg-primary/30 flex items-center justify-center transition-colors`,children:(0,R.jsx)(l,{className:`size-3 text-muted-foreground/50`})}),(0,R.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1 bg-muted/50 border-b border-border shrink-0`,children:[(0,R.jsx)(te,{className:`size-3 text-muted-foreground`}),(0,R.jsxs)(`span`,{className:`text-xs font-medium text-foreground truncate flex-1`,children:[r?`${r} · Results`:`Query Results`,e?.executionTimeMs!=null&&(0,R.jsxs)(`span`,{className:`text-muted-foreground ml-1.5 font-normal`,children:[e.executionTimeMs,`ms`]})]}),(0,R.jsxs)(`button`,{type:`button`,onClick:a,title:`Open in DB Viewer tab`,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,R.jsx)(m,{className:`size-3`}),(0,R.jsx)(`span`,{className:`hidden sm:inline`,children:`Open in Tab`})]}),(0,R.jsx)(`button`,{type:`button`,onClick:i,title:`Close results`,className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,R.jsx)(c,{className:`size-3`})})]}),(0,R.jsxs)(`div`,{className:`flex-1 overflow-hidden min-h-0`,children:[n&&(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,R.jsx)(x,{className:`size-4 animate-spin text-muted-foreground`})}),t&&(0,R.jsx)(`div`,{className:`px-3 py-2 text-xs text-destructive bg-destructive/5`,children:t}),e?.changeType===`modify`&&(0,R.jsxs)(`div`,{className:`px-3 py-2 text-xs text-success`,children:[e.rowsAffected,` row(s) affected`]}),o&&(0,R.jsx)(Qe,{columns:o.columns,rows:o.rows,total:o.total,limit:o.limit,schema:s,loading:!1,page:1,onPageChange:Gt,onCellUpdate:Gt,readOnly:!0,orderBy:null,orderDir:`ASC`,onToggleSort:Gt,connectionName:r}),e?.changeType===`select`&&e.rows.length===0&&(0,R.jsx)(`div`,{className:`px-3 py-2 text-xs text-muted-foreground`,children:`No results`})]})]})}function qt(){return(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,R.jsx)(x,{className:`size-5 animate-spin text-text-subtle`})})}function Jt({content:e,...t}){return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(`div`,{className:`animate-pulse h-4 bg-muted rounded m-4`}),children:(0,R.jsx)(et,{...t,children:(0,R.jsx)(Pt,{content:e,className:`flex-1 overflow-auto p-4`})})})}export{Wt as CodeEditor};
@@ -1,2 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import{An as r,Bt as i,Gn as a,Ht as o,Jr as s,Jt as c,Lr as l,Mr as u,N as d,O as f,Rr as p,Wt as m,Zn as h,an as g,cr as _,d as v,en as y,ht as b,ir as x,j as S,jt as C,kt as ee,l as te,lt as ne,nt as re,p as ie,q as ae,qn as w,r as oe,st as se,tt as ce,u as le,ur as ue,ut as de,w as fe}from"./icons-CO_II6D-.js";import{t as pe}from"./createLucideIcon-DBXq3G0e.js";import{O as T,a as me}from"./api-client-F5Zi1sR0.js";import{t as he}from"./react-CzUPVyyG.js";import{n as E}from"./utils-btZ8C8-R.js";import{t as ge}from"./window-store-B4cbZ5rr.js";import{t as _e}from"./tab-store-CUPgQIQz.js";import{o as ve}from"./file-store-DCU7_YyB.js";import{n as D}from"./use-is-mobile-CkO33jqU.js";import{t as ye}from"./file-icons-Ed_yLyef.js";import{i as be,n as xe,o as Se,r as O,t as Ce}from"./mobile-bottom-sheet-CLic9ovp.js";import{n as k,t as we}from"./fs-api-vF_bQoeL.js";import{a as Te,n as Ee,o as De,r as Oe,s as ke,t as Ae}from"./format-file-meta-B0ZpqzSM.js";import{$t as je,Bt as Me,Cn as Ne,Ft as A,Gt as j,Ht as Pe,In as Fe,It as Ie,Jt as Le,Lt as Re,On as ze,Qt as Be,R as Ve,Rn as He,Rt as Ue,Sn as We,Vt as M,Xt as Ge,Yt as Ke,Zt as qe,_n as Je,an as N,bn as Ye,cn as Xe,dn as Ze,en as Qe,fn as $e,hn as et,ln as tt,mn as P,nn as F,on as nt,pn as rt,qt as it,sn as I,tn as at,un as L,wn as ot,xn as st,yn as ct,zt as lt}from"./index-DQCw6d-2.js";import{a as R,o as z,s as ut}from"./can-open-in-ppm-B9ZwTOGE.js";var dt=pe(`network`,[[`rect`,{x:`16`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`4q2zg0`}],[`rect`,{x:`2`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`8cvhb9`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`6`,rx:`1`,key:`1egb70`}],[`path`,{d:`M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3`,key:`1jsf9p`}],[`path`,{d:`M12 12V8`,key:`2874zd`}]]),ft=`ppm-explorer-pins`,pt=50;function mt(){try{let e=localStorage.getItem(ft),t=e?JSON.parse(e):[];return Array.isArray(t)?t.filter(e=>!!e&&typeof e.path==`string`&&typeof e.name==`string`).slice(0,pt):[]}catch{return[]}}function ht(e){try{localStorage.setItem(ft,JSON.stringify(e))}catch{}}var B=he((e,t)=>({pins:mt(),isPinned:e=>t().pins.some(t=>t.path===e),pin:n=>{if(t().isPinned(n.path))return;let r=[...t().pins,n].slice(0,pt);ht(r),e({pins:r})},unpin:n=>{let r=t().pins.filter(e=>e.path!==n);ht(r),e({pins:r})}}));function gt(e){return R(e.name)?(_e.getState().openTab({type:ut(e.name)===`sqlite`?`sqlite`:`editor`,title:e.name,projectId:null,metadata:{filePath:e.path},closable:!0}),!0):!1}function _t(e){return ge.getState().open(`explorer`,{path:e})}async function vt(e){let t=e.filter(e=>e.type===`file`),n=e.length-t.length;n>0&&T.warning(n===1?`Folders cannot be downloaded`:`${n} folders skipped`);for(let e of t)try{He(await k.downloadUrl(e.path),e.name)}catch(t){T.error(`Download failed: ${e.name}`,{description:t instanceof Error?t.message:void 0})}}async function yt(e,t){e.length!==0&&(await Fe(e.join(`
2
- `)),T.success(e.length===1?`${t} copied`:`${e.length} ${t.toLowerCase()}s copied`))}var bt=/[<>:"|?*]/,xt=/[\u0000-\u001f]/,St=/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\..*)?$/i;function Ct(e,t){if(!e)return`Name cannot be empty`;if(e===`.`||e===`..`)return`Reserved name`;if(e.includes(`/`)||e.includes(`\\`))return`Name cannot contain path separators`;if(xt.test(e))return`Invalid character in name`;if(t===`win32`){if(bt.test(e))return`Cannot contain < > : " | ? *`;if(St.test(e))return`"${e}" is a reserved Windows name`;if(e.endsWith(`.`)||e.endsWith(` `))return`Cannot end with a dot or space`}return null}async function wt(e,t,n,r){let i=ke(e,t,r);try{return n===`folder`?await k.mkdir(i,!1):await k.touch(i),Qe(e),!0}catch(e){return T.error(n===`folder`?`Could not create folder`:`Could not create file`,{description:Ee(e)}),!1}}async function Tt(e,t,n){try{return await k.rename(e,t),Qe(Ae(e,n)),!0}catch(e){return T.error(`Rename failed`,{description:Ee(e)}),!1}}async function Et(e,t,n){let r={removed:0,needsPermanent:[]},i=new Set;for(let a of e){i.add(Ae(a,n));try{await k.remove(a,t),r.removed++}catch(e){if(e instanceof we&&e.code===`NO_TRASH`){r.needsPermanent.push(a);continue}T.error(`Delete failed`,{description:Ee(e)})}}if(Qe(...i),r.removed>0){let e=`${r.removed} item${r.removed===1?``:`s`}`;T.success(t?`Deleted ${e}`:`Moved ${e} to Trash`)}return r}function Dt(e,t){let n=e?Array.from({length:e.length},(t,n)=>e.item(n)).filter(e=>e!=null):[];return t(),n}var V=e(t(),1),H=n();function Ot(e){let t=(0,V.useRef)(null),n=(0,V.useRef)(null),r=typeof document<`u`&&`webkitdirectory`in document.createElement(`input`),i=t=>{let n=Dt(t.target.files,()=>{t.target.value=``});n.length!==0&&e(n.map(e=>({file:e,relativePath:e.webkitRelativePath||e.name})))};return{supportsFolderPicker:r,openFilePicker:()=>t.current?.click(),openFolderPicker:()=>n.current?.click(),inputs:(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`input`,{ref:t,type:`file`,multiple:!0,hidden:!0,onChange:i,"data-testid":`explorer-upload-file-input`}),r&&(0,H.jsx)(`input`,{ref:n,webkitdirectory:``,type:`file`,multiple:!0,hidden:!0,onChange:i,"data-testid":`explorer-upload-folder-input`})]})}}function kt(e,t){let n=(0,V.useCallback)((t,n)=>Me(t,n,e.sep,e),[e]),r=Ot(e=>void n(e,t()));return{uploadInto:n,openUploadPicker:r.openFilePicker,openUploadFolderPicker:r.openFolderPicker,supportsFolderUpload:r.supportsFolderPicker,uploadInputs:r.inputs}}function At(e,t,n,r){let i=F(e=>e.patch),a=lt(),o=Ue(),[s,c]=(0,V.useState)(null),[l,u]=(0,V.useState)(null),[d,f]=(0,V.useState)(null),p=(0,V.useRef)(t);p.current=t;let m=(0,V.useRef)(a);m.current=a;let h=(0,V.useRef)(o);h.current=o;let g=(0,V.useMemo)(()=>({get sep(){return p.current?.sep??`/`},resolve:e=>m.current.resolve(e),startBatch:()=>m.current.startBatch(),endBatch:()=>m.current.endBatch(),confirmPermanentOverwrite:e=>h.current.confirm(e)}),[]),_=()=>p.current?.path??``,v=kt(g,_),y=(0,V.useMemo)(()=>({openEntry:e=>{e.type===`directory`?n.go(e.path):gt(e)},openInNewWindow:e=>{_t(e.type===`directory`?e.path:p.current?.path??e.path)},openInTerminal:e=>{Pe(e?.type===`directory`?e.path:_())},cut:e=>Be(e.map(e=>e.path),`cut`),copy:e=>Be(e.map(e=>e.path),`copy`),paste:e=>void qe(e??_(),g),transferInto:async(e,t,n)=>{let r=await je(e,t,n,g);if(r.succeeded>0){let e=n===`copy`?`Copied`:`Moved`;T.success(`${e} ${r.succeeded} item${r.succeeded===1?``:`s`}`)}},uploadInto:v.uploadInto,openUploadPicker:v.openUploadPicker,openUploadFolderPicker:v.openUploadFolderPicker,supportsFolderUpload:v.supportsFolderUpload,startRename:t=>{f(null),i(e,{inlineEdit:{kind:`rename`,path:t.path,initial:t.name}})},startCreate:t=>{f(null),i(e,{inlineEdit:{kind:t,initial:``}})},cancelInline:()=>{f(null),i(e,{inlineEdit:null})},commitInline:async t=>{let n=p.current,a=n?.inlineEdit;if(!n||!a)return;let o=t.trim();if(a.kind===`rename`&&o===a.initial){i(e,{inlineEdit:null});return}let s=Ct(o,r);if(s){f(s);return}f(null),(a.kind===`rename`?await Tt(a.path,o,n.sep):await wt(n.path,o,a.kind===`new-folder`?`folder`:`file`,n.sep))&&i(e,{inlineEdit:null})},trash:e=>{Et(e.map(e=>e.path),!1,p.current?.sep??`/`).then(e=>{e.needsPermanent.length>0&&c({paths:e.needsPermanent,names:e.needsPermanent.map(e=>e.split(/[/\\]/).pop()??e)})})},confirmPermanentDelete:e=>{e.length!==0&&c({paths:e.map(e=>e.path),names:e.map(e=>e.name)})},download:e=>void vt(e),copyPath:e=>void yt(e,`Path`),copyName:e=>void yt(e,`Name`),togglePin:(e,t)=>{let n=B.getState();n.isPinned(e)?n.unpin(e):n.pin({path:e,name:t})},showProperties:e=>u(e)}),[e,i,n,g,r,v]),b=(0,V.useCallback)(()=>{let e=s;c(null),e&&Et(e.paths,!0,p.current?.sep??`/`)},[s]);return{actions:y,dialogs:{collision:a.state,pendingDelete:s,permanentOverwrite:o.state,properties:l,inlineError:d,closeDelete:()=>c(null),runPermanentDelete:b,closeProperties:()=>u(null),uploadInputs:v.uploadInputs}}}var jt=e=>(0,H.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,...e,children:(0,H.jsx)(`path`,{stroke:`#64748B`,strokeWidth:`2`,d:`M7.784 5H5a2 2 0 00-2 2v10a2 2 0 002 2h14a2 2 0 002-2V9.875a2 2 0 00-2-2h-6.284a2 2 0 01-1.27-.455L9.054 5.455A2 2 0 007.783 5z`})}),Mt=e=>(0,H.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,...e,children:(0,H.jsx)(`path`,{fill:`#64748B`,stroke:`#64748B`,strokeWidth:`2`,d:`M7.784 5H5a2 2 0 00-2 2v10a2 2 0 002 2h14a2 2 0 002-2V9.875a2 2 0 00-2-2h-6.284a2 2 0 01-1.27-.455L9.054 5.455A2 2 0 007.783 5z`})}),Nt=jt,Pt=Mt,Ft=(0,V.createContext)({closed:Nt,open:Pt}),It=Ft.Provider;function U({name:e,kind:t,open:n,className:r}){let i=(0,V.useContext)(Ft),a=E(`shrink-0`,r);return t===`directory`?(0,H.jsx)(n?i.open:i.closed,{className:a}):t===`symlink`?(0,H.jsx)(C,{className:E(a,`text-text-2`)}):t===`unknown`?(0,H.jsx)(o,{className:E(a,`text-text-subtle`)}):(0,H.jsx)(ye,{name:e,className:a})}function Lt({className:e}){return(0,H.jsx)(U,{name:``,kind:`directory`,className:E(`size-4 shrink-0`,e)})}var Rt={fixed:i,removable:p,network:dt,unknown:i};function W({label:e,path:t,active:n,icon:r,onNavigate:i,onUnpin:a,run:o,uploadRun:s}){let c=Ge(),l=A({targetDir:t,run:o,onFiles:s});return(0,H.jsxs)(`div`,{className:`group/place relative flex items-center`,children:[(0,H.jsxs)(`button`,{type:`button`,title:t,onClick:()=>i(t),className:E(`flex w-full items-center gap-2 rounded px-2 py-1 text-left text-[13px]`,c?`min-h-[44px]`:`min-h-0`,`can-hover:hover:bg-surface-elevated`,n?`bg-accent-wash text-text`:`text-text-2`,l.isOver&&`ring-1 ring-dashed ring-primary bg-primary/10`),...l.handlers,children:[(0,H.jsx)(r,{className:`size-4 shrink-0 text-text-subtle`}),(0,H.jsx)(`span`,{className:`truncate`,children:e})]}),a&&(0,H.jsx)(`button`,{type:`button`,"aria-label":`Unpin ${e}`,title:`Unpin`,onClick:a,className:`absolute right-1 rounded p-1 text-text-subtle can-hover:opacity-0 can-hover:group-hover/place:opacity-100 can-hover:hover:text-text`,children:(0,H.jsx)(w,{className:`size-3.5`})})]})}function G({title:e,children:t}){return(0,H.jsxs)(`div`,{className:`pb-2`,children:[(0,H.jsx)(`p`,{className:`px-2 pb-0.5 pt-2 text-[10px] font-semibold uppercase tracking-wide text-text-subtle`,children:e}),t]})}var zt={home:`Home`,pinned:`Quick access`,known:`Folders`,drives:`Drives`};function Bt({host:e,currentPath:t,onNavigate:n,vocab:r=zt}){let i=B(e=>e.pins),a=B(e=>e.unpin),o=e=>e===t,{run:s,uploadRun:c,prompts:l}=Ie(e?.sep??`/`,e?.platform);return(0,H.jsxs)(`aside`,{"aria-label":`Places`,"data-testid":`explorer-sidebar`,className:`hidden w-44 shrink-0 overflow-y-auto border-r border-border bg-[var(--x-sidebar-bg,var(--panel-2))] px-1 py-1 sm:block`,children:[i.length>0&&(0,H.jsx)(G,{title:`Pinned`,children:i.map(e=>(0,H.jsx)(W,{label:e.name,path:e.path,icon:w,active:o(e.path),onNavigate:n,onUnpin:()=>a(e.path),run:s,uploadRun:c},e.path))}),e&&e.pinned.length>0&&(0,H.jsx)(G,{title:r.pinned,children:e.pinned.map(e=>(0,H.jsx)(W,{label:e.name,path:e.path,icon:Lt,active:o(e.path),onNavigate:n,run:s,uploadRun:c},e.path))}),e&&(0,H.jsxs)(G,{title:r.known,children:[(0,H.jsx)(W,{label:r.home,path:e.homedir,icon:Lt,active:o(e.homedir),onNavigate:n,run:s,uploadRun:c}),e.knownFolders.map(e=>(0,H.jsx)(W,{label:e.name,path:e.path,icon:Lt,active:o(e.path),onNavigate:n,run:s,uploadRun:c},e.path))]}),e&&e.drives.length>0&&(0,H.jsx)(G,{title:r.drives,children:e.drives.map(e=>(0,H.jsx)(W,{label:e.label?`${e.label} (${e.name})`:e.name,path:e.path,icon:Rt[e.kind],active:o(e.path),onNavigate:n,run:s,uploadRun:c},e.path))}),e?.warnings.map(e=>(0,H.jsxs)(`p`,{className:`flex gap-1.5 px-2 py-1 text-[11px] leading-snug text-text-subtle`,children:[(0,H.jsx)(oe,{className:`mt-0.5 size-3 shrink-0`}),(0,H.jsx)(`span`,{children:e})]},e)),l]})}var K=new Intl.Collator(void 0,{numeric:!0,sensitivity:`base`});function Vt(e,t,n){switch(e){case`size`:return(t.size??0)-(n.size??0);case`modified`:return new Date(t.modified).getTime()-new Date(n.modified).getTime();case`kind`:{let e=K.compare(z(t.name),z(n.name));return e===0?K.compare(t.name,n.name):e}case`name`:return K.compare(t.name,n.name)}}function Ht(e,t,n){let r=t.trim().toLowerCase(),i=r?e.filter(e=>e.name.toLowerCase().includes(r)):e,a=n.dir===`asc`?1:-1;return[...i].sort((e,t)=>{let r=e.type===`directory`;if(r!==(t.type===`directory`))return r?-1:1;let i=Vt(n.key,e,t);return(i===0?K.compare(e.name,t.name):i)*a})}function Ut(e){return e.reduce((e,t)=>e+(t.type===`file`?t.size??0:0),0)}function Wt({entries:e,selection:t,truncated:n}){let r=e.filter(e=>t.has(e.path)),i=[`${e.length}${n?`+`:``} item${e.length===1?``:`s`}`];if(r.length>0){i.push(`${r.length} selected`);let e=Ut(r);e>0&&i.push(De(e))}return(0,H.jsxs)(`div`,{"data-testid":`explorer-status`,className:`flex shrink-0 items-center gap-2 border-t border-border bg-panel-2 px-2 py-1 text-[11px] text-text-subtle`,children:[i.join(` · `),n&&(0,H.jsx)(`span`,{className:`ml-auto`,children:`Listing capped — narrow the filter to see the rest.`})]})}var Gt=3;function Kt({crumbs:e,onNavigate:t,className:n,sep:i}){let{run:a,prompts:o}=Ie(i);if(e.length===0)return(0,H.jsx)(`div`,{className:n});let s=e.length>Gt+2,c=s?e.slice(0,1):e,l=s?e.slice(1,e.length-Gt):[],u=s?e.slice(e.length-Gt):[];return(0,H.jsxs)(`nav`,{"aria-label":`Path`,className:E(`flex min-w-0 items-center gap-0.5 text-xs`,n),children:[c.map(n=>(0,H.jsxs)(`span`,{className:`flex shrink-0 items-center gap-0.5`,children:[(0,H.jsx)(qt,{crumb:n,last:!s&&n===e[e.length-1],onNavigate:t,run:a}),(0,H.jsx)(S,{className:`size-3 shrink-0 text-text-subtle`})]},n.path)),s&&(0,H.jsxs)(Je,{children:[(0,H.jsx)(ze,{asChild:!0,children:(0,H.jsx)(`button`,{type:`button`,"aria-label":`Show hidden path segments`,className:`rounded px-1 py-0.5 text-text-2 can-hover:hover:bg-surface-elevated`,children:(0,H.jsx)(r,{className:`size-3.5`})})}),(0,H.jsx)(ct,{align:`start`,className:`max-h-72 overflow-y-auto`,children:l.map(e=>(0,H.jsx)(Ye,{onClick:()=>t(e.path),children:e.name},e.path))})]}),s&&(0,H.jsx)(S,{className:`size-3 shrink-0 text-text-subtle`}),u.map((e,n)=>(0,H.jsxs)(`span`,{className:`flex min-w-0 items-center gap-0.5`,children:[(0,H.jsx)(qt,{crumb:e,last:n===u.length-1,onNavigate:t,run:a}),n<u.length-1&&(0,H.jsx)(S,{className:`size-3 shrink-0 text-text-subtle`})]},e.path)),o]})}function qt({crumb:e,last:t,onNavigate:n,run:r}){let i=A({targetDir:e.path,run:r});return(0,H.jsx)(`button`,{type:`button`,onClick:()=>n(e.path),className:E(`max-w-[12rem] truncate rounded px-1 py-0.5 can-hover:hover:bg-surface-elevated`,t?`font-medium text-text`:`text-text-2`,i.isOver&&`ring-1 ring-dashed ring-primary bg-primary/10`),...i.handlers,children:e.name})}var q=[{key:`name`,label:`Name`},{key:`size`,label:`Size`},{key:`modified`,label:`Modified`},{key:`kind`,label:`Kind`}],Jt=[{dir:`asc`,label:`Ascending`},{dir:`desc`,label:`Descending`}];function Yt(e){return q.find(t=>t.key===e)?.label??e}function Xt(e){return Jt.find(t=>t.dir===e)?.label??e}function J(e){return E(`relative flex size-7 shrink-0 items-center justify-center rounded text-text-subtle can-hover:hover:bg-surface-elevated can-hover:hover:text-text disabled:opacity-30`,e&&`before:absolute before:-inset-2 before:content-['']`)}function Zt({coarse:e}){let t=F(e=>e.sort),n=F(e=>e.setPrefs),r=`Sort`,i=`${r}: ${Yt(t.key)}, ${Xt(t.dir)}`;return(0,H.jsxs)(Je,{children:[(0,H.jsx)(ze,{asChild:!0,children:(0,H.jsx)(`button`,{type:`button`,"aria-label":r,title:i,className:J(e),children:(0,H.jsx)(ie,{className:`size-4`})})}),(0,H.jsxs)(ct,{align:`end`,children:[(0,H.jsx)(st,{children:`Sort by`}),(0,H.jsx)(We,{value:t.key,onValueChange:e=>n({sort:{key:e,dir:t.dir}}),children:q.map(({key:e,label:t})=>(0,H.jsx)(Ne,{value:e,children:t},e))}),(0,H.jsx)(ot,{}),(0,H.jsx)(st,{children:`Order`}),(0,H.jsx)(We,{value:t.dir,onValueChange:e=>n({sort:{key:t.key,dir:e}}),children:Jt.map(({dir:e,label:t})=>(0,H.jsx)(Ne,{value:e,children:t},e))})]})]})}function Y({targets:e,currentDir:t,hasClipboard:n,isPinned:r,actions:i}){let a=D(),o=e.length===1?e[0]:null,s=e.length>0&&e.every(e=>e.type===`directory`),c=e.length,l=c>1?` ${c} items`:``,u=F(e=>e.sort),d=F(e=>e.setPrefs);return c===0?(0,H.jsxs)(nt,{children:[(0,H.jsx)(I,{onClick:()=>i.startCreate(`new-file`),children:`New File`}),(0,H.jsx)(I,{onClick:()=>i.startCreate(`new-folder`),children:`New Folder`}),(0,H.jsx)(L,{}),(0,H.jsx)(I,{disabled:!n,onClick:()=>i.paste(),children:`Paste`}),(0,H.jsx)(L,{}),(0,H.jsx)(I,{onClick:()=>i.openUploadPicker(),children:`Upload Files…`}),i.supportsFolderUpload&&(0,H.jsx)(I,{onClick:()=>i.openUploadFolderPicker(),children:`Upload Folder…`}),(0,H.jsx)(L,{}),(0,H.jsx)(I,{onClick:()=>i.openInTerminal(),children:`Open in Terminal`}),(0,H.jsx)(L,{}),(0,H.jsxs)(Ze,{children:[(0,H.jsx)(rt,{children:`Sort by`}),(0,H.jsxs)($e,{children:[(0,H.jsx)(Xe,{value:u.key,onValueChange:e=>d({sort:{key:e,dir:u.dir}}),children:q.map(({key:e,label:t})=>(0,H.jsx)(tt,{value:e,children:t},e))}),(0,H.jsx)(L,{}),(0,H.jsx)(Xe,{value:u.dir,onValueChange:e=>d({sort:{key:u.key,dir:e}}),children:Jt.map(({dir:e,label:t})=>(0,H.jsx)(tt,{value:e,children:t},e))})]})]}),(0,H.jsx)(L,{}),(0,H.jsx)(I,{onClick:()=>i.copyPath([t]),children:`Copy Path`})]}):(0,H.jsxs)(nt,{children:[o&&(o.type===`directory`||R(o.name))&&(0,H.jsx)(I,{onClick:()=>i.openEntry(o),children:`Open`}),s&&o&&!a&&(0,H.jsx)(I,{onClick:()=>i.openInNewWindow(o),children:`Open in New Window`}),s&&o&&(0,H.jsx)(I,{onClick:()=>i.openInTerminal(o),children:`Open in Terminal`}),(0,H.jsx)(L,{}),(0,H.jsxs)(I,{onClick:()=>i.cut(e),children:[`Cut`,l]}),(0,H.jsxs)(I,{onClick:()=>i.copy(e),children:[`Copy`,l]}),s&&o&&(0,H.jsx)(I,{disabled:!n,onClick:()=>i.paste(o.path),children:`Paste`}),(0,H.jsx)(L,{}),o&&(0,H.jsx)(I,{onClick:()=>i.startRename(o),children:`Rename`}),(0,H.jsxs)(I,{onClick:()=>i.trash(e),children:[`Move to Trash`,l]}),(0,H.jsx)(I,{variant:`destructive`,onClick:()=>i.confirmPermanentDelete(e),children:`Delete permanently`}),(0,H.jsx)(L,{}),(0,H.jsx)(I,{onClick:()=>i.copyPath(e.map(e=>e.path)),children:`Copy Path`}),(0,H.jsx)(I,{onClick:()=>i.copyName(e.map(e=>e.name)),children:`Copy Name`}),e.some(e=>e.type===`file`)&&(0,H.jsx)(I,{onClick:()=>i.download(e),children:`Download`}),s&&o&&(0,H.jsx)(I,{onClick:()=>i.togglePin(o.path,o.name),children:r(o.path)?`Unpin from Sidebar`:`Pin to Sidebar`}),o&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(L,{}),(0,H.jsx)(I,{onClick:()=>i.showProperties(o),children:`Properties`})]})]})}function Qt(e){let{entry:t,dragPaths:n,run:r,springLoad:i,origin:a=`explorer`,projectName:o,extraData:s,onDragStarted:c,onFiles:l}=e,u=Le({paths:n,origin:a,projectName:o,extraData:s,onDragStarted:c}),d=A({targetDir:t.type===`directory`?t.path:null,run:r,springLoad:t.type===`directory`?i:void 0,onFiles:l});return{props:(0,V.useMemo)(()=>({...u,...d.handlers}),[u,d.handlers]),isDropTarget:d.isOver}}function $t(e){return e.type===`directory`||R(e.name)?`open`:`sheet`}function en(e){return e.startsWith(`on`)&&e.length>2&&e[2]===e[2]?.toUpperCase()}function tn(e,t){return n=>{e?.(n),t?.(n)}}function nn(e,t){if(!e)return t;let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];if(en(e)&&typeof t==`function`&&typeof r==`function`){n[e]=tn(t,r);continue}if(e===`style`&&t&&r){n[e]={...t,...r};continue}if(e===`className`){n[e]=E(t,r);continue}r!==void 0&&(n[e]=r)}return n}function rn({entry:e,selected:t,currentDir:n,hasClipboard:r,isPinned:i,actions:a,rowHeight:o,onSelect:s,onOpen:c}){let l=Qt({entry:e,dragPaths:[e.path],run:a.transferInto,springLoad:s,onFiles:a.uploadInto});return(0,H.jsxs)(N,{children:[(0,H.jsx)(P,{asChild:!0,children:(0,H.jsx)(an,{entry:e,selected:t,rowHeight:o,onSelect:s,onOpen:c,dnd:l.props,dropActive:l.isDropTarget})}),(0,H.jsx)(Y,{targets:[e],currentDir:n,hasClipboard:r,isPinned:i,actions:a})]})}var an=(0,V.forwardRef)(function({entry:e,selected:t,rowHeight:n,onSelect:r,onOpen:i,dnd:a,dropActive:o,...s},c){let l=Ke(r),u=D(),{setOpen:d}=(0,V.useContext)(xe),f=()=>{r(),!(!u||e.type===`directory`)&&($t(e)===`open`?i():d(!0))};return(0,H.jsxs)(`div`,{ref:c,...nn({...s,...l,...a},{role:`option`,"aria-selected":t,"data-testid":`explorer-column-row`,"data-path":e.path,title:e.name,style:{height:n},onContextMenu:e=>{r(),e.stopPropagation()},onClick:f,onDoubleClick:i,className:E(`flex w-full items-center gap-1.5 px-2 text-[13px] select-none`,`can-hover:hover:bg-surface-elevated`,t&&`bg-accent-wash text-text`,o&&`ring-1 ring-dashed ring-primary bg-primary/10`)}),children:[(0,H.jsx)(U,{name:e.name,kind:e.kind,className:`size-4 shrink-0`}),(0,H.jsx)(`span`,{className:E(`flex-1 truncate`,t?`text-text`:`text-text-2`),children:e.name}),e.type===`directory`&&(0,H.jsx)(`span`,{className:`text-text-subtle`,children:`›`})]})});function on({path:e,entries:t,loading:n,error:r,selectedPath:i,isFocused:a,currentDir:o,hasClipboard:s,isPinned:c,actions:l,rowHeight:u,onSelect:d,onOpen:f,onFocus:p,fullWidth:m}){let h=(0,V.useRef)(null);M(h);let g=m?48:u,_=et({count:t.length,getScrollElement:()=>h.current,estimateSize:()=>g,overscan:8}),v=A({targetDir:e,run:l.transferInto,onFiles:l.uploadInto,disabled:m});return(0,H.jsx)(`div`,{className:E(`flex h-full shrink-0 flex-col`,!m&&`border-r border-border`,a&&`bg-panel-2/40`),style:m?void 0:{width:220},children:(0,H.jsxs)(`div`,{ref:h,role:`listbox`,"aria-label":e,className:E(`flex-1 overflow-y-auto outline-none`,v.isOver&&`ring-1 ring-dashed ring-primary bg-primary/10`),...v.handlers,children:[n&&t.length===0&&(0,H.jsx)(`p`,{className:`p-2 text-xs text-text-subtle`,children:`Loading…`}),r&&(0,H.jsx)(`p`,{className:`p-2 text-xs text-error`,children:r}),!n&&!r&&t.length===0&&(0,H.jsx)(`p`,{className:`p-2 text-xs text-text-subtle`,children:`Empty`}),(0,H.jsx)(`div`,{className:`relative w-full`,style:{height:_.getTotalSize()},children:_.getVirtualItems().map(e=>{let n=t[e.index],r=n.path===i;return(0,H.jsx)(`div`,{className:`absolute left-0 top-0 w-full`,style:{transform:`translateY(${e.start}px)`},children:(0,H.jsx)(rn,{entry:n,selected:r,currentDir:o,hasClipboard:s,isPinned:c,actions:l,rowHeight:g,onSelect:()=>{p(),d(n)},onOpen:()=>f(n)})},n.path)})})]})})}function sn({containerRef:e,onKeyDown:t,backgroundLongPress:n,columns:r,focusedIndex:i,setFocusedIndex:a,selectedPathFor:o,slice:s,hasClipboard:c,isPinned:l,actions:u,onSelect:d,onOpen:f}){let p=r[i];return(0,H.jsxs)(N,{children:[(0,H.jsx)(P,{asChild:!0,children:(0,H.jsxs)(`div`,{ref:e,tabIndex:0,"data-testid":`explorer-columns`,"aria-label":`Column view`,onKeyDown:t,className:`flex h-full min-h-0 w-full flex-col outline-none`,...n,children:[i>0&&(0,H.jsxs)(`button`,{type:`button`,onClick:()=>a(e=>e-1),"aria-label":`Back`,className:`flex h-11 shrink-0 items-center gap-1.5 border-b border-border px-3 text-sm text-text-2 active:bg-surface-elevated`,children:[(0,H.jsx)(te,{className:`size-4`}),` Back`]}),p&&(0,H.jsx)(`div`,{className:`min-h-0 flex-1 motion-safe:animate-in motion-safe:slide-in-from-right-4 motion-safe:duration-150`,children:(0,H.jsx)(on,{path:p.path,entries:p.entries,loading:p.loading,error:p.error,selectedPath:o(i),isFocused:!0,fullWidth:!0,rowHeight:48,currentDir:s.path,hasClipboard:c,isPinned:l,actions:u,onSelect:e=>d(i,e),onOpen:f,onFocus:()=>{}})},p.path)]})}),(0,H.jsx)(Y,{targets:[],currentDir:s.path,hasClipboard:c,isPinned:l,actions:u})]})}var cn=0,ln=[];function un(){return new Promise(e=>{let t=!1,n=()=>{cn++,e(()=>{if(t)return;t=!0,cn--;let e=ln.shift();e&&e()})};cn<24?n():ln.push(n)})}function dn({entry:e,size:t,className:n}){let[r,i]=(0,V.useState)(null),[a,o]=(0,V.useState)(!1),s=(0,V.useRef)(null),c=(0,V.useRef)(null);return(0,V.useEffect)(()=>{i(null),o(!1)},[e.path]),(0,V.useEffect)(()=>{let t=s.current;if(!t||r||a)return;let n=new AbortController,l=null,u=new IntersectionObserver(t=>{t[0]?.isIntersecting&&(u.disconnect(),(async()=>{if(l=await un(),n.signal.aborted){l();return}try{let t=me(),r=await fetch(`/api/fs/raw?path=${encodeURIComponent(e.path)}`,{headers:t?{Authorization:`Bearer ${t}`}:{},signal:n.signal});if(!r.ok)throw Error(String(r.status));let a=await r.blob();if(n.signal.aborted)return;let o=URL.createObjectURL(a);c.current=o,i(o)}catch{n.signal.aborted||o(!0)}finally{l?.()}})())},{rootMargin:`200px`});return u.observe(t),()=>{n.abort(),u.disconnect(),l?.()}},[e.path,r,a]),(0,V.useEffect)(()=>()=>{c.current&&URL.revokeObjectURL(c.current)},[]),a||!r?(0,H.jsx)(`div`,{ref:s,className:E(`flex items-center justify-center`,n),style:{width:t,height:t},children:(0,H.jsx)(U,{name:e.name,kind:e.kind,className:`size-1/2`})}):(0,H.jsx)(`div`,{ref:s,className:E(`flex items-center justify-center overflow-hidden`,n),style:{width:t,height:t},children:(0,H.jsx)(`img`,{src:r,alt:``,loading:`lazy`,className:`max-h-full max-w-full rounded object-contain`,onError:()=>o(!0)})})}function fn({entry:e,onOpen:t}){return e?(0,H.jsxs)(`div`,{className:`flex h-full min-w-0 flex-col items-center gap-3 overflow-y-auto p-4 text-center`,children:[(0,H.jsx)(`div`,{className:`flex h-24 w-24 shrink-0 items-center justify-center`,children:e.type!==`directory`&&ut(e.name)===`image`?(0,H.jsx)(dn,{entry:e,size:96}):(0,H.jsx)(U,{name:e.name,kind:e.kind,className:`size-16`})}),(0,H.jsx)(`p`,{className:`w-full truncate text-sm font-medium text-text`,title:e.name,children:e.name}),(0,H.jsxs)(`dl`,{className:`w-full space-y-1 text-left text-xs text-text-2`,children:[(0,H.jsxs)(`div`,{className:`flex justify-between gap-2`,children:[(0,H.jsx)(`dt`,{className:`text-text-subtle`,children:`Kind`}),(0,H.jsx)(`dd`,{className:`truncate`,children:e.type===`directory`?`Folder`:z(e.name)||`File`})]}),e.type!==`directory`&&(0,H.jsxs)(`div`,{className:`flex justify-between gap-2`,children:[(0,H.jsx)(`dt`,{className:`text-text-subtle`,children:`Size`}),(0,H.jsx)(`dd`,{children:De(e.size)})]}),(0,H.jsxs)(`div`,{className:`flex justify-between gap-2`,children:[(0,H.jsx)(`dt`,{className:`text-text-subtle`,children:`Modified`}),(0,H.jsx)(`dd`,{className:`truncate`,children:Oe(e.modified)})]})]}),R(e.name)&&(0,H.jsx)(`button`,{type:`button`,onClick:()=>t(e),className:`mt-2 w-full rounded border border-border bg-panel-2 py-1.5 text-xs font-medium text-text can-hover:hover:bg-surface-elevated`,children:`Open`})]},e.path):(0,H.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-center text-xs text-text-subtle`,children:`Select a file to preview`})}function pn(e,t){switch(t.type){case`sync`:{let{paths:n,lastEntries:r,lastLoading:i,makeAbort:a}=t,o=n.length-1,s=n.map((t,n)=>{let s=e.columns[n],c=n===o;return s&&s.path===t?c?{...s,entries:r,loading:i,error:null}:s:c?{path:t,entries:r,loading:i,error:null,abort:a()}:{path:t,entries:[],loading:!0,error:null,abort:a()}}),c=[];for(let t=0;t<e.columns.length;t++){let n=e.columns[t],r=s[t];(!r||r.path!==n.path)&&c.push(n.abort)}return{columns:s,staleControllers:c}}case`loaded`:return{columns:e.columns.map(e=>e.path===t.path?{...e,entries:t.entries,loading:!1,error:null}:e),staleControllers:[]};case`error`:return{columns:e.columns.map(e=>e.path===t.path?{...e,loading:!1,error:t.message}:e),staleControllers:[]}}}function mn(e,t,n){let[r,i]=(0,V.useReducer)(pn,{columns:[],staleControllers:[]}),a=(0,V.useRef)(new Set);(0,V.useEffect)(()=>{i({type:`sync`,paths:e,lastEntries:t,lastLoading:n,makeAbort:()=>new AbortController})},[e.join(`\0`),t,n]),(0,V.useEffect)(()=>{for(let e of r.staleControllers)e.abort()},[r.staleControllers]);let o=(0,V.useRef)(r.columns);return o.current=r.columns,(0,V.useEffect)(()=>()=>{for(let e of o.current)e.abort.abort()},[]),(0,V.useEffect)(()=>{let e=r.columns.length-1;r.columns.forEach((t,n)=>{n!==e&&(!t.loading||a.current.has(t.abort)||(a.current.add(t.abort),k.browse(t.path,{signal:t.abort.signal}).then(e=>{a.current.delete(t.abort),!t.abort.signal.aborted&&i({type:`loaded`,path:t.path,entries:e.entries})}).catch(e=>{a.current.delete(t.abort),!(t.abort.signal.aborted||e instanceof DOMException&&e.name===`AbortError`)&&i({type:`error`,path:t.path,message:e instanceof Error?e.message:`Failed to read directory`})})))})},[r.columns]),{columns:r.columns}}var hn=720;function gn({slice:e,entries:t,actions:n,selection:r,hasClipboard:i,isPinned:a,nav:o,backgroundLongPress:s,rowHeight:c}){let{columns:l}=mn((0,V.useMemo)(()=>e.breadcrumbs.length>0?e.breadcrumbs.map(e=>e.path):[e.path],[e.breadcrumbs,e.path]),t,e.loading),u=D(),d=(0,V.useRef)(null);M(d);let[f,p]=(0,V.useState)(l.length-1),[m,h]=(0,V.useState)(0),g=(0,V.useRef)(l.length);(0,V.useEffect)(()=>{let e=d.current;if(!e)return;let t=()=>h(e.clientWidth);t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]),(0,V.useEffect)(()=>{if(l.length===g.current)return;g.current=l.length,p(l.length-1);let e=d.current;if(!e)return;let t=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches===!0;e.scrollTo({left:e.scrollWidth,behavior:t?`auto`:`smooth`})},[l.length]);let _=(0,V.useMemo)(()=>{if(!e.anchor)return null;for(let t of l){let n=t.entries.find(t=>t.path===e.anchor);if(n)return n}return null},[l,e.anchor]),v=t=>t===l.length-1?e.anchor:l[t+1]?.path??null,y=e=>{let t=l[e];if(!t)return null;let n=v(e);return t.entries.find(e=>e.path===n)??null},b=(e,t)=>{p(e),t.type===`directory`?o.go(t.path):r.selectOnly(t.path)},x=e=>n.openEntry(e),S=e=>{if(!(e.altKey||e.ctrlKey||e.metaKey)){if(e.key===`ArrowRight`&&f<l.length-1){e.preventDefault(),e.stopPropagation(),p(f+1);return}if(e.key===`ArrowLeft`&&f>0){e.preventDefault(),e.stopPropagation(),p(f-1);return}if(e.key===`ArrowUp`||e.key===`ArrowDown`){let t=l[f];if(!t)return;e.preventDefault(),e.stopPropagation();let n=y(f),r=n?t.entries.findIndex(e=>e.path===n.path):-1,i=e.key===`ArrowDown`?1:-1,a=Math.min(t.entries.length-1,Math.max(0,r<0?0:r+i)),o=t.entries[a];o&&b(f,o);return}if(e.key===`Enter`){let t=y(f);t&&(e.preventDefault(),e.stopPropagation(),x(t))}}},C=m>=hn;return u?(0,H.jsx)(sn,{containerRef:d,onKeyDown:S,backgroundLongPress:s,columns:l,focusedIndex:f,setFocusedIndex:p,selectedPathFor:v,slice:e,hasClipboard:i,isPinned:a,actions:n,onSelect:b,onOpen:x}):(0,H.jsxs)(N,{children:[(0,H.jsx)(P,{asChild:!0,children:(0,H.jsxs)(`div`,{ref:d,tabIndex:0,"data-testid":`explorer-columns`,"aria-label":`Column view`,onKeyDown:S,className:`flex h-full min-h-0 w-full overflow-x-auto outline-none`,...s,children:[l.map((t,r)=>(0,H.jsx)(on,{path:t.path,entries:t.entries,loading:t.loading,error:t.error,selectedPath:v(r),isFocused:r===f,currentDir:e.path,hasClipboard:i,isPinned:a,actions:n,rowHeight:c,onSelect:e=>b(r,e),onOpen:x,onFocus:()=>p(r)},t.path)),C&&(0,H.jsx)(`div`,{className:`min-w-[240px] flex-1 border-l border-border bg-panel-2/30`,children:(0,H.jsx)(fn,{entry:_,onOpen:x})})]})}),(0,H.jsx)(Y,{targets:[],currentDir:e.path,hasClipboard:i,isPinned:a,actions:n})]})}function X(e,t){if(e.selection.size>0)return t.filter(t=>e.selection.has(t.path));let n=t.find(t=>t.path===e.anchor);return n?[n]:[]}function _n({slice:e,entries:t,actions:n,selection:r,nav:i}){return(0,V.useCallback)(a=>{if(!e)return;let o=a.target;if(o.tagName===`INPUT`||o.tagName===`TEXTAREA`||o.isContentEditable)return;let s=a.ctrlKey||a.metaKey,c=X(e,t);if(s)switch(a.key.toLowerCase()){case`a`:a.preventDefault(),r.selectAll();return;case`c`:a.preventDefault(),n.copy(c);return;case`x`:a.preventDefault(),n.cut(c);return;case`v`:a.preventDefault(),n.paste();return;default:return}switch(a.key){case`ArrowDown`:a.preventDefault(),r.moveTo(1,a.shiftKey);return;case`ArrowUp`:a.preventDefault(),r.moveTo(-1,a.shiftKey);return;case`Home`:a.preventDefault(),t[0]&&r.selectOnly(t[0].path);return;case`End`:a.preventDefault(),t.length>0&&r.selectOnly(t[t.length-1].path);return;case`ArrowLeft`:a.altKey&&(a.preventDefault(),i.back());return;case`ArrowRight`:a.altKey&&(a.preventDefault(),i.forward());return;case`Backspace`:a.preventDefault(),i.back();return;case`Enter`:a.preventDefault(),c.length===1&&n.openEntry(c[0]);return;case`F2`:a.preventDefault(),c.length===1&&n.startRename(c[0]);return;case`Delete`:if(a.preventDefault(),c.length===0)return;a.shiftKey?n.confirmPermanentDelete(c):n.trash(c);return;case`Escape`:r.clear();return}a.key.length===1&&!a.altKey&&(a.preventDefault(),r.typeAhead(a.key))},[e,t,n,r,i])}function vn(e,t){let n=D(),r=j(e=>e.selectMode),{setOpen:i}=(0,V.useContext)(xe);return{isMobile:n,selectMode:r,handleTap:(a,o)=>n?r?(t.onRowClick(a.path,{shiftKey:!1,ctrlKey:!0,metaKey:!1}),!0):(o||t.selectOnly(a.path),$t(a)===`open`?e.openEntry(a):i(!0),!0):!1}}function Z({initial:e,error:t,onCommit:n,onCancel:r,className:i}){let[a,o]=(0,V.useState)(e),s=(0,V.useRef)(null);return(0,V.useEffect)(()=>{let t=s.current;if(!t)return;t.focus();let n=e.lastIndexOf(`.`);n>0?t.setSelectionRange(0,n):t.select()},[e]),(0,H.jsxs)(`div`,{className:`relative flex-1 min-w-0`,children:[(0,H.jsx)(`input`,{ref:s,value:a,"aria-label":`Name`,"aria-invalid":!!t,onChange:e=>o(e.target.value),onBlur:()=>n(a),onKeyDown:e=>{e.stopPropagation(),e.key===`Enter`?n(a):e.key===`Escape`&&r()},className:E(`w-full rounded-[var(--rad-sm)] border bg-panel px-1.5 py-0.5 text-[13px] text-text outline-none`,t?`border-error`:`border-primary`,i)}),t&&(0,H.jsx)(`span`,{className:`absolute left-0 top-full z-10 mt-0.5 rounded border border-border bg-panel-2 px-1.5 py-0.5 text-[11px] text-error shadow-sm`,children:t})]})}var yn=(0,V.memo)(function(e){let{entry:t,currentDir:n,hasClipboard:r,isPinned:i,actions:a,menuTargets:o}=e,s=Qt({entry:t,dragPaths:(0,V.useMemo)(()=>o.map(e=>e.path),[o]),run:a.transferInto,onFiles:a.uploadInto});return(0,H.jsxs)(N,{children:[(0,H.jsx)(P,{asChild:!0,children:(0,H.jsx)(bn,{...e,dnd:s.props,dropActive:s.isDropTarget})}),(0,H.jsx)(Y,{targets:o,currentDir:n,hasClipboard:r,isPinned:i,actions:a})]})}),bn=(0,V.forwardRef)(function({entry:e,selected:t,focused:n,cut:r,renaming:i,tileWidth:a,actions:o,selection:s,inlineError:c,currentDir:l,hasClipboard:u,isPinned:d,menuTargets:f,dnd:p,dropActive:m,...h},g){let _=Ke(()=>{t||s.selectOnly(e.path)}),{isMobile:v,selectMode:y,handleTap:b}=vn(o,s),x=e.type!==`directory`&&ut(e.name)===`image`;return(0,H.jsxs)(`div`,{ref:g,...nn({...h,..._,...p},{role:`gridcell`,"aria-selected":t,"data-testid":`explorer-tile`,"data-path":e.path,title:e.name,style:a?{width:a}:void 0,onContextMenu:n=>{t||s.selectOnly(e.path),n.stopPropagation()},onClick:n=>{b(e,t)||s.onRowClick(e.path,n)},onDoubleClick:()=>o.openEntry(e),className:E(`relative flex flex-col items-center gap-1 rounded p-2 text-center select-none`,!a&&`w-full`,`can-hover:hover:bg-surface-elevated`,n&&!t&&`bg-surface-elevated`,t&&`bg-accent-wash`,r&&`opacity-40`,m&&`ring-1 ring-dashed ring-primary bg-primary/10`)}),children:[v&&y&&(0,H.jsx)(`span`,{"aria-hidden":!0,className:E(`absolute left-1.5 top-1.5 flex size-5 items-center justify-center rounded border`,t?`border-primary bg-primary text-primary-foreground`:`border-border bg-panel`),children:t&&(0,H.jsx)(fe,{className:`size-3.5`})}),(0,H.jsx)(`div`,{className:`flex h-12 w-12 shrink-0 items-center justify-center`,children:x?(0,H.jsx)(dn,{entry:e,size:48}):(0,H.jsx)(U,{name:e.name,kind:e.kind,className:`size-12`})}),i?(0,H.jsx)(Z,{initial:e.name,error:c,onCommit:e=>void o.commitInline(e),onCancel:o.cancelInline}):(0,H.jsx)(`span`,{className:E(`line-clamp-2 w-full break-words text-[12px] leading-tight`,t?`text-text`:`text-text-2`),children:e.name})]})}),xn=96,Sn=88,Cn=4,wn=16,Tn=3;function En({slice:e,entries:t,actions:n,selection:r,inlineError:i,hasClipboard:a,isPinned:o,backgroundLongPress:s}){let c=ve(e=>e.clipboard?.operation===`cut`?e.clipboard.paths:null),l=(0,V.useRef)(null);M(l);let u=D(),[d,f]=(0,V.useState)(u?Tn:1);(0,V.useEffect)(()=>{if(u){f(Tn);return}let e=l.current;if(!e)return;let t=()=>{let t=e.clientWidth-wn+Cn;f(Math.max(1,Math.floor(t/(xn+Cn))))};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[u]);let p=et({count:Math.ceil(t.length/d),getScrollElement:()=>l.current,estimateSize:()=>Sn,overscan:4}),m=e.anchor?t.findIndex(t=>t.path===e.anchor):-1,h=m>=0?Math.floor(m/d):-1;(0,V.useEffect)(()=>{h>=0&&p.scrollToIndex(h,{align:`auto`})},[h]);let g=(0,V.useMemo)(()=>X(e,t),[e,t]),_=e.inlineEdit?.kind===`new-file`||e.inlineEdit?.kind===`new-folder`,v=A({targetDir:e.path,run:n.transferInto,onFiles:n.uploadInto}),y=e=>{if(!(e.altKey||e.ctrlKey||e.metaKey))switch(e.key){case`ArrowDown`:e.preventDefault(),e.stopPropagation(),r.moveTo(d,e.shiftKey);return;case`ArrowUp`:e.preventDefault(),e.stopPropagation(),r.moveTo(-d,e.shiftKey);return;case`ArrowLeft`:e.preventDefault(),e.stopPropagation(),r.moveTo(-1,e.shiftKey);return;case`ArrowRight`:e.preventDefault(),e.stopPropagation(),r.moveTo(1,e.shiftKey);return}};return(0,H.jsxs)(N,{children:[(0,H.jsx)(P,{asChild:!0,children:(0,H.jsxs)(`div`,{ref:l,role:`grid`,tabIndex:0,"data-testid":`explorer-icons`,"aria-label":`File icons`,onKeyDown:y,onMouseDown:e=>{e.target===e.currentTarget&&r.clear()},className:E(`h-full flex-1 overflow-auto p-2 outline-none`,v.isOver&&`ring-1 ring-dashed ring-primary bg-primary/10`),...s,...v.handlers,children:[_&&(0,H.jsx)(`div`,{className:`mb-2 flex flex-col items-center gap-1 p-2`,style:u?void 0:{width:xn},children:(0,H.jsx)(Z,{initial:``,error:i,onCommit:e=>void n.commitInline(e),onCancel:n.cancelInline})}),(0,H.jsx)(`div`,{className:`relative w-full`,style:{height:p.getTotalSize()},children:p.getVirtualItems().map(s=>{let l=s.index*d,f=t.slice(l,l+d);return(0,H.jsx)(`div`,{role:`row`,className:E(`absolute left-0 top-0 w-full gap-1`,u?`grid grid-cols-3`:`flex`),style:{transform:`translateY(${s.start}px)`},children:f.map(t=>(0,H.jsx)(yn,{entry:t,currentDir:e.path,selected:e.selection.has(t.path),focused:e.anchor===t.path,cut:c?.includes(t.path)===!0,renaming:e.inlineEdit?.kind===`rename`&&e.inlineEdit.path===t.path,tileWidth:u?void 0:xn,menuTargets:e.selection.has(t.path)?g:[t],actions:n,selection:r,hasClipboard:a,isPinned:o,inlineError:i},t.path))},s.index)})}),t.length===0&&!e.loading&&!_&&(0,H.jsx)(`p`,{className:`p-3 text-xs text-text-subtle`,children:e.filter?`No entries match the filter.`:`This folder is empty.`})]})}),(0,H.jsx)(Y,{targets:[],currentDir:e.path,hasClipboard:a,isPinned:o,actions:n})]})}var Dn=(0,V.memo)(function(e){let{entry:t,currentDir:n,hasClipboard:r,isPinned:i,actions:a,menuTargets:o}=e,s=Qt({entry:t,dragPaths:(0,V.useMemo)(()=>o.map(e=>e.path),[o]),run:a.transferInto,onFiles:a.uploadInto});return(0,H.jsxs)(N,{children:[(0,H.jsx)(P,{asChild:!0,children:(0,H.jsx)(On,{...e,dnd:s.props,dropActive:s.isDropTarget})}),(0,H.jsx)(Y,{targets:o,currentDir:n,hasClipboard:r,isPinned:i,actions:a})]})}),On=(0,V.forwardRef)(function({entry:e,selected:t,focused:n,cut:r,renaming:i,height:a,actions:o,selection:s,inlineError:c,currentDir:l,hasClipboard:u,isPinned:d,menuTargets:f,dnd:p,dropActive:m,...h},g){let _=Ke(()=>{t||s.selectOnly(e.path)}),{isMobile:v,selectMode:y,handleTap:b}=vn(o,s);return(0,H.jsxs)(`div`,{ref:g,...nn({...h,..._,...p},{role:`row`,"aria-selected":t,"data-testid":`explorer-row`,"data-path":e.path,title:e.name,style:{height:a},onContextMenu:n=>{t||s.selectOnly(e.path),n.stopPropagation()},onClick:n=>{b(e,t)||s.onRowClick(e.path,n)},onDoubleClick:()=>o.openEntry(e),className:E(`flex w-full items-center gap-2 px-2 text-[13px] select-none`,`can-hover:hover:bg-surface-elevated`,n&&!t&&`bg-surface-elevated`,t&&`bg-accent-wash`,r&&`opacity-40`,m&&`ring-1 ring-dashed ring-primary bg-primary/10`)}),children:[v&&y&&(0,H.jsx)(`span`,{"aria-hidden":!0,className:E(`flex size-5 shrink-0 items-center justify-center rounded border`,t?`border-primary bg-primary text-primary-foreground`:`border-border`),children:t&&(0,H.jsx)(fe,{className:`size-3.5`})}),(0,H.jsx)(U,{name:e.name,kind:e.kind,className:`size-4`}),i?(0,H.jsx)(Z,{initial:e.name,error:c,onCommit:e=>void o.commitInline(e),onCancel:o.cancelInline}):(0,H.jsx)(`span`,{className:E(`flex-1 truncate`,t?`text-text`:`text-text-2`),children:e.name}),(0,H.jsx)(`span`,{className:`w-20 shrink-0 text-right tabular-nums text-text-subtle`,children:e.type===`directory`?``:De(e.size)}),(0,H.jsx)(`span`,{className:`hidden w-24 shrink-0 text-right text-text-subtle sm:inline`,children:Te(e.modified)}),(0,H.jsx)(`span`,{className:`hidden w-16 shrink-0 truncate text-right text-text-subtle md:inline`,children:e.type===`directory`?`Folder`:z(e.name)||`File`})]})}),kn={name:`flex-1 text-left`,size:`w-20 text-right`,modified:`hidden w-24 text-right sm:block`,kind:`hidden w-16 text-right md:block`},An=q.map(e=>({...e,className:kn[e.key]}));function jn({slice:e,entries:t,actions:n,selection:r,inlineError:i,hasClipboard:a,isPinned:o,rowHeight:s,backgroundLongPress:c}){let l=F(e=>e.sort),u=F(e=>e.setPrefs),p=ve(e=>e.clipboard?.operation===`cut`?e.clipboard.paths:null),m=(0,V.useRef)(null);M(m);let h=Ve(),g=Ge(),_=et({count:t.length,getScrollElement:()=>m.current,estimateSize:()=>s,overscan:12}),v=e.anchor?t.findIndex(t=>t.path===e.anchor):-1;(0,V.useEffect)(()=>{v>=0&&_.scrollToIndex(v,{align:`auto`})},[v]);let y=(0,V.useMemo)(()=>X(e,t),[e,t]),b=e.inlineEdit?.kind===`new-file`||e.inlineEdit?.kind===`new-folder`,x=A({targetDir:e.path,run:n.transferInto,onFiles:n.uploadInto}),S=e=>u({sort:{key:e,dir:l.key===e&&l.dir===`asc`?`desc`:`asc`}});return(0,H.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,H.jsx)(`div`,{role:`row`,className:E(`flex shrink-0 items-center gap-2 border-b border-border bg-[var(--x-toolbar-bg,var(--panel-2))] px-2 py-1 text-[11px] font-medium text-text-subtle`,h.id===`windows`&&`divide-x divide-border`),children:An.map(e=>(0,H.jsxs)(`button`,{type:`button`,"aria-label":`Sort by ${e.label}`,onClick:()=>S(e.key),className:E(`relative flex items-center gap-0.5 can-hover:hover:text-text`,h.id===`windows`&&e.key!==`name`&&`pl-2`,e.className,e.key!==`name`&&`justify-end`,g&&`before:absolute before:-inset-x-2 before:-inset-y-3 before:content-['']`),children:[e.label,l.key===e.key&&(l.dir===`asc`?(0,H.jsx)(d,{className:`size-3`}):(0,H.jsx)(f,{className:`size-3`}))]},e.key))}),(0,H.jsxs)(N,{children:[(0,H.jsx)(P,{asChild:!0,children:(0,H.jsxs)(`div`,{ref:m,role:`grid`,tabIndex:0,"data-testid":`explorer-list`,"aria-label":`File list`,onMouseDown:e=>{e.target===e.currentTarget&&r.clear()},className:E(`flex-1 overflow-auto outline-none`,x.isOver&&`ring-1 ring-dashed ring-primary bg-primary/10`),...c,...x.handlers,children:[b&&(0,H.jsxs)(`div`,{className:`flex items-center gap-2 px-2`,style:{height:s},children:[(0,H.jsx)(`span`,{className:`size-4 shrink-0`}),(0,H.jsx)(Z,{initial:``,error:i,onCommit:e=>void n.commitInline(e),onCancel:n.cancelInline})]}),(0,H.jsx)(`div`,{className:`relative w-full`,style:{height:_.getTotalSize()},children:_.getVirtualItems().map(c=>{let l=t[c.index];return(0,H.jsx)(`div`,{className:E(`absolute left-0 top-0 w-full`,h.id===`macos`&&c.index%2==1&&`bg-panel-2/40`),style:{transform:`translateY(${c.start}px)`},children:(0,H.jsx)(Dn,{entry:l,currentDir:e.path,selected:e.selection.has(l.path),focused:e.anchor===l.path,cut:p?.includes(l.path)===!0,renaming:e.inlineEdit?.kind===`rename`&&e.inlineEdit.path===l.path,height:s,menuTargets:e.selection.has(l.path)?y:[l],actions:n,selection:r,hasClipboard:a,isPinned:o,inlineError:i})},l.path)})}),t.length===0&&!e.loading&&!b&&(0,H.jsx)(`p`,{className:`p-3 text-xs text-text-subtle`,children:e.filter?`No entries match the filter.`:`This folder is empty.`})]})}),(0,H.jsx)(Y,{targets:[],currentDir:e.path,hasClipboard:a,isPinned:o,actions:n})]})]})}var Mn={list:jn,icons:En,columns:gn},Nn=Object.keys(Mn);function Pn(e){return Mn[e]??jn}var Fn={list:g,icons:y,columns:ce},In={list:`List view`,icons:`Icons view`,columns:`Column view`};function Ln({windowId:e,slice:t,nav:n,actions:r}){let i=F(e=>e.patch),o=F(e=>e.showHidden),c=F(e=>e.viewMode),u=F(e=>e.setPrefs),[d,f]=(0,V.useState)(!1),[p,m]=(0,V.useState)(t.path);(0,V.useEffect)(()=>m(t.path),[t.path]);let h=Ge();return(0,H.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-1 border-b border-border bg-[var(--x-toolbar-bg,var(--panel-2))] px-1.5 py-1`,children:[(0,H.jsx)(`button`,{type:`button`,"aria-label":`Back`,title:`Back`,disabled:!n.canGoBack,onClick:n.back,className:J(h),children:(0,H.jsx)(te,{className:`size-4`})}),(0,H.jsx)(`button`,{type:`button`,"aria-label":`Forward`,title:`Forward`,disabled:!n.canGoForward,onClick:n.forward,className:J(h),children:(0,H.jsx)(le,{className:`size-4`})}),(0,H.jsx)(`button`,{type:`button`,"aria-label":`Up one level`,title:`Up`,disabled:!t.parent,onClick:n.up,className:J(h),children:(0,H.jsx)(v,{className:`size-4`})}),(0,H.jsx)(`button`,{type:`button`,"aria-label":`Refresh`,title:`Refresh`,onClick:n.refresh,className:J(h),children:(0,H.jsx)(x,{className:E(`size-4`,t.loading&&`animate-spin`)})}),(0,H.jsxs)(`div`,{className:`flex min-w-[8rem] flex-1 items-center gap-1 rounded border border-border bg-panel px-1`,children:[d?(0,H.jsx)(`input`,{autoFocus:!0,"aria-label":`Path`,value:p,onChange:e=>m(e.target.value),onBlur:()=>f(!1),onKeyDown:e=>{e.stopPropagation(),e.key===`Enter`?(n.go(p.trim()),f(!1)):e.key===`Escape`&&(m(t.path),f(!1))},className:`min-w-0 flex-1 bg-transparent py-1 font-mono text-xs text-text outline-none`}):(0,H.jsx)(Kt,{crumbs:t.breadcrumbs,onNavigate:n.go,sep:t.sep,className:`flex-1 overflow-hidden py-0.5`}),(0,H.jsx)(`button`,{type:`button`,"aria-label":d?`Show breadcrumb`:`Edit path`,title:d?`Show breadcrumb`:`Edit path`,onClick:()=>f(e=>!e),className:J(h),children:(0,H.jsx)(a,{className:`size-3.5`})})]}),(0,H.jsxs)(`div`,{className:`flex items-center gap-1 rounded border border-border bg-panel px-1`,children:[(0,H.jsx)(ue,{className:`size-3.5 shrink-0 text-text-subtle`}),(0,H.jsx)(`input`,{"aria-label":`Filter entries`,placeholder:`Filter`,value:t.filter,onChange:t=>i(e,{filter:t.target.value}),onKeyDown:t=>{t.stopPropagation(),t.key===`Escape`&&i(e,{filter:``})},className:`w-24 min-w-0 bg-transparent py-1 text-xs text-text outline-none placeholder:text-text-subtle`}),t.filter&&(0,H.jsx)(`button`,{type:`button`,"aria-label":`Clear filter`,onClick:()=>i(e,{filter:``}),className:J(h),children:(0,H.jsx)(s,{className:`size-3.5`})})]}),Nn.length>1&&Nn.map(e=>{let t=Fn[e];return(0,H.jsx)(`button`,{type:`button`,"aria-label":In[e],title:In[e],"aria-pressed":c===e,onClick:()=>u({viewMode:e}),className:E(J(h),c===e&&`bg-accent-wash text-primary`),children:(0,H.jsx)(t,{className:`size-4`})},e)}),(0,H.jsx)(Zt,{coarse:h}),r.supportsFolderUpload?(0,H.jsxs)(Je,{children:[(0,H.jsx)(ze,{asChild:!0,children:(0,H.jsx)(`button`,{type:`button`,"aria-label":`Upload`,title:`Upload`,className:J(h),children:(0,H.jsx)(l,{className:`size-4`})})}),(0,H.jsxs)(ct,{align:`end`,children:[(0,H.jsx)(Ye,{onClick:()=>r.openUploadPicker(),children:`Upload Files…`}),(0,H.jsx)(Ye,{onClick:()=>r.openUploadFolderPicker(),children:`Upload Folder…`})]})]}):(0,H.jsx)(`button`,{type:`button`,"aria-label":`Upload`,title:`Upload`,onClick:()=>r.openUploadPicker(),className:J(h),children:(0,H.jsx)(l,{className:`size-4`})}),(0,H.jsx)(`button`,{type:`button`,"aria-label":o?`Hide hidden files`:`Show hidden files`,title:o?`Hide hidden files`:`Show hidden files`,"aria-pressed":o,onClick:()=>u({showHidden:!o}),className:E(J(h),o&&`bg-accent-wash text-primary`),children:o?(0,H.jsx)(ne,{className:`size-4`}):(0,H.jsx)(de,{className:`size-4`})})]})}var Rn={list:g,icons:y,columns:ce},zn={list:`List`,icons:`Icons`,columns:`Columns`};function Bn(e){return{name:e.breadcrumbs[e.breadcrumbs.length-1]?.name??e.path,path:e.path,type:`directory`,kind:`directory`,modified:``}}function Vn({open:e,onClose:t,slice:n,actions:r,entries:i}){let a=F(e=>e.viewMode),o=F(e=>e.sort),s=F(e=>e.showHidden),l=F(e=>e.setPrefs),d=X(n,i);return(0,H.jsxs)(Ce,{open:e,onClose:t,className:`p-2`,children:[(0,H.jsx)(Se,{children:`View`}),(0,H.jsx)(`div`,{className:`flex gap-1 px-2 pb-2`,children:Nn.map(e=>{let n=Rn[e];return(0,H.jsxs)(`button`,{type:`button`,"aria-pressed":a===e,onClick:()=>{l({viewMode:e}),t()},className:E(`flex flex-1 flex-col items-center gap-1 rounded-lg py-2 text-xs active:bg-surface-elevated`,a===e?`bg-accent-wash text-primary`:`text-text-2`),children:[(0,H.jsx)(n,{className:`size-4`}),zn[e]]},e)})}),(0,H.jsx)(be,{}),(0,H.jsx)(Se,{children:`Sort by`}),(0,H.jsx)(`div`,{className:`flex flex-wrap gap-1 px-2 pb-2`,children:q.map(({key:e,label:n})=>(0,H.jsxs)(`button`,{type:`button`,"aria-pressed":o.key===e,onClick:()=>{l({sort:{key:e,dir:o.key===e&&o.dir===`asc`?`desc`:`asc`}}),t()},className:E(`inline-flex min-h-11 items-center justify-center rounded-full border px-3 py-1.5 text-xs active:bg-surface-elevated`,o.key===e?`border-primary bg-accent-wash text-text`:`border-border text-text-2`),children:[n,o.key===e?o.dir===`asc`?` ↑`:` ↓`:``]},e))}),(0,H.jsx)(be,{}),(0,H.jsxs)(O,{onClick:()=>l({showHidden:!s}),children:[s?(0,H.jsx)(ne,{className:`size-4`}):(0,H.jsx)(de,{className:`size-4`}),s?`Hide hidden files`:`Show hidden files`]}),(0,H.jsx)(be,{}),(0,H.jsxs)(O,{variant:`destructive`,disabled:d.length===0,onClick:()=>r.confirmPermanentDelete(d),children:[(0,H.jsx)(u,{className:`size-4`}),`Delete permanently`,d.length>1?` (${d.length})`:``]}),(0,H.jsxs)(O,{onClick:()=>r.showProperties(Bn(n)),children:[(0,H.jsx)(c,{className:`size-4`}),`Properties of this folder`]})]})}function Q({icon:e,label:t,onClick:n,disabled:r,destructive:i}){return(0,H.jsxs)(`button`,{type:`button`,"aria-label":t,title:t,disabled:r,onClick:n,className:`flex min-w-[44px] flex-1 flex-col items-center gap-0.5 rounded-lg py-1.5 text-[10px] active:bg-surface-elevated disabled:opacity-30 ${i?`text-error`:`text-text-2`}`,children:[(0,H.jsx)(e,{className:`size-5`}),(0,H.jsx)(`span`,{className:`truncate`,children:t})]})}function Hn({slice:e,nav:t,actions:n,entries:i,hasClipboard:a}){let o=j(e=>e.selectMode),d=j(e=>e.setSelectMode),[f,p]=(0,V.useState)(!1),[m,g]=(0,V.useState)(!1),v=i.filter(t=>e.selection.has(t.path));return o?(0,H.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 border-t border-border px-1 py-1`,children:[(0,H.jsx)(Q,{icon:s,label:`Cancel`,onClick:()=>{d(!1)}}),(0,H.jsxs)(`span`,{className:`px-1 text-xs text-text-subtle`,children:[v.length,` selected`]}),(0,H.jsx)(`div`,{className:`flex-1`}),(0,H.jsx)(Q,{icon:_,label:`Cut`,disabled:v.length===0,onClick:()=>n.cut(v)}),(0,H.jsx)(Q,{icon:re,label:`Copy`,disabled:v.length===0,onClick:()=>n.copy(v)}),(0,H.jsx)(Q,{icon:u,label:`Trash`,disabled:v.length===0,destructive:!0,onClick:()=>n.trash(v)}),(0,H.jsx)(Q,{icon:se,label:`Download`,disabled:!v.some(e=>e.type===`file`),onClick:()=>n.download(v)}),v.length===1&&(0,H.jsx)(Q,{icon:c,label:`Info`,onClick:()=>n.showProperties(v[0])})]}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 border-t border-border px-1 py-1`,children:[(0,H.jsx)(Q,{icon:te,label:`Back`,disabled:!t.canGoBack,onClick:t.back}),(0,H.jsx)(Q,{icon:h,label:`New`,onClick:()=>p(!0)}),(0,H.jsx)(Q,{icon:ae,label:`Paste`,disabled:!a,onClick:()=>n.paste()}),(0,H.jsx)(Q,{icon:fe,label:`Select`,onClick:()=>d(!0)}),(0,H.jsx)(Q,{icon:r,label:`More`,onClick:()=>g(!0)})]}),(0,H.jsxs)(Ce,{open:f,onClose:()=>p(!1),className:`p-2`,children:[(0,H.jsxs)(O,{onClick:()=>n.startCreate(`new-file`),children:[(0,H.jsx)(b,{className:`size-4`}),` New File`]}),(0,H.jsxs)(O,{onClick:()=>n.startCreate(`new-folder`),children:[(0,H.jsx)(ee,{className:`size-4`}),` New Folder`]}),(0,H.jsxs)(O,{onClick:()=>{p(!1),n.openUploadPicker()},children:[(0,H.jsx)(l,{className:`size-4`}),` Upload Files…`]})]}),(0,H.jsx)(Vn,{open:m,onClose:()=>g(!1),slice:e,actions:n,entries:i})]})}function Un(e){return e.breadcrumbs[e.breadcrumbs.length-1]?.name??e.path}function Wn({slice:e,onClose:t}){return(0,H.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,H.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[15px] font-semibold text-text`,children:Un(e)}),(0,H.jsx)(`button`,{type:`button`,"aria-label":`Close file explorer`,title:`Close`,onClick:t,className:`flex size-11 shrink-0 items-center justify-center rounded-full text-text-2 active:bg-surface-elevated`,children:(0,H.jsx)(s,{className:`size-5`})})]})}var Gn=`size-4 shrink-0 text-text-subtle`,Kn={fixed:i,removable:p,network:dt,unknown:i};function qn(){return(0,H.jsx)(U,{name:``,kind:`directory`,className:Gn})}function $({label:e,path:t,active:n,icon:r,onNavigate:i}){return(0,H.jsxs)(`button`,{type:`button`,title:t,onClick:()=>i(t),className:E(`flex min-h-[44px] w-full items-center gap-2.5 rounded-lg px-3 text-left text-sm active:bg-surface-elevated`,n?`bg-accent-wash text-text`:`text-text-2`),children:[r,(0,H.jsx)(`span`,{className:`truncate`,children:e})]})}function Jn({title:e,children:t}){return(0,H.jsxs)(`div`,{className:`pb-2`,children:[(0,H.jsx)(`p`,{className:`px-3 pb-1 pt-3 text-[11px] font-semibold uppercase tracking-wide text-text-subtle`,children:e}),t]})}function Yn({open:e,onClose:t,host:n,currentPath:r,vocab:i,onNavigate:a}){let o=B(e=>e.pins),s=e=>e===r;return(0,H.jsx)(Ce,{open:e,onClose:t,zIndex:65,className:`p-1`,children:(0,H.jsxs)(`div`,{className:`max-h-[70vh] overflow-y-auto px-1 pb-2`,children:[o.length>0&&(0,H.jsx)(Jn,{title:`Pinned`,children:o.map(e=>(0,H.jsx)($,{label:e.name,path:e.path,icon:(0,H.jsx)(w,{className:Gn}),active:s(e.path),onNavigate:a},e.path))}),n&&n.pinned.length>0&&(0,H.jsx)(Jn,{title:i.pinned,children:n.pinned.map(e=>(0,H.jsx)($,{label:e.name,path:e.path,icon:qn(),active:s(e.path),onNavigate:a},e.path))}),n&&(0,H.jsxs)(Jn,{title:i.known,children:[(0,H.jsx)($,{label:i.home,path:n.homedir,icon:qn(),active:s(n.homedir),onNavigate:a}),n.knownFolders.map(e=>(0,H.jsx)($,{label:e.name,path:e.path,icon:qn(),active:s(e.path),onNavigate:a},e.path))]}),n&&n.drives.length>0&&(0,H.jsx)(Jn,{title:i.drives,children:n.drives.map(e=>{let t=Kn[e.kind];return(0,H.jsx)($,{label:e.label?`${e.label} (${e.name})`:e.name,path:e.path,icon:(0,H.jsx)(t,{className:Gn}),active:s(e.path),onNavigate:a},e.path)})})]})})}function Xn({className:e}){return(0,H.jsx)(U,{name:``,kind:`directory`,className:e})}var Zn={fixed:i,removable:p,network:dt,unknown:i};function Qn({chip:e,active:t,onNavigate:n}){let r=e.icon;return(0,H.jsxs)(`button`,{type:`button`,onClick:()=>n(e.path),title:e.path,className:E(`flex h-11 shrink-0 items-center gap-1.5 rounded-full border px-3 text-[13px] active:bg-surface-elevated`,t?`border-primary bg-accent-wash text-text`:`border-border text-text-2`),children:[(0,H.jsx)(r,{className:`size-4 shrink-0 text-text-subtle`}),(0,H.jsx)(`span`,{className:`max-w-[9rem] truncate`,children:e.label})]})}function $n({host:e,currentPath:t,onNavigate:n,vocab:i}){let a=B(e=>e.pins),[o,s]=(0,V.useState)(!1);return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5 overflow-x-auto touch-pan-x border-b border-border px-2 py-1.5`,children:[[...a.map(e=>({key:`pin:${e.path}`,label:e.name,path:e.path,icon:w})),...e?[{key:`home`,label:i.home,path:e.homedir,icon:Xn}]:[],...e?.pinned.map(e=>({key:`os:${e.path}`,label:e.name,path:e.path,icon:Xn}))??[],...e?.drives.map(e=>({key:`drive:${e.path}`,label:e.label?`${e.label} (${e.name})`:e.name,path:e.path,icon:Zn[e.kind]}))??[]].map(e=>(0,H.jsx)(Qn,{chip:e,active:e.path===t,onNavigate:n},e.key)),(0,H.jsx)(`button`,{type:`button`,"aria-label":`All places`,title:`All places`,onClick:()=>s(!0),className:`flex h-11 shrink-0 items-center gap-1 rounded-full border border-border px-3 text-[13px] text-text-2 active:bg-surface-elevated`,children:(0,H.jsx)(r,{className:`size-4`})})]}),(0,H.jsx)(Yn,{open:o,onClose:()=>s(!1),host:e,currentPath:t,vocab:i,onNavigate:e=>{s(!1),n(e)}})]})}function er(e,t,n){let r=(0,V.useRef)(null),i=F(e=>e.patch),a=(0,V.useRef)(t?.path??``);a.current=t?.path??``;let o=(0,V.useRef)(n);o.current=n;let s=(0,V.useCallback)(async t=>{r.current?.abort();let n=new AbortController;r.current=n,i(e,{loading:!0,error:null});try{let r=await k.browse(t,{showHidden:o.current,signal:n.signal});if(n.signal.aborted)return;i(e,{entries:r.entries,breadcrumbs:r.breadcrumbs,parent:r.parent,sep:r.sep,truncated:r.truncated===!0,loading:!1,error:null})}catch(t){if(n.signal.aborted||t instanceof DOMException&&t.name===`AbortError`)return;i(e,{loading:!1,entries:[],error:t instanceof we?{message:t.message,code:t.code,hint:t.hint}:{message:t instanceof Error?t.message:`Failed to read directory`,code:`EUNKNOWN`}})}},[e,i]),c=t?.path;(0,V.useEffect)(()=>{if(c)return s(c),()=>r.current?.abort()},[c,n,s]),(0,V.useEffect)(()=>at(e=>{e===a.current&&s(e)}),[s]);let l=(0,V.useCallback)((t,n)=>{let r=F.getState().slices[e];if(!r||t===r.path)return;let a=n?.replace?[...r.history.slice(0,r.historyIndex),t]:[...r.history.slice(0,r.historyIndex+1),t];i(e,{path:t,history:a.slice(-100),historyIndex:Math.min(a.length,100)-1,selection:new Set,anchor:null,filter:``,inlineEdit:null}),ge.getState().setPayload(e,{path:t})},[e,i]),u=(0,V.useCallback)(t=>{let n=F.getState().slices[e];if(!n)return;let r=n.historyIndex+t,a=n.history[r];a!=null&&(i(e,{path:a,historyIndex:r,selection:new Set,anchor:null,filter:``,inlineEdit:null}),ge.getState().setPayload(e,{path:a}))},[e,i]),d=(0,V.useCallback)(()=>u(-1),[u]),f=(0,V.useCallback)(()=>u(1),[u]),p=(0,V.useCallback)(()=>{let t=F.getState().slices[e];t?.parent&&l(t.parent)},[e,l]),m=(0,V.useCallback)(()=>{a.current&&s(a.current)},[s]),h=(t?.historyIndex??0)>0,g=t?t.historyIndex<t.history.length-1:!1;return(0,V.useMemo)(()=>({go:l,back:d,forward:f,up:p,refresh:m,canGoBack:h,canGoForward:g}),[l,d,f,p,m,h,g])}function tr(e,t,n){let r=t==null?-1:e.indexOf(t),i=e.indexOf(n);if(i<0)return[];if(r<0)return[n];let[a,o]=r<=i?[r,i]:[i,r];return e.slice(a,o+1)}function nr(e,t,n){switch(n.type){case`clear`:return{selection:new Set,anchor:null};case`select-all`:return{selection:new Set(t),anchor:e.anchor??t[0]??null};case`set`:return{selection:new Set(n.paths),anchor:n.anchor===void 0?n.paths[n.paths.length-1]??null:n.anchor};case`click`:if(n.ctrl){let t=new Set(e.selection);return t.has(n.path)?t.delete(n.path):t.add(n.path),{selection:t,anchor:n.path}}if(n.shift){let r=tr(t,e.anchor,n.path);return{selection:new Set(r),anchor:e.anchor??n.path}}return{selection:new Set([n.path]),anchor:n.path}}}function rr(e,t,n){if(e.length===0)return null;let r=t==null?-1:e.indexOf(t);return r<0?n>0?e[0]:e[e.length-1]:e[Math.min(e.length-1,Math.max(0,r+n))]}function ir(e,t,n){if(!t)return-1;let r=t.toLowerCase(),i=n<0?0:n+1;for(let t=0;t<e.length;t++){let n=(i+t)%e.length;if(e[n].toLowerCase().startsWith(r))return n}return-1}function ar(e,t){let n=F(e=>e.patch),r=(0,V.useRef)(t);r.current=t;let i=(0,V.useRef)({text:``,at:0}),a=(0,V.useCallback)(t=>{let i=F.getState().slices[e];i&&n(e,nr(i,r.current,t))},[e,n]),o=(0,V.useCallback)((t,n)=>{let i=F.getState().slices[e];if(!i)return;let o=rr(r.current,i.anchor,t);o!=null&&a({type:`click`,path:o,shift:n})},[e,a]),s=(0,V.useCallback)(t=>{let n=F.getState().slices[e];if(!n)return null;let o=Date.now(),s=o-i.current.at>800?t:i.current.text+t;i.current={text:s,at:o};let c=r.current,l=ir(c.map(e=>e.split(/[/\\]/).pop()??e),s,s.length===1&&n.anchor?c.indexOf(n.anchor):-1);return l<0?null:(a({type:`click`,path:c[l]}),c[l])},[e,a]),c=(0,V.useCallback)((e,t)=>a({type:`click`,path:e,shift:t.shiftKey,ctrl:t.ctrlKey||t.metaKey}),[a]),l=(0,V.useCallback)(e=>a({type:`click`,path:e}),[a]),u=(0,V.useCallback)(()=>a({type:`select-all`}),[a]),d=(0,V.useCallback)(()=>a({type:`clear`}),[a]),f=(0,V.useCallback)((e,t)=>a({type:`set`,paths:e,anchor:t}),[a]);return(0,V.useMemo)(()=>({onRowClick:c,selectOnly:l,selectAll:u,clear:d,setSelection:f,moveTo:o,typeAhead:s}),[c,l,u,d,f,o,s])}var or=28,sr=36,cr=48;function lr({windowId:e,initialPath:t,variant:n=`window`}){let r=F(e=>e.ensure);(0,V.useEffect)(()=>r(e,t),[r,e,t]);let i=F(t=>t.slices[e]),a=F(e=>e.showHidden),o=F(e=>e.viewMode),s=F(e=>e.sort),{host:c}=it(),l=ve(e=>(e.clipboard?.paths.length??0)>0),u=B(e=>e.isPinned),d=Ge(),f=Ve(),p=er(e,i,a),{actions:h,dialogs:g}=At(e,i,p,c?.platform),_=(0,V.useMemo)(()=>i?Ht(i.entries,i.filter,s):[],[i?.entries,i?.filter,s]),v=ar(e,(0,V.useMemo)(()=>_.map(e=>e.path),[_])),y=_n({slice:i,entries:_,actions:h,selection:v,nav:p}),b=Ke(),x=j(e=>e.close);if(!i)return null;let S=Pn(o),C=n===`sheet`,ee=C?cr:d?sr:or;return(0,H.jsxs)(`div`,{"data-skin":f.id,style:{fontFamily:`var(--x-font)`},className:`flex h-full min-h-0 w-full flex-col bg-panel text-text`,children:[C?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Wn,{slice:i,onClose:x}),(0,H.jsx)($n,{host:c,currentPath:i.path,onNavigate:p.go,vocab:f.vocab})]}):(0,H.jsx)(Ln,{windowId:e,slice:i,nav:p,actions:h}),i.error&&(0,H.jsxs)(`div`,{className:`flex items-start gap-2 border-b border-border bg-error/10 px-2 py-1.5 text-xs text-error`,children:[(0,H.jsx)(oe,{className:`mt-0.5 size-3.5 shrink-0`}),(0,H.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,H.jsx)(`p`,{className:`break-words`,children:i.error.message}),i.error.hint&&(0,H.jsx)(`p`,{className:`mt-0.5 text-text-2`,children:i.error.hint})]}),c&&(0,H.jsxs)(`button`,{type:`button`,onClick:()=>p.go(c.homedir),className:`flex shrink-0 items-center gap-1 rounded border border-border px-1.5 py-0.5 text-text-2 can-hover:hover:bg-surface-elevated`,children:[(0,H.jsx)(m,{className:`size-3`}),` Go home`]})]}),(0,H.jsx)(It,{value:{closed:f.FolderIcon,open:f.FolderOpenIcon},children:(0,H.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[!C&&(0,H.jsx)(Bt,{host:c,currentPath:i.path,onNavigate:p.go,vocab:f.vocab}),(0,H.jsx)(`div`,{className:`min-w-0 flex-1`,onKeyDown:y,children:(0,H.jsx)(S,{windowId:e,slice:i,entries:_,actions:h,selection:v,inlineError:g.inlineError,hasClipboard:l,isPinned:u,rowHeight:ee,nav:p,backgroundLongPress:b})})]})}),C?(0,H.jsx)(Hn,{slice:i,nav:p,actions:h,entries:_,hasClipboard:l}):(0,H.jsx)(Wt,{entries:_,selection:i.selection,truncated:i.truncated}),(0,H.jsx)(Re,{dialogs:g,platform:c?.platform,sep:i.sep})]})}export{lr as t};
@@ -1 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{Mr as r,Vr as i,Wn as a,Yn as o,b as s,dr as c,j as l,lr as u,pr as d,un as f,xr as p,zr as m}from"./icons-CO_II6D-.js";import"./api-client-F5Zi1sR0.js";import"./settings-store-3jIBB8gx.js";import{n as h}from"./utils-btZ8C8-R.js";import"./portal-container-context-NFSuymMu.js";import"./panel-store-DrSH3Nhp.js";import"./window-store-B4cbZ5rr.js";import{i as g}from"./project-store-CCimwgGF.js";import"./tab-store-CUPgQIQz.js";import"./context-menu-CH1mvCwA.js";import"./file-store-DCU7_YyB.js";import{n as _}from"./use-is-mobile-CkO33jqU.js";import"./git-repo-store-CdoOpvmf.js";import{t as v}from"./button-CsmGH5xa.js";import{a as y,n as b,o as x,t as S}from"./dialog-z8PLkL8n.js";import{t as C}from"./mobile-bottom-sheet-CLic9ovp.js";import"./use-visual-viewport-C307OVeV.js";import"./fs-api-vF_bQoeL.js";import"./ws-auth-J3hw0Mhc.js";import{$ as w,an as T,at as E,ct as D,et as O,gn as k,it as A,lt as j,mn as ee,nt as te,on as M,ot as N,rt as P,sn as F,st as I,tt as L}from"./index-DQCw6d-2.js";import{t as R}from"./use-websocket-ziY-Gz_B.js";import{n as z}from"./tool-cards-_fpYI1hB.js";import"./use-blob-url-B3R1DMZ0.js";import{t as B}from"./markdown-renderer-Dab9Us6u.js";import"./run-in-terminal-Cdn9PaAl.js";var V=e(t(),1),H=8e3;function ne(e,t){let[n,r]=(0,V.useState)([]),[i,a]=(0,V.useState)([]),[o,s]=(0,V.useState)(`idle`),[c,l]=(0,V.useState)({}),[u,d]=(0,V.useState)(!1),[f,p]=(0,V.useState)(!1),[m,h]=(0,V.useState)(!1),[g,_]=(0,V.useState)(null),v=(0,V.useRef)(new Map),y=(0,V.useCallback)(e=>{l(t=>{if(!t[e])return t;let n={...t};return delete n[e],n})},[]),b=(0,V.useCallback)(e=>{let t;try{t=JSON.parse(e.data)}catch{return}switch(t.type){case`ping`:return;case`group_state`:p(!0),s(t.status),a(t.members),h(t.status===`active`);return;case`group_message`:y(t.message.fromMember),r(e=>e.some(e=>e.id===t.message.id)?e:[...e,t.message]);return;case`member_status`:a(e=>e.map(e=>e.id===t.memberId?{...e,status:t.status}:e));return;case`typing`:{l(e=>({...e,[t.member]:!0}));let e=v.current,n=e.get(t.member);n&&clearTimeout(n),e.set(t.member,setTimeout(()=>y(t.member),H));return}case`turn_done`:return;case`group_done`:h(!1),s(`idle`),l({});return;case`error`:_(t.message),h(!1);return}},[y]),{send:x}=R({url:e&&t?`/ws/project/${encodeURIComponent(t)}/group/${encodeURIComponent(e)}`:``,onMessage:b,autoConnect:!!e&&!!t});return(0,V.useEffect)(()=>{let t=!1;r([]),a([]),l({}),s(`idle`),h(!1),_(null),p(!1);for(let e of v.current.values())clearTimeout(e);if(v.current.clear(),e)return d(!0),L(e,{limit:200}).then(e=>{t||r(t=>{let n=new Set(e.messages.map(e=>e.id)),r=t.filter(e=>!n.has(e.id));return[...e.messages,...r]})}).catch(e=>{t||_(e instanceof Error?e.message:`Failed to load feed`)}).finally(()=>{t||d(!1)}),()=>{t=!0}},[e]),{messages:n,members:i,status:o,typing:c,loading:u,isConnected:f,isRunning:m,error:g,sendMessage:(0,V.useCallback)(t=>{let n=t.trim();!n||!e||(_(null),h(!0),f?x(JSON.stringify({type:`message`,content:n})):N(e,n).catch(e=>{_(e instanceof Error?e.message:`Failed to send message`),h(!1)}))},[e,f,x]),stop:(0,V.useCallback)(()=>{e&&(f?x(JSON.stringify({type:`stop`})):I(e).catch(()=>{}),s(`paused`),h(!1))},[e,f,x]),resume:(0,V.useCallback)(()=>{e&&E(e).then(()=>{s(`active`),h(!0)}).catch(e=>_(e instanceof Error?e.message:`Failed to resume`))},[e])}}var U=n();function W(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function G(e){try{let t=e<0xe8d4a51000?e*1e3:e;return new Date(t).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}catch{return``}}function K(e,t){return e.split(/(@[\p{L}\p{N}_]+)/gu).map((e,n)=>{if(e.startsWith(`@`)&&e.length>1){let r=t(e.slice(1));return(0,U.jsx)(`span`,{className:h(`font-semibold`,!r&&`text-primary`),style:r?{color:r}:void 0,children:e},n)}return e})}var re=(0,V.memo)(function({message:e,colorFor:t,isLeader:n,onViewFull:r}){let i=e.fromMember===`user`,a=i?`You`:e.fromMember,o=i?`var(--color-primary)`:t(e.fromMember)??`var(--accent)`,s=!i&&n(e.fromMember),c=e.summary??``,l=e.toMember&&e.toMember!==`all`?e.toMember:null,d=(0,U.jsxs)(`div`,{className:h(`group relative flex gap-2.5 px-3 py-2 transition-colors hover:bg-surface-elevated/50`,i&&`bg-primary/5`),style:{boxShadow:`inset 3px 0 0 0 ${o}`},children:[e.fullSessionRef&&(0,U.jsx)(`button`,{type:`button`,onClick:()=>r(e),title:`View full transcript (AI's raw thinking / debug)`,"aria-label":`View full transcript`,className:`absolute right-1.5 top-1.5 hidden items-center rounded p-1 text-text-subtle/60 hover:bg-surface-elevated hover:text-text-secondary can-hover:group-hover:inline-flex`,children:(0,U.jsx)(u,{className:`size-3.5`})}),(0,U.jsx)(`div`,{className:`mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-full text-[11px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:o},"aria-hidden":!0,children:W(a)}),(0,U.jsxs)(`div`,{className:`min-w-0 flex-1 can-hover:pr-6`,children:[(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5`,children:[(0,U.jsx)(`span`,{className:`text-sm font-semibold`,style:{color:i?`var(--color-foreground)`:o},children:a}),s&&(0,U.jsx)(`span`,{className:`rounded bg-surface-elevated px-1.5 py-px text-[10px] font-medium text-text-secondary`,children:`leader`}),l&&(0,U.jsxs)(`span`,{className:`text-[11px] text-text-subtle`,children:[`→ `,l]}),(0,U.jsx)(`span`,{className:`text-[11px] text-text-subtle`,children:G(e.createdAt)})]}),(0,U.jsx)(`div`,{className:`mt-0.5 whitespace-pre-wrap break-words text-sm leading-relaxed text-text-secondary`,children:K(c,t)})]})]});return e.fullSessionRef?(0,U.jsxs)(T,{children:[(0,U.jsx)(ee,{asChild:!0,children:d}),(0,U.jsx)(M,{children:(0,U.jsxs)(F,{onClick:()=>r(e),children:[(0,U.jsx)(u,{className:`size-4`}),` View full transcript`]})})]}):d}),q={idle:`bg-text-subtle`,working:`bg-primary animate-pulse`,done:`bg-emerald-500`,error:`bg-destructive`},J={idle:`Idle`,working:`Working`,done:`Done`,error:`Error`},ie=(0,V.memo)(function({members:e,liveStatus:t,typing:n,busy:i,onAdd:o,onEdit:s,onRemove:c}){return(0,U.jsxs)(`div`,{className:`flex flex-col gap-0.5 p-2`,children:[e.map(e=>{let o=n[e.name],l=t.get(e.id)??e.status;return(0,U.jsxs)(`div`,{className:`group flex items-center gap-2 rounded-md px-2 py-1.5`,children:[(0,U.jsx)(`span`,{className:`flex size-6 shrink-0 items-center justify-center rounded-full text-[10px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:e.color??`var(--accent)`},"aria-hidden":!0,children:e.name.slice(0,1).toUpperCase()}),(0,U.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,U.jsx)(`span`,{className:`truncate text-xs font-medium`,style:{color:e.color??`var(--color-foreground)`},children:e.name}),e.role===`leader`&&(0,U.jsx)(`span`,{className:`rounded-sm bg-accent-wash px-1 text-[9px] font-semibold uppercase text-primary`,children:`lead`})]}),(0,U.jsx)(`span`,{className:`block truncate text-[10px] text-text-subtle`,children:o?`typing…`:e.persona||J[l]})]}),(0,U.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 can-hover:opacity-0 can-hover:group-hover:opacity-100`,children:[(0,U.jsx)(`button`,{type:`button`,onClick:()=>s(e),disabled:i,"aria-label":`Edit ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground active:bg-surface-elevated disabled:opacity-40`,children:(0,U.jsx)(a,{className:`size-3.5`})}),(0,U.jsx)(`button`,{type:`button`,onClick:()=>c(e),disabled:i,"aria-label":`Remove ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-destructive active:bg-surface-elevated disabled:opacity-40`,children:(0,U.jsx)(r,{className:`size-3.5`})})]}),(0,U.jsx)(`span`,{className:h(`size-2 shrink-0 rounded-full`,q[l]),title:J[l],"aria-hidden":!0})]},e.id)}),(0,U.jsxs)(`button`,{type:`button`,onClick:o,disabled:i,className:`mt-1 flex items-center gap-2 rounded-md px-2 py-2 text-xs font-medium text-primary hover:bg-surface-elevated active:bg-surface-elevated disabled:opacity-40`,children:[(0,U.jsx)(m,{className:`size-4`}),` Add member`]})]})}),Y=`w-full min-h-[40px] rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`;function ae({open:e,member:t,projectName:n,providerId:r=`claude`,onSubmit:i,onClose:a}){let o=_(),[s,c]=(0,V.useState)(t?.name??``),[l,u]=(0,V.useState)(t?.persona??``),[d,p]=(0,V.useState)(t?.model??null),[m,h]=(0,V.useState)(t?.role===`leader`),[g,T]=(0,V.useState)(!1),[E,D]=(0,V.useState)(null),O=(0,V.useCallback)(async()=>{let e=s.trim();if(!e){D(`Name is required`);return}T(!0),D(null);try{await i({name:e,persona:l.trim()||null,model:d,role:m?`leader`:`member`}),a()}catch(e){D(e instanceof Error?e.message:`Failed to save member`),T(!1)}},[s,l,d,m,i,a]),k=t?.role===`leader`,A=(0,U.jsxs)(`div`,{className:`flex flex-col gap-3 px-1 py-1`,children:[(0,U.jsx)(`input`,{className:Y,value:s,onChange:e=>c(e.target.value),placeholder:`Member name`,autoFocus:!0}),(0,U.jsx)(`input`,{className:Y,value:l,onChange:e=>u(e.target.value),placeholder:`Persona (optional)`}),(0,U.jsx)(w,{value:d,onChange:p,projectName:n,providerId:r}),(0,U.jsxs)(`label`,{className:X(k),children:[(0,U.jsx)(`input`,{type:`checkbox`,className:`size-4 accent-[var(--color-primary)]`,checked:m,disabled:k,onChange:e=>h(e.target.checked)}),(0,U.jsx)(`span`,{children:k?`Leader (reassign from another member)`:`Set as leader`})]}),E&&(0,U.jsx)(`p`,{className:`text-xs text-destructive`,children:E}),(0,U.jsxs)(`div`,{className:`flex justify-end gap-2 pt-1`,children:[(0,U.jsx)(v,{variant:`outline`,onClick:a,disabled:g,children:`Cancel`}),(0,U.jsxs)(v,{onClick:O,disabled:g,children:[g&&(0,U.jsx)(f,{className:`mr-1.5 size-4 animate-spin`}),t?`Save`:`Add member`]})]})]});if(!e)return null;let j=t?`Edit member`:`Add member`;return o?(0,U.jsx)(C,{open:!0,onClose:a,className:`flex max-h-[90vh] flex-col`,children:(0,U.jsxs)(`div`,{className:`flex min-h-0 flex-col px-4 pb-2`,children:[(0,U.jsx)(`h2`,{className:`mb-2 text-base font-semibold text-foreground`,children:j}),A]})}):(0,U.jsx)(S,{open:!0,onOpenChange:e=>{e||a()},children:(0,U.jsxs)(b,{className:`flex flex-col sm:max-w-md`,children:[(0,U.jsx)(y,{children:(0,U.jsx)(x,{children:j})}),A]})})}function X(e){return`flex items-center gap-2 text-sm text-text-secondary ${e?`opacity-60`:``}`}function Z({messages:e,config:t,projectName:n}){return(0,U.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[t&&(0,U.jsx)(ce,{config:t}),e.map(e=>(0,U.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,U.jsx)(`span`,{className:`text-[10px] font-semibold uppercase tracking-wide text-text-subtle`,children:e.role===`user`?`User`:e.role===`assistant`?`Assistant`:e.role}),(0,U.jsx)(oe,{message:e,projectName:n})]},e.id)),e.length===0&&(0,U.jsx)(`p`,{className:`py-6 text-center text-sm text-text-subtle`,children:`Transcript is empty.`})]})}function oe({message:e,projectName:t}){let n=e.events??[];if(n.length===0)return e.content.trim()?(0,U.jsx)(B,{content:e.content}):null;let r=new Map;for(let e of n)e.type===`tool_result`&&e.toolUseId&&r.set(e.toolUseId,e);return(0,U.jsx)(`div`,{className:`flex flex-col gap-2`,children:n.map((e,n)=>{if(e.type===`text`)return e.content.trim()?(0,U.jsx)(B,{content:e.content},n):null;if(e.type===`thinking`)return(0,U.jsx)(se,{content:e.content},n);if(e.type===`tool_use`){let i=e.toolUseId?r.get(e.toolUseId):void 0;return(0,U.jsx)(z,{tool:e,result:i,completed:!!i,projectName:t},n)}return null})})}function se({content:e}){let[t,n]=(0,V.useState)(!1);return(0,U.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,U.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs text-text-subtle hover:text-text-secondary`,children:[(0,U.jsx)(l,{className:h(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,U.jsx)(s,{className:`size-3.5`}),(0,U.jsx)(`span`,{children:`Thinking`})]}),t&&(0,U.jsx)(`div`,{className:`border-t border-border px-3 py-2 text-xs leading-relaxed text-text-secondary`,children:(0,U.jsx)(B,{content:e})})]})}function ce({config:e}){let[t,n]=(0,V.useState)(!1),r=[[`Model`,e.model],[`Permission`,e.permissionMode],[`CWD`,e.cwd],[`Git branch`,e.gitBranch],[`CLI version`,e.version]].filter(([,e])=>e);return r.length===0?null:(0,U.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,U.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-text-secondary hover:text-foreground`,children:[(0,U.jsx)(l,{className:h(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,U.jsx)(d,{className:`size-3.5`}),(0,U.jsx)(`span`,{children:`Input config`})]}),t&&(0,U.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 border-t border-border px-3 py-2 text-xs`,children:r.map(([e,t])=>(0,U.jsxs)(`div`,{className:`contents`,children:[(0,U.jsx)(`dt`,{className:`text-text-subtle`,children:e}),(0,U.jsx)(`dd`,{className:`break-all font-mono text-text-secondary`,children:t})]},e))})]})}function le({groupId:e,message:t,onClose:n}){let r=_(),[i,a]=(0,V.useState)(null),[o,s]=(0,V.useState)(!1),[c,l]=(0,V.useState)(null),u=t?.fullSessionRef??null;if((0,V.useEffect)(()=>{if(!t||!u)return;let n=!1;return a(null),l(null),s(!0),P(e,u).then(e=>{n||a(e)}).catch(e=>{n||l(e instanceof Error?e.message:`Failed to load transcript`)}).finally(()=>{n||s(!1)}),()=>{n=!0}},[e,u,t]),!t)return null;let d=(0,U.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[o&&(0,U.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,U.jsx)(f,{className:`size-5 animate-spin text-primary`})}),c&&(0,U.jsxs)(`div`,{className:`px-1 py-4 text-sm text-text-secondary`,children:[(0,U.jsx)(`p`,{className:`mb-2 font-medium text-foreground`,children:`Full transcript unavailable`}),(0,U.jsx)(`p`,{className:`text-xs text-text-subtle`,children:c}),t.summary&&(0,U.jsx)(`pre`,{className:`mt-4 whitespace-pre-wrap break-words rounded-md bg-surface-elevated p-3 text-xs leading-relaxed text-text-secondary`,children:t.summary})]}),!o&&!c&&i!=null&&(0,U.jsx)(`div`,{className:`px-1 py-1`,children:(0,U.jsx)(Z,{messages:i.messages,config:i.config})})]}),p=`${t.fromMember} — full transcript`;return r?(0,U.jsx)(C,{open:!0,onClose:n,className:`max-h-[85vh] flex flex-col`,children:(0,U.jsxs)(`div`,{className:`flex flex-col min-h-0 px-4 pb-2`,children:[(0,U.jsx)(`h2`,{className:`mb-2 text-sm font-semibold text-foreground`,children:p}),d]})}):(0,U.jsx)(S,{open:!0,onOpenChange:e=>{e||n()},children:(0,U.jsxs)(b,{className:`flex max-h-[80vh] flex-col sm:max-w-2xl`,children:[(0,U.jsx)(y,{children:(0,U.jsx)(x,{className:`text-sm`,children:p})}),d]})})}function Q({metadata:e}){let t=e?.groupId??null,{activeProject:n}=g(k(e=>({activeProject:e.activeProject}))),r=e?.projectName??n?.name??``,a=_(),{messages:s,members:l,status:u,typing:d,loading:m,isRunning:y,error:b,sendMessage:x,stop:S,resume:w}=ne(t,r),[T,E]=(0,V.useState)(``),[ee,M]=(0,V.useState)(null),[N,P]=(0,V.useState)(!1),F=(0,V.useRef)(null),[I,L]=(0,V.useState)([]),[R,z]=(0,V.useState)(null),[B,H]=(0,V.useState)(!1),[W,G]=(0,V.useState)(null),[K,q]=(0,V.useState)(null),J=(0,V.useCallback)(async()=>{if(t)try{let e=await te(t);L(e.members),z(e.maxTurns)}catch{}},[t]),Y=(0,V.useCallback)(async e=>{if(!t)return;let n=Math.max(1,Math.min(50,Math.floor(e)||1));z(n);try{await j(t,{maxTurns:n})}catch{J()}},[t,J]);(0,V.useEffect)(()=>{L([]),J()},[t,J]),(0,V.useEffect)(()=>{F.current?.scrollIntoView({block:`end`})},[s.length,d]);let X=(0,V.useMemo)(()=>new Map(l.map(e=>[e.id,e.status])),[l]),Z=I.length?I:l,oe=(0,V.useMemo)(()=>{let e=new Map(Z.map(e=>[e.name,e.color]));return t=>e.get(t)??null},[Z]),se=(0,V.useMemo)(()=>{let e=new Set(Z.filter(e=>e.role===`leader`).map(e=>e.name));return t=>e.has(t)},[Z]),ce=(0,V.useCallback)(async e=>{t&&(K?.member?await D(t,K.member.id,e):await O(t,e),await J())},[t,K,J]),Q=(0,V.useCallback)(async e=>{if(t){H(!0),G(null);try{await A(t,e.id),await J()}catch(e){G(e instanceof Error?e.message:`Failed to remove member`)}finally{H(!1)}}},[t,J]),ue=(0,V.useCallback)(()=>{let e=T.trim();e&&(x(e),E(``))},[T,x]),$=Object.keys(d).filter(e=>d[e]);return t?(0,U.jsxs)(`div`,{className:`flex h-full min-h-0`,children:[(0,U.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,U.jsxs)(`div`,{className:`flex h-11 shrink-0 items-center justify-between border-b border-border px-3`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-foreground`,children:[(0,U.jsx)(`span`,{className:h(`size-2 rounded-full`,u===`active`?`bg-primary animate-pulse`:u===`paused`?`bg-amber-500`:`bg-text-subtle`)}),(0,U.jsx)(`span`,{className:`capitalize`,children:u})]}),(0,U.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[y?(0,U.jsxs)(v,{size:`sm`,variant:`outline`,onClick:S,className:`h-8`,children:[(0,U.jsx)(p,{className:`mr-1 size-3.5`}),` Stop`]}):u===`paused`?(0,U.jsxs)(v,{size:`sm`,variant:`outline`,onClick:w,className:`h-8`,children:[(0,U.jsx)(o,{className:`mr-1 size-3.5`}),` Resume`]}):null,(0,U.jsx)(`button`,{type:`button`,onClick:()=>P(e=>!e),className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground`,"aria-label":`Toggle roster`,children:(0,U.jsx)(i,{className:`size-4`})})]})]}),(0,U.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:m?(0,U.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,U.jsx)(f,{className:`size-5 animate-spin text-primary`})}):s.length===0?(0,U.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-center text-sm text-text-subtle`,children:`Send a message to start the group.`}):(0,U.jsxs)(`div`,{className:`flex flex-col py-2`,children:[s.map(e=>(0,U.jsx)(re,{message:e,colorFor:oe,isLeader:se,onViewFull:M},e.id)),$.length>0&&(0,U.jsxs)(`div`,{className:`px-3 py-1.5 text-xs italic text-text-subtle`,children:[$.join(`, `),` `,$.length===1?`is`:`are`,` typing…`]}),(0,U.jsx)(`div`,{ref:F})]})}),b&&(0,U.jsx)(`div`,{className:`shrink-0 border-t border-border bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:b}),(0,U.jsx)(`div`,{className:`shrink-0 border-t border-border p-2`,children:(0,U.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,U.jsx)(`textarea`,{value:T,onChange:e=>E(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!a&&(e.preventDefault(),ue())},rows:1,placeholder:`Message the group…`,className:`max-h-32 min-h-[44px] flex-1 resize-none rounded-md border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`}),(0,U.jsx)(v,{onClick:ue,disabled:!T.trim(),className:`size-11 shrink-0 p-0`,"aria-label":`Send`,children:(0,U.jsx)(c,{className:`size-4`})})]})})]}),a?(0,U.jsxs)(C,{open:N,onClose:()=>P(!1),className:`flex max-h-[72vh] flex-col`,children:[(0,U.jsx)(`div`,{className:`flex h-11 shrink-0 items-center px-4 text-sm font-medium text-foreground`,children:`Members`}),(0,U.jsxs)(`div`,{className:`min-h-0 overflow-y-auto`,children:[R!==null&&(0,U.jsxs)(`label`,{className:`flex items-center gap-2 px-4 py-2 text-xs text-text-secondary`,children:[(0,U.jsx)(`span`,{children:`Reply cap`}),(0,U.jsx)(`input`,{type:`number`,min:1,max:50,value:R,onChange:e=>Y(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,U.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),W&&(0,U.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:W}),(0,U.jsx)(ie,{members:I,liveStatus:X,typing:d,busy:B,onAdd:()=>q({member:null}),onEdit:e=>q({member:e}),onRemove:Q})]})]}):N&&(0,U.jsxs)(`div`,{className:`flex w-60 shrink-0 flex-col border-l border-border bg-panel`,children:[(0,U.jsx)(`div`,{className:`flex h-11 shrink-0 items-center border-b border-border px-3 text-sm font-medium text-foreground`,children:`Members`}),(0,U.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[R!==null&&(0,U.jsxs)(`label`,{className:`flex items-center gap-2 px-3 py-2 text-xs text-text-secondary`,children:[(0,U.jsx)(`span`,{children:`Reply cap`}),(0,U.jsx)(`input`,{type:`number`,min:1,max:50,value:R,onChange:e=>Y(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,U.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),W&&(0,U.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:W}),(0,U.jsx)(ie,{members:I,liveStatus:X,typing:d,busy:B,onAdd:()=>q({member:null}),onEdit:e=>q({member:e}),onRemove:Q})]})]}),K&&(0,U.jsx)(ae,{open:!0,member:K.member,projectName:r,onSubmit:ce,onClose:()=>q(null)},K.member?.id??`add`),(0,U.jsx)(le,{groupId:t,message:ee,onClose:()=>M(null)})]}):(0,U.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-sm text-text-subtle`,children:`No group selected.`})}export{Q as GroupChatTab};
@@ -1 +0,0 @@
1
- import"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import"./api-client-F5Zi1sR0.js";import{Xn as e}from"./index-DQCw6d-2.js";export{e as useKeybindingsStore};
@@ -1 +0,0 @@
1
- import"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import"./api-client-F5Zi1sR0.js";import"./settings-store-3jIBB8gx.js";import"./panel-store-DrSH3Nhp.js";import"./window-store-B4cbZ5rr.js";import"./project-store-CCimwgGF.js";import"./tab-store-CUPgQIQz.js";import"./file-store-DCU7_YyB.js";import"./use-is-mobile-CkO33jqU.js";import"./git-repo-store-CdoOpvmf.js";import"./fs-api-vF_bQoeL.js";import{t as e}from"./markdown-renderer-Dab9Us6u.js";import"./run-in-terminal-Cdn9PaAl.js";export{e as MarkdownRenderer};
@@ -1 +0,0 @@
1
- import"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import"./api-client-F5Zi1sR0.js";import{or as e}from"./index-DQCw6d-2.js";export{e as useNotificationStore};
@@ -1,3 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{$t as r,A as i,Bt as a,En as o,Gr as s,j as c,rt as l,t as u}from"./icons-CO_II6D-.js";import{r as d}from"./api-client-F5Zi1sR0.js";import{_ as f,b as p,g as m,h,t as g,v as _,x as v,y}from"./settings-store-3jIBB8gx.js";import{n as b}from"./utils-btZ8C8-R.js";import"./portal-container-context-NFSuymMu.js";import"./context-menu-CH1mvCwA.js";import{n as x}from"./use-is-mobile-CkO33jqU.js";import"./mobile-bottom-sheet-CLic9ovp.js";import"./use-visual-viewport-C307OVeV.js";import{an as S,cn as C,dn as w,fn as T,ln as E,mn as D,on as O,pn as k,sn as ee,un as te}from"./index-DQCw6d-2.js";import{n as A,r as j,t as M}from"./format-bytes-DZ8bW_uF.js";import{n as N,t as P}from"./metric-chart-canvas-CVd7LO3m.js";var F=e(t(),1),I={wired:`Ethernet`,wireless:`Wi-Fi`,bluetooth:`Bluetooth`,bridge:`Bridge`,docker:`Docker`,infiniband:`InfiniBand`,multipass:`Multipass`,virtual:`Virtual`,vpn:`VPN`,other:`Other`},L=1024,R=e=>Math.round(e);function z(e){return I[e?.kind??`other`]}function B(e,t,n){if(!n||n<=0)return null;let r=(e+t)*8/1e6;return Math.min(100,Math.max(0,r/n*100))}function V(e,t){return`${(e/L).toFixed(1)}/${(t/L).toFixed(1)} GB`}function ne(e,t){let n=new Map((t?.disks??[]).map(e=>[e.id,e])),r=new Map((t?.nics??[]).map(e=>[e.id,e])),i=[{key:`cpu`,kind:`cpu`,label:`CPU`,sublabel:e.cpu.model,id:null,detail:`${R(e.cpu.total)}%`,percent:e.cpu.total},{key:`memory`,kind:`memory`,label:`Memory`,sublabel:V(e.mem.usedMB,e.mem.totalMB),id:null,detail:`${R(e.mem.percent)}%`,percent:e.mem.percent}];(e.disks??[]).forEach((e,t)=>{i.push({key:`disk:${e.id}`,kind:`disk`,label:`Disk ${t}`,sublabel:n.get(e.id)?.model??e.id,id:e.id,detail:e.available?`${R(e.busyPercent)}%`:`—`,percent:e.available?e.busyPercent:null})}),(e.nics??[]).forEach(e=>{let t=r.get(e.id);i.push({key:`nic:${e.id}`,kind:`nic`,label:z(t),sublabel:e.id,id:e.id,detail:e.available?M(e.rxBps+e.txBps):`—`,percent:e.available?B(e.rxBps,e.txBps,e.linkMbps):null})}),e.gpus.forEach((e,t)=>{i.push({key:`gpu:${e.id??t}`,kind:`gpu`,label:`GPU ${t}`,sublabel:e.name,id:e.id??null,detail:`${R(e.utilPercent)}%`,percent:e.utilPercent})});let a=e.fans??[];if(a.length>0){let e=Math.max(...a.map(e=>e.rpm));i.push({key:`fans`,kind:`fans`,label:`Fans`,sublabel:`${a.length} sensor${a.length===1?``:`s`}`,id:null,detail:`${e} RPM`,percent:null})}return i}function re(e,t){return t&&e.some(e=>e.key===t)?t:e[0]?.key??`cpu`}function ie(e){let[t,n]=(0,F.useState)(null),r=(0,F.useRef)(!1),i=(0,F.useCallback)(async()=>{if(!r.current){r.current=!0;try{n(await d.get(`/api/system/hardware`))}catch{}finally{r.current=!1}}},[]);return(0,F.useEffect)(()=>{i()},[i]),(0,F.useEffect)(()=>{if(!t)return;let n=new Set([...t.disks.map(e=>e.id),...t.nics.map(e=>e.id),...t.gpus.map(e=>e.id)]);e.split(`,`).filter(Boolean).some(e=>!n.has(e))&&i()},[t,e,i]),t}var H=n();function U({title:e,subtitle:t,value:n,valueClassName:r}){return(0,H.jsxs)(`div`,{className:`flex items-baseline justify-between gap-3`,children:[(0,H.jsxs)(`div`,{className:`min-w-0`,children:[(0,H.jsx)(`h3`,{className:`text-base font-semibold truncate`,children:e}),t&&(0,H.jsx)(`p`,{className:`text-xs text-text-subtle truncate`,title:t,children:t})]}),n!==void 0&&(0,H.jsx)(`span`,{className:b(`text-2xl font-semibold tabular-nums shrink-0`,r),children:n})]})}function W({children:e}){return(0,H.jsx)(`dl`,{className:`grid grid-cols-2 @2xl:grid-cols-4 gap-x-4 gap-y-3`,children:e})}function G({label:e,value:t,title:n}){let r=t==null||t===``?`—`:String(t);return(0,H.jsxs)(`div`,{className:`min-w-0`,children:[(0,H.jsx)(`dt`,{className:`text-[11px] text-text-subtle truncate`,children:e}),(0,H.jsx)(`dd`,{className:`text-sm tabular-nums truncate`,title:n??r,children:r})]})}function K({series:e,maxValue:t,height:n=120,legend:r,caption:i,ceiling:a,grid:o,stacked:s}){return(0,H.jsxs)(`div`,{className:`space-y-1`,children:[(i||a)&&(0,H.jsxs)(`div`,{className:`flex items-baseline justify-between gap-2 text-[11px] text-text-subtle`,children:[(0,H.jsx)(`span`,{className:`truncate`,children:i}),(0,H.jsx)(`span`,{className:`shrink-0 tabular-nums`,children:a})]}),(0,H.jsx)(P,{series:e,height:n,maxValue:t,grid:o,stacked:s}),r&&r.length>0&&(0,H.jsx)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1`,children:r.map((t,n)=>(0,H.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] text-text-subtle`,children:[(0,H.jsx)(`span`,{className:`size-2 rounded-full`,style:{background:e[n]?.color}}),t]},t))})]})}function q(e,t,n=200){return(0,F.useMemo)(()=>e.slice(-n).map(e=>t(e)??0),[e,n])}function J({segments:e}){let t=e.reduce((e,t)=>e+Math.max(0,t.value),0);return t<=0?null:(0,H.jsx)(`div`,{className:`flex h-3 w-full overflow-hidden rounded-sm bg-surface-hover`,role:`img`,"aria-label":e.map(e=>e.label).join(`, `),children:e.map(e=>(0,H.jsx)(`div`,{className:`h-full`,style:{width:`${Math.max(0,e.value)/t*100}%`,background:e.color},title:e.label},e.label))})}var Y={primary:`var(--color-primary)`,secondary:`var(--color-warning)`,success:`var(--color-success)`,error:`var(--color-error)`};function ae({cores:e,history:t,points:n=200,height:r=260}){let i=(0,F.useRef)(null),a=N(i),{cols:o,rows:s}=y(e.length,a),c=(0,F.useMemo)(()=>{let r=t.slice(-n),i=Array.from({length:e.length},()=>[]);for(let e of r){let t=e.system.cpu.cores;for(let e=0;e<i.length;e++)i[e].push(t[e]??0)}return i},[t,n,e.length]);if(e.length===0)return null;let l=Math.max(28,Math.floor(r/Math.max(1,s))-6);return(0,H.jsx)(`div`,{ref:i,className:`grid gap-1.5`,style:{gridTemplateColumns:`repeat(${Math.max(1,o)}, minmax(0, 1fr))`},"data-testid":`sysmon-core-grid`,"data-core-count":e.length,"data-cols":o,children:c.map((t,n)=>(0,H.jsx)(`div`,{className:`rounded-sm border border-border/70 overflow-hidden px-0.5`,title:`CPU ${n}: ${(e[n]??0).toFixed(0)}%`,children:(0,H.jsx)(P,{series:[{data:t,color:Y.primary}],height:l,maxValue:100})},n))})}function oe(e){if(e===void 0)return;let t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60);return t>0?`${t}d ${n}h ${r}m`:`${n}h ${r}m`}var X=e=>e===void 0?void 0:`${(e/1e3).toFixed(2)} GHz`;function se({cpu:e,info:t,history:n,processCount:r}){let i=g(e=>e.sysmonTempUnit),a=g(e=>e.sysmonKernelTimes),o=g(e=>e.setSysmonKernelTimes),s=g(e=>e.sysmonCpuGraph),c=g(e=>e.setSysmonCpuGraph),l=g(e=>e.sysmonCpuBottomGraph),u=g(e=>e.setSysmonCpuBottomGraph),d=q(n,e=>e.system.cpu.total),y=q(n,e=>e.system.cpu.kernelPercent),b=q(n,e=>e.system.cpu.tempC),x=q(n,e=>e.system.cpu.powerW),j=q(n,e=>e.system.cpu.currentMHz),M=a&&e.kernelPercent!==void 0,N=p(n.map(e=>e.ts)),P=e=>N?`${e} ${N}`:e,I=(0,F.useMemo)(()=>{let t=n.slice(-200),r=e.cores.length,i=Array.from({length:r},()=>[]);for(let e of t){let t=e.system.cpu.cores;for(let e=0;e<r;e++)i[e].push(t[e]??0)}return i},[n,e.cores.length]),L=I.map(e=>({data:e,color:Y.primary})),R=I.map(e=>({data:e.map(e=>e/Math.max(1,I.length)),color:Y.primary})),z=()=>l===`none`?null:l===`temperature`?e.tempC===void 0?null:(0,H.jsx)(K,{grid:!0,height:100,caption:P(`Temperature`),ceiling:v(Math.max(...b,1),i),series:[{data:b,color:Y.error}]}):l===`power`?e.powerW===void 0?null:(0,H.jsx)(K,{grid:!0,height:100,caption:P(`Power draw`),ceiling:`${Math.max(...x,1).toFixed(1)} W`,series:[{data:x,color:Y.secondary}]}):e.currentMHz===void 0?null:(0,H.jsx)(K,{grid:!0,height:100,caption:P(`Clock speed`),ceiling:X(t?.maxMHz??Math.max(...j,1)),maxValue:t?.maxMHz,series:[{data:j,color:Y.success}]});return(0,H.jsxs)(`div`,{className:`space-y-4`,"data-testid":`sysmon-detail-cpu`,children:[(0,H.jsx)(U,{title:`CPU`,subtitle:t?.name??e.model,value:`${e.total.toFixed(1)}%`}),(0,H.jsxs)(S,{children:[(0,H.jsx)(D,{children:(0,H.jsxs)(`div`,{className:`space-y-3 select-none`,"data-testid":`sysmon-cpu-graphs`,children:[s===`logical`?(0,H.jsxs)(`div`,{className:`space-y-1`,children:[(0,H.jsxs)(`div`,{className:`flex items-baseline justify-between gap-2 text-[11px] text-text-subtle`,children:[(0,H.jsx)(`span`,{className:`truncate`,children:P(`Utilisation`)}),(0,H.jsx)(`span`,{className:`shrink-0 tabular-nums`,children:`100%`})]}),(0,H.jsx)(ae,{cores:e.cores,history:n})]}):(0,H.jsx)(K,{grid:!0,maxValue:100,caption:P(`Utilisation`),ceiling:`100%`,stacked:s===`threads-stacked`,legend:s===`overall`&&M?[`Utilisation`,`Kernel`]:void 0,series:s===`threads`?L:s===`threads-stacked`?R:M?[{data:d,color:Y.primary},{data:y,color:Y.secondary}]:[{data:d,color:Y.primary}]}),z()]})}),(0,H.jsxs)(O,{children:[(0,H.jsxs)(w,{children:[(0,H.jsx)(k,{children:`Change top graph to`}),(0,H.jsx)(T,{children:(0,H.jsx)(C,{value:s,onValueChange:e=>c(e),children:_.map(e=>(0,H.jsx)(E,{value:e,"data-testid":`sysmon-cpu-graph-${e}`,children:f[e]},e))})})]}),(0,H.jsxs)(w,{children:[(0,H.jsx)(k,{children:`Change bottom graph to`}),(0,H.jsx)(T,{children:(0,H.jsx)(C,{value:l,onValueChange:e=>u(e),children:h.map(e=>(0,H.jsx)(E,{value:e,"data-testid":`sysmon-cpu-bottom-${e}`,children:m[e]},e))})})]}),(0,H.jsx)(te,{}),(0,H.jsx)(ee,{onSelect:()=>o(!a),"data-testid":`sysmon-cpu-kernel-toggle`,children:a?`Hide kernel times`:`Show kernel times`})]})]}),(0,H.jsxs)(W,{children:[(0,H.jsx)(G,{label:`Speed`,value:X(e.currentMHz)}),(0,H.jsx)(G,{label:`Base speed`,value:X(t?.baseMHz)}),(0,H.jsx)(G,{label:`Max speed`,value:X(t?.maxMHz)}),(0,H.jsx)(G,{label:`Temperature`,value:v(e.tempC,i)}),(0,H.jsx)(G,{label:`Power`,value:e.powerW===void 0?void 0:`${e.powerW.toFixed(1)} W`}),(0,H.jsx)(G,{label:`Processes`,value:r}),(0,H.jsx)(G,{label:`Threads running`,value:e.threadCount}),(0,H.jsx)(G,{label:`Open handles`,value:e.handleCount}),(0,H.jsx)(G,{label:`Up time`,value:oe(e.uptimeSec)}),(0,H.jsx)(G,{label:`Sockets`,value:t?.sockets}),(0,H.jsx)(G,{label:`Cores`,value:t?.physicalCores}),(0,H.jsx)(G,{label:`Logical processors`,value:t?.logicalCores??e.cores.length}),(0,H.jsx)(G,{label:`Virtualisation`,value:t?.isVirtualMachine?`Running in a VM`:t?.virtualization}),(0,H.jsx)(G,{label:`L1 cache`,value:t?.l1CacheBytes===void 0?void 0:A(t.l1CacheBytes)}),(0,H.jsx)(G,{label:`L2 cache`,value:t?.l2CacheBytes===void 0?void 0:A(t.l2CacheBytes)}),(0,H.jsx)(G,{label:`L3 cache`,value:t?.l3CacheBytes===void 0?void 0:A(t.l3CacheBytes)}),(0,H.jsx)(G,{label:`Cpufreq driver`,value:t?.freqDriver}),(0,H.jsx)(G,{label:`Governor`,value:t?.freqGovernor}),(0,H.jsx)(G,{label:`Power preference`,value:t?.powerPreference})]})]})}function ce({mem:e,info:t,history:n}){let r=q(n,e=>e.system.mem.percent),i=q(n,e=>{let t=e.system.mem.swapTotalMB??0;return t>0?(e.system.mem.swapUsedMB??0)/t*100:0}),a=e.inUseBytes!==void 0,o=p(n.map(e=>e.ts)),s=e=>o?`${e} ${o}`:e,c=(e.swapTotalMB??0)>0;return(0,H.jsxs)(`div`,{className:`space-y-4`,"data-testid":`sysmon-detail-memory`,children:[(0,H.jsx)(U,{title:`Memory`,subtitle:`${j(e.usedMB)} of ${j(e.totalMB)} in use`,value:`${e.percent.toFixed(1)}%`}),(0,H.jsx)(K,{grid:!0,maxValue:100,caption:s(`Memory usage`),ceiling:j(e.totalMB),series:[{data:r,color:Y.primary}]}),c&&(0,H.jsx)(K,{grid:!0,height:90,maxValue:100,caption:s(`Swap usage`),ceiling:j(e.swapTotalMB??0),series:[{data:i,color:Y.success}]}),a&&(0,H.jsxs)(`div`,{className:`space-y-2`,children:[(0,H.jsx)(J,{segments:[{label:`In use`,value:e.inUseBytes??0,color:`var(--color-primary)`},{label:`Modified`,value:e.modifiedBytes??0,color:`var(--color-warning)`},{label:`Standby`,value:e.standbyBytes??0,color:`var(--color-success)`},{label:`Free`,value:e.freeBytes??0,color:`var(--color-border)`}]}),(0,H.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1 text-[11px] text-text-subtle`,children:[(0,H.jsxs)(`span`,{children:[`In use `,A(e.inUseBytes??0)]}),(0,H.jsxs)(`span`,{children:[`Modified `,A(e.modifiedBytes??0)]}),(0,H.jsxs)(`span`,{children:[`Standby `,A(e.standbyBytes??0)]}),(0,H.jsxs)(`span`,{children:[`Free `,A(e.freeBytes??0)]})]})]}),(0,H.jsxs)(W,{children:[(0,H.jsx)(G,{label:`Available`,value:j(e.availableMB)}),(0,H.jsx)(G,{label:`Cached`,value:e.cachedMB===void 0?void 0:j(e.cachedMB)}),(0,H.jsx)(G,{label:`Committed`,value:e.committedMB===void 0?void 0:`${j(e.committedMB)} / ${e.commitLimitMB===void 0?`?`:j(e.commitLimitMB)}`}),(0,H.jsx)(G,{label:`Swap`,value:e.swapTotalMB===void 0?void 0:`${j(e.swapUsedMB??0)} / ${j(e.swapTotalMB)}`}),(0,H.jsx)(G,{label:`Compressed (zram)`,value:e.zramCompressedMB===void 0?void 0:j(e.zramCompressedMB)}),(0,H.jsx)(G,{label:`Savings (zram)`,value:e.zramSavingsMB===void 0?void 0:j(e.zramSavingsMB)}),(0,H.jsx)(G,{label:`Slots used`,value:t===void 0?void 0:`${t.devices.length}${t.slotsTotal?` of ${t.slotsTotal}`:``}`}),(0,H.jsx)(G,{label:`Maximum capacity`,value:t?.maxCapacityBytes===void 0?void 0:A(t.maxCapacityBytes)})]}),t&&t.devices.length>0&&(0,H.jsxs)(`div`,{className:`space-y-1`,children:[(0,H.jsx)(`h4`,{className:`text-xs font-medium text-text-secondary`,children:`Slots`}),(0,H.jsx)(`div`,{className:`rounded-md border border-border divide-y divide-border`,children:t.devices.map(e=>(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-3 px-3 py-2 text-xs`,children:[(0,H.jsx)(`span`,{className:`font-medium shrink-0`,children:e.locator}),(0,H.jsx)(`span`,{className:`text-text-subtle truncate`,children:[e.manufacturer,e.ramType,e.formFactor,e.speedMts?`${e.speedMts} MT/s`:null].filter(Boolean).join(` · `)}),(0,H.jsx)(`span`,{className:`tabular-nums shrink-0`,children:A(e.sizeBytes)})]},e.locator))})]})]})}var le=90,ue=75;function de(e){return e>=le?`bg-error`:e>=ue?`bg-warning`:`bg-primary`}function fe({partitions:e}){return e.length===0?null:(0,H.jsxs)(`section`,{className:`space-y-2`,"data-testid":`sysmon-partitions`,children:[(0,H.jsx)(`h4`,{className:`text-sm font-medium`,children:`Partitions`}),(0,H.jsx)(`ul`,{className:`space-y-2`,children:e.map(e=>(0,H.jsx)(pe,{part:e},e.id))})]})}function pe({part:e}){let t=e.mounts.find(e=>e.usedBytes!==void 0&&e.totalBytes),n=t?Math.min(100,t.usedBytes/t.totalBytes*100):void 0;return(0,H.jsxs)(`li`,{className:`rounded-md border border-border px-3 py-2 space-y-1.5`,"data-testid":`sysmon-partition`,children:[(0,H.jsxs)(`div`,{className:`flex items-baseline justify-between gap-3`,children:[(0,H.jsx)(`span`,{className:`text-sm font-medium truncate`,title:e.devicePath,children:e.devicePath}),(0,H.jsxs)(`span`,{className:`text-[11px] text-text-subtle shrink-0 tabular-nums`,children:[e.filesystem??`—`,` · `,A(e.sizeBytes)]})]}),e.mounts.length===0?(0,H.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:`Not mounted`}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`p`,{className:`text-[11px] text-text-subtle truncate`,title:e.mounts.map(e=>e.mountPoint).join(`, `),children:e.mounts.map(e=>e.mountPoint).join(`, `)}),n===void 0?(0,H.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:`Usage unavailable`}):(0,H.jsxs)(`div`,{className:`space-y-1`,children:[(0,H.jsx)(`div`,{className:`h-1.5 w-full rounded-full bg-surface-hover overflow-hidden`,children:(0,H.jsx)(`div`,{className:b(`h-full rounded-full`,de(n)),style:{width:`${n}%`}})}),(0,H.jsxs)(`div`,{className:`flex items-baseline justify-between gap-2 text-[11px] text-text-subtle tabular-nums`,children:[(0,H.jsxs)(`span`,{children:[A(t.usedBytes),` of `,A(t.totalBytes)]}),(0,H.jsxs)(`span`,{children:[n.toFixed(0),`%`]})]})]})]})]})}var me={hdd:`Hard disk`,ssd:`SSD`,nvme:`NVMe`,emmc:`eMMC`,sd:`SD card`,optical:`Optical`,thumb:`Removable`,unknown:`Unknown`};function he({disk:e,info:t,index:n,history:r}){let i=g(e=>e.sysmonTempUnit),a=t=>t.system.disks?.find(t=>t.id===e.id),o=q(r,e=>a(e)?.busyPercent),s=q(r,e=>a(e)?.readBps),c=q(r,e=>a(e)?.writeBps);return(0,H.jsxs)(`div`,{className:`space-y-4`,"data-testid":`sysmon-detail-disk`,"data-disk-id":e.id,children:[(0,H.jsx)(U,{title:`Disk ${n}`,subtitle:t?.model??e.id,value:e.available?`${e.busyPercent.toFixed(0)}%`:`—`}),(0,H.jsxs)(`div`,{className:`space-y-1`,children:[(0,H.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:`Active time`}),(0,H.jsx)(K,{maxValue:100,series:[{data:o,color:Y.primary}],height:90})]}),(0,H.jsxs)(`div`,{className:`space-y-1`,children:[(0,H.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:`Transfer rate`}),(0,H.jsx)(K,{height:90,legend:[`Read`,`Write`],series:[{data:s,color:Y.success},{data:c,color:Y.secondary}]})]}),(0,H.jsxs)(W,{children:[(0,H.jsx)(G,{label:`Read speed`,value:e.available?M(e.readBps):void 0}),(0,H.jsx)(G,{label:`Write speed`,value:e.available?M(e.writeBps):void 0}),(0,H.jsx)(G,{label:`Avg. response time`,value:e.available?`${e.responseMs.toFixed(2)} ms`:void 0}),(0,H.jsx)(G,{label:`Temperature`,value:v(e.tempC,i)}),(0,H.jsx)(G,{label:`Total read`,value:A(e.readTotal)}),(0,H.jsx)(G,{label:`Total written`,value:A(e.writeTotal)}),(0,H.jsx)(G,{label:`Capacity`,value:t===void 0?void 0:A(t.capacityBytes)}),(0,H.jsx)(G,{label:`Type`,value:t===void 0?void 0:me[t.kind]??t.kind}),(0,H.jsx)(G,{label:`System disk`,value:t===void 0?void 0:t.systemDisk?`Yes`:`No`}),(0,H.jsx)(G,{label:`Removable`,value:t===void 0?void 0:t.removable?`Yes`:`No`}),(0,H.jsx)(G,{label:`Rotation`,value:t?.rotationRpm===void 0?void 0:`${t.rotationRpm} RPM`}),(0,H.jsx)(G,{label:`Serial`,value:t?.serial})]}),(0,H.jsx)(fe,{partitions:t?.partitions??[]})]})}var ge={connected:`Connected`,connecting:`Connecting`,disconnected:`Disconnected`,unavailable:`Unavailable`,unknown:`Unknown`};function Z({nic:e,info:t,history:n}){let r=t=>t.system.nics?.find(t=>t.id===e.id),i=q(n,e=>r(e)?.rxBps),a=q(n,e=>r(e)?.txBps);return(0,H.jsxs)(`div`,{className:`space-y-4`,"data-testid":`sysmon-detail-nic`,"data-nic-id":e.id,children:[(0,H.jsx)(U,{title:I[t?.kind??`other`],subtitle:[e.id,t?.deviceName].filter(Boolean).join(` · `),value:e.available?M(e.rxBps+e.txBps):`—`}),(0,H.jsx)(K,{legend:[`Receive`,`Send`],series:[{data:i,color:Y.primary},{data:a,color:Y.secondary}]}),(0,H.jsxs)(W,{children:[(0,H.jsx)(G,{label:`State`,value:ge[e.state]}),(0,H.jsx)(G,{label:`Receive`,value:e.available?M(e.rxBps):void 0}),(0,H.jsx)(G,{label:`Send`,value:e.available?M(e.txBps):void 0}),(0,H.jsx)(G,{label:`Maximum bitrate`,value:e.linkMbps===void 0?void 0:`${e.linkMbps} Mbps`}),(0,H.jsx)(G,{label:`Total received`,value:A(e.rxTotal)}),(0,H.jsx)(G,{label:`Total sent`,value:A(e.txTotal)}),(0,H.jsx)(G,{label:`Network name`,value:e.ssid}),(0,H.jsx)(G,{label:`Signal`,value:e.signalPercent===void 0?void 0:`${e.signalPercent}%`}),(0,H.jsx)(G,{label:`Frequency`,value:e.frequencyMHz===void 0?void 0:`${(e.frequencyMHz/1e3).toFixed(1)} GHz`}),(0,H.jsx)(G,{label:`Driver`,value:t?.driver}),(0,H.jsx)(G,{label:`Hardware address`,value:t?.mac}),(0,H.jsx)(G,{label:`IPv4`,value:t?.ipv4.join(`, `),title:t?.ipv4.join(`
2
- `)}),(0,H.jsx)(G,{label:`IPv6`,value:t?.ipv6.join(`, `),title:t?.ipv6.join(`
3
- `)})]})]})}function Q(e,t){if(!(e===void 0&&t===void 0))return`${e===void 0?`?`:`Gen ${e}`} x${t??`?`}`}function _e({gpu:e,info:t,index:n,history:r}){let i=g(e=>e.sysmonTempUnit),a=t=>t.system.gpus.find(t=>e.id?t.id===e.id:t.name===e.name),o=q(r,e=>a(e)?.utilPercent),s=q(r,e=>a(e)?.encodePercent),c=q(r,e=>a(e)?.decodePercent),l=e.vramTotalMB>0,u=!l&&e.sharedTotalMB!==void 0,d=q(r,e=>{let t=a(e);return l?t?.vramUsedMB:t?.sharedUsedMB}),f=l?e.vramTotalMB:e.sharedTotalMB??0,m=e.encodePercent!==void 0||e.decodePercent!==void 0,h=t?.encodeDecodeShared===!0,_=p(r.map(e=>e.ts)),y=e=>_?`${e} ${_}`:e;return(0,H.jsxs)(`div`,{className:`space-y-4`,"data-testid":`sysmon-detail-gpu`,"data-gpu-id":e.id??n,children:[(0,H.jsx)(U,{title:`GPU ${n}`,subtitle:e.name,value:`${e.utilPercent.toFixed(0)}%`}),(0,H.jsx)(K,{grid:!0,maxValue:100,caption:y(`Utilisation`),ceiling:`100%`,series:[{data:o,color:Y.primary}]}),m&&(0,H.jsx)(K,{grid:!0,height:90,maxValue:100,caption:y(h?`Video encode/decode utilisation`:`Video encode and decode utilisation`),ceiling:`100%`,legend:h?void 0:[`Encode`,`Decode`],series:h?[{data:s,color:Y.secondary}]:[{data:s,color:Y.secondary},{data:c,color:Y.error}]}),(l||u)&&(0,H.jsx)(K,{grid:!0,height:90,maxValue:f,caption:y(l?`Video memory usage`:`Memory usage`),ceiling:j(f),series:[{data:d,color:Y.success}]}),(0,H.jsxs)(W,{children:[(0,H.jsx)(G,{label:`Video memory`,value:l?`${j(e.vramUsedMB)} / ${j(e.vramTotalMB)}`:void 0}),(0,H.jsx)(G,{label:l?`Shared memory`:`Memory usage`,value:e.sharedTotalMB===void 0?void 0:`${j(e.sharedUsedMB??0)} / ${j(e.sharedTotalMB)}`}),(0,H.jsx)(G,{label:h?`Video encode/decode`:`Video encode`,value:e.encodePercent===void 0?void 0:`${e.encodePercent.toFixed(0)}%`}),!h&&(0,H.jsx)(G,{label:`Video decode`,value:e.decodePercent===void 0?void 0:`${e.decodePercent.toFixed(0)}%`}),(0,H.jsx)(G,{label:`Clock`,value:e.clockMHz===void 0?void 0:`${e.clockMHz} MHz${e.clockMaxMHz?` / ${e.clockMaxMHz}`:``}`}),(0,H.jsx)(G,{label:`Memory clock`,value:e.memClockMHz===void 0?void 0:`${e.memClockMHz} MHz${e.memClockMaxMHz?` / ${e.memClockMaxMHz}`:``}`}),(0,H.jsx)(G,{label:`Power`,value:e.powerW===void 0?void 0:`${e.powerW.toFixed(1)} W${e.powerMaxW?` / ${e.powerMaxW}`:``}`}),(0,H.jsx)(G,{label:`Temperature`,value:v(e.tempC,i)}),(0,H.jsx)(G,{label:`Vendor`,value:t?.vendor}),(0,H.jsx)(G,{label:`Driver`,value:t?.driver===void 0?void 0:[t.driver,t.driverVersion].filter(Boolean).join(` `)}),(0,H.jsx)(G,{label:`OpenGL`,value:t?.openglVersion}),(0,H.jsx)(G,{label:`Vulkan`,value:t?.vulkanVersion}),(0,H.jsx)(G,{label:`PCI bus address`,value:e.id}),(0,H.jsx)(G,{label:`PCIe link`,value:Q(t?.pcieGen,t?.pcieLanes)}),(0,H.jsx)(G,{label:`PCIe maximum`,value:Q(t?.pcieMaxGen,t?.pcieMaxLanes)})]})]})}function ve({fans:e}){let t=g(e=>e.sysmonTempUnit),n=e.length>0?Math.max(...e.map(e=>e.rpm)):0;return(0,H.jsxs)(`div`,{className:`space-y-4`,"data-testid":`sysmon-detail-fans`,"data-fan-count":e.length,children:[(0,H.jsx)(U,{title:`Fans`,subtitle:`${e.length} sensor${e.length===1?``:`s`}`,value:`${n} RPM`}),(0,H.jsx)(`div`,{className:`rounded-md border border-border divide-y divide-border`,children:e.map(e=>(0,H.jsxs)(`div`,{className:`px-3 py-2 space-y-2`,"data-testid":`sysmon-fan-row`,children:[(0,H.jsxs)(`div`,{className:`flex items-baseline justify-between gap-3`,children:[(0,H.jsx)(`span`,{className:`text-sm font-medium truncate`,title:e.id,children:e.label}),(0,H.jsxs)(`span`,{className:`text-sm tabular-nums shrink-0`,children:[e.rpm,` RPM`]})]}),(0,H.jsxs)(W,{children:[(0,H.jsx)(G,{label:`Duty cycle`,value:e.pwmPercent===void 0?void 0:`${e.pwmPercent.toFixed(0)}%`}),(0,H.jsx)(G,{label:e.tempName??`Temperature`,value:v(e.tempC,t)})]})]},e.id))})]})}var ye={cpu:l,memory:r,disk:a,nic:s,gpu:o,fans:u};function be(e){return e>80?`bg-error`:e>50?`bg-warning`:`bg-primary`}function xe({entry:e,selected:t,showChevron:n,onSelect:r}){let i=ye[e.kind];return(0,H.jsxs)(`button`,{type:`button`,onClick:()=>r(e.key),"aria-current":t,"data-testid":`sysmon-device-row`,"data-device-key":e.key,className:b(`w-full min-h-11 px-3 py-2 flex items-center gap-3 text-left transition-colors`,t?`bg-primary/10 text-text-primary`:`hover:bg-surface-hover`),children:[(0,H.jsx)(i,{className:`size-4 shrink-0 text-text-subtle`}),(0,H.jsxs)(`span`,{className:`flex-1 min-w-0`,children:[(0,H.jsx)(`span`,{className:`block text-sm truncate`,children:e.label}),(0,H.jsx)(`span`,{className:`block text-[11px] text-text-subtle truncate`,title:e.sublabel,children:e.sublabel}),e.percent!==null&&(0,H.jsx)(`span`,{className:`mt-1 block h-1 w-full rounded-full bg-surface-hover overflow-hidden`,children:(0,H.jsx)(`span`,{className:b(`block h-full transition-[width]`,be(e.percent)),style:{width:`${Math.max(1,Math.min(100,e.percent))}%`}})})]}),(0,H.jsx)(`span`,{className:`text-xs tabular-nums text-text-secondary shrink-0`,children:e.detail}),n&&(0,H.jsx)(c,{className:`size-4 shrink-0 text-text-subtle`})]})}function $({entry:e,system:t,inventory:n,history:r}){switch(e.kind){case`cpu`:return(0,H.jsx)(se,{cpu:t.cpu,info:n?.cpu,history:r,processCount:t.processCount});case`memory`:return(0,H.jsx)(ce,{mem:t.mem,info:n?.memory,history:r});case`disk`:{let i=(t.disks??[]).findIndex(t=>t.id===e.id),a=i>=0?t.disks?.[i]:void 0;return a?(0,H.jsx)(he,{disk:a,index:i,info:n?.disks.find(e=>e.id===a.id),history:r}):null}case`nic`:{let i=(t.nics??[]).find(t=>t.id===e.id);return i?(0,H.jsx)(Z,{nic:i,info:n?.nics.find(e=>e.id===i.id),history:r}):null}case`gpu`:{let i=t.gpus.findIndex(t=>e.id?t.id===e.id:!0),a=i>=0?t.gpus[i]:void 0;return a?(0,H.jsx)(_e,{gpu:a,index:i,info:n?.gpus.find(e=>e.id===a.id),history:r}):null}case`fans`:return(0,H.jsx)(ve,{fans:t.fans??[]});default:return null}}function Se({system:e,history:t,device:n,onDeviceChange:r}){let a=x(),o=ie((0,F.useMemo)(()=>[...(e.disks??[]).map(e=>e.id),...(e.nics??[]).map(e=>e.id),...e.gpus.map(e=>e.id).filter(e=>!!e)].join(`,`),[e.disks,e.nics,e.gpus])),s=(0,F.useMemo)(()=>ne(e,o),[e,o]),c=re(s,n),l=s.find(e=>e.key===c),u=(0,H.jsx)(`div`,{className:`divide-y divide-border`,role:`list`,"data-testid":`sysmon-device-list`,children:s.map(e=>(0,H.jsx)(xe,{entry:e,selected:!a&&e.key===c,showChevron:a,onSelect:r},e.key))});return a?n===null||!l||c!==n?(0,H.jsx)(`div`,{className:`h-full overflow-y-auto`,"data-testid":`sysmon-performance`,children:u}):(0,H.jsxs)(`div`,{className:`h-full flex flex-col`,"data-testid":`sysmon-performance`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:()=>r(null),className:`shrink-0 min-h-11 px-3 flex items-center gap-2 text-sm border-b border-border`,children:[(0,H.jsx)(i,{className:`size-4`}),`Devices`]}),(0,H.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto p-4 @container`,children:(0,H.jsx)($,{entry:l,system:e,inventory:o,history:t})})]}):(0,H.jsxs)(`div`,{className:`h-full flex min-h-0`,"data-testid":`sysmon-performance`,children:[(0,H.jsx)(`div`,{className:`w-56 shrink-0 border-r border-border overflow-y-auto`,children:u}),(0,H.jsx)(`div`,{className:`flex-1 min-w-0 overflow-y-auto p-4 @container`,children:l&&(0,H.jsx)($,{entry:l,system:e,inventory:o,history:t})})]})}export{Se as PerformancePanel};