@hienlh/ppm 0.23.25 → 0.23.27

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 (587) hide show
  1. package/CHANGELOG.md +12 -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-CZglHifc.js +1 -0
  5. package/dist/web/assets/accounts-settings-section-CZglHifc.js.br +0 -0
  6. package/dist/web/assets/accounts-settings-section-CZglHifc.js.gz +0 -0
  7. package/dist/web/assets/{agent-session-sheet-DmbSfFGz.js → agent-session-sheet-B3VLD2H6.js} +2 -2
  8. package/dist/web/assets/agent-session-sheet-B3VLD2H6.js.br +0 -0
  9. package/dist/web/assets/agent-session-sheet-B3VLD2H6.js.gz +0 -0
  10. package/dist/web/assets/{agent-session-window-content-Dk8x3ozF.js → agent-session-window-content-HEdIT_LQ.js} +1 -1
  11. package/dist/web/assets/agent-session-window-content-HEdIT_LQ.js.br +0 -0
  12. package/dist/web/assets/agent-session-window-content-HEdIT_LQ.js.gz +0 -0
  13. package/dist/web/assets/{ai-resource-editor-MKwjYcDh.js → ai-resource-editor-CFbXgGMo.js} +1 -1
  14. package/dist/web/assets/ai-resource-editor-CFbXgGMo.js.br +0 -0
  15. package/dist/web/assets/ai-resource-editor-CFbXgGMo.js.gz +0 -0
  16. package/dist/web/assets/ai-settings-section-BNiVD9D3.js +1 -0
  17. package/dist/web/assets/ai-settings-section-BNiVD9D3.js.br +0 -0
  18. package/dist/web/assets/ai-settings-section-BNiVD9D3.js.gz +0 -0
  19. package/dist/web/assets/{ai-settings-section-OZOaLw5z.js → ai-settings-section-W0kfADRB.js} +1 -1
  20. package/dist/web/assets/{android-tab-CUkjbfyi.js → android-tab-CY3aa_vU.js} +1 -1
  21. package/dist/web/assets/android-tab-CY3aa_vU.js.br +0 -0
  22. package/dist/web/assets/android-tab-CY3aa_vU.js.gz +0 -0
  23. package/dist/web/assets/{appearance-settings-section-BZsM8HpZ.js → appearance-settings-section-lbtuzecW.js} +1 -1
  24. package/dist/web/assets/appearance-settings-section-lbtuzecW.js.br +0 -0
  25. package/dist/web/assets/appearance-settings-section-lbtuzecW.js.gz +0 -0
  26. package/dist/web/assets/{apps-panel-Cs3utBlp.js → apps-panel-CF2mbvVq.js} +1 -1
  27. package/dist/web/assets/apps-panel-CF2mbvVq.js.br +0 -0
  28. package/dist/web/assets/apps-panel-CF2mbvVq.js.gz +0 -0
  29. package/dist/web/assets/branch-review-tab-CR7JnS5x.js +1 -0
  30. package/dist/web/assets/branch-review-tab-CR7JnS5x.js.br +0 -0
  31. package/dist/web/assets/branch-review-tab-CR7JnS5x.js.gz +0 -0
  32. package/dist/web/assets/chat-tab-BCELq4nK.js +1 -0
  33. package/dist/web/assets/chat-tab-BCELq4nK.js.br +0 -0
  34. package/dist/web/assets/chat-tab-BCELq4nK.js.gz +0 -0
  35. package/dist/web/assets/{chat-tab-DtSHSfMU.js → chat-tab-C4aOYSea.js} +10 -10
  36. package/dist/web/assets/chat-tab-C4aOYSea.js.br +0 -0
  37. package/dist/web/assets/chat-tab-C4aOYSea.js.gz +0 -0
  38. package/dist/web/assets/{code-editor-DjDyhff1.js → code-editor-_axJbYkP.js} +5 -5
  39. package/dist/web/assets/code-editor-_axJbYkP.js.br +0 -0
  40. package/dist/web/assets/code-editor-_axJbYkP.js.gz +0 -0
  41. package/dist/web/assets/{codex-reset-credit-button-BKgiUi8E.js → codex-reset-credit-button-DJQD6NUF.js} +1 -1
  42. package/dist/web/assets/codex-reset-credit-button-DJQD6NUF.js.br +0 -0
  43. package/dist/web/assets/codex-reset-credit-button-DJQD6NUF.js.gz +0 -0
  44. package/dist/web/assets/{conflict-editor-DgTv-8pb.js → conflict-editor-D0AYuLKI.js} +3 -3
  45. package/dist/web/assets/conflict-editor-D0AYuLKI.js.br +0 -0
  46. package/dist/web/assets/conflict-editor-D0AYuLKI.js.gz +0 -0
  47. package/dist/web/assets/connection-form-tab-C3QyUWnE.js +4 -0
  48. package/dist/web/assets/connection-form-tab-C3QyUWnE.js.br +0 -0
  49. package/dist/web/assets/connection-form-tab-C3QyUWnE.js.gz +0 -0
  50. package/dist/web/assets/{csv-preview-BTGpYs4p.js → csv-preview-CmKkcz4M.js} +1 -1
  51. package/dist/web/assets/csv-preview-CmKkcz4M.js.br +0 -0
  52. package/dist/web/assets/csv-preview-CmKkcz4M.js.gz +0 -0
  53. package/dist/web/assets/{db-explorer-store-DDePT3UI.js → db-explorer-store-DJNNIfN5.js} +1 -1
  54. package/dist/web/assets/db-explorer-store-DJNNIfN5.js.br +0 -0
  55. package/dist/web/assets/db-explorer-store-DJNNIfN5.js.gz +0 -0
  56. package/dist/web/assets/{db-sidebar-reveal-BeT8cp6P.js → db-sidebar-reveal-CGqWBYay.js} +1 -1
  57. package/dist/web/assets/db-sidebar-reveal-CGqWBYay.js.br +0 -0
  58. package/dist/web/assets/db-sidebar-reveal-CGqWBYay.js.gz +0 -0
  59. package/dist/web/assets/{db-tab-parts-BYzd4_sR.js → db-tab-parts-BXL34wrZ.js} +1 -1
  60. package/dist/web/assets/db-tab-parts-BXL34wrZ.js.br +0 -0
  61. package/dist/web/assets/db-tab-parts-BXL34wrZ.js.gz +0 -0
  62. package/dist/web/assets/{design-settings-section-B3KQBggK.js → design-settings-section-DukfVtwP.js} +2 -2
  63. package/dist/web/assets/design-settings-section-DukfVtwP.js.br +0 -0
  64. package/dist/web/assets/design-settings-section-DukfVtwP.js.gz +0 -0
  65. package/dist/web/assets/{design-tab-CPyj_nFg.js → design-tab-BoPiL2ge.js} +5 -5
  66. package/dist/web/assets/design-tab-BoPiL2ge.js.br +0 -0
  67. package/dist/web/assets/design-tab-BoPiL2ge.js.gz +0 -0
  68. package/dist/web/assets/{designs-sidebar-panel-DIGPFo2l.js → designs-sidebar-panel-BVTqPPzG.js} +1 -1
  69. package/dist/web/assets/designs-sidebar-panel-BVTqPPzG.js.br +0 -0
  70. package/dist/web/assets/designs-sidebar-panel-BVTqPPzG.js.gz +0 -0
  71. package/dist/web/assets/diff-viewer-C86mR7vD.js +4 -0
  72. package/dist/web/assets/diff-viewer-C86mR7vD.js.br +0 -0
  73. package/dist/web/assets/diff-viewer-C86mR7vD.js.gz +0 -0
  74. package/dist/web/assets/{docx-preview-CowHGqML.js → docx-preview-B9EhDCMi.js} +1 -1
  75. package/dist/web/assets/docx-preview-B9EhDCMi.js.br +0 -0
  76. package/dist/web/assets/docx-preview-B9EhDCMi.js.gz +0 -0
  77. package/dist/web/assets/{editor-dialog-xPoehDYp.js → editor-dialog-DTDsbJd6.js} +1 -1
  78. package/dist/web/assets/editor-dialog-DTDsbJd6.js.br +0 -0
  79. package/dist/web/assets/editor-dialog-DTDsbJd6.js.gz +0 -0
  80. package/dist/web/assets/{editor-language-service-DdYqCDBU.js → editor-language-service-BtrrQAS2.js} +1 -1
  81. package/dist/web/assets/editor-language-service-BtrrQAS2.js.br +0 -0
  82. package/dist/web/assets/editor-language-service-BtrrQAS2.js.gz +0 -0
  83. package/dist/web/assets/explorer-body-DLaWmxri.js +2 -0
  84. package/dist/web/assets/explorer-body-DLaWmxri.js.br +0 -0
  85. package/dist/web/assets/explorer-body-DLaWmxri.js.gz +0 -0
  86. package/dist/web/assets/{explorer-model-tGyFETP_.js → explorer-model-f5q-50DN.js} +1 -1
  87. package/dist/web/assets/explorer-model-f5q-50DN.js.br +0 -0
  88. package/dist/web/assets/explorer-model-f5q-50DN.js.gz +0 -0
  89. package/dist/web/assets/{explorer-window-content-B1c4QTVL.js → explorer-window-content-CbUIbrzL.js} +1 -1
  90. package/dist/web/assets/explorer-window-content-CbUIbrzL.js.br +0 -0
  91. package/dist/web/assets/explorer-window-content-CbUIbrzL.js.gz +0 -0
  92. package/dist/web/assets/{extension-manager-section-BgL0Uyl3.js → extension-manager-section-BpKMyLwI.js} +1 -1
  93. package/dist/web/assets/extension-manager-section-BpKMyLwI.js.br +0 -0
  94. package/dist/web/assets/extension-manager-section-BpKMyLwI.js.gz +0 -0
  95. package/dist/web/assets/{extension-webview-BWB1Yd-t.js → extension-webview-BGfyaXMI.js} +1 -1
  96. package/dist/web/assets/extension-webview-BGfyaXMI.js.br +0 -0
  97. package/dist/web/assets/extension-webview-BGfyaXMI.js.gz +0 -0
  98. package/dist/web/assets/{files-settings-section-TmoewoO2.js → files-settings-section-CQT9_rX2.js} +1 -1
  99. package/dist/web/assets/files-settings-section-CQT9_rX2.js.br +0 -0
  100. package/dist/web/assets/files-settings-section-CQT9_rX2.js.gz +0 -0
  101. package/dist/web/assets/{general-settings-section-Bu7o8uUn.js → general-settings-section-BoQGeqBi.js} +1 -1
  102. package/dist/web/assets/general-settings-section-BoQGeqBi.js.br +0 -0
  103. package/dist/web/assets/general-settings-section-BoQGeqBi.js.gz +0 -0
  104. package/dist/web/assets/{git-log-panel-RjMZIaCk.js → git-log-panel-T8Fzn8-5.js} +1 -1
  105. package/dist/web/assets/git-log-panel-T8Fzn8-5.js.br +0 -0
  106. package/dist/web/assets/git-log-panel-T8Fzn8-5.js.gz +0 -0
  107. package/dist/web/assets/git-review-tab-WzuX4Ml9.js +3 -0
  108. package/dist/web/assets/git-review-tab-WzuX4Ml9.js.br +0 -0
  109. package/dist/web/assets/git-review-tab-WzuX4Ml9.js.gz +0 -0
  110. package/dist/web/assets/{glide-data-grid-DqlTFhhf.js → glide-data-grid-BBzGDYvj.js} +8 -8
  111. package/dist/web/assets/glide-data-grid-BBzGDYvj.js.br +0 -0
  112. package/dist/web/assets/glide-data-grid-BBzGDYvj.js.gz +0 -0
  113. package/dist/web/assets/{grid-save-dialog-BmF2Gy_E.js → grid-save-dialog-HiqlnSky.js} +1 -1
  114. package/dist/web/assets/grid-save-dialog-HiqlnSky.js.br +0 -0
  115. package/dist/web/assets/grid-save-dialog-HiqlnSky.js.gz +0 -0
  116. package/dist/web/assets/group-chat-tab-URU3FCLs.js +1 -0
  117. package/dist/web/assets/group-chat-tab-URU3FCLs.js.br +0 -0
  118. package/dist/web/assets/group-chat-tab-URU3FCLs.js.gz +0 -0
  119. package/dist/web/assets/{impexp-tab-B8d4oBOB.js → impexp-tab-B0m1Q8ia.js} +1 -1
  120. package/dist/web/assets/impexp-tab-B0m1Q8ia.js.br +0 -0
  121. package/dist/web/assets/impexp-tab-B0m1Q8ia.js.gz +0 -0
  122. package/dist/web/assets/index-Cb3Z6wNy.css +1 -0
  123. package/dist/web/assets/index-Cb3Z6wNy.css.br +0 -0
  124. package/dist/web/assets/{index-2_Pz5MiI.css.gz → index-Cb3Z6wNy.css.gz} +0 -0
  125. package/dist/web/assets/{index-Cx9ZRibz.js → index-Vd9Xr54k.js} +19 -19
  126. package/dist/web/assets/index-Vd9Xr54k.js.br +0 -0
  127. package/dist/web/assets/index-Vd9Xr54k.js.gz +0 -0
  128. package/dist/web/assets/{jira-watcher-section-LGTWVN87.js → jira-watcher-section-CnSTbAF6.js} +1 -1
  129. package/dist/web/assets/keybindings-store-D_U8jECl.js +1 -0
  130. package/dist/web/assets/{keyboard-shortcuts-section-BSMgmbOR.js → keyboard-shortcuts-section-CU7JjDsU.js} +1 -1
  131. package/dist/web/assets/keyboard-shortcuts-section-CU7JjDsU.js.br +0 -0
  132. package/dist/web/assets/keyboard-shortcuts-section-CU7JjDsU.js.gz +0 -0
  133. package/dist/web/assets/{language-servers-section-DO9wnwnG.js → language-servers-section-CzUG9H69.js} +2 -2
  134. package/dist/web/assets/language-servers-section-CzUG9H69.js.br +0 -0
  135. package/dist/web/assets/language-servers-section-CzUG9H69.js.gz +0 -0
  136. package/dist/web/assets/logs-app-CDSvyY1H.js +13 -0
  137. package/dist/web/assets/logs-app-CDSvyY1H.js.br +0 -0
  138. package/dist/web/assets/logs-app-CDSvyY1H.js.gz +0 -0
  139. package/dist/web/assets/logs-tab-CQw9vrNw.js +1 -0
  140. package/dist/web/assets/{logs-window-content-Cejko0VD.js → logs-window-content-CGvPnPrr.js} +1 -1
  141. package/dist/web/assets/{lsp-client-IsC8Ol0U.js → lsp-client-CpjPUUYJ.js} +1 -1
  142. package/dist/web/assets/lsp-client-CpjPUUYJ.js.br +0 -0
  143. package/dist/web/assets/lsp-client-CpjPUUYJ.js.gz +0 -0
  144. package/dist/web/assets/{markdown-renderer-D5vxN2fO.js → markdown-renderer-3ZR2x0CC.js} +1 -1
  145. package/dist/web/assets/{markdown-renderer-BfZiHaNy.js → markdown-renderer-DZNMRg6p.js} +2 -2
  146. package/dist/web/assets/markdown-renderer-DZNMRg6p.js.br +0 -0
  147. package/dist/web/assets/markdown-renderer-DZNMRg6p.js.gz +0 -0
  148. package/dist/web/assets/{mobile-explorer-sheet-Dz3eJdBl.js → mobile-explorer-sheet-D7e-MM6m.js} +1 -1
  149. package/dist/web/assets/mobile-explorer-sheet-D7e-MM6m.js.br +0 -0
  150. package/dist/web/assets/mobile-explorer-sheet-D7e-MM6m.js.gz +0 -0
  151. package/dist/web/assets/{new-design-dialog-B8zeJoJQ.js → new-design-dialog-BthM423i.js} +1 -1
  152. package/dist/web/assets/new-design-dialog-BthM423i.js.br +0 -0
  153. package/dist/web/assets/new-design-dialog-BthM423i.js.gz +0 -0
  154. package/dist/web/assets/notification-store-GKweleCQ.js +1 -0
  155. package/dist/web/assets/{notifications-settings-section-CMZXQw72.js → notifications-settings-section-TS3gNFcc.js} +1 -1
  156. package/dist/web/assets/notifications-settings-section-TS3gNFcc.js.br +0 -0
  157. package/dist/web/assets/notifications-settings-section-TS3gNFcc.js.gz +0 -0
  158. package/dist/web/assets/{open-db-tabs-DYTZbguT.js → open-db-tabs-DBgV2hbA.js} +1 -1
  159. package/dist/web/assets/open-db-tabs-DBgV2hbA.js.br +0 -0
  160. package/dist/web/assets/open-db-tabs-DBgV2hbA.js.gz +0 -0
  161. package/dist/web/assets/{open-settings-BGtoVEAU.js → open-settings-DWbF5YsE.js} +1 -1
  162. package/dist/web/assets/{overview-panel-7_8b6pwr.js → overview-panel-C5EmTk1R.js} +1 -1
  163. package/dist/web/assets/overview-panel-C5EmTk1R.js.br +0 -0
  164. package/dist/web/assets/overview-panel-C5EmTk1R.js.gz +0 -0
  165. package/dist/web/assets/{panel-store-Dx2ziBLp.js → panel-store-H7e9XHZF.js} +1 -1
  166. package/dist/web/assets/panel-store-H7e9XHZF.js.br +0 -0
  167. package/dist/web/assets/panel-store-H7e9XHZF.js.gz +0 -0
  168. package/dist/web/assets/{patch-tab-metadata-DTbCkVvx.js → patch-tab-metadata-DqvfqUI4.js} +1 -1
  169. package/dist/web/assets/{performance-panel-COQNCyEU.js → performance-panel-Jwab-_Z2.js} +1 -1
  170. package/dist/web/assets/performance-panel-Jwab-_Z2.js.br +0 -0
  171. package/dist/web/assets/performance-panel-Jwab-_Z2.js.gz +0 -0
  172. package/dist/web/assets/{ppmbot-settings-section-CmhbbZVI.js → ppmbot-settings-section-D8jIlmp8.js} +1 -1
  173. package/dist/web/assets/ppmbot-settings-section-D8jIlmp8.js.br +0 -0
  174. package/dist/web/assets/ppmbot-settings-section-D8jIlmp8.js.gz +0 -0
  175. package/dist/web/assets/{pptx-export-COeBmnFJ.js → pptx-export-gXOWUZXL.js} +3 -3
  176. package/dist/web/assets/pptx-export-gXOWUZXL.js.br +0 -0
  177. package/dist/web/assets/pptx-export-gXOWUZXL.js.gz +0 -0
  178. package/dist/web/assets/{problems-panel-I0EYfa1S.js → problems-panel-DjCHA1r5.js} +1 -1
  179. package/dist/web/assets/problems-panel-DjCHA1r5.js.br +0 -0
  180. package/dist/web/assets/problems-panel-DjCHA1r5.js.gz +0 -0
  181. package/dist/web/assets/{process-table-or-X8Lwh.js → process-table-BxXEh4tN.js} +1 -1
  182. package/dist/web/assets/process-table-BxXEh4tN.js.br +0 -0
  183. package/dist/web/assets/process-table-BxXEh4tN.js.gz +0 -0
  184. package/dist/web/assets/{proxy-settings-section-DpJ6ok4C.js → proxy-settings-section-B8igco2L.js} +1 -1
  185. package/dist/web/assets/proxy-settings-section-B8igco2L.js.br +0 -0
  186. package/dist/web/assets/proxy-settings-section-B8igco2L.js.gz +0 -0
  187. package/dist/web/assets/{query-tab-DeNZMZHX.js → query-tab-DHU3ANHN.js} +3 -3
  188. package/dist/web/assets/query-tab-DHU3ANHN.js.br +0 -0
  189. package/dist/web/assets/query-tab-DHU3ANHN.js.gz +0 -0
  190. package/dist/web/assets/release-notes-window-content-B33RDfFY.js +1 -0
  191. package/dist/web/assets/remote-access-settings-section-CoYQTFKd.js +1 -0
  192. package/dist/web/assets/remote-access-settings-section-CoYQTFKd.js.br +0 -0
  193. package/dist/web/assets/remote-access-settings-section-CoYQTFKd.js.gz +0 -0
  194. package/dist/web/assets/{remote-desktop-clipboard-notice-CGDBpXMf.js → remote-desktop-clipboard-notice-Dwn-iV4g.js} +1 -1
  195. package/dist/web/assets/remote-desktop-clipboard-notice-Dwn-iV4g.js.br +0 -0
  196. package/dist/web/assets/remote-desktop-clipboard-notice-Dwn-iV4g.js.gz +0 -0
  197. package/dist/web/assets/{remote-desktop-mobile-sheet-6nXirdqZ.js → remote-desktop-mobile-sheet-bfKiSG0C.js} +2 -2
  198. package/dist/web/assets/remote-desktop-mobile-sheet-bfKiSG0C.js.br +0 -0
  199. package/dist/web/assets/remote-desktop-mobile-sheet-bfKiSG0C.js.gz +0 -0
  200. package/dist/web/assets/{remote-desktop-mobile-view-BTaj9Flo.js → remote-desktop-mobile-view-CV8eHh4A.js} +1 -1
  201. package/dist/web/assets/remote-desktop-mobile-view-CV8eHh4A.js.br +0 -0
  202. package/dist/web/assets/remote-desktop-mobile-view-CV8eHh4A.js.gz +0 -0
  203. package/dist/web/assets/{remote-desktop-readiness-gate--gtmfqZh.js → remote-desktop-readiness-gate-DrSYb_9z.js} +1 -1
  204. package/dist/web/assets/remote-desktop-readiness-gate-DrSYb_9z.js.br +0 -0
  205. package/dist/web/assets/remote-desktop-readiness-gate-DrSYb_9z.js.gz +0 -0
  206. package/dist/web/assets/{remote-desktop-settings-section-Bs5avYaS.js → remote-desktop-settings-section-DRO8n8t7.js} +1 -1
  207. package/dist/web/assets/remote-desktop-settings-section-DRO8n8t7.js.br +0 -0
  208. package/dist/web/assets/remote-desktop-settings-section-DRO8n8t7.js.gz +0 -0
  209. package/dist/web/assets/{remote-desktop-window-content-D4CM-28B.js → remote-desktop-window-content-CAuxeGbK.js} +1 -1
  210. package/dist/web/assets/remote-desktop-window-content-CAuxeGbK.js.br +0 -0
  211. package/dist/web/assets/remote-desktop-window-content-CAuxeGbK.js.gz +0 -0
  212. package/dist/web/assets/{rename-object-dialog-Dv4iLwnf.js → rename-object-dialog-BPuh3dAH.js} +1 -1
  213. package/dist/web/assets/rename-object-dialog-BPuh3dAH.js.br +0 -0
  214. package/dist/web/assets/rename-object-dialog-BPuh3dAH.js.gz +0 -0
  215. package/dist/web/assets/review-address-setup-CoI2BGdx.js +1 -0
  216. package/dist/web/assets/review-address-setup-CoI2BGdx.js.br +0 -0
  217. package/dist/web/assets/review-address-setup-CoI2BGdx.js.gz +0 -0
  218. package/dist/web/assets/{review-code-Bet53hHb.js → review-code-Dy8y4_17.js} +1 -1
  219. package/dist/web/assets/review-code-Dy8y4_17.js.br +0 -0
  220. package/dist/web/assets/review-code-Dy8y4_17.js.gz +0 -0
  221. package/dist/web/assets/{run-in-terminal-EVMb5TjW.js → run-in-terminal-DAdjH24K.js} +1 -1
  222. package/dist/web/assets/{run-in-terminal-button-CsYq6Xqo.js → run-in-terminal-button-Bu165IH-.js} +1 -1
  223. package/dist/web/assets/{save-as-dialog-DHkBsS-6.js → save-as-dialog-C9OpJz2x.js} +1 -1
  224. package/dist/web/assets/save-as-dialog-C9OpJz2x.js.br +0 -0
  225. package/dist/web/assets/save-as-dialog-C9OpJz2x.js.gz +0 -0
  226. package/dist/web/assets/{schedule-script-editor-CKUl2qxf.js → schedule-script-editor--roOsFbc.js} +1 -1
  227. package/dist/web/assets/schedule-script-editor--roOsFbc.js.br +0 -0
  228. package/dist/web/assets/schedule-script-editor--roOsFbc.js.gz +0 -0
  229. package/dist/web/assets/{schedules-settings-section-EoOXzqF3.js → schedules-settings-section-BTn_NSzU.js} +3 -3
  230. package/dist/web/assets/schedules-settings-section-BTn_NSzU.js.br +0 -0
  231. package/dist/web/assets/schedules-settings-section-BTn_NSzU.js.gz +0 -0
  232. package/dist/web/assets/{send-to-chat-B7oUVcgh.js → send-to-chat-BUxj21hD.js} +1 -1
  233. package/dist/web/assets/send-to-chat-BUxj21hD.js.br +0 -0
  234. package/dist/web/assets/send-to-chat-BUxj21hD.js.gz +0 -0
  235. package/dist/web/assets/{services-panel-BceuL_SU.js → services-panel-BynENSs6.js} +1 -1
  236. package/dist/web/assets/services-panel-BynENSs6.js.br +0 -0
  237. package/dist/web/assets/services-panel-BynENSs6.js.gz +0 -0
  238. package/dist/web/assets/{session-changes-bar-CjSxBYOF.js → session-changes-bar-Dz3QitdJ.js} +1 -1
  239. package/dist/web/assets/session-changes-bar-Dz3QitdJ.js.br +0 -0
  240. package/dist/web/assets/session-changes-bar-Dz3QitdJ.js.gz +0 -0
  241. package/dist/web/assets/{session-review-tab-yIQFGJbG.js → session-review-tab-fRzyogNH.js} +1 -1
  242. package/dist/web/assets/session-review-tab-fRzyogNH.js.br +0 -0
  243. package/dist/web/assets/session-review-tab-fRzyogNH.js.gz +0 -0
  244. package/dist/web/assets/{settings-body-DXNcpoqY.js → settings-body-D5pmlFft.js} +1 -1
  245. package/dist/web/assets/settings-body-D5pmlFft.js.br +0 -0
  246. package/dist/web/assets/settings-body-D5pmlFft.js.gz +0 -0
  247. package/dist/web/assets/{settings-rows-DgL7oTg8.js → settings-rows-VtjChFlm.js} +1 -1
  248. package/dist/web/assets/settings-rows-VtjChFlm.js.br +0 -0
  249. package/dist/web/assets/settings-rows-VtjChFlm.js.gz +0 -0
  250. package/dist/web/assets/{settings-section-content-DFLjO2le.js → settings-section-content-BOwSlBkZ.js} +2 -2
  251. package/dist/web/assets/settings-section-content-BOwSlBkZ.js.br +0 -0
  252. package/dist/web/assets/settings-section-content-BOwSlBkZ.js.gz +0 -0
  253. package/dist/web/assets/{settings-section-content-B1eU_yR4.js → settings-section-content-Ck39TJA7.js} +1 -1
  254. package/dist/web/assets/{settings-store-CBJCnE5L.js → settings-store-CMpVMq3Y.js} +2 -2
  255. package/dist/web/assets/settings-store-CMpVMq3Y.js.br +0 -0
  256. package/dist/web/assets/settings-store-CMpVMq3Y.js.gz +0 -0
  257. package/dist/web/assets/settings-tab-A81xb81d.js +1 -0
  258. package/dist/web/assets/settings-window-content-BCDRi6xS.js +1 -0
  259. package/dist/web/assets/{slash-command-picker-qb3fZ7RP.js → slash-command-picker-BKeEykkF.js} +1 -1
  260. package/dist/web/assets/slash-command-picker-BKeEykkF.js.br +0 -0
  261. package/dist/web/assets/slash-command-picker-BKeEykkF.js.gz +0 -0
  262. package/dist/web/assets/{sql-object-tab-B6JtYu9P.js → sql-object-tab-I5bl3DVf.js} +1 -1
  263. package/dist/web/assets/sql-object-tab-I5bl3DVf.js.br +0 -0
  264. package/dist/web/assets/sql-object-tab-I5bl3DVf.js.gz +0 -0
  265. package/dist/web/assets/{sqlite-viewer-bdNkUymy.js → sqlite-viewer-ECCCjxdn.js} +1 -1
  266. package/dist/web/assets/sqlite-viewer-ECCCjxdn.js.br +0 -0
  267. package/dist/web/assets/sqlite-viewer-ECCCjxdn.js.gz +0 -0
  268. package/dist/web/assets/{structure-save-dialog-5SfYdbAB.js → structure-save-dialog-DcQdamD3.js} +1 -1
  269. package/dist/web/assets/structure-save-dialog-DcQdamD3.js.br +0 -0
  270. package/dist/web/assets/structure-save-dialog-DcQdamD3.js.gz +0 -0
  271. package/dist/web/assets/{structure-tab-DYjjcLIU.js → structure-tab-DyQGhf9t.js} +2 -2
  272. package/dist/web/assets/structure-tab-DyQGhf9t.js.br +0 -0
  273. package/dist/web/assets/structure-tab-DyQGhf9t.js.gz +0 -0
  274. package/dist/web/assets/{system-monitor-body-DouL7ajt.js → system-monitor-body-B5AvRT5J.js} +2 -2
  275. package/dist/web/assets/system-monitor-body-B5AvRT5J.js.br +0 -0
  276. package/dist/web/assets/system-monitor-body-B5AvRT5J.js.gz +0 -0
  277. package/dist/web/assets/system-monitor-tab-CfwHKQ5k.js +1 -0
  278. package/dist/web/assets/{system-monitor-window-content-DUCaJME1.js → system-monitor-window-content-Cvx1V8Mf.js} +1 -1
  279. package/dist/web/assets/{tab-host-window-content-CQ5NiV6Y.js → tab-host-window-content-DqOUHxEL.js} +1 -1
  280. package/dist/web/assets/tab-host-window-content-DqOUHxEL.js.br +0 -0
  281. package/dist/web/assets/tab-host-window-content-DqOUHxEL.js.gz +0 -0
  282. package/dist/web/assets/{tab-store-B4v2kAEY.js → tab-store-NUmgzMPf.js} +1 -1
  283. package/dist/web/assets/table-tab-dI8rBbCS.js +2 -0
  284. package/dist/web/assets/table-tab-dI8rBbCS.js.br +0 -0
  285. package/dist/web/assets/table-tab-dI8rBbCS.js.gz +0 -0
  286. package/dist/web/assets/{telegram-bot-token-field-CqVIuWP1.js → telegram-bot-token-field-DSLtG8vw.js} +1 -1
  287. package/dist/web/assets/telegram-bot-token-field-DSLtG8vw.js.br +0 -0
  288. package/dist/web/assets/telegram-bot-token-field-DSLtG8vw.js.gz +0 -0
  289. package/dist/web/assets/{terminal-tab-DT0MN_Qn.js → terminal-tab-CDg0AHBK.js} +2 -2
  290. package/dist/web/assets/terminal-tab-CDg0AHBK.js.br +0 -0
  291. package/dist/web/assets/terminal-tab-CDg0AHBK.js.gz +0 -0
  292. package/dist/web/assets/{tool-cards-C2YGSKRm.js → tool-cards-7E0jtwP0.js} +5 -5
  293. package/dist/web/assets/tool-cards-7E0jtwP0.js.br +0 -0
  294. package/dist/web/assets/tool-cards-7E0jtwP0.js.gz +0 -0
  295. package/dist/web/assets/{tools-settings-section-DQXIdF8O.js → tools-settings-section-AChVQJyU.js} +1 -1
  296. package/dist/web/assets/tools-settings-section-AChVQJyU.js.br +0 -0
  297. package/dist/web/assets/tools-settings-section-AChVQJyU.js.gz +0 -0
  298. package/dist/web/assets/{use-db-read-BByB906L.js → use-db-read-DgNa66Yo.js} +1 -1
  299. package/dist/web/assets/use-db-read-DgNa66Yo.js.br +0 -0
  300. package/dist/web/assets/use-db-read-DgNa66Yo.js.gz +0 -0
  301. package/dist/web/assets/{use-db-tab-Dc0QSFyM.js → use-db-tab-OGLoicCd.js} +1 -1
  302. package/dist/web/assets/use-db-tab-OGLoicCd.js.br +0 -0
  303. package/dist/web/assets/use-db-tab-OGLoicCd.js.gz +0 -0
  304. package/dist/web/assets/{use-inline-blame-B9M-hADX.js → use-inline-blame-BvlcOQd9.js} +3 -3
  305. package/dist/web/assets/use-inline-blame-BvlcOQd9.js.br +0 -0
  306. package/dist/web/assets/use-inline-blame-BvlcOQd9.js.gz +0 -0
  307. package/dist/web/assets/{use-lsp-DcGiCpl9.js → use-lsp-fLNwD0BI.js} +1 -1
  308. package/dist/web/assets/use-lsp-fLNwD0BI.js.br +0 -0
  309. package/dist/web/assets/use-lsp-fLNwD0BI.js.gz +0 -0
  310. package/dist/web/assets/{use-monaco-theme-CyoMsYaI.js → use-monaco-theme-CbNQ4HnC.js} +1 -1
  311. package/dist/web/assets/{use-process-kill-DsHyrg0-.js → use-process-kill-B4Srjl2m.js} +1 -1
  312. package/dist/web/assets/use-process-kill-B4Srjl2m.js.br +0 -0
  313. package/dist/web/assets/use-process-kill-B4Srjl2m.js.gz +0 -0
  314. package/dist/web/assets/{use-sql-schema-info-BqGN5N4O.js → use-sql-schema-info-CqISFaAW.js} +1 -1
  315. package/dist/web/assets/use-sql-schema-info-CqISFaAW.js.br +0 -0
  316. package/dist/web/assets/use-sql-schema-info-CqISFaAW.js.gz +0 -0
  317. package/dist/web/assets/{use-websocket-DqomrzN8.js → use-websocket-DVJuWhlA.js} +1 -1
  318. package/dist/web/assets/{voice-settings-section-D9KsOm8A.js → voice-settings-section-C1aEYF94.js} +1 -1
  319. package/dist/web/assets/voice-settings-section-C1aEYF94.js.br +0 -0
  320. package/dist/web/assets/voice-settings-section-C1aEYF94.js.gz +0 -0
  321. package/dist/web/assets/{web-preview-tab-CUp1n2jz.js → web-preview-tab-CZJAVoVU.js} +1 -1
  322. package/dist/web/assets/web-preview-tab-CZJAVoVU.js.br +0 -0
  323. package/dist/web/assets/web-preview-tab-CZJAVoVU.js.gz +0 -0
  324. package/dist/web/assets/{window-store-UcSFgNCI.js → window-store-D6EgLSfT.js} +1 -1
  325. package/dist/web/assets/window-store-D6EgLSfT.js.br +0 -0
  326. package/dist/web/assets/window-store-D6EgLSfT.js.gz +0 -0
  327. package/dist/web/index.html +12 -12
  328. package/dist/web/index.html.br +0 -0
  329. package/dist/web/index.html.gz +0 -0
  330. package/dist/web/sw.js +1 -1
  331. package/dist/web/sw.js.br +0 -0
  332. package/dist/web/sw.js.gz +0 -0
  333. package/package.json +1 -1
  334. package/src/services/claude-usage.service.ts +64 -7
  335. package/src/web/components/floating-window/use-window-meta.ts +2 -1
  336. package/src/web/components/floating-window/window-content-registry.ts +2 -0
  337. package/src/web/components/floating-window/window-store-types.ts +1 -1
  338. package/src/web/components/layout/upgrade-button.tsx +27 -46
  339. package/src/web/components/release-notes/open-release-notes.ts +22 -0
  340. package/src/web/components/release-notes/release-notes-entry.tsx +73 -0
  341. package/src/web/components/release-notes/release-notes-view.tsx +72 -0
  342. package/src/web/components/release-notes/release-notes-window-content.tsx +6 -0
  343. package/dist/web/assets/accounts-settings-section-Ctu-w8kt.js +0 -1
  344. package/dist/web/assets/accounts-settings-section-Ctu-w8kt.js.br +0 -0
  345. package/dist/web/assets/accounts-settings-section-Ctu-w8kt.js.gz +0 -0
  346. package/dist/web/assets/agent-session-sheet-DmbSfFGz.js.br +0 -0
  347. package/dist/web/assets/agent-session-sheet-DmbSfFGz.js.gz +0 -0
  348. package/dist/web/assets/agent-session-window-content-Dk8x3ozF.js.br +0 -0
  349. package/dist/web/assets/agent-session-window-content-Dk8x3ozF.js.gz +0 -0
  350. package/dist/web/assets/ai-resource-editor-MKwjYcDh.js.br +0 -0
  351. package/dist/web/assets/ai-resource-editor-MKwjYcDh.js.gz +0 -0
  352. package/dist/web/assets/ai-settings-section-CODZY71V.js +0 -1
  353. package/dist/web/assets/ai-settings-section-CODZY71V.js.br +0 -0
  354. package/dist/web/assets/ai-settings-section-CODZY71V.js.gz +0 -0
  355. package/dist/web/assets/android-tab-CUkjbfyi.js.br +0 -0
  356. package/dist/web/assets/android-tab-CUkjbfyi.js.gz +0 -0
  357. package/dist/web/assets/appearance-settings-section-BZsM8HpZ.js.br +0 -0
  358. package/dist/web/assets/appearance-settings-section-BZsM8HpZ.js.gz +0 -0
  359. package/dist/web/assets/apps-panel-Cs3utBlp.js.br +0 -0
  360. package/dist/web/assets/apps-panel-Cs3utBlp.js.gz +0 -0
  361. package/dist/web/assets/branch-review-tab-C-aPuhXZ.js +0 -1
  362. package/dist/web/assets/branch-review-tab-C-aPuhXZ.js.br +0 -0
  363. package/dist/web/assets/branch-review-tab-C-aPuhXZ.js.gz +0 -0
  364. package/dist/web/assets/chat-tab-CGQu4uLR.js +0 -1
  365. package/dist/web/assets/chat-tab-CGQu4uLR.js.br +0 -0
  366. package/dist/web/assets/chat-tab-CGQu4uLR.js.gz +0 -0
  367. package/dist/web/assets/chat-tab-DtSHSfMU.js.br +0 -0
  368. package/dist/web/assets/chat-tab-DtSHSfMU.js.gz +0 -0
  369. package/dist/web/assets/code-editor-DjDyhff1.js.br +0 -0
  370. package/dist/web/assets/code-editor-DjDyhff1.js.gz +0 -0
  371. package/dist/web/assets/codex-reset-credit-button-BKgiUi8E.js.br +0 -0
  372. package/dist/web/assets/codex-reset-credit-button-BKgiUi8E.js.gz +0 -0
  373. package/dist/web/assets/conflict-editor-DgTv-8pb.js.br +0 -0
  374. package/dist/web/assets/conflict-editor-DgTv-8pb.js.gz +0 -0
  375. package/dist/web/assets/connection-form-tab-CJ-6gH9g.js +0 -4
  376. package/dist/web/assets/connection-form-tab-CJ-6gH9g.js.br +0 -0
  377. package/dist/web/assets/connection-form-tab-CJ-6gH9g.js.gz +0 -0
  378. package/dist/web/assets/csv-preview-BTGpYs4p.js.br +0 -0
  379. package/dist/web/assets/csv-preview-BTGpYs4p.js.gz +0 -0
  380. package/dist/web/assets/db-explorer-store-DDePT3UI.js.br +0 -0
  381. package/dist/web/assets/db-explorer-store-DDePT3UI.js.gz +0 -0
  382. package/dist/web/assets/db-sidebar-reveal-BeT8cp6P.js.br +0 -0
  383. package/dist/web/assets/db-sidebar-reveal-BeT8cp6P.js.gz +0 -0
  384. package/dist/web/assets/db-tab-parts-BYzd4_sR.js.br +0 -0
  385. package/dist/web/assets/db-tab-parts-BYzd4_sR.js.gz +0 -0
  386. package/dist/web/assets/design-settings-section-B3KQBggK.js.br +0 -0
  387. package/dist/web/assets/design-settings-section-B3KQBggK.js.gz +0 -0
  388. package/dist/web/assets/design-tab-CPyj_nFg.js.br +0 -0
  389. package/dist/web/assets/design-tab-CPyj_nFg.js.gz +0 -0
  390. package/dist/web/assets/designs-sidebar-panel-DIGPFo2l.js.br +0 -0
  391. package/dist/web/assets/designs-sidebar-panel-DIGPFo2l.js.gz +0 -0
  392. package/dist/web/assets/diff-viewer-nYz43A94.js +0 -4
  393. package/dist/web/assets/diff-viewer-nYz43A94.js.br +0 -0
  394. package/dist/web/assets/diff-viewer-nYz43A94.js.gz +0 -0
  395. package/dist/web/assets/docx-preview-CowHGqML.js.br +0 -0
  396. package/dist/web/assets/docx-preview-CowHGqML.js.gz +0 -0
  397. package/dist/web/assets/editor-dialog-xPoehDYp.js.br +0 -0
  398. package/dist/web/assets/editor-dialog-xPoehDYp.js.gz +0 -0
  399. package/dist/web/assets/editor-language-service-DdYqCDBU.js.br +0 -0
  400. package/dist/web/assets/editor-language-service-DdYqCDBU.js.gz +0 -0
  401. package/dist/web/assets/explorer-body-BHh5Qpvi.js +0 -2
  402. package/dist/web/assets/explorer-body-BHh5Qpvi.js.br +0 -0
  403. package/dist/web/assets/explorer-body-BHh5Qpvi.js.gz +0 -0
  404. package/dist/web/assets/explorer-model-tGyFETP_.js.br +0 -0
  405. package/dist/web/assets/explorer-model-tGyFETP_.js.gz +0 -0
  406. package/dist/web/assets/explorer-window-content-B1c4QTVL.js.br +0 -0
  407. package/dist/web/assets/explorer-window-content-B1c4QTVL.js.gz +0 -0
  408. package/dist/web/assets/extension-manager-section-BgL0Uyl3.js.br +0 -0
  409. package/dist/web/assets/extension-manager-section-BgL0Uyl3.js.gz +0 -0
  410. package/dist/web/assets/extension-webview-BWB1Yd-t.js.br +0 -0
  411. package/dist/web/assets/extension-webview-BWB1Yd-t.js.gz +0 -0
  412. package/dist/web/assets/files-settings-section-TmoewoO2.js.br +0 -0
  413. package/dist/web/assets/files-settings-section-TmoewoO2.js.gz +0 -0
  414. package/dist/web/assets/general-settings-section-Bu7o8uUn.js.br +0 -0
  415. package/dist/web/assets/general-settings-section-Bu7o8uUn.js.gz +0 -0
  416. package/dist/web/assets/git-log-panel-RjMZIaCk.js.br +0 -0
  417. package/dist/web/assets/git-log-panel-RjMZIaCk.js.gz +0 -0
  418. package/dist/web/assets/git-review-tab-BUW5LZk4.js +0 -3
  419. package/dist/web/assets/git-review-tab-BUW5LZk4.js.br +0 -0
  420. package/dist/web/assets/git-review-tab-BUW5LZk4.js.gz +0 -0
  421. package/dist/web/assets/glide-data-grid-DqlTFhhf.js.br +0 -0
  422. package/dist/web/assets/glide-data-grid-DqlTFhhf.js.gz +0 -0
  423. package/dist/web/assets/grid-save-dialog-BmF2Gy_E.js.br +0 -0
  424. package/dist/web/assets/grid-save-dialog-BmF2Gy_E.js.gz +0 -0
  425. package/dist/web/assets/group-chat-tab-nk3n5wE0.js +0 -1
  426. package/dist/web/assets/group-chat-tab-nk3n5wE0.js.br +0 -0
  427. package/dist/web/assets/group-chat-tab-nk3n5wE0.js.gz +0 -0
  428. package/dist/web/assets/impexp-tab-B8d4oBOB.js.br +0 -0
  429. package/dist/web/assets/impexp-tab-B8d4oBOB.js.gz +0 -0
  430. package/dist/web/assets/index-2_Pz5MiI.css +0 -1
  431. package/dist/web/assets/index-2_Pz5MiI.css.br +0 -0
  432. package/dist/web/assets/index-Cx9ZRibz.js.br +0 -0
  433. package/dist/web/assets/index-Cx9ZRibz.js.gz +0 -0
  434. package/dist/web/assets/keybindings-store-B2AkKQl7.js +0 -1
  435. package/dist/web/assets/keyboard-shortcuts-section-BSMgmbOR.js.br +0 -0
  436. package/dist/web/assets/keyboard-shortcuts-section-BSMgmbOR.js.gz +0 -0
  437. package/dist/web/assets/language-servers-section-DO9wnwnG.js.br +0 -0
  438. package/dist/web/assets/language-servers-section-DO9wnwnG.js.gz +0 -0
  439. package/dist/web/assets/logs-app-xQ2UsN4G.js +0 -13
  440. package/dist/web/assets/logs-app-xQ2UsN4G.js.br +0 -0
  441. package/dist/web/assets/logs-app-xQ2UsN4G.js.gz +0 -0
  442. package/dist/web/assets/logs-tab-H3SmYGRX.js +0 -1
  443. package/dist/web/assets/lsp-client-IsC8Ol0U.js.br +0 -0
  444. package/dist/web/assets/lsp-client-IsC8Ol0U.js.gz +0 -0
  445. package/dist/web/assets/markdown-renderer-BfZiHaNy.js.br +0 -0
  446. package/dist/web/assets/markdown-renderer-BfZiHaNy.js.gz +0 -0
  447. package/dist/web/assets/mobile-explorer-sheet-Dz3eJdBl.js.br +0 -0
  448. package/dist/web/assets/mobile-explorer-sheet-Dz3eJdBl.js.gz +0 -0
  449. package/dist/web/assets/new-design-dialog-B8zeJoJQ.js.br +0 -0
  450. package/dist/web/assets/new-design-dialog-B8zeJoJQ.js.gz +0 -0
  451. package/dist/web/assets/notification-store-BkkcJE2G.js +0 -1
  452. package/dist/web/assets/notifications-settings-section-CMZXQw72.js.br +0 -0
  453. package/dist/web/assets/notifications-settings-section-CMZXQw72.js.gz +0 -0
  454. package/dist/web/assets/open-db-tabs-DYTZbguT.js.br +0 -0
  455. package/dist/web/assets/open-db-tabs-DYTZbguT.js.gz +0 -0
  456. package/dist/web/assets/overview-panel-7_8b6pwr.js.br +0 -0
  457. package/dist/web/assets/overview-panel-7_8b6pwr.js.gz +0 -0
  458. package/dist/web/assets/panel-store-Dx2ziBLp.js.br +0 -0
  459. package/dist/web/assets/panel-store-Dx2ziBLp.js.gz +0 -0
  460. package/dist/web/assets/performance-panel-COQNCyEU.js.br +0 -0
  461. package/dist/web/assets/performance-panel-COQNCyEU.js.gz +0 -0
  462. package/dist/web/assets/ppmbot-settings-section-CmhbbZVI.js.br +0 -0
  463. package/dist/web/assets/ppmbot-settings-section-CmhbbZVI.js.gz +0 -0
  464. package/dist/web/assets/pptx-export-COeBmnFJ.js.br +0 -0
  465. package/dist/web/assets/pptx-export-COeBmnFJ.js.gz +0 -0
  466. package/dist/web/assets/problems-panel-I0EYfa1S.js.br +0 -0
  467. package/dist/web/assets/problems-panel-I0EYfa1S.js.gz +0 -0
  468. package/dist/web/assets/process-table-or-X8Lwh.js.br +0 -0
  469. package/dist/web/assets/process-table-or-X8Lwh.js.gz +0 -0
  470. package/dist/web/assets/proxy-settings-section-DpJ6ok4C.js.br +0 -0
  471. package/dist/web/assets/proxy-settings-section-DpJ6ok4C.js.gz +0 -0
  472. package/dist/web/assets/query-tab-DeNZMZHX.js.br +0 -0
  473. package/dist/web/assets/query-tab-DeNZMZHX.js.gz +0 -0
  474. package/dist/web/assets/remote-access-settings-section-QRP4Yh46.js +0 -1
  475. package/dist/web/assets/remote-access-settings-section-QRP4Yh46.js.br +0 -0
  476. package/dist/web/assets/remote-access-settings-section-QRP4Yh46.js.gz +0 -0
  477. package/dist/web/assets/remote-desktop-clipboard-notice-CGDBpXMf.js.br +0 -0
  478. package/dist/web/assets/remote-desktop-clipboard-notice-CGDBpXMf.js.gz +0 -0
  479. package/dist/web/assets/remote-desktop-mobile-sheet-6nXirdqZ.js.br +0 -0
  480. package/dist/web/assets/remote-desktop-mobile-sheet-6nXirdqZ.js.gz +0 -0
  481. package/dist/web/assets/remote-desktop-mobile-view-BTaj9Flo.js.br +0 -0
  482. package/dist/web/assets/remote-desktop-mobile-view-BTaj9Flo.js.gz +0 -0
  483. package/dist/web/assets/remote-desktop-readiness-gate--gtmfqZh.js.br +0 -0
  484. package/dist/web/assets/remote-desktop-readiness-gate--gtmfqZh.js.gz +0 -0
  485. package/dist/web/assets/remote-desktop-settings-section-Bs5avYaS.js.br +0 -0
  486. package/dist/web/assets/remote-desktop-settings-section-Bs5avYaS.js.gz +0 -0
  487. package/dist/web/assets/remote-desktop-window-content-D4CM-28B.js.br +0 -0
  488. package/dist/web/assets/remote-desktop-window-content-D4CM-28B.js.gz +0 -0
  489. package/dist/web/assets/rename-object-dialog-Dv4iLwnf.js.br +0 -0
  490. package/dist/web/assets/rename-object-dialog-Dv4iLwnf.js.gz +0 -0
  491. package/dist/web/assets/review-address-setup-CU1A_NfZ.js +0 -1
  492. package/dist/web/assets/review-address-setup-CU1A_NfZ.js.br +0 -0
  493. package/dist/web/assets/review-address-setup-CU1A_NfZ.js.gz +0 -0
  494. package/dist/web/assets/review-code-Bet53hHb.js.br +0 -0
  495. package/dist/web/assets/review-code-Bet53hHb.js.gz +0 -0
  496. package/dist/web/assets/save-as-dialog-DHkBsS-6.js.br +0 -0
  497. package/dist/web/assets/save-as-dialog-DHkBsS-6.js.gz +0 -0
  498. package/dist/web/assets/schedule-script-editor-CKUl2qxf.js.br +0 -0
  499. package/dist/web/assets/schedule-script-editor-CKUl2qxf.js.gz +0 -0
  500. package/dist/web/assets/schedules-settings-section-EoOXzqF3.js.br +0 -0
  501. package/dist/web/assets/schedules-settings-section-EoOXzqF3.js.gz +0 -0
  502. package/dist/web/assets/send-to-chat-B7oUVcgh.js.br +0 -0
  503. package/dist/web/assets/send-to-chat-B7oUVcgh.js.gz +0 -0
  504. package/dist/web/assets/services-panel-BceuL_SU.js.br +0 -0
  505. package/dist/web/assets/services-panel-BceuL_SU.js.gz +0 -0
  506. package/dist/web/assets/session-changes-bar-CjSxBYOF.js.br +0 -0
  507. package/dist/web/assets/session-changes-bar-CjSxBYOF.js.gz +0 -0
  508. package/dist/web/assets/session-review-tab-yIQFGJbG.js.br +0 -0
  509. package/dist/web/assets/session-review-tab-yIQFGJbG.js.gz +0 -0
  510. package/dist/web/assets/settings-body-DXNcpoqY.js.br +0 -0
  511. package/dist/web/assets/settings-body-DXNcpoqY.js.gz +0 -0
  512. package/dist/web/assets/settings-rows-DgL7oTg8.js.br +0 -0
  513. package/dist/web/assets/settings-rows-DgL7oTg8.js.gz +0 -0
  514. package/dist/web/assets/settings-section-content-DFLjO2le.js.br +0 -0
  515. package/dist/web/assets/settings-section-content-DFLjO2le.js.gz +0 -0
  516. package/dist/web/assets/settings-store-CBJCnE5L.js.br +0 -0
  517. package/dist/web/assets/settings-store-CBJCnE5L.js.gz +0 -0
  518. package/dist/web/assets/settings-tab-CrGoLKQT.js +0 -1
  519. package/dist/web/assets/settings-window-content-5opW9Wra.js +0 -1
  520. package/dist/web/assets/slash-command-picker-qb3fZ7RP.js.br +0 -0
  521. package/dist/web/assets/slash-command-picker-qb3fZ7RP.js.gz +0 -0
  522. package/dist/web/assets/sql-object-tab-B6JtYu9P.js.br +0 -0
  523. package/dist/web/assets/sql-object-tab-B6JtYu9P.js.gz +0 -0
  524. package/dist/web/assets/sqlite-viewer-bdNkUymy.js.br +0 -0
  525. package/dist/web/assets/sqlite-viewer-bdNkUymy.js.gz +0 -0
  526. package/dist/web/assets/structure-save-dialog-5SfYdbAB.js.br +0 -0
  527. package/dist/web/assets/structure-save-dialog-5SfYdbAB.js.gz +0 -0
  528. package/dist/web/assets/structure-tab-DYjjcLIU.js.br +0 -0
  529. package/dist/web/assets/structure-tab-DYjjcLIU.js.gz +0 -0
  530. package/dist/web/assets/system-monitor-body-DouL7ajt.js.br +0 -0
  531. package/dist/web/assets/system-monitor-body-DouL7ajt.js.gz +0 -0
  532. package/dist/web/assets/system-monitor-tab-qpa36tWB.js +0 -1
  533. package/dist/web/assets/tab-host-window-content-CQ5NiV6Y.js.br +0 -0
  534. package/dist/web/assets/tab-host-window-content-CQ5NiV6Y.js.gz +0 -0
  535. package/dist/web/assets/table-tab-M850PntZ.js +0 -2
  536. package/dist/web/assets/table-tab-M850PntZ.js.br +0 -0
  537. package/dist/web/assets/table-tab-M850PntZ.js.gz +0 -0
  538. package/dist/web/assets/telegram-bot-token-field-CqVIuWP1.js.br +0 -0
  539. package/dist/web/assets/telegram-bot-token-field-CqVIuWP1.js.gz +0 -0
  540. package/dist/web/assets/terminal-tab-DT0MN_Qn.js.br +0 -0
  541. package/dist/web/assets/terminal-tab-DT0MN_Qn.js.gz +0 -0
  542. package/dist/web/assets/tool-cards-C2YGSKRm.js.br +0 -0
  543. package/dist/web/assets/tool-cards-C2YGSKRm.js.gz +0 -0
  544. package/dist/web/assets/tools-settings-section-DQXIdF8O.js.br +0 -0
  545. package/dist/web/assets/tools-settings-section-DQXIdF8O.js.gz +0 -0
  546. package/dist/web/assets/use-db-read-BByB906L.js.br +0 -0
  547. package/dist/web/assets/use-db-read-BByB906L.js.gz +0 -0
  548. package/dist/web/assets/use-db-tab-Dc0QSFyM.js.br +0 -0
  549. package/dist/web/assets/use-db-tab-Dc0QSFyM.js.gz +0 -0
  550. package/dist/web/assets/use-inline-blame-B9M-hADX.js.br +0 -0
  551. package/dist/web/assets/use-inline-blame-B9M-hADX.js.gz +0 -0
  552. package/dist/web/assets/use-lsp-DcGiCpl9.js.br +0 -0
  553. package/dist/web/assets/use-lsp-DcGiCpl9.js.gz +0 -0
  554. package/dist/web/assets/use-process-kill-DsHyrg0-.js.br +0 -0
  555. package/dist/web/assets/use-process-kill-DsHyrg0-.js.gz +0 -0
  556. package/dist/web/assets/use-sql-schema-info-BqGN5N4O.js.br +0 -0
  557. package/dist/web/assets/use-sql-schema-info-BqGN5N4O.js.gz +0 -0
  558. package/dist/web/assets/voice-settings-section-D9KsOm8A.js.br +0 -0
  559. package/dist/web/assets/voice-settings-section-D9KsOm8A.js.gz +0 -0
  560. package/dist/web/assets/web-preview-tab-CUp1n2jz.js.br +0 -0
  561. package/dist/web/assets/web-preview-tab-CUp1n2jz.js.gz +0 -0
  562. package/dist/web/assets/window-store-UcSFgNCI.js.br +0 -0
  563. package/dist/web/assets/window-store-UcSFgNCI.js.gz +0 -0
  564. /package/dist/web/assets/{__vite-browser-external-DLaiEgUM.js → __vite-browser-external-LVpeGV-g.js} +0 -0
  565. /package/dist/web/assets/{api-themes-B3-6zR6Q.js → api-themes-DUOEO3_X.js} +0 -0
  566. /package/dist/web/assets/{claude-models-yFre4eSK.js → claude-models-C9iHl8VB.js} +0 -0
  567. /package/dist/web/assets/{database-drivers-section-c2SuNQPB.js → database-drivers-section-BPXoNrWi.js} +0 -0
  568. /package/dist/web/assets/{database-drivers-section-c2SuNQPB.js.br → database-drivers-section-BPXoNrWi.js.br} +0 -0
  569. /package/dist/web/assets/{database-drivers-section-c2SuNQPB.js.gz → database-drivers-section-BPXoNrWi.js.gz} +0 -0
  570. /package/dist/web/assets/{metric-chart-canvas-Dnm9OOXU.js → metric-chart-canvas-HG8rPTMq.js} +0 -0
  571. /package/dist/web/assets/{metric-chart-canvas-Dnm9OOXU.js.br → metric-chart-canvas-HG8rPTMq.js.br} +0 -0
  572. /package/dist/web/assets/{metric-chart-canvas-Dnm9OOXU.js.gz → metric-chart-canvas-HG8rPTMq.js.gz} +0 -0
  573. /package/dist/web/assets/{notification-settings-CvplVsIo.js → notification-settings--li9wGTJ.js} +0 -0
  574. /package/dist/web/assets/{notification-settings-CvplVsIo.js.br → notification-settings--li9wGTJ.js.br} +0 -0
  575. /package/dist/web/assets/{notification-settings-CvplVsIo.js.gz → notification-settings--li9wGTJ.js.gz} +0 -0
  576. /package/dist/web/assets/{process-row-format-CM1XaqkS.js → process-row-format-CJg8VV-6.js} +0 -0
  577. /package/dist/web/assets/{query-audit-section-C-fT07Zz.js → query-audit-section-BiCUBamA.js} +0 -0
  578. /package/dist/web/assets/{query-audit-section-C-fT07Zz.js.br → query-audit-section-BiCUBamA.js.br} +0 -0
  579. /package/dist/web/assets/{query-audit-section-C-fT07Zz.js.gz → query-audit-section-BiCUBamA.js.gz} +0 -0
  580. /package/dist/web/assets/{remote-desktop-recording-D_fwMC2z.js → remote-desktop-recording-BcDx5c_k.js} +0 -0
  581. /package/dist/web/assets/{separator-CYw7bF1W.js → separator-DUdRLaL0.js} +0 -0
  582. /package/dist/web/assets/{sortable-header-CchrA_dg.js → sortable-header-Ds6nTnqB.js} +0 -0
  583. /package/dist/web/assets/{sortable-header-CchrA_dg.js.br → sortable-header-Ds6nTnqB.js.br} +0 -0
  584. /package/dist/web/assets/{sortable-header-CchrA_dg.js.gz → sortable-header-Ds6nTnqB.js.gz} +0 -0
  585. /package/dist/web/assets/{vendor-xterm-lhGdimFj.js → vendor-xterm-BxbwWHG_.js} +0 -0
  586. /package/dist/web/assets/{vendor-xterm-lhGdimFj.js.br → vendor-xterm-BxbwWHG_.js.br} +0 -0
  587. /package/dist/web/assets/{vendor-xterm-lhGdimFj.js.gz → vendor-xterm-BxbwWHG_.js.gz} +0 -0
