@bendyline/docblocks-react 1.1.2 → 2.0.0

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 (335) hide show
  1. package/README.md +31 -5
  2. package/dist/AppMenu/AppMenu.d.ts +29 -2
  3. package/dist/AppMenu/AppMenu.d.ts.map +1 -1
  4. package/dist/AppMenu/AppMenu.js +41 -2
  5. package/dist/AppMenu/AppMenu.js.map +1 -1
  6. package/dist/AppMenu/index.d.ts +1 -1
  7. package/dist/AppMenu/index.d.ts.map +1 -1
  8. package/dist/DocBlocksShell/DocBlocksShell.d.ts +15 -2
  9. package/dist/DocBlocksShell/DocBlocksShell.d.ts.map +1 -1
  10. package/dist/DocBlocksShell/DocBlocksShell.js +1677 -298
  11. package/dist/DocBlocksShell/DocBlocksShell.js.map +1 -1
  12. package/dist/DocBlocksShell/LazyEditorShell.d.ts +3 -0
  13. package/dist/DocBlocksShell/LazyEditorShell.d.ts.map +1 -0
  14. package/dist/DocBlocksShell/LazyEditorShell.js +3 -0
  15. package/dist/DocBlocksShell/LazyEditorShell.js.map +1 -0
  16. package/dist/DocBlocksShell/UpdateAvailableNotice.d.ts +13 -0
  17. package/dist/DocBlocksShell/UpdateAvailableNotice.d.ts.map +1 -0
  18. package/dist/DocBlocksShell/UpdateAvailableNotice.js +16 -0
  19. package/dist/DocBlocksShell/UpdateAvailableNotice.js.map +1 -0
  20. package/dist/DocBlocksShell/document-title.d.ts +3 -0
  21. package/dist/DocBlocksShell/document-title.d.ts.map +1 -0
  22. package/dist/DocBlocksShell/document-title.js +17 -0
  23. package/dist/DocBlocksShell/document-title.js.map +1 -0
  24. package/dist/DocBlocksShell/workspace-authority-barrier.d.ts +14 -0
  25. package/dist/DocBlocksShell/workspace-authority-barrier.d.ts.map +1 -0
  26. package/dist/DocBlocksShell/workspace-authority-barrier.js +23 -0
  27. package/dist/DocBlocksShell/workspace-authority-barrier.js.map +1 -0
  28. package/dist/Export/DeferredExportToolbarControls.d.ts +5 -0
  29. package/dist/Export/DeferredExportToolbarControls.d.ts.map +1 -0
  30. package/dist/Export/DeferredExportToolbarControls.js +10 -0
  31. package/dist/Export/DeferredExportToolbarControls.js.map +1 -0
  32. package/dist/Export/ExportDialog.d.ts +10 -1
  33. package/dist/Export/ExportDialog.d.ts.map +1 -1
  34. package/dist/Export/ExportDialog.js +20 -18
  35. package/dist/Export/ExportDialog.js.map +1 -1
  36. package/dist/Export/ExportToolbarControls.d.ts +21 -1
  37. package/dist/Export/ExportToolbarControls.d.ts.map +1 -1
  38. package/dist/Export/ExportToolbarControls.js +96 -11
  39. package/dist/Export/ExportToolbarControls.js.map +1 -1
  40. package/dist/Export/export-destination.d.ts +3 -0
  41. package/dist/Export/export-destination.d.ts.map +1 -0
  42. package/dist/Export/export-destination.js +32 -0
  43. package/dist/Export/export-destination.js.map +1 -0
  44. package/dist/Export/index.d.ts +8 -4
  45. package/dist/Export/index.d.ts.map +1 -1
  46. package/dist/Export/index.js +4 -1
  47. package/dist/Export/index.js.map +1 -1
  48. package/dist/Export/public-api.d.ts +12 -0
  49. package/dist/Export/public-api.d.ts.map +1 -0
  50. package/dist/Export/public-api.js +9 -0
  51. package/dist/Export/public-api.js.map +1 -0
  52. package/dist/Export/run-export.d.ts +3 -1
  53. package/dist/Export/run-export.d.ts.map +1 -1
  54. package/dist/Export/run-export.js +30 -13
  55. package/dist/Export/run-export.js.map +1 -1
  56. package/dist/ExportDialog-MEUISWZX.js +9 -0
  57. package/dist/ExportDialog-MEUISWZX.js.map +1 -0
  58. package/dist/ExportToolbarControls-D2YDWOXW.js +373 -0
  59. package/dist/ExportToolbarControls-D2YDWOXW.js.map +1 -0
  60. package/dist/FileExplorer/FileExplorer.d.ts +26 -4
  61. package/dist/FileExplorer/FileExplorer.d.ts.map +1 -1
  62. package/dist/FileExplorer/FileExplorer.js +204 -29
  63. package/dist/FileExplorer/FileExplorer.js.map +1 -1
  64. package/dist/FileExplorer/FileTreeNode.d.ts +24 -3
  65. package/dist/FileExplorer/FileTreeNode.d.ts.map +1 -1
  66. package/dist/FileExplorer/FileTreeNode.js +27 -8
  67. package/dist/FileExplorer/FileTreeNode.js.map +1 -1
  68. package/dist/FileExplorer/index.d.ts +1 -1
  69. package/dist/FileExplorer/index.d.ts.map +1 -1
  70. package/dist/FileExplorer/useFileTree.d.ts +5 -3
  71. package/dist/FileExplorer/useFileTree.d.ts.map +1 -1
  72. package/dist/FileExplorer/useFileTree.js +173 -13
  73. package/dist/FileExplorer/useFileTree.js.map +1 -1
  74. package/dist/Git/GitAuthGuidanceDialog.d.ts +18 -0
  75. package/dist/Git/GitAuthGuidanceDialog.d.ts.map +1 -0
  76. package/dist/Git/GitAuthGuidanceDialog.js +27 -0
  77. package/dist/Git/GitAuthGuidanceDialog.js.map +1 -0
  78. package/dist/Git/GitBranchesDialog.d.ts +13 -0
  79. package/dist/Git/GitBranchesDialog.d.ts.map +1 -0
  80. package/dist/Git/GitBranchesDialog.js +59 -0
  81. package/dist/Git/GitBranchesDialog.js.map +1 -0
  82. package/dist/Git/GitCloneDialog.d.ts +14 -0
  83. package/dist/Git/GitCloneDialog.d.ts.map +1 -0
  84. package/dist/Git/GitCloneDialog.js +79 -0
  85. package/dist/Git/GitCloneDialog.js.map +1 -0
  86. package/dist/Git/GitCommitDialog.d.ts +12 -0
  87. package/dist/Git/GitCommitDialog.d.ts.map +1 -0
  88. package/dist/Git/GitCommitDialog.js +38 -0
  89. package/dist/Git/GitCommitDialog.js.map +1 -0
  90. package/dist/Git/GitConflictsDialog.d.ts +12 -0
  91. package/dist/Git/GitConflictsDialog.d.ts.map +1 -0
  92. package/dist/Git/GitConflictsDialog.js +17 -0
  93. package/dist/Git/GitConflictsDialog.js.map +1 -0
  94. package/dist/Git/GitContext.d.ts +89 -0
  95. package/dist/Git/GitContext.d.ts.map +1 -0
  96. package/dist/Git/GitContext.js +15 -0
  97. package/dist/Git/GitContext.js.map +1 -0
  98. package/dist/Git/GitDiffDialog.d.ts +20 -0
  99. package/dist/Git/GitDiffDialog.d.ts.map +1 -0
  100. package/dist/Git/GitDiffDialog.js +100 -0
  101. package/dist/Git/GitDiffDialog.js.map +1 -0
  102. package/dist/Git/GitDiffView.d.ts +23 -0
  103. package/dist/Git/GitDiffView.d.ts.map +1 -0
  104. package/dist/Git/GitDiffView.js +77 -0
  105. package/dist/Git/GitDiffView.js.map +1 -0
  106. package/dist/Git/GitHistoryDialog.d.ts +15 -0
  107. package/dist/Git/GitHistoryDialog.d.ts.map +1 -0
  108. package/dist/Git/GitHistoryDialog.js +107 -0
  109. package/dist/Git/GitHistoryDialog.js.map +1 -0
  110. package/dist/Git/GitStatusBar.d.ts +8 -0
  111. package/dist/Git/GitStatusBar.d.ts.map +1 -0
  112. package/dist/Git/GitStatusBar.js +49 -0
  113. package/dist/Git/GitStatusBar.js.map +1 -0
  114. package/dist/Git/GitToolbarControl.d.ts +15 -0
  115. package/dist/Git/GitToolbarControl.d.ts.map +1 -0
  116. package/dist/Git/GitToolbarControl.js +51 -0
  117. package/dist/Git/GitToolbarControl.js.map +1 -0
  118. package/dist/Git/GitUI.d.ts +14 -0
  119. package/dist/Git/GitUI.d.ts.map +1 -0
  120. package/dist/Git/GitUI.js +21 -0
  121. package/dist/Git/GitUI.js.map +1 -0
  122. package/dist/Git/commit-selection.d.ts +22 -0
  123. package/dist/Git/commit-selection.d.ts.map +1 -0
  124. package/dist/Git/commit-selection.js +47 -0
  125. package/dist/Git/commit-selection.js.map +1 -0
  126. package/dist/Git/git-clone-utils.d.ts +8 -0
  127. package/dist/Git/git-clone-utils.d.ts.map +1 -0
  128. package/dist/Git/git-clone-utils.js +26 -0
  129. package/dist/Git/git-clone-utils.js.map +1 -0
  130. package/dist/Git/git-status.d.ts +24 -0
  131. package/dist/Git/git-status.d.ts.map +1 -0
  132. package/dist/Git/git-status.js +105 -0
  133. package/dist/Git/git-status.js.map +1 -0
  134. package/dist/Git/useGit.d.ts +15 -0
  135. package/dist/Git/useGit.d.ts.map +1 -0
  136. package/dist/Git/useGit.js +206 -0
  137. package/dist/Git/useGit.js.map +1 -0
  138. package/dist/Git/useGitStatus.d.ts +17 -0
  139. package/dist/Git/useGitStatus.d.ts.map +1 -0
  140. package/dist/Git/useGitStatus.js +63 -0
  141. package/dist/Git/useGitStatus.js.map +1 -0
  142. package/dist/GitToolbarControl-LMIR4R7I.js +117 -0
  143. package/dist/GitToolbarControl-LMIR4R7I.js.map +1 -0
  144. package/dist/GitUI-KGF5MSNV.js +1048 -0
  145. package/dist/GitUI-KGF5MSNV.js.map +1 -0
  146. package/dist/LazyEditorShell-EF2BWRXU.js +6 -0
  147. package/dist/LazyEditorShell-EF2BWRXU.js.map +1 -0
  148. package/dist/Settings/Settings.d.ts +23 -0
  149. package/dist/Settings/Settings.d.ts.map +1 -0
  150. package/dist/Settings/Settings.js +22 -0
  151. package/dist/Settings/Settings.js.map +1 -0
  152. package/dist/Settings/public-api.d.ts +3 -0
  153. package/dist/Settings/public-api.d.ts.map +1 -0
  154. package/dist/Settings/public-api.js +2 -0
  155. package/dist/Settings/public-api.js.map +1 -0
  156. package/dist/WorkspacePicker/WorkspacePicker.d.ts +6 -1
  157. package/dist/WorkspacePicker/WorkspacePicker.d.ts.map +1 -1
  158. package/dist/WorkspacePicker/WorkspacePicker.js +16 -5
  159. package/dist/WorkspacePicker/WorkspacePicker.js.map +1 -1
  160. package/dist/chunk-3SAXDU2U.js +157 -0
  161. package/dist/chunk-3SAXDU2U.js.map +1 -0
  162. package/dist/chunk-4XXSWN3T.js +13 -0
  163. package/dist/chunk-4XXSWN3T.js.map +1 -0
  164. package/dist/chunk-5A4KEWKT.js +97 -0
  165. package/dist/chunk-5A4KEWKT.js.map +1 -0
  166. package/dist/chunk-AOVTHZU7.js +321 -0
  167. package/dist/chunk-AOVTHZU7.js.map +1 -0
  168. package/dist/chunk-DD4VFJQI.js +51 -0
  169. package/dist/chunk-DD4VFJQI.js.map +1 -0
  170. package/dist/chunk-GSNZSCIK.js +55 -0
  171. package/dist/chunk-GSNZSCIK.js.map +1 -0
  172. package/dist/chunk-VHDP4IPL.js +70 -0
  173. package/dist/chunk-VHDP4IPL.js.map +1 -0
  174. package/dist/chunk-ZI56BNB7.js +270 -0
  175. package/dist/chunk-ZI56BNB7.js.map +1 -0
  176. package/dist/components/Dialog.d.ts +22 -0
  177. package/dist/components/Dialog.d.ts.map +1 -0
  178. package/dist/components/Dialog.js +33 -0
  179. package/dist/components/Dialog.js.map +1 -0
  180. package/dist/editor.d.ts +10 -0
  181. package/dist/editor.d.ts.map +1 -0
  182. package/dist/editor.js +70 -0
  183. package/dist/editor.js.map +1 -0
  184. package/dist/export/index.d.ts +87 -0
  185. package/dist/export/index.js +26 -0
  186. package/dist/export/index.js.map +1 -0
  187. package/dist/hooks/index.d.ts +2 -1
  188. package/dist/hooks/index.d.ts.map +1 -1
  189. package/dist/hooks/index.js +1 -1
  190. package/dist/hooks/index.js.map +1 -1
  191. package/dist/hooks/useDocumentSession.d.ts +16 -0
  192. package/dist/hooks/useDocumentSession.d.ts.map +1 -0
  193. package/dist/hooks/useDocumentSession.js +18 -0
  194. package/dist/hooks/useDocumentSession.js.map +1 -0
  195. package/dist/icons.d.ts +11 -6
  196. package/dist/icons.d.ts.map +1 -1
  197. package/dist/icons.js +21 -20
  198. package/dist/icons.js.map +1 -1
  199. package/dist/index.d.ts +8 -5
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +4 -2
  202. package/dist/index.js.map +1 -1
  203. package/dist/preferences/theme.d.ts +18 -0
  204. package/dist/preferences/theme.d.ts.map +1 -0
  205. package/dist/preferences/theme.js +63 -0
  206. package/dist/preferences/theme.js.map +1 -0
  207. package/dist/provider-lease.d.ts +10 -0
  208. package/dist/provider-lease.d.ts.map +1 -0
  209. package/dist/provider-lease.js +42 -0
  210. package/dist/provider-lease.js.map +1 -0
  211. package/dist/run-export-ICTZITXC.js +10 -0
  212. package/dist/run-export-ICTZITXC.js.map +1 -0
  213. package/dist/settings/index.d.ts +28 -0
  214. package/dist/settings/index.js +12 -0
  215. package/dist/settings/index.js.map +1 -0
  216. package/package.json +24 -9
  217. package/src/AppMenu/AppMenu.tsx +169 -99
  218. package/src/AppMenu/index.ts +1 -1
  219. package/src/DocBlocksShell/DocBlocksShell.tsx +2157 -537
  220. package/src/DocBlocksShell/LazyEditorShell.ts +2 -0
  221. package/src/DocBlocksShell/UpdateAvailableNotice.tsx +60 -0
  222. package/src/DocBlocksShell/document-title.ts +19 -0
  223. package/src/DocBlocksShell/workspace-authority-barrier.ts +26 -0
  224. package/src/Export/DeferredExportToolbarControls.tsx +23 -0
  225. package/src/Export/ExportDialog.tsx +74 -20
  226. package/src/Export/ExportToolbarControls.tsx +238 -40
  227. package/src/Export/export-destination.ts +30 -0
  228. package/src/Export/index.ts +18 -4
  229. package/src/Export/public-api.ts +17 -0
  230. package/src/Export/run-export.ts +36 -11
  231. package/src/FileExplorer/FileExplorer.tsx +284 -38
  232. package/src/FileExplorer/FileTreeNode.tsx +100 -8
  233. package/src/FileExplorer/index.ts +1 -1
  234. package/src/FileExplorer/useFileTree.ts +190 -16
  235. package/src/Git/GitAuthGuidanceDialog.tsx +84 -0
  236. package/src/Git/GitBranchesDialog.tsx +144 -0
  237. package/src/Git/GitCloneDialog.tsx +200 -0
  238. package/src/Git/GitCommitDialog.tsx +119 -0
  239. package/src/Git/GitConflictsDialog.tsx +62 -0
  240. package/src/Git/GitContext.tsx +88 -0
  241. package/src/Git/GitDiffDialog.tsx +147 -0
  242. package/src/Git/GitDiffView.tsx +105 -0
  243. package/src/Git/GitHistoryDialog.tsx +195 -0
  244. package/src/Git/GitStatusBar.tsx +157 -0
  245. package/src/Git/GitToolbarControl.tsx +123 -0
  246. package/src/Git/GitUI.tsx +68 -0
  247. package/src/Git/commit-selection.ts +63 -0
  248. package/src/Git/git-clone-utils.ts +23 -0
  249. package/src/Git/git-status.ts +113 -0
  250. package/src/Git/useGit.ts +279 -0
  251. package/src/Git/useGitStatus.ts +78 -0
  252. package/src/Settings/Settings.tsx +118 -0
  253. package/src/Settings/public-api.ts +8 -0
  254. package/src/WorkspacePicker/WorkspacePicker.tsx +62 -8
  255. package/src/components/Dialog.tsx +81 -0
  256. package/src/editor.ts +72 -0
  257. package/src/hooks/index.ts +2 -1
  258. package/src/hooks/useDocumentSession.ts +37 -0
  259. package/src/icons.tsx +33 -55
  260. package/src/index.ts +35 -5
  261. package/src/preferences/theme.ts +67 -0
  262. package/src/provider-lease.ts +52 -0
  263. package/src/styles/docblocks.css +2174 -79
  264. package/src/types/pwa-dom.d.ts +31 -0
  265. package/dist/hooks/useAutoSave.d.ts +0 -15
  266. package/dist/hooks/useAutoSave.d.ts.map +0 -1
  267. package/dist/hooks/useAutoSave.js +0 -83
  268. package/dist/hooks/useAutoSave.js.map +0 -1
  269. package/dist/monaco-slim.d.ts +0 -19
  270. package/dist/monaco-slim.d.ts.map +0 -1
  271. package/dist/monaco-slim.js +0 -19
  272. package/dist/monaco-slim.js.map +0 -1
  273. package/src/fonts/fonts.css +0 -362
  274. package/src/fonts/licenses/LICENSE-cormorant-garamond.txt +0 -93
  275. package/src/fonts/licenses/LICENSE-crimson-text.txt +0 -93
  276. package/src/fonts/licenses/LICENSE-dm-sans.txt +0 -93
  277. package/src/fonts/licenses/LICENSE-dm-serif-display.txt +0 -93
  278. package/src/fonts/licenses/LICENSE-hanken-grotesk.txt +0 -94
  279. package/src/fonts/licenses/LICENSE-ibm-plex-sans.txt +0 -93
  280. package/src/fonts/licenses/LICENSE-inter.txt +0 -93
  281. package/src/fonts/licenses/LICENSE-jetbrains-mono.txt +0 -93
  282. package/src/fonts/licenses/LICENSE-lora.txt +0 -93
  283. package/src/fonts/licenses/LICENSE-merriweather.txt +0 -93
  284. package/src/fonts/licenses/LICENSE-oswald.txt +0 -93
  285. package/src/fonts/licenses/LICENSE-playfair-display.txt +0 -93
  286. package/src/fonts/licenses/LICENSE-pt-serif.txt +0 -93
  287. package/src/fonts/licenses/LICENSE-roboto.txt +0 -93
  288. package/src/fonts/licenses/LICENSE-source-serif-4.txt +0 -93
  289. package/src/fonts/woff2/cormorant-garamond-400.woff2 +0 -0
  290. package/src/fonts/woff2/cormorant-garamond-700.woff2 +0 -0
  291. package/src/fonts/woff2/crimson-text-400.woff2 +0 -0
  292. package/src/fonts/woff2/crimson-text-400i.woff2 +0 -0
  293. package/src/fonts/woff2/crimson-text-700.woff2 +0 -0
  294. package/src/fonts/woff2/dm-sans-400.woff2 +0 -0
  295. package/src/fonts/woff2/dm-sans-400i.woff2 +0 -0
  296. package/src/fonts/woff2/dm-sans-500.woff2 +0 -0
  297. package/src/fonts/woff2/dm-sans-700.woff2 +0 -0
  298. package/src/fonts/woff2/dm-serif-display-400.woff2 +0 -0
  299. package/src/fonts/woff2/hanken-grotesk-400.woff2 +0 -0
  300. package/src/fonts/woff2/hanken-grotesk-400i.woff2 +0 -0
  301. package/src/fonts/woff2/hanken-grotesk-500.woff2 +0 -0
  302. package/src/fonts/woff2/hanken-grotesk-600.woff2 +0 -0
  303. package/src/fonts/woff2/hanken-grotesk-700.woff2 +0 -0
  304. package/src/fonts/woff2/ibm-plex-sans-400.woff2 +0 -0
  305. package/src/fonts/woff2/ibm-plex-sans-400i.woff2 +0 -0
  306. package/src/fonts/woff2/ibm-plex-sans-500.woff2 +0 -0
  307. package/src/fonts/woff2/ibm-plex-sans-600.woff2 +0 -0
  308. package/src/fonts/woff2/ibm-plex-sans-700.woff2 +0 -0
  309. package/src/fonts/woff2/inter-400.woff2 +0 -0
  310. package/src/fonts/woff2/inter-400i.woff2 +0 -0
  311. package/src/fonts/woff2/inter-500.woff2 +0 -0
  312. package/src/fonts/woff2/inter-600.woff2 +0 -0
  313. package/src/fonts/woff2/inter-700.woff2 +0 -0
  314. package/src/fonts/woff2/jetbrains-mono-400.woff2 +0 -0
  315. package/src/fonts/woff2/jetbrains-mono-400i.woff2 +0 -0
  316. package/src/fonts/woff2/jetbrains-mono-700.woff2 +0 -0
  317. package/src/fonts/woff2/lora-400.woff2 +0 -0
  318. package/src/fonts/woff2/lora-400i.woff2 +0 -0
  319. package/src/fonts/woff2/lora-700.woff2 +0 -0
  320. package/src/fonts/woff2/merriweather-400.woff2 +0 -0
  321. package/src/fonts/woff2/merriweather-700.woff2 +0 -0
  322. package/src/fonts/woff2/oswald-400.woff2 +0 -0
  323. package/src/fonts/woff2/oswald-700.woff2 +0 -0
  324. package/src/fonts/woff2/playfair-display-400.woff2 +0 -0
  325. package/src/fonts/woff2/playfair-display-700.woff2 +0 -0
  326. package/src/fonts/woff2/pt-serif-400.woff2 +0 -0
  327. package/src/fonts/woff2/pt-serif-700.woff2 +0 -0
  328. package/src/fonts/woff2/roboto-400.woff2 +0 -0
  329. package/src/fonts/woff2/roboto-400i.woff2 +0 -0
  330. package/src/fonts/woff2/roboto-700.woff2 +0 -0
  331. package/src/fonts/woff2/source-serif-4-400.woff2 +0 -0
  332. package/src/fonts/woff2/source-serif-4-400i.woff2 +0 -0
  333. package/src/fonts/woff2/source-serif-4-700.woff2 +0 -0
  334. package/src/hooks/useAutoSave.ts +0 -116
  335. package/src/monaco-slim.ts +0 -20
