@hienlh/ppm 0.22.7 → 0.22.8

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 (270) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/assets/skills/ppm/SKILL.md +1 -1
  3. package/assets/skills/ppm/references/http-api.md +1 -1
  4. package/dist/web/assets/{accounts-settings-section-D0_yfkaF.js → accounts-settings-section-Dk9qWWTy.js} +1 -1
  5. package/dist/web/assets/accounts-settings-section-Dk9qWWTy.js.br +0 -0
  6. package/dist/web/assets/accounts-settings-section-Dk9qWWTy.js.gz +0 -0
  7. package/dist/web/assets/{ai-resource-editor-C9v1LE44.js → ai-resource-editor-CtvWAxMW.js} +1 -1
  8. package/dist/web/assets/ai-resource-editor-CtvWAxMW.js.br +0 -0
  9. package/dist/web/assets/ai-resource-editor-CtvWAxMW.js.gz +0 -0
  10. package/dist/web/assets/{ai-settings-section-DsErcc2X.js → ai-settings-section-BxN-zFfm.js} +1 -1
  11. package/dist/web/assets/{ai-settings-section-DXdhCjIc.js → ai-settings-section-CfI9nNSa.js} +1 -1
  12. package/dist/web/assets/ai-settings-section-CfI9nNSa.js.br +0 -0
  13. package/dist/web/assets/ai-settings-section-CfI9nNSa.js.gz +0 -0
  14. package/dist/web/assets/{appearance-settings-section-D2aDjjkv.js → appearance-settings-section-DRWpbQqj.js} +1 -1
  15. package/dist/web/assets/appearance-settings-section-DRWpbQqj.js.br +0 -0
  16. package/dist/web/assets/appearance-settings-section-DRWpbQqj.js.gz +0 -0
  17. package/dist/web/assets/{branch-review-tab-CVj_KmG-.js → branch-review-tab-B3BMVCdK.js} +1 -1
  18. package/dist/web/assets/branch-review-tab-B3BMVCdK.js.br +0 -0
  19. package/dist/web/assets/branch-review-tab-B3BMVCdK.js.gz +0 -0
  20. package/dist/web/assets/{chat-tab-DiIM2Z8w.js → chat-tab-B0g-TzDa.js} +2 -2
  21. package/dist/web/assets/chat-tab-B0g-TzDa.js.br +0 -0
  22. package/dist/web/assets/chat-tab-B0g-TzDa.js.gz +0 -0
  23. package/dist/web/assets/{code-editor-7uhKbtxw.js → code-editor-DXra_Rnt.js} +3 -3
  24. package/dist/web/assets/code-editor-DXra_Rnt.js.br +0 -0
  25. package/dist/web/assets/code-editor-DXra_Rnt.js.gz +0 -0
  26. package/dist/web/assets/{codex-daily-guard-BwLzw3gJ.js → codex-daily-guard-DjLeZ_hE.js} +1 -1
  27. package/dist/web/assets/codex-daily-guard-DjLeZ_hE.js.br +0 -0
  28. package/dist/web/assets/codex-daily-guard-DjLeZ_hE.js.gz +0 -0
  29. package/dist/web/assets/{conflict-editor-Fa0i5rwa.js → conflict-editor-Dx8MnO6j.js} +1 -1
  30. package/dist/web/assets/conflict-editor-Dx8MnO6j.js.br +0 -0
  31. package/dist/web/assets/conflict-editor-Dx8MnO6j.js.gz +0 -0
  32. package/dist/web/assets/{csv-preview-Ba8cMI_C.js → csv-preview-U-Fy9KPT.js} +1 -1
  33. package/dist/web/assets/csv-preview-U-Fy9KPT.js.br +0 -0
  34. package/dist/web/assets/csv-preview-U-Fy9KPT.js.gz +0 -0
  35. package/dist/web/assets/{database-viewer-B7xBZwAY.js → database-viewer-v5S-zzB6.js} +1 -1
  36. package/dist/web/assets/database-viewer-v5S-zzB6.js.br +0 -0
  37. package/dist/web/assets/database-viewer-v5S-zzB6.js.gz +0 -0
  38. package/dist/web/assets/{diff-viewer-CBo-I2n7.js → diff-viewer-Bv2J64t8.js} +1 -1
  39. package/dist/web/assets/diff-viewer-Bv2J64t8.js.br +0 -0
  40. package/dist/web/assets/diff-viewer-Bv2J64t8.js.gz +0 -0
  41. package/dist/web/assets/{editor-language-service-DKluViya.js → editor-language-service-C1J6iorq.js} +1 -1
  42. package/dist/web/assets/editor-language-service-C1J6iorq.js.br +0 -0
  43. package/dist/web/assets/editor-language-service-C1J6iorq.js.gz +0 -0
  44. package/dist/web/assets/{explorer-body-RTRXIniK.js → explorer-body-BpTOY2kH.js} +1 -1
  45. package/dist/web/assets/explorer-body-BpTOY2kH.js.br +0 -0
  46. package/dist/web/assets/explorer-body-BpTOY2kH.js.gz +0 -0
  47. package/dist/web/assets/{explorer-window-content-BBk4J0pd.js → explorer-window-content-CZIwX6cE.js} +1 -1
  48. package/dist/web/assets/explorer-window-content-CZIwX6cE.js.br +0 -0
  49. package/dist/web/assets/explorer-window-content-CZIwX6cE.js.gz +0 -0
  50. package/dist/web/assets/{extension-manager-section-CGTiQ03R.js → extension-manager-section-DGSKz5iJ.js} +1 -1
  51. package/dist/web/assets/extension-manager-section-DGSKz5iJ.js.br +0 -0
  52. package/dist/web/assets/extension-manager-section-DGSKz5iJ.js.gz +0 -0
  53. package/dist/web/assets/{extension-webview-B0Gn1J0z.js → extension-webview-FuuXP0Aw.js} +1 -1
  54. package/dist/web/assets/extension-webview-FuuXP0Aw.js.br +0 -0
  55. package/dist/web/assets/extension-webview-FuuXP0Aw.js.gz +0 -0
  56. package/dist/web/assets/{files-settings-section-CvuSM0-8.js → files-settings-section-CGd2yfzl.js} +1 -1
  57. package/dist/web/assets/files-settings-section-CGd2yfzl.js.br +0 -0
  58. package/dist/web/assets/files-settings-section-CGd2yfzl.js.gz +0 -0
  59. package/dist/web/assets/{general-settings-section-CjlbiBLs.js → general-settings-section-CcG10nJq.js} +1 -1
  60. package/dist/web/assets/general-settings-section-CcG10nJq.js.br +0 -0
  61. package/dist/web/assets/general-settings-section-CcG10nJq.js.gz +0 -0
  62. package/dist/web/assets/{git-log-panel-DLEfShbT.js → git-log-panel-B-aSlSlu.js} +1 -1
  63. package/dist/web/assets/git-log-panel-B-aSlSlu.js.br +0 -0
  64. package/dist/web/assets/git-log-panel-B-aSlSlu.js.gz +0 -0
  65. package/dist/web/assets/{glide-data-grid-DvojIuqH.js → glide-data-grid-usB_4gTg.js} +1 -1
  66. package/dist/web/assets/glide-data-grid-usB_4gTg.js.br +0 -0
  67. package/dist/web/assets/glide-data-grid-usB_4gTg.js.gz +0 -0
  68. package/dist/web/assets/{group-chat-tab-DeTRoA9c.js → group-chat-tab-BAMi_dhb.js} +1 -1
  69. package/dist/web/assets/group-chat-tab-BAMi_dhb.js.br +0 -0
  70. package/dist/web/assets/group-chat-tab-BAMi_dhb.js.gz +0 -0
  71. package/dist/web/assets/{index-BnH1J2Pm.js → index-CoTvom0K.js} +4 -4
  72. package/dist/web/assets/index-CoTvom0K.js.br +0 -0
  73. package/dist/web/assets/index-CoTvom0K.js.gz +0 -0
  74. package/dist/web/assets/index-DLn9-Lrb.css +1 -0
  75. package/dist/web/assets/index-DLn9-Lrb.css.br +0 -0
  76. package/dist/web/assets/index-DLn9-Lrb.css.gz +0 -0
  77. package/dist/web/assets/{jira-watcher-section-achV6oEy.js → jira-watcher-section-cDMBzIR7.js} +1 -1
  78. package/dist/web/assets/jira-watcher-section-cDMBzIR7.js.br +3 -0
  79. package/dist/web/assets/jira-watcher-section-cDMBzIR7.js.gz +0 -0
  80. package/dist/web/assets/{keybindings-store-C6XvoJN3.js → keybindings-store-D7nwnInl.js} +1 -1
  81. package/dist/web/assets/{keyboard-shortcuts-section-UJUsOlks.js → keyboard-shortcuts-section-CIcdYToP.js} +1 -1
  82. package/dist/web/assets/keyboard-shortcuts-section-CIcdYToP.js.br +0 -0
  83. package/dist/web/assets/keyboard-shortcuts-section-CIcdYToP.js.gz +0 -0
  84. package/dist/web/assets/{markdown-renderer-D04mW6Ct.js → markdown-renderer-BzX5WysW.js} +1 -1
  85. package/dist/web/assets/{markdown-renderer-DFV8qf0b.js → markdown-renderer-KTNg80_A.js} +1 -1
  86. package/dist/web/assets/markdown-renderer-KTNg80_A.js.br +0 -0
  87. package/dist/web/assets/markdown-renderer-KTNg80_A.js.gz +0 -0
  88. package/dist/web/assets/{mobile-explorer-sheet-tb0C8TkU.js → mobile-explorer-sheet-cnwXe-Uz.js} +1 -1
  89. package/dist/web/assets/mobile-explorer-sheet-cnwXe-Uz.js.br +0 -0
  90. package/dist/web/assets/mobile-explorer-sheet-cnwXe-Uz.js.gz +0 -0
  91. package/dist/web/assets/{notification-store-Dp-4MQ7j.js → notification-store-Bayjh6Js.js} +1 -1
  92. package/dist/web/assets/{ppmbot-settings-section-CcuxvSTb.js → ppmbot-settings-section-CDp69sHV.js} +1 -1
  93. package/dist/web/assets/ppmbot-settings-section-CDp69sHV.js.br +0 -0
  94. package/dist/web/assets/ppmbot-settings-section-CDp69sHV.js.gz +0 -0
  95. package/dist/web/assets/{problems-panel-DYnneKde.js → problems-panel-BiE3c-31.js} +1 -1
  96. package/dist/web/assets/problems-panel-BiE3c-31.js.br +0 -0
  97. package/dist/web/assets/problems-panel-BiE3c-31.js.gz +0 -0
  98. package/dist/web/assets/{process-table-CPL5WqCw.js → process-table-DcEq9HCl.js} +1 -1
  99. package/dist/web/assets/process-table-DcEq9HCl.js.br +0 -0
  100. package/dist/web/assets/process-table-DcEq9HCl.js.gz +0 -0
  101. package/dist/web/assets/{proxy-settings-section-DECsg44g.js → proxy-settings-section-P_ULFRpZ.js} +1 -1
  102. package/dist/web/assets/proxy-settings-section-P_ULFRpZ.js.br +0 -0
  103. package/dist/web/assets/proxy-settings-section-P_ULFRpZ.js.gz +0 -0
  104. package/dist/web/assets/{remote-desktop-clipboard-notice-DsaoVJd9.js → remote-desktop-clipboard-notice-COjdmADR.js} +1 -1
  105. package/dist/web/assets/remote-desktop-clipboard-notice-COjdmADR.js.br +0 -0
  106. package/dist/web/assets/remote-desktop-clipboard-notice-COjdmADR.js.gz +0 -0
  107. package/dist/web/assets/{remote-desktop-mobile-sheet-D8Elyy-R.js → remote-desktop-mobile-sheet-lCU5l2w4.js} +2 -2
  108. package/dist/web/assets/remote-desktop-mobile-sheet-lCU5l2w4.js.br +0 -0
  109. package/dist/web/assets/remote-desktop-mobile-sheet-lCU5l2w4.js.gz +0 -0
  110. package/dist/web/assets/{remote-desktop-mobile-view-DsWsVesK.js → remote-desktop-mobile-view-Bo-wgZPC.js} +1 -1
  111. package/dist/web/assets/remote-desktop-mobile-view-Bo-wgZPC.js.br +0 -0
  112. package/dist/web/assets/remote-desktop-mobile-view-Bo-wgZPC.js.gz +0 -0
  113. package/dist/web/assets/{remote-desktop-readiness-gate-D3JXnNKi.js → remote-desktop-readiness-gate-Cqz8kqWG.js} +1 -1
  114. package/dist/web/assets/remote-desktop-readiness-gate-Cqz8kqWG.js.br +0 -0
  115. package/dist/web/assets/remote-desktop-readiness-gate-Cqz8kqWG.js.gz +0 -0
  116. package/dist/web/assets/{remote-desktop-window-content-6kwgSTNH.js → remote-desktop-window-content-R-aRW07B.js} +1 -1
  117. package/dist/web/assets/remote-desktop-window-content-R-aRW07B.js.br +0 -0
  118. package/dist/web/assets/remote-desktop-window-content-R-aRW07B.js.gz +0 -0
  119. package/dist/web/assets/{schedules-settings-section-BTl_vB-5.js → schedules-settings-section-DHs84DvG.js} +1 -1
  120. package/dist/web/assets/schedules-settings-section-DHs84DvG.js.br +0 -0
  121. package/dist/web/assets/schedules-settings-section-DHs84DvG.js.gz +0 -0
  122. package/dist/web/assets/{settings-body-BLOJ0NCv.js → settings-body-CLt6iutX.js} +2 -2
  123. package/dist/web/assets/settings-body-CLt6iutX.js.br +0 -0
  124. package/dist/web/assets/settings-body-CLt6iutX.js.gz +0 -0
  125. package/dist/web/assets/{settings-tab-CS8dGl16.js → settings-tab-DjOxh-vW.js} +1 -1
  126. package/dist/web/assets/{settings-window-content-Bq5gTCpo.js → settings-window-content-BxzSerga.js} +1 -1
  127. package/dist/web/assets/{sql-query-editor-BgLCJabc.js → sql-query-editor-4Okd-7ss.js} +1 -1
  128. package/dist/web/assets/sql-query-editor-4Okd-7ss.js.br +0 -0
  129. package/dist/web/assets/sql-query-editor-4Okd-7ss.js.gz +0 -0
  130. package/dist/web/assets/{sqlite-viewer-CQIQcFjS.js → sqlite-viewer-BqDUckIJ.js} +1 -1
  131. package/dist/web/assets/sqlite-viewer-BqDUckIJ.js.br +0 -0
  132. package/dist/web/assets/sqlite-viewer-BqDUckIJ.js.gz +0 -0
  133. package/dist/web/assets/{system-monitor-body-p0hOErnb.js → system-monitor-body-Ssmt-r5H.js} +2 -2
  134. package/dist/web/assets/system-monitor-body-Ssmt-r5H.js.br +0 -0
  135. package/dist/web/assets/system-monitor-body-Ssmt-r5H.js.gz +0 -0
  136. package/dist/web/assets/{system-monitor-tab-CBBTTyzP.js → system-monitor-tab-DNe62hWL.js} +1 -1
  137. package/dist/web/assets/{system-monitor-window-content-3LFpj97e.js → system-monitor-window-content-C6vnW_pQ.js} +1 -1
  138. package/dist/web/assets/{tab-host-window-content-DVdOHg7r.js → tab-host-window-content--BVyPR1f.js} +1 -1
  139. package/dist/web/assets/tab-host-window-content--BVyPR1f.js.br +0 -0
  140. package/dist/web/assets/tab-host-window-content--BVyPR1f.js.gz +0 -0
  141. package/dist/web/assets/{team-member-sheet-BBuKfjts.js → team-member-sheet-CE2eHuFX.js} +2 -2
  142. package/dist/web/assets/team-member-sheet-CE2eHuFX.js.br +0 -0
  143. package/dist/web/assets/team-member-sheet-CE2eHuFX.js.gz +0 -0
  144. package/dist/web/assets/{team-member-window-content-3Zys-VyF.js → team-member-window-content-B1sg0R4H.js} +1 -1
  145. package/dist/web/assets/team-member-window-content-B1sg0R4H.js.br +0 -0
  146. package/dist/web/assets/team-member-window-content-B1sg0R4H.js.gz +0 -0
  147. package/dist/web/assets/{terminal-tab-Dy-qrTQW.js → terminal-tab-BrdS4bAy.js} +1 -1
  148. package/dist/web/assets/terminal-tab-BrdS4bAy.js.br +0 -0
  149. package/dist/web/assets/{terminal-tab-Dy-qrTQW.js.gz → terminal-tab-BrdS4bAy.js.gz} +0 -0
  150. package/dist/web/assets/{tool-cards-DP78zyGK.js → tool-cards-DzYJVhjl.js} +2 -2
  151. package/dist/web/assets/tool-cards-DzYJVhjl.js.br +0 -0
  152. package/dist/web/assets/tool-cards-DzYJVhjl.js.gz +0 -0
  153. package/dist/web/assets/{use-inline-blame-BFblg3CO.js → use-inline-blame-CKu-Sd-l.js} +1 -1
  154. package/dist/web/assets/use-inline-blame-CKu-Sd-l.js.br +0 -0
  155. package/dist/web/assets/use-inline-blame-CKu-Sd-l.js.gz +0 -0
  156. package/dist/web/assets/{use-lsp-BKTJSEL2.js → use-lsp-BaG0NUXY.js} +1 -1
  157. package/dist/web/assets/use-lsp-BaG0NUXY.js.br +0 -0
  158. package/dist/web/assets/use-lsp-BaG0NUXY.js.gz +0 -0
  159. package/dist/web/assets/{use-monaco-theme-DFaNmksV.js → use-monaco-theme-DvWcXiCH.js} +1 -1
  160. package/dist/web/assets/{use-websocket-CUFk4qWs.js → use-websocket-Dj0e6N6t.js} +1 -1
  161. package/dist/web/assets/{video-preview-DCxuJvbT.js → video-preview-ZyRR49Lr.js} +1 -1
  162. package/dist/web/assets/video-preview-ZyRR49Lr.js.br +0 -0
  163. package/dist/web/assets/video-preview-ZyRR49Lr.js.gz +0 -0
  164. package/dist/web/index.html +2 -2
  165. package/dist/web/index.html.br +0 -0
  166. package/dist/web/index.html.gz +0 -0
  167. package/dist/web/sw.js +1 -1
  168. package/dist/web/sw.js.br +0 -0
  169. package/dist/web/sw.js.gz +0 -0
  170. package/package.json +1 -1
  171. package/dist/web/assets/accounts-settings-section-D0_yfkaF.js.br +0 -0
  172. package/dist/web/assets/accounts-settings-section-D0_yfkaF.js.gz +0 -0
  173. package/dist/web/assets/ai-resource-editor-C9v1LE44.js.br +0 -0
  174. package/dist/web/assets/ai-resource-editor-C9v1LE44.js.gz +0 -0
  175. package/dist/web/assets/ai-settings-section-DXdhCjIc.js.br +0 -0
  176. package/dist/web/assets/ai-settings-section-DXdhCjIc.js.gz +0 -0
  177. package/dist/web/assets/appearance-settings-section-D2aDjjkv.js.br +0 -0
  178. package/dist/web/assets/appearance-settings-section-D2aDjjkv.js.gz +0 -0
  179. package/dist/web/assets/branch-review-tab-CVj_KmG-.js.br +0 -0
  180. package/dist/web/assets/branch-review-tab-CVj_KmG-.js.gz +0 -0
  181. package/dist/web/assets/chat-tab-DiIM2Z8w.js.br +0 -0
  182. package/dist/web/assets/chat-tab-DiIM2Z8w.js.gz +0 -0
  183. package/dist/web/assets/code-editor-7uhKbtxw.js.br +0 -0
  184. package/dist/web/assets/code-editor-7uhKbtxw.js.gz +0 -0
  185. package/dist/web/assets/codex-daily-guard-BwLzw3gJ.js.br +0 -0
  186. package/dist/web/assets/codex-daily-guard-BwLzw3gJ.js.gz +0 -0
  187. package/dist/web/assets/conflict-editor-Fa0i5rwa.js.br +0 -0
  188. package/dist/web/assets/conflict-editor-Fa0i5rwa.js.gz +0 -0
  189. package/dist/web/assets/csv-preview-Ba8cMI_C.js.br +0 -0
  190. package/dist/web/assets/csv-preview-Ba8cMI_C.js.gz +0 -0
  191. package/dist/web/assets/database-viewer-B7xBZwAY.js.br +0 -0
  192. package/dist/web/assets/database-viewer-B7xBZwAY.js.gz +0 -0
  193. package/dist/web/assets/diff-viewer-CBo-I2n7.js.br +0 -0
  194. package/dist/web/assets/diff-viewer-CBo-I2n7.js.gz +0 -0
  195. package/dist/web/assets/editor-language-service-DKluViya.js.br +0 -0
  196. package/dist/web/assets/editor-language-service-DKluViya.js.gz +0 -0
  197. package/dist/web/assets/explorer-body-RTRXIniK.js.br +0 -0
  198. package/dist/web/assets/explorer-body-RTRXIniK.js.gz +0 -0
  199. package/dist/web/assets/explorer-window-content-BBk4J0pd.js.br +0 -0
  200. package/dist/web/assets/explorer-window-content-BBk4J0pd.js.gz +0 -0
  201. package/dist/web/assets/extension-manager-section-CGTiQ03R.js.br +0 -0
  202. package/dist/web/assets/extension-manager-section-CGTiQ03R.js.gz +0 -0
  203. package/dist/web/assets/extension-webview-B0Gn1J0z.js.br +0 -0
  204. package/dist/web/assets/extension-webview-B0Gn1J0z.js.gz +0 -0
  205. package/dist/web/assets/files-settings-section-CvuSM0-8.js.br +0 -0
  206. package/dist/web/assets/files-settings-section-CvuSM0-8.js.gz +0 -0
  207. package/dist/web/assets/general-settings-section-CjlbiBLs.js.br +0 -0
  208. package/dist/web/assets/general-settings-section-CjlbiBLs.js.gz +0 -0
  209. package/dist/web/assets/git-log-panel-DLEfShbT.js.br +0 -0
  210. package/dist/web/assets/git-log-panel-DLEfShbT.js.gz +0 -0
  211. package/dist/web/assets/glide-data-grid-DvojIuqH.js.br +0 -0
  212. package/dist/web/assets/glide-data-grid-DvojIuqH.js.gz +0 -0
  213. package/dist/web/assets/group-chat-tab-DeTRoA9c.js.br +0 -0
  214. package/dist/web/assets/group-chat-tab-DeTRoA9c.js.gz +0 -0
  215. package/dist/web/assets/index-BnH1J2Pm.js.br +0 -0
  216. package/dist/web/assets/index-BnH1J2Pm.js.gz +0 -0
  217. package/dist/web/assets/index-C3lfHthr.css +0 -1
  218. package/dist/web/assets/index-C3lfHthr.css.br +0 -0
  219. package/dist/web/assets/index-C3lfHthr.css.gz +0 -0
  220. package/dist/web/assets/jira-watcher-section-achV6oEy.js.br +0 -3
  221. package/dist/web/assets/jira-watcher-section-achV6oEy.js.gz +0 -0
  222. package/dist/web/assets/keyboard-shortcuts-section-UJUsOlks.js.br +0 -0
  223. package/dist/web/assets/keyboard-shortcuts-section-UJUsOlks.js.gz +0 -0
  224. package/dist/web/assets/markdown-renderer-DFV8qf0b.js.br +0 -0
  225. package/dist/web/assets/markdown-renderer-DFV8qf0b.js.gz +0 -0
  226. package/dist/web/assets/mobile-explorer-sheet-tb0C8TkU.js.br +0 -0
  227. package/dist/web/assets/mobile-explorer-sheet-tb0C8TkU.js.gz +0 -0
  228. package/dist/web/assets/ppmbot-settings-section-CcuxvSTb.js.br +0 -0
  229. package/dist/web/assets/ppmbot-settings-section-CcuxvSTb.js.gz +0 -0
  230. package/dist/web/assets/problems-panel-DYnneKde.js.br +0 -0
  231. package/dist/web/assets/problems-panel-DYnneKde.js.gz +0 -0
  232. package/dist/web/assets/process-table-CPL5WqCw.js.br +0 -0
  233. package/dist/web/assets/process-table-CPL5WqCw.js.gz +0 -0
  234. package/dist/web/assets/proxy-settings-section-DECsg44g.js.br +0 -0
  235. package/dist/web/assets/proxy-settings-section-DECsg44g.js.gz +0 -0
  236. package/dist/web/assets/remote-desktop-clipboard-notice-DsaoVJd9.js.br +0 -0
  237. package/dist/web/assets/remote-desktop-clipboard-notice-DsaoVJd9.js.gz +0 -0
  238. package/dist/web/assets/remote-desktop-mobile-sheet-D8Elyy-R.js.br +0 -0
  239. package/dist/web/assets/remote-desktop-mobile-sheet-D8Elyy-R.js.gz +0 -0
  240. package/dist/web/assets/remote-desktop-mobile-view-DsWsVesK.js.br +0 -0
  241. package/dist/web/assets/remote-desktop-mobile-view-DsWsVesK.js.gz +0 -0
  242. package/dist/web/assets/remote-desktop-readiness-gate-D3JXnNKi.js.br +0 -0
  243. package/dist/web/assets/remote-desktop-readiness-gate-D3JXnNKi.js.gz +0 -0
  244. package/dist/web/assets/remote-desktop-window-content-6kwgSTNH.js.br +0 -0
  245. package/dist/web/assets/remote-desktop-window-content-6kwgSTNH.js.gz +0 -0
  246. package/dist/web/assets/schedules-settings-section-BTl_vB-5.js.br +0 -0
  247. package/dist/web/assets/schedules-settings-section-BTl_vB-5.js.gz +0 -0
  248. package/dist/web/assets/settings-body-BLOJ0NCv.js.br +0 -0
  249. package/dist/web/assets/settings-body-BLOJ0NCv.js.gz +0 -0
  250. package/dist/web/assets/sql-query-editor-BgLCJabc.js.br +0 -0
  251. package/dist/web/assets/sql-query-editor-BgLCJabc.js.gz +0 -0
  252. package/dist/web/assets/sqlite-viewer-CQIQcFjS.js.br +0 -0
  253. package/dist/web/assets/sqlite-viewer-CQIQcFjS.js.gz +0 -0
  254. package/dist/web/assets/system-monitor-body-p0hOErnb.js.br +0 -0
  255. package/dist/web/assets/system-monitor-body-p0hOErnb.js.gz +0 -0
  256. package/dist/web/assets/tab-host-window-content-DVdOHg7r.js.br +0 -0
  257. package/dist/web/assets/tab-host-window-content-DVdOHg7r.js.gz +0 -0
  258. package/dist/web/assets/team-member-sheet-BBuKfjts.js.br +0 -0
  259. package/dist/web/assets/team-member-sheet-BBuKfjts.js.gz +0 -0
  260. package/dist/web/assets/team-member-window-content-3Zys-VyF.js.br +0 -0
  261. package/dist/web/assets/team-member-window-content-3Zys-VyF.js.gz +0 -0
  262. package/dist/web/assets/terminal-tab-Dy-qrTQW.js.br +0 -0
  263. package/dist/web/assets/tool-cards-DP78zyGK.js.br +0 -0
  264. package/dist/web/assets/tool-cards-DP78zyGK.js.gz +0 -0
  265. package/dist/web/assets/use-inline-blame-BFblg3CO.js.br +0 -0
  266. package/dist/web/assets/use-inline-blame-BFblg3CO.js.gz +0 -0
  267. package/dist/web/assets/use-lsp-BKTJSEL2.js.br +0 -0
  268. package/dist/web/assets/use-lsp-BKTJSEL2.js.gz +0 -0
  269. package/dist/web/assets/video-preview-DCxuJvbT.js.br +0 -0
  270. package/dist/web/assets/video-preview-DCxuJvbT.js.gz +0 -0
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import{Br as r,Qn as i,V as a,Xt as o,lt as s,st as c,wr as l}from"./icons-DQjqk0lJ.js";import{t as u}from"./button-B9CTrsEf.js";import{An as d,On as f,Z as p,kn as m}from"./index-BnH1J2Pm.js";import{getAccounts as h,getActiveAccount as g,getAllAccountUsages as _,patchAccount as v}from"./api-settings-BZFSteM_.js";function y(e){return e>=90?`text-error`:e>=70?`text-warning`:`text-success`}function b(e){return e>=90?`bg-error`:e>=70?`bg-warning`:`bg-success`}function x(e){if(!e)return null;let t=null;if(e.resetsInMinutes!=null)t=e.resetsInMinutes;else if(e.resetsInHours!=null)t=Math.round(e.resetsInHours*60);else if(e.resetsAt){let n=new Date(e.resetsAt).getTime()-Date.now();t=n>0?Math.ceil(n/6e4):0}if(t==null)return null;if(t<=0)return`now`;let n=Math.floor(t/1440),r=Math.floor(t%1440/60),i=t%60;return n>0?i>0?`${n}d ${r}h ${i}m`:r>0?`${n}d ${r}h`:`${n}d`:r>0?i>0?`${r}h ${i}m`:`${r}h`:`${i}m`}function S(e){if(!e)return null;let t=new Date(e).getTime();return Number.isFinite(t)?new Date(t).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):null}function C(e){let t=e-Date.now();if(t<=0)return`expired`;let n=Math.ceil(t/6e4),r=Math.floor(n/60),i=Math.floor(r/24);return i>0?`${i}d ${r%24}h`:r>0?`${r}h ${n%60}m`:`${n}m`}function w(e){if(!e)return{label:`unknown`,tip:`No account info available`,color:`text-text-subtle`};if(!e.expiresAt)return{label:`key`,tip:`API key (no expiry)`,color:`text-text-subtle`};if(e.reauthRequired)return{label:`sign in again`,tip:`Anthropic rejected this account's refresh token. Sign in again to restore it.`,color:`text-error`};let t=e.expiresAt*1e3<Date.now();return t&&e.hasRefreshToken?{label:`expired`,tip:`Token expired but has refresh token — will auto-renew`,color:`text-warning`}:t?{label:`expired`,tip:`Token expired, no refresh token`,color:`text-error`}:e.hasRefreshToken?{label:`long-lived`,tip:`OAuth token with refresh — long-lived`,color:`text-success`}:{label:`temp`,tip:`Temporary token without refresh — will expire`,color:`text-warning`}}function T(e){if(!e)return null;let t=Math.round((Date.now()-e)/1e3);if(t<5)return`just now`;if(t<60)return`${t}s ago`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60),i=n%60;return r<24?i>0?`${r}h ${i}m ago`:`${r}h ago`:`${Math.floor(r/24)}d ago`}var E=n();function D({label:e,pct:t,reset:n,resetsAt:r}){let i=S(r);return(0,E.jsxs)(`div`,{className:`space-y-1`,"data-testid":`account-usage-bar`,children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,E.jsx)(`span`,{className:`text-xs font-medium text-text-primary`,children:e}),n&&(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsxs)(`span`,{className:`text-[10px] text-text-subtle cursor-default`,children:[`↻ `,n]})}),(0,E.jsx)(m,{side:`top`,children:i?`Resets ${i}`:`Resets in`})]})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`div`,{className:`flex-1 h-2 rounded-full bg-border overflow-hidden`,children:t!=null&&(0,E.jsx)(`div`,{className:`h-full rounded-full transition-all ${b(t)}`,style:{width:`${Math.min(t,100)}%`}})}),(0,E.jsx)(`span`,{className:`text-xs font-medium tabular-nums w-10 text-right ${t==null?`text-text-subtle`:y(t)}`,children:t==null?`—`:`${t}%`})]})]})}function O({label:e,bucket:t}){return t?(0,E.jsx)(D,{label:e,pct:Math.round(t.utilization*100),reset:x(t),resetsAt:t.resetsAt}):null}function k({hint:e,className:t,children:n}){return(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{type:`button`,className:[`cursor-help text-left`,t].filter(Boolean).join(` `),children:n})}),(0,E.jsx)(m,{side:`top`,className:`max-w-[260px] text-xs leading-relaxed`,children:e})]})}function A({description:e,onRefresh:t,refreshing:n,disabled:r,actions:a}){return(0,E.jsxs)(`section`,{className:`space-y-2`,children:[(0,E.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e}),(0,E.jsx)(u,{variant:`ghost`,size:`icon`,className:`size-8 shrink-0 cursor-pointer`,onClick:t,disabled:r||n,title:`Refresh`,"aria-label":`Refresh accounts`,children:(0,E.jsx)(i,{className:`size-4 ${n?`animate-spin`:``}`})})]}),(0,E.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:a})]})}function j({message:e,onDismiss:t}){return e?(0,E.jsxs)(`div`,{className:`flex items-start gap-2 text-xs p-2 rounded bg-muted`,role:`status`,children:[(0,E.jsx)(`span`,{className:`flex-1`,children:e}),(0,E.jsx)(`button`,{onClick:t,className:`shrink-0 text-muted-foreground hover:text-foreground cursor-pointer`,"aria-label":`Dismiss message`,children:(0,E.jsx)(r,{className:`size-3.5`})})]}):null}function M({children:e}){return(0,E.jsx)(`div`,{className:`flex gap-2 overflow-x-auto pb-1 -mx-1 px-1 snap-x snap-mandatory scrollbar-thin`,children:e})}function N({active:e,flash:t,dense:n,children:r,...i}){return(0,E.jsx)(`div`,{...i,className:[`rounded-md border transition-colors duration-500`,n?`p-2.5 space-y-1.5`:`p-3 space-y-2`,t?`bg-primary/10 border-primary/40`:``,e?`border-primary/30 bg-primary/5`:`border-border/50`,i.className??``].filter(Boolean).join(` `),children:r})}var P={readOnly:`min-w-[220px]`,withActions:`min-w-[300px]`};function F({entry:e,isActive:t,accountInfo:n,onToggle:r,toggling:u,onDelete:h,onExport:g,onViewProfile:_,flash:v,onSelect:y,unselectableReason:b,selecting:x,planLabel:S,dailyGuard:D,onDailyGuardToggle:A,dailyGuardToggling:j,layout:M=`list`}){let{usage:F}=e,I=F.session||F.weekly||F.weeklyOpus||F.weeklySonnet,L=n?.status??e.accountStatus,R=!!(n&&!n.hasRefreshToken&&n.expiresAt&&n.expiresAt<Math.floor(Date.now()/1e3)),z=w(n),B=!!n?.reauthRequired,V=n?.grantExpiresAt?n.grantExpiresAt*1e3:null,H=!!V&&V-Date.now()<5*864e5,U=!!n&&(z.label===`temp`||z.label===`unknown`||z.label===`expired`&&!R&&!B),W=V?new Date(V).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):null,G=!!(r||h||g||_),K=R?`Token expired — sign in again`:B?`Sign in again to use this account`:b??null,q=M===`list`?``:M===`grid`?`flex flex-col justify-evenly overflow-hidden min-h-0`:`shrink-0 snap-start ${G?P.withActions:P.readOnly}`;return(0,E.jsxs)(N,{active:t,flash:v,dense:M!==`list`,className:[q,R||B?`opacity-50`:``].filter(Boolean).join(` `)||void 0,"data-testid":`account-card`,"data-account-id":e.accountId,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`span`,{className:`text-sm font-medium truncate flex-1 min-w-0`,children:e.accountLabel??e.accountId.slice(0,8)}),t&&(0,E.jsx)(k,{className:`text-[10px] text-primary shrink-0 font-medium`,hint:`The next turn will run on this account.`,children:`Active`}),y&&!t&&(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{type:`button`,onClick:()=>y(e.accountId),disabled:x,className:[`shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors cursor-pointer disabled:cursor-wait`,K?`text-text-subtle hover:text-error hover:bg-error/10`:`text-text-secondary hover:text-foreground hover:bg-surface-elevated`].join(` `),children:x?`Switching…`:`Use`})}),(0,E.jsx)(m,{side:`top`,children:K??`Use this account for this chat`})]}),R&&(0,E.jsx)(k,{className:`text-[10px] text-error shrink-0 font-medium`,hint:`This token has expired and carries no refresh token, so nothing can renew it. Add the account again.`,children:`Expired`}),B&&!R&&(0,E.jsx)(k,{className:`text-[10px] text-error shrink-0 font-medium`,hint:`Anthropic rejected this account's refresh token, so no turn can run on it. Signing in again is the only thing that restores it.`,children:`Sign in again`}),!e.isOAuth&&!R&&(0,E.jsx)(k,{className:`text-[10px] text-text-subtle shrink-0`,hint:`A static API key rather than a sign-in: nothing to expire and nothing to renew.`,children:`API key`}),S&&(0,E.jsx)(k,{className:`text-[10px] uppercase tracking-wide text-text-subtle shrink-0`,hint:`The subscription this account is on. It decides which quota windows the account has — some plans have a weekly limit and no shorter one.`,children:S}),(0,E.jsxs)(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[!R&&_&&n?.profileData&&(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-foreground hover:bg-surface-elevated transition-colors`,onClick:()=>_(n.profileData,e.accountId),"aria-label":`View profile`,children:(0,E.jsx)(s,{className:`size-4`})})}),(0,E.jsx)(m,{side:`top`,children:`View profile`})]}),!R&&g&&e.isOAuth&&(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-primary hover:bg-surface-elevated transition-colors`,onClick:()=>g(e.accountId),"aria-label":`Export this account`,children:(0,E.jsx)(c,{className:`size-4`})})}),(0,E.jsx)(m,{side:`top`,children:`Export this account`})]}),!R&&r&&(0,E.jsx)(p,{checked:L!==`disabled`,onCheckedChange:()=>r(e.accountId,L),disabled:u||L===`cooldown`,"aria-label":L===`disabled`?`Enable account`:`Disable account`,className:`cursor-pointer`}),h&&(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-error hover:bg-surface-elevated transition-colors`,onClick:()=>h(e.accountId,e.accountLabel??e.accountId.slice(0,8)),"aria-label":`Remove account`,children:(0,E.jsx)(l,{className:`size-4`})})}),(0,E.jsx)(m,{side:`top`,children:`Remove account`})]})]})]}),I?(0,E.jsxs)(`div`,{className:`space-y-2`,children:[(0,E.jsx)(O,{label:`5-Hour Session`,bucket:F.session}),(0,E.jsx)(O,{label:`Weekly`,bucket:F.weekly}),(0,E.jsx)(O,{label:`Weekly (Opus)`,bucket:F.weeklyOpus}),(0,E.jsx)(O,{label:`Weekly (Sonnet)`,bucket:F.weeklySonnet})]}):(0,E.jsx)(`p`,{className:`text-xs text-text-subtle`,children:e.isOAuth?`No usage data yet`:`Usage tracking not available for API keys`}),D&&(0,E.jsxs)(`div`,{className:`flex min-h-12 items-center justify-between gap-3 rounded-md border px-2.5 py-1.5 ${D.enabled&&D.state.blocked?`border-error/40 bg-error/5`:`border-border/50 bg-surface/40`}`,children:[(0,E.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium ${D.enabled&&D.state.blocked?`text-error`:`text-text-secondary`}`,children:[(0,E.jsx)(`span`,{children:`Daily guard`}),(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{type:`button`,"aria-label":`About Daily guard`,className:`text-text-subtle hover:text-text-primary cursor-help`,children:(0,E.jsx)(a,{className:`size-3.5`})})}),(0,E.jsx)(m,{side:`top`,className:`max-w-64 text-xs leading-relaxed`,children:`Spreads the weekly quota across five weekdays, adding 20% per weekday. Weekend slots keep the previous cap; unused allowance carries forward. Daily slots start at the reset time and use UTC weekdays.`})]})]}),(0,E.jsx)(`p`,{className:`text-[10px] tabular-nums ${D.enabled&&D.state.blocked?`text-error`:`text-text-subtle`}`,children:D.enabled&&D.state.blocked?`${Math.round(D.state.used*100)}% used / ${Math.round(D.state.cap*100)}% daily cap. New turns paused.`:`Weekday ${D.state.day}/5, ${Math.round(D.state.cap*100)}% daily cap`})]}),A&&(0,E.jsx)(p,{checked:D.enabled,onCheckedChange:A,disabled:j,"aria-label":D.enabled?`Disable Daily guard`:`Enable Daily guard`,className:`cursor-pointer shrink-0`})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2 text-[10px] text-text-subtle flex-wrap`,children:[F.lastFetchedAt&&(0,E.jsxs)(k,{className:`inline-flex items-center gap-1`,hint:`Usage last read from Anthropic on ${new Date(F.lastFetchedAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}. The bars above are only as current as this.`,children:[(0,E.jsx)(i,{className:`size-3 shrink-0`,"aria-hidden":!0}),T(new Date(F.lastFetchedAt).getTime())]}),V&&!B&&(0,E.jsxs)(k,{className:[`inline-flex items-center gap-1`,H?`text-warning`:``].filter(Boolean).join(` `),hint:`Sign-in stops working on ${W}. Anthropic ends every sign-in on a fixed schedule from the day it was made, whether or not the account gets used — refreshing does not extend it. After that the account fails until you sign in again.`,children:[(0,E.jsx)(o,{className:`size-3 shrink-0`,"aria-hidden":!0}),`sign-in `,C(V)]}),U&&(0,E.jsxs)(k,{className:z.color,hint:z.tip,children:[`© `,z.label]})]})]})}var I=e(t(),1);function L(e){let t=e.usage;return[t.session?.utilization,t.weekly?.utilization,t.weeklyOpus?.utilization,t.weeklySonnet?.utilization].join(`|`)}function R(e=!0){let[t,n]=(0,I.useState)([]),[r,i]=(0,I.useState)([]),[a,o]=(0,I.useState)(null),[s,c]=(0,I.useState)(!0),[l,u]=(0,I.useState)(!1),[d,f]=(0,I.useState)(new Set),[p,m]=(0,I.useState)(null),y=(0,I.useRef)([]),b=(0,I.useRef)(void 0),x=(0,I.useCallback)(async()=>{let e=y.current.length>0;e?u(!0):c(!0);let[t,r,a]=await Promise.allSettled([_(),h(),g()]);if(t.status===`fulfilled`){let r=t.value;if(e){let e=new Map(y.current.map(e=>[e.accountId,L(e)])),t=new Set(r.filter(t=>e.get(t.accountId)!==L(t)).map(e=>e.accountId));t.size>0&&(f(t),clearTimeout(b.current),b.current=setTimeout(()=>f(new Set),1500))}y.current=r,n(r)}r.status===`fulfilled`&&i(r.value),a.status===`fulfilled`&&o(a.value?.id??null),c(!1),u(!1)},[]),S=(0,I.useCallback)(async(e,t)=>{m(e);let n=null;try{await v(e,{status:t===`disabled`?`active`:`disabled`})}catch(e){n=e.message}return m(null),await x(),n},[x]);return(0,I.useEffect)(()=>(e&&x(),()=>clearTimeout(b.current)),[e,x]),{usages:t,accounts:r,activeAccountId:a,initialLoading:s,refreshing:l,flashIds:d,reload:x,toggle:S,togglingId:p}}function z(e){return e?.trim()?{free:`ChatGPT Free`,go:`ChatGPT Go`,plus:`ChatGPT Plus`,pro:`ChatGPT Pro`,team:`ChatGPT Team`,business:`ChatGPT Business`,self_serve_business_prolite:`ChatGPT Business`,enterprise:`ChatGPT Enterprise`,edu:`ChatGPT Edu`}[e.trim().toLowerCase()]??e:null}var B=1440*60*1e3,V=7,H=5;function U(e,t=Date.now()){if(!e||e.windowHours!==168)return null;let n=new Date(e.resetsAt).getTime();if(!Number.isFinite(t)||!Number.isFinite(n)||n<=t)return null;let r=n-V*B;if(t<r)return null;let i=Math.min(V-1,Math.floor((t-r)/B)),a=0;for(let e=0;e<=i;e++){let t=new Date(r+e*B).getUTCDay();t!==0&&t!==6&&a++}let o=a/H;return{day:a,cap:o,used:e.utilization,blocked:e.utilization>=o}}export{M as a,j as c,T as d,x as f,F as i,O as l,z as n,N as o,R as r,A as s,U as t,D as u};
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import{Br as r,Qn as i,V as a,Xt as o,lt as s,st as c,wr as l}from"./icons-DQjqk0lJ.js";import{t as u}from"./button-B9CTrsEf.js";import{An as d,On as f,Z as p,kn as m}from"./index-CoTvom0K.js";import{getAccounts as h,getActiveAccount as g,getAllAccountUsages as _,patchAccount as v}from"./api-settings-BZFSteM_.js";function y(e){return e>=90?`text-error`:e>=70?`text-warning`:`text-success`}function b(e){return e>=90?`bg-error`:e>=70?`bg-warning`:`bg-success`}function x(e){if(!e)return null;let t=null;if(e.resetsInMinutes!=null)t=e.resetsInMinutes;else if(e.resetsInHours!=null)t=Math.round(e.resetsInHours*60);else if(e.resetsAt){let n=new Date(e.resetsAt).getTime()-Date.now();t=n>0?Math.ceil(n/6e4):0}if(t==null)return null;if(t<=0)return`now`;let n=Math.floor(t/1440),r=Math.floor(t%1440/60),i=t%60;return n>0?i>0?`${n}d ${r}h ${i}m`:r>0?`${n}d ${r}h`:`${n}d`:r>0?i>0?`${r}h ${i}m`:`${r}h`:`${i}m`}function S(e){if(!e)return null;let t=new Date(e).getTime();return Number.isFinite(t)?new Date(t).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):null}function C(e){let t=e-Date.now();if(t<=0)return`expired`;let n=Math.ceil(t/6e4),r=Math.floor(n/60),i=Math.floor(r/24);return i>0?`${i}d ${r%24}h`:r>0?`${r}h ${n%60}m`:`${n}m`}function w(e){if(!e)return{label:`unknown`,tip:`No account info available`,color:`text-text-subtle`};if(!e.expiresAt)return{label:`key`,tip:`API key (no expiry)`,color:`text-text-subtle`};if(e.reauthRequired)return{label:`sign in again`,tip:`Anthropic rejected this account's refresh token. Sign in again to restore it.`,color:`text-error`};let t=e.expiresAt*1e3<Date.now();return t&&e.hasRefreshToken?{label:`expired`,tip:`Token expired but has refresh token — will auto-renew`,color:`text-warning`}:t?{label:`expired`,tip:`Token expired, no refresh token`,color:`text-error`}:e.hasRefreshToken?{label:`long-lived`,tip:`OAuth token with refresh — long-lived`,color:`text-success`}:{label:`temp`,tip:`Temporary token without refresh — will expire`,color:`text-warning`}}function T(e){if(!e)return null;let t=Math.round((Date.now()-e)/1e3);if(t<5)return`just now`;if(t<60)return`${t}s ago`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60),i=n%60;return r<24?i>0?`${r}h ${i}m ago`:`${r}h ago`:`${Math.floor(r/24)}d ago`}var E=n();function D({label:e,pct:t,reset:n,resetsAt:r}){let i=S(r);return(0,E.jsxs)(`div`,{className:`space-y-1`,"data-testid":`account-usage-bar`,children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,E.jsx)(`span`,{className:`text-xs font-medium text-text-primary`,children:e}),n&&(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsxs)(`span`,{className:`text-[10px] text-text-subtle cursor-default`,children:[`↻ `,n]})}),(0,E.jsx)(m,{side:`top`,children:i?`Resets ${i}`:`Resets in`})]})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`div`,{className:`flex-1 h-2 rounded-full bg-border overflow-hidden`,children:t!=null&&(0,E.jsx)(`div`,{className:`h-full rounded-full transition-all ${b(t)}`,style:{width:`${Math.min(t,100)}%`}})}),(0,E.jsx)(`span`,{className:`text-xs font-medium tabular-nums w-10 text-right ${t==null?`text-text-subtle`:y(t)}`,children:t==null?`—`:`${t}%`})]})]})}function O({label:e,bucket:t}){return t?(0,E.jsx)(D,{label:e,pct:Math.round(t.utilization*100),reset:x(t),resetsAt:t.resetsAt}):null}function k({hint:e,className:t,children:n}){return(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{type:`button`,className:[`cursor-help text-left`,t].filter(Boolean).join(` `),children:n})}),(0,E.jsx)(m,{side:`top`,className:`max-w-[260px] text-xs leading-relaxed`,children:e})]})}function A({description:e,onRefresh:t,refreshing:n,disabled:r,actions:a}){return(0,E.jsxs)(`section`,{className:`space-y-2`,children:[(0,E.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e}),(0,E.jsx)(u,{variant:`ghost`,size:`icon`,className:`size-8 shrink-0 cursor-pointer`,onClick:t,disabled:r||n,title:`Refresh`,"aria-label":`Refresh accounts`,children:(0,E.jsx)(i,{className:`size-4 ${n?`animate-spin`:``}`})})]}),(0,E.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:a})]})}function j({message:e,onDismiss:t}){return e?(0,E.jsxs)(`div`,{className:`flex items-start gap-2 text-xs p-2 rounded bg-muted`,role:`status`,children:[(0,E.jsx)(`span`,{className:`flex-1`,children:e}),(0,E.jsx)(`button`,{onClick:t,className:`shrink-0 text-muted-foreground hover:text-foreground cursor-pointer`,"aria-label":`Dismiss message`,children:(0,E.jsx)(r,{className:`size-3.5`})})]}):null}function M({children:e}){return(0,E.jsx)(`div`,{className:`flex gap-2 overflow-x-auto pb-1 -mx-1 px-1 snap-x snap-mandatory scrollbar-thin`,children:e})}function N({active:e,flash:t,dense:n,children:r,...i}){return(0,E.jsx)(`div`,{...i,className:[`rounded-md border transition-colors duration-500`,n?`p-2.5 space-y-1.5`:`p-3 space-y-2`,t?`bg-primary/10 border-primary/40`:``,e?`border-primary/30 bg-primary/5`:`border-border/50`,i.className??``].filter(Boolean).join(` `),children:r})}var P={readOnly:`min-w-[220px]`,withActions:`min-w-[300px]`};function F({entry:e,isActive:t,accountInfo:n,onToggle:r,toggling:u,onDelete:h,onExport:g,onViewProfile:_,flash:v,onSelect:y,unselectableReason:b,selecting:x,planLabel:S,dailyGuard:D,onDailyGuardToggle:A,dailyGuardToggling:j,layout:M=`list`}){let{usage:F}=e,I=F.session||F.weekly||F.weeklyOpus||F.weeklySonnet,L=n?.status??e.accountStatus,R=!!(n&&!n.hasRefreshToken&&n.expiresAt&&n.expiresAt<Math.floor(Date.now()/1e3)),z=w(n),B=!!n?.reauthRequired,V=n?.grantExpiresAt?n.grantExpiresAt*1e3:null,H=!!V&&V-Date.now()<5*864e5,U=!!n&&(z.label===`temp`||z.label===`unknown`||z.label===`expired`&&!R&&!B),W=V?new Date(V).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):null,G=!!(r||h||g||_),K=R?`Token expired — sign in again`:B?`Sign in again to use this account`:b??null,q=M===`list`?``:M===`grid`?`flex flex-col justify-evenly overflow-hidden min-h-0`:`shrink-0 snap-start ${G?P.withActions:P.readOnly}`;return(0,E.jsxs)(N,{active:t,flash:v,dense:M!==`list`,className:[q,R||B?`opacity-50`:``].filter(Boolean).join(` `)||void 0,"data-testid":`account-card`,"data-account-id":e.accountId,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`span`,{className:`text-sm font-medium truncate flex-1 min-w-0`,children:e.accountLabel??e.accountId.slice(0,8)}),t&&(0,E.jsx)(k,{className:`text-[10px] text-primary shrink-0 font-medium`,hint:`The next turn will run on this account.`,children:`Active`}),y&&!t&&(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{type:`button`,onClick:()=>y(e.accountId),disabled:x,className:[`shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors cursor-pointer disabled:cursor-wait`,K?`text-text-subtle hover:text-error hover:bg-error/10`:`text-text-secondary hover:text-foreground hover:bg-surface-elevated`].join(` `),children:x?`Switching…`:`Use`})}),(0,E.jsx)(m,{side:`top`,children:K??`Use this account for this chat`})]}),R&&(0,E.jsx)(k,{className:`text-[10px] text-error shrink-0 font-medium`,hint:`This token has expired and carries no refresh token, so nothing can renew it. Add the account again.`,children:`Expired`}),B&&!R&&(0,E.jsx)(k,{className:`text-[10px] text-error shrink-0 font-medium`,hint:`Anthropic rejected this account's refresh token, so no turn can run on it. Signing in again is the only thing that restores it.`,children:`Sign in again`}),!e.isOAuth&&!R&&(0,E.jsx)(k,{className:`text-[10px] text-text-subtle shrink-0`,hint:`A static API key rather than a sign-in: nothing to expire and nothing to renew.`,children:`API key`}),S&&(0,E.jsx)(k,{className:`text-[10px] uppercase tracking-wide text-text-subtle shrink-0`,hint:`The subscription this account is on. It decides which quota windows the account has — some plans have a weekly limit and no shorter one.`,children:S}),(0,E.jsxs)(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[!R&&_&&n?.profileData&&(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-foreground hover:bg-surface-elevated transition-colors`,onClick:()=>_(n.profileData,e.accountId),"aria-label":`View profile`,children:(0,E.jsx)(s,{className:`size-4`})})}),(0,E.jsx)(m,{side:`top`,children:`View profile`})]}),!R&&g&&e.isOAuth&&(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-primary hover:bg-surface-elevated transition-colors`,onClick:()=>g(e.accountId),"aria-label":`Export this account`,children:(0,E.jsx)(c,{className:`size-4`})})}),(0,E.jsx)(m,{side:`top`,children:`Export this account`})]}),!R&&r&&(0,E.jsx)(p,{checked:L!==`disabled`,onCheckedChange:()=>r(e.accountId,L),disabled:u||L===`cooldown`,"aria-label":L===`disabled`?`Enable account`:`Disable account`,className:`cursor-pointer`}),h&&(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-error hover:bg-surface-elevated transition-colors`,onClick:()=>h(e.accountId,e.accountLabel??e.accountId.slice(0,8)),"aria-label":`Remove account`,children:(0,E.jsx)(l,{className:`size-4`})})}),(0,E.jsx)(m,{side:`top`,children:`Remove account`})]})]})]}),I?(0,E.jsxs)(`div`,{className:`space-y-2`,children:[(0,E.jsx)(O,{label:`5-Hour Session`,bucket:F.session}),(0,E.jsx)(O,{label:`Weekly`,bucket:F.weekly}),(0,E.jsx)(O,{label:`Weekly (Opus)`,bucket:F.weeklyOpus}),(0,E.jsx)(O,{label:`Weekly (Sonnet)`,bucket:F.weeklySonnet})]}):(0,E.jsx)(`p`,{className:`text-xs text-text-subtle`,children:e.isOAuth?`No usage data yet`:`Usage tracking not available for API keys`}),D&&(0,E.jsxs)(`div`,{className:`flex min-h-12 items-center justify-between gap-3 rounded-md border px-2.5 py-1.5 ${D.enabled&&D.state.blocked?`border-error/40 bg-error/5`:`border-border/50 bg-surface/40`}`,children:[(0,E.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium ${D.enabled&&D.state.blocked?`text-error`:`text-text-secondary`}`,children:[(0,E.jsx)(`span`,{children:`Daily guard`}),(0,E.jsxs)(f,{children:[(0,E.jsx)(d,{asChild:!0,children:(0,E.jsx)(`button`,{type:`button`,"aria-label":`About Daily guard`,className:`text-text-subtle hover:text-text-primary cursor-help`,children:(0,E.jsx)(a,{className:`size-3.5`})})}),(0,E.jsx)(m,{side:`top`,className:`max-w-64 text-xs leading-relaxed`,children:`Spreads the weekly quota across five weekdays, adding 20% per weekday. Weekend slots keep the previous cap; unused allowance carries forward. Daily slots start at the reset time and use UTC weekdays.`})]})]}),(0,E.jsx)(`p`,{className:`text-[10px] tabular-nums ${D.enabled&&D.state.blocked?`text-error`:`text-text-subtle`}`,children:D.enabled&&D.state.blocked?`${Math.round(D.state.used*100)}% used / ${Math.round(D.state.cap*100)}% daily cap. New turns paused.`:`Weekday ${D.state.day}/5, ${Math.round(D.state.cap*100)}% daily cap`})]}),A&&(0,E.jsx)(p,{checked:D.enabled,onCheckedChange:A,disabled:j,"aria-label":D.enabled?`Disable Daily guard`:`Enable Daily guard`,className:`cursor-pointer shrink-0`})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2 text-[10px] text-text-subtle flex-wrap`,children:[F.lastFetchedAt&&(0,E.jsxs)(k,{className:`inline-flex items-center gap-1`,hint:`Usage last read from Anthropic on ${new Date(F.lastFetchedAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}. The bars above are only as current as this.`,children:[(0,E.jsx)(i,{className:`size-3 shrink-0`,"aria-hidden":!0}),T(new Date(F.lastFetchedAt).getTime())]}),V&&!B&&(0,E.jsxs)(k,{className:[`inline-flex items-center gap-1`,H?`text-warning`:``].filter(Boolean).join(` `),hint:`Sign-in stops working on ${W}. Anthropic ends every sign-in on a fixed schedule from the day it was made, whether or not the account gets used — refreshing does not extend it. After that the account fails until you sign in again.`,children:[(0,E.jsx)(o,{className:`size-3 shrink-0`,"aria-hidden":!0}),`sign-in `,C(V)]}),U&&(0,E.jsxs)(k,{className:z.color,hint:z.tip,children:[`© `,z.label]})]})]})}var I=e(t(),1);function L(e){let t=e.usage;return[t.session?.utilization,t.weekly?.utilization,t.weeklyOpus?.utilization,t.weeklySonnet?.utilization].join(`|`)}function R(e=!0){let[t,n]=(0,I.useState)([]),[r,i]=(0,I.useState)([]),[a,o]=(0,I.useState)(null),[s,c]=(0,I.useState)(!0),[l,u]=(0,I.useState)(!1),[d,f]=(0,I.useState)(new Set),[p,m]=(0,I.useState)(null),y=(0,I.useRef)([]),b=(0,I.useRef)(void 0),x=(0,I.useCallback)(async()=>{let e=y.current.length>0;e?u(!0):c(!0);let[t,r,a]=await Promise.allSettled([_(),h(),g()]);if(t.status===`fulfilled`){let r=t.value;if(e){let e=new Map(y.current.map(e=>[e.accountId,L(e)])),t=new Set(r.filter(t=>e.get(t.accountId)!==L(t)).map(e=>e.accountId));t.size>0&&(f(t),clearTimeout(b.current),b.current=setTimeout(()=>f(new Set),1500))}y.current=r,n(r)}r.status===`fulfilled`&&i(r.value),a.status===`fulfilled`&&o(a.value?.id??null),c(!1),u(!1)},[]),S=(0,I.useCallback)(async(e,t)=>{m(e);let n=null;try{await v(e,{status:t===`disabled`?`active`:`disabled`})}catch(e){n=e.message}return m(null),await x(),n},[x]);return(0,I.useEffect)(()=>(e&&x(),()=>clearTimeout(b.current)),[e,x]),{usages:t,accounts:r,activeAccountId:a,initialLoading:s,refreshing:l,flashIds:d,reload:x,toggle:S,togglingId:p}}function z(e){return e?.trim()?{free:`ChatGPT Free`,go:`ChatGPT Go`,plus:`ChatGPT Plus`,pro:`ChatGPT Pro`,team:`ChatGPT Team`,business:`ChatGPT Business`,self_serve_business_prolite:`ChatGPT Business`,enterprise:`ChatGPT Enterprise`,edu:`ChatGPT Edu`}[e.trim().toLowerCase()]??e:null}var B=1440*60*1e3,V=7,H=5;function U(e,t=Date.now()){if(!e||e.windowHours!==168)return null;let n=new Date(e.resetsAt).getTime();if(!Number.isFinite(t)||!Number.isFinite(n)||n<=t)return null;let r=n-V*B;if(t<r)return null;let i=Math.min(V-1,Math.floor((t-r)/B)),a=0;for(let e=0;e<=i;e++){let t=new Date(r+e*B).getUTCDay();t!==0&&t!==6&&a++}let o=a/H;return{day:a,cap:o,used:e.utilization,blocked:e.utilization>=o}}export{M as a,j as c,T as d,x as f,F as i,O as l,z as n,N as o,R as r,A as s,U as t,D as u};
@@ -1,4 +1,4 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{ln as r}from"./icons-DQjqk0lJ.js";import{i,n as a}from"./api-client-Jn3njtNw.js";import{t as o}from"./settings-store-tWrnlyEW.js";import"./vendor-mermaid-D6lgjvVE.js";import{n as s}from"./use-is-mobile-TkcwP1Gx.js";import{Ht as c,in as l,u}from"./index-BnH1J2Pm.js";import{t as d}from"./use-monaco-theme-DFaNmksV.js";import"./editor-font-D_4aaSCa.js";import{n as f,r as p}from"./monaco-dotenv-language-DD8_UQG7.js";var m=e(t(),1),h=n();function g(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`,go:`go`,rs:`rust`,java:`java`,rb:`ruby`,php:`php`,swift:`swift`,sql:`sql`,xml:`xml`,toml:`toml`}[e.split(`.`).pop()?.toLowerCase()??``]??(f(e)?`dotenv`:`plaintext`)}function _(e){let t=e.split(`
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{ln as r}from"./icons-DQjqk0lJ.js";import{i,n as a}from"./api-client-Jn3njtNw.js";import{t as o}from"./settings-store-tWrnlyEW.js";import"./vendor-mermaid-D6lgjvVE.js";import{n as s}from"./use-is-mobile-TkcwP1Gx.js";import{Ht as c,in as l,u}from"./index-CoTvom0K.js";import{t as d}from"./use-monaco-theme-DvWcXiCH.js";import"./editor-font-D_4aaSCa.js";import{n as f,r as p}from"./monaco-dotenv-language-DD8_UQG7.js";var m=e(t(),1),h=n();function g(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`,go:`go`,rs:`rust`,java:`java`,rb:`ruby`,php:`php`,swift:`swift`,sql:`sql`,xml:`xml`,toml:`toml`}[e.split(`.`).pop()?.toLowerCase()??``]??(f(e)?`dotenv`:`plaintext`)}function _(e){let t=e.split(`
2
2
  `),n=[],r=0,i=0;for(;r<t.length;){let e=t[r];if(e.startsWith(`<<<<<<<`)){let a=r,o=e.substring(7).trim(),s=[];for(r++;r<t.length&&!t[r].startsWith(`=======`);)s.push(t[r]),r++;if(r>=t.length)break;let c=r,l=[];for(r++;r<t.length&&!t[r].startsWith(`>>>>>>>`);)l.push(t[r]),r++;if(r>=t.length)break;let u=t[r].substring(7).trim();n.push({id:i++,startLine:a+1,separatorLine:c+1,endLine:r+1,currentContent:s.join(`
3
3
  `),incomingContent:l.join(`
4
4
  `),currentLabel:o,incomingLabel:u})}r++}return n}function v({metadata:e}){let t=e?.filePath,n=e?.projectName,[f,v]=(0,m.useState)(null),[b,x]=(0,m.useState)(!0),[S,C]=(0,m.useState)(null),[w,T]=(0,m.useState)(0),E=(0,m.useRef)(null),D=(0,m.useRef)(null),O=(0,m.useRef)([]),k=(0,m.useRef)(null),{wordWrap:A,mobileWordWrap:j}=o(c(e=>({wordWrap:e.wordWrap,mobileWordWrap:e.mobileWordWrap}))),M=s()?j:A,N=d(),P=(0,m.useRef)(null),[F,I]=(0,m.useState)();(0,m.useEffect)(()=>{let e=P.current;if(!e)return;let t=new ResizeObserver(([e])=>{e&&I(Math.floor(e.contentRect.height))});return t.observe(e),()=>t.disconnect()},[]),(0,m.useEffect)(()=>l(P.current,()=>E.current?.layout()),[b,S]),(0,m.useEffect)(()=>{!t||!n||(x(!0),a.get(`${i(n)}/files/read?path=${encodeURIComponent(t)}`).then(e=>{v(e.content),x(!1)}).catch(e=>{C(e.message||`Failed to load file`),x(!1)}))},[t,n]);let L=(0,m.useCallback)(()=>{let e=E.current,t=D.current;if(!e||!t)return;let n=_(e.getModel()?.getValue()||``);T(n.length);for(let t of O.current)e.removeContentWidget(t);if(O.current=[],k.current&&k.current.clear(),n.length===0)return;let r=[];for(let e of n)r.push({range:new t.Range(e.startLine,1,e.startLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`,glyphMarginClassName:`conflict-glyph-current`}}),r.push({range:new t.Range(e.separatorLine,1,e.separatorLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`}}),r.push({range:new t.Range(e.endLine,1,e.endLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`,glyphMarginClassName:`conflict-glyph-incoming`}}),e.separatorLine-e.startLine>1&&r.push({range:new t.Range(e.startLine+1,1,e.separatorLine-1,1),options:{isWholeLine:!0,className:`conflict-current-content`}}),e.endLine-e.separatorLine>1&&r.push({range:new t.Range(e.separatorLine+1,1,e.endLine-1,1),options:{isWholeLine:!0,className:`conflict-incoming-content`}});k.current=e.createDecorationsCollection(r);for(let r of n){let n=`conflict-widget-${r.id}`,i=document.createElement(`div`);i.className=`conflict-actions`,i.innerHTML=`<span class="conflict-label">Current Change (${y(r.currentLabel||`HEAD`)})</span><button class="conflict-btn conflict-btn-current" data-action="current">Accept Current</button><button class="conflict-btn conflict-btn-incoming" data-action="incoming">Accept Incoming</button><button class="conflict-btn conflict-btn-both" data-action="both">Accept Both</button>`,i.addEventListener(`click`,e=>{let t=e.target.closest(`[data-action]`);if(!t)return;let n=t.getAttribute(`data-action`);R(r.id,n)});let a={getId:()=>n,getDomNode:()=>i,getPosition:()=>({position:{lineNumber:r.startLine,column:1},preference:[t.editor.ContentWidgetPositionPreference.ABOVE]})};e.addContentWidget(a),O.current.push(a)}},[]),R=(0,m.useCallback)((e,t)=>{let n=E.current,r=D.current;if(!n||!r)return;let i=n.getModel();if(!i)return;let a=_(i.getValue()).find(t=>t.id===e);if(!a)return;let o;switch(t){case`current`:o=a.currentContent;break;case`incoming`:o=a.incomingContent;break;case`both`:o=a.currentContent+`
@@ -1,2 +1,2 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{a as r,d as i}from"./icons-DQjqk0lJ.js";import{Vt as a}from"./index-BnH1J2Pm.js";import{n as o,t as s}from"./csv-parser-DZ_75eCb.js";import{i as c,n as l,r as u,t as d}from"./lib-BWyA9SvU.js";var f=e(t(),1),p=n();function m({content:e,onContentChange:t,wordWrap:n}){let m=(0,f.useMemo)(()=>s(e),[e]),[g,_]=(0,f.useState)(()=>m.rows),[v,y]=(0,f.useState)([]),b=(0,f.useRef)(null),x=(0,f.useRef)(!1);(0,f.useEffect)(()=>{if(x.current){x.current=!1;return}_(m.rows)},[m.rows]);let S=m.headers,C=(0,f.useCallback)((e,n,r)=>{_(i=>{let a=i.map((t,n)=>n===e?[...t]:t);return a[e][n]=r,x.current=!0,t(o(S,a)),a})},[S,t]),w=l({data:g,columns:(0,f.useMemo)(()=>S.map((e,t)=>({id:`col-${t}`,header:e||`Column ${t+1}`,accessorFn:e=>e[t]??``,cell:({row:e,getValue:r})=>(0,p.jsx)(h,{value:r(),onSave:n=>C(e.index,t,n),wordWrap:n}),size:150,minSize:80})),[S,C,n]),state:{sorting:v},onSortingChange:y,getCoreRowModel:u(),getSortedRowModel:c(),enableColumnResizing:!0,columnResizeMode:`onChange`}),{rows:T}=w.getRowModel(),E=a({count:T.length,getScrollElement:()=>b.current,estimateSize:()=>32,overscan:20});return S.length===0?(0,p.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`Empty CSV file`}):(0,p.jsx)(`div`,{ref:b,className:`flex-1 overflow-auto`,children:(0,p.jsxs)(`table`,{className:`w-full text-xs font-mono border-collapse`,children:[(0,p.jsx)(`thead`,{className:`sticky top-0 bg-background z-10 border-b border-border block`,children:w.getHeaderGroups().map(e=>(0,p.jsx)(`tr`,{className:`flex w-full`,children:e.headers.map(e=>(0,p.jsxs)(`th`,{className:`relative text-left px-2 py-1.5 font-medium text-muted-foreground select-none cursor-pointer hover:bg-muted/50 border-r border-border last:border-r-0`,style:{width:e.getSize(),minWidth:e.getSize()},onClick:e.column.getToggleSortingHandler(),children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,p.jsx)(`span`,{className:`truncate`,children:d(e.column.columnDef.header,e.getContext())}),e.column.getIsSorted()===`asc`&&(0,p.jsx)(i,{className:`size-3 shrink-0`}),e.column.getIsSorted()===`desc`&&(0,p.jsx)(r,{className:`size-3 shrink-0`})]}),(0,p.jsx)(`div`,{onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),onClick:e=>e.stopPropagation(),className:`absolute right-0 top-0 h-full w-1 cursor-col-resize hover:bg-primary/50 active:bg-primary`})]},e.id))},e.id))}),(0,p.jsx)(`tbody`,{style:{height:E.getTotalSize(),position:`relative`,display:`block`},children:E.getVirtualItems().map(e=>{let t=T[e.index];return(0,p.jsx)(`tr`,{"data-index":e.index,ref:e=>E.measureElement(e),style:{position:`absolute`,top:0,left:0,width:`100%`,transform:`translateY(${e.start}px)`,display:`flex`},children:t.getVisibleCells().map(e=>(0,p.jsx)(`td`,{className:`px-2 py-1 border-b border-border/50 border-r border-r-border/30 last:border-r-0 ${n?`whitespace-pre-wrap break-words`:`truncate`}`,style:{width:e.column.getSize(),minWidth:e.column.getSize()},children:d(e.column.columnDef.cell,e.getContext())},e.id))},t.id)})})]})})}function h({value:e,onSave:t,wordWrap:n}){let[r,i]=(0,f.useState)(!1),[a,o]=(0,f.useState)(e),s=(0,f.useRef)(null),c=(0,f.useCallback)(e=>{e&&(e.style.height=`auto`,e.style.height=`${e.scrollHeight}px`)},[]);return(0,f.useEffect)(()=>{r&&s.current&&(s.current.focus(),c(s.current))},[r,c]),r?(0,p.jsx)(`textarea`,{ref:s,className:`w-full bg-transparent outline-none border border-primary/50 rounded text-xs font-mono resize-none p-0.5`,style:{minHeight:a.includes(`
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{a as r,d as i}from"./icons-DQjqk0lJ.js";import{Vt as a}from"./index-CoTvom0K.js";import{n as o,t as s}from"./csv-parser-DZ_75eCb.js";import{i as c,n as l,r as u,t as d}from"./lib-BWyA9SvU.js";var f=e(t(),1),p=n();function m({content:e,onContentChange:t,wordWrap:n}){let m=(0,f.useMemo)(()=>s(e),[e]),[g,_]=(0,f.useState)(()=>m.rows),[v,y]=(0,f.useState)([]),b=(0,f.useRef)(null),x=(0,f.useRef)(!1);(0,f.useEffect)(()=>{if(x.current){x.current=!1;return}_(m.rows)},[m.rows]);let S=m.headers,C=(0,f.useCallback)((e,n,r)=>{_(i=>{let a=i.map((t,n)=>n===e?[...t]:t);return a[e][n]=r,x.current=!0,t(o(S,a)),a})},[S,t]),w=l({data:g,columns:(0,f.useMemo)(()=>S.map((e,t)=>({id:`col-${t}`,header:e||`Column ${t+1}`,accessorFn:e=>e[t]??``,cell:({row:e,getValue:r})=>(0,p.jsx)(h,{value:r(),onSave:n=>C(e.index,t,n),wordWrap:n}),size:150,minSize:80})),[S,C,n]),state:{sorting:v},onSortingChange:y,getCoreRowModel:u(),getSortedRowModel:c(),enableColumnResizing:!0,columnResizeMode:`onChange`}),{rows:T}=w.getRowModel(),E=a({count:T.length,getScrollElement:()=>b.current,estimateSize:()=>32,overscan:20});return S.length===0?(0,p.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`Empty CSV file`}):(0,p.jsx)(`div`,{ref:b,className:`flex-1 overflow-auto`,children:(0,p.jsxs)(`table`,{className:`w-full text-xs font-mono border-collapse`,children:[(0,p.jsx)(`thead`,{className:`sticky top-0 bg-background z-10 border-b border-border block`,children:w.getHeaderGroups().map(e=>(0,p.jsx)(`tr`,{className:`flex w-full`,children:e.headers.map(e=>(0,p.jsxs)(`th`,{className:`relative text-left px-2 py-1.5 font-medium text-muted-foreground select-none cursor-pointer hover:bg-muted/50 border-r border-border last:border-r-0`,style:{width:e.getSize(),minWidth:e.getSize()},onClick:e.column.getToggleSortingHandler(),children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,p.jsx)(`span`,{className:`truncate`,children:d(e.column.columnDef.header,e.getContext())}),e.column.getIsSorted()===`asc`&&(0,p.jsx)(i,{className:`size-3 shrink-0`}),e.column.getIsSorted()===`desc`&&(0,p.jsx)(r,{className:`size-3 shrink-0`})]}),(0,p.jsx)(`div`,{onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),onClick:e=>e.stopPropagation(),className:`absolute right-0 top-0 h-full w-1 cursor-col-resize hover:bg-primary/50 active:bg-primary`})]},e.id))},e.id))}),(0,p.jsx)(`tbody`,{style:{height:E.getTotalSize(),position:`relative`,display:`block`},children:E.getVirtualItems().map(e=>{let t=T[e.index];return(0,p.jsx)(`tr`,{"data-index":e.index,ref:e=>E.measureElement(e),style:{position:`absolute`,top:0,left:0,width:`100%`,transform:`translateY(${e.start}px)`,display:`flex`},children:t.getVisibleCells().map(e=>(0,p.jsx)(`td`,{className:`px-2 py-1 border-b border-border/50 border-r border-r-border/30 last:border-r-0 ${n?`whitespace-pre-wrap break-words`:`truncate`}`,style:{width:e.column.getSize(),minWidth:e.column.getSize()},children:d(e.column.columnDef.cell,e.getContext())},e.id))},t.id)})})]})})}function h({value:e,onSave:t,wordWrap:n}){let[r,i]=(0,f.useState)(!1),[a,o]=(0,f.useState)(e),s=(0,f.useRef)(null),c=(0,f.useCallback)(e=>{e&&(e.style.height=`auto`,e.style.height=`${e.scrollHeight}px`)},[]);return(0,f.useEffect)(()=>{r&&s.current&&(s.current.focus(),c(s.current))},[r,c]),r?(0,p.jsx)(`textarea`,{ref:s,className:`w-full bg-transparent outline-none border border-primary/50 rounded text-xs font-mono resize-none p-0.5`,style:{minHeight:a.includes(`
2
2
  `)?48:20},rows:1,value:a,onChange:e=>{o(e.target.value),c(e.target)},onBlur:()=>{i(!1),a!==e&&t(a)},onKeyDown:n=>{n.key===`Enter`&&!n.shiftKey?(n.preventDefault(),i(!1),a!==e&&t(a)):n.key===`Escape`&&(i(!1),o(e))}}):(0,p.jsx)(`span`,{className:`block cursor-text ${n?`whitespace-pre-wrap break-words`:`truncate`}`,onClick:()=>{o(e),i(!0)},children:e||`\xA0`})}export{m as CsvPreview};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{It as r,Qn as i,at as a,dr as o,ln as s,ur as c}from"./icons-DQjqk0lJ.js";import{n as l,s as u}from"./api-client-Jn3njtNw.js";import"./settings-store-tWrnlyEW.js";import"./vendor-mermaid-D6lgjvVE.js";import"./panel-store-D20Zuf3i.js";import"./window-store-UC1jJeLM.js";import{t as d}from"./tab-store-krAuHQ6_.js";import{Q as f}from"./index-BnH1J2Pm.js";import"./data-grid-types-C6UX8kgh.js";import"./use-monaco-theme-DFaNmksV.js";import{n as p,t as m}from"./glide-data-grid-DvojIuqH.js";import{t as h}from"./sql-query-editor-BgLCJabc.js";var g=e(t(),1);function _(e,t,n,r){return`ppm-db-${e}-${n}.${t}-p${r}`}function v(e,t,n,r){try{let i=sessionStorage.getItem(_(e,t,n,r));return i?JSON.parse(i):null}catch{return null}}function y(e,t,n,r,i,a){try{sessionStorage.setItem(_(e,t,n,r),JSON.stringify({data:i,cols:a}))}catch{}}function b(e){let t=`/api/db/connections/${e}`,[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(`public`),[o,s]=(0,g.useState)(null),[c,d]=(0,g.useState)([]),[f,p]=(0,g.useState)(!1),[m,h]=(0,g.useState)(null),[_,b]=(0,g.useState)(1),[x,S]=(0,g.useState)(null),[C,w]=(0,g.useState)(null),[T,E]=(0,g.useState)(!1),[D,O]=(0,g.useState)(null),[k,A]=(0,g.useState)(`ASC`),j=(0,g.useRef)(null),M=(0,g.useCallback)(async(r,a,o,c,u)=>{let f=r??n,m=a??i;if(!f)return;j.current=null,p(!0);let g=c===void 0?D:c,v=u??k;try{let n=g?`&orderBy=${encodeURIComponent(g)}&orderDir=${v}`:``,[r,i]=await Promise.all([l.get(`${t}/data?table=${encodeURIComponent(f)}&schema=${m}&page=${o??_}&limit=100${n}`),l.get(`${t}/schema?table=${encodeURIComponent(f)}&schema=${m}`)]);s(r),d(i),y(e,f,m,o??_,r,i)}catch(e){h(e.message)}finally{p(!1)}},[t,e,n,i,_,D,k]),N=(0,g.useCallback)((t,n=`public`)=>{r(t),a(n),b(1),S(null);let i=v(e,t,n,1);i?(s(i.data),d(i.cols),p(!1),M(t,n,1)):M(t,n,1)},[e,M]),P=(0,g.useCallback)(e=>{b(e),M(void 0,void 0,e)},[M]),F=(0,g.useCallback)(async e=>{j.current={sql:e,mode:`table`},p(!0);try{let n=await l.post(`${t}/query`,{sql:e,source:`filter`});n.changeType===`select`&&s({columns:n.columns,rows:n.rows,total:n.rows.length,page:1,limit:n.rows.length})}catch(e){h(e.message)}finally{p(!1)}},[t]),I=(0,g.useCallback)(async e=>{E(!0),w(null);try{let r=await l.post(`${t}/query`,{sql:e});S(r),r.changeType===`modify`?(j.current=null,M(n??void 0,i)):j.current={sql:e,mode:`query`}}catch(e){w(e.message)}finally{E(!1)}},[t,n,i,M]),L=(0,g.useCallback)((e,t)=>{let n=j.current;if(n?.mode===`table`){F(n.sql);return}M(e,t)},[F,M]),R=(0,g.useCallback)((e,t)=>{let n=t.message;h(n),u.error(`${e} failed`,{description:n})},[]),z=(0,g.useCallback)(async(e,r,a,o)=>{if(!n)return;let s=n,c=i;try{await l.put(`${t}/cell`,{table:s,schema:c,pkColumn:e,pkValue:r,column:a,value:o}),L(s,c)}catch(e){R(`Update cell`,e)}},[t,n,i,L,R]),B=(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.del(`${t}/row`,{table:a,schema:o,pkColumn:e,pkValue:r}),L(a,o)}catch(e){R(`Delete row`,e)}},[t,n,i,L,R]),V=(0,g.useCallback)(e=>{let t,n=`ASC`;D===e?k===`ASC`?(t=e,n=`DESC`):(t=null,n=`ASC`):(t=e,n=`ASC`),O(t),A(n),b(1),M(void 0,void 0,1,t,n)},[D,k,M]),H=(0,g.useCallback)(()=>{O(null),A(`ASC`),b(1),M(void 0,void 0,1,null,`ASC`)},[M]),U=(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.post(`${t}/rows/delete`,{table:a,schema:o,pkColumn:e,pkValues:r}),L(a,o)}catch(e){R(`Delete rows`,e)}},[t,n,i,L,R]),W=(0,g.useCallback)(async e=>{if(!n)return;let r=n,a=i;try{await l.post(`${t}/row`,{table:r,schema:a,values:e}),L(r,a)}catch(e){throw R(`Insert row`,e),e}},[t,n,i,L,R]),G=(0,g.useCallback)(()=>{let e=j.current;if(e?.mode===`query`){I(e.sql);return}if(e?.mode===`table`){F(e.sql);return}M()},[I,F,M]);return{selectedTable:n,selectedSchema:i,selectTable:N,tableData:o,schema:c,loading:f,error:m,page:_,setPage:P,orderBy:D,orderDir:k,toggleSort:V,clearSort:H,queryResult:x,queryError:C,queryLoading:T,executeQuery:I,updateCell:z,updateCellIn:(0,g.useCallback)(async(e,n,r,i,a,o)=>{try{await l.put(`${t}/cell`,{table:e,schema:n,pkColumn:r,pkValue:i,column:a,value:o}),G()}catch(e){R(`Update cell`,e)}},[t,G,R]),deleteRow:B,bulkDelete:U,insertRow:W,refreshData:M,queryAsTable:F,reload:G}}function x(e,t){let n=e.replace(/--[^\r\n]*/g,` `).replace(/\/\*[\s\S]*?\*\//g,` `).trim().replace(/;\s*$/,``);if(!/^select\s/i.test(n)||/\b(join|union|intersect|except|group\s+by|distinct)\b/i.test(n)||(n.match(/\bfrom\b/gi)??[]).length!==1)return null;let r=/\bfrom\s+(?:"([^"]+)"|(\w+))\s*(?:\.\s*(?:"([^"]+)"|(\w+)))?/i.exec(n);if(!r)return null;let i=r[1]??r[2],a=r[3]??r[4];return a?{schema:i,table:a}:{table:i,schema:t}}var S=n();function C(e){let t={},n=/"(\w+)"\s+ILIKE\s+'%([^']*?)%'/gi,r;for(;(r=n.exec(e))!==null;)t[r[1]]=r[2].replace(/''/g,`'`);return t}function w({metadata:e,tabId:t}){let n=e?.connectionId,u=e?.connectionName,_=e?.tableName,v=e?.schemaName??`public`,y=e?.initialSql,w=e?.currentSql,T=d(e=>e.updateTab),D=(0,g.useRef)(e);D.current=e;let O=(0,g.useCallback)(e=>{t&&T(t,{metadata:{...D.current,currentSql:e}})},[t,T]),k=b(n),{connections:A,updateConnection:j}=f(),M=(0,g.useMemo)(()=>A.find(e=>e.id===n),[A,n]),[N,P]=(0,g.useState)([]),[F,I]=(0,g.useState)(180),L=(0,g.useRef)(null),[R,z]=(0,g.useState)({}),B=(0,g.useMemo)(()=>{if(y&&!k.selectedTable)return y;if(k.selectedTable){let e=`SELECT * FROM "${k.selectedTable}"`,t=Object.entries(R).filter(([,e])=>e.trim()).map(([e,t])=>`"${e}" ILIKE '%${t.replace(/'/g,`''`)}%'`);t.length>0&&(e+=` WHERE ${t.join(` AND `)}`),k.orderBy&&(e+=` ORDER BY "${k.orderBy}" ${k.orderDir}`);let n=(k.page-1)*100;return e+=` LIMIT 100`,n>0&&(e+=` OFFSET ${n}`),e}return`SELECT * FROM `},[y,k.selectedTable,k.orderBy,k.orderDir,k.page,R]),V=(0,g.useCallback)(e=>{z(e)},[]),H=(0,g.useRef)(void 0),U=(0,g.useRef)(!1);(0,g.useEffect)(()=>{if(!k.selectedTable)return;let e=Object.values(R).some(e=>e.trim());if(!(!e&&!U.current))return U.current=e,clearTimeout(H.current),H.current=setTimeout(()=>{e?k.queryAsTable(B):k.refreshData()},500),()=>clearTimeout(H.current)},[R]);let W=(0,g.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=F,r=e=>{let r=e.clientY-t;I(Math.max(80,Math.min(n+r,(L.current?.clientHeight??600)-100)))},i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[F]);(0,g.useEffect)(()=>{l.get(`/api/db/connections/${n}/tables?cached=1`).then(e=>P(e.map(e=>({name:e.name,schema:e.schema})))).catch(()=>{})},[n]);let G=(0,g.useMemo)(()=>{if(N.length!==0)return{tables:N,getColumns:async(e,t)=>await l.get(`/api/db/connections/${n}/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`)}},[n,N]),K=(0,g.useRef)(!1);(0,g.useEffect)(()=>{K.current||(K.current=!0,y?k.executeQuery(y):_&&k.selectTable(_,v))},[_,v,y]);let[q,J]=(0,g.useState)(!!y),[Y,ee]=(0,g.useState)(y??null),te=(0,g.useCallback)(e=>{let t=e.trim();if(k.selectedTable&&RegExp(`^SELECT\\s+\\*\\s+FROM\\s+"?${k.selectedTable.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}"?\\b`,`i`).test(t)){z(C(t)),k.queryAsTable(t);return}J(!0),ee(t),k.executeQuery(e)},[k.executeQuery,k.queryAsTable,k.selectedTable]),ne=(0,g.useCallback)(e=>{J(!1),k.toggleSort(e)},[k.toggleSort]),re=(0,g.useCallback)(()=>{J(!1),k.clearSort()},[k.clearSort]),ie=(0,g.useCallback)(e=>{J(!1),k.setPage(e)},[k.setPage]),X=(0,g.useMemo)(()=>M&&!M.readonly&&Y?x(Y,k.selectedSchema):null,[M,Y,k.selectedSchema]),ae=(0,g.useCallback)((e,t,n,r)=>{X&&k.updateCellIn(X.table,X.schema,e,t,n,r)},[X,k.updateCellIn]),Z=k.queryResult,Q=q&&!!(Z||k.queryError),$=k.selectedTable&&!Q,oe=!($&&k.tableData)&&!Q&&(k.loading||k.queryLoading);return(0,S.jsx)(`div`,{ref:L,className:`flex h-full w-full overflow-hidden`,children:(0,S.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border bg-background shrink-0`,children:[(0,S.jsx)(a,{className:`size-3.5 text-muted-foreground`}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground truncate`,children:u??`Database`}),k.selectedTable&&(0,S.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`/ `,k.selectedTable]}),(0,S.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[k.tableData&&(0,S.jsx)(p,{columns:k.tableData.columns,rows:k.tableData.rows,filename:u?`${u}-${k.selectedTable??`data`}`:k.selectedTable??`data`,exportAllUrl:k.selectedTable?`/api/db/connections/${n}/export?table=${encodeURIComponent(k.selectedTable)}&schema=${k.selectedSchema}`:void 0}),M&&(0,S.jsx)(`button`,{type:`button`,onClick:()=>j(M.id,{readonly:M.readonly?0:1}),className:`flex items-center gap-0.5 px-1 py-0.5 rounded text-[10px] transition-colors ${M.readonly?`text-muted-foreground hover:text-foreground`:`bg-destructive/15 text-destructive`}`,title:M.readonly?`Readonly — click to allow writes`:`WRITE mode — click to enable readonly`,children:M.readonly?(0,S.jsx)(c,{className:`size-3`}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(o,{className:`size-3`}),(0,S.jsx)(`span`,{className:`font-medium`,children:`WRITE`})]})}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>k.reload(),title:`Reload data`,className:`p-1 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,S.jsx)(i,{className:`size-3 ${k.loading||k.queryLoading?`animate-spin`:``}`})})]})]}),(0,S.jsx)(`div`,{className:`shrink-0 border-b border-border`,style:{height:F},children:(0,S.jsx)(h,{onExecute:te,loading:k.queryLoading,defaultValue:B,schemaInfo:G,onSqlChange:O,persistedSql:w})}),(0,S.jsx)(`div`,{onMouseDown:W,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,S.jsx)(r,{className:`size-3 text-muted-foreground/50`})}),(0,S.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[$&&k.tableData&&(0,S.jsx)(m,{columns:k.tableData.columns,rows:k.tableData.rows,total:k.tableData.total,limit:k.tableData.limit,schema:k.schema,loading:k.loading,page:k.page,onPageChange:ie,onCellUpdate:k.updateCell,onRowDelete:k.deleteRow,orderBy:k.orderBy,orderDir:k.orderDir,onToggleSort:ne,onClearSort:re,onBulkDelete:k.bulkDelete,onInsertRow:k.insertRow,connectionId:n,selectedTable:k.selectedTable,selectedSchema:k.selectedSchema,connectionName:u,columnFilters:R,onColumnFilter:V}),Q&&(0,S.jsx)(E,{result:Z,error:k.queryError,loading:k.queryLoading,schema:k.schema,connectionName:u,onCellUpdate:X?ae:void 0}),oe&&(0,S.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:(0,S.jsx)(s,{className:`size-4 animate-spin`})})]})]})})}var T=()=>{};function E({result:e,error:t,loading:n,schema:r,connectionName:i,onCellUpdate:a}){let o=(0,g.useMemo)(()=>e?.changeType===`select`&&e.rows.length>0?{columns:e.columns,rows:e.rows,total:e.rows.length,limit:e.rows.length}:null,[e]),c=(0,g.useMemo)(()=>{let t=e?.columns??[],n=new Set((r??[]).map(e=>e.name));return r?.length&&t.every(e=>n.has(e))?r:t.map(e=>({name:e,type:`text`,nullable:!0,pk:!1,defaultValue:null}))},[r,e?.columns]);return(0,S.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden text-xs`,children:[t&&(0,S.jsx)(`div`,{className:`px-3 py-2 text-destructive bg-destructive/5 shrink-0`,children:t}),e?.changeType===`modify`&&(0,S.jsxs)(`div`,{className:`px-3 py-2 text-success shrink-0`,children:[e.rowsAffected,` row(s) affected`,e.executionTimeMs!=null&&(0,S.jsxs)(`span`,{className:`text-muted-foreground ml-2`,children:[e.executionTimeMs,`ms`]})]}),o&&(0,S.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[(0,S.jsx)(m,{columns:o.columns,rows:o.rows,total:o.total,limit:o.limit,schema:c,loading:!!n,page:1,onPageChange:T,onCellUpdate:a??T,readOnly:!a,orderBy:null,orderDir:`ASC`,onToggleSort:T,connectionName:i}),e?.executionTimeMs!=null&&(0,S.jsxs)(`div`,{className:`px-3 py-0.5 border-t border-border text-[10px] text-muted-foreground shrink-0`,children:[e.rows.length,` rows · `,e.executionTimeMs,`ms`]})]}),e?.changeType===`select`&&e.rows.length===0&&(0,S.jsxs)(`div`,{className:`px-3 py-2 text-muted-foreground shrink-0`,children:[`No results`,e.executionTimeMs!=null&&(0,S.jsxs)(`span`,{className:`ml-2 text-muted-foreground/60`,children:[e.executionTimeMs,`ms`]})]}),!e&&!t&&(0,S.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:n?(0,S.jsx)(s,{className:`size-4 animate-spin`}):`Run a query to see results`})]})}export{w as DatabaseViewer};
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{It as r,Qn as i,at as a,dr as o,ln as s,ur as c}from"./icons-DQjqk0lJ.js";import{n as l,s as u}from"./api-client-Jn3njtNw.js";import"./settings-store-tWrnlyEW.js";import"./vendor-mermaid-D6lgjvVE.js";import"./panel-store-D20Zuf3i.js";import"./window-store-UC1jJeLM.js";import{t as d}from"./tab-store-krAuHQ6_.js";import{Q as f}from"./index-CoTvom0K.js";import"./data-grid-types-C6UX8kgh.js";import"./use-monaco-theme-DvWcXiCH.js";import{n as p,t as m}from"./glide-data-grid-usB_4gTg.js";import{t as h}from"./sql-query-editor-4Okd-7ss.js";var g=e(t(),1);function _(e,t,n,r){return`ppm-db-${e}-${n}.${t}-p${r}`}function v(e,t,n,r){try{let i=sessionStorage.getItem(_(e,t,n,r));return i?JSON.parse(i):null}catch{return null}}function y(e,t,n,r,i,a){try{sessionStorage.setItem(_(e,t,n,r),JSON.stringify({data:i,cols:a}))}catch{}}function b(e){let t=`/api/db/connections/${e}`,[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(`public`),[o,s]=(0,g.useState)(null),[c,d]=(0,g.useState)([]),[f,p]=(0,g.useState)(!1),[m,h]=(0,g.useState)(null),[_,b]=(0,g.useState)(1),[x,S]=(0,g.useState)(null),[C,w]=(0,g.useState)(null),[T,E]=(0,g.useState)(!1),[D,O]=(0,g.useState)(null),[k,A]=(0,g.useState)(`ASC`),j=(0,g.useRef)(null),M=(0,g.useCallback)(async(r,a,o,c,u)=>{let f=r??n,m=a??i;if(!f)return;j.current=null,p(!0);let g=c===void 0?D:c,v=u??k;try{let n=g?`&orderBy=${encodeURIComponent(g)}&orderDir=${v}`:``,[r,i]=await Promise.all([l.get(`${t}/data?table=${encodeURIComponent(f)}&schema=${m}&page=${o??_}&limit=100${n}`),l.get(`${t}/schema?table=${encodeURIComponent(f)}&schema=${m}`)]);s(r),d(i),y(e,f,m,o??_,r,i)}catch(e){h(e.message)}finally{p(!1)}},[t,e,n,i,_,D,k]),N=(0,g.useCallback)((t,n=`public`)=>{r(t),a(n),b(1),S(null);let i=v(e,t,n,1);i?(s(i.data),d(i.cols),p(!1),M(t,n,1)):M(t,n,1)},[e,M]),P=(0,g.useCallback)(e=>{b(e),M(void 0,void 0,e)},[M]),F=(0,g.useCallback)(async e=>{j.current={sql:e,mode:`table`},p(!0);try{let n=await l.post(`${t}/query`,{sql:e,source:`filter`});n.changeType===`select`&&s({columns:n.columns,rows:n.rows,total:n.rows.length,page:1,limit:n.rows.length})}catch(e){h(e.message)}finally{p(!1)}},[t]),I=(0,g.useCallback)(async e=>{E(!0),w(null);try{let r=await l.post(`${t}/query`,{sql:e});S(r),r.changeType===`modify`?(j.current=null,M(n??void 0,i)):j.current={sql:e,mode:`query`}}catch(e){w(e.message)}finally{E(!1)}},[t,n,i,M]),L=(0,g.useCallback)((e,t)=>{let n=j.current;if(n?.mode===`table`){F(n.sql);return}M(e,t)},[F,M]),R=(0,g.useCallback)((e,t)=>{let n=t.message;h(n),u.error(`${e} failed`,{description:n})},[]),z=(0,g.useCallback)(async(e,r,a,o)=>{if(!n)return;let s=n,c=i;try{await l.put(`${t}/cell`,{table:s,schema:c,pkColumn:e,pkValue:r,column:a,value:o}),L(s,c)}catch(e){R(`Update cell`,e)}},[t,n,i,L,R]),B=(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.del(`${t}/row`,{table:a,schema:o,pkColumn:e,pkValue:r}),L(a,o)}catch(e){R(`Delete row`,e)}},[t,n,i,L,R]),V=(0,g.useCallback)(e=>{let t,n=`ASC`;D===e?k===`ASC`?(t=e,n=`DESC`):(t=null,n=`ASC`):(t=e,n=`ASC`),O(t),A(n),b(1),M(void 0,void 0,1,t,n)},[D,k,M]),H=(0,g.useCallback)(()=>{O(null),A(`ASC`),b(1),M(void 0,void 0,1,null,`ASC`)},[M]),U=(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.post(`${t}/rows/delete`,{table:a,schema:o,pkColumn:e,pkValues:r}),L(a,o)}catch(e){R(`Delete rows`,e)}},[t,n,i,L,R]),W=(0,g.useCallback)(async e=>{if(!n)return;let r=n,a=i;try{await l.post(`${t}/row`,{table:r,schema:a,values:e}),L(r,a)}catch(e){throw R(`Insert row`,e),e}},[t,n,i,L,R]),G=(0,g.useCallback)(()=>{let e=j.current;if(e?.mode===`query`){I(e.sql);return}if(e?.mode===`table`){F(e.sql);return}M()},[I,F,M]);return{selectedTable:n,selectedSchema:i,selectTable:N,tableData:o,schema:c,loading:f,error:m,page:_,setPage:P,orderBy:D,orderDir:k,toggleSort:V,clearSort:H,queryResult:x,queryError:C,queryLoading:T,executeQuery:I,updateCell:z,updateCellIn:(0,g.useCallback)(async(e,n,r,i,a,o)=>{try{await l.put(`${t}/cell`,{table:e,schema:n,pkColumn:r,pkValue:i,column:a,value:o}),G()}catch(e){R(`Update cell`,e)}},[t,G,R]),deleteRow:B,bulkDelete:U,insertRow:W,refreshData:M,queryAsTable:F,reload:G}}function x(e,t){let n=e.replace(/--[^\r\n]*/g,` `).replace(/\/\*[\s\S]*?\*\//g,` `).trim().replace(/;\s*$/,``);if(!/^select\s/i.test(n)||/\b(join|union|intersect|except|group\s+by|distinct)\b/i.test(n)||(n.match(/\bfrom\b/gi)??[]).length!==1)return null;let r=/\bfrom\s+(?:"([^"]+)"|(\w+))\s*(?:\.\s*(?:"([^"]+)"|(\w+)))?/i.exec(n);if(!r)return null;let i=r[1]??r[2],a=r[3]??r[4];return a?{schema:i,table:a}:{table:i,schema:t}}var S=n();function C(e){let t={},n=/"(\w+)"\s+ILIKE\s+'%([^']*?)%'/gi,r;for(;(r=n.exec(e))!==null;)t[r[1]]=r[2].replace(/''/g,`'`);return t}function w({metadata:e,tabId:t}){let n=e?.connectionId,u=e?.connectionName,_=e?.tableName,v=e?.schemaName??`public`,y=e?.initialSql,w=e?.currentSql,T=d(e=>e.updateTab),D=(0,g.useRef)(e);D.current=e;let O=(0,g.useCallback)(e=>{t&&T(t,{metadata:{...D.current,currentSql:e}})},[t,T]),k=b(n),{connections:A,updateConnection:j}=f(),M=(0,g.useMemo)(()=>A.find(e=>e.id===n),[A,n]),[N,P]=(0,g.useState)([]),[F,I]=(0,g.useState)(180),L=(0,g.useRef)(null),[R,z]=(0,g.useState)({}),B=(0,g.useMemo)(()=>{if(y&&!k.selectedTable)return y;if(k.selectedTable){let e=`SELECT * FROM "${k.selectedTable}"`,t=Object.entries(R).filter(([,e])=>e.trim()).map(([e,t])=>`"${e}" ILIKE '%${t.replace(/'/g,`''`)}%'`);t.length>0&&(e+=` WHERE ${t.join(` AND `)}`),k.orderBy&&(e+=` ORDER BY "${k.orderBy}" ${k.orderDir}`);let n=(k.page-1)*100;return e+=` LIMIT 100`,n>0&&(e+=` OFFSET ${n}`),e}return`SELECT * FROM `},[y,k.selectedTable,k.orderBy,k.orderDir,k.page,R]),V=(0,g.useCallback)(e=>{z(e)},[]),H=(0,g.useRef)(void 0),U=(0,g.useRef)(!1);(0,g.useEffect)(()=>{if(!k.selectedTable)return;let e=Object.values(R).some(e=>e.trim());if(!(!e&&!U.current))return U.current=e,clearTimeout(H.current),H.current=setTimeout(()=>{e?k.queryAsTable(B):k.refreshData()},500),()=>clearTimeout(H.current)},[R]);let W=(0,g.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=F,r=e=>{let r=e.clientY-t;I(Math.max(80,Math.min(n+r,(L.current?.clientHeight??600)-100)))},i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[F]);(0,g.useEffect)(()=>{l.get(`/api/db/connections/${n}/tables?cached=1`).then(e=>P(e.map(e=>({name:e.name,schema:e.schema})))).catch(()=>{})},[n]);let G=(0,g.useMemo)(()=>{if(N.length!==0)return{tables:N,getColumns:async(e,t)=>await l.get(`/api/db/connections/${n}/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`)}},[n,N]),K=(0,g.useRef)(!1);(0,g.useEffect)(()=>{K.current||(K.current=!0,y?k.executeQuery(y):_&&k.selectTable(_,v))},[_,v,y]);let[q,J]=(0,g.useState)(!!y),[Y,ee]=(0,g.useState)(y??null),te=(0,g.useCallback)(e=>{let t=e.trim();if(k.selectedTable&&RegExp(`^SELECT\\s+\\*\\s+FROM\\s+"?${k.selectedTable.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}"?\\b`,`i`).test(t)){z(C(t)),k.queryAsTable(t);return}J(!0),ee(t),k.executeQuery(e)},[k.executeQuery,k.queryAsTable,k.selectedTable]),ne=(0,g.useCallback)(e=>{J(!1),k.toggleSort(e)},[k.toggleSort]),re=(0,g.useCallback)(()=>{J(!1),k.clearSort()},[k.clearSort]),ie=(0,g.useCallback)(e=>{J(!1),k.setPage(e)},[k.setPage]),X=(0,g.useMemo)(()=>M&&!M.readonly&&Y?x(Y,k.selectedSchema):null,[M,Y,k.selectedSchema]),ae=(0,g.useCallback)((e,t,n,r)=>{X&&k.updateCellIn(X.table,X.schema,e,t,n,r)},[X,k.updateCellIn]),Z=k.queryResult,Q=q&&!!(Z||k.queryError),$=k.selectedTable&&!Q,oe=!($&&k.tableData)&&!Q&&(k.loading||k.queryLoading);return(0,S.jsx)(`div`,{ref:L,className:`flex h-full w-full overflow-hidden`,children:(0,S.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border bg-background shrink-0`,children:[(0,S.jsx)(a,{className:`size-3.5 text-muted-foreground`}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground truncate`,children:u??`Database`}),k.selectedTable&&(0,S.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`/ `,k.selectedTable]}),(0,S.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[k.tableData&&(0,S.jsx)(p,{columns:k.tableData.columns,rows:k.tableData.rows,filename:u?`${u}-${k.selectedTable??`data`}`:k.selectedTable??`data`,exportAllUrl:k.selectedTable?`/api/db/connections/${n}/export?table=${encodeURIComponent(k.selectedTable)}&schema=${k.selectedSchema}`:void 0}),M&&(0,S.jsx)(`button`,{type:`button`,onClick:()=>j(M.id,{readonly:M.readonly?0:1}),className:`flex items-center gap-0.5 px-1 py-0.5 rounded text-[10px] transition-colors ${M.readonly?`text-muted-foreground hover:text-foreground`:`bg-destructive/15 text-destructive`}`,title:M.readonly?`Readonly — click to allow writes`:`WRITE mode — click to enable readonly`,children:M.readonly?(0,S.jsx)(c,{className:`size-3`}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(o,{className:`size-3`}),(0,S.jsx)(`span`,{className:`font-medium`,children:`WRITE`})]})}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>k.reload(),title:`Reload data`,className:`p-1 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,S.jsx)(i,{className:`size-3 ${k.loading||k.queryLoading?`animate-spin`:``}`})})]})]}),(0,S.jsx)(`div`,{className:`shrink-0 border-b border-border`,style:{height:F},children:(0,S.jsx)(h,{onExecute:te,loading:k.queryLoading,defaultValue:B,schemaInfo:G,onSqlChange:O,persistedSql:w})}),(0,S.jsx)(`div`,{onMouseDown:W,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,S.jsx)(r,{className:`size-3 text-muted-foreground/50`})}),(0,S.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[$&&k.tableData&&(0,S.jsx)(m,{columns:k.tableData.columns,rows:k.tableData.rows,total:k.tableData.total,limit:k.tableData.limit,schema:k.schema,loading:k.loading,page:k.page,onPageChange:ie,onCellUpdate:k.updateCell,onRowDelete:k.deleteRow,orderBy:k.orderBy,orderDir:k.orderDir,onToggleSort:ne,onClearSort:re,onBulkDelete:k.bulkDelete,onInsertRow:k.insertRow,connectionId:n,selectedTable:k.selectedTable,selectedSchema:k.selectedSchema,connectionName:u,columnFilters:R,onColumnFilter:V}),Q&&(0,S.jsx)(E,{result:Z,error:k.queryError,loading:k.queryLoading,schema:k.schema,connectionName:u,onCellUpdate:X?ae:void 0}),oe&&(0,S.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:(0,S.jsx)(s,{className:`size-4 animate-spin`})})]})]})})}var T=()=>{};function E({result:e,error:t,loading:n,schema:r,connectionName:i,onCellUpdate:a}){let o=(0,g.useMemo)(()=>e?.changeType===`select`&&e.rows.length>0?{columns:e.columns,rows:e.rows,total:e.rows.length,limit:e.rows.length}:null,[e]),c=(0,g.useMemo)(()=>{let t=e?.columns??[],n=new Set((r??[]).map(e=>e.name));return r?.length&&t.every(e=>n.has(e))?r:t.map(e=>({name:e,type:`text`,nullable:!0,pk:!1,defaultValue:null}))},[r,e?.columns]);return(0,S.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden text-xs`,children:[t&&(0,S.jsx)(`div`,{className:`px-3 py-2 text-destructive bg-destructive/5 shrink-0`,children:t}),e?.changeType===`modify`&&(0,S.jsxs)(`div`,{className:`px-3 py-2 text-success shrink-0`,children:[e.rowsAffected,` row(s) affected`,e.executionTimeMs!=null&&(0,S.jsxs)(`span`,{className:`text-muted-foreground ml-2`,children:[e.executionTimeMs,`ms`]})]}),o&&(0,S.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[(0,S.jsx)(m,{columns:o.columns,rows:o.rows,total:o.total,limit:o.limit,schema:c,loading:!!n,page:1,onPageChange:T,onCellUpdate:a??T,readOnly:!a,orderBy:null,orderDir:`ASC`,onToggleSort:T,connectionName:i}),e?.executionTimeMs!=null&&(0,S.jsxs)(`div`,{className:`px-3 py-0.5 border-t border-border text-[10px] text-muted-foreground shrink-0`,children:[e.rows.length,` rows · `,e.executionTimeMs,`ms`]})]}),e?.changeType===`select`&&e.rows.length===0&&(0,S.jsxs)(`div`,{className:`px-3 py-2 text-muted-foreground shrink-0`,children:[`No results`,e.executionTimeMs!=null&&(0,S.jsxs)(`span`,{className:`ml-2 text-muted-foreground/60`,children:[e.executionTimeMs,`ms`]})]}),!e&&!t&&(0,S.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:n?(0,S.jsx)(s,{className:`size-4 animate-spin`}):`Run a query to see results`})]})}export{w as DatabaseViewer};
@@ -1,4 +1,4 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{Mr as r,ft as i,ln as a,r as o,yt as s,zr as ee}from"./icons-DQjqk0lJ.js";import{i as c,n as l,r as u}from"./api-client-Jn3njtNw.js";import{t as d}from"./settings-store-tWrnlyEW.js";import"./vendor-mermaid-D6lgjvVE.js";import"./project-store-hNvwfqX3.js";import"./project-framework-store-ViZgce6y.js";import"./git-repo-store-BCEPfUGT.js";import{t as f}from"./button-B9CTrsEf.js";import{At as te,Ht as ne,d as re,in as ie}from"./index-BnH1J2Pm.js";import{t as ae}from"./use-monaco-theme-DFaNmksV.js";import{n as oe,t as se}from"./editor-font-D_4aaSCa.js";import{t as p}from"./use-inline-blame-BFblg3CO.js";import{n as m,r as ce}from"./monaco-dotenv-language-DD8_UQG7.js";import{n as h,o as g}from"./can-open-in-ppm-CUW3vVJg.js";import{r as _}from"./image-preview-geometry-BFKR37Pj.js";var v=e(t(),1),y=n();function b(e){return h.has(g(e))}function x(e){return/^[0-9a-f]{40}$/i.test(e)?e.slice(0,7):e}function S({mode:e,onChange:t}){return(0,y.jsxs)(`select`,{value:e,onChange:e=>t(e.target.value),title:`Show this file as an image or as text`,"aria-label":`Reopen editor with`,className:`h-11 rounded border border-border bg-transparent px-1 text-xs text-foreground outline-none md:h-6`,children:[(0,y.jsx)(`option`,{value:`preview`,children:`Image Preview`}),(0,y.jsx)(`option`,{value:`text`,children:`Text Editor`})]})}function le({filePath:e,mode:t,original:n,modified:r,onOpenAnyway:i}){if(t===`text`||!b(e))return(0,y.jsx)(C,{onOpenAnyway:i});let a=[n,r].filter(e=>e.url!==null);if(a.length<2){let e=a[0];return e?(0,y.jsx)(w,{side:e}):(0,y.jsx)(C,{onOpenAnyway:i})}return(0,y.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col md:flex-row`,children:[(0,y.jsx)(w,{side:a[0]}),(0,y.jsx)(`div`,{className:`shrink-0 border-b border-border md:border-b-0 md:border-r`}),(0,y.jsx)(w,{side:a[1]})]})}function C({onOpenAnyway:e}){return(0,y.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-4 p-6 text-center`,children:[(0,y.jsx)(o,{className:`size-10 text-warning`}),(0,y.jsx)(`p`,{className:`max-w-md text-sm leading-relaxed text-text-secondary`,children:`The file is not displayed in the text editor because it is either binary or uses an unsupported text encoding.`}),(0,y.jsx)(f,{onClick:e,className:`mt-auto h-11 w-full max-w-xs md:mt-0 md:w-auto md:px-5`,children:`Open Anyway`})]})}function w({side:e}){return(0,y.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,y.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-border px-3 py-1.5`,children:[(0,y.jsx)(`span`,{className:`truncate text-xs font-medium text-text-secondary`,children:e.label}),e.size!==null&&(0,y.jsx)(`span`,{className:`shrink-0 text-xs text-text-subtle`,children:_(e.size)})]}),(0,y.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center overflow-auto bg-surface p-4`,children:(0,y.jsx)(T,{url:e.url})})]})}function T({url:e}){let{blobUrl:t,failed:n}=E(e);return n?(0,y.jsxs)(`div`,{className:`flex flex-col items-center gap-2 text-text-subtle`,children:[(0,y.jsx)(s,{className:`size-8`}),(0,y.jsx)(`p`,{className:`text-xs`,children:`Failed to load.`})]}):t?(0,y.jsx)(`img`,{src:t,alt:``,className:`max-h-full max-w-full object-contain`}):(0,y.jsx)(a,{className:`size-5 animate-spin text-text-subtle`})}function E(e){let[t,n]=(0,v.useState)(null),[r,i]=(0,v.useState)(!1),a=(0,v.useRef)(null);return(0,v.useEffect)(()=>{let t=!1;i(!1);let r=u();return fetch(e,{headers:r?{Authorization:`Bearer ${r}`}:{}}).then(e=>{if(!e.ok)throw Error(String(e.status));return e.blob()}).then(e=>{if(t)return;let r=URL.createObjectURL(e);a.current&&URL.revokeObjectURL(a.current),a.current=r,n(r)}).catch(()=>{t||i(!0)}),()=>{t=!0}},[e]),(0,v.useEffect)(()=>()=>{a.current&&URL.revokeObjectURL(a.current)},[]),{blobUrl:t,failed:r}}function ue(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`}[e.split(`.`).pop()?.toLowerCase()??``]??(m(e)?`dotenv`:`plaintext`)}function D({metadata:e}){let t=e?.filePath,n=e?.projectName,o=e?.ref1,s=e?.ref2,u=e?.file1,f=e?.file2,m=e?.original,h=e?.modified,g=m!=null||h!=null,_=!!(u&&f),[C,w]=(0,v.useState)(null),[T,E]=(0,v.useState)(null),[D,O]=(0,v.useState)(null),[k,A]=(0,v.useState)(`preview`),[j,M]=(0,v.useState)(!1),N=e=>{A(e),e===`preview`&&M(!1)},[P,F]=(0,v.useState)(!g),[I,L]=(0,v.useState)(null),{wordWrap:fe,toggleWordWrap:pe,mobileWordWrap:R,toggleMobileWordWrap:z}=d(ne(e=>({wordWrap:e.wordWrap,toggleWordWrap:e.toggleWordWrap,mobileWordWrap:e.mobileWordWrap,toggleMobileWordWrap:e.toggleMobileWordWrap}))),me=ae(),B=te(n),V=(0,v.useRef)(null),H=(0,v.useRef)(null),[he,ge]=(0,v.useState)(!1),[U,_e]=(0,v.useState)(null),[W,G]=(0,v.useState)(`modified`),[K,q]=(0,v.useState)();(0,v.useEffect)(()=>{let e=V.current;if(!e)return;let t=new ResizeObserver(([e])=>{e&&q(Math.floor(e.contentRect.height))});return t.observe(e),()=>t.disconnect()},[P,I]),(0,v.useEffect)(()=>ie(V.current,()=>H.current?.layout()),[P,I]),(0,v.useEffect)(()=>{if(g||!n)return;if(F(!0),L(null),O(null),E(null),w(null),u&&f){let e=new URLSearchParams({file1:u,file2:f});l.get(`${c(n)}/files/compare?${e}`).then(e=>{E(e),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to compare files`),F(!1)});return}if(t){let e=B.repoPath(t);if(e==null){F(!1);return}let n=new URLSearchParams({file:e});o&&n.set(`ref`,o),s&&n.set(`ref2`,s),j&&n.set(`text`,`1`),l.get(B.gitUrl(`/file-full-diff?${n}`)).then(e=>{O(e),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to load diff`),F(!1)});return}let e;if(o||s){let t=new URLSearchParams;o&&t.set(`ref1`,o),s&&t.set(`ref2`,s),e=B.gitUrl(`/diff?${t}`)}else e=B.gitUrl(`/diff`);l.get(e).then(e=>{w(e.diff),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to load diff`),F(!1)})},[t,n,o,s,u,f,g,B,j]),(0,v.useEffect)(()=>{M(!1),A(`preview`)},[t,o,s]);let{original:J,modified:Y}=(0,v.useMemo)(()=>g?{original:m??``,modified:h??``}:_&&T?T:D||(C?de(C):{original:``,modified:``}),[C,g,m,h,_,T,D]),ve=(0,v.useMemo)(()=>{let e=t??f??u;return e?ue(e):`plaintext`},[t,u,f]),X=d(e=>e.inlineBlame),ye=d(e=>e.toggleInlineBlame),Z=typeof window<`u`&&window.innerWidth<768,Q=Z?R:fe,be=Z?z:pe,$=!!(n&&t&&D)&&!Z;p({editor:U?.original??null,monaco:U?.monaco??null,projectName:n,filePath:$?t:void 0,rev:o||`HEAD`,enabled:X&&$&&W===`original`,readOnly:!0}),p({editor:U?.modified??null,monaco:U?.monaco??null,projectName:n,filePath:$?t:void 0,rev:s,enabled:X&&$&&W===`modified`,readOnly:!0});let xe=!Z;if((0,v.useEffect)(()=>{let e=H.current;if(!e)return;let t=Q?`on`:`off`;e.updateOptions({diffWordWrap:t}),e.getOriginalEditor().updateOptions({wordWrapOverride2:t}),e.getModifiedEditor().updateOptions({wordWrapOverride2:t})},[Q,he]),!n&&!g)return(0,y.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`No project selected.`});if(P)return(0,y.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,y.jsx)(a,{className:`size-5 animate-spin`}),(0,y.jsx)(`span`,{className:`text-sm`,children:`Loading diff...`})]});if(I)return(0,y.jsx)(`div`,{className:`flex items-center justify-center h-full text-destructive text-sm`,children:I});if(D?.binary&&!j&&t&&n){let e=B.repoPath(t),r=t=>e==null?null:B.gitUrl(`/file-blob?file=${encodeURIComponent(e)}&ref=${encodeURIComponent(t)}`);return(0,y.jsxs)(`div`,{className:`flex flex-col h-full`,children:[b(t)&&(0,y.jsx)(`div`,{className:`flex items-center justify-end gap-0.5 px-2 py-0.5 border-b border-border shrink-0`,children:(0,y.jsx)(S,{mode:k,onChange:N})}),(0,y.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,y.jsx)(le,{filePath:t,mode:k,original:{url:D.originalSize===null?null:r(o||`HEAD`),label:x(o||`HEAD`),size:D.originalSize},modified:{url:D.modifiedSize===null?null:s?r(s):`${c(n)}/files/raw?path=${encodeURIComponent(t)}`,label:s?x(s):`Working Tree`,size:D.modifiedSize},onOpenAnyway:()=>M(!0)})})]})}return!g&&!_&&!D&&!J&&!Y?(0,y.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,y.jsx)(i,{className:`size-8`}),(0,y.jsx)(`p`,{className:`text-sm`,children:`No content changes`}),t&&(0,y.jsx)(`p`,{className:`text-xs font-mono`,children:t})]}):(0,y.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-end gap-0.5 px-2 py-0.5 border-b border-border shrink-0`,children:[D?.binary&&t&&b(t)&&(0,y.jsx)(S,{mode:`text`,onChange:N}),$&&(0,y.jsx)(`button`,{type:`button`,onClick:ye,title:`Inline blame (Alt+B) — who last touched the cursor's line. Click a pane to annotate that side.`,className:`flex items-center justify-center rounded hover:bg-muted active:scale-95 transition-colors p-1 ${X?`bg-muted text-foreground`:``}`,children:(0,y.jsx)(r,{className:`size-3.5`})}),(0,y.jsx)(`button`,{type:`button`,onClick:be,title:Q?`Wrapping long lines — tap to scroll sideways instead`:`Toggle word wrap`,className:`flex items-center justify-center rounded hover:bg-muted active:scale-95 transition-colors ${Z?`size-11`:`p-1`} ${Q?`bg-muted text-foreground`:``}`,children:(0,y.jsx)(ee,{className:`size-3.5`})})]}),(0,y.jsx)(`div`,{ref:V,className:`flex-1 overflow-hidden`,children:K&&K>0?(0,y.jsx)(re,{height:K,language:ve,beforeMount:ce,original:J,modified:Y,theme:me,onMount:(e,t)=>{H.current=e,ge(!0);let n=e.getOriginalEditor(),r=e.getModifiedEditor();_e({monaco:t,original:n,modified:r}),n.onDidFocusEditorText(()=>G(`original`)),r.onDidFocusEditorText(()=>G(`modified`)),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyB,()=>d.getState().toggleInlineBlame())},options:{fontSize:Z?11:14,fontFamily:se,fontLigatures:oe,diffWordWrap:Q?`on`:`off`,renderSideBySide:xe,useInlineViewWhenSpaceIsLimited:!1,readOnly:!0,automaticLayout:!0,scrollBeyondLastLine:!1},loading:(0,y.jsx)(a,{className:`size-5 animate-spin text-muted-foreground`})}):(0,y.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,y.jsx)(a,{className:`size-5 animate-spin text-muted-foreground`})})})]})}function de(e){let t=e.split(`
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{Mr as r,ft as i,ln as a,r as o,yt as s,zr as ee}from"./icons-DQjqk0lJ.js";import{i as c,n as l,r as u}from"./api-client-Jn3njtNw.js";import{t as d}from"./settings-store-tWrnlyEW.js";import"./vendor-mermaid-D6lgjvVE.js";import"./project-store-hNvwfqX3.js";import"./project-framework-store-ViZgce6y.js";import"./git-repo-store-BCEPfUGT.js";import{t as f}from"./button-B9CTrsEf.js";import{At as te,Ht as ne,d as re,in as ie}from"./index-CoTvom0K.js";import{t as ae}from"./use-monaco-theme-DvWcXiCH.js";import{n as oe,t as se}from"./editor-font-D_4aaSCa.js";import{t as p}from"./use-inline-blame-CKu-Sd-l.js";import{n as m,r as ce}from"./monaco-dotenv-language-DD8_UQG7.js";import{n as h,o as g}from"./can-open-in-ppm-CUW3vVJg.js";import{r as _}from"./image-preview-geometry-BFKR37Pj.js";var v=e(t(),1),y=n();function b(e){return h.has(g(e))}function x(e){return/^[0-9a-f]{40}$/i.test(e)?e.slice(0,7):e}function S({mode:e,onChange:t}){return(0,y.jsxs)(`select`,{value:e,onChange:e=>t(e.target.value),title:`Show this file as an image or as text`,"aria-label":`Reopen editor with`,className:`h-11 rounded border border-border bg-transparent px-1 text-xs text-foreground outline-none md:h-6`,children:[(0,y.jsx)(`option`,{value:`preview`,children:`Image Preview`}),(0,y.jsx)(`option`,{value:`text`,children:`Text Editor`})]})}function le({filePath:e,mode:t,original:n,modified:r,onOpenAnyway:i}){if(t===`text`||!b(e))return(0,y.jsx)(C,{onOpenAnyway:i});let a=[n,r].filter(e=>e.url!==null);if(a.length<2){let e=a[0];return e?(0,y.jsx)(w,{side:e}):(0,y.jsx)(C,{onOpenAnyway:i})}return(0,y.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col md:flex-row`,children:[(0,y.jsx)(w,{side:a[0]}),(0,y.jsx)(`div`,{className:`shrink-0 border-b border-border md:border-b-0 md:border-r`}),(0,y.jsx)(w,{side:a[1]})]})}function C({onOpenAnyway:e}){return(0,y.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-4 p-6 text-center`,children:[(0,y.jsx)(o,{className:`size-10 text-warning`}),(0,y.jsx)(`p`,{className:`max-w-md text-sm leading-relaxed text-text-secondary`,children:`The file is not displayed in the text editor because it is either binary or uses an unsupported text encoding.`}),(0,y.jsx)(f,{onClick:e,className:`mt-auto h-11 w-full max-w-xs md:mt-0 md:w-auto md:px-5`,children:`Open Anyway`})]})}function w({side:e}){return(0,y.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,y.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-border px-3 py-1.5`,children:[(0,y.jsx)(`span`,{className:`truncate text-xs font-medium text-text-secondary`,children:e.label}),e.size!==null&&(0,y.jsx)(`span`,{className:`shrink-0 text-xs text-text-subtle`,children:_(e.size)})]}),(0,y.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center overflow-auto bg-surface p-4`,children:(0,y.jsx)(T,{url:e.url})})]})}function T({url:e}){let{blobUrl:t,failed:n}=E(e);return n?(0,y.jsxs)(`div`,{className:`flex flex-col items-center gap-2 text-text-subtle`,children:[(0,y.jsx)(s,{className:`size-8`}),(0,y.jsx)(`p`,{className:`text-xs`,children:`Failed to load.`})]}):t?(0,y.jsx)(`img`,{src:t,alt:``,className:`max-h-full max-w-full object-contain`}):(0,y.jsx)(a,{className:`size-5 animate-spin text-text-subtle`})}function E(e){let[t,n]=(0,v.useState)(null),[r,i]=(0,v.useState)(!1),a=(0,v.useRef)(null);return(0,v.useEffect)(()=>{let t=!1;i(!1);let r=u();return fetch(e,{headers:r?{Authorization:`Bearer ${r}`}:{}}).then(e=>{if(!e.ok)throw Error(String(e.status));return e.blob()}).then(e=>{if(t)return;let r=URL.createObjectURL(e);a.current&&URL.revokeObjectURL(a.current),a.current=r,n(r)}).catch(()=>{t||i(!0)}),()=>{t=!0}},[e]),(0,v.useEffect)(()=>()=>{a.current&&URL.revokeObjectURL(a.current)},[]),{blobUrl:t,failed:r}}function ue(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`}[e.split(`.`).pop()?.toLowerCase()??``]??(m(e)?`dotenv`:`plaintext`)}function D({metadata:e}){let t=e?.filePath,n=e?.projectName,o=e?.ref1,s=e?.ref2,u=e?.file1,f=e?.file2,m=e?.original,h=e?.modified,g=m!=null||h!=null,_=!!(u&&f),[C,w]=(0,v.useState)(null),[T,E]=(0,v.useState)(null),[D,O]=(0,v.useState)(null),[k,A]=(0,v.useState)(`preview`),[j,M]=(0,v.useState)(!1),N=e=>{A(e),e===`preview`&&M(!1)},[P,F]=(0,v.useState)(!g),[I,L]=(0,v.useState)(null),{wordWrap:fe,toggleWordWrap:pe,mobileWordWrap:R,toggleMobileWordWrap:z}=d(ne(e=>({wordWrap:e.wordWrap,toggleWordWrap:e.toggleWordWrap,mobileWordWrap:e.mobileWordWrap,toggleMobileWordWrap:e.toggleMobileWordWrap}))),me=ae(),B=te(n),V=(0,v.useRef)(null),H=(0,v.useRef)(null),[he,ge]=(0,v.useState)(!1),[U,_e]=(0,v.useState)(null),[W,G]=(0,v.useState)(`modified`),[K,q]=(0,v.useState)();(0,v.useEffect)(()=>{let e=V.current;if(!e)return;let t=new ResizeObserver(([e])=>{e&&q(Math.floor(e.contentRect.height))});return t.observe(e),()=>t.disconnect()},[P,I]),(0,v.useEffect)(()=>ie(V.current,()=>H.current?.layout()),[P,I]),(0,v.useEffect)(()=>{if(g||!n)return;if(F(!0),L(null),O(null),E(null),w(null),u&&f){let e=new URLSearchParams({file1:u,file2:f});l.get(`${c(n)}/files/compare?${e}`).then(e=>{E(e),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to compare files`),F(!1)});return}if(t){let e=B.repoPath(t);if(e==null){F(!1);return}let n=new URLSearchParams({file:e});o&&n.set(`ref`,o),s&&n.set(`ref2`,s),j&&n.set(`text`,`1`),l.get(B.gitUrl(`/file-full-diff?${n}`)).then(e=>{O(e),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to load diff`),F(!1)});return}let e;if(o||s){let t=new URLSearchParams;o&&t.set(`ref1`,o),s&&t.set(`ref2`,s),e=B.gitUrl(`/diff?${t}`)}else e=B.gitUrl(`/diff`);l.get(e).then(e=>{w(e.diff),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to load diff`),F(!1)})},[t,n,o,s,u,f,g,B,j]),(0,v.useEffect)(()=>{M(!1),A(`preview`)},[t,o,s]);let{original:J,modified:Y}=(0,v.useMemo)(()=>g?{original:m??``,modified:h??``}:_&&T?T:D||(C?de(C):{original:``,modified:``}),[C,g,m,h,_,T,D]),ve=(0,v.useMemo)(()=>{let e=t??f??u;return e?ue(e):`plaintext`},[t,u,f]),X=d(e=>e.inlineBlame),ye=d(e=>e.toggleInlineBlame),Z=typeof window<`u`&&window.innerWidth<768,Q=Z?R:fe,be=Z?z:pe,$=!!(n&&t&&D)&&!Z;p({editor:U?.original??null,monaco:U?.monaco??null,projectName:n,filePath:$?t:void 0,rev:o||`HEAD`,enabled:X&&$&&W===`original`,readOnly:!0}),p({editor:U?.modified??null,monaco:U?.monaco??null,projectName:n,filePath:$?t:void 0,rev:s,enabled:X&&$&&W===`modified`,readOnly:!0});let xe=!Z;if((0,v.useEffect)(()=>{let e=H.current;if(!e)return;let t=Q?`on`:`off`;e.updateOptions({diffWordWrap:t}),e.getOriginalEditor().updateOptions({wordWrapOverride2:t}),e.getModifiedEditor().updateOptions({wordWrapOverride2:t})},[Q,he]),!n&&!g)return(0,y.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`No project selected.`});if(P)return(0,y.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,y.jsx)(a,{className:`size-5 animate-spin`}),(0,y.jsx)(`span`,{className:`text-sm`,children:`Loading diff...`})]});if(I)return(0,y.jsx)(`div`,{className:`flex items-center justify-center h-full text-destructive text-sm`,children:I});if(D?.binary&&!j&&t&&n){let e=B.repoPath(t),r=t=>e==null?null:B.gitUrl(`/file-blob?file=${encodeURIComponent(e)}&ref=${encodeURIComponent(t)}`);return(0,y.jsxs)(`div`,{className:`flex flex-col h-full`,children:[b(t)&&(0,y.jsx)(`div`,{className:`flex items-center justify-end gap-0.5 px-2 py-0.5 border-b border-border shrink-0`,children:(0,y.jsx)(S,{mode:k,onChange:N})}),(0,y.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,y.jsx)(le,{filePath:t,mode:k,original:{url:D.originalSize===null?null:r(o||`HEAD`),label:x(o||`HEAD`),size:D.originalSize},modified:{url:D.modifiedSize===null?null:s?r(s):`${c(n)}/files/raw?path=${encodeURIComponent(t)}`,label:s?x(s):`Working Tree`,size:D.modifiedSize},onOpenAnyway:()=>M(!0)})})]})}return!g&&!_&&!D&&!J&&!Y?(0,y.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,y.jsx)(i,{className:`size-8`}),(0,y.jsx)(`p`,{className:`text-sm`,children:`No content changes`}),t&&(0,y.jsx)(`p`,{className:`text-xs font-mono`,children:t})]}):(0,y.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-end gap-0.5 px-2 py-0.5 border-b border-border shrink-0`,children:[D?.binary&&t&&b(t)&&(0,y.jsx)(S,{mode:`text`,onChange:N}),$&&(0,y.jsx)(`button`,{type:`button`,onClick:ye,title:`Inline blame (Alt+B) — who last touched the cursor's line. Click a pane to annotate that side.`,className:`flex items-center justify-center rounded hover:bg-muted active:scale-95 transition-colors p-1 ${X?`bg-muted text-foreground`:``}`,children:(0,y.jsx)(r,{className:`size-3.5`})}),(0,y.jsx)(`button`,{type:`button`,onClick:be,title:Q?`Wrapping long lines — tap to scroll sideways instead`:`Toggle word wrap`,className:`flex items-center justify-center rounded hover:bg-muted active:scale-95 transition-colors ${Z?`size-11`:`p-1`} ${Q?`bg-muted text-foreground`:``}`,children:(0,y.jsx)(ee,{className:`size-3.5`})})]}),(0,y.jsx)(`div`,{ref:V,className:`flex-1 overflow-hidden`,children:K&&K>0?(0,y.jsx)(re,{height:K,language:ve,beforeMount:ce,original:J,modified:Y,theme:me,onMount:(e,t)=>{H.current=e,ge(!0);let n=e.getOriginalEditor(),r=e.getModifiedEditor();_e({monaco:t,original:n,modified:r}),n.onDidFocusEditorText(()=>G(`original`)),r.onDidFocusEditorText(()=>G(`modified`)),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyB,()=>d.getState().toggleInlineBlame())},options:{fontSize:Z?11:14,fontFamily:se,fontLigatures:oe,diffWordWrap:Q?`on`:`off`,renderSideBySide:xe,useInlineViewWhenSpaceIsLimited:!1,readOnly:!0,automaticLayout:!0,scrollBeyondLastLine:!1},loading:(0,y.jsx)(a,{className:`size-5 animate-spin text-muted-foreground`})}):(0,y.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,y.jsx)(a,{className:`size-5 animate-spin text-muted-foreground`})})})]})}function de(e){let t=e.split(`
2
2
  `),n=[],r=[],i=!1;for(let e of t)if(!(e.startsWith(`diff --git`)||e.startsWith(`diff --no-index`)||e.startsWith(`index `)||e.startsWith(`new file`)||e.startsWith(`deleted file`)||e.startsWith(`old mode`)||e.startsWith(`new mode`)||e.startsWith(`---`)||e.startsWith(`+++`)||e.startsWith(`Binary files`)||e.startsWith(`\\ No newline`))){if(e.startsWith(`@@`)){i=!0;continue}if(i)if(e.startsWith(`-`))n.push(e.slice(1));else if(e.startsWith(`+`))r.push(e.slice(1));else{let t=e.startsWith(` `)?e.slice(1):e;n.push(t),r.push(t)}}return{original:n.join(`
3
3
  `),modified:r.join(`
4
4
  `)}}export{D as DiffViewer};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import"./api-client-Jn3njtNw.js";import"./panel-store-D20Zuf3i.js";import"./window-store-UC1jJeLM.js";import{t as n}from"./tab-store-krAuHQ6_.js";import"./ws-auth-CaxV807E.js";import{i as r,n as i,r as a,t as o,useLsp as s}from"./use-lsp-BKTJSEL2.js";var c=e(t(),1);function l(e,t,n){return t.addAction({id:`ppm.lsp.goToDefinition`,label:`Go to Definition`,keybindings:[e.KeyCode.F12],contextMenuGroupId:`navigation`,contextMenuOrder:1.1,run:async t=>{let s=t.getModel(),c=t.getPosition();if(!s||!c)return;let l=r(s);if(!l)return;let d=null;try{d=await l.connection.request(l.path,`textDocument/definition`,{textDocument:{uri:s.uri.toString()},position:i(c)})}catch{return}let f=(Array.isArray(d)?d[0]:d)??null;if(!f)return;let p=`targetUri`in f?f.targetUri:f.uri,m=`targetUri`in f?f.targetSelectionRange??f.targetRange:f.range;if(!p||!m)return;let h=o(m.start);if(p===s.uri.toString()){t.setPosition(h),t.revealPositionInCenterIfOutsideViewport(h,e.editor.ScrollType.Smooth),t.setSelection({startLineNumber:h.lineNumber,startColumn:h.column,endLineNumber:m.end.line+1,endColumn:m.end.character+1});return}let g=l.connection.statusOf(l.path);if(g?.state!==`ready`||!g.projectPath)return;let _=a(p);if(!_)return;let v=u(g.projectPath,_);v&&n.openFileTab(v,l.connection.projectName,h.lineNumber)}})}function u(e,t){let n=e.replace(/\\/g,`/`).replace(/\/+$/,``),r=t.replace(/\\/g,`/`);return r.startsWith(n+`/`)?r.slice(n.length+1):null}var d={status:null,diagnostics:[]};function f({editor:e,monaco:t,projectName:r,filePath:i,onState:a}){let{status:o,diagnostics:u}=s({editor:e,monaco:t,projectName:r,filePath:i,enabled:!0});(0,c.useEffect)(()=>{let r=l(t,e,{openFileTab:(e,t,r)=>n.getState().openTab({type:`editor`,title:e.split(`/`).pop()||e,projectId:t,metadata:{filePath:e,projectName:t,lineNumber:r},closable:!0})});return()=>r.dispose()},[t,e]);let f=(0,c.useRef)(a);return f.current=a,(0,c.useEffect)(()=>{f.current({status:o,diagnostics:u})},[o,u]),(0,c.useEffect)(()=>()=>f.current(d),[]),null}export{f as EditorLanguageService,f as default};
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import"./api-client-Jn3njtNw.js";import"./panel-store-D20Zuf3i.js";import"./window-store-UC1jJeLM.js";import{t as n}from"./tab-store-krAuHQ6_.js";import"./ws-auth-CaxV807E.js";import{i as r,n as i,r as a,t as o,useLsp as s}from"./use-lsp-BaG0NUXY.js";var c=e(t(),1);function l(e,t,n){return t.addAction({id:`ppm.lsp.goToDefinition`,label:`Go to Definition`,keybindings:[e.KeyCode.F12],contextMenuGroupId:`navigation`,contextMenuOrder:1.1,run:async t=>{let s=t.getModel(),c=t.getPosition();if(!s||!c)return;let l=r(s);if(!l)return;let d=null;try{d=await l.connection.request(l.path,`textDocument/definition`,{textDocument:{uri:s.uri.toString()},position:i(c)})}catch{return}let f=(Array.isArray(d)?d[0]:d)??null;if(!f)return;let p=`targetUri`in f?f.targetUri:f.uri,m=`targetUri`in f?f.targetSelectionRange??f.targetRange:f.range;if(!p||!m)return;let h=o(m.start);if(p===s.uri.toString()){t.setPosition(h),t.revealPositionInCenterIfOutsideViewport(h,e.editor.ScrollType.Smooth),t.setSelection({startLineNumber:h.lineNumber,startColumn:h.column,endLineNumber:m.end.line+1,endColumn:m.end.character+1});return}let g=l.connection.statusOf(l.path);if(g?.state!==`ready`||!g.projectPath)return;let _=a(p);if(!_)return;let v=u(g.projectPath,_);v&&n.openFileTab(v,l.connection.projectName,h.lineNumber)}})}function u(e,t){let n=e.replace(/\\/g,`/`).replace(/\/+$/,``),r=t.replace(/\\/g,`/`);return r.startsWith(n+`/`)?r.slice(n.length+1):null}var d={status:null,diagnostics:[]};function f({editor:e,monaco:t,projectName:r,filePath:i,onState:a}){let{status:o,diagnostics:u}=s({editor:e,monaco:t,projectName:r,filePath:i,enabled:!0});(0,c.useEffect)(()=>{let r=l(t,e,{openFileTab:(e,t,r)=>n.getState().openTab({type:`editor`,title:e.split(`/`).pop()||e,projectId:t,metadata:{filePath:e,projectName:t,lineNumber:r},closable:!0})});return()=>r.dispose()},[t,e]);let f=(0,c.useRef)(a);return f.current=a,(0,c.useEffect)(()=>{f.current({status:o,diagnostics:u})},[o,u]),(0,c.useEffect)(()=>()=>f.current(d),[]),null}export{f as EditorLanguageService,f as default};
@@ -1,2 +1,2 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import{$t as r,Ar as i,At as a,Br as o,N as s,O as c,On as l,Ot as u,Qn as d,Un as f,Ut as p,Vn as m,Vt as h,d as g,in as _,ir as v,j as y,kr as b,l as x,lt as S,mt as C,nr as ee,nt as te,p as ne,q as re,qn as ie,qt as ae,r as oe,st as se,tt as ce,u as le,ut as ue,w as de,wr as fe,zt as w}from"./icons-DQjqk0lJ.js";import{t as pe}from"./createLucideIcon-DoiEKeJ_.js";import{r as me,s as T}from"./api-client-Jn3njtNw.js";import{t as he}from"./react-Bghu0NUO.js";import{n as E}from"./utils-Bmf_8h7Y.js";import{t as ge}from"./window-store-UC1jJeLM.js";import{t as _e}from"./tab-store-krAuHQ6_.js";import{o as ve}from"./file-store-Ds3qJ4hC.js";import{n as D}from"./use-is-mobile-TkcwP1Gx.js";import{a as ye,d as be,n as xe,o as Se,r as Ce,s as we,t as Te}from"./format-file-meta-eKLstbCL.js";import{t as Ee}from"./file-icons-wS-OmEVu.js";import{i as De,n as Oe,o as ke,r as O,t as Ae}from"./mobile-bottom-sheet-C3TniEP-.js";import{n as k,t as je}from"./fs-api-orca76dV.js";import{Bt as A,Ct as Me,Dt as Ne,Et as Pe,Ft as Fe,Gt as Ie,It as j,Jt as Le,Kt as Re,Lt as ze,Mt as Be,Nt as M,Ot as N,Pt as Ve,Rt as He,St as Ue,Tt as We,Ut as Ge,Vt as Ke,Xt as qe,Yt as Je,_t as P,bt as Ye,ct as Xe,dt as Ze,en as Qe,ft as $e,jt as F,lt as et,mt as tt,pt as I,qt as nt,rn as rt,st as L,ut as it,v as at,wt as ot,xt as R,yt as st,zt as ct}from"./index-BnH1J2Pm.js";import{a as z,o as B,s as lt}from"./can-open-in-ppm-CUW3vVJg.js";var ut=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`}]]),dt=`ppm-explorer-pins`,ft=50;function pt(){try{let e=localStorage.getItem(dt),t=e?JSON.parse(e):[];return Array.isArray(t)?t.filter(e=>!!e&&typeof e.path==`string`&&typeof e.name==`string`).slice(0,ft):[]}catch{return[]}}function mt(e){try{localStorage.setItem(dt,JSON.stringify(e))}catch{}}var V=he((e,t)=>({pins:pt(),isPinned:e=>t().pins.some(t=>t.path===e),pin:n=>{if(t().isPinned(n.path))return;let r=[...t().pins,n].slice(0,ft);mt(r),e({pins:r})},unpin:n=>{let r=t().pins.filter(e=>e.path!==n);mt(r),e({pins:r})}}));function ht(e){return z(e.name)?(_e.getState().openTab({type:lt(e.name)===`sqlite`?`sqlite`:`editor`,title:e.name,projectId:null,metadata:{filePath:e.path},closable:!0}),!0):!1}function gt(e){return ge.getState().open(`explorer`,{path:e})}async function _t(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{be(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 vt(e,t){e.length!==0&&(await rt(e.join(`
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import{$t as r,Ar as i,At as a,Br as o,N as s,O as c,On as l,Ot as u,Qn as d,Un as f,Ut as p,Vn as m,Vt as h,d as g,in as _,ir as v,j as y,kr as b,l as x,lt as S,mt as C,nr as ee,nt as te,p as ne,q as re,qn as ie,qt as ae,r as oe,st as se,tt as ce,u as le,ut as ue,w as de,wr as fe,zt as w}from"./icons-DQjqk0lJ.js";import{t as pe}from"./createLucideIcon-DoiEKeJ_.js";import{r as me,s as T}from"./api-client-Jn3njtNw.js";import{t as he}from"./react-Bghu0NUO.js";import{n as E}from"./utils-Bmf_8h7Y.js";import{t as ge}from"./window-store-UC1jJeLM.js";import{t as _e}from"./tab-store-krAuHQ6_.js";import{o as ve}from"./file-store-Ds3qJ4hC.js";import{n as D}from"./use-is-mobile-TkcwP1Gx.js";import{a as ye,d as be,n as xe,o as Se,r as Ce,s as we,t as Te}from"./format-file-meta-eKLstbCL.js";import{t as Ee}from"./file-icons-wS-OmEVu.js";import{i as De,n as Oe,o as ke,r as O,t as Ae}from"./mobile-bottom-sheet-C3TniEP-.js";import{n as k,t as je}from"./fs-api-orca76dV.js";import{Bt as A,Ct as Me,Dt as Ne,Et as Pe,Ft as Fe,Gt as Ie,It as j,Jt as Le,Kt as Re,Lt as ze,Mt as Be,Nt as M,Ot as N,Pt as Ve,Rt as He,St as Ue,Tt as We,Ut as Ge,Vt as Ke,Xt as qe,Yt as Je,_t as P,bt as Ye,ct as Xe,dt as Ze,en as Qe,ft as $e,jt as F,lt as et,mt as tt,pt as I,qt as nt,rn as rt,st as L,ut as it,v as at,wt as ot,xt as R,yt as st,zt as ct}from"./index-CoTvom0K.js";import{a as z,o as B,s as lt}from"./can-open-in-ppm-CUW3vVJg.js";var ut=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`}]]),dt=`ppm-explorer-pins`,ft=50;function pt(){try{let e=localStorage.getItem(dt),t=e?JSON.parse(e):[];return Array.isArray(t)?t.filter(e=>!!e&&typeof e.path==`string`&&typeof e.name==`string`).slice(0,ft):[]}catch{return[]}}function mt(e){try{localStorage.setItem(dt,JSON.stringify(e))}catch{}}var V=he((e,t)=>({pins:pt(),isPinned:e=>t().pins.some(t=>t.path===e),pin:n=>{if(t().isPinned(n.path))return;let r=[...t().pins,n].slice(0,ft);mt(r),e({pins:r})},unpin:n=>{let r=t().pins.filter(e=>e.path!==n);mt(r),e({pins:r})}}));function ht(e){return z(e.name)?(_e.getState().openTab({type:lt(e.name)===`sqlite`?`sqlite`:`editor`,title:e.name,projectId:null,metadata:{filePath:e.path},closable:!0}),!0):!1}function gt(e){return ge.getState().open(`explorer`,{path:e})}async function _t(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{be(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 vt(e,t){e.length!==0&&(await rt(e.join(`
2
2
  `)),T.success(e.length===1?`${t} copied`:`${e.length} ${t.toLowerCase()}s copied`))}var yt=/[<>:"|?*]/,bt=/[\u0000-\u001f]/,xt=/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\..*)?$/i;function St(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(bt.test(e))return`Invalid character in name`;if(t===`win32`){if(yt.test(e))return`Cannot contain < > : " | ? *`;if(xt.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 Ct(e,t,n,r){let i=we(e,t,r);try{return n===`folder`?await k.mkdir(i,!1):await k.touch(i),Pe(e),!0}catch(e){return T.error(n===`folder`?`Could not create folder`:`Could not create file`,{description:xe(e)}),!1}}async function wt(e,t,n){try{return await k.rename(e,t),Pe(Te(e,n)),!0}catch(e){return T.error(`Rename failed`,{description:xe(e)}),!1}}async function Tt(e,t,n){let r={removed:0,needsPermanent:[]},i=new Set;for(let a of e){i.add(Te(a,n));try{await k.remove(a,t),r.removed++}catch(e){if(e instanceof je&&e.code===`NO_TRASH`){r.needsPermanent.push(a);continue}T.error(`Delete failed`,{description:xe(e)})}}if(Pe(...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 Et(e,t){let n=e?Array.from({length:e.length},(t,n)=>e.item(n)).filter(e=>e!=null):[];return t(),n}var H=e(t(),1),U=n();function Dt(e){let t=(0,H.useRef)(null),n=(0,H.useRef)(null),r=typeof document<`u`&&`webkitdirectory`in document.createElement(`input`),i=t=>{let n=Et(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,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`input`,{ref:t,type:`file`,multiple:!0,hidden:!0,onChange:i,"data-testid":`explorer-upload-file-input`}),r&&(0,U.jsx)(`input`,{ref:n,webkitdirectory:``,type:`file`,multiple:!0,hidden:!0,onChange:i,"data-testid":`explorer-upload-folder-input`})]})}}function Ot(e,t){let n=(0,H.useCallback)((t,n)=>$e(t,n,e.sep,e),[e]),r=Dt(e=>void n(e,t()));return{uploadInto:n,openUploadPicker:r.openFilePicker,openUploadFolderPicker:r.openFolderPicker,supportsFolderUpload:r.supportsFolderPicker,uploadInputs:r.inputs}}function kt(e,t,n,r){let i=N(e=>e.patch),a=Ze(),o=it(),[s,c]=(0,H.useState)(null),[l,u]=(0,H.useState)(null),[d,f]=(0,H.useState)(null),p=(0,H.useRef)(t);p.current=t;let m=(0,H.useRef)(a);m.current=a;let h=(0,H.useRef)(o);h.current=o;let g=(0,H.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=Ot(g,_),y=(0,H.useMemo)(()=>({openEntry:e=>{e.type===`directory`?n.go(e.path):ht(e)},openInNewWindow:e=>{gt(e.type===`directory`?e.path:p.current?.path??e.path)},openInTerminal:e=>{tt(e?.type===`directory`?e.path:_())},cut:e=>ot(e.map(e=>e.path),`cut`),copy:e=>ot(e.map(e=>e.path),`copy`),paste:e=>void Me(e??_(),g),transferInto:async(e,t,n)=>{let r=await We(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=St(o,r);if(s){f(s);return}f(null),(a.kind===`rename`?await wt(a.path,o,n.sep):await Ct(n.path,o,a.kind===`new-folder`?`folder`:`file`,n.sep))&&i(e,{inlineEdit:null})},trash:e=>{Tt(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 _t(e),copyPath:e=>void vt(e,`Path`),copyName:e=>void vt(e,`Name`),togglePin:(e,t)=>{let n=V.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,H.useCallback)(()=>{let e=s;c(null),e&&Tt(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 At=e=>(0,U.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,...e,children:(0,U.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`})}),jt=e=>(0,U.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,...e,children:(0,U.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`})}),Mt=At,Nt=jt,Pt=(0,H.createContext)({closed:Mt,open:Nt}),Ft=Pt.Provider;function W({name:e,kind:t,open:n,className:r}){let i=(0,H.useContext)(Pt),o=E(`shrink-0`,r);return t===`directory`?(0,U.jsx)(n?i.open:i.closed,{className:o}):t===`symlink`?(0,U.jsx)(a,{className:E(o,`text-text-2`)}):t===`unknown`?(0,U.jsx)(h,{className:E(o,`text-text-subtle`)}):(0,U.jsx)(Ee,{name:e,className:o})}function It({className:e}){return(0,U.jsx)(W,{name:``,kind:`directory`,className:E(`size-4 shrink-0`,e)})}var Lt={fixed:w,removable:i,network:ut,unknown:w};function G({label:e,path:t,active:n,icon:r,onNavigate:i,onUnpin:a,run:o,uploadRun:s}){let c=Ue(),l=L({targetDir:t,run:o,onFiles:s});return(0,U.jsxs)(`div`,{className:`group/place relative flex items-center`,children:[(0,U.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,U.jsx)(r,{className:`size-4 shrink-0 text-text-subtle`}),(0,U.jsx)(`span`,{className:`truncate`,children:e})]}),a&&(0,U.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,U.jsx)(f,{className:`size-3.5`})})]})}function K({title:e,children:t}){return(0,U.jsxs)(`div`,{className:`pb-2`,children:[(0,U.jsx)(`p`,{className:`px-2 pb-0.5 pt-2 text-[10px] font-semibold uppercase tracking-wide text-text-subtle`,children:e}),t]})}var Rt={home:`Home`,pinned:`Quick access`,known:`Folders`,drives:`Drives`};function zt({host:e,currentPath:t,onNavigate:n,vocab:r=Rt}){let i=V(e=>e.pins),a=V(e=>e.unpin),o=e=>e===t,{run:s,uploadRun:c,prompts:l}=Xe(e?.sep??`/`,e?.platform);return(0,U.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,U.jsx)(K,{title:`Pinned`,children:i.map(e=>(0,U.jsx)(G,{label:e.name,path:e.path,icon:f,active:o(e.path),onNavigate:n,onUnpin:()=>a(e.path),run:s,uploadRun:c},e.path))}),e&&e.pinned.length>0&&(0,U.jsx)(K,{title:r.pinned,children:e.pinned.map(e=>(0,U.jsx)(G,{label:e.name,path:e.path,icon:It,active:o(e.path),onNavigate:n,run:s,uploadRun:c},e.path))}),e&&(0,U.jsxs)(K,{title:r.known,children:[(0,U.jsx)(G,{label:r.home,path:e.homedir,icon:It,active:o(e.homedir),onNavigate:n,run:s,uploadRun:c}),e.knownFolders.map(e=>(0,U.jsx)(G,{label:e.name,path:e.path,icon:It,active:o(e.path),onNavigate:n,run:s,uploadRun:c},e.path))]}),e&&e.drives.length>0&&(0,U.jsx)(K,{title:r.drives,children:e.drives.map(e=>(0,U.jsx)(G,{label:e.label?`${e.label} (${e.name})`:e.name,path:e.path,icon:Lt[e.kind],active:o(e.path),onNavigate:n,run:s,uploadRun:c},e.path))}),e?.warnings.map(e=>(0,U.jsxs)(`p`,{className:`flex gap-1.5 px-2 py-1 text-[11px] leading-snug text-text-subtle`,children:[(0,U.jsx)(oe,{className:`mt-0.5 size-3 shrink-0`}),(0,U.jsx)(`span`,{children:e})]},e)),l]})}var q=new Intl.Collator(void 0,{numeric:!0,sensitivity:`base`});function Bt(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=q.compare(B(t.name),B(n.name));return e===0?q.compare(t.name,n.name):e}case`name`:return q.compare(t.name,n.name)}}function Vt(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=Bt(n.key,e,t);return(i===0?q.compare(e.name,t.name):i)*a})}function Ht(e){return e.reduce((e,t)=>e+(t.type===`file`?t.size??0:0),0)}function Ut({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=Ht(r);e>0&&i.push(Se(e))}return(0,U.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,U.jsx)(`span`,{className:`ml-auto`,children:`Listing capped — narrow the filter to see the rest.`})]})}var Wt=3;function Gt({crumbs:e,onNavigate:t,className:n,sep:r}){let{run:i,prompts:a}=Xe(r);if(e.length===0)return(0,U.jsx)(`div`,{className:n});let o=e.length>Wt+2,s=o?e.slice(0,1):e,c=o?e.slice(1,e.length-Wt):[],u=o?e.slice(e.length-Wt):[];return(0,U.jsxs)(`nav`,{"aria-label":`Path`,className:E(`flex min-w-0 items-center gap-0.5 text-xs`,n),children:[s.map(n=>(0,U.jsxs)(`span`,{className:`flex shrink-0 items-center gap-0.5`,children:[(0,U.jsx)(Kt,{crumb:n,last:!o&&n===e[e.length-1],onNavigate:t,run:i}),(0,U.jsx)(y,{className:`size-3 shrink-0 text-text-subtle`})]},n.path)),o&&(0,U.jsxs)(Ge,{children:[(0,U.jsx)(Qe,{asChild:!0,children:(0,U.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,U.jsx)(l,{className:`size-3.5`})})}),(0,U.jsx)(Ie,{align:`start`,className:`max-h-72 overflow-y-auto`,children:c.map(e=>(0,U.jsx)(Re,{onClick:()=>t(e.path),children:e.name},e.path))})]}),o&&(0,U.jsx)(y,{className:`size-3 shrink-0 text-text-subtle`}),u.map((e,n)=>(0,U.jsxs)(`span`,{className:`flex min-w-0 items-center gap-0.5`,children:[(0,U.jsx)(Kt,{crumb:e,last:n===u.length-1,onNavigate:t,run:i}),n<u.length-1&&(0,U.jsx)(y,{className:`size-3 shrink-0 text-text-subtle`})]},e.path)),a]})}function Kt({crumb:e,last:t,onNavigate:n,run:r}){let i=L({targetDir:e.path,run:r});return(0,U.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 J=[{key:`name`,label:`Name`},{key:`size`,label:`Size`},{key:`modified`,label:`Modified`},{key:`kind`,label:`Kind`}],qt=[{dir:`asc`,label:`Ascending`},{dir:`desc`,label:`Descending`}];function Jt(e){return J.find(t=>t.key===e)?.label??e}function Yt(e){return qt.find(t=>t.dir===e)?.label??e}function Y(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 Xt({coarse:e}){let t=N(e=>e.sort),n=N(e=>e.setPrefs),r=`Sort`,i=`${r}: ${Jt(t.key)}, ${Yt(t.dir)}`;return(0,U.jsxs)(Ge,{children:[(0,U.jsx)(Qe,{asChild:!0,children:(0,U.jsx)(`button`,{type:`button`,"aria-label":r,title:i,className:Y(e),children:(0,U.jsx)(ne,{className:`size-4`})})}),(0,U.jsxs)(Ie,{align:`end`,children:[(0,U.jsx)(nt,{children:`Sort by`}),(0,U.jsx)(Le,{value:t.key,onValueChange:e=>n({sort:{key:e,dir:t.dir}}),children:J.map(({key:e,label:t})=>(0,U.jsx)(Je,{value:e,children:t},e))}),(0,U.jsx)(qe,{}),(0,U.jsx)(nt,{children:`Order`}),(0,U.jsx)(Le,{value:t.dir,onValueChange:e=>n({sort:{key:t.key,dir:e}}),children:qt.map(({dir:e,label:t})=>(0,U.jsx)(Je,{value:e,children:t},e))})]})]})}function X({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=N(e=>e.sort),d=N(e=>e.setPrefs);return c===0?(0,U.jsxs)(Be,{children:[(0,U.jsx)(M,{onClick:()=>i.startCreate(`new-file`),children:`New File`}),(0,U.jsx)(M,{onClick:()=>i.startCreate(`new-folder`),children:`New Folder`}),(0,U.jsx)(j,{}),(0,U.jsx)(M,{disabled:!n,onClick:()=>i.paste(),children:`Paste`}),(0,U.jsx)(j,{}),(0,U.jsx)(M,{onClick:()=>i.openUploadPicker(),children:`Upload Files…`}),i.supportsFolderUpload&&(0,U.jsx)(M,{onClick:()=>i.openUploadFolderPicker(),children:`Upload Folder…`}),(0,U.jsx)(j,{}),(0,U.jsx)(M,{onClick:()=>i.openInTerminal(),children:`Open in Terminal`}),(0,U.jsx)(j,{}),(0,U.jsxs)(ze,{children:[(0,U.jsx)(ct,{children:`Sort by`}),(0,U.jsxs)(He,{children:[(0,U.jsx)(Ve,{value:u.key,onValueChange:e=>d({sort:{key:e,dir:u.dir}}),children:J.map(({key:e,label:t})=>(0,U.jsx)(Fe,{value:e,children:t},e))}),(0,U.jsx)(j,{}),(0,U.jsx)(Ve,{value:u.dir,onValueChange:e=>d({sort:{key:u.key,dir:e}}),children:qt.map(({dir:e,label:t})=>(0,U.jsx)(Fe,{value:e,children:t},e))})]})]}),(0,U.jsx)(j,{}),(0,U.jsx)(M,{onClick:()=>i.copyPath([t]),children:`Copy Path`})]}):(0,U.jsxs)(Be,{children:[o&&(o.type===`directory`||z(o.name))&&(0,U.jsx)(M,{onClick:()=>i.openEntry(o),children:`Open`}),s&&o&&!a&&(0,U.jsx)(M,{onClick:()=>i.openInNewWindow(o),children:`Open in New Window`}),s&&o&&(0,U.jsx)(M,{onClick:()=>i.openInTerminal(o),children:`Open in Terminal`}),(0,U.jsx)(j,{}),(0,U.jsxs)(M,{onClick:()=>i.cut(e),children:[`Cut`,l]}),(0,U.jsxs)(M,{onClick:()=>i.copy(e),children:[`Copy`,l]}),s&&o&&(0,U.jsx)(M,{disabled:!n,onClick:()=>i.paste(o.path),children:`Paste`}),(0,U.jsx)(j,{}),o&&(0,U.jsx)(M,{onClick:()=>i.startRename(o),children:`Rename`}),(0,U.jsxs)(M,{onClick:()=>i.trash(e),children:[`Move to Trash`,l]}),(0,U.jsx)(M,{variant:`destructive`,onClick:()=>i.confirmPermanentDelete(e),children:`Delete permanently`}),(0,U.jsx)(j,{}),(0,U.jsx)(M,{onClick:()=>i.copyPath(e.map(e=>e.path)),children:`Copy Path`}),(0,U.jsx)(M,{onClick:()=>i.copyName(e.map(e=>e.name)),children:`Copy Name`}),e.some(e=>e.type===`file`)&&(0,U.jsx)(M,{onClick:()=>i.download(e),children:`Download`}),s&&o&&(0,U.jsx)(M,{onClick:()=>i.togglePin(o.path,o.name),children:r(o.path)?`Unpin from Sidebar`:`Pin to Sidebar`}),o&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(j,{}),(0,U.jsx)(M,{onClick:()=>i.showProperties(o),children:`Properties`})]})]})}function Zt(e){let{entry:t,dragPaths:n,run:r,springLoad:i,origin:a=`explorer`,projectName:o,extraData:s,onDragStarted:c,onFiles:l}=e,u=Ye({paths:n,origin:a,projectName:o,extraData:s,onDragStarted:c}),d=L({targetDir:t.type===`directory`?t.path:null,run:r,springLoad:t.type===`directory`?i:void 0,onFiles:l});return{props:(0,H.useMemo)(()=>({...u,...d.handlers}),[u,d.handlers]),isDropTarget:d.isOver}}function Qt(e){return e.type===`directory`||z(e.name)?`open`:`sheet`}function $t(e){return e.startsWith(`on`)&&e.length>2&&e[2]===e[2]?.toUpperCase()}function en(e,t){return n=>{e?.(n),t?.(n)}}function tn(e,t){if(!e)return t;let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];if($t(e)&&typeof t==`function`&&typeof r==`function`){n[e]=en(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 nn({entry:e,selected:t,currentDir:n,hasClipboard:r,isPinned:i,actions:a,rowHeight:o,onSelect:s,onOpen:c}){let l=Zt({entry:e,dragPaths:[e.path],run:a.transferInto,springLoad:s,onFiles:a.uploadInto});return(0,U.jsxs)(F,{children:[(0,U.jsx)(A,{asChild:!0,children:(0,U.jsx)(rn,{entry:e,selected:t,rowHeight:o,onSelect:s,onOpen:c,dnd:l.props,dropActive:l.isDropTarget})}),(0,U.jsx)(X,{targets:[e],currentDir:n,hasClipboard:r,isPinned:i,actions:a})]})}var rn=(0,H.forwardRef)(function({entry:e,selected:t,rowHeight:n,onSelect:r,onOpen:i,dnd:a,dropActive:o,...s},c){let l=R(r),u=D(),{setOpen:d}=(0,H.useContext)(Oe),f=()=>{r(),!(!u||e.type===`directory`)&&(Qt(e)===`open`?i():d(!0))};return(0,U.jsxs)(`div`,{ref:c,...tn({...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,U.jsx)(W,{name:e.name,kind:e.kind,className:`size-4 shrink-0`}),(0,U.jsx)(`span`,{className:E(`flex-1 truncate`,t?`text-text`:`text-text-2`),children:e.name}),e.type===`directory`&&(0,U.jsx)(`span`,{className:`text-text-subtle`,children:`›`})]})});function an({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,H.useRef)(null);I(h);let g=m?48:u,_=Ke({count:t.length,getScrollElement:()=>h.current,estimateSize:()=>g,overscan:8}),v=L({targetDir:e,run:l.transferInto,onFiles:l.uploadInto,disabled:m});return(0,U.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,U.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,U.jsx)(`p`,{className:`p-2 text-xs text-text-subtle`,children:`Loading…`}),r&&(0,U.jsx)(`p`,{className:`p-2 text-xs text-error`,children:r}),!n&&!r&&t.length===0&&(0,U.jsx)(`p`,{className:`p-2 text-xs text-text-subtle`,children:`Empty`}),(0,U.jsx)(`div`,{className:`relative w-full`,style:{height:_.getTotalSize()},children:_.getVirtualItems().map(e=>{let n=t[e.index],r=n.path===i;return(0,U.jsx)(`div`,{className:`absolute left-0 top-0 w-full`,style:{transform:`translateY(${e.start}px)`},children:(0,U.jsx)(nn,{entry:n,selected:r,currentDir:o,hasClipboard:s,isPinned:c,actions:l,rowHeight:g,onSelect:()=>{p(),d(n)},onOpen:()=>f(n)})},n.path)})})]})})}function on({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,U.jsxs)(F,{children:[(0,U.jsx)(A,{asChild:!0,children:(0,U.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,U.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,U.jsx)(x,{className:`size-4`}),` Back`]}),p&&(0,U.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,U.jsx)(an,{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,U.jsx)(X,{targets:[],currentDir:s.path,hasClipboard:c,isPinned:l,actions:u})]})}var sn=0,cn=[];function ln(){return new Promise(e=>{let t=!1,n=()=>{sn++,e(()=>{if(t)return;t=!0,sn--;let e=cn.shift();e&&e()})};sn<24?n():cn.push(n)})}function un({entry:e,size:t,className:n}){let[r,i]=(0,H.useState)(null),[a,o]=(0,H.useState)(!1),s=(0,H.useRef)(null),c=(0,H.useRef)(null);return(0,H.useEffect)(()=>{i(null),o(!1)},[e.path]),(0,H.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 ln(),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,H.useEffect)(()=>()=>{c.current&&URL.revokeObjectURL(c.current)},[]),a||!r?(0,U.jsx)(`div`,{ref:s,className:E(`flex items-center justify-center`,n),style:{width:t,height:t},children:(0,U.jsx)(W,{name:e.name,kind:e.kind,className:`size-1/2`})}):(0,U.jsx)(`div`,{ref:s,className:E(`flex items-center justify-center overflow-hidden`,n),style:{width:t,height:t},children:(0,U.jsx)(`img`,{src:r,alt:``,loading:`lazy`,className:`max-h-full max-w-full rounded object-contain`,onError:()=>o(!0)})})}function dn({entry:e,onOpen:t}){return e?(0,U.jsxs)(`div`,{className:`flex h-full min-w-0 flex-col items-center gap-3 overflow-y-auto p-4 text-center`,children:[(0,U.jsx)(`div`,{className:`flex h-24 w-24 shrink-0 items-center justify-center`,children:e.type!==`directory`&&lt(e.name)===`image`?(0,U.jsx)(un,{entry:e,size:96}):(0,U.jsx)(W,{name:e.name,kind:e.kind,className:`size-16`})}),(0,U.jsx)(`p`,{className:`w-full truncate text-sm font-medium text-text`,title:e.name,children:e.name}),(0,U.jsxs)(`dl`,{className:`w-full space-y-1 text-left text-xs text-text-2`,children:[(0,U.jsxs)(`div`,{className:`flex justify-between gap-2`,children:[(0,U.jsx)(`dt`,{className:`text-text-subtle`,children:`Kind`}),(0,U.jsx)(`dd`,{className:`truncate`,children:e.type===`directory`?`Folder`:B(e.name)||`File`})]}),e.type!==`directory`&&(0,U.jsxs)(`div`,{className:`flex justify-between gap-2`,children:[(0,U.jsx)(`dt`,{className:`text-text-subtle`,children:`Size`}),(0,U.jsx)(`dd`,{children:Se(e.size)})]}),(0,U.jsxs)(`div`,{className:`flex justify-between gap-2`,children:[(0,U.jsx)(`dt`,{className:`text-text-subtle`,children:`Modified`}),(0,U.jsx)(`dd`,{className:`truncate`,children:Ce(e.modified)})]})]}),z(e.name)&&(0,U.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,U.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 fn(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 pn(e,t,n){let[r,i]=(0,H.useReducer)(fn,{columns:[],staleControllers:[]}),a=(0,H.useRef)(new Set);(0,H.useEffect)(()=>{i({type:`sync`,paths:e,lastEntries:t,lastLoading:n,makeAbort:()=>new AbortController})},[e.join(`\0`),t,n]),(0,H.useEffect)(()=>{for(let e of r.staleControllers)e.abort()},[r.staleControllers]);let o=(0,H.useRef)(r.columns);return o.current=r.columns,(0,H.useEffect)(()=>()=>{for(let e of o.current)e.abort.abort()},[]),(0,H.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 mn=720;function hn({slice:e,entries:t,actions:n,selection:r,hasClipboard:i,isPinned:a,nav:o,backgroundLongPress:s,rowHeight:c}){let{columns:l}=pn((0,H.useMemo)(()=>e.breadcrumbs.length>0?e.breadcrumbs.map(e=>e.path):[e.path],[e.breadcrumbs,e.path]),t,e.loading),u=D(),d=(0,H.useRef)(null);I(d);let[f,p]=(0,H.useState)(l.length-1),[m,h]=(0,H.useState)(0),g=(0,H.useRef)(l.length);(0,H.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,H.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,H.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>=mn;return u?(0,U.jsx)(on,{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,U.jsxs)(F,{children:[(0,U.jsx)(A,{asChild:!0,children:(0,U.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,U.jsx)(an,{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,U.jsx)(`div`,{className:`min-w-[240px] flex-1 border-l border-border bg-panel-2/30`,children:(0,U.jsx)(dn,{entry:_,onOpen:x})})]})}),(0,U.jsx)(X,{targets:[],currentDir:e.path,hasClipboard:i,isPinned:a,actions:n})]})}function Z(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 gn({slice:e,entries:t,actions:n,selection:r,nav:i}){return(0,H.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=Z(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 _n(e,t){let n=D(),r=P(e=>e.selectMode),{setOpen:i}=(0,H.useContext)(Oe);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),Qt(a)===`open`?e.openEntry(a):i(!0),!0):!1}}function vn({initial:e,error:t,onCommit:n,onCancel:r,className:i}){let[a,o]=(0,H.useState)(e),s=(0,H.useRef)(null);return(0,H.useEffect)(()=>{let t=s.current;if(!t)return;t.focus();let n=e.lastIndexOf(`.`);n>0?t.setSelectionRange(0,n):t.select()},[e]),(0,U.jsxs)(`div`,{className:`relative flex-1 min-w-0`,children:[(0,U.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,U.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,H.memo)(function(e){let{entry:t,currentDir:n,hasClipboard:r,isPinned:i,actions:a,menuTargets:o}=e,s=Zt({entry:t,dragPaths:(0,H.useMemo)(()=>o.map(e=>e.path),[o]),run:a.transferInto,onFiles:a.uploadInto});return(0,U.jsxs)(F,{children:[(0,U.jsx)(A,{asChild:!0,children:(0,U.jsx)(bn,{...e,dnd:s.props,dropActive:s.isDropTarget})}),(0,U.jsx)(X,{targets:o,currentDir:n,hasClipboard:r,isPinned:i,actions:a})]})}),bn=(0,H.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 _=R(()=>{t||s.selectOnly(e.path)}),{isMobile:v,selectMode:y,handleTap:b}=_n(o,s),x=e.type!==`directory`&&lt(e.name)===`image`;return(0,U.jsxs)(`div`,{ref:g,...tn({...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,U.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,U.jsx)(de,{className:`size-3.5`})}),(0,U.jsx)(`div`,{className:`flex h-12 w-12 shrink-0 items-center justify-center`,children:x?(0,U.jsx)(un,{entry:e,size:48}):(0,U.jsx)(W,{name:e.name,kind:e.kind,className:`size-12`})}),i?(0,U.jsx)(vn,{initial:e.name,error:c,onCommit:e=>void o.commitInline(e),onCancel:o.cancelInline}):(0,U.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,H.useRef)(null);I(l);let u=D(),[d,f]=(0,H.useState)(u?Tn:1);(0,H.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=Ke({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,H.useEffect)(()=>{h>=0&&p.scrollToIndex(h,{align:`auto`})},[h]);let g=(0,H.useMemo)(()=>Z(e,t),[e,t]),_=e.inlineEdit?.kind===`new-file`||e.inlineEdit?.kind===`new-folder`,v=L({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,U.jsxs)(F,{children:[(0,U.jsx)(A,{asChild:!0,children:(0,U.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,U.jsx)(`div`,{className:`mb-2 flex flex-col items-center gap-1 p-2`,style:u?void 0:{width:xn},children:(0,U.jsx)(vn,{initial:``,error:i,onCommit:e=>void n.commitInline(e),onCancel:n.cancelInline})}),(0,U.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,U.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,U.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,U.jsx)(`p`,{className:`p-3 text-xs text-text-subtle`,children:e.filter?`No entries match the filter.`:`This folder is empty.`})]})}),(0,U.jsx)(X,{targets:[],currentDir:e.path,hasClipboard:a,isPinned:o,actions:n})]})}var Dn=(0,H.memo)(function(e){let{entry:t,currentDir:n,hasClipboard:r,isPinned:i,actions:a,menuTargets:o}=e,s=Zt({entry:t,dragPaths:(0,H.useMemo)(()=>o.map(e=>e.path),[o]),run:a.transferInto,onFiles:a.uploadInto});return(0,U.jsxs)(F,{children:[(0,U.jsx)(A,{asChild:!0,children:(0,U.jsx)(On,{...e,dnd:s.props,dropActive:s.isDropTarget})}),(0,U.jsx)(X,{targets:o,currentDir:n,hasClipboard:r,isPinned:i,actions:a})]})}),On=(0,H.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 _=R(()=>{t||s.selectOnly(e.path)}),{isMobile:v,selectMode:y,handleTap:b}=_n(o,s);return(0,U.jsxs)(`div`,{ref:g,...tn({...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,U.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,U.jsx)(de,{className:`size-3.5`})}),(0,U.jsx)(W,{name:e.name,kind:e.kind,className:`size-4`}),i?(0,U.jsx)(vn,{initial:e.name,error:c,onCommit:e=>void o.commitInline(e),onCancel:o.cancelInline}):(0,U.jsx)(`span`,{className:E(`flex-1 truncate`,t?`text-text`:`text-text-2`),children:e.name}),(0,U.jsx)(`span`,{className:`w-20 shrink-0 text-right tabular-nums text-text-subtle`,children:e.type===`directory`?``:Se(e.size)}),(0,U.jsx)(`span`,{className:`hidden w-24 shrink-0 text-right text-text-subtle sm:inline`,children:ye(e.modified)}),(0,U.jsx)(`span`,{className:`hidden w-16 shrink-0 truncate text-right text-text-subtle md:inline`,children:e.type===`directory`?`Folder`:B(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=J.map(e=>({...e,className:kn[e.key]}));function jn({slice:e,entries:t,actions:n,selection:r,inlineError:i,hasClipboard:a,isPinned:o,rowHeight:l,backgroundLongPress:u}){let d=N(e=>e.sort),f=N(e=>e.setPrefs),p=ve(e=>e.clipboard?.operation===`cut`?e.clipboard.paths:null),m=(0,H.useRef)(null);I(m);let h=at(),g=Ue(),_=Ke({count:t.length,getScrollElement:()=>m.current,estimateSize:()=>l,overscan:12}),v=e.anchor?t.findIndex(t=>t.path===e.anchor):-1;(0,H.useEffect)(()=>{v>=0&&_.scrollToIndex(v,{align:`auto`})},[v]);let y=(0,H.useMemo)(()=>Z(e,t),[e,t]),b=e.inlineEdit?.kind===`new-file`||e.inlineEdit?.kind===`new-folder`,x=L({targetDir:e.path,run:n.transferInto,onFiles:n.uploadInto}),S=e=>f({sort:{key:e,dir:d.key===e&&d.dir===`asc`?`desc`:`asc`}});return(0,U.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,U.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,U.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,d.key===e.key&&(d.dir===`asc`?(0,U.jsx)(s,{className:`size-3`}):(0,U.jsx)(c,{className:`size-3`}))]},e.key))}),(0,U.jsxs)(F,{children:[(0,U.jsx)(A,{asChild:!0,children:(0,U.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`),...u,...x.handlers,children:[b&&(0,U.jsxs)(`div`,{className:`flex items-center gap-2 px-2`,style:{height:l},children:[(0,U.jsx)(`span`,{className:`size-4 shrink-0`}),(0,U.jsx)(vn,{initial:``,error:i,onCommit:e=>void n.commitInline(e),onCancel:n.cancelInline})]}),(0,U.jsx)(`div`,{className:`relative w-full`,style:{height:_.getTotalSize()},children:_.getVirtualItems().map(s=>{let c=t[s.index];return(0,U.jsx)(`div`,{className:E(`absolute left-0 top-0 w-full`,h.id===`macos`&&s.index%2==1&&`bg-panel-2/40`),style:{transform:`translateY(${s.start}px)`},children:(0,U.jsx)(Dn,{entry:c,currentDir:e.path,selected:e.selection.has(c.path),focused:e.anchor===c.path,cut:p?.includes(c.path)===!0,renaming:e.inlineEdit?.kind===`rename`&&e.inlineEdit.path===c.path,height:l,menuTargets:e.selection.has(c.path)?y:[c],actions:n,selection:r,hasClipboard:a,isPinned:o,inlineError:i})},c.path)})}),t.length===0&&!e.loading&&!b&&(0,U.jsx)(`p`,{className:`p-3 text-xs text-text-subtle`,children:e.filter?`No entries match the filter.`:`This folder is empty.`})]})}),(0,U.jsx)(X,{targets:[],currentDir:e.path,hasClipboard:a,isPinned:o,actions:n})]})]})}var Mn={list:jn,icons:En,columns:hn},Nn=Object.keys(Mn);function Pn(e){return Mn[e]??jn}var Fn={list:_,icons:r,columns:ce},In={list:`List view`,icons:`Icons view`,columns:`Column view`};function Ln({windowId:e,slice:t,nav:n,actions:r}){let i=N(e=>e.patch),a=N(e=>e.showHidden),s=N(e=>e.viewMode),c=N(e=>e.setPrefs),[l,u]=(0,H.useState)(!1),[f,p]=(0,H.useState)(t.path);(0,H.useEffect)(()=>p(t.path),[t.path]);let h=Ue();return(0,U.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,U.jsx)(`button`,{type:`button`,"aria-label":`Back`,title:`Back`,disabled:!n.canGoBack,onClick:n.back,className:Y(h),children:(0,U.jsx)(x,{className:`size-4`})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":`Forward`,title:`Forward`,disabled:!n.canGoForward,onClick:n.forward,className:Y(h),children:(0,U.jsx)(le,{className:`size-4`})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":`Up one level`,title:`Up`,disabled:!t.parent,onClick:n.up,className:Y(h),children:(0,U.jsx)(g,{className:`size-4`})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":`Refresh`,title:`Refresh`,onClick:n.refresh,className:Y(h),children:(0,U.jsx)(d,{className:E(`size-4`,t.loading&&`animate-spin`)})}),(0,U.jsxs)(`div`,{className:`flex min-w-[8rem] flex-1 items-center gap-1 rounded border border-border bg-panel px-1`,children:[l?(0,U.jsx)(`input`,{autoFocus:!0,"aria-label":`Path`,value:f,onChange:e=>p(e.target.value),onBlur:()=>u(!1),onKeyDown:e=>{e.stopPropagation(),e.key===`Enter`?(n.go(f.trim()),u(!1)):e.key===`Escape`&&(p(t.path),u(!1))},className:`min-w-0 flex-1 bg-transparent py-1 font-mono text-xs text-text outline-none`}):(0,U.jsx)(Gt,{crumbs:t.breadcrumbs,onNavigate:n.go,sep:t.sep,className:`flex-1 overflow-hidden py-0.5`}),(0,U.jsx)(`button`,{type:`button`,"aria-label":l?`Show breadcrumb`:`Edit path`,title:l?`Show breadcrumb`:`Edit path`,onClick:()=>u(e=>!e),className:Y(h),children:(0,U.jsx)(m,{className:`size-3.5`})})]}),(0,U.jsxs)(`div`,{className:`flex items-center gap-1 rounded border border-border bg-panel px-1`,children:[(0,U.jsx)(v,{className:`size-3.5 shrink-0 text-text-subtle`}),(0,U.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,U.jsx)(`button`,{type:`button`,"aria-label":`Clear filter`,onClick:()=>i(e,{filter:``}),className:Y(h),children:(0,U.jsx)(o,{className:`size-3.5`})})]}),Nn.length>1&&Nn.map(e=>{let t=Fn[e];return(0,U.jsx)(`button`,{type:`button`,"aria-label":In[e],title:In[e],"aria-pressed":s===e,onClick:()=>c({viewMode:e}),className:E(Y(h),s===e&&`bg-accent-wash text-primary`),children:(0,U.jsx)(t,{className:`size-4`})},e)}),(0,U.jsx)(Xt,{coarse:h}),r.supportsFolderUpload?(0,U.jsxs)(Ge,{children:[(0,U.jsx)(Qe,{asChild:!0,children:(0,U.jsx)(`button`,{type:`button`,"aria-label":`Upload`,title:`Upload`,className:Y(h),children:(0,U.jsx)(b,{className:`size-4`})})}),(0,U.jsxs)(Ie,{align:`end`,children:[(0,U.jsx)(Re,{onClick:()=>r.openUploadPicker(),children:`Upload Files…`}),(0,U.jsx)(Re,{onClick:()=>r.openUploadFolderPicker(),children:`Upload Folder…`})]})]}):(0,U.jsx)(`button`,{type:`button`,"aria-label":`Upload`,title:`Upload`,onClick:()=>r.openUploadPicker(),className:Y(h),children:(0,U.jsx)(b,{className:`size-4`})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":a?`Hide hidden files`:`Show hidden files`,title:a?`Hide hidden files`:`Show hidden files`,"aria-pressed":a,onClick:()=>c({showHidden:!a}),className:E(Y(h),a&&`bg-accent-wash text-primary`),children:a?(0,U.jsx)(S,{className:`size-4`}):(0,U.jsx)(ue,{className:`size-4`})})]})}var Rn={list:_,icons:r,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=N(e=>e.viewMode),o=N(e=>e.sort),s=N(e=>e.showHidden),c=N(e=>e.setPrefs),l=Z(n,i);return(0,U.jsxs)(Ae,{open:e,onClose:t,className:`p-2`,children:[(0,U.jsx)(ke,{children:`View`}),(0,U.jsx)(`div`,{className:`flex gap-1 px-2 pb-2`,children:Nn.map(e=>{let n=Rn[e];return(0,U.jsxs)(`button`,{type:`button`,"aria-pressed":a===e,onClick:()=>{c({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,U.jsx)(n,{className:`size-4`}),zn[e]]},e)})}),(0,U.jsx)(De,{}),(0,U.jsx)(ke,{children:`Sort by`}),(0,U.jsx)(`div`,{className:`flex flex-wrap gap-1 px-2 pb-2`,children:J.map(({key:e,label:n})=>(0,U.jsxs)(`button`,{type:`button`,"aria-pressed":o.key===e,onClick:()=>{c({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,U.jsx)(De,{}),(0,U.jsxs)(O,{onClick:()=>c({showHidden:!s}),children:[s?(0,U.jsx)(S,{className:`size-4`}):(0,U.jsx)(ue,{className:`size-4`}),s?`Hide hidden files`:`Show hidden files`]}),(0,U.jsx)(De,{}),(0,U.jsxs)(O,{variant:`destructive`,disabled:l.length===0,onClick:()=>r.confirmPermanentDelete(l),children:[(0,U.jsx)(fe,{className:`size-4`}),`Delete permanently`,l.length>1?` (${l.length})`:``]}),(0,U.jsxs)(O,{onClick:()=>r.showProperties(Bn(n)),children:[(0,U.jsx)(ae,{className:`size-4`}),`Properties of this folder`]})]})}function Q({icon:e,label:t,onClick:n,disabled:r,destructive:i}){return(0,U.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,U.jsx)(e,{className:`size-5`}),(0,U.jsx)(`span`,{className:`truncate`,children:t})]})}function Hn({slice:e,nav:t,actions:n,entries:r,hasClipboard:i}){let a=P(e=>e.selectMode),s=P(e=>e.setSelectMode),[c,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(!1),m=r.filter(t=>e.selection.has(t.path));return a?(0,U.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 border-t border-border px-1 py-1`,children:[(0,U.jsx)(Q,{icon:o,label:`Cancel`,onClick:()=>{s(!1)}}),(0,U.jsxs)(`span`,{className:`px-1 text-xs text-text-subtle`,children:[m.length,` selected`]}),(0,U.jsx)(`div`,{className:`flex-1`}),(0,U.jsx)(Q,{icon:ee,label:`Cut`,disabled:m.length===0,onClick:()=>n.cut(m)}),(0,U.jsx)(Q,{icon:te,label:`Copy`,disabled:m.length===0,onClick:()=>n.copy(m)}),(0,U.jsx)(Q,{icon:fe,label:`Trash`,disabled:m.length===0,destructive:!0,onClick:()=>n.trash(m)}),(0,U.jsx)(Q,{icon:se,label:`Download`,disabled:!m.some(e=>e.type===`file`),onClick:()=>n.download(m)}),m.length===1&&(0,U.jsx)(Q,{icon:ae,label:`Info`,onClick:()=>n.showProperties(m[0])})]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 border-t border-border px-1 py-1`,children:[(0,U.jsx)(Q,{icon:x,label:`Back`,disabled:!t.canGoBack,onClick:t.back}),(0,U.jsx)(Q,{icon:ie,label:`New`,onClick:()=>d(!0)}),(0,U.jsx)(Q,{icon:re,label:`Paste`,disabled:!i,onClick:()=>n.paste()}),(0,U.jsx)(Q,{icon:de,label:`Select`,onClick:()=>s(!0)}),(0,U.jsx)(Q,{icon:l,label:`More`,onClick:()=>p(!0)})]}),(0,U.jsxs)(Ae,{open:c,onClose:()=>d(!1),className:`p-2`,children:[(0,U.jsxs)(O,{onClick:()=>n.startCreate(`new-file`),children:[(0,U.jsx)(C,{className:`size-4`}),` New File`]}),(0,U.jsxs)(O,{onClick:()=>n.startCreate(`new-folder`),children:[(0,U.jsx)(u,{className:`size-4`}),` New Folder`]}),(0,U.jsxs)(O,{onClick:()=>{d(!1),n.openUploadPicker()},children:[(0,U.jsx)(b,{className:`size-4`}),` Upload Files…`]})]}),(0,U.jsx)(Vn,{open:f,onClose:()=>p(!1),slice:e,actions:n,entries:r})]})}function Un(e){return e.breadcrumbs[e.breadcrumbs.length-1]?.name??e.path}function Wn({slice:e,onClose:t}){return(0,U.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,U.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[15px] font-semibold text-text`,children:Un(e)}),(0,U.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,U.jsx)(o,{className:`size-5`})})]})}var Gn=`size-4 shrink-0 text-text-subtle`,Kn={fixed:w,removable:i,network:ut,unknown:w};function qn(){return(0,U.jsx)(W,{name:``,kind:`directory`,className:Gn})}function $({label:e,path:t,active:n,icon:r,onNavigate:i}){return(0,U.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,U.jsx)(`span`,{className:`truncate`,children:e})]})}function Jn({title:e,children:t}){return(0,U.jsxs)(`div`,{className:`pb-2`,children:[(0,U.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=V(e=>e.pins),s=e=>e===r;return(0,U.jsx)(Ae,{open:e,onClose:t,zIndex:65,className:`p-1`,children:(0,U.jsxs)(`div`,{className:`max-h-[70vh] overflow-y-auto px-1 pb-2`,children:[o.length>0&&(0,U.jsx)(Jn,{title:`Pinned`,children:o.map(e=>(0,U.jsx)($,{label:e.name,path:e.path,icon:(0,U.jsx)(f,{className:Gn}),active:s(e.path),onNavigate:a},e.path))}),n&&n.pinned.length>0&&(0,U.jsx)(Jn,{title:i.pinned,children:n.pinned.map(e=>(0,U.jsx)($,{label:e.name,path:e.path,icon:qn(),active:s(e.path),onNavigate:a},e.path))}),n&&(0,U.jsxs)(Jn,{title:i.known,children:[(0,U.jsx)($,{label:i.home,path:n.homedir,icon:qn(),active:s(n.homedir),onNavigate:a}),n.knownFolders.map(e=>(0,U.jsx)($,{label:e.name,path:e.path,icon:qn(),active:s(e.path),onNavigate:a},e.path))]}),n&&n.drives.length>0&&(0,U.jsx)(Jn,{title:i.drives,children:n.drives.map(e=>{let t=Kn[e.kind];return(0,U.jsx)($,{label:e.label?`${e.label} (${e.name})`:e.name,path:e.path,icon:(0,U.jsx)(t,{className:Gn}),active:s(e.path),onNavigate:a},e.path)})})]})})}function Xn({className:e}){return(0,U.jsx)(W,{name:``,kind:`directory`,className:e})}var Zn={fixed:w,removable:i,network:ut,unknown:w};function Qn({chip:e,active:t,onNavigate:n}){let r=e.icon;return(0,U.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,U.jsx)(r,{className:`size-4 shrink-0 text-text-subtle`}),(0,U.jsx)(`span`,{className:`max-w-[9rem] truncate`,children:e.label})]})}function $n({host:e,currentPath:t,onNavigate:n,vocab:r}){let i=V(e=>e.pins),[a,o]=(0,H.useState)(!1);return(0,U.jsxs)(U.Fragment,{children:[(0,U.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:[[...i.map(e=>({key:`pin:${e.path}`,label:e.name,path:e.path,icon:f})),...e?[{key:`home`,label:r.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,U.jsx)(Qn,{chip:e,active:e.path===t,onNavigate:n},e.key)),(0,U.jsx)(`button`,{type:`button`,"aria-label":`All places`,title:`All places`,onClick:()=>o(!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,U.jsx)(l,{className:`size-4`})})]}),(0,U.jsx)(Yn,{open:a,onClose:()=>o(!1),host:e,currentPath:t,vocab:r,onNavigate:e=>{o(!1),n(e)}})]})}function er(e,t,n){let r=(0,H.useRef)(null),i=N(e=>e.patch),a=(0,H.useRef)(t?.path??``);a.current=t?.path??``;let o=(0,H.useRef)(n);o.current=n;let s=(0,H.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 je?{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,H.useEffect)(()=>{if(c)return s(c),()=>r.current?.abort()},[c,n,s]),(0,H.useEffect)(()=>Ne(e=>{e===a.current&&s(e)}),[s]);let l=(0,H.useCallback)((t,n)=>{let r=N.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,H.useCallback)(t=>{let n=N.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,H.useCallback)(()=>u(-1),[u]),f=(0,H.useCallback)(()=>u(1),[u]),p=(0,H.useCallback)(()=>{let t=N.getState().slices[e];t?.parent&&l(t.parent)},[e,l]),m=(0,H.useCallback)(()=>{a.current&&s(a.current)},[s]),h=(t?.historyIndex??0)>0,g=t?t.historyIndex<t.history.length-1:!1;return(0,H.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=N(e=>e.patch),r=(0,H.useRef)(t);r.current=t;let i=(0,H.useRef)({text:``,at:0}),a=(0,H.useCallback)(t=>{let i=N.getState().slices[e];i&&n(e,nr(i,r.current,t))},[e,n]),o=(0,H.useCallback)((t,n)=>{let i=N.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,H.useCallback)(t=>{let n=N.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,H.useCallback)((e,t)=>a({type:`click`,path:e,shift:t.shiftKey,ctrl:t.ctrlKey||t.metaKey}),[a]),l=(0,H.useCallback)(e=>a({type:`click`,path:e}),[a]),u=(0,H.useCallback)(()=>a({type:`select-all`}),[a]),d=(0,H.useCallback)(()=>a({type:`clear`}),[a]),f=(0,H.useCallback)((e,t)=>a({type:`set`,paths:e,anchor:t}),[a]);return(0,H.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=N(e=>e.ensure);(0,H.useEffect)(()=>r(e,t),[r,e,t]);let i=N(t=>t.slices[e]),a=N(e=>e.showHidden),o=N(e=>e.viewMode),s=N(e=>e.sort),{host:c}=st(),l=ve(e=>(e.clipboard?.paths.length??0)>0),u=V(e=>e.isPinned),d=Ue(),f=at(),m=er(e,i,a),{actions:h,dialogs:g}=kt(e,i,m,c?.platform),_=(0,H.useMemo)(()=>i?Vt(i.entries,i.filter,s):[],[i?.entries,i?.filter,s]),v=ar(e,(0,H.useMemo)(()=>_.map(e=>e.path),[_])),y=gn({slice:i,entries:_,actions:h,selection:v,nav:m}),b=R(),x=P(e=>e.close);if(!i)return null;let S=Pn(o),C=n===`sheet`,ee=C?cr:d?sr:or;return(0,U.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,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Wn,{slice:i,onClose:x}),(0,U.jsx)($n,{host:c,currentPath:i.path,onNavigate:m.go,vocab:f.vocab})]}):(0,U.jsx)(Ln,{windowId:e,slice:i,nav:m,actions:h}),i.error&&(0,U.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,U.jsx)(oe,{className:`mt-0.5 size-3.5 shrink-0`}),(0,U.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,U.jsx)(`p`,{className:`break-words`,children:i.error.message}),i.error.hint&&(0,U.jsx)(`p`,{className:`mt-0.5 text-text-2`,children:i.error.hint})]}),c&&(0,U.jsxs)(`button`,{type:`button`,onClick:()=>m.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,U.jsx)(p,{className:`size-3`}),` Go home`]})]}),(0,U.jsx)(Ft,{value:{closed:f.FolderIcon,open:f.FolderOpenIcon},children:(0,U.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[!C&&(0,U.jsx)(zt,{host:c,currentPath:i.path,onNavigate:m.go,vocab:f.vocab}),(0,U.jsx)(`div`,{className:`min-w-0 flex-1`,onKeyDown:y,children:(0,U.jsx)(S,{windowId:e,slice:i,entries:_,actions:h,selection:v,inlineError:g.inlineError,hasClipboard:l,isPinned:u,rowHeight:ee,nav:m,backgroundLongPress:b})})]})}),C?(0,U.jsx)(Hn,{slice:i,nav:m,actions:h,entries:_,hasClipboard:l}):(0,U.jsx)(Ut,{entries:_,selection:i.selection,truncated:i.truncated}),(0,U.jsx)(et,{dialogs:g,platform:c?.platform,sep:i.sep})]})}export{lr as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import"./icons-DQjqk0lJ.js";import{t as r}from"./explorer-body-RTRXIniK.js";import"./api-client-Jn3njtNw.js";import"./settings-store-tWrnlyEW.js";import"./vendor-mermaid-D6lgjvVE.js";import"./portal-container-context-BarKmT4S.js";import"./panel-store-D20Zuf3i.js";import"./window-store-UC1jJeLM.js";import"./project-framework-store-ViZgce6y.js";import"./tab-store-krAuHQ6_.js";import"./context-menu-C6pIsf83.js";import"./file-store-Ds3qJ4hC.js";import"./use-is-mobile-TkcwP1Gx.js";import"./window-pip-registry-D1oXq-Dq.js";import"./format-file-meta-eKLstbCL.js";import"./button-B9CTrsEf.js";import"./dialog-B84_DJQ8.js";import"./file-icons-wS-OmEVu.js";import"./mobile-bottom-sheet-C3TniEP-.js";import"./use-visual-viewport-Lp878uzs.js";import"./fs-api-orca76dV.js";import{Ot as i,vt as a,yt as o}from"./index-BnH1J2Pm.js";var s=e(t(),1),c=n();function l({id:e,payload:t}){let{host:n,error:l}=o(),u=i(e=>e.discard);(0,s.useEffect)(()=>()=>u(e),[e,u]);let d=(typeof t?.path==`string`?t.path:``)||a()||n?.homedir||``;return d?(0,c.jsx)(r,{windowId:e,initialPath:d}):(0,c.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-xs text-text-2`,children:l?`Could not reach the host: ${l}`:`Loading…`})}export{l as default};
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import"./icons-DQjqk0lJ.js";import{t as r}from"./explorer-body-BpTOY2kH.js";import"./api-client-Jn3njtNw.js";import"./settings-store-tWrnlyEW.js";import"./vendor-mermaid-D6lgjvVE.js";import"./portal-container-context-BarKmT4S.js";import"./panel-store-D20Zuf3i.js";import"./window-store-UC1jJeLM.js";import"./project-framework-store-ViZgce6y.js";import"./tab-store-krAuHQ6_.js";import"./context-menu-C6pIsf83.js";import"./file-store-Ds3qJ4hC.js";import"./use-is-mobile-TkcwP1Gx.js";import"./window-pip-registry-D1oXq-Dq.js";import"./format-file-meta-eKLstbCL.js";import"./button-B9CTrsEf.js";import"./dialog-B84_DJQ8.js";import"./file-icons-wS-OmEVu.js";import"./mobile-bottom-sheet-C3TniEP-.js";import"./use-visual-viewport-Lp878uzs.js";import"./fs-api-orca76dV.js";import{Ot as i,vt as a,yt as o}from"./index-CoTvom0K.js";var s=e(t(),1),c=n();function l({id:e,payload:t}){let{host:n,error:l}=o(),u=i(e=>e.discard);(0,s.useEffect)(()=>()=>u(e),[e,u]);let d=(typeof t?.path==`string`?t.path:``)||a()||n?.homedir||``;return d?(0,c.jsx)(r,{windowId:e,initialPath:d}):(0,c.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-xs text-text-2`,children:l?`Could not reach the host: ${l}`:`Loading…`})}export{l as default};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{At as r,Jn as i,Yn as a,ln as o,qn as s,wr as c}from"./icons-DQjqk0lJ.js";import{t as l}from"./createLucideIcon-DoiEKeJ_.js";import{n as u,s as d}from"./api-client-Jn3njtNw.js";import{t as f}from"./button-B9CTrsEf.js";import{t as p}from"./input-QNG_gTHh.js";import{nn as m}from"./index-BnH1J2Pm.js";var h=l(`power-off`,[[`path`,{d:`M18.36 6.64A9 9 0 0 1 20.77 15`,key:`dxknvb`}],[`path`,{d:`M6.16 6.16a9 9 0 1 0 12.68 12.68`,key:`1x7qb5`}],[`path`,{d:`M12 2v4`,key:`3427ic`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),g=e(t(),1),_=n();function v(){let[e,t]=(0,g.useState)([]),[n,l]=(0,g.useState)(!0),[v,y]=(0,g.useState)(``),[b,x]=(0,g.useState)(!1),[S,C]=(0,g.useState)(``),[w,T]=(0,g.useState)(!1),[E,D]=(0,g.useState)(null),[O,k]=(0,g.useState)(null),A=(0,g.useCallback)(async()=>{try{t(await u.get(`/api/extensions`))}catch(e){console.error(`Failed to load extensions:`,e)}finally{l(!1)}},[]);(0,g.useEffect)(()=>{A()},[A]);let j=async()=>{let e=v.trim();if(e){x(!0);try{await u.post(`/api/extensions/install`,{name:e}),d.success(`Installed ${e}`),y(``),A()}catch(e){d.error(e.message||`Install failed`)}finally{x(!1)}}},M=async e=>{D(e.id);try{await u.patch(`/api/extensions/${e.id}`,{enabled:!e.enabled}),A()}catch(e){d.error(e.message||`Toggle failed`)}finally{D(null)}},N=async e=>{k(e);try{await u.del(`/api/extensions/${e}`),d.success(`Removed ${e}`),A()}catch(e){d.error(e.message||`Remove failed`)}finally{k(null)}};return n?(0,_.jsx)(`div`,{className:`flex items-center justify-center py-8`,children:(0,_.jsx)(o,{className:`size-4 animate-spin text-muted-foreground`})}):(0,_.jsxs)(`div`,{className:`space-y-4`,children:[(0,_.jsxs)(`section`,{className:`space-y-2`,children:[(0,_.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Install Extension`}),(0,_.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,_.jsx)(p,{value:v,onChange:e=>y(e.target.value),onKeyDown:e=>{e.key===`Enter`&&j()},placeholder:`npm package name (e.g. @ppm/ext-myext)`,className:`h-8 text-xs flex-1`}),(0,_.jsxs)(f,{variant:`outline`,size:`sm`,className:`h-8 text-xs px-3 gap-1 cursor-pointer`,disabled:!v.trim()||b,onClick:j,children:[b?(0,_.jsx)(o,{className:`size-3 animate-spin`}):(0,_.jsx)(s,{className:`size-3`}),`Install`]})]}),(0,_.jsx)(`button`,{onClick:()=>T(!w),className:`text-[11px] text-muted-foreground hover:text-foreground transition-colors cursor-pointer`,children:w?`Hide`:`Dev link local extension...`}),w&&(0,_.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,_.jsx)(p,{value:S,onChange:e=>C(e.target.value),placeholder:`Local path (e.g. ./packages/ext-myext)`,className:`h-8 text-xs flex-1`}),(0,_.jsxs)(f,{variant:`outline`,size:`sm`,className:`h-8 text-xs px-3 gap-1 cursor-pointer`,disabled:!S.trim(),onClick:async()=>{try{await u.post(`/api/extensions/dev-link`,{path:S.trim()}),d.success(`Dev-linked successfully`),C(``),A()}catch(e){d.error(e.message||`Dev link failed`)}},children:[(0,_.jsx)(r,{className:`size-3`}),`Link`]})]})]}),(0,_.jsxs)(`section`,{className:`space-y-2`,children:[(0,_.jsxs)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:[`Installed (`,e.length,`)`]}),e.length===0?(0,_.jsx)(`p`,{className:`text-[11px] text-muted-foreground py-4 text-center`,children:`No extensions installed`}):(0,_.jsx)(`div`,{className:`space-y-1`,children:e.map(e=>(0,_.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-2 rounded-lg bg-muted/50 hover:bg-muted transition-colors`,children:[(0,_.jsx)(`div`,{className:`size-8 rounded-md bg-background flex items-center justify-center shrink-0`,children:(0,_.jsx)(m(e.icon)??a,{className:`size-4 text-muted-foreground`})}),(0,_.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,_.jsx)(`p`,{className:`text-xs font-medium truncate`,children:e.displayName||e.id}),(0,_.jsxs)(`p`,{className:`text-[11px] text-muted-foreground truncate`,children:[e.id,` v`,e.version,e.activated&&(0,_.jsx)(`span`,{className:`ml-1 text-success`,children:`active`})]})]}),(0,_.jsx)(f,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0 cursor-pointer`,title:e.enabled?`Disable`:`Enable`,disabled:E===e.id,onClick:()=>M(e),children:E===e.id?(0,_.jsx)(o,{className:`size-3.5 animate-spin`}):e.enabled?(0,_.jsx)(i,{className:`size-3.5 text-success`}):(0,_.jsx)(h,{className:`size-3.5 text-muted-foreground`})}),(0,_.jsx)(f,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0 cursor-pointer text-destructive hover:text-destructive`,title:`Remove`,disabled:O===e.id,onClick:()=>N(e.id),children:O===e.id?(0,_.jsx)(o,{className:`size-3.5 animate-spin`}):(0,_.jsx)(c,{className:`size-3.5`})})]},e.id))})]})]})}export{v as ExtensionManagerSection};
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{At as r,Jn as i,Yn as a,ln as o,qn as s,wr as c}from"./icons-DQjqk0lJ.js";import{t as l}from"./createLucideIcon-DoiEKeJ_.js";import{n as u,s as d}from"./api-client-Jn3njtNw.js";import{t as f}from"./button-B9CTrsEf.js";import{t as p}from"./input-QNG_gTHh.js";import{nn as m}from"./index-CoTvom0K.js";var h=l(`power-off`,[[`path`,{d:`M18.36 6.64A9 9 0 0 1 20.77 15`,key:`dxknvb`}],[`path`,{d:`M6.16 6.16a9 9 0 1 0 12.68 12.68`,key:`1x7qb5`}],[`path`,{d:`M12 2v4`,key:`3427ic`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),g=e(t(),1),_=n();function v(){let[e,t]=(0,g.useState)([]),[n,l]=(0,g.useState)(!0),[v,y]=(0,g.useState)(``),[b,x]=(0,g.useState)(!1),[S,C]=(0,g.useState)(``),[w,T]=(0,g.useState)(!1),[E,D]=(0,g.useState)(null),[O,k]=(0,g.useState)(null),A=(0,g.useCallback)(async()=>{try{t(await u.get(`/api/extensions`))}catch(e){console.error(`Failed to load extensions:`,e)}finally{l(!1)}},[]);(0,g.useEffect)(()=>{A()},[A]);let j=async()=>{let e=v.trim();if(e){x(!0);try{await u.post(`/api/extensions/install`,{name:e}),d.success(`Installed ${e}`),y(``),A()}catch(e){d.error(e.message||`Install failed`)}finally{x(!1)}}},M=async e=>{D(e.id);try{await u.patch(`/api/extensions/${e.id}`,{enabled:!e.enabled}),A()}catch(e){d.error(e.message||`Toggle failed`)}finally{D(null)}},N=async e=>{k(e);try{await u.del(`/api/extensions/${e}`),d.success(`Removed ${e}`),A()}catch(e){d.error(e.message||`Remove failed`)}finally{k(null)}};return n?(0,_.jsx)(`div`,{className:`flex items-center justify-center py-8`,children:(0,_.jsx)(o,{className:`size-4 animate-spin text-muted-foreground`})}):(0,_.jsxs)(`div`,{className:`space-y-4`,children:[(0,_.jsxs)(`section`,{className:`space-y-2`,children:[(0,_.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Install Extension`}),(0,_.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,_.jsx)(p,{value:v,onChange:e=>y(e.target.value),onKeyDown:e=>{e.key===`Enter`&&j()},placeholder:`npm package name (e.g. @ppm/ext-myext)`,className:`h-8 text-xs flex-1`}),(0,_.jsxs)(f,{variant:`outline`,size:`sm`,className:`h-8 text-xs px-3 gap-1 cursor-pointer`,disabled:!v.trim()||b,onClick:j,children:[b?(0,_.jsx)(o,{className:`size-3 animate-spin`}):(0,_.jsx)(s,{className:`size-3`}),`Install`]})]}),(0,_.jsx)(`button`,{onClick:()=>T(!w),className:`text-[11px] text-muted-foreground hover:text-foreground transition-colors cursor-pointer`,children:w?`Hide`:`Dev link local extension...`}),w&&(0,_.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,_.jsx)(p,{value:S,onChange:e=>C(e.target.value),placeholder:`Local path (e.g. ./packages/ext-myext)`,className:`h-8 text-xs flex-1`}),(0,_.jsxs)(f,{variant:`outline`,size:`sm`,className:`h-8 text-xs px-3 gap-1 cursor-pointer`,disabled:!S.trim(),onClick:async()=>{try{await u.post(`/api/extensions/dev-link`,{path:S.trim()}),d.success(`Dev-linked successfully`),C(``),A()}catch(e){d.error(e.message||`Dev link failed`)}},children:[(0,_.jsx)(r,{className:`size-3`}),`Link`]})]})]}),(0,_.jsxs)(`section`,{className:`space-y-2`,children:[(0,_.jsxs)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:[`Installed (`,e.length,`)`]}),e.length===0?(0,_.jsx)(`p`,{className:`text-[11px] text-muted-foreground py-4 text-center`,children:`No extensions installed`}):(0,_.jsx)(`div`,{className:`space-y-1`,children:e.map(e=>(0,_.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-2 rounded-lg bg-muted/50 hover:bg-muted transition-colors`,children:[(0,_.jsx)(`div`,{className:`size-8 rounded-md bg-background flex items-center justify-center shrink-0`,children:(0,_.jsx)(m(e.icon)??a,{className:`size-4 text-muted-foreground`})}),(0,_.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,_.jsx)(`p`,{className:`text-xs font-medium truncate`,children:e.displayName||e.id}),(0,_.jsxs)(`p`,{className:`text-[11px] text-muted-foreground truncate`,children:[e.id,` v`,e.version,e.activated&&(0,_.jsx)(`span`,{className:`ml-1 text-success`,children:`active`})]})]}),(0,_.jsx)(f,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0 cursor-pointer`,title:e.enabled?`Disable`:`Enable`,disabled:E===e.id,onClick:()=>M(e),children:E===e.id?(0,_.jsx)(o,{className:`size-3.5 animate-spin`}):e.enabled?(0,_.jsx)(i,{className:`size-3.5 text-success`}):(0,_.jsx)(h,{className:`size-3.5 text-muted-foreground`})}),(0,_.jsx)(f,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0 cursor-pointer text-destructive hover:text-destructive`,title:`Remove`,disabled:O===e.id,onClick:()=>N(e.id),children:O===e.id?(0,_.jsx)(o,{className:`size-3.5 animate-spin`}):(0,_.jsx)(c,{className:`size-3.5`})})]},e.id))})]})]})}export{v as ExtensionManagerSection};
@@ -1,4 +1,4 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{ln as r}from"./icons-DQjqk0lJ.js";import{r as i}from"./api-client-Jn3njtNw.js";import{r as a,t as o}from"./git-repo-store-BCEPfUGT.js";import{t as s}from"./apply-theme-CbR31K6I.js";import{cn as c}from"./index-BnH1J2Pm.js";var l=e(t(),1),u=[[`--bg`,`--bg-solid`],[`--surface`,`--panel`],[`--selected`,`--accent-wash`],[`--text`,`--text`],[`--subtext`,`--text-2`],[`--subtle`,`--text-3`],[`--border`,`--border-soft`],[`--border2`,`--border`],[`--blue`,`--accent`],[`--green`,`--success`],[`--yellow`,`--warning`],[`--red`,`--error`]];function d(e){let t=[];for(let[n,r]of u){let i=e(r).replace(/[<>]/g,``).trim();i&&t.push(`${n}: ${i};`)}return t.length?`:root[data-ppm-theme] { ${t.join(` `)} }`:``}function f(e){let t=getComputedStyle(e);return{mode:e.classList.contains(`dark`)?`dark`:`light`,css:d(e=>t.getPropertyValue(e))}}var p=`ppm:theme`,m=`<script>
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{ln as r}from"./icons-DQjqk0lJ.js";import{r as i}from"./api-client-Jn3njtNw.js";import{r as a,t as o}from"./git-repo-store-BCEPfUGT.js";import{t as s}from"./apply-theme-CbR31K6I.js";import{cn as c}from"./index-CoTvom0K.js";var l=e(t(),1),u=[[`--bg`,`--bg-solid`],[`--surface`,`--panel`],[`--selected`,`--accent-wash`],[`--text`,`--text`],[`--subtext`,`--text-2`],[`--subtle`,`--text-3`],[`--border`,`--border-soft`],[`--border2`,`--border`],[`--blue`,`--accent`],[`--green`,`--success`],[`--yellow`,`--warning`],[`--red`,`--error`]];function d(e){let t=[];for(let[n,r]of u){let i=e(r).replace(/[<>]/g,``).trim();i&&t.push(`${n}: ${i};`)}return t.length?`:root[data-ppm-theme] { ${t.join(` `)} }`:``}function f(e){let t=getComputedStyle(e);return{mode:e.classList.contains(`dark`)?`dark`:`light`,css:d(e=>t.getPropertyValue(e))}}var p=`ppm:theme`,m=`<script>
2
2
  window.addEventListener("message",function(e){
3
3
  if(e.source!==window.parent)return;
4
4
  var m=e.data;
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{Br as r,qn as i}from"./icons-DQjqk0lJ.js";import{n as a}from"./api-client-Jn3njtNw.js";import{i as o}from"./project-store-hNvwfqX3.js";import"./project-framework-store-ViZgce6y.js";import{o as s}from"./file-store-Ds3qJ4hC.js";import{t as c}from"./button-B9CTrsEf.js";import{t as l}from"./input-QNG_gTHh.js";import{Z as u,at as d}from"./index-BnH1J2Pm.js";import{t as f}from"./separator-DwDoQpxS.js";var p=e(t(),1);function m(){return a.get(`/api/settings/files`)}function h(e){return a.patch(`/api/settings/files`,e)}function g(e){return a.get(`/api/projects/${encodeURIComponent(e)}/settings`)}function _(e,t){return a.patch(`/api/projects/${encodeURIComponent(e)}/settings`,t)}var v=n();function y({value:e,onChange:t,placeholder:n=`e.g. **/*.log`,disabled:a=!1}){let o=(0,p.useRef)([]);function s(n,r){let i=[...e];i[n]=r,t(i)}function u(n){t(e.filter((e,t)=>t!==n)),setTimeout(()=>{let e=Math.max(n-1,0);o.current[e]?.focus()},0)}function d(){t([...e,``]),setTimeout(()=>{o.current[e.length]?.focus()},0)}function f(t,n){n.key===`Enter`?(n.preventDefault(),e[t]?.trim()&&d()):n.key===`Backspace`&&e[t]===``&&(n.preventDefault(),u(t))}return(0,v.jsxs)(`div`,{className:`space-y-1.5`,children:[e.length===0&&(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground py-1`,children:`No patterns. Click "Add pattern" to start.`}),e.map((e,t)=>(0,v.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,v.jsx)(l,{ref:e=>{o.current[t]=e},value:e,onChange:e=>s(t,e.target.value),onKeyDown:e=>f(t,e),placeholder:n,disabled:a,className:`h-8 text-xs flex-1 font-mono`,"aria-label":`Pattern ${t+1}`}),(0,v.jsx)(`button`,{type:`button`,onClick:()=>u(t),disabled:a,"aria-label":`Remove pattern ${t+1}`,className:`shrink-0 flex items-center justify-center p-2.5 rounded-md text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-40 disabled:pointer-events-none`,children:(0,v.jsx)(r,{className:`size-3.5`})})]},t)),(0,v.jsxs)(c,{type:`button`,variant:`outline`,size:`sm`,onClick:d,disabled:a,className:`h-8 text-xs gap-1.5 w-full cursor-pointer`,children:[(0,v.jsx)(i,{className:`size-3.5`}),`Add pattern`]})]})}var b={filesExclude:[],searchExclude:[],useIgnoreFiles:!0};function x(){let e=o(e=>e.activeProject),[t,n]=(0,p.useState)(`global`),[r,i]=(0,p.useState)([]),[a,l]=(0,p.useState)([]),[x,S]=(0,p.useState)(!0),[C,w]=(0,p.useState)(!1),[T,E]=(0,p.useState)(!1),[D,O]=(0,p.useState)(null),[k,A]=(0,p.useState)(!1),j=(0,p.useRef)(null);(0,p.useEffect)(()=>{j.current?.abort();let n=new AbortController;return j.current=n,A(!0),O(null),(async()=>{try{if(t===`global`){let e=await m();if(n.signal.aborted)return;i(e.filesExclude),l(e.searchExclude),S(e.useIgnoreFiles)}else{if(!e)return;let t=await g(e.name);if(n.signal.aborted)return;let r=t.files??{};i(r.filesExclude??b.filesExclude),l(r.searchExclude??b.searchExclude),S(r.useIgnoreFiles??b.useIgnoreFiles)}}catch(e){if(n.signal.aborted)return;O(e.message)}finally{n.signal.aborted||A(!1)}})(),()=>n.abort()},[t,e?.name]);let M=async()=>{w(!0),E(!1),O(null);try{let n={filesExclude:r.filter(e=>e.trim()!==``),searchExclude:a.filter(e=>e.trim()!==``),useIgnoreFiles:x};if(t===`global`)await h(n);else{if(!e)throw Error(`No active project`);await _(e.name,{files:n})}let i=s.getState();i.invalidateIndex(),e&&i.loadIndex(e.name),E(!0),setTimeout(()=>E(!1),2e3)}catch(e){O(e.message)}finally{w(!1)}},N=!!e;return(0,v.jsxs)(`div`,{className:`space-y-4`,children:[(0,v.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`File Filters`}),(0,v.jsxs)(`div`,{className:`flex gap-1`,children:[(0,v.jsx)(`button`,{type:`button`,onClick:()=>n(`global`),className:`flex-1 py-1.5 rounded-md text-xs font-medium transition-colors cursor-pointer ${t===`global`?`bg-primary text-primary-foreground`:`bg-muted text-muted-foreground hover:bg-accent`}`,children:`Global`}),(0,v.jsx)(`button`,{type:`button`,onClick:()=>N&&n(`project`),disabled:!N,title:N?void 0:`Open a project to edit per-project overrides`,className:`flex-1 py-1.5 rounded-md text-xs font-medium transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed ${t===`project`?`bg-primary text-primary-foreground`:`bg-muted text-muted-foreground hover:bg-accent`}`,children:e?e.name:`Per-project`})]}),t===`project`&&e&&(0,v.jsxs)(`p`,{className:`text-[11px] text-muted-foreground -mt-2`,children:[`Overrides for `,(0,v.jsx)(`span`,{className:`font-medium`,children:e.name}),`. Leave empty to use global settings.`]}),k?(0,v.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading...`}):(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,v.jsx)(d,{className:`text-xs`,children:`Files to Exclude`}),(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Glob patterns hidden from the file tree and palette.`}),(0,v.jsx)(y,{value:r,onChange:i,placeholder:`e.g. **/*.log or node_modules/**`,disabled:C})]}),(0,v.jsx)(f,{}),(0,v.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,v.jsx)(d,{className:`text-xs`,children:`Search to Exclude`}),(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Glob patterns excluded from file index / palette search.`}),(0,v.jsx)(y,{value:a,onChange:l,placeholder:`e.g. dist/** or **/*.min.js`,disabled:C})]}),(0,v.jsx)(f,{}),(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,v.jsxs)(`div`,{children:[(0,v.jsx)(d,{className:`text-xs`,children:`Use .gitignore rules`}),(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Respect .gitignore when filtering the file tree and index.`})]}),(0,v.jsx)(u,{checked:x,onCheckedChange:S,disabled:C})]}),D&&(0,v.jsx)(`p`,{className:`text-[11px] text-destructive`,children:D}),(0,v.jsx)(c,{onClick:M,disabled:C||k,size:`sm`,className:`h-8 text-xs w-full cursor-pointer`,children:C?`Saving...`:T?`Saved`:`Save`})]})]})}export{x as FilesSettingsSection};
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{C as t,S as n}from"./vendor-markdown-CuWCHIVb.js";import"./vendor-ui-DmZ-Mb-H.js";import{Br as r,qn as i}from"./icons-DQjqk0lJ.js";import{n as a}from"./api-client-Jn3njtNw.js";import{i as o}from"./project-store-hNvwfqX3.js";import"./project-framework-store-ViZgce6y.js";import{o as s}from"./file-store-Ds3qJ4hC.js";import{t as c}from"./button-B9CTrsEf.js";import{t as l}from"./input-QNG_gTHh.js";import{Z as u,at as d}from"./index-CoTvom0K.js";import{t as f}from"./separator-DwDoQpxS.js";var p=e(t(),1);function m(){return a.get(`/api/settings/files`)}function h(e){return a.patch(`/api/settings/files`,e)}function g(e){return a.get(`/api/projects/${encodeURIComponent(e)}/settings`)}function _(e,t){return a.patch(`/api/projects/${encodeURIComponent(e)}/settings`,t)}var v=n();function y({value:e,onChange:t,placeholder:n=`e.g. **/*.log`,disabled:a=!1}){let o=(0,p.useRef)([]);function s(n,r){let i=[...e];i[n]=r,t(i)}function u(n){t(e.filter((e,t)=>t!==n)),setTimeout(()=>{let e=Math.max(n-1,0);o.current[e]?.focus()},0)}function d(){t([...e,``]),setTimeout(()=>{o.current[e.length]?.focus()},0)}function f(t,n){n.key===`Enter`?(n.preventDefault(),e[t]?.trim()&&d()):n.key===`Backspace`&&e[t]===``&&(n.preventDefault(),u(t))}return(0,v.jsxs)(`div`,{className:`space-y-1.5`,children:[e.length===0&&(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground py-1`,children:`No patterns. Click "Add pattern" to start.`}),e.map((e,t)=>(0,v.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,v.jsx)(l,{ref:e=>{o.current[t]=e},value:e,onChange:e=>s(t,e.target.value),onKeyDown:e=>f(t,e),placeholder:n,disabled:a,className:`h-8 text-xs flex-1 font-mono`,"aria-label":`Pattern ${t+1}`}),(0,v.jsx)(`button`,{type:`button`,onClick:()=>u(t),disabled:a,"aria-label":`Remove pattern ${t+1}`,className:`shrink-0 flex items-center justify-center p-2.5 rounded-md text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-40 disabled:pointer-events-none`,children:(0,v.jsx)(r,{className:`size-3.5`})})]},t)),(0,v.jsxs)(c,{type:`button`,variant:`outline`,size:`sm`,onClick:d,disabled:a,className:`h-8 text-xs gap-1.5 w-full cursor-pointer`,children:[(0,v.jsx)(i,{className:`size-3.5`}),`Add pattern`]})]})}var b={filesExclude:[],searchExclude:[],useIgnoreFiles:!0};function x(){let e=o(e=>e.activeProject),[t,n]=(0,p.useState)(`global`),[r,i]=(0,p.useState)([]),[a,l]=(0,p.useState)([]),[x,S]=(0,p.useState)(!0),[C,w]=(0,p.useState)(!1),[T,E]=(0,p.useState)(!1),[D,O]=(0,p.useState)(null),[k,A]=(0,p.useState)(!1),j=(0,p.useRef)(null);(0,p.useEffect)(()=>{j.current?.abort();let n=new AbortController;return j.current=n,A(!0),O(null),(async()=>{try{if(t===`global`){let e=await m();if(n.signal.aborted)return;i(e.filesExclude),l(e.searchExclude),S(e.useIgnoreFiles)}else{if(!e)return;let t=await g(e.name);if(n.signal.aborted)return;let r=t.files??{};i(r.filesExclude??b.filesExclude),l(r.searchExclude??b.searchExclude),S(r.useIgnoreFiles??b.useIgnoreFiles)}}catch(e){if(n.signal.aborted)return;O(e.message)}finally{n.signal.aborted||A(!1)}})(),()=>n.abort()},[t,e?.name]);let M=async()=>{w(!0),E(!1),O(null);try{let n={filesExclude:r.filter(e=>e.trim()!==``),searchExclude:a.filter(e=>e.trim()!==``),useIgnoreFiles:x};if(t===`global`)await h(n);else{if(!e)throw Error(`No active project`);await _(e.name,{files:n})}let i=s.getState();i.invalidateIndex(),e&&i.loadIndex(e.name),E(!0),setTimeout(()=>E(!1),2e3)}catch(e){O(e.message)}finally{w(!1)}},N=!!e;return(0,v.jsxs)(`div`,{className:`space-y-4`,children:[(0,v.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`File Filters`}),(0,v.jsxs)(`div`,{className:`flex gap-1`,children:[(0,v.jsx)(`button`,{type:`button`,onClick:()=>n(`global`),className:`flex-1 py-1.5 rounded-md text-xs font-medium transition-colors cursor-pointer ${t===`global`?`bg-primary text-primary-foreground`:`bg-muted text-muted-foreground hover:bg-accent`}`,children:`Global`}),(0,v.jsx)(`button`,{type:`button`,onClick:()=>N&&n(`project`),disabled:!N,title:N?void 0:`Open a project to edit per-project overrides`,className:`flex-1 py-1.5 rounded-md text-xs font-medium transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed ${t===`project`?`bg-primary text-primary-foreground`:`bg-muted text-muted-foreground hover:bg-accent`}`,children:e?e.name:`Per-project`})]}),t===`project`&&e&&(0,v.jsxs)(`p`,{className:`text-[11px] text-muted-foreground -mt-2`,children:[`Overrides for `,(0,v.jsx)(`span`,{className:`font-medium`,children:e.name}),`. Leave empty to use global settings.`]}),k?(0,v.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading...`}):(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,v.jsx)(d,{className:`text-xs`,children:`Files to Exclude`}),(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Glob patterns hidden from the file tree and palette.`}),(0,v.jsx)(y,{value:r,onChange:i,placeholder:`e.g. **/*.log or node_modules/**`,disabled:C})]}),(0,v.jsx)(f,{}),(0,v.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,v.jsx)(d,{className:`text-xs`,children:`Search to Exclude`}),(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Glob patterns excluded from file index / palette search.`}),(0,v.jsx)(y,{value:a,onChange:l,placeholder:`e.g. dist/** or **/*.min.js`,disabled:C})]}),(0,v.jsx)(f,{}),(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,v.jsxs)(`div`,{children:[(0,v.jsx)(d,{className:`text-xs`,children:`Use .gitignore rules`}),(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Respect .gitignore when filtering the file tree and index.`})]}),(0,v.jsx)(u,{checked:x,onCheckedChange:S,disabled:C})]}),D&&(0,v.jsx)(`p`,{className:`text-[11px] text-destructive`,children:D}),(0,v.jsx)(c,{onClick:M,disabled:C||k,size:`sm`,className:`h-8 text-xs w-full cursor-pointer`,children:C?`Saving...`:T?`Saved`:`Save`})]})]})}export{x as FilesSettingsSection};