@@ -1,4 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{Ot as r,ei as i,r as a,si as ee,xn as o,xt as te}from"./icons-C1wDt09O.js";import{a as s,o as c,r as l}from"./api-client-BnYFnEfK.js";import{t as u}from"./settings-store-CBJCnE5L.js";import"./project-store-Bs-kiU8m.js";import"./project-framework-store-nuePqBBa.js";import"./git-repo-store-CESIqItW.js";import{t as d}from"./button-BHGVTbam.js";import{$ as ne,bi as re,di as f,li as ie,tt as p}from"./index-Cx9ZRibz.js";import{t as ae}from"./use-monaco-theme-CyoMsYaI.js";import{n as oe,t as se}from"./editor-font-UC3YDKcu.js";import{t as m}from"./use-inline-blame-B9M-hADX.js";import{n as h,r as ce}from"./monaco-dotenv-language-jKkZFsKj.js";import{n as g,o as _}from"./can-open-in-ppm-C_Ev8S2p.js";import{r as v}from"./image-preview-geometry-BX1a3Lfa.js";var y=e(t(),1),b=n();function x(e){return g.has(_(e))}function S(e){return/^[0-9a-f]{40}$/i.test(e)?e.slice(0,7):e}function C({mode:e,onChange:t}){return(0,b.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,b.jsx)(`option`,{value:`preview`,children:`Image Preview`}),(0,b.jsx)(`option`,{value:`text`,children:`Text Editor`})]})}function le({filePath:e,mode:t,original:n,modified:r,onOpenAnyway:i}){if(t===`text`||!x(e))return(0,b.jsx)(w,{onOpenAnyway:i});let a=[n,r].filter(e=>e.url!==null);if(a.length<2){let e=a[0];return e?(0,b.jsx)(T,{side:e}):(0,b.jsx)(w,{onOpenAnyway:i})}return(0,b.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col md:flex-row`,children:[(0,b.jsx)(T,{side:a[0]}),(0,b.jsx)(`div`,{className:`shrink-0 border-b border-border md:border-b-0 md:border-r`}),(0,b.jsx)(T,{side:a[1]})]})}function w({onOpenAnyway:e}){return(0,b.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-4 p-6 text-center`,children:[(0,b.jsx)(a,{className:`size-10 text-warning`}),(0,b.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,b.jsx)(d,{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 T({side:e}){return(0,b.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,b.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-border px-3 py-1.5`,children:[(0,b.jsx)(`span`,{className:`truncate text-xs font-medium text-text-secondary`,children:e.label}),e.size!==null&&(0,b.jsx)(`span`,{className:`shrink-0 text-xs text-text-subtle`,children:v(e.size)})]}),(0,b.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center overflow-auto bg-surface p-4`,children:(0,b.jsx)(E,{url:e.url})})]})}function E({url:e}){let{blobUrl:t,failed:n}=D(e);return n?(0,b.jsxs)(`div`,{className:`flex flex-col items-center gap-2 text-text-subtle`,children:[(0,b.jsx)(r,{className:`size-8`}),(0,b.jsx)(`p`,{className:`text-xs`,children:`Failed to load.`})]}):t?(0,b.jsx)(`img`,{src:t,alt:``,className:`max-h-full max-w-full object-contain`}):(0,b.jsx)(o,{className:`size-5 animate-spin text-text-subtle`})}function D(e){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(!1),a=(0,y.useRef)(null);return(0,y.useEffect)(()=>{let t=!1;i(!1);let r=s();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,y.useEffect)(()=>()=>{a.current&&URL.revokeObjectURL(a.current)},[]),{blobUrl:t,failed:r}}function ue({onMount:e,...t}){let n=(0,y.useRef)(null);return(0,y.useLayoutEffect)(()=>()=>{let e=n.current;if(!e)return;let t=e.getModel();e.setModel(null),t?.original.dispose(),t?.modified.dispose()},[]),(0,b.jsx)(p,{...t,onMount:(t,r)=>{n.current=t,e?.(t,r)}})}function de(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()??``]??(h(e)?`dotenv`:`plaintext`)}function O({metadata:e}){let t=e?.filePath,n=e?.projectName,r=e?.ref1,a=e?.ref2,s=e?.file1,d=e?.file2,p=e?.original,h=e?.modified,g=p!=null||h!=null,_=!!(s&&d),[v,w]=(0,y.useState)(null),[T,E]=(0,y.useState)(null),[D,O]=(0,y.useState)(null),[k,A]=(0,y.useState)(`preview`),[j,M]=(0,y.useState)(!1),N=e=>{A(e),e===`preview`&&M(!1)},[P,F]=(0,y.useState)(!g),[I,L]=(0,y.useState)(null),{wordWrap:pe,toggleWordWrap:R,mobileWordWrap:z,toggleMobileWordWrap:me}=u(f(e=>({wordWrap:e.wordWrap,toggleWordWrap:e.toggleWordWrap,mobileWordWrap:e.mobileWordWrap,toggleMobileWordWrap:e.toggleMobileWordWrap}))),he=ae(),B=ie(n),V=(0,y.useRef)(null),H=(0,y.useRef)(null),[ge,_e]=(0,y.useState)(!1),[U,ve]=(0,y.useState)(null),[W,G]=(0,y.useState)(`modified`),[K,ye]=(0,y.useState)();(0,y.useEffect)(()=>{let e=V.current;if(!e)return;let t=new ResizeObserver(([e])=>{e&&ye(Math.floor(e.contentRect.height))});return t.observe(e),()=>t.disconnect()},[P,I]),(0,y.useEffect)(()=>re(V.current,()=>H.current?.layout()),[P,I]),(0,y.useEffect)(()=>{if(g||!n)return;if(F(!0),L(null),O(null),E(null),w(null),s&&d){let e=new URLSearchParams({file1:s,file2:d});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.fileScope(t);if(e===void 0)return;if(e===null){F(!1);return}let n=new URLSearchParams({file:e.path});r&&n.set(`ref`,r),a&&n.set(`ref2`,a),j&&n.set(`text`,`1`),l.get(B.fileGitUrl(`/file-full-diff?${n}`,e.repo)).then(e=>{O(e),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to load diff`),F(!1)});return}let e;if(r||a){let t=new URLSearchParams;r&&t.set(`ref1`,r),a&&t.set(`ref2`,a),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,r,a,s,d,g,B,j]),(0,y.useEffect)(()=>{M(!1),A(`preview`)},[t,r,a]);let{original:q,modified:J}=(0,y.useMemo)(()=>g?{original:p??``,modified:h??``}:_&&T?T:D||(v?fe(v):{original:``,modified:``}),[v,g,p,h,_,T,D]),be=(0,y.useMemo)(()=>{let e=t??d??s;return e?de(e):`plaintext`},[t,s,d]),Y=u(e=>e.inlineBlame),xe=u(e=>e.toggleInlineBlame),X=typeof window<`u`&&window.innerWidth<768,Z=X?z:pe,Se=X?me:R,Q=!!(n&&t&&D)&&!X;m({editor:U?.original??null,monaco:U?.monaco??null,projectName:n,filePath:Q?t:void 0,rev:r||`HEAD`,enabled:Y&&Q&&W===`original`,readOnly:!0}),m({editor:U?.modified??null,monaco:U?.monaco??null,projectName:n,filePath:Q?t:void 0,rev:a,enabled:Y&&Q&&W===`modified`,readOnly:!0});let $=!X;if((0,y.useEffect)(()=>{let e=H.current;if(!e)return;let t=Z?`on`:`off`;e.updateOptions({diffWordWrap:t}),e.getOriginalEditor().updateOptions({wordWrapOverride2:$?t:`off`}),e.getModifiedEditor().updateOptions({wordWrapOverride2:t})},[Z,ge,$]),!n&&!g)return(0,b.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`No project selected.`});if(P)return(0,b.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,b.jsx)(o,{className:`size-5 animate-spin`}),(0,b.jsx)(`span`,{className:`text-sm`,children:`Loading diff...`})]});if(I)return(0,b.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.fileScope(t),i=t=>e==null?null:B.fileGitUrl(`/file-blob?file=${encodeURIComponent(e.path)}&ref=${encodeURIComponent(t)}`,e.repo);return(0,b.jsxs)(`div`,{className:`flex flex-col h-full`,children:[x(t)&&(0,b.jsx)(`div`,{className:`flex items-center justify-end gap-0.5 px-2 py-0.5 border-b border-border shrink-0`,children:(0,b.jsx)(C,{mode:k,onChange:N})}),(0,b.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,b.jsx)(le,{filePath:t,mode:k,original:{url:D.originalSize===null?null:i(r||`HEAD`),label:S(r||`HEAD`),size:D.originalSize},modified:{url:D.modifiedSize===null?null:a?i(a):`${c(n)}/files/raw?path=${encodeURIComponent(t)}`,label:a?S(a):`Working Tree`,size:D.modifiedSize},onOpenAnyway:()=>M(!0)})})]})}return!g&&!_&&!D&&!q&&!J?(0,b.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,b.jsx)(te,{className:`size-8`}),(0,b.jsx)(`p`,{className:`text-sm`,children:`No content changes`}),t&&(0,b.jsx)(`p`,{className:`text-xs font-mono`,children:t})]}):(0,b.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,b.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&&x(t)&&(0,b.jsx)(C,{mode:`text`,onChange:N}),Q&&(0,b.jsx)(`button`,{type:`button`,onClick:xe,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 ${Y?`bg-muted text-foreground`:``}`,children:(0,b.jsx)(i,{className:`size-3.5`})}),(0,b.jsx)(`button`,{type:`button`,onClick:Se,title:Z?`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 ${X?`size-11`:`p-1`} ${Z?`bg-muted text-foreground`:``}`,children:(0,b.jsx)(ee,{className:`size-3.5`})})]}),(0,b.jsx)(`div`,{ref:V,className:`flex-1 overflow-hidden`,children:K&&K>0?(0,b.jsx)(ue,{height:K,language:be,beforeMount:e=>{ne(e),ce(e)},original:q,modified:J,theme:he,onMount:(e,t)=>{H.current=e,_e(!0);let n=e.getOriginalEditor(),r=e.getModifiedEditor();ve({monaco:t,original:n,modified:r}),n.onDidFocusEditorText(()=>G(`original`)),r.onDidFocusEditorText(()=>G(`modified`)),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyB,()=>u.getState().toggleInlineBlame())},options:{fontSize:X?11:14,fontFamily:se,fontLigatures:oe,diffWordWrap:Z?`on`:`off`,renderSideBySide:$,useInlineViewWhenSpaceIsLimited:!1,readOnly:!0,automaticLayout:!0,scrollBeyondLastLine:!1},loading:(0,b.jsx)(o,{className:`size-5 animate-spin text-muted-foreground`})}):(0,b.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,b.jsx)(o,{className:`size-5 animate-spin text-muted-foreground`})})})]})}function fe(e){let t=e.split(`
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
- `),modified:r.join(`
4
- `)}}export{O as DiffViewer};
@@ -1,2 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{$t as r,A as i,Ct as a,Kr as o,L as s,Lt as c,P as l,Qr as u,Vn as d,Xt as f,Zr as p,_t as m,cr as h,et as g,fn as _,g as v,gn as y,hr as b,ht as x,ir as S,li as C,lt as ee,m as te,nr as ne,on as re,r as ie,tn as ae,u as oe,ut as se,v as ce,vt as le,xr as ue,yr as de,z as fe,zt as pe}from"./icons-C1wDt09O.js";import{t as me}from"./createLucideIcon-B2pji242.js";import{a as he,k as w}from"./api-client-BnYFnEfK.js";import{t as ge}from"./react-B9hau9ra.js";import{n as T}from"./utils-D3xTlJyU.js";import{n as _e}from"./window-store-UcSFgNCI.js";import{t as ve}from"./tab-store-B4v2kAEY.js";import{o as ye}from"./file-store-Bn0vbkCx.js";import{n as E}from"./use-is-mobile-CL2I7hLf.js";import{r as be}from"./clipboard-D3XnL7CB.js";import{n as xe}from"./file-icons-CB0RsVdl.js";import{a as Se,c as Ce,i as we,l as Te,m as Ee,r as De,s as Oe,t as ke}from"./dropdown-menu-CxZR_vuV.js";import{i as Ae,n as je,o as Me,r as D,t as Ne}from"./mobile-bottom-sheet-M9pZptfh.js";import{a as Pe,c as Fe,i as Ie,l as Le,n as Re,o as O,r as k,s as ze,t as A,u as j}from"./adaptive-context-menu-CxHkI7dL.js";import{n as M,t as Be}from"./fs-api-BVIVh_De.js";import{a as Ve,n as He,o as Ue,r as We,s as Ge,t as Ke}from"./format-file-meta-BOAh9mam.js";import{$r as qe,Br as N,Gr as Je,Hr as Ye,Kr as Xe,Qr as Ze,Ur as Qe,Vr as $e,Wr as et,Xr as P,ai as tt,ei as nt,ft as rt,ii as it,ni as at,oi as ot,qr as st,ri as ct,si as F,ti as I,ui as lt,yi as ut}from"./index-Cx9ZRibz.js";import{a as L,o as R,s as dt}from"./can-open-in-ppm-C_Ev8S2p.js";var ft=me(`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`}]]),pt=`ppm-explorer-pins`,mt=50;function ht(){try{let e=localStorage.getItem(pt),t=e?JSON.parse(e):[];return Array.isArray(t)?t.filter(e=>!!e&&typeof e.path==`string`&&typeof e.name==`string`).slice(0,mt):[]}catch{return[]}}function gt(e){try{localStorage.setItem(pt,JSON.stringify(e))}catch{}}var z=ge((e,t)=>({pins:ht(),isPinned:e=>t().pins.some(t=>t.path===e),pin:n=>{if(t().isPinned(n.path))return;let r=[...t().pins,n].slice(0,mt);gt(r),e({pins:r})},unpin:n=>{let r=t().pins.filter(e=>e.path!==n);gt(r),e({pins:r})}}));function _t(e){return L(e.name)?(ve.getState().openTab({type:dt(e.name)===`sqlite`?`sqlite`:`editor`,title:e.name,projectId:null,metadata:{filePath:e.path},closable:!0}),!0):!1}function vt(e){return _e.getState().open(`explorer`,{path:e})}async function yt(e){let t=e.filter(e=>e.type===`file`),n=e.length-t.length;n>0&&w.warning(n===1?`Folders cannot be downloaded`:`${n} folders skipped`);for(let e of t)try{ut(await M.downloadUrl(e.path),e.name)}catch(t){w.error(`Download failed: ${e.name}`,{description:t instanceof Error?t.message:void 0})}}async function bt(e,t){e.length!==0&&(await be(e.join(`
2
- `)),w.success(e.length===1?`${t} copied`:`${e.length} ${t.toLowerCase()}s copied`))}var xt=/[<>:"|?*]/,St=/[\u0000-\u001f]/,Ct=/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\..*)?$/i;function wt(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(St.test(e))return`Invalid character in name`;if(t===`win32`){if(xt.test(e))return`Cannot contain < > : " | ? *`;if(Ct.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 Tt(e,t,n,r){let i=Ge(e,t,r);try{return n===`folder`?await M.mkdir(i,!1):await M.touch(i),tt(e),!0}catch(e){return w.error(n===`folder`?`Could not create folder`:`Could not create file`,{description:He(e)}),!1}}async function Et(e,t,n){try{return await M.rename(e,t),tt(Ke(e,n)),!0}catch(e){return w.error(`Rename failed`,{description:He(e)}),!1}}async function Dt(e,t,n){let r={removed:0,needsPermanent:[]},i=new Set;for(let a of e){i.add(Ke(a,n));try{await M.remove(a,t),r.removed++}catch(e){if(e instanceof Be&&e.code===`NO_TRASH`){r.needsPermanent.push(a);continue}w.error(`Delete failed`,{description:He(e)})}}if(tt(...i),r.removed>0){let e=`${r.removed} item${r.removed===1?``:`s`}`;w.success(t?`Deleted ${e}`:`Moved ${e} to Trash`)}return r}function Ot(e,t){let n=e?Array.from({length:e.length},(t,n)=>e.item(n)).filter(e=>e!=null):[];return t(),n}var B=e(t(),1),V=n();function kt(e){let t=(0,B.useRef)(null),n=(0,B.useRef)(null),r=typeof document<`u`&&`webkitdirectory`in document.createElement(`input`),i=t=>{let n=Ot(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,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`input`,{ref:t,type:`file`,multiple:!0,hidden:!0,onChange:i,"data-testid":`explorer-upload-file-input`}),r&&(0,V.jsx)(`input`,{ref:n,webkitdirectory:``,type:`file`,multiple:!0,hidden:!0,onChange:i,"data-testid":`explorer-upload-folder-input`})]})}}function At(e,t){let n=(0,B.useCallback)((t,n)=>Je(t,n,e.sep,e),[e]),r=kt(e=>void n(e,t()));return{uploadInto:n,openUploadPicker:r.openFilePicker,openUploadFolderPicker:r.openFolderPicker,supportsFolderUpload:r.supportsFolderPicker,uploadInputs:r.inputs}}function jt(e,t,n,r){let i=F(e=>e.patch),a=et(),o=Qe(),[s,c]=(0,B.useState)(null),[l,u]=(0,B.useState)(null),[d,f]=(0,B.useState)(null),p=(0,B.useRef)(t);p.current=t;let m=(0,B.useRef)(a);m.current=a;let h=(0,B.useRef)(o);h.current=o;let g=(0,B.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=At(g,_),y=(0,B.useMemo)(()=>({openEntry:e=>{e.type===`directory`?n.go(e.path):_t(e)},openInNewWindow:e=>{vt(e.type===`directory`?e.path:p.current?.path??e.path)},openInTerminal:e=>{st(e?.type===`directory`?e.path:_())},cut:e=>ct(e.map(e=>e.path),`cut`),copy:e=>ct(e.map(e=>e.path),`copy`),paste:e=>void at(e??_(),g),transferInto:async(e,t,n)=>{let r=await it(e,t,n,g);if(r.succeeded>0){let e=n===`copy`?`Copied`:`Moved`;w.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=wt(o,r);if(s){f(s);return}f(null),(a.kind===`rename`?await Et(a.path,o,n.sep):await Tt(n.path,o,a.kind===`new-folder`?`folder`:`file`,n.sep))&&i(e,{inlineEdit:null})},trash:e=>{Dt(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 yt(e),copyPath:e=>void bt(e,`Path`),copyName:e=>void bt(e,`Name`),togglePin:(e,t)=>{let n=z.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,B.useCallback)(()=>{let e=s;c(null),e&&Dt(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 Mt=e=>(0,V.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,...e,children:(0,V.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`})}),Nt=e=>(0,V.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,...e,children:(0,V.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`})}),Pt=Mt,Ft=Nt,It=(0,B.createContext)({closed:Pt,open:Ft}),Lt=It.Provider;function H({name:e,kind:t,open:n,className:i}){let a=(0,B.useContext)(It),o=T(`shrink-0`,i);return t===`directory`?(0,V.jsx)(n?a.open:a.closed,{className:o}):t===`symlink`?(0,V.jsx)(pe,{className:T(o,`text-text-2`)}):t===`unknown`?(0,V.jsx)(r,{className:T(o,`text-text-subtle`)}):(0,V.jsx)(xe,{name:e,className:o})}function Rt({className:e}){return(0,V.jsx)(H,{name:``,kind:`directory`,className:T(`size-4 shrink-0`,e)})}var zt={fixed:f,removable:u,network:ft,unknown:f};function U({label:e,path:t,active:n,icon:r,onNavigate:i,onUnpin:a,run:o,uploadRun:s}){let c=I(),l=N({targetDir:t,run:o,onFiles:s});return(0,V.jsxs)(`div`,{className:`group/place relative flex items-center`,children:[(0,V.jsxs)(`button`,{type:`button`,title:t,onClick:()=>i(t),className:T(`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,V.jsx)(r,{className:`size-4 shrink-0 text-text-subtle`}),(0,V.jsx)(`span`,{className:`truncate`,children:e})]}),a&&(0,V.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,V.jsx)(S,{className:`size-3.5`})})]})}function W({title:e,children:t}){return(0,V.jsxs)(`div`,{className:`pb-2`,children:[(0,V.jsx)(`p`,{className:`px-2 pb-0.5 pt-2 text-[10px] font-semibold uppercase tracking-wide text-text-subtle`,children:e}),t]})}var Bt={home:`Home`,pinned:`Quick access`,known:`Folders`,drives:`Drives`};function Vt({host:e,currentPath:t,onNavigate:n,vocab:r=Bt}){let i=z(e=>e.pins),a=z(e=>e.unpin),o=e=>e===t,{run:s,uploadRun:c,prompts:l}=$e(e?.sep??`/`,e?.platform);return(0,V.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,V.jsx)(W,{title:`Pinned`,children:i.map(e=>(0,V.jsx)(U,{label:e.name,path:e.path,icon:S,active:o(e.path),onNavigate:n,onUnpin:()=>a(e.path),run:s,uploadRun:c},e.path))}),e&&e.pinned.length>0&&(0,V.jsx)(W,{title:r.pinned,children:e.pinned.map(e=>(0,V.jsx)(U,{label:e.name,path:e.path,icon:Rt,active:o(e.path),onNavigate:n,run:s,uploadRun:c},e.path))}),e&&(0,V.jsxs)(W,{title:r.known,children:[(0,V.jsx)(U,{label:r.home,path:e.homedir,icon:Rt,active:o(e.homedir),onNavigate:n,run:s,uploadRun:c}),e.knownFolders.map(e=>(0,V.jsx)(U,{label:e.name,path:e.path,icon:Rt,active:o(e.path),onNavigate:n,run:s,uploadRun:c},e.path))]}),e&&e.drives.length>0&&(0,V.jsx)(W,{title:r.drives,children:e.drives.map(e=>(0,V.jsx)(U,{label:e.label?`${e.label} (${e.name})`:e.name,path:e.path,icon:zt[e.kind],active:o(e.path),onNavigate:n,run:s,uploadRun:c},e.path))}),e?.warnings.map(e=>(0,V.jsxs)(`p`,{className:`flex gap-1.5 px-2 py-1 text-[11px] leading-snug text-text-subtle`,children:[(0,V.jsx)(ie,{className:`mt-0.5 size-3 shrink-0`}),(0,V.jsx)(`span`,{children:e})]},e)),l]})}var G=new Intl.Collator(void 0,{numeric:!0,sensitivity:`base`});function Ht(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=G.compare(R(t.name),R(n.name));return e===0?G.compare(t.name,n.name):e}case`name`:return G.compare(t.name,n.name)}}function Ut(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=Ht(n.key,e,t);return(i===0?G.compare(e.name,t.name):i)*a})}function Wt(e){return e.reduce((e,t)=>e+(t.type===`file`?t.size??0:0),0)}function Gt({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=Wt(r);e>0&&i.push(Ue(e))}return(0,V.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,V.jsx)(`span`,{className:`ml-auto`,children:`Listing capped — narrow the filter to see the rest.`})]})}var Kt=3;function qt({crumbs:e,onNavigate:t,className:n,sep:r}){let{run:i,prompts:a}=$e(r);if(e.length===0)return(0,V.jsx)(`div`,{className:n});let o=e.length>Kt+2,c=o?e.slice(0,1):e,l=o?e.slice(1,e.length-Kt):[],u=o?e.slice(e.length-Kt):[];return(0,V.jsxs)(`nav`,{"aria-label":`Path`,className:T(`flex min-w-0 items-center gap-0.5 text-xs`,n),children:[c.map(n=>(0,V.jsxs)(`span`,{className:`flex shrink-0 items-center gap-0.5`,children:[(0,V.jsx)(Jt,{crumb:n,last:!o&&n===e[e.length-1],onNavigate:t,run:i}),(0,V.jsx)(s,{className:`size-3 shrink-0 text-text-subtle`})]},n.path)),o&&(0,V.jsxs)(ke,{children:[(0,V.jsx)(Ee,{asChild:!0,children:(0,V.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,V.jsx)(d,{className:`size-3.5`})})}),(0,V.jsx)(De,{align:`start`,className:`max-h-72 overflow-y-auto`,children:l.map(e=>(0,V.jsx)(we,{onClick:()=>t(e.path),children:e.name},e.path))})]}),o&&(0,V.jsx)(s,{className:`size-3 shrink-0 text-text-subtle`}),u.map((e,n)=>(0,V.jsxs)(`span`,{className:`flex min-w-0 items-center gap-0.5`,children:[(0,V.jsx)(Jt,{crumb:e,last:n===u.length-1,onNavigate:t,run:i}),n<u.length-1&&(0,V.jsx)(s,{className:`size-3 shrink-0 text-text-subtle`})]},e.path)),a]})}function Jt({crumb:e,last:t,onNavigate:n,run:r}){let i=N({targetDir:e.path,run:r});return(0,V.jsx)(`button`,{type:`button`,onClick:()=>n(e.path),className:T(`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 K=[{key:`name`,label:`Name`},{key:`size`,label:`Size`},{key:`modified`,label:`Modified`},{key:`kind`,label:`Kind`}],Yt=[{dir:`asc`,label:`Ascending`},{dir:`desc`,label:`Descending`}];function Xt(e){return K.find(t=>t.key===e)?.label??e}function Zt(e){return Yt.find(t=>t.dir===e)?.label??e}function q(e){return T(`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 Qt({coarse:e}){let t=F(e=>e.sort),n=F(e=>e.setPrefs),r=`Sort`,i=`${r}: ${Xt(t.key)}, ${Zt(t.dir)}`;return(0,V.jsxs)(ke,{children:[(0,V.jsx)(Ee,{asChild:!0,children:(0,V.jsx)(`button`,{type:`button`,"aria-label":r,title:i,className:q(e),children:(0,V.jsx)(ce,{className:`size-4`})})}),(0,V.jsxs)(De,{align:`end`,children:[(0,V.jsx)(Se,{children:`Sort by`}),(0,V.jsx)(Oe,{value:t.key,onValueChange:e=>n({sort:{key:e,dir:t.dir}}),children:K.map(({key:e,label:t})=>(0,V.jsx)(Ce,{value:e,children:t},e))}),(0,V.jsx)(Te,{}),(0,V.jsx)(Se,{children:`Order`}),(0,V.jsx)(Oe,{value:t.dir,onValueChange:e=>n({sort:{key:t.key,dir:e}}),children:Yt.map(({dir:e,label:t})=>(0,V.jsx)(Ce,{value:e,children:t},e))})]})]})}function J({targets:e,currentDir:t,hasClipboard:n,isPinned:r,actions:i}){let a=E(),o=e.length===1?e[0]:null,s=e.length>0&&e.every(e=>e.type===`directory`),c=e.length,l=c>1?` ${c} items`:``,u=F(e=>e.sort),d=F(e=>e.setPrefs);return c===0?(0,V.jsxs)(Re,{children:[(0,V.jsx)(k,{onClick:()=>i.startCreate(`new-file`),children:`New File`}),(0,V.jsx)(k,{onClick:()=>i.startCreate(`new-folder`),children:`New Folder`}),(0,V.jsx)(O,{}),(0,V.jsx)(k,{disabled:!n,onClick:()=>i.paste(),children:`Paste`}),(0,V.jsx)(O,{}),(0,V.jsx)(k,{onClick:()=>i.openUploadPicker(),children:`Upload Files…`}),i.supportsFolderUpload&&(0,V.jsx)(k,{onClick:()=>i.openUploadFolderPicker(),children:`Upload Folder…`}),(0,V.jsx)(O,{}),(0,V.jsx)(k,{onClick:()=>i.openInTerminal(),children:`Open in Terminal`}),(0,V.jsx)(O,{}),(0,V.jsxs)(ze,{children:[(0,V.jsx)(Le,{children:`Sort by`}),(0,V.jsxs)(Fe,{children:[(0,V.jsx)(Ie,{value:u.key,onValueChange:e=>d({sort:{key:e,dir:u.dir}}),children:K.map(({key:e,label:t})=>(0,V.jsx)(Pe,{value:e,children:t},e))}),(0,V.jsx)(O,{}),(0,V.jsx)(Ie,{value:u.dir,onValueChange:e=>d({sort:{key:u.key,dir:e}}),children:Yt.map(({dir:e,label:t})=>(0,V.jsx)(Pe,{value:e,children:t},e))})]})]}),(0,V.jsx)(O,{}),(0,V.jsx)(k,{onClick:()=>i.copyPath([t]),children:`Copy Path`})]}):(0,V.jsxs)(Re,{children:[o&&(o.type===`directory`||L(o.name))&&(0,V.jsx)(k,{onClick:()=>i.openEntry(o),children:`Open`}),s&&o&&!a&&(0,V.jsx)(k,{onClick:()=>i.openInNewWindow(o),children:`Open in New Window`}),s&&o&&(0,V.jsx)(k,{onClick:()=>i.openInTerminal(o),children:`Open in Terminal`}),(0,V.jsx)(O,{}),(0,V.jsxs)(k,{onClick:()=>i.cut(e),children:[`Cut`,l]}),(0,V.jsxs)(k,{onClick:()=>i.copy(e),children:[`Copy`,l]}),s&&o&&(0,V.jsx)(k,{disabled:!n,onClick:()=>i.paste(o.path),children:`Paste`}),(0,V.jsx)(O,{}),o&&(0,V.jsx)(k,{onClick:()=>i.startRename(o),children:`Rename`}),(0,V.jsxs)(k,{onClick:()=>i.trash(e),children:[`Move to Trash`,l]}),(0,V.jsx)(k,{variant:`destructive`,onClick:()=>i.confirmPermanentDelete(e),children:`Delete permanently`}),(0,V.jsx)(O,{}),(0,V.jsx)(k,{onClick:()=>i.copyPath(e.map(e=>e.path)),children:`Copy Path`}),(0,V.jsx)(k,{onClick:()=>i.copyName(e.map(e=>e.name)),children:`Copy Name`}),e.some(e=>e.type===`file`)&&(0,V.jsx)(k,{onClick:()=>i.download(e),children:`Download`}),s&&o&&(0,V.jsx)(k,{onClick:()=>i.togglePin(o.path,o.name),children:r(o.path)?`Unpin from Sidebar`:`Pin to Sidebar`}),o&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(O,{}),(0,V.jsx)(k,{onClick:()=>i.showProperties(o),children:`Properties`})]})]})}function $t(e){let{entry:t,dragPaths:n,run:r,springLoad:i,origin:a=`explorer`,projectName:o,extraData:s,onDragStarted:c,onFiles:l}=e,u=qe({paths:n,origin:a,projectName:o,extraData:s,onDragStarted:c}),d=N({targetDir:t.type===`directory`?t.path:null,run:r,springLoad:t.type===`directory`?i:void 0,onFiles:l});return{props:(0,B.useMemo)(()=>({...u,...d.handlers}),[u,d.handlers]),isDropTarget:d.isOver}}function en(e){return e.type===`directory`||L(e.name)?`open`:`sheet`}function tn(e){return e.startsWith(`on`)&&e.length>2&&e[2]===e[2]?.toUpperCase()}function nn(e,t){return n=>{e?.(n),t?.(n)}}function rn(e,t){if(!e)return t;let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];if(tn(e)&&typeof t==`function`&&typeof r==`function`){n[e]=nn(t,r);continue}if(e===`style`&&t&&r){n[e]={...t,...r};continue}if(e===`className`){n[e]=T(t,r);continue}r!==void 0&&(n[e]=r)}return n}function an({entry:e,selected:t,currentDir:n,hasClipboard:r,isPinned:i,actions:a,rowHeight:o,onSelect:s,onOpen:c}){let l=$t({entry:e,dragPaths:[e.path],run:a.transferInto,springLoad:s,onFiles:a.uploadInto});return(0,V.jsxs)(A,{children:[(0,V.jsx)(j,{asChild:!0,children:(0,V.jsx)(on,{entry:e,selected:t,rowHeight:o,onSelect:s,onOpen:c,dnd:l.props,dropActive:l.isDropTarget})}),(0,V.jsx)(J,{targets:[e],currentDir:n,hasClipboard:r,isPinned:i,actions:a})]})}var on=(0,B.forwardRef)(function({entry:e,selected:t,rowHeight:n,onSelect:r,onOpen:i,dnd:a,dropActive:o,...s},c){let l=nt(r),u=E(),{setOpen:d}=(0,B.useContext)(je),f=()=>{r(),!(!u||e.type===`directory`)&&(en(e)===`open`?i():d(!0))};return(0,V.jsxs)(`div`,{ref:c,...rn({...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:T(`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,V.jsx)(H,{name:e.name,kind:e.kind,className:`size-4 shrink-0`}),(0,V.jsx)(`span`,{className:T(`flex-1 truncate`,t?`text-text`:`text-text-2`),children:e.name}),e.type===`directory`&&(0,V.jsx)(`span`,{className:`text-text-subtle`,children:`›`})]})});function sn({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,B.useRef)(null);Xe(h);let g=m?48:u,_=lt({count:t.length,getScrollElement:()=>h.current,estimateSize:()=>g,overscan:8}),v=N({targetDir:e,run:l.transferInto,onFiles:l.uploadInto,disabled:m});return(0,V.jsx)(`div`,{className:T(`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,V.jsxs)(`div`,{ref:h,role:`listbox`,"aria-label":e,className:T(`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,V.jsx)(`p`,{className:`p-2 text-xs text-text-subtle`,children:`Loading…`}),r&&(0,V.jsx)(`p`,{className:`p-2 text-xs text-error`,children:r}),!n&&!r&&t.length===0&&(0,V.jsx)(`p`,{className:`p-2 text-xs text-text-subtle`,children:`Empty`}),(0,V.jsx)(`div`,{className:`relative w-full`,style:{height:_.getTotalSize()},children:_.getVirtualItems().map(e=>{let n=t[e.index],r=n.path===i;return(0,V.jsx)(`div`,{className:`absolute left-0 top-0 w-full`,style:{transform:`translateY(${e.start}px)`},children:(0,V.jsx)(an,{entry:n,selected:r,currentDir:o,hasClipboard:s,isPinned:c,actions:l,rowHeight:g,onSelect:()=>{p(),d(n)},onOpen:()=>f(n)})},n.path)})})]})})}function cn({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,V.jsxs)(A,{children:[(0,V.jsx)(j,{asChild:!0,children:(0,V.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,V.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,V.jsx)(oe,{className:`size-4`}),` Back`]}),p&&(0,V.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,V.jsx)(sn,{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,V.jsx)(J,{targets:[],currentDir:s.path,hasClipboard:c,isPinned:l,actions:u})]})}var ln=0,un=[];function dn(){return new Promise(e=>{let t=!1,n=()=>{ln++,e(()=>{if(t)return;t=!0,ln--;let e=un.shift();e&&e()})};ln<24?n():un.push(n)})}function fn({entry:e,size:t,className:n}){let[r,i]=(0,B.useState)(null),[a,o]=(0,B.useState)(!1),s=(0,B.useRef)(null),c=(0,B.useRef)(null);return(0,B.useEffect)(()=>{i(null),o(!1)},[e.path]),(0,B.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 dn(),n.signal.aborted){l();return}try{let t=he(),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,B.useEffect)(()=>()=>{c.current&&URL.revokeObjectURL(c.current)},[]),a||!r?(0,V.jsx)(`div`,{ref:s,className:T(`flex items-center justify-center`,n),style:{width:t,height:t},children:(0,V.jsx)(H,{name:e.name,kind:e.kind,className:`size-1/2`})}):(0,V.jsx)(`div`,{ref:s,className:T(`flex items-center justify-center overflow-hidden`,n),style:{width:t,height:t},children:(0,V.jsx)(`img`,{src:r,alt:``,loading:`lazy`,className:`max-h-full max-w-full rounded object-contain`,onError:()=>o(!0)})})}function pn({entry:e,onOpen:t}){return e?(0,V.jsxs)(`div`,{className:`flex h-full min-w-0 flex-col items-center gap-3 overflow-y-auto p-4 text-center`,children:[(0,V.jsx)(`div`,{className:`flex h-24 w-24 shrink-0 items-center justify-center`,children:e.type!==`directory`&&dt(e.name)===`image`?(0,V.jsx)(fn,{entry:e,size:96}):(0,V.jsx)(H,{name:e.name,kind:e.kind,className:`size-16`})}),(0,V.jsx)(`p`,{className:`w-full truncate text-sm font-medium text-text`,title:e.name,children:e.name}),(0,V.jsxs)(`dl`,{className:`w-full space-y-1 text-left text-xs text-text-2`,children:[(0,V.jsxs)(`div`,{className:`flex justify-between gap-2`,children:[(0,V.jsx)(`dt`,{className:`text-text-subtle`,children:`Kind`}),(0,V.jsx)(`dd`,{className:`truncate`,children:e.type===`directory`?`Folder`:R(e.name)||`File`})]}),e.type!==`directory`&&(0,V.jsxs)(`div`,{className:`flex justify-between gap-2`,children:[(0,V.jsx)(`dt`,{className:`text-text-subtle`,children:`Size`}),(0,V.jsx)(`dd`,{children:Ue(e.size)})]}),(0,V.jsxs)(`div`,{className:`flex justify-between gap-2`,children:[(0,V.jsx)(`dt`,{className:`text-text-subtle`,children:`Modified`}),(0,V.jsx)(`dd`,{className:`truncate`,children:We(e.modified)})]})]}),L(e.name)&&(0,V.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,V.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 mn(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 hn(e,t,n){let[r,i]=(0,B.useReducer)(mn,{columns:[],staleControllers:[]}),a=(0,B.useRef)(new Set);(0,B.useEffect)(()=>{i({type:`sync`,paths:e,lastEntries:t,lastLoading:n,makeAbort:()=>new AbortController})},[e.join(`\0`),t,n]),(0,B.useEffect)(()=>{for(let e of r.staleControllers)e.abort()},[r.staleControllers]);let o=(0,B.useRef)(r.columns);return o.current=r.columns,(0,B.useEffect)(()=>()=>{for(let e of o.current)e.abort.abort()},[]),(0,B.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),M.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 gn=720;function _n({slice:e,entries:t,actions:n,selection:r,hasClipboard:i,isPinned:a,nav:o,backgroundLongPress:s,rowHeight:c}){let{columns:l}=hn((0,B.useMemo)(()=>e.breadcrumbs.length>0?e.breadcrumbs.map(e=>e.path):[e.path],[e.breadcrumbs,e.path]),t,e.loading),u=E(),d=(0,B.useRef)(null);Xe(d);let[f,p]=(0,B.useState)(l.length-1),[m,h]=(0,B.useState)(0),g=(0,B.useRef)(l.length);(0,B.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,B.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,B.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>=gn;return u?(0,V.jsx)(cn,{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,V.jsxs)(A,{children:[(0,V.jsx)(j,{asChild:!0,children:(0,V.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,V.jsx)(sn,{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,V.jsx)(`div`,{className:`min-w-[240px] flex-1 border-l border-border bg-panel-2/30`,children:(0,V.jsx)(pn,{entry:_,onOpen:x})})]})}),(0,V.jsx)(J,{targets:[],currentDir:e.path,hasClipboard:i,isPinned:a,actions:n})]})}function Y(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 vn({slice:e,entries:t,actions:n,selection:r,nav:i}){return(0,B.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=Y(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 yn(e,t){let n=E(),r=P(e=>e.selectMode),{setOpen:i}=(0,B.useContext)(je);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),en(a)===`open`?e.openEntry(a):i(!0),!0):!1}}function X({initial:e,error:t,onCommit:n,onCancel:r,className:i}){let[a,o]=(0,B.useState)(e),s=(0,B.useRef)(null);return(0,B.useEffect)(()=>{let t=s.current;if(!t)return;let n=()=>{t.focus();let n=e.lastIndexOf(`.`);n>0?t.setSelectionRange(0,n):t.select()};n();let r=requestAnimationFrame(()=>{document.activeElement!==t&&n()});return()=>cancelAnimationFrame(r)},[e]),(0,V.jsxs)(`div`,{className:`relative flex-1 min-w-0`,children:[(0,V.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:T(`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,V.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 bn=(0,B.memo)(function(e){let{entry:t,currentDir:n,hasClipboard:r,isPinned:i,actions:a,menuTargets:o}=e,s=$t({entry:t,dragPaths:(0,B.useMemo)(()=>o.map(e=>e.path),[o]),run:a.transferInto,onFiles:a.uploadInto});return(0,V.jsxs)(A,{children:[(0,V.jsx)(j,{asChild:!0,children:(0,V.jsx)(xn,{...e,dnd:s.props,dropActive:s.isDropTarget})}),(0,V.jsx)(J,{targets:o,currentDir:n,hasClipboard:r,isPinned:i,actions:a})]})}),xn=(0,B.forwardRef)(function({entry:e,selected:t,focused:n,cut:r,renaming:a,tileWidth:o,actions:s,selection:c,inlineError:l,currentDir:u,hasClipboard:d,isPinned:f,menuTargets:p,dnd:m,dropActive:h,...g},_){let v=nt(()=>{t||c.selectOnly(e.path)}),{isMobile:y,selectMode:b,handleTap:x}=yn(s,c),S=e.type!==`directory`&&dt(e.name)===`image`;return(0,V.jsxs)(`div`,{ref:_,...rn({...g,...v,...m},{role:`gridcell`,"aria-selected":t,"data-testid":`explorer-tile`,"data-path":e.path,title:e.name,style:o?{width:o}:void 0,onContextMenu:n=>{t||c.selectOnly(e.path),n.stopPropagation()},onClick:n=>{x(e,t)||c.onRowClick(e.path,n)},onDoubleClick:()=>s.openEntry(e),className:T(`relative flex flex-col items-center gap-1 rounded p-2 text-center select-none`,!o&&`w-full`,`can-hover:hover:bg-surface-elevated`,n&&!t&&`bg-surface-elevated`,t&&`bg-accent-wash`,r&&`opacity-40`,h&&`ring-1 ring-dashed ring-primary bg-primary/10`)}),children:[y&&b&&(0,V.jsx)(`span`,{"aria-hidden":!0,className:T(`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,V.jsx)(i,{className:`size-3.5`})}),(0,V.jsx)(`div`,{className:`flex h-12 w-12 shrink-0 items-center justify-center`,children:S?(0,V.jsx)(fn,{entry:e,size:48}):(0,V.jsx)(H,{name:e.name,kind:e.kind,className:`size-12`})}),a?(0,V.jsx)(X,{initial:e.name,error:l,onCommit:e=>void s.commitInline(e),onCancel:s.cancelInline}):(0,V.jsx)(`span`,{className:T(`line-clamp-2 w-full break-words text-[12px] leading-tight`,t?`text-text`:`text-text-2`),children:e.name})]})}),Sn=96,Cn=88,wn=4,Tn=16,En=3;function Dn({slice:e,entries:t,actions:n,selection:r,inlineError:i,hasClipboard:a,isPinned:o,backgroundLongPress:s}){let c=ye(e=>e.clipboard?.operation===`cut`?e.clipboard.paths:null),l=(0,B.useRef)(null);Xe(l);let u=E(),[d,f]=(0,B.useState)(u?En:1);(0,B.useEffect)(()=>{if(u){f(En);return}let e=l.current;if(!e)return;let t=()=>{let t=e.clientWidth-Tn+wn;f(Math.max(1,Math.floor(t/(Sn+wn))))};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[u]);let p=lt({count:Math.ceil(t.length/d),getScrollElement:()=>l.current,estimateSize:()=>Cn,overscan:4}),m=e.anchor?t.findIndex(t=>t.path===e.anchor):-1,h=m>=0?Math.floor(m/d):-1;(0,B.useEffect)(()=>{h>=0&&p.scrollToIndex(h,{align:`auto`})},[h]);let g=(0,B.useMemo)(()=>Y(e,t),[e,t]),_=e.inlineEdit?.kind===`new-file`||e.inlineEdit?.kind===`new-folder`,v=N({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,V.jsxs)(A,{children:[(0,V.jsx)(j,{asChild:!0,children:(0,V.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:T(`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,V.jsx)(`div`,{className:`mb-2 flex flex-col items-center gap-1 p-2`,style:u?void 0:{width:Sn},children:(0,V.jsx)(X,{initial:``,error:i,onCommit:e=>void n.commitInline(e),onCancel:n.cancelInline})}),(0,V.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,V.jsx)(`div`,{role:`row`,className:T(`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,V.jsx)(bn,{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:Sn,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,V.jsx)(`p`,{className:`p-3 text-xs text-text-subtle`,children:e.filter?`No entries match the filter.`:`This folder is empty.`})]})}),(0,V.jsx)(J,{targets:[],currentDir:e.path,hasClipboard:a,isPinned:o,actions:n})]})}var On=(0,B.memo)(function(e){let{entry:t,currentDir:n,hasClipboard:r,isPinned:i,actions:a,menuTargets:o}=e,s=$t({entry:t,dragPaths:(0,B.useMemo)(()=>o.map(e=>e.path),[o]),run:a.transferInto,onFiles:a.uploadInto});return(0,V.jsxs)(A,{children:[(0,V.jsx)(j,{asChild:!0,children:(0,V.jsx)(kn,{...e,dnd:s.props,dropActive:s.isDropTarget})}),(0,V.jsx)(J,{targets:o,currentDir:n,hasClipboard:r,isPinned:i,actions:a})]})}),kn=(0,B.forwardRef)(function({entry:e,selected:t,focused:n,cut:r,renaming:a,height:o,actions:s,selection:c,inlineError:l,currentDir:u,hasClipboard:d,isPinned:f,menuTargets:p,dnd:m,dropActive:h,...g},_){let v=nt(()=>{t||c.selectOnly(e.path)}),{isMobile:y,selectMode:b,handleTap:x}=yn(s,c);return(0,V.jsxs)(`div`,{ref:_,...rn({...g,...v,...m},{role:`row`,"aria-selected":t,"data-testid":`explorer-row`,"data-path":e.path,title:e.name,style:{height:o},onContextMenu:n=>{t||c.selectOnly(e.path),n.stopPropagation()},onClick:n=>{x(e,t)||c.onRowClick(e.path,n)},onDoubleClick:()=>s.openEntry(e),className:T(`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`,h&&`ring-1 ring-dashed ring-primary bg-primary/10`)}),children:[y&&b&&(0,V.jsx)(`span`,{"aria-hidden":!0,className:T(`flex size-5 shrink-0 items-center justify-center rounded border`,t?`border-primary bg-primary text-primary-foreground`:`border-border`),children:t&&(0,V.jsx)(i,{className:`size-3.5`})}),(0,V.jsx)(H,{name:e.name,kind:e.kind,className:`size-4`}),a?(0,V.jsx)(X,{initial:e.name,error:l,onCommit:e=>void s.commitInline(e),onCancel:s.cancelInline}):(0,V.jsx)(`span`,{className:T(`flex-1 truncate`,t?`text-text`:`text-text-2`),children:e.name}),(0,V.jsx)(`span`,{className:`w-20 shrink-0 text-right tabular-nums text-text-subtle`,children:e.type===`directory`?``:Ue(e.size)}),(0,V.jsx)(`span`,{className:`hidden w-24 shrink-0 text-right text-text-subtle sm:inline`,children:Ve(e.modified)}),(0,V.jsx)(`span`,{className:`hidden w-16 shrink-0 truncate text-right text-text-subtle md:inline`,children:e.type===`directory`?`Folder`:R(e.name)||`File`})]})}),An={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`},jn=K.map(e=>({...e,className:An[e.key]}));function Mn({slice:e,entries:t,actions:n,selection:r,inlineError:i,hasClipboard:a,isPinned:o,rowHeight:s,backgroundLongPress:c}){let u=F(e=>e.sort),d=F(e=>e.setPrefs),f=ye(e=>e.clipboard?.operation===`cut`?e.clipboard.paths:null),p=(0,B.useRef)(null);Xe(p);let m=rt(),h=I(),g=lt({count:t.length,getScrollElement:()=>p.current,estimateSize:()=>s,overscan:12}),_=e.anchor?t.findIndex(t=>t.path===e.anchor):-1;(0,B.useEffect)(()=>{_>=0&&g.scrollToIndex(_,{align:`auto`})},[_]);let v=(0,B.useMemo)(()=>Y(e,t),[e,t]),y=e.inlineEdit?.kind===`new-file`||e.inlineEdit?.kind===`new-folder`,b=N({targetDir:e.path,run:n.transferInto,onFiles:n.uploadInto}),x=e=>d({sort:{key:e,dir:u.key===e&&u.dir===`asc`?`desc`:`asc`}});return(0,V.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,V.jsx)(`div`,{role:`row`,className:T(`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`,m.id===`windows`&&`divide-x divide-border`),children:jn.map(e=>(0,V.jsxs)(`button`,{type:`button`,"aria-label":`Sort by ${e.label}`,onClick:()=>x(e.key),className:T(`relative flex items-center gap-0.5 can-hover:hover:text-text`,m.id===`windows`&&e.key!==`name`&&`pl-2`,e.className,e.key!==`name`&&`justify-end`,h&&`before:absolute before:-inset-x-2 before:-inset-y-3 before:content-['']`),children:[e.label,u.key===e.key&&(u.dir===`asc`?(0,V.jsx)(fe,{className:`size-3`}):(0,V.jsx)(l,{className:`size-3`}))]},e.key))}),(0,V.jsxs)(A,{children:[(0,V.jsx)(j,{asChild:!0,children:(0,V.jsxs)(`div`,{ref:p,role:`grid`,tabIndex:0,"data-testid":`explorer-list`,"aria-label":`File list`,onMouseDown:e=>{e.target===e.currentTarget&&r.clear()},className:T(`flex-1 overflow-auto outline-none`,b.isOver&&`ring-1 ring-dashed ring-primary bg-primary/10`),...c,...b.handlers,children:[y&&(0,V.jsxs)(`div`,{className:`flex items-center gap-2 px-2`,style:{height:s},children:[(0,V.jsx)(`span`,{className:`size-4 shrink-0`}),(0,V.jsx)(X,{initial:``,error:i,onCommit:e=>void n.commitInline(e),onCancel:n.cancelInline})]}),(0,V.jsx)(`div`,{className:`relative w-full`,style:{height:g.getTotalSize()},children:g.getVirtualItems().map(c=>{let l=t[c.index];return(0,V.jsx)(`div`,{className:T(`absolute left-0 top-0 w-full`,m.id===`macos`&&c.index%2==1&&`bg-panel-2/40`),style:{transform:`translateY(${c.start}px)`},children:(0,V.jsx)(On,{entry:l,currentDir:e.path,selected:e.selection.has(l.path),focused:e.anchor===l.path,cut:f?.includes(l.path)===!0,renaming:e.inlineEdit?.kind===`rename`&&e.inlineEdit.path===l.path,height:s,menuTargets:e.selection.has(l.path)?v:[l],actions:n,selection:r,hasClipboard:a,isPinned:o,inlineError:i})},l.path)})}),t.length===0&&!e.loading&&!y&&(0,V.jsx)(`p`,{className:`p-3 text-xs text-text-subtle`,children:e.filter?`No entries match the filter.`:`This folder is empty.`})]})}),(0,V.jsx)(J,{targets:[],currentDir:e.path,hasClipboard:a,isPinned:o,actions:n})]})]})}var Nn={list:Mn,icons:Dn,columns:_n},Pn=Object.keys(Nn);function Fn(e){return Nn[e]??Mn}var In={list:y,icons:_,columns:ee},Ln={list:`List view`,icons:`Icons view`,columns:`Column view`};function Rn({windowId:e,slice:t,nav:n,actions:r}){let i=F(e=>e.patch),a=F(e=>e.showHidden),o=F(e=>e.viewMode),s=F(e=>e.setPrefs),[c,l]=(0,B.useState)(!1),[u,d]=(0,B.useState)(t.path);(0,B.useEffect)(()=>d(t.path),[t.path]);let f=I();return(0,V.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,V.jsx)(`button`,{type:`button`,"aria-label":`Back`,title:`Back`,disabled:!n.canGoBack,onClick:n.back,className:q(f),children:(0,V.jsx)(oe,{className:`size-4`})}),(0,V.jsx)(`button`,{type:`button`,"aria-label":`Forward`,title:`Forward`,disabled:!n.canGoForward,onClick:n.forward,className:q(f),children:(0,V.jsx)(te,{className:`size-4`})}),(0,V.jsx)(`button`,{type:`button`,"aria-label":`Up one level`,title:`Up`,disabled:!t.parent,onClick:n.up,className:q(f),children:(0,V.jsx)(v,{className:`size-4`})}),(0,V.jsx)(`button`,{type:`button`,"aria-label":`Refresh`,title:`Refresh`,onClick:n.refresh,className:q(f),children:(0,V.jsx)(b,{className:T(`size-4`,t.loading&&`animate-spin`)})}),(0,V.jsxs)(`div`,{className:`flex min-w-[8rem] flex-1 items-center gap-1 rounded border border-border bg-panel px-1`,children:[c?(0,V.jsx)(`input`,{autoFocus:!0,"aria-label":`Path`,value:u,onChange:e=>d(e.target.value),onBlur:()=>l(!1),onKeyDown:e=>{e.stopPropagation(),e.key===`Enter`?(n.go(u.trim()),l(!1)):e.key===`Escape`&&(d(t.path),l(!1))},className:`min-w-0 flex-1 bg-transparent py-1 font-mono text-xs text-text outline-none`}):(0,V.jsx)(qt,{crumbs:t.breadcrumbs,onNavigate:n.go,sep:t.sep,className:`flex-1 overflow-hidden py-0.5`}),(0,V.jsx)(`button`,{type:`button`,"aria-label":c?`Show breadcrumb`:`Edit path`,title:c?`Show breadcrumb`:`Edit path`,onClick:()=>l(e=>!e),className:q(f),children:(0,V.jsx)(ne,{className:`size-3.5`})})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1 rounded border border-border bg-panel px-1`,children:[(0,V.jsx)(ue,{className:`size-3.5 shrink-0 text-text-subtle`}),(0,V.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,V.jsx)(`button`,{type:`button`,"aria-label":`Clear filter`,onClick:()=>i(e,{filter:``}),className:q(f),children:(0,V.jsx)(C,{className:`size-3.5`})})]}),Pn.length>1&&Pn.map(e=>{let t=In[e];return(0,V.jsx)(`button`,{type:`button`,"aria-label":Ln[e],title:Ln[e],"aria-pressed":o===e,onClick:()=>s({viewMode:e}),className:T(q(f),o===e&&`bg-accent-wash text-primary`),children:(0,V.jsx)(t,{className:`size-4`})},e)}),(0,V.jsx)(Qt,{coarse:f}),r.supportsFolderUpload?(0,V.jsxs)(ke,{children:[(0,V.jsx)(Ee,{asChild:!0,children:(0,V.jsx)(`button`,{type:`button`,"aria-label":`Upload`,title:`Upload`,className:q(f),children:(0,V.jsx)(p,{className:`size-4`})})}),(0,V.jsxs)(De,{align:`end`,children:[(0,V.jsx)(we,{onClick:()=>r.openUploadPicker(),children:`Upload Files…`}),(0,V.jsx)(we,{onClick:()=>r.openUploadFolderPicker(),children:`Upload Folder…`})]})]}):(0,V.jsx)(`button`,{type:`button`,"aria-label":`Upload`,title:`Upload`,onClick:()=>r.openUploadPicker(),className:q(f),children:(0,V.jsx)(p,{className:`size-4`})}),(0,V.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:()=>s({showHidden:!a}),className:T(q(f),a&&`bg-accent-wash text-primary`),children:a?(0,V.jsx)(m,{className:`size-4`}):(0,V.jsx)(le,{className:`size-4`})})]})}var zn={list:y,icons:_,columns:ee},Bn={list:`List`,icons:`Icons`,columns:`Columns`};function Vn(e){return{name:e.breadcrumbs[e.breadcrumbs.length-1]?.name??e.path,path:e.path,type:`directory`,kind:`directory`,modified:``}}function Hn({open:e,onClose:t,slice:n,actions:r,entries:i}){let a=F(e=>e.viewMode),s=F(e=>e.sort),c=F(e=>e.showHidden),l=F(e=>e.setPrefs),u=Y(n,i);return(0,V.jsxs)(Ne,{open:e,onClose:t,className:`p-2`,children:[(0,V.jsx)(Me,{children:`View`}),(0,V.jsx)(`div`,{className:`flex gap-1 px-2 pb-2`,children:Pn.map(e=>{let n=zn[e];return(0,V.jsxs)(`button`,{type:`button`,"aria-pressed":a===e,onClick:()=>{l({viewMode:e}),t()},className:T(`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,V.jsx)(n,{className:`size-4`}),Bn[e]]},e)})}),(0,V.jsx)(Ae,{}),(0,V.jsx)(Me,{children:`Sort by`}),(0,V.jsx)(`div`,{className:`flex flex-wrap gap-1 px-2 pb-2`,children:K.map(({key:e,label:n})=>(0,V.jsxs)(`button`,{type:`button`,"aria-pressed":s.key===e,onClick:()=>{l({sort:{key:e,dir:s.key===e&&s.dir===`asc`?`desc`:`asc`}}),t()},className:T(`inline-flex min-h-11 items-center justify-center rounded-full border px-3 py-1.5 text-xs active:bg-surface-elevated`,s.key===e?`border-primary bg-accent-wash text-text`:`border-border text-text-2`),children:[n,s.key===e?s.dir===`asc`?` ↑`:` ↓`:``]},e))}),(0,V.jsx)(Ae,{}),(0,V.jsxs)(D,{onClick:()=>l({showHidden:!c}),children:[c?(0,V.jsx)(m,{className:`size-4`}):(0,V.jsx)(le,{className:`size-4`}),c?`Hide hidden files`:`Show hidden files`]}),(0,V.jsx)(Ae,{}),(0,V.jsxs)(D,{variant:`destructive`,disabled:u.length===0,onClick:()=>r.confirmPermanentDelete(u),children:[(0,V.jsx)(o,{className:`size-4`}),`Delete permanently`,u.length>1?` (${u.length})`:``]}),(0,V.jsxs)(D,{onClick:()=>r.showProperties(Vn(n)),children:[(0,V.jsx)(re,{className:`size-4`}),`Properties of this folder`]})]})}function Z({icon:e,label:t,onClick:n,disabled:r,destructive:i}){return(0,V.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,V.jsx)(e,{className:`size-5`}),(0,V.jsx)(`span`,{className:`truncate`,children:t})]})}function Un({slice:e,nav:t,actions:n,entries:r,hasClipboard:s}){let l=P(e=>e.selectMode),u=P(e=>e.setSelectMode),[f,m]=(0,B.useState)(!1),[_,v]=(0,B.useState)(!1),y=r.filter(t=>e.selection.has(t.path));return l?(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 border-t border-border px-1 py-1`,children:[(0,V.jsx)(Z,{icon:C,label:`Cancel`,onClick:()=>{u(!1)}}),(0,V.jsxs)(`span`,{className:`px-1 text-xs text-text-subtle`,children:[y.length,` selected`]}),(0,V.jsx)(`div`,{className:`flex-1`}),(0,V.jsx)(Z,{icon:de,label:`Cut`,disabled:y.length===0,onClick:()=>n.cut(y)}),(0,V.jsx)(Z,{icon:se,label:`Copy`,disabled:y.length===0,onClick:()=>n.copy(y)}),(0,V.jsx)(Z,{icon:o,label:`Trash`,disabled:y.length===0,destructive:!0,onClick:()=>n.trash(y)}),(0,V.jsx)(Z,{icon:x,label:`Download`,disabled:!y.some(e=>e.type===`file`),onClick:()=>n.download(y)}),y.length===1&&(0,V.jsx)(Z,{icon:re,label:`Info`,onClick:()=>n.showProperties(y[0])})]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 border-t border-border px-1 py-1`,children:[(0,V.jsx)(Z,{icon:oe,label:`Back`,disabled:!t.canGoBack,onClick:t.back}),(0,V.jsx)(Z,{icon:h,label:`New`,onClick:()=>m(!0)}),(0,V.jsx)(Z,{icon:g,label:`Paste`,disabled:!s,onClick:()=>n.paste()}),(0,V.jsx)(Z,{icon:i,label:`Select`,onClick:()=>u(!0)}),(0,V.jsx)(Z,{icon:d,label:`More`,onClick:()=>v(!0)})]}),(0,V.jsxs)(Ne,{open:f,onClose:()=>m(!1),className:`p-2`,children:[(0,V.jsxs)(D,{onClick:()=>n.startCreate(`new-file`),children:[(0,V.jsx)(a,{className:`size-4`}),` New File`]}),(0,V.jsxs)(D,{onClick:()=>n.startCreate(`new-folder`),children:[(0,V.jsx)(c,{className:`size-4`}),` New Folder`]}),(0,V.jsxs)(D,{onClick:()=>{m(!1),n.openUploadPicker()},children:[(0,V.jsx)(p,{className:`size-4`}),` Upload Files…`]})]}),(0,V.jsx)(Hn,{open:_,onClose:()=>v(!1),slice:e,actions:n,entries:r})]})}function Wn(e){return e.breadcrumbs[e.breadcrumbs.length-1]?.name??e.path}function Gn({slice:e,onClose:t}){return(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[15px] font-semibold text-text`,children:Wn(e)}),(0,V.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,V.jsx)(C,{className:`size-5`})})]})}var Kn=`size-4 shrink-0 text-text-subtle`,qn={fixed:f,removable:u,network:ft,unknown:f};function Jn(){return(0,V.jsx)(H,{name:``,kind:`directory`,className:Kn})}function Q({label:e,path:t,active:n,icon:r,onNavigate:i}){return(0,V.jsxs)(`button`,{type:`button`,title:t,onClick:()=>i(t),className:T(`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,V.jsx)(`span`,{className:`truncate`,children:e})]})}function $({title:e,children:t}){return(0,V.jsxs)(`div`,{className:`pb-2`,children:[(0,V.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=z(e=>e.pins),s=e=>e===r;return(0,V.jsx)(Ne,{open:e,onClose:t,zIndex:65,className:`p-1`,children:(0,V.jsxs)(`div`,{className:`max-h-[70vh] overflow-y-auto px-1 pb-2`,children:[o.length>0&&(0,V.jsx)($,{title:`Pinned`,children:o.map(e=>(0,V.jsx)(Q,{label:e.name,path:e.path,icon:(0,V.jsx)(S,{className:Kn}),active:s(e.path),onNavigate:a},e.path))}),n&&n.pinned.length>0&&(0,V.jsx)($,{title:i.pinned,children:n.pinned.map(e=>(0,V.jsx)(Q,{label:e.name,path:e.path,icon:Jn(),active:s(e.path),onNavigate:a},e.path))}),n&&(0,V.jsxs)($,{title:i.known,children:[(0,V.jsx)(Q,{label:i.home,path:n.homedir,icon:Jn(),active:s(n.homedir),onNavigate:a}),n.knownFolders.map(e=>(0,V.jsx)(Q,{label:e.name,path:e.path,icon:Jn(),active:s(e.path),onNavigate:a},e.path))]}),n&&n.drives.length>0&&(0,V.jsx)($,{title:i.drives,children:n.drives.map(e=>{let t=qn[e.kind];return(0,V.jsx)(Q,{label:e.label?`${e.label} (${e.name})`:e.name,path:e.path,icon:(0,V.jsx)(t,{className:Kn}),active:s(e.path),onNavigate:a},e.path)})})]})})}function Xn({className:e}){return(0,V.jsx)(H,{name:``,kind:`directory`,className:e})}var Zn={fixed:f,removable:u,network:ft,unknown:f};function Qn({chip:e,active:t,onNavigate:n}){let r=e.icon;return(0,V.jsxs)(`button`,{type:`button`,onClick:()=>n(e.path),title:e.path,className:T(`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,V.jsx)(r,{className:`size-4 shrink-0 text-text-subtle`}),(0,V.jsx)(`span`,{className:`max-w-[9rem] truncate`,children:e.label})]})}function $n({host:e,currentPath:t,onNavigate:n,vocab:r}){let i=z(e=>e.pins),[a,o]=(0,B.useState)(!1);return(0,V.jsxs)(V.Fragment,{children:[(0,V.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:S})),...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,V.jsx)(Qn,{chip:e,active:e.path===t,onNavigate:n},e.key)),(0,V.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,V.jsx)(d,{className:`size-4`})})]}),(0,V.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,B.useRef)(null),i=F(e=>e.patch),a=(0,B.useRef)(t?.path??``);a.current=t?.path??``;let o=(0,B.useRef)(n);o.current=n;let s=(0,B.useCallback)(async t=>{r.current?.abort();let n=new AbortController;r.current=n,i(e,{loading:!0,error:null});try{let r=await M.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 Be?{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,B.useEffect)(()=>{if(c)return s(c),()=>r.current?.abort()},[c,n,s]),(0,B.useEffect)(()=>ot(e=>{e===a.current&&s(e)}),[s]);let l=(0,B.useCallback)((t,n)=>{let r=F.getState().slices[e];if(!r||t===r.path)return;let a=n?.replace?[...r.history.slice(0,r.historyIndex),t]:[...r.history.slice(0,r.historyIndex+1),t];i(e,{path:t,history:a.slice(-100),historyIndex:Math.min(a.length,100)-1,selection:new Set,anchor:null,filter:``,inlineEdit:null}),_e.getState().setPayload(e,{path:t})},[e,i]),u=(0,B.useCallback)(t=>{let n=F.getState().slices[e];if(!n)return;let r=n.historyIndex+t,a=n.history[r];a!=null&&(i(e,{path:a,historyIndex:r,selection:new Set,anchor:null,filter:``,inlineEdit:null}),_e.getState().setPayload(e,{path:a}))},[e,i]),d=(0,B.useCallback)(()=>u(-1),[u]),f=(0,B.useCallback)(()=>u(1),[u]),p=(0,B.useCallback)(()=>{let t=F.getState().slices[e];t?.parent&&l(t.parent)},[e,l]),m=(0,B.useCallback)(()=>{a.current&&s(a.current)},[s]),h=(t?.historyIndex??0)>0,g=t?t.historyIndex<t.history.length-1:!1;return(0,B.useMemo)(()=>({go:l,back:d,forward:f,up:p,refresh:m,canGoBack:h,canGoForward:g}),[l,d,f,p,m,h,g])}function tr(e,t,n){let r=t==null?-1:e.indexOf(t),i=e.indexOf(n);if(i<0)return[];if(r<0)return[n];let[a,o]=r<=i?[r,i]:[i,r];return e.slice(a,o+1)}function nr(e,t,n){switch(n.type){case`clear`:return{selection:new Set,anchor:null};case`select-all`:return{selection:new Set(t),anchor:e.anchor??t[0]??null};case`set`:return{selection:new Set(n.paths),anchor:n.anchor===void 0?n.paths[n.paths.length-1]??null:n.anchor};case`click`:if(n.ctrl){let t=new Set(e.selection);return t.has(n.path)?t.delete(n.path):t.add(n.path),{selection:t,anchor:n.path}}if(n.shift){let r=tr(t,e.anchor,n.path);return{selection:new Set(r),anchor:e.anchor??n.path}}return{selection:new Set([n.path]),anchor:n.path}}}function rr(e,t,n){if(e.length===0)return null;let r=t==null?-1:e.indexOf(t);return r<0?n>0?e[0]:e[e.length-1]:e[Math.min(e.length-1,Math.max(0,r+n))]}function ir(e,t,n){if(!t)return-1;let r=t.toLowerCase(),i=n<0?0:n+1;for(let t=0;t<e.length;t++){let n=(i+t)%e.length;if(e[n].toLowerCase().startsWith(r))return n}return-1}function ar(e,t){let n=F(e=>e.patch),r=(0,B.useRef)(t);r.current=t;let i=(0,B.useRef)({text:``,at:0}),a=(0,B.useCallback)(t=>{let i=F.getState().slices[e];i&&n(e,nr(i,r.current,t))},[e,n]),o=(0,B.useCallback)((t,n)=>{let i=F.getState().slices[e];if(!i)return;let o=rr(r.current,i.anchor,t);o!=null&&a({type:`click`,path:o,shift:n})},[e,a]),s=(0,B.useCallback)(t=>{let n=F.getState().slices[e];if(!n)return null;let o=Date.now(),s=o-i.current.at>800?t:i.current.text+t;i.current={text:s,at:o};let c=r.current,l=ir(c.map(e=>e.split(/[/\\]/).pop()??e),s,s.length===1&&n.anchor?c.indexOf(n.anchor):-1);return l<0?null:(a({type:`click`,path:c[l]}),c[l])},[e,a]),c=(0,B.useCallback)((e,t)=>a({type:`click`,path:e,shift:t.shiftKey,ctrl:t.ctrlKey||t.metaKey}),[a]),l=(0,B.useCallback)(e=>a({type:`click`,path:e}),[a]),u=(0,B.useCallback)(()=>a({type:`select-all`}),[a]),d=(0,B.useCallback)(()=>a({type:`clear`}),[a]),f=(0,B.useCallback)((e,t)=>a({type:`set`,paths:e,anchor:t}),[a]);return(0,B.useMemo)(()=>({onRowClick:c,selectOnly:l,selectAll:u,clear:d,setSelection:f,moveTo:o,typeAhead:s}),[c,l,u,d,f,o,s])}var or=28,sr=36,cr=48;function lr({windowId:e,initialPath:t,variant:n=`window`}){let r=F(e=>e.ensure);(0,B.useEffect)(()=>r(e,t),[r,e,t]);let i=F(t=>t.slices[e]),a=F(e=>e.showHidden),o=F(e=>e.viewMode),s=F(e=>e.sort),{host:c}=Ze(),l=ye(e=>(e.clipboard?.paths.length??0)>0),u=z(e=>e.isPinned),d=I(),f=rt(),p=er(e,i,a),{actions:m,dialogs:h}=jt(e,i,p,c?.platform),g=(0,B.useMemo)(()=>i?Ut(i.entries,i.filter,s):[],[i?.entries,i?.filter,s]),_=ar(e,(0,B.useMemo)(()=>g.map(e=>e.path),[g])),v=vn({slice:i,entries:g,actions:m,selection:_,nav:p}),y=nt(),b=P(e=>e.close);if(!i)return null;let x=Fn(o),S=n===`sheet`,C=S?cr:d?sr:or;return(0,V.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:[S?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Gn,{slice:i,onClose:b}),(0,V.jsx)($n,{host:c,currentPath:i.path,onNavigate:p.go,vocab:f.vocab})]}):(0,V.jsx)(Rn,{windowId:e,slice:i,nav:p,actions:m}),i.error&&(0,V.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,V.jsx)(ie,{className:`mt-0.5 size-3.5 shrink-0`}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsx)(`p`,{className:`break-words`,children:i.error.message}),i.error.hint&&(0,V.jsx)(`p`,{className:`mt-0.5 text-text-2`,children:i.error.hint})]}),c&&(0,V.jsxs)(`button`,{type:`button`,onClick:()=>p.go(c.homedir),className:`flex shrink-0 items-center gap-1 rounded border border-border px-1.5 py-0.5 text-text-2 can-hover:hover:bg-surface-elevated`,children:[(0,V.jsx)(ae,{className:`size-3`}),` Go home`]})]}),(0,V.jsx)(Lt,{value:{closed:f.FolderIcon,open:f.FolderOpenIcon},children:(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[!S&&(0,V.jsx)(Vt,{host:c,currentPath:i.path,onNavigate:p.go,vocab:f.vocab}),(0,V.jsx)(`div`,{className:`min-w-0 flex-1`,onKeyDown:v,children:(0,V.jsx)(x,{windowId:e,slice:i,entries:g,actions:m,selection:_,inlineError:h.inlineError,hasClipboard:l,isPinned:u,rowHeight:C,nav:p,backgroundLongPress:y})})]})}),S?(0,V.jsx)(Un,{slice:i,nav:p,actions:m,entries:g,hasClipboard:l}):(0,V.jsx)(Gt,{entries:g,selection:i.selection,truncated:i.truncated}),(0,V.jsx)(Ye,{dialogs:h,platform:c?.platform,sep:i.sep})]})}export{lr as t};
@@ -1,3 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{A as r,Bt as i,Hn as a,I as o,Kr as s,L as c,M as l,P as u,Ut as d,Wr as f,Yr as p,en as m,gn as h,gt as g,li as _,m as v,n as y,un as b,xn as x,z as S}from"./icons-C1wDt09O.js";import{k as C,r as w}from"./api-client-BnYFnEfK.js";import"./settings-store-CBJCnE5L.js";import{n as T,t as E}from"./utils-D3xTlJyU.js";import"./portal-container-context-Gepuvxdg.js";import"./window-store-UcSFgNCI.js";import{t as ee}from"./panel-store-Dx2ziBLp.js";import"./project-store-Bs-kiU8m.js";import"./project-framework-store-nuePqBBa.js";import"./session-list-sync-triggers-D9i1FxWd.js";import{t as D}from"./tab-store-B4v2kAEY.js";import{n as O}from"./use-is-mobile-CL2I7hLf.js";import"./git-repo-store-CESIqItW.js";import{t as k}from"./button-BHGVTbam.js";import{n as A}from"./file-icons-CB0RsVdl.js";import{n as te}from"./patch-tab-metadata-DTbCkVvx.js";import"./dropdown-menu-CxZR_vuV.js";import{t as j}from"./mobile-bottom-sheet-M9pZptfh.js";import"./use-visual-viewport-B_GFo6k2.js";import{t as M}from"./start-ellipsis-DfU-W_6j.js";import{Ci as N,Fr as P,Ir as ne,Lr as re,Mr as ie,Nr as F,Pr as ae,Rr as I,_r as oe,br as L,li as se,mr as R,vr as z,xr as B,yr as ce}from"./index-Cx9ZRibz.js";import"./libesm-C9iw2_pm.js";import{h as V,i as le,m as ue,p as H,t as U}from"./review-code-Bet53hHb.js";var W=e(t(),1),de=(e,t)=>`${e}\0${t}`,G=e=>({oldStart:e.oldStart,newStart:e.newStart,lines:e.lines}),K=e=>({id:e.id,index:e.index,oldStart:e.oldStart,oldLines:e.oldLines,newStart:e.newStart,newLines:e.newLines,added:e.added,removed:e.removed});function q(e,t){let[n,r]=e===`staged`?[t.newStart,t.newLines]:[t.oldStart,t.oldLines];return{anchor:I(e,t),first:r?n:n+1,last:r?n+r-1:n}}function fe(e,t,n,r){if(!t)return[];let i=e===`staged`?`s`:`u`,a=e===`staged`?`staged`:`open`;if(t.whole||n||!t.blocks.length){let o=n?`deleted`:t.whole??`empty`,s=r&&o===`rename`&&t.blocks.every(e=>e.lines);return[{key:`${i}:whole`,state:a,side:e,hunk:null,whole:o,parts:s&&t.blocks.length?t.blocks.map(e=>G(e)):null,anchor:0,first:1,last:0,added:t.added,removed:t.removed}]}let o=new Map;return t.blocks.map(t=>{let n=(o.get(t.id)??0)+1;return o.set(t.id,n),{key:`${i}:${t.id}${n>1?`#${n}`:``}`,state:a,side:e,hunk:K(t),whole:null,parts:r&&t.lines?[G(t)]:null,...q(e,t),added:t.added,removed:t.removed}})}function pe(e){return e.whole||!e.hunks.length?[{key:`d:${e.recordId}`,state:`discarded`,side:`unstaged`,hunk:null,whole:e.whole??`empty`,parts:null,anchor:0,first:1,last:0,added:e.added,removed:e.removed,recordId:e.recordId}]:e.hunks.map((t,n)=>({key:`d:${e.recordId}:${n}`,state:`discarded`,side:`unstaged`,hunk:K(t),whole:null,parts:[G(t)],...q(`unstaged`,t),added:t.added,removed:t.removed,recordId:e.recordId}))}var J={staged:0,open:1,discarded:2};function me(e){let t=[];if(e.file){let n=e.detail??e.file,r=!!e.detail,i=e.detail?e.detail.staged&&{whole:e.detail.staged.whole,added:e.detail.staged.added,removed:e.detail.staged.removed,blocks:e.detail.staged.hunks}:e.file.staged,a=e.detail?e.detail.unstaged&&{whole:e.detail.unstaged.whole,added:e.detail.unstaged.added,removed:e.detail.unstaged.removed,blocks:e.detail.unstaged.hunks}:e.file.unstaged,o=[...fe(`staged`,i,n.x===`D`,r),...fe(`unstaged`,a,n.y===`D`,r)];for(let n of o){let r=e.pending.get(de(e.path,n.key));r===`discarded`&&he(n,e.discards)||t.push(r?{...n,state:r}:n)}}for(let n of e.discards)t.push(...pe(n));return t.map((e,t)=>({block:e,i:t})).sort((e,t)=>e.block.anchor-t.block.anchor||J[e.block.state]-J[t.block.state]||e.i-t.i).map(({block:e})=>e)}function he(e,t){return e.hunk?t.some(t=>t.hunks.some(t=>t.id===e.hunk.id&&t.oldStart===e.hunk.oldStart)):t.some(e=>e.whole||!e.hunks.length)}function ge(e,t,n){let r={path:e,file:t,blocks:n,open:0,staged:0,discarded:0,added:0,removed:0};for(let e of n)r[e.state===`open`?`open`:e.state===`staged`?`staged`:`discarded`]++,e.state!==`discarded`&&(r.added+=e.added,r.removed+=e.removed);return r}function _e(e){let t=new Map;for(let n of e.discards)t.set(n.path,[...t.get(n.path)??[],n]);let n=[],r=new Set;for(let i of e.files){if(i.conflict)continue;r.add(i.path);let a=me({path:i.path,file:i,detail:e.details.get(i.path)??null,discards:t.get(i.path)??[],pending:e.pending});a.length&&n.push(ge(i.path,i,a))}let i=[...t.keys()].filter(e=>!r.has(e)).sort();for(let r of i)n.push(ge(r,null,me({path:r,file:null,detail:null,discards:t.get(r),pending:e.pending})));return n}function ve(e){return e.open?`changes`:e.staged?`staged`:`discarded`}var ye=[`changes`,`staged`,`discarded`];function be(e){return ye.flatMap(t=>e.filter(e=>ve(e)===t))}function xe(e){let t={files:0,blocks:0,staged:0,discarded:0,added:0,removed:0};for(let n of e)n.open+n.staged&&t.files++,t.blocks+=n.open+n.staged,t.staged+=n.staged,t.discarded+=n.discarded,t.added+=n.added,t.removed+=n.removed;return t}function Se(e){return be(e).flatMap(e=>e.blocks.map(t=>({path:e.path,block:t})))}var Ce=e=>t=>!!e&&t.path===e.path&&t.block.key===e.key;function we(e,t,n){let r=Se(e);if(!r.length)return null;let i=r.findIndex(Ce(t)),a=i<0?r[0]:r[Math.max(0,Math.min(r.length-1,i+n))];return{path:a.path,key:a.block.key}}function Te(e,t){let n=e.flatMap(e=>e.blocks.map(t=>({path:e.path,block:t}))),r=n.findIndex(Ce(t));for(let e=1;e<=n.length;e++){let i=n[(r+e+n.length)%n.length];if(i.block.state===`open`&&!Ce(t)(i))return{path:i.path,key:i.block.key}}return null}function Ee(e){let t=e.blocks.find(e=>e.state===`open`)??e.blocks[0];return t?{path:e.path,key:t.key}:null}function De(e,t){let n=be(e),r=n.findIndex(e=>e.path===t);for(let e=1;e<=n.length;e++){let i=n[(r+e+n.length)%n.length],a=i.blocks.find(e=>e.state===`open`);if(a&&i.path!==t)return{path:i.path,key:a.key}}let i=n[(r+1)%Math.max(n.length,1)];return i&&i.path!==t?Ee(i):null}function Oe(e,t){if(t){let n=e.find(e=>e.path===t.path);if(n?.blocks.some(e=>e.key===t.key))return{path:t.path,key:t.key};if(n?.blocks.length){let e=t.anchor??0,r=[...n.blocks].sort((t,n)=>(t.state===`open`?0:1)-(n.state===`open`?0:1)||Math.abs(t.anchor-e)-Math.abs(n.anchor-e))[0];return{path:t.path,key:r.key}}}let n=Se(e),r=n.find(e=>e.block.state===`open`)??n[0];return r?{path:r.path,key:r.block.key}:null}function ke(e){let t=[],n=0;return e.forEach((r,i)=>{if(!r.whole){let e=r.first-n-1;e>0&&t.push({kind:`gap`,key:`gap:${r.key}`,lines:e}),n=Math.max(n,r.last)}t.push({kind:`block`,block:r,index:i,total:e.length})}),t}function Ae(e){let t=e.oldStart,n=e.newStart;return e.lines.map((e,r)=>({kind:e.kind,text:e.text,old:e.kind===`+`?null:t++,new:e.kind===`-`?null:n++,at:r}))}function je(e){let t=e.parts?.[0];if(e.whole||!t)return`Whole file`;let n=(e,t)=>t>1?`Lines ${e}–${e+t-1}`:`Line ${e}`,r=t.lines.filter(e=>e.kind!==`+`).length,i=t.lines.filter(e=>e.kind!==`-`).length;return e.state===`discarded`?r?n(t.oldStart,r):`Whole file`:i?n(t.newStart,i):`${n(t.oldStart,r)}, removed`}function Me(e){return(e.parts?.[0]?.lines??[]).flatMap((e,t)=>e.kind===` `?[]:[t])}function Ne(e,t){let n=Me(e).filter(e=>t.has(e));return n.length===Me(e).length?null:n}function Pe(e,t){let n=/^[us]:([^#]+)(?:#(\d+))?$/.exec(t);if(!n)return null;let r=Number(n[2]??1);for(let t of e)if(t.id===n[1]&&--r===0)return t.index;return null}function Fe(e){let t=e=>e?`${e.whole??``}:${e.blocks.map(e=>e.id).join(`,`)}`:`-`;return`${e.x}${e.y}|${e.oldPath??``}|${t(e.staged)}|${t(e.unstaged)}`}var Ie=7e3,Y=(e,t)=>`${e} ${e===1?t:`${t}s`}`,Le=e=>e instanceof Error?e.message:String(e);function Re(e,t){let n=se(e),r=n.gitUrl,{changes:i,error:a,refresh:o}=ie(e),s=(0,W.useMemo)(()=>i?.files??[],[i]),[c,l]=(0,W.useState)(new Map),[u,d]=(0,W.useState)([]),[f,p]=(0,W.useState)(new Map),[m,h]=(0,W.useState)(null),[g,_]=(0,W.useState)(null),[v,y]=(0,W.useState)(null),[b,x]=(0,W.useState)(null),S=(0,W.useRef)(c),T=e=>{let t=e(S.current);S.current=t,l(t)},E=(0,W.useRef)(u),ee=e=>{let t=e(E.current);E.current=t,d(t)},D=(0,W.useRef)(i);i&&(D.current=i);let O=n.repo?.path,k=(0,W.useRef)(O);(0,W.useEffect)(()=>{k.current!==O&&(k.current=O,ee(()=>[]),x(null))},[O]);let A=(0,W.useMemo)(()=>_e({files:s,details:c,discards:u,pending:f}),[s,c,u,f]),te=(0,W.useMemo)(()=>s.filter(e=>e.conflict),[s]),j=(0,W.useMemo)(()=>xe(A),[A]),M=(0,W.useMemo)(()=>({files:j.files,filesStaged:A.filter(e=>e.staged).length,blocks:j.blocks,blocksStaged:j.staged,conflicts:te.length}),[A,j,te]),N=(0,W.useMemo)(()=>Oe(A,m),[A,m]),F=(0,W.useMemo)(()=>{let e=N&&A.find(e=>e.path===N.path),t=e?e.blocks.findIndex(e=>e.key===N.key):-1;return e&&t>=0?{review:e,block:e.blocks[t],index:t}:null},[A,N]),ae=(0,W.useMemo)(()=>F?ke(F.review.blocks):[],[F]);(0,W.useEffect)(()=>{if(!N||m&&N.path===m.path&&N.key===m.key)return;let e=F?.block;h({...N,anchor:e?.anchor})},[N,m,F]);let I=g&&N&&g.path===N.path&&g.key===N.key?g.lines:null;(0,W.useEffect)(()=>{g&&!I&&_(null)},[g,I]);let oe=(0,W.useRef)(void 0);(0,W.useEffect)(()=>{if(!t?.path||t.at===oe.current||!i)return;let e=A.find(e=>e.path===t.path);oe.current=t.at;let n=e&&Ee(e);n&&h(n)},[t?.path,t?.at,A,i]);let L=(0,W.useCallback)(async e=>{let t=`?path=${encodeURIComponent(e.path)}${e.oldPath?`&oldPath=${encodeURIComponent(e.oldPath)}`:``}`;return w.get(r(`/changes/file${t}`))},[r]),R=(0,W.useRef)(new Map),z=(0,W.useRef)(new Set),B=(0,W.useMemo)(()=>{let e=new Set;N&&e.add(N.path);let t=Te(A,N)?.path;t&&e.add(t);let n=De(A,N?.path??null)?.path;return n&&e.add(n),[...e].join(`\0`)},[A,N]);(0,W.useEffect)(()=>{let e=B?B.split(`\0`):[],t=new Map(s.map(e=>[e.path,e])),n=[...S.current.keys()].filter(n=>{let r=t.get(n);return!r||R.current.get(n)!==Fe(r)&&!e.includes(n)});if(n.length){for(let e of n)R.current.delete(e);T(e=>{let t=new Map(e);for(let e of n)t.delete(e);return t})}for(let n of e){let e=t.get(n);if(!e||e.conflict||z.current.has(n))continue;let r=Fe(e);R.current.get(n)!==r&&(R.current.set(n,r),L(e).then(e=>{R.current.get(n)!==r||z.current.has(n)||T(t=>new Map(t).set(n,e))},()=>{R.current.get(n)===r&&R.current.delete(n)}))}},[s,B,L]);let ce=(0,W.useRef)(0),V=(0,W.useCallback)((e,t)=>{x({id:++ce.current,text:e,undo:t})},[]);(0,W.useEffect)(()=>{if(!b)return;let e=setTimeout(()=>x(e=>e?.id===b.id?null:e),Ie);return()=>clearTimeout(e)},[b]);let le=(0,W.useCallback)(()=>x(null),[]),ue=(0,W.useRef)(Promise.resolve());function H(e,t,n,r){let i=async()=>{y(e);for(let e of t)z.current.add(e);try{return await n()}catch(e){return C.error(r,{description:Le(e)}),null}finally{for(let e of t)z.current.delete(e);y(null)}},a=ue.current.then(i,i);return ue.current=a,a}async function U(e,t){let n=new Map((D.current?.files??[]).map(e=>[e.path,e])),[r,...i]=await Promise.all([o(),...e.map(e=>L(n.get(e)??{path:e}).catch(()=>null))]);r&&(D.current=r);let a=new Map((D.current?.files??[]).map(e=>[e.path,e]));T(t=>{let n=new Map(t);return e.forEach((e,t)=>{let r=i[t],o=a.get(e);r&&o?(n.set(e,r),R.current.set(e,Fe(o))):(n.delete(e),R.current.delete(e))}),n}),t?.()}let G=(e,t)=>{let n=A.find(t=>t.path===e);return{review:n,block:n?.blocks.find(e=>e.key===t)}};function K(e,t,n,r){let i=t.map(t=>de(e,t)),a=e=>{let t=new Map(e);for(let e of i)t.set(e,n);return t};if(p(a),r&&N&&N.path===e&&t.includes(N.key)){let e=Te(_e({files:s,details:c,discards:u,pending:a(f)}),N);e&&h(e)}return()=>p(e=>{let t=new Map(e);for(let e of i)t.delete(e);return t})}async function q(e,t){let n=S.current.get(e);n||=await L(D.current?.files.find(t=>t.path===e)??{path:e});let r=Pe((t.side===`staged`?n.staged?.hunks:n.unstaged?.hunks)??[],t.key);if(r===null)throw Error(`This block changed since it was shown. Look at it again, then answer.`);return r}function fe(e,t){let n=S.current.get(e)?.unstaged?.hunks??[];return t.flatMap(e=>{let t=e.hunk?Pe(n,e.key):null,r=t===null?void 0:n.find(e=>e.index===t);return r?[r]:[]})}let pe=e=>{e&&ee(t=>[...t,e])},J=e=>{let t=E.current.find(t=>t.recordId===e);t&&(x(null),H(`undo`,[t.path],async()=>{await w.post(r(`/discard/undo`),{id:e});let n=t.hunks[0];await U([t.path],()=>{ee(t=>t.filter(t=>t.recordId!==e)),h({path:t.path,key:n?`u:${n.id}`:`u:whole`,anchor:n?.oldStart??0})}),V(`Restored ${t.hunks.length>1?Y(t.hunks.length,`block`):`the block`} in ${P(t.path)[1]}`)},`Could not undo the discard`))},me=(e,t)=>{let{review:n,block:i}=G(e,t);if(!n?.file||!i||i.state!==`open`)return;let a=K(e,[t],`staged`,!0);H(`stage`,[e],async()=>{try{i.hunk?await w.post(r(`/stage-hunks`),{path:e,hunks:[{hunk:await q(e,i),id:i.hunk.id}]}):await w.post(r(`/stage`),{files:[e]})}finally{await U([e],a)}},`Could not stage`)},he=(e,t)=>{let{review:n,block:i}=G(e,t);if(!n?.file||!i||i.state!==`staged`)return;let a=n.file;h({path:e,key:t,anchor:i.anchor});let o=K(e,[t],`open`,!1);H(`unstage`,[e],async()=>{try{i.hunk?await w.post(r(`/unstage-hunks`),{path:e,hunks:[{hunk:await q(e,i),id:i.hunk.id}]}):await w.post(r(`/unstage`),{files:re(a)})}finally{await U([e],o)}},`Could not unstage`)},ge=(e,t)=>{let{review:n,block:i}=G(e,t);if(!n?.file||!i||i.state!==`open`)return;let a=n.file,o=n.blocks.indexOf(i)+1,s=n.blocks.length,c=K(e,[t],`discarded`,!0);H(`discard`,[e],async()=>{try{let t;if(!i.hunk||a.untracked){let n=fe(e,[i]),a=await w.post(r(`/discard`),{files:[e]});t=a.undo?.paths.length?{path:e,recordId:a.undo.id,hunks:n,whole:n.length?null:i.whole,added:i.added,removed:i.removed}:null}else{let n=await q(e,i),a=S.current.get(e)?.unstaged?.hunks.find(e=>e.index===n),o=await w.post(r(`/discard-hunks`),{path:e,hunks:[{hunk:n,id:i.hunk.id}]});t=o.undo&&{path:e,recordId:o.undo.id,hunks:a?[a]:[],whole:null,added:i.added,removed:i.removed}}pe(t);let n=P(e)[1];t?V(`Discarded block ${o} of ${s} in ${n}`,()=>J(t.recordId)):C.warning(`Discarded block ${o} of ${n}`,{description:`No copy of it could be kept, so this cannot be undone.`})}finally{await U([e],c)}},`Could not discard`)},ve=e=>{let t=A.find(t=>t.path===e)?.blocks.filter(e=>e.state===`open`)??[];if(!t.length)return;let n=K(e,t.map(e=>e.key),`staged`,!1);if(N?.path===e){let t=De(A,e);t&&h(t)}H(`stage`,[e],async()=>{try{await w.post(r(`/stage`),{files:[e]})}finally{await U([e],n)}},`Could not stage`)},ye=e=>{let t=A.find(t=>t.path===e),n=t?.blocks.filter(e=>e.state===`open`)??[];if(!t?.file||!n.length)return;let i=K(e,n.map(e=>e.key),`discarded`,!0);H(`discard`,[e],async()=>{try{let t=fe(e,n),i=t.length===n.length?null:n.find(e=>e.whole)?.whole??`empty`,a=n.reduce((e,t)=>e+t.added,0),o=n.reduce((e,t)=>e+t.removed,0),s=await w.post(r(`/discard`),{files:[e]}),c=s.undo?.paths.length?{path:e,recordId:s.undo.id,hunks:i?[]:t,whole:i,added:a,removed:o}:null;pe(c);let l=P(e)[1];c?V(`Discarded ${Y(n.length,`block`)} in ${l}`,()=>J(c.recordId)):C.warning(`Discarded the changes to ${l}`,{description:`No copy of them could be kept, so this cannot be undone.`})}finally{await U([e],i)}},`Could not discard`)},be=()=>{let e=A.filter(e=>e.file&&e.open);if(!e.length)return;let t=e.map(e=>K(e.path,e.blocks.filter(e=>e.state===`open`).map(e=>e.key),`staged`,!1));H(`stage`,e.map(e=>e.path),async()=>{try{await w.post(r(`/stage`),{files:e.map(e=>e.path)}),V(`Staged ${Y(e.length,`file`)}`)}finally{await U(N?[N.path]:[],()=>t.forEach(e=>e()))}},`Could not stage`)},Se=e=>{if(!F)return;let t=F.review.path,n=e?F.review.blocks.find(t=>t.key===e):F.block;!n||n.state!==`open`||!n.hunk||!n.parts||(h({path:t,key:n.key,anchor:n.anchor}),_({path:t,key:n.key,lines:new Set}))},Ce=e=>{_(t=>{if(!t)return t;let n=new Set(t.lines);return n.delete(e)||n.add(e),{...t,lines:n}})},Ae=e=>_(t=>t&&e?{...t,lines:new Set(e)}:null),je=()=>{let e=F;if(!e||!I||!e.block.hunk)return;let t=Ne(e.block,I);if(t?.length===0)return;let{review:n,block:i}=e,a=t?t.length:I.size;H(`stage-lines`,[n.path],async()=>{try{let e=await q(n.path,i);await w.post(r(`/stage-hunks`),{path:n.path,hunks:[{hunk:e,id:i.hunk.id,...t?{lines:t}:{}}]}),V(t?`Staged ${Y(a,`line`)} — the rest of the block stays open`:`Staged the block`)}finally{await U([n.path],()=>{_(null),h({path:n.path,key:i.key,anchor:i.anchor})})}},`Could not stage those lines`)},Me=(0,W.useCallback)((e,t)=>h({path:e,key:t}),[]),Re=e=>{let t=A.find(t=>t.path===e),n=t&&Ee(t);n&&h(n)},X=e=>{let t=we(A,N,e);t&&h(t)},ze=()=>{let e=De(A,N?.path??null);e&&h(e)},Be=async(e=D.current?.lastCommit?.hash)=>{await H(`undo-commit`,[],async()=>{await w.post(r(`/commit/undo`),{hash:e}),await U(N?[N.path]:[]),V(`Commit undone — its changes are staged again`)},`Could not undo the commit`)};return{changes:i,error:a,reviews:A,conflicts:te,totals:j,commitTotals:M,focus:N,focused:F,items:ae,pick:I,busy:v,toast:b,dismissToast:le,focusBlock:Me,focusFile:Re,step:X,nextFile:ze,stage:me,discard:ge,unstage:he,undoDiscard:J,stageFile:ve,discardFile:ye,stageAll:be,startPick:Se,togglePickLine:Ce,setPick:Ae,stagePicked:je,commit:async(e,t)=>{let n=D.current,i=M.filesStaged,a=await H(`commit`,[],async()=>{let{hash:n}=await w.post(r(`/commit`),{message:e,amend:!!t.amend,signoff:!!t.signoff});return await U(N?[N.path]:[]),n},t.amend?`Could not amend the commit`:`Could not commit`);if(!a)return!1;let s=a.slice(0,7);if(t.amend?V(`Amended ${s}`):V(`Committed ${s} · ${Y(i,`file`)}`,()=>void Be(a)),t.push&&n){let e=ne(n.branch)===`publish`;await H(`push`,[],async()=>(await w.post(r(e?`/publish`:`/push`),{}),await o(),!0),e?`Publish failed`:`Push failed`)&&V(e?`Published ${n.branch.head??`the branch`}`:`Pushed ${s} to ${n.branch.upstream??`the remote`}`)}return!0},undoCommit:Be}}var X=n(),ze=(e,t)=>`${e} ${e===1?t:`${t}s`}`;function Be({lines:e,compact:t}){return(0,X.jsxs)(`div`,{className:T(`my-0.5 flex h-7 items-center gap-2 font-sans text-[11.5px] font-medium text-text-3`,t?`pl-[38px]`:`pl-[54px]`),children:[(0,X.jsx)(`span`,{className:`h-px w-3 bg-[repeating-linear-gradient(90deg,var(--border)_0_4px,transparent_4px_8px)]`}),ze(e,`unchanged line`),(0,X.jsx)(`span`,{className:T(`h-px flex-1 bg-[repeating-linear-gradient(90deg,var(--border)_0_4px,transparent_4px_8px)]`,t?`mr-2.5`:`mr-3.5`)})]})}var Z=`inline-flex h-6 items-center gap-1 whitespace-nowrap rounded-[5px] px-1.5 text-[11.5px] font-medium text-text-2 hover:bg-surface-hover hover:text-text disabled:pointer-events-none disabled:opacity-45`,Ve=`inline-flex h-7 items-center gap-1.5 whitespace-nowrap rounded-[7px] border pl-2.5 text-[12.5px] font-medium transition-colors disabled:pointer-events-none disabled:opacity-45`,He=(0,W.memo)(function({name:e,oldPath:t,block:n,index:i,total:a,focused:o,pick:c,compact:u,lang:d,busy:m,actions:h}){let g=h.current,_=je(n),v=(0,X.jsx)(ce,{added:n.added,removed:n.removed}),y=n.state===`staged`,b=n.state===`discarded`,S=!!c&&o&&n.state===`open`,C=S?Me(n):[],w;return w=b?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-[5px] font-semibold text-error`,children:[(0,X.jsx)(s,{className:`size-3.5`}),`Discarded`]}),(0,X.jsx)(`span`,{children:_}),(0,X.jsx)(`span`,{className:`flex-1`}),!u&&n.recordId&&(0,X.jsxs)(`button`,{type:`button`,className:Z,disabled:m,onClick:()=>g.undoDiscard(n.recordId),children:[(0,X.jsx)(p,{className:`size-3.5`}),`Undo`]})]}):y?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-[5px] font-semibold text-primary`,children:[(0,X.jsx)(l,{className:`size-3.5`}),`Staged`]}),(0,X.jsx)(`span`,{children:_}),v,(0,X.jsx)(`span`,{className:`flex-1`}),!u&&(0,X.jsxs)(`button`,{type:`button`,className:Z,onClick:()=>g.unstage(n.key),children:[(0,X.jsx)(p,{className:`size-3.5`}),`Unstage`]})]}):S?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`b`,{className:`font-semibold text-text-2`,children:`Pick lines`}),(0,X.jsxs)(`span`,{children:[c.size,` of `,C.length,` selected`]}),(0,X.jsx)(`span`,{className:`flex-1`}),(0,X.jsx)(`button`,{type:`button`,className:Z,onClick:()=>g.setPick(C),children:`All`}),(0,X.jsx)(`button`,{type:`button`,className:Z,onClick:()=>g.setPick([]),children:`None`}),(0,X.jsxs)(`button`,{type:`button`,className:T(Ve,`border-border bg-bg pr-1.5 text-text hover:border-text/30`),onClick:()=>g.setPick(null),children:[`Cancel`,(0,X.jsx)(U,{children:`Esc`})]}),(0,X.jsxs)(`button`,{type:`button`,className:T(Ve,`border-transparent bg-primary pr-1.5 text-primary-foreground hover:bg-primary/90`),disabled:!c.size,onClick:g.stagePicked,children:[m?(0,X.jsx)(x,{className:`size-3.5 animate-spin`}):(0,X.jsx)(r,{className:`size-3.5`}),`Stage `,ze(c.size,`line`),(0,X.jsx)(U,{className:`border-white/30 bg-white/15 text-inherit`,children:`Y`})]})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`span`,{children:[(0,X.jsxs)(`b`,{className:`font-semibold text-text-2`,children:[`Block `,i+1]}),` of `,a]}),(0,X.jsx)(`span`,{children:_}),v,(0,X.jsx)(`span`,{className:`flex-1`}),!u&&(0,X.jsxs)(X.Fragment,{children:[n.hunk&&n.parts&&(0,X.jsxs)(`button`,{type:`button`,className:Z,title:`Stage single lines (L)`,onClick:()=>g.startPick(n.key),children:[(0,X.jsx)(f,{className:`size-3.5`}),`Lines…`]}),(0,X.jsxs)(`button`,{type:`button`,title:`Discard this block (N)`,className:T(Ve,o?`pr-1.5`:`pr-2.5`,`border-border bg-bg text-text hover:border-error/50 hover:text-error`),onClick:()=>g.discard(n.key),children:[(0,X.jsx)(s,{className:`size-3.5`}),`Discard`,o&&(0,X.jsx)(U,{children:`N`})]}),(0,X.jsxs)(`button`,{type:`button`,title:`Stage this block (Y)`,className:T(Ve,o?`pr-1.5`:`pr-2.5`,`border-transparent bg-primary text-primary-foreground hover:bg-primary/90`),onClick:()=>g.stage(n.key),children:[(0,X.jsx)(r,{className:`size-3.5`}),`Stage`,o&&(0,X.jsx)(U,{className:`border-white/30 bg-white/15 text-inherit`,children:`Y`})]})]})]}),(0,X.jsxs)(`div`,{"data-block-key":n.key,"data-state":n.state,"data-focused":o||void 0,onClick:e=>{!o&&!e.target.closest(`button`)&&g.focus(n.key)},className:T(`relative rounded-lg border bg-bg`,u?`mx-2 my-1.5`:`mr-3 ml-2 my-1.5`,y?`border-dashed border-primary/45`:b?`border-dashed border-border-soft`:`border-border-soft`,o?`border-primary/60 shadow-[0_0_0_3px_var(--accent-wash)]`:!u&&`cursor-pointer`),children:[(0,X.jsx)(`div`,{className:T(`relative flex flex-wrap items-center gap-x-2 gap-y-1.5 rounded-t-[7px] py-1 pr-1.5 pl-3 font-sans text-xs leading-[1.3] text-text-3`,y||b?`min-h-8`:`min-h-[38px] border-b border-border-soft`,!y&&!b&&(o?`bg-[color-mix(in_srgb,var(--accent)_7%,var(--panel))]`:`bg-panel`)),children:w}),(0,X.jsx)(`div`,{className:T(`overflow-hidden rounded-b-[7px] py-0.5`,y&&`shadow-[inset_2px_0_0_var(--accent)]`,b&&`shadow-[inset_2px_0_0_color-mix(in_srgb,var(--error)_60%,transparent)]`),children:(0,X.jsx)(Ue,{name:e,oldPath:t,block:n,compact:u,lang:d,pick:S?c:null,onToggle:g.togglePickLine})})]})});function Ue({name:e,oldPath:t,block:n,compact:r,lang:i,pick:a,onToggle:o}){if(n.whole)return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(We,{name:e,oldPath:t,block:n}),n.parts?.map((e,t)=>(0,X.jsx)(`div`,{className:T(t>0&&`mt-1 border-t border-dashed border-border-soft pt-1`),children:(0,X.jsx)(Ge,{part:e,state:n.state,compact:r,lang:i,pick:null,onToggle:o})},t))]});let s=n.parts?.[0];return s?(0,X.jsx)(Ge,{part:s,state:n.state,compact:r,lang:i,pick:a,onToggle:o}):(0,X.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2.5 font-sans text-xs text-text-3`,children:[(0,X.jsx)(x,{className:`size-3.5 animate-spin`}),`Loading the lines…`]})}function We({name:e,oldPath:t,block:n}){let r=(0,X.jsx)(`b`,{className:`font-semibold text-text`,children:e}),i=n.removed?`all ${ze(n.removed,`line`)}`:`an empty file`,a;if(n.state===`discarded`)a=n.whole===`deleted`?(0,X.jsxs)(X.Fragment,{children:[r,` is back. Undo deletes it again.`]}):(0,X.jsxs)(X.Fragment,{children:[`The changes to `,r,` are discarded. Undo puts them back.`]});else switch(n.whole){case`deleted`:a=n.state===`staged`?(0,X.jsxs)(X.Fragment,{children:[r,` is deleted — `,i,`. The next commit deletes it.`]}):(0,X.jsxs)(X.Fragment,{children:[r,` is deleted — `,i,`. Stage it to delete the file in the next commit, or discard to bring it back.`]});break;case`binary`:a=(0,X.jsxs)(X.Fragment,{children:[r,` is a binary file: git cannot show it as lines, so it is staged or discarded whole.`]});break;case`large`:a=(0,X.jsxs)(X.Fragment,{children:[r,` is too big to split into blocks, so it is staged or discarded whole.`]});break;case`rename`:a=(0,X.jsxs)(X.Fragment,{children:[`Renamed from `,(0,X.jsx)(`b`,{className:`font-semibold text-text`,children:t??`another path`}),`. git takes a rename as one change`,n.parts?.length?`, edits included`:``,`.`]});break;case`submodule`:a=(0,X.jsxs)(X.Fragment,{children:[r,` is a submodule: what changed is the commit it points to.`]});break;case`mode`:a=(0,X.jsxs)(X.Fragment,{children:[`Only the file mode of `,r,` changed.`]});break;case`type`:a=(0,X.jsxs)(X.Fragment,{children:[r,` changed kind — a file became a link, or the other way round.`]});break;case`unread`:a=(0,X.jsxs)(X.Fragment,{children:[r,` was not read: a new folder, or past the number of new files PPM lists.`]});break;default:a=(0,X.jsxs)(X.Fragment,{children:[r,` is an empty file.`]})}let o=n.whole===`deleted`||n.state===`discarded`?s:null;return(0,X.jsxs)(`div`,{className:`flex items-center gap-3 px-3.5 py-3 font-sans text-[13px] leading-normal text-text-2`,children:[o&&(0,X.jsx)(o,{className:T(`size-5 shrink-0`,n.state===`discarded`?`text-text-3`:`text-error`)}),(0,X.jsx)(`span`,{children:a})]})}function Ge({part:e,state:t,compact:n,lang:r,pick:i,onToggle:a}){let o=(0,W.useMemo)(()=>Ae(e),[e]),[s,c]=V([(0,W.useMemo)(()=>o.filter(e=>e.kind!==`+`).map(e=>e.text).join(`
2
- `),[o]),(0,W.useMemo)(()=>o.filter(e=>e.kind!==`-`).map(e=>e.text).join(`
3
- `),[o])],r),l=(0,W.useMemo)(()=>le(o.map(e=>({k:e.kind,text:e.text,o:e.old,n:e.new}))),[o]),u=(0,W.useMemo)(()=>{let e=0,t=0,n=[];return o.forEach((r,i)=>{let a=r.kind===`+`?void 0:s?.[e],o=r.kind===`-`?void 0:c?.[t];r.kind!==`+`&&e++,r.kind!==`-`&&t++,n.push({row:r,tokens:r.kind===`-`?a:o,i})}),n},[o,s,c]),d=n?`grid-cols-[30px_30px_16px_minmax(0,1fr)]`:`grid-cols-[44px_44px_22px_minmax(0,1fr)]`,f=t===`discarded`,p=t===`staged`?{add:`bg-diff-added/60`,del:`bg-diff-removed/60`}:{add:`bg-diff-added`,del:`bg-diff-removed`};return(0,X.jsx)(X.Fragment,{children:u.map(({row:e,tokens:t,i:r})=>{let o=e.kind!==` `,s=!!i&&o&&i.has(e.at),c=!!i&&o&&!s,u=e.kind===`+`&&!c,m=e.kind===`-`&&!c,h=T(`select-none text-right text-[0.92em] text-text-3`,n?`pr-[5px]`:`pr-2`);return(0,X.jsxs)(`div`,{className:T(`grid`,d,u&&p.add,m&&p.del,i&&o&&`cursor-pointer`),onClick:i&&o?()=>a(e.at):void 0,role:i&&o?`checkbox`:void 0,"aria-checked":i&&o?s:void 0,children:[(0,X.jsx)(`span`,{className:h,children:e.old??``}),(0,X.jsx)(`span`,{className:h,children:e.new??``}),(0,X.jsx)(`span`,{className:T(`grid h-[1lh] select-none place-items-center self-start`,e.kind===`+`?`text-success`:e.kind===`-`?`text-error`:`text-text-3`),children:i&&o?(0,X.jsx)(oe,{state:s?`all`:`none`,className:`size-3.5 md:size-3.5 rounded-[3.5px] md:rounded-[3.5px]`}):e.kind===`+`?`+`:e.kind===`-`?`−`:``}),(0,X.jsx)(`span`,{className:T(`min-w-0 whitespace-pre-wrap [overflow-wrap:anywhere]`,n?`pr-2.5`:`pr-3.5`,c&&`opacity-55`,f&&`opacity-70`),children:(0,X.jsx)(H,{text:e.text,tokens:t,span:l?.[r]??null,spanClass:T(`rounded-[2px]`,e.kind===`+`?`bg-diff-added-word`:`bg-diff-removed-word`)})})]},r)})})}var Q=(e,t)=>`${e} ${e===1?t:`${t}s`}`,Ke=6;function qe({blocks:e}){let t=e.filter(e=>e.state===`staged`).length;return(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-[3px]`,title:`${t} of ${Q(e.filter(e=>e.state!==`discarded`).length,`block`)} staged`,children:[e.slice(0,Ke).map(e=>(0,X.jsx)(`i`,{className:T(`relative size-[7px] rounded-full border-[1.5px]`,e.state===`staged`?`border-primary bg-primary`:e.state===`discarded`?`border-error/70`:`border-text-3/85`,e.state===`discarded`&&`after:absolute after:top-[1.5px] after:-right-px after:-left-px after:h-[1.5px] after:-rotate-45 after:bg-error/80`)},e.key)),e.length>Ke&&(0,X.jsxs)(`span`,{className:`font-mono text-[10px] leading-none text-text-3`,children:[`+`,e.length-Ke]})]})}var Je=40;function Ye({reviews:e}){let t=be(e).flatMap(e=>e.blocks);if(!t.length)return null;if(t.length>Je){let e=t.filter(e=>e.state===`staged`).length,n=t.filter(e=>e.state===`discarded`).length;return(0,X.jsxs)(`span`,{"aria-hidden":!0,className:`flex h-1.5 w-40 overflow-hidden rounded-[3px] bg-text/13`,children:[(0,X.jsx)(`i`,{className:`bg-primary`,style:{width:`${e/t.length*100}%`}}),(0,X.jsx)(`i`,{className:`bg-error/60`,style:{width:`${n/t.length*100}%`}})]})}return(0,X.jsx)(`span`,{"aria-hidden":!0,className:`inline-flex flex-wrap gap-0.5`,children:t.map((e,t)=>(0,X.jsx)(`i`,{className:T(`h-1.5 w-2.5 rounded-[3px]`,e.state===`staged`?`bg-primary`:e.state===`discarded`?`bg-error/60`:`bg-text/13`)},t))})}var Xe={changes:`Changes`,staged:`Staged`,discarded:`Discarded`};function Ze({review:e,current:t,mobile:n,onPick:r}){let[i,a]=P(e.path),o=ve(e),s=e.file?.x===`D`||e.file?.y===`D`;return(0,X.jsxs)(`button`,{type:`button`,title:e.path,"aria-current":t?`true`:void 0,"data-testid":`git-review-file`,onClick:()=>r(e.path),className:T(`grid w-full items-center text-left text-text transition-colors hover:bg-surface-hover`,n?`min-h-14 grid-cols-[18px_minmax(0,1fr)_auto] gap-3 px-4 py-1.5`:`min-h-[42px] grid-cols-[16px_minmax(0,1fr)_auto] gap-[9px] px-3 py-1`,t&&`bg-accent-wash shadow-[inset_2px_0_0_var(--accent)] hover:bg-accent-wash`),children:[(0,X.jsx)(A,{name:a,className:n?`size-[18px]`:`size-4`}),(0,X.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,X.jsx)(`span`,{className:T(`flex min-w-0`,n?`text-sm leading-[19px]`:`text-[13px] leading-[17px]`,o===`changes`?`font-medium`:`text-text-2`,s&&`line-through`),children:(0,X.jsx)(M,{children:a})}),i&&(0,X.jsx)(`span`,{className:T(`flex min-w-0 text-text-3`,n?`text-xs leading-4`:`text-[11px] leading-[15px]`),children:(0,X.jsx)(M,{children:i})})]}),(0,X.jsxs)(`span`,{className:`flex flex-col items-end gap-1`,children:[(0,X.jsx)(qe,{blocks:e.blocks}),o===`staged`?(0,X.jsx)(`span`,{className:`whitespace-nowrap text-[10.5px] font-semibold text-primary`,children:`Staged`}):o===`discarded`?(0,X.jsx)(`span`,{className:`whitespace-nowrap text-[10.5px] font-semibold text-error`,children:`Discarded`}):(0,X.jsxs)(`small`,{className:`font-mono text-[10.5px] font-medium leading-none text-text-3`,children:[e.open,` left`]})]})]})}function Qe({reviews:e,conflicts:t,current:n,mobile:r,onPick:i,onResolve:a}){let o=T(`flex items-center gap-1.5 text-[10.5px] font-semibold uppercase tracking-[.07em] text-text-3`,r?`h-10 px-4`:`h-8 px-3`),s=[`changes`,`staged`,`discarded`].map(t=>[t,e.filter(e=>ve(e)===t)]);return(0,X.jsxs)(X.Fragment,{children:[t.length>0&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:T(o,`text-error`),children:[(0,X.jsx)(y,{className:`size-3.5`}),`Conflicts`,(0,X.jsx)(z,{count:t.length})]}),t.map(e=>{let[t,n]=P(e.path);return(0,X.jsxs)(`button`,{type:`button`,title:`Resolve ${e.path}`,onClick:()=>a(e),className:T(`grid w-full items-center text-left hover:bg-surface-hover`,r?`min-h-14 grid-cols-[18px_minmax(0,1fr)_auto] gap-3 px-4`:`min-h-[42px] grid-cols-[16px_minmax(0,1fr)_auto] gap-[9px] px-3`),children:[(0,X.jsx)(A,{name:n,className:r?`size-[18px]`:`size-4`}),(0,X.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,X.jsx)(`span`,{className:T(`flex min-w-0 font-medium`,r?`text-sm`:`text-[13px]`),children:(0,X.jsx)(M,{children:n})}),t&&(0,X.jsx)(`span`,{className:T(`flex min-w-0 text-text-3`,r?`text-xs`:`text-[11px]`),children:(0,X.jsx)(M,{children:t})})]}),(0,X.jsx)(`span`,{className:`text-xs font-medium text-primary`,children:`Resolve`})]},e.path)})]}),s.map(([e,t])=>t.length>0&&(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`div`,{className:o,children:[Xe[e],(0,X.jsx)(z,{count:t.length})]}),t.map(e=>(0,X.jsx)(Ze,{review:e,current:e.path===n,mobile:r,onPick:i},e.path))]},e))]})}function $e({toast:e,mobile:t,onClose:n}){return(0,X.jsxs)(`div`,{role:`status`,"data-testid":`git-review-toast`,className:T(`absolute z-30 flex items-center border border-border bg-panel-2 shadow-[var(--shadow-float)]`,t?`inset-x-3 bottom-3 gap-2 rounded-xl py-1 pr-1 pl-3.5 text-[13.5px]`:`bottom-3 left-1/2 max-w-[calc(100%-24px)] -translate-x-1/2 gap-3 rounded-[10px] py-[5px] pr-[5px] pl-3.5 text-[12.5px]`),children:[(0,X.jsx)(l,{className:`size-4 shrink-0 text-primary`}),(0,X.jsx)(`span`,{className:T(`min-w-0`,t?`flex-1`:`truncate whitespace-nowrap`),children:e.text}),e.undo&&(0,X.jsxs)(k,{variant:`ghost`,size:t?`sm`:`xs`,className:T(`text-primary hover:text-primary`,t&&`h-11`),onClick:()=>{n(),e.undo?.()},children:[(0,X.jsx)(p,{}),`Undo`]}),(0,X.jsx)(`button`,{type:`button`,"aria-label":`Dismiss`,onClick:n,className:T(`grid shrink-0 place-items-center rounded-md text-text-3 hover:bg-surface-hover hover:text-text`,t?`size-11`:`size-6`),children:(0,X.jsx)(_,{className:`size-3.5`})})]})}function et({conflicts:e,onGraph:t}){return(0,X.jsx)(`div`,{className:`grid flex-1 place-items-center p-8 text-center`,children:(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`div`,{className:`mx-auto mb-3.5 grid size-[52px] place-items-center rounded-full bg-accent-wash text-primary`,children:(0,X.jsx)(l,{className:`size-5`})}),(0,X.jsx)(`h4`,{className:`m-0 mb-1.5 text-[15px] font-semibold`,children:e?`${Q(e,`conflict`)} to resolve`:`Nothing left to review`}),(0,X.jsx)(`p`,{className:`mx-auto mb-4 max-w-[40ch] text-[13px] text-text-2`,children:e?`A conflicted file has no blocks to review until it is resolved: open it from the list.`:`The working tree matches the last commit. What you commit here shows up at the top of the Git Graph.`}),(0,X.jsxs)(k,{variant:`outline`,size:`sm`,className:`max-md:h-11`,onClick:t,children:[(0,X.jsx)(m,{}),`Open Git Graph`]})]})})}var tt=`inline-grid size-7 shrink-0 place-items-center rounded-md text-text-3 hover:bg-surface-hover hover:text-text aria-pressed:bg-surface-hover aria-pressed:text-text`,nt=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent);function rt({view:e}){let{review:t}=e,{focused:n,totals:a}=t,o=(0,W.useRef)(null),[s,c]=(0,W.useState)(!1),[l,u]=(0,W.useState)(!1),[f,p]=(0,W.useState)(null),m=it(e);(0,W.useEffect)(()=>{let e=document.activeElement;(!e||e===document.body||e.getClientRects().length===0)&&o.current?.focus({preventScroll:!0})},[t.focus?.path,t.focus?.key]);let h=e=>{if(e.ctrlKey||e.metaKey||e.altKey||e.defaultPrevented||!o.current?.contains(e.target)||e.target.closest(`input, textarea, select, [contenteditable='true']`))return;let r=e.key.toLowerCase(),i=n?.block,a=i?.state===`open`;if(r===`j`||r===`k`)t.step(r===`j`?1:-1);else if(r===`y`&&a)t.pick?t.stagePicked():t.stage(n.review.path,i.key);else if(r===`n`&&a&&!t.pick)t.discard(n.review.path,i.key);else if(r===`l`&&a&&i.hunk)t.pick?t.setPick(null):t.startPick();else if(r===`escape`&&(t.pick||l))t.setPick(null),u(!1);else return;e.preventDefault()},g=e=>{t.focusFile(e),u(!1)},_=t.changes?.operation??null,v=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto overflow-x-hidden pb-1`,children:(0,X.jsx)(Qe,{reviews:t.reviews,conflicts:t.conflicts,current:n?.review.path??null,mobile:!1,onPick:g,onResolve:e.resolve})}),t.changes&&a.files>0&&!_&&(0,X.jsx)(B,{projectName:e.projectName,branch:e.branch,totals:t.commitTotals,lastCommit:t.changes.lastCommit,busy:t.busy,onCommit:t.commit,onUndoCommit:t.undoCommit,className:`shrink-0 border-t border-border-soft bg-panel`})]}),y=a.blocks-a.staged;return!t.reviews.length&&!t.conflicts.length?(0,X.jsxs)(`div`,{"data-testid":`git-review`,className:`relative flex h-full flex-col overflow-hidden bg-bg`,children:[t.error&&(0,X.jsx)(`div`,{className:`shrink-0 bg-destructive/10 px-3 py-1.5 text-xs text-destructive`,children:t.error}),(0,X.jsx)(et,{conflicts:0,onGraph:e.openGraph}),t.toast&&(0,X.jsx)($e,{toast:t.toast,mobile:!1,onClose:t.dismissToast})]}):(0,X.jsxs)(`div`,{ref:o,tabIndex:0,onKeyDown:h,"data-testid":`git-review`,className:`@container flex h-full flex-col overflow-hidden bg-bg outline-none`,children:[(0,X.jsxs)(`div`,{className:`relative flex shrink-0 flex-wrap items-center gap-x-[18px] gap-y-2 border-b border-border-soft bg-panel py-2.5 pr-3 pl-4`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`h3`,{className:`m-0 text-sm font-semibold leading-5`,children:`Review changes`}),(0,X.jsxs)(`p`,{className:`m-0 flex min-w-0 items-center gap-1.5 whitespace-nowrap text-xs text-text-3`,children:[(0,X.jsx)(d,{className:`size-3 shrink-0`}),(0,X.jsx)(`b`,{className:`truncate font-medium text-text-2`,children:e.branch??`detached HEAD`}),(0,X.jsxs)(`span`,{children:[`· `,Q(a.files,`file`)]}),(0,X.jsx)(ce,{added:a.added,removed:a.removed})]})]}),a.blocks+a.discarded>0&&(0,X.jsxs)(`div`,{className:`flex items-center gap-2.5 whitespace-nowrap text-[12.5px] text-text-2`,children:[(0,X.jsx)(Ye,{reviews:t.reviews}),(0,X.jsxs)(`span`,{children:[(0,X.jsxs)(`b`,{className:`font-semibold text-text`,children:[a.staged,` of `,a.blocks]}),` blocks staged`]}),(0,X.jsx)(`span`,{className:`text-text-3`,children:y?`· ${y} to decide`:`· all decided`})]}),(0,X.jsx)(`span`,{className:`flex-1`}),(0,X.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,X.jsxs)(k,{variant:`ghost`,size:`sm`,className:`text-text-2 @min-[760px]:hidden`,"aria-expanded":l,onClick:()=>u(!l),children:[(0,X.jsx)(i,{}),Q(t.reviews.length+t.conflicts.length,`file`)]}),(0,X.jsxs)(k,{variant:`outline`,size:`sm`,disabled:!y,onClick:t.stageAll,children:[(0,X.jsx)(r,{}),`Stage all`]}),(0,X.jsx)(`button`,{type:`button`,className:tt,"aria-pressed":s,title:`Keyboard shortcuts`,"aria-label":`Keyboard shortcuts`,onClick:()=>c(!s),children:(0,X.jsx)(b,{className:`size-4`})})]})]}),s&&(0,X.jsxs)(`div`,{className:`flex shrink-0 flex-wrap gap-x-3 gap-y-1 border-b border-border-soft bg-panel px-4 py-2 text-[11.5px] text-text-3`,children:[(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,X.jsx)(U,{children:`J`}),(0,X.jsx)(U,{children:`K`}),`next / previous block`]}),(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,X.jsx)(U,{children:`Y`}),`stage`]}),(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,X.jsx)(U,{children:`N`}),`discard`]}),(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,X.jsx)(U,{children:`L`}),`pick lines`]}),(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,X.jsx)(U,{children:nt?`⌘`:`Ctrl`}),(0,X.jsx)(U,{children:`↵`}),`commit`]})]}),t.error&&(0,X.jsx)(`div`,{className:`shrink-0 bg-destructive/10 px-3 py-1.5 text-xs text-destructive`,children:t.error}),(0,X.jsxs)(`div`,{className:`relative grid min-h-0 flex-1 grid-cols-[minmax(0,1fr)] @min-[760px]:grid-cols-[272px_minmax(0,1fr)]`,children:[(0,X.jsx)(`aside`,{"aria-label":`Changed files`,className:`hidden min-h-0 flex-col border-r border-border-soft bg-panel @min-[760px]:flex`,children:v}),l&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`absolute inset-0 z-20 bg-black/30 @min-[760px]:hidden`,onClick:()=>u(!1)}),(0,X.jsx)(`aside`,{"aria-label":`Changed files`,className:`absolute inset-y-0 left-0 z-30 flex w-[min(288px,85%)] flex-col border-r border-border bg-panel shadow-[var(--shadow-float)] @min-[760px]:hidden`,children:v})]}),(0,X.jsx)(`section`,{"aria-label":`Changes`,className:`relative flex min-h-0 min-w-0 flex-col`,children:n?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(at,{view:e}),(0,X.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 flex-col`,children:[(0,X.jsx)(ot,{view:e,actions:m}),t.toast&&(0,X.jsx)($e,{toast:t.toast,mobile:!1,onClose:t.dismissToast})]}),(0,X.jsx)(st,{view:e,onDiscardFile:p})]}):(0,X.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 flex-col`,children:[(0,X.jsx)(et,{conflicts:t.conflicts.length,onGraph:e.openGraph}),t.toast&&(0,X.jsx)($e,{toast:t.toast,mobile:!1,onClose:t.dismissToast})]})})]}),(0,X.jsx)(R,{request:f,onClose:()=>p(null)})]})}function it(e){let{review:t}=e,n=t.focused?.review.path??``,r=(0,W.useRef)(null);return r.current={focus:e=>t.focusBlock(n,e),stage:e=>t.stage(n,e),discard:e=>t.discard(n,e),unstage:e=>t.unstage(n,e),undoDiscard:t.undoDiscard,startPick:t.startPick,togglePickLine:t.togglePickLine,setPick:t.setPick,stagePicked:t.stagePicked},r}function at({view:e}){let{review:t}=e.review.focused,[n,r]=P(t.path),i=t.file,a=i?.x===`D`||i?.y===`D`;return(0,X.jsxs)(`div`,{className:`relative flex min-h-12 shrink-0 flex-wrap items-center gap-x-[9px] gap-y-1.5 border-b border-border-soft py-2 pr-3 pl-4`,children:[(0,X.jsx)(A,{name:r,className:`size-4`}),(0,X.jsx)(`span`,{className:T(`whitespace-nowrap text-sm font-semibold`,a&&`text-text-2 line-through`),children:r}),n&&(0,X.jsx)(`span`,{dir:`rtl`,title:t.path,className:`min-w-10 shrink truncate text-left text-xs text-text-3`,children:(0,X.jsx)(`bdi`,{children:n})}),i&&(0,X.jsx)(L,{letter:F(i)}),(0,X.jsx)(ce,{added:t.added,removed:t.removed}),(0,X.jsx)(`span`,{className:`flex-1`}),i&&i.y!==`D`&&(0,X.jsxs)(k,{variant:`ghost`,size:`sm`,className:`text-text-2`,onClick:()=>e.openFile(t.path),children:[(0,X.jsx)(g,{}),`Open file`]})]})}function ot({view:e,actions:t}){let{review:n}=e,r=n.focused,i=(0,W.useRef)(null),[,a]=P(r.review.path),o=ue(r.review.path),s=!!n.busy,c=!!r.block.parts;return(0,W.useLayoutEffect)(()=>{let e=i.current,t=e?.querySelector(`[data-block-key="${CSS.escape(r.block.key)}"]`);if(!e||!t)return;let n=t.offsetTop-28,a=t.offsetTop+Math.min(t.offsetHeight,e.clientHeight-48);(t.offsetTop<e.scrollTop+8||a>e.scrollTop+e.clientHeight)&&(e.scrollTop=Math.max(0,n))},[r.review.path,r.block.key,c]),(0,X.jsx)(`div`,{ref:i,"data-testid":`git-review-code`,className:`relative min-h-0 flex-1 overflow-auto bg-bg pt-2.5 pb-7 font-mono text-[12px] leading-[1.7] [tab-size:4]`,children:n.items.map(e=>e.kind===`gap`?(0,X.jsx)(Be,{lines:e.lines,compact:!1},e.key):(0,X.jsx)(He,{name:a,oldPath:r.review.file?.oldPath,block:e.block,index:e.index,total:e.total,focused:e.block.key===r.block.key,pick:e.block.key===r.block.key?n.pick:null,compact:!1,lang:o,busy:s,actions:t},e.block.key))})}function st({view:e,onDiscardFile:t}){let{review:n}=e,{review:i,index:a}=n.focused,o=i.open,c=n.reviews.length>1,l=e=>{if(!i.file)return;let r=ae([i.file]);t({anchor:e,title:r.title,body:r.body,confirmLabel:r.confirm,onConfirm:()=>n.discardFile(i.path)})};return(0,X.jsxs)(`div`,{className:`relative flex shrink-0 flex-wrap items-center gap-x-2.5 gap-y-2 border-t border-border-soft bg-panel px-3 py-2 text-[12.5px] text-text-2`,children:[(0,X.jsxs)(`div`,{className:`inline-flex items-center gap-0.5 rounded-lg bg-text/6 p-0.5`,children:[(0,X.jsx)(`button`,{type:`button`,className:tt,title:`Previous block (K)`,"aria-label":`Previous block`,onClick:()=>n.step(-1),children:(0,X.jsx)(S,{className:`size-3.5`})}),(0,X.jsxs)(`span`,{className:`min-w-[92px] text-center text-xs font-medium text-text-2`,children:[`Block `,a+1,` of `,i.blocks.length]}),(0,X.jsx)(`button`,{type:`button`,className:tt,title:`Next block (J)`,"aria-label":`Next block`,onClick:()=>n.step(1),children:(0,X.jsx)(u,{className:`size-3.5`})})]}),(0,X.jsx)(`span`,{className:`min-w-0 truncate`,children:o?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`b`,{className:`font-semibold text-text`,children:o}),` to decide in this file`]}):`This file is done`}),(0,X.jsx)(`span`,{className:`flex-1`}),(0,X.jsxs)(k,{variant:`ghost`,size:`sm`,className:`text-destructive hover:text-destructive`,disabled:!o||!i.file,onClick:e=>l(e.currentTarget),children:[(0,X.jsx)(s,{}),`Discard file…`]}),(0,X.jsxs)(k,{variant:`outline`,size:`sm`,disabled:!o,onClick:()=>n.stageFile(i.path),children:[(0,X.jsx)(r,{}),`Stage file`]}),(0,X.jsxs)(k,{size:`sm`,disabled:!c,onClick:n.nextFile,children:[`Next file`,(0,X.jsx)(v,{})]})]})}var ct=`inline-grid size-11 shrink-0 place-items-center rounded-[10px] text-text-2 active:bg-surface-hover`,$=`inline-flex h-11 min-w-11 items-center justify-center gap-2 whitespace-nowrap rounded-[10px] border px-3.5 text-sm font-medium active:opacity-80 disabled:opacity-45`;function lt({view:e}){let{review:t}=e,{focused:n,totals:i}=t,[a,l]=(0,W.useState)(null),[u,d]=(0,W.useState)(null),f=it(e),m=()=>l(null),_=i.blocks-i.staged,v=t.changes?.operation??null,y=n?.block,b=n?.review.path??``,x=()=>{let e=n?.review.file;if(!e)return;let r=ae([e]);d({anchor:null,title:r.title,body:r.body,confirmLabel:r.confirm,onConfirm:()=>t.discardFile(e.path)})};return(0,X.jsxs)(`div`,{"data-testid":`git-review`,className:`flex h-full flex-col overflow-hidden bg-bg`,children:[(0,X.jsxs)(`div`,{className:`flex h-12 shrink-0 items-center gap-1 border-b border-border-soft bg-panel pr-1 pl-3.5`,children:[(0,X.jsxs)(`h3`,{className:`m-0 min-w-0 flex-1 truncate text-[15px] font-semibold leading-tight`,children:[`Review changes`,(0,X.jsx)(`small`,{className:`block truncate text-[11.5px] font-normal text-text-3`,children:i.blocks?`${i.staged} of ${Q(i.blocks,`block`)} staged`:e.branch??`Nothing to review`})]}),(0,X.jsx)(`button`,{type:`button`,className:ct,"aria-label":`Changed files`,onClick:()=>l(`files`),children:(0,X.jsx)(h,{className:`size-5`})})]}),(0,X.jsx)(`div`,{className:`h-[3px] shrink-0 bg-text/10`,children:(0,X.jsx)(`div`,{className:`h-full bg-primary transition-[width]`,style:{width:i.blocks?`${i.staged/i.blocks*100}%`:0}})}),t.error&&(0,X.jsx)(`div`,{className:`shrink-0 bg-destructive/10 px-3 py-1.5 text-xs text-destructive`,children:t.error}),n&&y?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(dt,{view:e,onActions:()=>l(`actions`)}),(0,X.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 flex-col`,children:[(0,X.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto bg-bg pt-2 pb-3 font-mono text-[11px] leading-[1.65] [tab-size:4]`,children:(0,X.jsx)(He,{name:P(b)[1],oldPath:n.review.file?.oldPath,block:y,index:n.index,total:n.review.blocks.length,focused:y.state===`open`,pick:null,compact:!0,lang:ue(b),busy:!!t.busy,actions:f})}),t.toast&&(0,X.jsx)($e,{toast:t.toast,mobile:!0,onClose:t.dismissToast})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-t border-border-soft bg-panel px-2.5 py-2`,children:[(0,X.jsx)(`button`,{type:`button`,className:T($,`border-border bg-panel-2 px-0 text-text`),"aria-label":`Previous block`,onClick:()=>t.step(-1),children:(0,X.jsx)(o,{className:`size-5`})}),y.state===`open`?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`button`,{type:`button`,className:T($,`flex-1 border-border bg-panel-2 text-text`),onClick:()=>t.discard(b,y.key),children:[(0,X.jsx)(s,{className:`size-5`}),`Discard`]}),(0,X.jsxs)(`button`,{type:`button`,className:T($,`flex-1 border-transparent bg-primary text-primary-foreground`),onClick:()=>t.stage(b,y.key),children:[(0,X.jsx)(r,{className:`size-5`}),`Stage`]})]}):y.state===`staged`?(0,X.jsxs)(`button`,{type:`button`,className:T($,`flex-1 border-border bg-panel-2 text-text`),onClick:()=>t.unstage(b,y.key),children:[(0,X.jsx)(p,{className:`size-5`}),`Unstage`]}):(0,X.jsxs)(`button`,{type:`button`,className:T($,`flex-1 border-border bg-panel-2 text-text`),disabled:!y.recordId||!!t.busy,onClick:()=>y.recordId&&t.undoDiscard(y.recordId),children:[(0,X.jsx)(p,{className:`size-5`}),`Undo discard`]}),(0,X.jsx)(`button`,{type:`button`,className:T($,`border-border bg-panel-2 px-0 text-text`),"aria-label":`Next block`,onClick:()=>t.step(1),children:(0,X.jsx)(c,{className:`size-5`})})]})]}):(0,X.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 flex-col`,children:[(0,X.jsx)(et,{conflicts:t.conflicts.length,onGraph:e.openGraph}),t.toast&&(0,X.jsx)($e,{toast:t.toast,mobile:!0,onClose:t.dismissToast})]}),(0,X.jsxs)(j,{open:a===`files`,onClose:m,className:`flex max-h-[85%] flex-col`,children:[(0,X.jsx)(ut,{title:`Changes · ${e.branch??`detached HEAD`}`,sub:i.blocks?`${i.staged} of ${Q(i.blocks,`block`)} staged · ${_?`${_} to decide`:`all decided`}`:void 0,onClose:m}),(0,X.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:(0,X.jsx)(Qe,{reviews:t.reviews,conflicts:t.conflicts,current:n?.review.path??null,mobile:!0,onPick:e=>{t.focusFile(e),m()},onResolve:t=>{m(),e.resolve(t)}})}),t.changes&&i.files>0&&!v&&(0,X.jsx)(B,{projectName:e.projectName,branch:e.branch,totals:t.commitTotals,lastCommit:t.changes.lastCommit,busy:t.busy,onCommit:async(e,n)=>{let r=await t.commit(e,n);return r&&m(),r},onUndoCommit:t.undoCommit,className:`shrink-0 border-t border-border-soft`})]}),n&&(0,X.jsxs)(j,{open:a===`actions`,onClose:m,className:`flex max-h-[85%] flex-col`,children:[(0,X.jsx)(ut,{title:P(b)[1],onClose:m}),(0,X.jsxs)(`div`,{className:`border-t border-border-soft py-1`,children:[n.review.file&&n.review.file.y!==`D`&&(0,X.jsx)(ft,{icon:(0,X.jsx)(g,{className:`size-5`}),label:`Open file`,onClick:()=>{m(),e.openFile(b)}}),n.review.open>0&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ft,{icon:(0,X.jsx)(r,{className:`size-5`}),label:`Stage file`,onClick:()=>{m(),t.stageFile(b)}}),(0,X.jsx)(ft,{icon:(0,X.jsx)(s,{className:`size-5`}),label:`Discard file…`,destructive:!0,onClick:()=>{m(),x()}})]})]})]}),(0,X.jsx)(R,{request:u,onClose:()=>d(null)})]})}function ut({title:e,sub:t,onClose:n}){return(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2.5 pt-0.5 pr-1.5 pb-2 pl-4`,children:[(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`h4`,{className:`m-0 min-w-0 truncate text-[15px] font-semibold`,children:e}),t&&(0,X.jsx)(`p`,{className:`m-0 mt-0.5 text-xs text-text-3`,children:t})]}),(0,X.jsx)(`button`,{type:`button`,className:ct,"aria-label":`Close`,onClick:n,children:(0,X.jsx)(_,{className:`size-5`})})]})}function dt({view:e,onActions:t}){let{review:n,index:r}=e.review.focused,[i,o]=P(n.path),s=n.file?.x===`D`||n.file?.y===`D`;return(0,X.jsxs)(`div`,{className:`flex min-h-[52px] shrink-0 items-center gap-2 border-b border-border-soft bg-panel py-1 pr-1 pl-3.5`,children:[(0,X.jsx)(A,{name:o,className:`size-4`}),(0,X.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,X.jsx)(`b`,{className:T(`truncate text-sm font-semibold`,s&&`text-text-2 line-through`),children:o}),(0,X.jsx)(`small`,{className:`truncate text-[11.5px] text-text-3`,children:[`Block ${r+1} of ${n.blocks.length}`,i].filter(Boolean).join(` · `)})]}),n.file&&(0,X.jsx)(L,{letter:F(n.file)}),(0,X.jsx)(`button`,{type:`button`,className:ct,"aria-label":`File actions`,onClick:t,children:(0,X.jsx)(a,{className:`size-5`})})]})}function ft({icon:e,label:t,destructive:n,onClick:r}){return(0,X.jsxs)(`button`,{type:`button`,onClick:r,className:T(`flex min-h-12 w-full items-center gap-3 px-4 text-left text-sm active:bg-surface-hover`,n?`text-error`:`text-text`),children:[e,t]})}function pt({metadata:e,tabId:t}){let n=e?.projectName,r=e?.select,i=O(),a=se(n),o=Re(n,r?.repo&&r.repo!==a.repo?.path?void 0:r),s=a.choose;(0,W.useEffect)(()=>{if(!r?.repo||!t)return;s(r.repo);let{repo:e,...n}=r;te(t,{select:n})},[r,t,s]);let c=o.changes?.branch.head??null,l=N(e=>e.contributions?.commands?.some(e=>e.command===`git-graph.view`)??!1);(0,W.useEffect)(()=>{if(!t||!o.changes)return;let e=`Changes · ${c??`detached HEAD`}`,n=ee.getState().getPanelForTab(t)?.tabs.find(e=>e.id===t);n&&n.title!==e&&D.getState().updateTab(t,{title:e})},[t,c,o.changes]);let{projectFile:u}=a,d=a.repo?.path,f=(0,W.useCallback)((e,t)=>{n&&D.getState().openTab({type:e,title:e===`editor`?E(t):`Conflict: ${E(t)}`,closable:!0,metadata:{projectName:n,filePath:u(t)},projectId:n})},[n,u]),p=(0,W.useCallback)(()=>{l?window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:`git-graph.view`,args:d?[d]:[]}})):n&&D.getState().openTab({type:`git-log`,title:`Git Log`,projectId:n,closable:!0,metadata:{projectName:n}})},[l,d,n]);if(!n)return(0,X.jsx)(`div`,{className:`flex h-full items-center justify-center text-sm text-text-3`,children:`No project selected.`});if(a.needsPick||a.noRepo)return(0,X.jsx)(`div`,{className:`flex h-full items-center justify-center px-6 text-center text-sm text-text-3`,children:a.noRepo?`This project is not a git repository.`:`Choose a repository in Source Control first.`});if(!o.changes)return o.error?(0,X.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center gap-2 px-4 text-center text-sm text-destructive`,children:(0,X.jsx)(`p`,{children:o.error})}):(0,X.jsxs)(`div`,{className:`flex h-full items-center justify-center gap-2 text-text-3`,children:[(0,X.jsx)(x,{className:`size-5 animate-spin`}),(0,X.jsx)(`span`,{className:`text-sm`,children:`Reading the changes…`})]});let m={review:o,projectName:n,branch:c,openFile:e=>f(`editor`,e),openGraph:p,resolve:e=>f(`conflict-editor`,e.path)};return i?(0,X.jsx)(lt,{view:m}):(0,X.jsx)(rt,{view:m})}export{pt as GitReviewTab};
@@ -1 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{$r as r,E as i,Kr as a,L as o,Mr as s,Sr as c,br as l,or as u,ti as d,tr as f,wr as p,xn as m}from"./icons-C1wDt09O.js";import"./api-client-BnYFnEfK.js";import"./settings-store-CBJCnE5L.js";import{n as h}from"./utils-D3xTlJyU.js";import"./portal-container-context-Gepuvxdg.js";import"./window-store-UcSFgNCI.js";import"./panel-store-Dx2ziBLp.js";import{i as g}from"./project-store-Bs-kiU8m.js";import"./project-framework-store-nuePqBBa.js";import"./session-list-sync-triggers-D9i1FxWd.js";import"./tab-store-B4v2kAEY.js";import"./context-menu-DhKbkI1X.js";import"./file-store-Bn0vbkCx.js";import{n as _}from"./use-is-mobile-CL2I7hLf.js";import"./settings-categories-BY9n3BRr.js";import"./open-settings-BGtoVEAU.js";import"./git-repo-store-CESIqItW.js";import{t as v}from"./button-BHGVTbam.js";import{a as y,n as b,o as x,t as S}from"./dialog-DnE192fh.js";import{t as C}from"./mobile-bottom-sheet-M9pZptfh.js";import"./use-visual-viewport-B_GFo6k2.js";import{n as w,r as T,t as E,u as D}from"./adaptive-context-menu-CxHkI7dL.js";import"./fs-api-BVIVh_De.js";import"./ws-auth-k7DWnL9T.js";import{Cn as O,En as k,Sn as A,Tn as ee,_n as te,bn as j,di as ne,gn as M,vn as N,wn as P,xn as re,yn as ie}from"./index-Cx9ZRibz.js";import"./agent-session-sheet-store-BFUVxjab.js";import"./libesm-C9iw2_pm.js";import{n as F}from"./tool-cards-C2YGSKRm.js";import"./use-blob-url-CIHAdKoN.js";import"./design-canvas-check-DQB9dn_O.js";import"./db-ai-tools-BhRcsCRL.js";import{t as I}from"./use-websocket-DqomrzN8.js";import"./lib-DULxhi7W.js";import{t as L}from"./markdown-renderer-BfZiHaNy.js";import"./run-in-terminal-EVMb5TjW.js";var R=e(t(),1),z=8e3;function ae(e,t){let[n,r]=(0,R.useState)([]),[i,a]=(0,R.useState)([]),[o,s]=(0,R.useState)(`idle`),[c,l]=(0,R.useState)({}),[u,d]=(0,R.useState)(!1),[f,p]=(0,R.useState)(!1),[m,h]=(0,R.useState)(!1),[g,_]=(0,R.useState)(null),v=(0,R.useRef)(new Map),y=(0,R.useCallback)(e=>{l(t=>{if(!t[e])return t;let n={...t};return delete n[e],n})},[]),b=(0,R.useCallback)(e=>{let t;try{t=JSON.parse(e.data)}catch{return}switch(t.type){case`ping`:return;case`group_state`:p(!0),s(t.status),a(t.members),h(t.status===`active`);return;case`group_message`:y(t.message.fromMember),r(e=>e.some(e=>e.id===t.message.id)?e:[...e,t.message]);return;case`member_status`:a(e=>e.map(e=>e.id===t.memberId?{...e,status:t.status}:e));return;case`typing`:{l(e=>({...e,[t.member]:!0}));let e=v.current,n=e.get(t.member);n&&clearTimeout(n),e.set(t.member,setTimeout(()=>y(t.member),z));return}case`turn_done`:return;case`group_done`:h(!1),s(`idle`),l({});return;case`error`:_(t.message),h(!1);return}},[y]),{send:x}=I({url:e&&t?`/ws/project/${encodeURIComponent(t)}/group/${encodeURIComponent(e)}`:``,onMessage:b,autoConnect:!!e&&!!t});return(0,R.useEffect)(()=>{let t=!1;r([]),a([]),l({}),s(`idle`),h(!1),_(null),p(!1);for(let e of v.current.values())clearTimeout(e);if(v.current.clear(),e)return d(!0),N(e,{limit:200}).then(e=>{t||r(t=>{let n=new Set(e.messages.map(e=>e.id)),r=t.filter(e=>!n.has(e.id));return[...e.messages,...r]})}).catch(e=>{t||_(e instanceof Error?e.message:`Failed to load feed`)}).finally(()=>{t||d(!1)}),()=>{t=!0}},[e]),{messages:n,members:i,status:o,typing:c,loading:u,isConnected:f,isRunning:m,error:g,sendMessage:(0,R.useCallback)(t=>{let n=t.trim();!n||!e||(_(null),h(!0),f?x(JSON.stringify({type:`message`,content:n})):O(e,n).catch(e=>{_(e instanceof Error?e.message:`Failed to send message`),h(!1)}))},[e,f,x]),stop:(0,R.useCallback)(()=>{e&&(f?x(JSON.stringify({type:`stop`})):P(e).catch(()=>{}),s(`paused`),h(!1))},[e,f,x]),resume:(0,R.useCallback)(()=>{e&&A(e).then(()=>{s(`active`),h(!0)}).catch(e=>_(e instanceof Error?e.message:`Failed to resume`))},[e])}}var B=n();function V(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function H(e){try{let t=e<0xe8d4a51000?e*1e3:e;return new Date(t).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}catch{return``}}function U(e,t){return e.split(/(@[\p{L}\p{N}_]+)/gu).map((e,n)=>{if(e.startsWith(`@`)&&e.length>1){let r=t(e.slice(1));return(0,B.jsx)(`span`,{className:h(`font-semibold`,!r&&`text-primary`),style:r?{color:r}:void 0,children:e},n)}return e})}var oe=(0,R.memo)(function({message:e,colorFor:t,isLeader:n,onViewFull:r}){let i=e.fromMember===`user`,a=i?`You`:e.fromMember,o=i?`var(--color-primary)`:t(e.fromMember)??`var(--accent)`,s=!i&&n(e.fromMember),c=e.summary??``,u=e.toMember&&e.toMember!==`all`?e.toMember:null,d=(0,B.jsxs)(`div`,{className:h(`group relative flex gap-2.5 px-3 py-2 transition-colors hover:bg-surface-elevated/50`,i&&`bg-primary/5`),style:{boxShadow:`inset 3px 0 0 0 ${o}`},children:[e.fullSessionRef&&(0,B.jsx)(`button`,{type:`button`,onClick:()=>r(e),title:`View full transcript (AI's raw thinking / debug)`,"aria-label":`View full transcript`,className:`absolute right-1.5 top-1.5 hidden items-center rounded p-1 text-text-subtle/60 hover:bg-surface-elevated hover:text-text-secondary can-hover:group-hover:inline-flex`,children:(0,B.jsx)(l,{className:`size-3.5`})}),(0,B.jsx)(`div`,{className:`mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-full text-[11px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:o},"aria-hidden":!0,children:V(a)}),(0,B.jsxs)(`div`,{className:`min-w-0 flex-1 can-hover:pr-6`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5`,children:[(0,B.jsx)(`span`,{className:`text-sm font-semibold`,style:{color:i?`var(--color-foreground)`:o},children:a}),s&&(0,B.jsx)(`span`,{className:`rounded bg-surface-elevated px-1.5 py-px text-[10px] font-medium text-text-secondary`,children:`leader`}),u&&(0,B.jsxs)(`span`,{className:`text-[11px] text-text-subtle`,children:[`→ `,u]}),(0,B.jsx)(`span`,{className:`text-[11px] text-text-subtle`,children:H(e.createdAt)})]}),(0,B.jsx)(`div`,{className:`mt-0.5 whitespace-pre-wrap break-words text-sm leading-relaxed text-text-secondary`,children:U(c,t)})]})]});return e.fullSessionRef?(0,B.jsxs)(E,{children:[(0,B.jsx)(D,{asChild:!0,children:d}),(0,B.jsx)(w,{children:(0,B.jsxs)(T,{onClick:()=>r(e),children:[(0,B.jsx)(l,{className:`size-4`}),` View full transcript`]})})]}):d}),W={idle:`bg-text-subtle`,working:`bg-primary animate-pulse`,done:`bg-emerald-500`,error:`bg-destructive`},G={idle:`Idle`,working:`Working`,done:`Done`,error:`Error`},K=(0,R.memo)(function({members:e,liveStatus:t,typing:n,busy:i,onAdd:o,onEdit:s,onRemove:c}){return(0,B.jsxs)(`div`,{className:`flex flex-col gap-0.5 p-2`,children:[e.map(e=>{let r=n[e.name],o=t.get(e.id)??e.status;return(0,B.jsxs)(`div`,{className:`group flex items-center gap-2 rounded-md px-2 py-1.5`,children:[(0,B.jsx)(`span`,{className:`flex size-6 shrink-0 items-center justify-center rounded-full text-[10px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:e.color??`var(--accent)`},"aria-hidden":!0,children:e.name.slice(0,1).toUpperCase()}),(0,B.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,B.jsx)(`span`,{className:`truncate text-xs font-medium`,style:{color:e.color??`var(--color-foreground)`},children:e.name}),e.role===`leader`&&(0,B.jsx)(`span`,{className:`rounded-sm bg-accent-wash px-1 text-[9px] font-semibold uppercase text-primary`,children:`lead`})]}),(0,B.jsx)(`span`,{className:`block truncate text-[10px] text-text-subtle`,children:r?`typing…`:e.persona||G[o]})]}),(0,B.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 can-hover:opacity-0 can-hover:group-hover:opacity-100`,children:[(0,B.jsx)(`button`,{type:`button`,onClick:()=>s(e),disabled:i,"aria-label":`Edit ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground active:bg-surface-elevated disabled:opacity-40`,children:(0,B.jsx)(f,{className:`size-3.5`})}),(0,B.jsx)(`button`,{type:`button`,onClick:()=>c(e),disabled:i,"aria-label":`Remove ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-destructive active:bg-surface-elevated disabled:opacity-40`,children:(0,B.jsx)(a,{className:`size-3.5`})})]}),(0,B.jsx)(`span`,{className:h(`size-2 shrink-0 rounded-full`,W[o]),title:G[o],"aria-hidden":!0})]},e.id)}),(0,B.jsxs)(`button`,{type:`button`,onClick:o,disabled:i,className:`mt-1 flex items-center gap-2 rounded-md px-2 py-2 text-xs font-medium text-primary hover:bg-surface-elevated active:bg-surface-elevated disabled:opacity-40`,children:[(0,B.jsx)(r,{className:`size-4`}),` Add member`]})]})}),q=`w-full min-h-[40px] rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`;function se({open:e,member:t,projectName:n,providerId:r=`claude`,onSubmit:i,onClose:a}){let o=_(),[s,c]=(0,R.useState)(t?.name??``),[l,u]=(0,R.useState)(t?.persona??``),[d,f]=(0,R.useState)(t?.model??null),[p,h]=(0,R.useState)(t?.role===`leader`),[g,w]=(0,R.useState)(!1),[T,E]=(0,R.useState)(null),D=(0,R.useCallback)(async()=>{let e=s.trim();if(!e){E(`Name is required`);return}w(!0),E(null);try{await i({name:e,persona:l.trim()||null,model:d,role:p?`leader`:`member`}),a()}catch(e){E(e instanceof Error?e.message:`Failed to save member`),w(!1)}},[s,l,d,p,i,a]),O=t?.role===`leader`,k=(0,B.jsxs)(`div`,{className:`flex flex-col gap-3 px-1 py-1`,children:[(0,B.jsx)(`input`,{className:q,value:s,onChange:e=>c(e.target.value),placeholder:`Member name`,autoFocus:!0}),(0,B.jsx)(`input`,{className:q,value:l,onChange:e=>u(e.target.value),placeholder:`Persona (optional)`}),(0,B.jsx)(M,{value:d,onChange:f,projectName:n,providerId:r}),(0,B.jsxs)(`label`,{className:J(O),children:[(0,B.jsx)(`input`,{type:`checkbox`,className:`size-4 accent-[var(--color-primary)]`,checked:p,disabled:O,onChange:e=>h(e.target.checked)}),(0,B.jsx)(`span`,{children:O?`Leader (reassign from another member)`:`Set as leader`})]}),T&&(0,B.jsx)(`p`,{className:`text-xs text-destructive`,children:T}),(0,B.jsxs)(`div`,{className:`flex justify-end gap-2 pt-1`,children:[(0,B.jsx)(v,{variant:`outline`,onClick:a,disabled:g,children:`Cancel`}),(0,B.jsxs)(v,{onClick:D,disabled:g,children:[g&&(0,B.jsx)(m,{className:`mr-1.5 size-4 animate-spin`}),t?`Save`:`Add member`]})]})]});if(!e)return null;let A=t?`Edit member`:`Add member`;return o?(0,B.jsx)(C,{open:!0,onClose:a,className:`flex max-h-[90vh] flex-col`,children:(0,B.jsxs)(`div`,{className:`flex min-h-0 flex-col px-4 pb-2`,children:[(0,B.jsx)(`h2`,{className:`mb-2 text-base font-semibold text-foreground`,children:A}),k]})}):(0,B.jsx)(S,{open:!0,onOpenChange:e=>{e||a()},children:(0,B.jsxs)(b,{className:`flex flex-col sm:max-w-md`,children:[(0,B.jsx)(y,{children:(0,B.jsx)(x,{children:A})}),k]})})}function J(e){return`flex items-center gap-2 text-sm text-text-secondary ${e?`opacity-60`:``}`}function Y({messages:e,config:t,projectName:n}){return(0,B.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[t&&(0,B.jsx)(le,{config:t}),e.map(e=>(0,B.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,B.jsx)(`span`,{className:`text-[10px] font-semibold uppercase tracking-wide text-text-subtle`,children:e.role===`user`?`User`:e.role===`assistant`?`Assistant`:e.role}),(0,B.jsx)(X,{message:e,projectName:n})]},e.id)),e.length===0&&(0,B.jsx)(`p`,{className:`py-6 text-center text-sm text-text-subtle`,children:`Transcript is empty.`})]})}function X({message:e,projectName:t}){let n=e.events??[];if(n.length===0)return e.content.trim()?(0,B.jsx)(L,{content:e.content}):null;let r=new Map;for(let e of n)e.type===`tool_result`&&e.toolUseId&&r.set(e.toolUseId,e);return(0,B.jsx)(`div`,{className:`flex flex-col gap-2`,children:n.map((e,n)=>{if(e.type===`text`)return e.content.trim()?(0,B.jsx)(L,{content:e.content},n):null;if(e.type===`thinking`)return(0,B.jsx)(ce,{content:e.content},n);if(e.type===`tool_use`){let i=e.toolUseId?r.get(e.toolUseId):void 0;return(0,B.jsx)(F,{tool:e,result:i,completed:!!i,projectName:t},n)}return null})})}function ce({content:e}){let[t,n]=(0,R.useState)(!1);return(0,B.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,B.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs text-text-subtle hover:text-text-secondary`,children:[(0,B.jsx)(o,{className:h(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,B.jsx)(i,{className:`size-3.5`}),(0,B.jsx)(`span`,{children:`Thinking`})]}),t&&(0,B.jsx)(`div`,{className:`border-t border-border px-3 py-2 text-xs leading-relaxed text-text-secondary`,children:(0,B.jsx)(L,{content:e})})]})}function le({config:e}){let[t,n]=(0,R.useState)(!1),r=[[`Model`,e.model],[`Permission`,e.permissionMode],[`CWD`,e.cwd],[`Git branch`,e.gitBranch],[`CLI version`,e.version]].filter(([,e])=>e);return r.length===0?null:(0,B.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,B.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-text-secondary hover:text-foreground`,children:[(0,B.jsx)(o,{className:h(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,B.jsx)(p,{className:`size-3.5`}),(0,B.jsx)(`span`,{children:`Input config`})]}),t&&(0,B.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 border-t border-border px-3 py-2 text-xs`,children:r.map(([e,t])=>(0,B.jsxs)(`div`,{className:`contents`,children:[(0,B.jsx)(`dt`,{className:`text-text-subtle`,children:e}),(0,B.jsx)(`dd`,{className:`break-all font-mono text-text-secondary`,children:t})]},e))})]})}function ue({groupId:e,message:t,onClose:n}){let r=_(),[i,a]=(0,R.useState)(null),[o,s]=(0,R.useState)(!1),[c,l]=(0,R.useState)(null),u=t?.fullSessionRef??null;if((0,R.useEffect)(()=>{if(!t||!u)return;let n=!1;return a(null),l(null),s(!0),j(e,u).then(e=>{n||a(e)}).catch(e=>{n||l(e instanceof Error?e.message:`Failed to load transcript`)}).finally(()=>{n||s(!1)}),()=>{n=!0}},[e,u,t]),!t)return null;let d=(0,B.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[o&&(0,B.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,B.jsx)(m,{className:`size-5 animate-spin text-primary`})}),c&&(0,B.jsxs)(`div`,{className:`px-1 py-4 text-sm text-text-secondary`,children:[(0,B.jsx)(`p`,{className:`mb-2 font-medium text-foreground`,children:`Full transcript unavailable`}),(0,B.jsx)(`p`,{className:`text-xs text-text-subtle`,children:c}),t.summary&&(0,B.jsx)(`pre`,{className:`mt-4 whitespace-pre-wrap break-words rounded-md bg-surface-elevated p-3 text-xs leading-relaxed text-text-secondary`,children:t.summary})]}),!o&&!c&&i!=null&&(0,B.jsx)(`div`,{className:`px-1 py-1`,children:(0,B.jsx)(Y,{messages:i.messages,config:i.config})})]}),f=`${t.fromMember} — full transcript`;return r?(0,B.jsx)(C,{open:!0,onClose:n,className:`max-h-[85vh] flex flex-col`,children:(0,B.jsxs)(`div`,{className:`flex flex-col min-h-0 px-4 pb-2`,children:[(0,B.jsx)(`h2`,{className:`mb-2 text-sm font-semibold text-foreground`,children:f}),d]})}):(0,B.jsx)(S,{open:!0,onOpenChange:e=>{e||n()},children:(0,B.jsxs)(b,{className:`flex max-h-[80vh] flex-col sm:max-w-2xl`,children:[(0,B.jsx)(y,{children:(0,B.jsx)(x,{className:`text-sm`,children:f})}),d]})})}function Z({metadata:e}){let t=e?.groupId??null,{activeProject:n}=g(ne(e=>({activeProject:e.activeProject}))),r=e?.projectName??n?.name??``,i=_(),{messages:a,members:o,status:l,typing:f,loading:p,isRunning:y,error:b,sendMessage:x,stop:S,resume:w}=ae(t,r),[T,E]=(0,R.useState)(``),[D,O]=(0,R.useState)(null),[A,j]=(0,R.useState)(!1),M=(0,R.useRef)(null),[N,P]=(0,R.useState)([]),[F,I]=(0,R.useState)(null),[L,z]=(0,R.useState)(!1),[V,H]=(0,R.useState)(null),[U,W]=(0,R.useState)(null),G=(0,R.useCallback)(async()=>{if(t)try{let e=await ie(t);P(e.members),I(e.maxTurns)}catch{}},[t]),q=(0,R.useCallback)(async e=>{if(!t)return;let n=Math.max(1,Math.min(50,Math.floor(e)||1));I(n);try{await k(t,{maxTurns:n})}catch{G()}},[t,G]);(0,R.useEffect)(()=>{P([]),G()},[t,G]),(0,R.useEffect)(()=>{M.current?.scrollIntoView({block:`end`})},[a.length,f]);let J=(0,R.useMemo)(()=>new Map(o.map(e=>[e.id,e.status])),[o]),Y=N.length?N:o,X=(0,R.useMemo)(()=>{let e=new Map(Y.map(e=>[e.name,e.color]));return t=>e.get(t)??null},[Y]),ce=(0,R.useMemo)(()=>{let e=new Set(Y.filter(e=>e.role===`leader`).map(e=>e.name));return t=>e.has(t)},[Y]),le=(0,R.useCallback)(async e=>{t&&(U?.member?await ee(t,U.member.id,e):await te(t,e),await G())},[t,U,G]),Z=(0,R.useCallback)(async e=>{if(t){z(!0),H(null);try{await re(t,e.id),await G()}catch(e){H(e instanceof Error?e.message:`Failed to remove member`)}finally{z(!1)}}},[t,G]),Q=(0,R.useCallback)(()=>{let e=T.trim();e&&(x(e),E(``))},[T,x]),$=Object.keys(f).filter(e=>f[e]);return t?(0,B.jsxs)(`div`,{className:`flex h-full min-h-0`,children:[(0,B.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,B.jsxs)(`div`,{className:`flex h-11 shrink-0 items-center justify-between border-b border-border px-3`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-foreground`,children:[(0,B.jsx)(`span`,{className:h(`size-2 rounded-full`,l===`active`?`bg-primary animate-pulse`:l===`paused`?`bg-amber-500`:`bg-text-subtle`)}),(0,B.jsx)(`span`,{className:`capitalize`,children:l})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[y?(0,B.jsxs)(v,{size:`sm`,variant:`outline`,onClick:S,className:`h-8`,children:[(0,B.jsx)(s,{className:`mr-1 size-3.5`}),` Stop`]}):l===`paused`?(0,B.jsxs)(v,{size:`sm`,variant:`outline`,onClick:w,className:`h-8`,children:[(0,B.jsx)(u,{className:`mr-1 size-3.5`}),` Resume`]}):null,(0,B.jsx)(`button`,{type:`button`,onClick:()=>j(e=>!e),className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground`,"aria-label":`Toggle roster`,children:(0,B.jsx)(d,{className:`size-4`})})]})]}),(0,B.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:p?(0,B.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,B.jsx)(m,{className:`size-5 animate-spin text-primary`})}):a.length===0?(0,B.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-center text-sm text-text-subtle`,children:`Send a message to start the group.`}):(0,B.jsxs)(`div`,{className:`flex flex-col py-2`,children:[a.map(e=>(0,B.jsx)(oe,{message:e,colorFor:X,isLeader:ce,onViewFull:O},e.id)),$.length>0&&(0,B.jsxs)(`div`,{className:`px-3 py-1.5 text-xs italic text-text-subtle`,children:[$.join(`, `),` `,$.length===1?`is`:`are`,` typing…`]}),(0,B.jsx)(`div`,{ref:M})]})}),b&&(0,B.jsx)(`div`,{className:`shrink-0 border-t border-border bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:b}),(0,B.jsx)(`div`,{className:`shrink-0 border-t border-border p-2`,children:(0,B.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,B.jsx)(`textarea`,{value:T,onChange:e=>E(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!i&&(e.preventDefault(),Q())},rows:1,placeholder:`Message the group…`,className:`max-h-32 min-h-[44px] flex-1 resize-none rounded-md border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`}),(0,B.jsx)(v,{onClick:Q,disabled:!T.trim(),className:`size-11 shrink-0 p-0`,"aria-label":`Send`,children:(0,B.jsx)(c,{className:`size-4`})})]})})]}),i?(0,B.jsxs)(C,{open:A,onClose:()=>j(!1),className:`flex max-h-[72vh] flex-col`,children:[(0,B.jsx)(`div`,{className:`flex h-11 shrink-0 items-center px-4 text-sm font-medium text-foreground`,children:`Members`}),(0,B.jsxs)(`div`,{className:`min-h-0 overflow-y-auto`,children:[F!==null&&(0,B.jsxs)(`label`,{className:`flex items-center gap-2 px-4 py-2 text-xs text-text-secondary`,children:[(0,B.jsx)(`span`,{children:`Reply cap`}),(0,B.jsx)(`input`,{type:`number`,min:1,max:50,value:F,onChange:e=>q(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,B.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),V&&(0,B.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:V}),(0,B.jsx)(K,{members:N,liveStatus:J,typing:f,busy:L,onAdd:()=>W({member:null}),onEdit:e=>W({member:e}),onRemove:Z})]})]}):A&&(0,B.jsxs)(`div`,{className:`flex w-60 shrink-0 flex-col border-l border-border bg-panel`,children:[(0,B.jsx)(`div`,{className:`flex h-11 shrink-0 items-center border-b border-border px-3 text-sm font-medium text-foreground`,children:`Members`}),(0,B.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[F!==null&&(0,B.jsxs)(`label`,{className:`flex items-center gap-2 px-3 py-2 text-xs text-text-secondary`,children:[(0,B.jsx)(`span`,{children:`Reply cap`}),(0,B.jsx)(`input`,{type:`number`,min:1,max:50,value:F,onChange:e=>q(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,B.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),V&&(0,B.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:V}),(0,B.jsx)(K,{members:N,liveStatus:J,typing:f,busy:L,onAdd:()=>W({member:null}),onEdit:e=>W({member:e}),onRemove:Z})]})]}),U&&(0,B.jsx)(se,{open:!0,member:U.member,projectName:r,onSubmit:le,onClose:()=>W(null)},U.member?.id??`add`),(0,B.jsx)(ue,{groupId:t,message:D,onClose:()=>O(null)})]}):(0,B.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-sm text-text-subtle`,children:`No group selected.`})}export{Z as GroupChatTab};