@@ -2,7 +2,7 @@
2
2
  * useFileTree — hook that reads from a FileSystemProvider,
3
3
  * maintains expanded/collapsed state, and provides CRUD operations.
4
4
  */
5
- import type { FileSystemProvider, FileSystemEntry } from '@bendyline/docblocks/filesystem';
5
+ import { type FileSystemProvider, type FileSystemEntry } from '@bendyline/docblocks/filesystem';
6
6
  export interface FileTreeState {
7
7
  /** Flat list of entries for the current directory view. */
8
8
  entries: FileSystemEntry[];
@@ -20,14 +20,16 @@ export interface FileTreeActions {
20
20
  toggleExpand: (path: string) => void;
21
21
  /** Select a file or directory. */
22
22
  select: (path: string, kind: 'file' | 'directory') => void;
23
+ /** Select an entry and expand each directory needed to reveal it. */
24
+ reveal: (path: string, kind: 'file' | 'directory') => void;
23
25
  /** Create a new file with optional initial content. */
24
26
  createFile: (path: string, content?: string) => Promise<void>;
25
27
  /** Create a new directory. */
26
28
  createDirectory: (path: string) => Promise<void>;
27
29
  /** Delete a file or directory. */
28
30
  deleteEntry: (path: string) => Promise<void>;
29
- /** Rename a file or directory. */
30
- renameEntry: (oldPath: string, newPath: string) => Promise<void>;
31
+ /** Rename or move a file or directory, including a markdown companion folder. */
32
+ renameEntry: (oldPath: string, newPath: string, kind?: 'file' | 'directory') => Promise<void>;
31
33
  /** Force refresh the tree. */
32
34
  refresh: () => Promise<void>;
33
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useFileTree.d.ts","sourceRoot":"","sources":["../../src/FileExplorer/useFileTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAE3F,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,uCAAuC;IACvC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,kEAAkE;IAClE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kCAAkC;IAClC,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IAC1C,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,kCAAkC;IAClC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,KAAK,IAAI,CAAC;IAC3D,uDAAuD;IACvD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,8BAA8B;IAC9B,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,kCAAkC;IAClC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,kCAAkC;IAClC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,8BAA8B;IAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,GAAG,aAAa,GAAG,eAAe,CA2IhG"}
1
+ {"version":3,"file":"useFileTree.d.ts","sourceRoot":"","sources":["../../src/FileExplorer/useFileTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAC;AA2CzC,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,uCAAuC;IACvC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,kEAAkE;IAClE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kCAAkC;IAClC,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IAC1C,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,kCAAkC;IAClC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,KAAK,IAAI,CAAC;IAC3D,qEAAqE;IACrE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,KAAK,IAAI,CAAC;IAC3D,uDAAuD;IACvD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,8BAA8B;IAC9B,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,kCAAkC;IAClC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,iFAAiF;IACjF,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,8BAA8B;IAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,GAAG,aAAa,GAAG,eAAe,CAwQhG"}
@@ -3,6 +3,42 @@
3
3
  * maintains expanded/collapsed state, and provides CRUD operations.
4
4
  */
5
5
  import { useState, useCallback, useEffect, useRef } from 'react';
6
+ import { getFileSystemProviderV2, moveFileSystemEntry, parseWorkspacePath, } from '@bendyline/docblocks/filesystem';
7
+ function normalisePath(path) {
8
+ return parseWorkspacePath(path);
9
+ }
10
+ function relocatePath(path, oldPath, newPath) {
11
+ const current = normalisePath(path);
12
+ const oldNormalised = normalisePath(oldPath);
13
+ if (current !== oldNormalised && !current.startsWith(`${oldNormalised}/`))
14
+ return path;
15
+ const suffix = current.slice(oldNormalised.length);
16
+ return `${newPath.replace(/\/+$/, '')}${suffix}`;
17
+ }
18
+ function ancestorPaths(path) {
19
+ const canonical = normalisePath(path);
20
+ if (!canonical)
21
+ return [];
22
+ const segments = canonical.split('/');
23
+ const prefix = /^[\\/]/u.test(path) ? '/' : '';
24
+ return segments
25
+ .slice(0, -1)
26
+ .map((_, index) => `${prefix}${segments.slice(0, index + 1).join('/')}`);
27
+ }
28
+ function equivalentPathKeys(path) {
29
+ const canonical = normalisePath(path);
30
+ return canonical ? [path, canonical, `/${canonical}`] : [path, canonical];
31
+ }
32
+ function hasEquivalentPath(paths, path) {
33
+ return equivalentPathKeys(path).some((candidate) => paths.has(candidate));
34
+ }
35
+ async function readProviderDirectory(provider, path) {
36
+ const providerV2 = getFileSystemProviderV2(provider);
37
+ if (!providerV2)
38
+ return provider.readDirectory(path);
39
+ const entries = await providerV2.readDirectory(parseWorkspacePath(path));
40
+ return entries.map((entry) => ({ kind: entry.kind, name: entry.name, path: entry.path }));
41
+ }
6
42
  export function useFileTree(provider) {
7
43
  const [entries, setEntries] = useState([]);
8
44
  const [expanded, setExpanded] = useState(new Set());
@@ -20,7 +56,7 @@ export function useFileTree(provider) {
20
56
  }
21
57
  setLoading(true);
22
58
  try {
23
- const root = await providerRef.current.readDirectory('');
59
+ const root = await readProviderDirectory(providerRef.current, '');
24
60
  setEntries(root);
25
61
  }
26
62
  finally {
@@ -30,7 +66,7 @@ export function useFileTree(provider) {
30
66
  const loadChildren = useCallback(async (dirPath) => {
31
67
  if (!providerRef.current)
32
68
  return;
33
- const children = await providerRef.current.readDirectory(dirPath);
69
+ const children = await readProviderDirectory(providerRef.current, dirPath);
34
70
  setChildEntries((prev) => {
35
71
  const next = new Map(prev);
36
72
  next.set(dirPath, children);
@@ -48,8 +84,9 @@ export function useFileTree(provider) {
48
84
  const toggleExpand = useCallback((path) => {
49
85
  setExpanded((prev) => {
50
86
  const next = new Set(prev);
51
- if (next.has(path)) {
52
- next.delete(path);
87
+ if (hasEquivalentPath(next, path)) {
88
+ for (const candidate of equivalentPathKeys(path))
89
+ next.delete(candidate);
53
90
  }
54
91
  else {
55
92
  next.add(path);
@@ -63,6 +100,22 @@ export function useFileTree(provider) {
63
100
  setSelectedPath(path);
64
101
  setSelectedKind(kind);
65
102
  }, []);
103
+ const reveal = useCallback((path, kind) => {
104
+ const ancestors = ancestorPaths(path);
105
+ setSelectedPath(path);
106
+ setSelectedKind(kind);
107
+ setExpanded((prev) => {
108
+ const next = new Set(prev);
109
+ for (const ancestor of ancestors) {
110
+ if (!hasEquivalentPath(next, ancestor))
111
+ next.add(ancestor);
112
+ }
113
+ return next;
114
+ });
115
+ for (const ancestor of ancestors) {
116
+ void loadChildren(ancestor);
117
+ }
118
+ }, [loadChildren]);
66
119
  const refresh = useCallback(async () => {
67
120
  await loadRoot();
68
121
  // Reload all expanded directories
@@ -71,37 +124,143 @@ export function useFileTree(provider) {
71
124
  await loadChildren(dirPath);
72
125
  }
73
126
  }, [loadRoot, loadChildren, expanded]);
127
+ const refreshRef = useRef(refresh);
128
+ refreshRef.current = refresh;
129
+ // Keep the explorer synchronized with provider changes. Watch-capable
130
+ // providers (including Electron's chokidar-backed provider) update in real
131
+ // time. Calls are serialized and coalesced so event bursts cannot publish
132
+ // directory reads out of order.
133
+ useEffect(() => {
134
+ if (!provider)
135
+ return;
136
+ const providerV2 = getFileSystemProviderV2(provider);
137
+ if (!providerV2?.capabilities.watch)
138
+ return;
139
+ let disposed = false;
140
+ let refreshing = false;
141
+ let refreshAgain = false;
142
+ const requestRefresh = () => {
143
+ if (disposed)
144
+ return;
145
+ if (refreshing) {
146
+ refreshAgain = true;
147
+ return;
148
+ }
149
+ refreshing = true;
150
+ void (async () => {
151
+ try {
152
+ do {
153
+ refreshAgain = false;
154
+ await refreshRef.current();
155
+ } while (refreshAgain && !disposed);
156
+ }
157
+ catch {
158
+ // A later watcher event or window resume will retry the read.
159
+ }
160
+ finally {
161
+ refreshing = false;
162
+ if (refreshAgain && !disposed)
163
+ requestRefresh();
164
+ }
165
+ })();
166
+ };
167
+ const subscription = providerV2.watch(requestRefresh, { onError: requestRefresh });
168
+ void subscription.ready.catch(() => undefined);
169
+ return () => {
170
+ disposed = true;
171
+ void subscription.dispose();
172
+ };
173
+ }, [provider]);
174
+ // File System Access and IndexedDB do not expose a dependable external
175
+ // watcher. Refreshing on resume catches changes made while this surface was
176
+ // in the background without continuously polling the filesystem.
177
+ useEffect(() => {
178
+ if (!provider)
179
+ return;
180
+ const refreshOnFocus = () => {
181
+ void refreshRef.current().catch(() => undefined);
182
+ };
183
+ const refreshOnVisibility = () => {
184
+ if (document.visibilityState === 'visible')
185
+ refreshOnFocus();
186
+ };
187
+ window.addEventListener('focus', refreshOnFocus);
188
+ document.addEventListener('visibilitychange', refreshOnVisibility);
189
+ return () => {
190
+ window.removeEventListener('focus', refreshOnFocus);
191
+ document.removeEventListener('visibilitychange', refreshOnVisibility);
192
+ };
193
+ }, [provider]);
74
194
  const createFile = useCallback(async (path, content = '') => {
75
195
  if (!providerRef.current)
76
196
  return;
77
- await providerRef.current.writeFile(path, content);
197
+ const providerV2 = getFileSystemProviderV2(providerRef.current);
198
+ if (providerV2) {
199
+ await providerV2.writeFile(parseWorkspacePath(path), new TextEncoder().encode(content), {
200
+ mode: 'create',
201
+ });
202
+ }
203
+ else {
204
+ await providerRef.current.writeFile(path, content);
205
+ }
78
206
  await refresh();
79
207
  }, [refresh]);
80
208
  const createDirectory = useCallback(async (path) => {
81
209
  if (!providerRef.current)
82
210
  return;
83
- await providerRef.current.createDirectory(path);
211
+ const providerV2 = getFileSystemProviderV2(providerRef.current);
212
+ if (providerV2) {
213
+ await providerV2.createDirectory(parseWorkspacePath(path), { mode: 'create' });
214
+ }
215
+ else {
216
+ await providerRef.current.createDirectory(path);
217
+ }
84
218
  await refresh();
85
219
  }, [refresh]);
86
220
  const deleteEntry = useCallback(async (path) => {
87
221
  if (!providerRef.current)
88
222
  return;
89
- await providerRef.current.delete(path);
223
+ const providerV2 = getFileSystemProviderV2(providerRef.current);
224
+ if (providerV2) {
225
+ const canonical = parseWorkspacePath(path);
226
+ const entry = await providerV2.stat(canonical);
227
+ if (entry) {
228
+ await providerV2.remove(canonical, {
229
+ recursive: entry.kind === 'directory',
230
+ missing: 'error',
231
+ expectedVersion: entry.version,
232
+ });
233
+ }
234
+ }
235
+ else {
236
+ await providerRef.current.delete(path);
237
+ }
90
238
  if (selectedPath === path) {
91
239
  setSelectedPath(null);
92
240
  setSelectedKind(null);
93
241
  }
94
242
  await refresh();
95
243
  }, [refresh, selectedPath]);
96
- const renameEntry = useCallback(async (oldPath, newPath) => {
244
+ const renameEntry = useCallback(async (oldPath, newPath, kind) => {
97
245
  if (!providerRef.current)
98
246
  return;
99
- await providerRef.current.rename(oldPath, newPath);
100
- if (selectedPath === oldPath) {
101
- setSelectedPath(newPath);
247
+ const oldNormalised = normalisePath(oldPath);
248
+ const knownEntry = [...entries, ...childEntries.values()]
249
+ .flat()
250
+ .find((entry) => normalisePath(entry.path) === oldNormalised);
251
+ const entryKind = kind ?? knownEntry?.kind ?? 'file';
252
+ await moveFileSystemEntry(providerRef.current, oldPath, newPath, entryKind);
253
+ if (selectedPath) {
254
+ setSelectedPath(relocatePath(selectedPath, oldPath, newPath));
102
255
  }
103
- await refresh();
104
- }, [refresh, selectedPath]);
256
+ const nextExpanded = new Set([...expanded].map((path) => relocatePath(path, oldPath, newPath)));
257
+ setExpanded(nextExpanded);
258
+ setChildEntries(new Map());
259
+ await loadRoot();
260
+ for (const dirPath of nextExpanded) {
261
+ await loadChildren(dirPath);
262
+ }
263
+ }, [selectedPath, entries, childEntries, expanded, loadRoot, loadChildren]);
105
264
  // Merge root entries with child entries for a flat tree representation
106
265
  // (consumers use `expanded` and `childEntries` to render recursively)
107
266
  return {
@@ -112,6 +271,7 @@ export function useFileTree(provider) {
112
271
  loading,
113
272
  toggleExpand,
114
273
  select,
274
+ reveal,
115
275
  createFile,
116
276
  createDirectory,
117
277
  deleteEntry,
@@ -1 +1 @@
1
- {"version":3,"file":"useFileTree.js","sourceRoot":"","sources":["../../src/FileExplorer/useFileTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useFileTree.js","sourceRoot":"","sources":["../../src/FileExplorer/useFileTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,iCAAiC,CAAC;AAEzC,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,OAAe,EAAE,OAAe;IAClE,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,aAAa,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,aAAa,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvF,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,OAAO,QAAQ;SACZ,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA0B,EAAE,IAAY;IACjE,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,QAA4B,EAC5B,IAAY;IAEZ,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU;QAAE,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5F,CAAC;AAkCD,MAAM,UAAU,WAAW,CAAC,QAAmC;IAC7D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IAC9D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAc,IAAI,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAA8B,IAAI,CAAC,CAAC;IACpF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,+CAA+C;IAC/C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAiC,IAAI,GAAG,EAAE,CAAC,CAAC;IAE5F,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACtC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,UAAU,CAAC,EAAE,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAClE,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QACzD,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO;QACjC,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3E,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,+BAA+B;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACvB,eAAe,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3B,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,QAAQ,EAAE,CAAC;IACb,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEzB,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,IAAY,EAAE,EAAE;QACf,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBAClC,KAAK,MAAM,SAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACf,+BAA+B;gBAC/B,YAAY,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,IAAY,EAAE,IAA0B,EAAE,EAAE;QACtE,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,eAAe,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,IAAY,EAAE,IAA0B,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACtC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC;oBAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,KAAK,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,MAAM,QAAQ,EAAE,CAAC;QACjB,kCAAkC;QAClC,MAAM,aAAa,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QACpC,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,sEAAsE;IACtE,2EAA2E;IAC3E,0EAA0E;IAC1E,gCAAgC;IAChC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK;YAAE,OAAO;QAE5C,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,IAAI,QAAQ;gBAAE,OAAO;YACrB,IAAI,UAAU,EAAE,CAAC;gBACf,YAAY,GAAG,IAAI,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,UAAU,GAAG,IAAI,CAAC;YAClB,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,IAAI,CAAC;oBACH,GAAG,CAAC;wBACF,YAAY,GAAG,KAAK,CAAC;wBACrB,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;oBAC7B,CAAC,QAAQ,YAAY,IAAI,CAAC,QAAQ,EAAE;gBACtC,CAAC;gBAAC,MAAM,CAAC;oBACP,8DAA8D;gBAChE,CAAC;wBAAS,CAAC;oBACT,UAAU,GAAG,KAAK,CAAC;oBACnB,IAAI,YAAY,IAAI,CAAC,QAAQ;wBAAE,cAAc,EAAE,CAAC;gBAClD,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QACnF,KAAK,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,GAAG,EAAE;YACV,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,uEAAuE;IACvE,4EAA4E;IAC5E,iEAAiE;IACjE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACnD,CAAC,CAAC;QACF,MAAM,mBAAmB,GAAG,GAAG,EAAE;YAC/B,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;gBAAE,cAAc,EAAE,CAAC;QAC/D,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACjD,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;QACnE,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACpD,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;QACxE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,UAAU,GAAG,WAAW,CAC5B,KAAK,EAAE,IAAY,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;QACnC,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO;QACjC,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;gBACtF,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,KAAK,EAAE,IAAY,EAAE,EAAE;QACrB,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO;QACjC,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAC7B,KAAK,EAAE,IAAY,EAAE,EAAE;QACrB,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO;QACjC,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE;oBACjC,SAAS,EAAE,KAAK,CAAC,IAAI,KAAK,WAAW;oBACrC,OAAO,EAAE,OAAO;oBAChB,eAAe,EAAE,KAAK,CAAC,OAAO;iBAC/B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC,EACD,CAAC,OAAO,EAAE,YAAY,CAAC,CACxB,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAC7B,KAAK,EAAE,OAAe,EAAE,OAAe,EAAE,IAA2B,EAAE,EAAE;QACtE,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO;QACjC,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;aACtD,IAAI,EAAE;aACN,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,IAAI,UAAU,EAAE,IAAI,IAAI,MAAM,CAAC;QACrD,MAAM,mBAAmB,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAE5E,IAAI,YAAY,EAAE,CAAC;YACjB,eAAe,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAClE,CAAC;QACF,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1B,eAAe,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3B,MAAM,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,EACD,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CACxE,CAAC;IAEF,uEAAuE;IACvE,sEAAsE;IAEtE,OAAO;QACL,OAAO;QACP,QAAQ;QACR,YAAY;QACZ,YAAY;QACZ,OAAO;QACP,YAAY;QACZ,MAAM;QACN,MAAM;QACN,UAAU;QACV,eAAe;QACf,WAAW;QACX,WAAW;QACX,OAAO;QACP,qCAAqC;QACrC,GAAG,EAAE,YAAY,EAAE;KACkE,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * GitAuthGuidanceDialog — shown when a git operation fails to authenticate.
3
+ *
4
+ * DocBlocks deliberately never collects or stores credentials, so this
5
+ * dialog only explains the three supported sign-in routes (credential
6
+ * helper, GitHub CLI, SSH key). The copy is exported as a standalone
7
+ * component so the clone dialog can embed it after an auth failure.
8
+ */
9
+ /** The credential guidance copy, reusable outside this dialog (clone flow). */
10
+ export declare function GitCredentialGuidance({ detail }: {
11
+ detail?: string;
12
+ }): import("react/jsx-runtime").JSX.Element;
13
+ export declare function GitAuthGuidanceDialog({ operation, detail, onClose, }: {
14
+ operation: 'push' | 'pull' | 'fetch' | 'clone' | 'pr';
15
+ detail?: string;
16
+ onClose: () => void;
17
+ }): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=GitAuthGuidanceDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitAuthGuidanceDialog.d.ts","sourceRoot":"","sources":["../../src/Git/GitAuthGuidanceDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,2CAuBpE;AAED,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,OAAO,GACR,EAAE;IACD,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,2CA0BA"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * GitAuthGuidanceDialog — shown when a git operation fails to authenticate.
4
+ *
5
+ * DocBlocks deliberately never collects or stores credentials, so this
6
+ * dialog only explains the three supported sign-in routes (credential
7
+ * helper, GitHub CLI, SSH key). The copy is exported as a standalone
8
+ * component so the clone dialog can embed it after an auth failure.
9
+ */
10
+ import { maybeGetDocBlocksHost } from '@bendyline/docblocks/host';
11
+ import { Dialog } from '../components/Dialog.js';
12
+ const LEARN_MORE_URL = 'https://docs.github.com/en/get-started/getting-started-with-git/caching-your-github-credentials-in-git';
13
+ const OPERATION_LABELS = {
14
+ push: 'push',
15
+ pull: 'pull',
16
+ fetch: 'fetch',
17
+ clone: 'clone',
18
+ pr: 'create the pull request',
19
+ };
20
+ /** The credential guidance copy, reusable outside this dialog (clone flow). */
21
+ export function GitCredentialGuidance({ detail }) {
22
+ return (_jsxs(_Fragment, { children: [_jsx("p", { className: "db-settings-hint", children: "DocBlocks never stores Git credentials. Sign in with one of these, then try again:" }), _jsxs("ul", { className: "db-git-hint", children: [_jsxs("li", { children: ["A git credential helper (", _jsx("code", { children: "git config credential.helper" }), ")"] }), _jsxs("li", { children: ["The GitHub CLI (", _jsx("code", { children: "gh auth login" }), ")"] }), _jsx("li", { children: "An SSH key registered with your remote" })] }), detail && (_jsxs("details", { children: [_jsx("summary", { children: "Details" }), _jsx("p", { className: "db-git-hint", children: detail })] }))] }));
23
+ }
24
+ export function GitAuthGuidanceDialog({ operation, detail, onClose, }) {
25
+ return (_jsxs(Dialog, { title: "Git needs credentials", onClose: onClose, footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "db-git-secondary-btn", onClick: () => void maybeGetDocBlocksHost()?.shell.openExternal(LEARN_MORE_URL), children: "Learn more" }), _jsx("button", { type: "button", className: "db-git-primary-btn", onClick: onClose, children: "Close" })] }), children: [_jsxs("p", { className: "db-settings-hint", children: ["Git could not authenticate with the remote while trying to ", OPERATION_LABELS[operation], "."] }), _jsx(GitCredentialGuidance, { detail: detail })] }));
26
+ }
27
+ //# sourceMappingURL=GitAuthGuidanceDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitAuthGuidanceDialog.js","sourceRoot":"","sources":["../../src/Git/GitAuthGuidanceDialog.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,MAAM,cAAc,GAClB,wGAAwG,CAAC;AAE3G,MAAM,gBAAgB,GAA+D;IACnF,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,EAAE,EAAE,yBAAyB;CAC9B,CAAC;AAEF,+EAA+E;AAC/E,MAAM,UAAU,qBAAqB,CAAC,EAAE,MAAM,EAAuB;IACnE,OAAO,CACL,8BACE,YAAG,SAAS,EAAC,kBAAkB,mGAE3B,EACJ,cAAI,SAAS,EAAC,aAAa,aACzB,sDAC2B,0DAAyC,SAC/D,EACL,6CACkB,2CAA0B,SACvC,EACL,kEAA+C,IAC5C,EACJ,MAAM,IAAI,CACT,8BACE,wCAA0B,EAC1B,YAAG,SAAS,EAAC,aAAa,YAAE,MAAM,GAAK,IAC/B,CACX,IACA,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,OAAO,GAKR;IACC,OAAO,CACL,MAAC,MAAM,IACL,KAAK,EAAC,uBAAuB,EAC7B,OAAO,EAAE,OAAO,EAChB,MAAM,EACJ,8BACE,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,qBAAqB,EAAE,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,2BAGxE,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,oBAAoB,EAAC,OAAO,EAAE,OAAO,sBAE5D,IACR,aAGL,aAAG,SAAS,EAAC,kBAAkB,4EAC+B,gBAAgB,CAAC,SAAS,CAAC,SACrF,EACJ,KAAC,qBAAqB,IAAC,MAAM,EAAE,MAAM,GAAI,IAClC,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * GitBranchesDialog — switch between local branches or create a new one.
3
+ *
4
+ * Loads the branch list once from the host git API on mount. Remote
5
+ * branches are display-only in v1 (a collapsed disclosure); switching and
6
+ * creating go through the GitValue actions so errors (e.g. uncommitted
7
+ * changes blocking a checkout) surface inline via lastResult.
8
+ */
9
+ export declare function GitBranchesDialog({ createFocus, onClose, }: {
10
+ createFocus?: boolean;
11
+ onClose: () => void;
12
+ }): import("react/jsx-runtime").JSX.Element | null;
13
+ //# sourceMappingURL=GitBranchesDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitBranchesDialog.d.ts","sourceRoot":"","sources":["../../src/Git/GitBranchesDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,wBAAgB,iBAAiB,CAAC,EAChC,WAAW,EACX,OAAO,GACR,EAAE;IACD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,kDA2HA"}
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * GitBranchesDialog — switch between local branches or create a new one.
4
+ *
5
+ * Loads the branch list once from the host git API on mount. Remote
6
+ * branches are display-only in v1 (a collapsed disclosure); switching and
7
+ * creating go through the GitValue actions so errors (e.g. uncommitted
8
+ * changes blocking a checkout) surface inline via lastResult.
9
+ */
10
+ import { useEffect, useRef, useState } from 'react';
11
+ import { Dialog } from '../components/Dialog.js';
12
+ import { useGitContext } from './GitContext.js';
13
+ export function GitBranchesDialog({ createFocus, onClose, }) {
14
+ const git = useGitContext();
15
+ const gitApi = git?.gitApi ?? null;
16
+ const repositoryId = git?.repositoryId ?? null;
17
+ const [branches, setBranches] = useState(null);
18
+ const [loadError, setLoadError] = useState(null);
19
+ const [newName, setNewName] = useState('');
20
+ const createInputRef = useRef(null);
21
+ useEffect(() => {
22
+ if (!gitApi || !repositoryId)
23
+ return;
24
+ let cancelled = false;
25
+ void gitApi.listBranches(repositoryId).then((result) => {
26
+ if (cancelled)
27
+ return;
28
+ if (result.ok)
29
+ setBranches(result.value);
30
+ else
31
+ setLoadError(result.error.message || 'Could not list branches');
32
+ });
33
+ return () => {
34
+ cancelled = true;
35
+ };
36
+ }, [gitApi, repositoryId]);
37
+ if (!git)
38
+ return null;
39
+ const locals = branches?.filter((b) => b.kind === 'local') ?? [];
40
+ const remotes = branches?.filter((b) => b.kind === 'remote') ?? [];
41
+ const canCreate = newName.trim().length > 0 && git.busy === null;
42
+ const handleSwitch = async (name) => {
43
+ const ok = await git.switchBranch(name);
44
+ if (ok)
45
+ onClose();
46
+ };
47
+ const handleCreate = async () => {
48
+ if (!canCreate)
49
+ return;
50
+ const ok = await git.createBranch(newName.trim());
51
+ if (ok)
52
+ onClose();
53
+ };
54
+ return (_jsxs(Dialog, { title: "Branches", onClose: onClose, initialFocusRef: createFocus ? createInputRef : undefined, children: [branches === null && loadError === null && _jsx("p", { className: "db-git-hint", children: "Loading branches\u2026" }), loadError !== null && (_jsx("p", { className: "db-git-form-error", role: "alert", children: loadError })), branches !== null && (_jsx("div", { className: "db-git-branch-list", children: locals.map((branch) => branch.current ? (_jsx("span", { className: "db-git-branch-row db-git-branch-row--current", "aria-current": "true", children: branch.name }, branch.name)) : (_jsx("button", { type: "button", className: "db-git-branch-row", disabled: git.busy !== null, onClick: () => void handleSwitch(branch.name), children: branch.name }, branch.name))) })), git.lastResult?.tone === 'error' && (_jsx("p", { className: "db-git-form-error", role: "alert", children: git.lastResult.message })), _jsx("hr", {}), _jsxs("div", { className: "db-git-form-row", children: [_jsx("label", { className: "db-git-form-label", htmlFor: "db-git-new-branch-name", children: "New branch" }), _jsx("input", { id: "db-git-new-branch-name", ref: createInputRef, className: "db-git-form-input", type: "text", value: newName, onChange: (e) => setNewName(e.target.value), onKeyDown: (e) => {
55
+ if (e.key === 'Enter')
56
+ void handleCreate();
57
+ }, placeholder: "feature/my-branch", spellCheck: false }), _jsx("button", { type: "button", className: "db-git-primary-btn", disabled: !canCreate, onClick: () => void handleCreate(), children: "Create" })] }), remotes.length > 0 && (_jsxs("details", { children: [_jsxs("summary", { children: ["Remote branches (", remotes.length, ")"] }), _jsx("div", { className: "db-git-branch-list", children: remotes.map((branch) => (_jsx("span", { className: "db-git-branch-row", children: branch.name }, branch.name))) })] }))] }));
58
+ }
59
+ //# sourceMappingURL=GitBranchesDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitBranchesDialog.js","sourceRoot":"","sources":["../../src/Git/GitBranchesDialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * GitCloneDialog — clone a remote repository into a new local workspace.
3
+ *
4
+ * The renderer only collects the URL; the main process shows the native
5
+ * destination picker, streams progress back, and registers the clone as a
6
+ * workspace. An auth failure swaps the body to the shared credential
7
+ * guidance copy (no credentials are ever collected here).
8
+ */
9
+ import type { ElectronWorkspaceInfo } from '@bendyline/docblocks/host';
10
+ export declare function GitCloneDialog({ onClose, onCloned, }: {
11
+ onClose: () => void;
12
+ onCloned: (info: ElectronWorkspaceInfo) => void;
13
+ }): import("react/jsx-runtime").JSX.Element | null;
14
+ //# sourceMappingURL=GitCloneDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitCloneDialog.d.ts","sourceRoot":"","sources":["../../src/Git/GitCloneDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,qBAAqB,EAGtB,MAAM,2BAA2B,CAAC;AAMnC,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACjD,kDA6KA"}
@@ -0,0 +1,79 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * GitCloneDialog — clone a remote repository into a new local workspace.
4
+ *
5
+ * The renderer only collects the URL; the main process shows the native
6
+ * destination picker, streams progress back, and registers the clone as a
7
+ * workspace. An auth failure swaps the body to the shared credential
8
+ * guidance copy (no credentials are ever collected here).
9
+ */
10
+ import { useEffect, useRef, useState } from 'react';
11
+ import { Dialog } from '../components/Dialog.js';
12
+ import { useGitContext } from './GitContext.js';
13
+ import { deriveCloneFolderName, isLikelyGitUrl } from './git-clone-utils.js';
14
+ import { GitCredentialGuidance } from './GitAuthGuidanceDialog.js';
15
+ export function GitCloneDialog({ onClose, onCloned, }) {
16
+ const git = useGitContext();
17
+ const gitApi = git?.gitApi ?? null;
18
+ const [url, setUrl] = useState('');
19
+ const [cloning, setCloning] = useState(false);
20
+ const [progress, setProgress] = useState(null);
21
+ const [error, setError] = useState(null);
22
+ /** Non-null → show embedded credential guidance instead of the form. */
23
+ const [authDetail, setAuthDetail] = useState(null);
24
+ const handleRef = useRef(null);
25
+ const urlInputRef = useRef(null);
26
+ // Closing the dialog mid-clone abandons it — kill git and clean up.
27
+ useEffect(() => () => {
28
+ handleRef.current?.cancel();
29
+ }, []);
30
+ if (!gitApi || typeof gitApi.clone !== 'function')
31
+ return null;
32
+ const canClone = isLikelyGitUrl(url) && !cloning;
33
+ const handleClone = async () => {
34
+ if (!canClone)
35
+ return;
36
+ setCloning(true);
37
+ setError(null);
38
+ setProgress(null);
39
+ const handle = gitApi.clone(url.trim(), (p) => setProgress(p));
40
+ handleRef.current = handle;
41
+ const result = await handle.result;
42
+ handleRef.current = null;
43
+ setCloning(false);
44
+ setProgress(null);
45
+ if (!result.ok) {
46
+ switch (result.error.code) {
47
+ case 'invalid-url':
48
+ setError('That doesn’t look like a valid repository URL.');
49
+ break;
50
+ case 'destination-exists':
51
+ setError('A folder with that name already exists there. Pick a different location.');
52
+ break;
53
+ case 'auth-failed':
54
+ setAuthDetail({ detail: result.error.message });
55
+ break;
56
+ case 'cancelled':
57
+ break; // user cancelled — just return to the form
58
+ default:
59
+ setError(result.error.message);
60
+ }
61
+ return;
62
+ }
63
+ if (result.value === null)
64
+ return; // user cancelled the destination picker
65
+ onCloned(result.value);
66
+ };
67
+ const progressPercent = progress?.percent ?? null;
68
+ const progressText = progress !== null
69
+ ? `${progress.phase}…${progressPercent !== null ? ` ${Math.round(progressPercent)}%` : ''}`
70
+ : 'Starting clone…';
71
+ if (authDetail !== null) {
72
+ return (_jsxs(Dialog, { title: "Clone repository", onClose: onClose, footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "db-git-secondary-btn", onClick: () => setAuthDetail(null), children: "Back" }), _jsx("button", { type: "button", className: "db-git-primary-btn", onClick: onClose, children: "Close" })] }), children: [_jsx("p", { className: "db-settings-hint", children: "Git could not authenticate with that remote." }), _jsx(GitCredentialGuidance, { detail: authDetail.detail })] }));
73
+ }
74
+ return (_jsxs(Dialog, { title: "Clone repository", onClose: onClose, closeOnBackdrop: !cloning, initialFocusRef: urlInputRef, footer: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "db-git-secondary-btn", onClick: onClose, disabled: cloning, children: "Cancel" }), _jsx("button", { type: "button", className: "db-git-primary-btn", disabled: !canClone, onClick: () => void handleClone(), children: "Clone" })] }), children: [_jsxs("div", { className: "db-git-form-row", children: [_jsx("label", { className: "db-git-form-label", htmlFor: "db-git-clone-url", children: "Repository URL" }), _jsx("input", { id: "db-git-clone-url", ref: urlInputRef, className: "db-git-form-input", type: "text", value: url, onChange: (e) => setUrl(e.target.value), onKeyDown: (e) => {
75
+ if (e.key === 'Enter')
76
+ void handleClone();
77
+ }, placeholder: "https://github.com/owner/repo.git", disabled: cloning, spellCheck: false })] }), isLikelyGitUrl(url) && (_jsxs("p", { className: "db-git-hint", children: ["Will clone into: ", _jsx("b", { children: deriveCloneFolderName(url) }), " \u2014 you\u2019ll pick where next"] })), _jsx("p", { className: "db-git-hint", children: "HTTPS and SSH URLs both work. You\u2019ll choose the destination folder in the next step." }), error !== null && (_jsx("p", { className: "db-git-form-error", role: "alert", children: error })), cloning && (_jsxs("div", { className: "db-git-progress", children: [progressPercent !== null && (_jsx("div", { className: "db-git-progress-bar", role: "progressbar", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(progressPercent), style: { width: `${progressPercent}%` } })), _jsx("p", { className: "db-git-progress-text", children: progressText }), _jsx("button", { type: "button", className: "db-git-secondary-btn", onClick: () => handleRef.current?.cancel(), children: "Cancel" })] }))] }));
78
+ }
79
+ //# sourceMappingURL=GitCloneDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitCloneDialog.js","sourceRoot":"","sources":["../../src/Git/GitCloneDialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * GitCommitDialog — message + per-file selection for committing changes.
3
+ *
4
+ * All changed files are included by default; while a merge is being
5
+ * concluded, conflicted files are force-included (locked) because a commit
6
+ * that omits them would not resolve the merge. Selection logic lives in
7
+ * commit-selection.ts so it stays unit-testable.
8
+ */
9
+ export declare function GitCommitDialog({ onClose }: {
10
+ onClose: () => void;
11
+ }): import("react/jsx-runtime").JSX.Element | null;
12
+ //# sourceMappingURL=GitCommitDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitCommitDialog.d.ts","sourceRoot":"","sources":["../../src/Git/GitCommitDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,kDA+FnE"}