@lapis-notes/history 0.1.4 → 0.2.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 (329) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +1 -1
  3. package/dist/repository/NOTICE.md +11 -0
  4. package/dist/repository/components/RepositoryAuthorAvatar.svelte +77 -0
  5. package/dist/repository/components/RepositoryAuthorAvatar.svelte.d.ts +11 -0
  6. package/dist/repository/components/RepositoryBackupStatus.svelte +236 -0
  7. package/dist/repository/components/RepositoryBackupStatus.svelte.d.ts +11 -0
  8. package/dist/repository/components/RepositoryChangedFiles.svelte +104 -0
  9. package/dist/repository/components/RepositoryChangedFiles.svelte.d.ts +13 -0
  10. package/dist/repository/components/RepositoryCommitMessage.svelte +93 -0
  11. package/dist/repository/components/RepositoryCommitMessage.svelte.d.ts +6 -0
  12. package/dist/repository/components/RepositoryCommitPicker.svelte +205 -0
  13. package/dist/repository/components/RepositoryCommitPicker.svelte.d.ts +17 -0
  14. package/dist/repository/components/RepositoryComparisonBar.svelte +71 -0
  15. package/dist/repository/components/RepositoryComparisonBar.svelte.d.ts +9 -0
  16. package/dist/repository/components/RepositoryComparisonTime.svelte +32 -0
  17. package/dist/repository/components/RepositoryComparisonTime.svelte.d.ts +6 -0
  18. package/dist/repository/components/RepositoryDiff.svelte +56 -0
  19. package/dist/repository/components/RepositoryDiff.svelte.d.ts +11 -0
  20. package/dist/repository/components/RepositoryDiffColumn.svelte +78 -0
  21. package/dist/repository/components/RepositoryDiffColumn.svelte.d.ts +14 -0
  22. package/dist/repository/components/RepositoryDiffControls.svelte +117 -0
  23. package/dist/repository/components/RepositoryDiffControls.svelte.d.ts +8 -0
  24. package/dist/repository/components/RepositoryFileHistory.svelte +170 -0
  25. package/dist/repository/components/RepositoryFileHistory.svelte.d.ts +10 -0
  26. package/dist/repository/components/RepositoryFileTitle.svelte +30 -0
  27. package/dist/repository/components/RepositoryFileTitle.svelte.d.ts +6 -0
  28. package/dist/repository/components/RepositoryGraph.svelte +216 -0
  29. package/dist/repository/components/RepositoryGraph.svelte.d.ts +19 -0
  30. package/dist/repository/components/RepositoryGraphSvg.svelte +110 -0
  31. package/dist/repository/components/RepositoryGraphSvg.svelte.d.ts +11 -0
  32. package/dist/repository/components/RepositoryIdentifiers.svelte +221 -0
  33. package/dist/repository/components/RepositoryIdentifiers.svelte.d.ts +15 -0
  34. package/dist/repository/components/RepositoryLogHeader.svelte +90 -0
  35. package/dist/repository/components/RepositoryLogHeader.svelte.d.ts +23 -0
  36. package/dist/repository/components/RepositoryOperationArguments.svelte +52 -0
  37. package/dist/repository/components/RepositoryOperationArguments.svelte.d.ts +6 -0
  38. package/dist/repository/components/RepositoryOperationColumn.svelte +163 -0
  39. package/dist/repository/components/RepositoryOperationColumn.svelte.d.ts +11 -0
  40. package/dist/repository/components/RepositoryOperationFiles.svelte +245 -0
  41. package/dist/repository/components/RepositoryOperationFiles.svelte.d.ts +14 -0
  42. package/dist/repository/components/RepositoryOperationMessage.svelte +169 -0
  43. package/dist/repository/components/RepositoryOperationMessage.svelte.d.ts +10 -0
  44. package/dist/repository/components/RepositoryOperationOption.svelte +183 -0
  45. package/dist/repository/components/RepositoryOperationOption.svelte.d.ts +10 -0
  46. package/dist/repository/components/RepositoryOperationParentPicker.svelte +188 -0
  47. package/dist/repository/components/RepositoryOperationParentPicker.svelte.d.ts +14 -0
  48. package/dist/repository/components/RepositoryOperationPinPicker.svelte +170 -0
  49. package/dist/repository/components/RepositoryOperationPinPicker.svelte.d.ts +13 -0
  50. package/dist/repository/components/RepositoryOperationRail.svelte +136 -0
  51. package/dist/repository/components/RepositoryOperationRail.svelte.d.ts +9 -0
  52. package/dist/repository/components/RepositoryOperationTarget.svelte +99 -0
  53. package/dist/repository/components/RepositoryOperationTarget.svelte.d.ts +8 -0
  54. package/dist/repository/components/RepositoryOperations.svelte +199 -0
  55. package/dist/repository/components/RepositoryOperations.svelte.d.ts +12 -0
  56. package/dist/repository/components/RepositoryPanel.svelte +207 -0
  57. package/dist/repository/components/RepositoryPanel.svelte.d.ts +15 -0
  58. package/dist/repository/components/RepositoryParentSummary.svelte +52 -0
  59. package/dist/repository/components/RepositoryParentSummary.svelte.d.ts +10 -0
  60. package/dist/repository/components/RepositoryPickerSearch.svelte +51 -0
  61. package/dist/repository/components/RepositoryPickerSearch.svelte.d.ts +11 -0
  62. package/dist/repository/components/RepositoryRestoreDialog.svelte +81 -0
  63. package/dist/repository/components/RepositoryRestoreDialog.svelte.d.ts +7 -0
  64. package/dist/repository/components/RepositoryRevisionActions.svelte +53 -0
  65. package/dist/repository/components/RepositoryRevisionActions.svelte.d.ts +9 -0
  66. package/dist/repository/components/RepositoryRevisionFiles.svelte +110 -0
  67. package/dist/repository/components/RepositoryRevisionFiles.svelte.d.ts +14 -0
  68. package/dist/repository/components/RepositoryRevisionOption.svelte +60 -0
  69. package/dist/repository/components/RepositoryRevisionOption.svelte.d.ts +9 -0
  70. package/dist/repository/components/RepositoryRevisionPicker.svelte +165 -0
  71. package/dist/repository/components/RepositoryRevisionPicker.svelte.d.ts +14 -0
  72. package/dist/repository/components/RepositoryRevisions.svelte +115 -0
  73. package/dist/repository/components/RepositoryRevisions.svelte.d.ts +20 -0
  74. package/dist/repository/components/RepositoryShell.svelte +44 -0
  75. package/dist/repository/components/RepositoryShell.svelte.d.ts +11 -0
  76. package/dist/repository/components/RepositorySkeleton.svelte +138 -0
  77. package/dist/repository/components/RepositorySkeleton.svelte.d.ts +7 -0
  78. package/dist/repository/components/RepositorySourcePicker.svelte +114 -0
  79. package/dist/repository/components/RepositorySourcePicker.svelte.d.ts +7 -0
  80. package/dist/repository/components/RepositoryUpstreamActions.svelte +125 -0
  81. package/dist/repository/components/RepositoryUpstreamActions.svelte.d.ts +8 -0
  82. package/dist/repository/components/RepositoryWorkingCopyStatus.svelte +290 -0
  83. package/dist/repository/components/RepositoryWorkingCopyStatus.svelte.d.ts +11 -0
  84. package/dist/repository/components/RepositoryWorkspacePicker.svelte +158 -0
  85. package/dist/repository/components/RepositoryWorkspacePicker.svelte.d.ts +11 -0
  86. package/dist/repository/components/backup/AdoptionSettings.svelte +95 -0
  87. package/dist/repository/components/backup/AdoptionSettings.svelte.d.ts +7 -0
  88. package/dist/repository/components/backup/BackupCard.svelte +79 -0
  89. package/dist/repository/components/backup/BackupCard.svelte.d.ts +14 -0
  90. package/dist/repository/components/backup/BackupField.svelte +45 -0
  91. package/dist/repository/components/backup/BackupField.svelte.d.ts +10 -0
  92. package/dist/repository/components/backup/BackupSelect.svelte +71 -0
  93. package/dist/repository/components/backup/BackupSelect.svelte.d.ts +35 -0
  94. package/dist/repository/components/backup/BackupSettings.svelte +122 -0
  95. package/dist/repository/components/backup/BackupSettings.svelte.d.ts +18 -0
  96. package/dist/repository/components/backup/BackupSettingsField.svelte +13 -0
  97. package/dist/repository/components/backup/BackupSettingsField.svelte.d.ts +4 -0
  98. package/dist/repository/components/backup/ForgeAccounts.svelte +231 -0
  99. package/dist/repository/components/backup/ForgeAccounts.svelte.d.ts +9 -0
  100. package/dist/repository/components/backup/ForgeAuthorization.svelte +267 -0
  101. package/dist/repository/components/backup/ForgeAuthorization.svelte.d.ts +9 -0
  102. package/dist/repository/components/backup/ForgeIcon.svelte +21 -0
  103. package/dist/repository/components/backup/ForgeIcon.svelte.d.ts +7 -0
  104. package/dist/repository/components/backup/PublicationRecovery.svelte +129 -0
  105. package/dist/repository/components/backup/PublicationRecovery.svelte.d.ts +11 -0
  106. package/dist/repository/components/backup/RemoteSettings.svelte +288 -0
  107. package/dist/repository/components/backup/RemoteSettings.svelte.d.ts +11 -0
  108. package/dist/repository/components/backup/RepositorySettingsPage.svelte +51 -0
  109. package/dist/repository/components/backup/RepositorySettingsPage.svelte.d.ts +4 -0
  110. package/dist/repository/components/backup/StorageSettings.svelte +158 -0
  111. package/dist/repository/components/backup/StorageSettings.svelte.d.ts +7 -0
  112. package/dist/repository/components/backup/SyncConflictEditor.svelte +158 -0
  113. package/dist/repository/components/backup/SyncConflictEditor.svelte.d.ts +9 -0
  114. package/dist/repository/components/backup/SyncSettings.svelte +97 -0
  115. package/dist/repository/components/backup/SyncSettings.svelte.d.ts +9 -0
  116. package/dist/repository/components/backup/adoption-settings.d.ts +7 -0
  117. package/dist/repository/components/backup/adoption-settings.js +42 -0
  118. package/dist/repository/components/backup/backup-settings.d.ts +35 -0
  119. package/dist/repository/components/backup/backup-settings.js +96 -0
  120. package/dist/repository/components/backup/forge-icons.d.ts +10 -0
  121. package/dist/repository/components/backup/forge-icons.js +11 -0
  122. package/dist/repository/components/backup/remote-restore.d.ts +3 -0
  123. package/dist/repository/components/backup/remote-restore.js +17 -0
  124. package/dist/repository/components/backup/storage-settings.d.ts +8 -0
  125. package/dist/repository/components/backup/storage-settings.js +23 -0
  126. package/dist/repository/components/blame/RepositoryBlameCommitTitle.svelte +212 -0
  127. package/dist/repository/components/blame/RepositoryBlameCommitTitle.svelte.d.ts +14 -0
  128. package/dist/repository/components/blame/RepositoryBlameGroup.svelte +189 -0
  129. package/dist/repository/components/blame/RepositoryBlameGroup.svelte.d.ts +20 -0
  130. package/dist/repository/components/blame/RepositoryBlamePanel.svelte +148 -0
  131. package/dist/repository/components/blame/RepositoryBlamePanel.svelte.d.ts +13 -0
  132. package/dist/repository/components/blame/RepositoryBlameRows.svelte +137 -0
  133. package/dist/repository/components/blame/RepositoryBlameRows.svelte.d.ts +32 -0
  134. package/dist/repository/components/blame/RepositoryBlameView.svelte +121 -0
  135. package/dist/repository/components/blame/RepositoryBlameView.svelte.d.ts +16 -0
  136. package/dist/repository/components/blame/blame-view.d.ts +16 -0
  137. package/dist/repository/components/blame/blame-view.js +73 -0
  138. package/dist/repository/components/blame/editor-actions.d.ts +3 -0
  139. package/dist/repository/components/blame/editor-actions.js +53 -0
  140. package/dist/repository/components/conflicts/RepositoryConflictActions.svelte +83 -0
  141. package/dist/repository/components/conflicts/RepositoryConflictActions.svelte.d.ts +13 -0
  142. package/dist/repository/components/conflicts/RepositoryConflictBody.svelte +93 -0
  143. package/dist/repository/components/conflicts/RepositoryConflictBody.svelte.d.ts +16 -0
  144. package/dist/repository/components/conflicts/RepositoryConflictFileTree.svelte +84 -0
  145. package/dist/repository/components/conflicts/RepositoryConflictFileTree.svelte.d.ts +21 -0
  146. package/dist/repository/components/conflicts/RepositoryConflictPath.svelte +35 -0
  147. package/dist/repository/components/conflicts/RepositoryConflictPath.svelte.d.ts +9 -0
  148. package/dist/repository/components/conflicts/RepositoryConflictResolution.svelte +133 -0
  149. package/dist/repository/components/conflicts/RepositoryConflictResolution.svelte.d.ts +12 -0
  150. package/dist/repository/components/conflicts/RepositoryConflictSurface.svelte +105 -0
  151. package/dist/repository/components/conflicts/RepositoryConflictSurface.svelte.d.ts +23 -0
  152. package/dist/repository/components/conflicts/RepositoryConflictText.svelte +104 -0
  153. package/dist/repository/components/conflicts/RepositoryConflictText.svelte.d.ts +26 -0
  154. package/dist/repository/components/conflicts/RepositorySidebarToggleIcon.svelte +52 -0
  155. package/dist/repository/components/conflicts/RepositorySidebarToggleIcon.svelte.d.ts +7 -0
  156. package/dist/repository/components/conflicts/repository-conflict-file-tree.css +73 -0
  157. package/dist/repository/components/conflicts/repository-conflicts.css +125 -0
  158. package/dist/repository/components/file-history-view.d.ts +15 -0
  159. package/dist/repository/components/file-history-view.js +110 -0
  160. package/dist/repository/components/operation-view.d.ts +16 -0
  161. package/dist/repository/components/operation-view.js +95 -0
  162. package/dist/repository/components/repository-backup.d.ts +22 -0
  163. package/dist/repository/components/repository-backup.js +75 -0
  164. package/dist/repository/components/repository-column-chrome.css +35 -0
  165. package/dist/repository/components/repository-commit-picker.css +55 -0
  166. package/dist/repository/components/repository-feedback.d.ts +7 -0
  167. package/dist/repository/components/repository-feedback.js +40 -0
  168. package/dist/repository/components/repository-identifiers.css +199 -0
  169. package/dist/repository/components/repository-navigation.d.ts +4 -0
  170. package/dist/repository/components/repository-navigation.js +16 -0
  171. package/dist/repository/components/repository-operation-column.css +112 -0
  172. package/dist/repository/components/repository-picker-options.css +11 -0
  173. package/dist/repository/components/repository-plugin.d.ts +33 -0
  174. package/dist/repository/components/repository-plugin.js +191 -0
  175. package/dist/repository/components/repository-review-identifiers.css +50 -0
  176. package/dist/repository/components/repository-status.d.ts +13 -0
  177. package/dist/repository/components/repository-status.js +227 -0
  178. package/dist/repository/components/repository-sync.d.ts +13 -0
  179. package/dist/repository/components/repository-sync.js +93 -0
  180. package/dist/repository/components/repository-tools.d.ts +3 -0
  181. package/dist/repository/components/repository-tools.js +13 -0
  182. package/dist/repository/components/repository-view.d.ts +16 -0
  183. package/dist/repository/components/repository-view.js +140 -0
  184. package/dist/repository/components/restore-controller.d.ts +9 -0
  185. package/dist/repository/components/restore-controller.js +44 -0
  186. package/dist/repository/components/search/search-provider.d.ts +3 -0
  187. package/dist/repository/components/search/search-provider.js +185 -0
  188. package/dist/repository/controllers/adoption-controller.d.ts +29 -0
  189. package/dist/repository/controllers/adoption-controller.js +145 -0
  190. package/dist/repository/controllers/adoption.d.ts +30 -0
  191. package/dist/repository/controllers/adoption.js +21 -0
  192. package/dist/repository/controllers/ai-history.d.ts +57 -0
  193. package/dist/repository/controllers/ai-history.js +51 -0
  194. package/dist/repository/controllers/author.d.ts +2 -0
  195. package/dist/repository/controllers/author.js +11 -0
  196. package/dist/repository/controllers/background-work.d.ts +14 -0
  197. package/dist/repository/controllers/background-work.js +57 -0
  198. package/dist/repository/controllers/backup-follow.d.ts +5 -0
  199. package/dist/repository/controllers/backup-follow.js +29 -0
  200. package/dist/repository/controllers/backup.d.ts +39 -0
  201. package/dist/repository/controllers/backup.js +129 -0
  202. package/dist/repository/controllers/blame-chunks.d.ts +13 -0
  203. package/dist/repository/controllers/blame-chunks.js +51 -0
  204. package/dist/repository/controllers/blame-controller.d.ts +17 -0
  205. package/dist/repository/controllers/blame-controller.js +148 -0
  206. package/dist/repository/controllers/blame-model.d.ts +25 -0
  207. package/dist/repository/controllers/blame-model.js +31 -0
  208. package/dist/repository/controllers/blame-preferences.d.ts +3 -0
  209. package/dist/repository/controllers/blame-preferences.js +18 -0
  210. package/dist/repository/controllers/commit-cards.d.ts +4 -0
  211. package/dist/repository/controllers/commit-cards.js +38 -0
  212. package/dist/repository/controllers/conflict-menu.d.ts +2 -0
  213. package/dist/repository/controllers/conflict-menu.js +1 -0
  214. package/dist/repository/controllers/file-history-controller.d.ts +29 -0
  215. package/dist/repository/controllers/file-history-controller.js +182 -0
  216. package/dist/repository/controllers/forge-accounts.d.ts +48 -0
  217. package/dist/repository/controllers/forge-accounts.js +1 -0
  218. package/dist/repository/controllers/forge-controller.d.ts +24 -0
  219. package/dist/repository/controllers/forge-controller.js +168 -0
  220. package/dist/repository/controllers/graph/model.d.ts +20 -0
  221. package/dist/repository/controllers/graph/model.js +33 -0
  222. package/dist/repository/controllers/graph/repository-log-graph.d.ts +44 -0
  223. package/dist/repository/controllers/graph/repository-log-graph.js +182 -0
  224. package/dist/repository/controllers/graph/repository-log-lanes.d.ts +7 -0
  225. package/dist/repository/controllers/graph/repository-log-lanes.js +19 -0
  226. package/dist/repository/controllers/graph/revision-id.d.ts +3 -0
  227. package/dist/repository/controllers/graph/revision-id.js +10 -0
  228. package/dist/repository/controllers/history-canvas.d.ts +2 -0
  229. package/dist/repository/controllers/history-canvas.js +45 -0
  230. package/dist/repository/controllers/history-controller.d.ts +31 -0
  231. package/dist/repository/controllers/history-controller.js +238 -0
  232. package/dist/repository/controllers/history-files.d.ts +7 -0
  233. package/dist/repository/controllers/history-files.js +18 -0
  234. package/dist/repository/controllers/history-graph.d.ts +20 -0
  235. package/dist/repository/controllers/history-graph.js +89 -0
  236. package/dist/repository/controllers/history-index-controller.d.ts +22 -0
  237. package/dist/repository/controllers/history-index-controller.js +77 -0
  238. package/dist/repository/controllers/history-lifetime.d.ts +13 -0
  239. package/dist/repository/controllers/history-lifetime.js +40 -0
  240. package/dist/repository/controllers/history-reader.d.ts +22 -0
  241. package/dist/repository/controllers/history-reader.js +1 -0
  242. package/dist/repository/controllers/history-search-expression.d.ts +9 -0
  243. package/dist/repository/controllers/history-search-expression.js +86 -0
  244. package/dist/repository/controllers/history-selection.d.ts +5 -0
  245. package/dist/repository/controllers/history-selection.js +32 -0
  246. package/dist/repository/controllers/history-source.d.ts +10 -0
  247. package/dist/repository/controllers/history-source.js +7 -0
  248. package/dist/repository/controllers/history-state.d.ts +34 -0
  249. package/dist/repository/controllers/history-state.js +55 -0
  250. package/dist/repository/controllers/indexed-search-validation.d.ts +4 -0
  251. package/dist/repository/controllers/indexed-search-validation.js +64 -0
  252. package/dist/repository/controllers/indexed-search.d.ts +11 -0
  253. package/dist/repository/controllers/indexed-search.js +1 -0
  254. package/dist/repository/controllers/log-canvas.d.ts +2 -0
  255. package/dist/repository/controllers/log-canvas.js +25 -0
  256. package/dist/repository/controllers/native-indexed-search.d.ts +4 -0
  257. package/dist/repository/controllers/native-indexed-search.js +10 -0
  258. package/dist/repository/controllers/open-history-revision.d.ts +3 -0
  259. package/dist/repository/controllers/open-history-revision.js +8 -0
  260. package/dist/repository/controllers/operation-command.d.ts +2 -0
  261. package/dist/repository/controllers/operation-command.js +55 -0
  262. package/dist/repository/controllers/operation-controller.d.ts +33 -0
  263. package/dist/repository/controllers/operation-controller.js +267 -0
  264. package/dist/repository/controllers/operation-files.d.ts +33 -0
  265. package/dist/repository/controllers/operation-files.js +182 -0
  266. package/dist/repository/controllers/operation-graph.d.ts +17 -0
  267. package/dist/repository/controllers/operation-graph.js +50 -0
  268. package/dist/repository/controllers/operation-message.d.ts +5 -0
  269. package/dist/repository/controllers/operation-message.js +18 -0
  270. package/dist/repository/controllers/operation-metadata.d.ts +5 -0
  271. package/dist/repository/controllers/operation-metadata.js +26 -0
  272. package/dist/repository/controllers/operation-parent.d.ts +5 -0
  273. package/dist/repository/controllers/operation-parent.js +46 -0
  274. package/dist/repository/controllers/operation-state.d.ts +28 -0
  275. package/dist/repository/controllers/operation-state.js +26 -0
  276. package/dist/repository/controllers/parent-candidates.d.ts +4 -0
  277. package/dist/repository/controllers/parent-candidates.js +27 -0
  278. package/dist/repository/controllers/plugin-data.d.ts +9 -0
  279. package/dist/repository/controllers/plugin-data.js +33 -0
  280. package/dist/repository/controllers/preparation-queue.d.ts +9 -0
  281. package/dist/repository/controllers/preparation-queue.js +55 -0
  282. package/dist/repository/controllers/remote-controller.d.ts +23 -0
  283. package/dist/repository/controllers/remote-controller.js +98 -0
  284. package/dist/repository/controllers/remote.d.ts +48 -0
  285. package/dist/repository/controllers/remote.js +13 -0
  286. package/dist/repository/controllers/restore-recovery.d.ts +3 -0
  287. package/dist/repository/controllers/restore-recovery.js +32 -0
  288. package/dist/repository/controllers/restore.d.ts +66 -0
  289. package/dist/repository/controllers/restore.js +201 -0
  290. package/dist/repository/controllers/revision-comparison.d.ts +20 -0
  291. package/dist/repository/controllers/revision-comparison.js +89 -0
  292. package/dist/repository/controllers/search-controller.d.ts +19 -0
  293. package/dist/repository/controllers/search-controller.js +105 -0
  294. package/dist/repository/controllers/search-page.d.ts +2 -0
  295. package/dist/repository/controllers/search-page.js +39 -0
  296. package/dist/repository/controllers/search.d.ts +51 -0
  297. package/dist/repository/controllers/search.js +8 -0
  298. package/dist/repository/controllers/services.d.ts +7 -0
  299. package/dist/repository/controllers/services.js +24 -0
  300. package/dist/repository/controllers/storage-controller.d.ts +30 -0
  301. package/dist/repository/controllers/storage-controller.js +130 -0
  302. package/dist/repository/controllers/storage.d.ts +26 -0
  303. package/dist/repository/controllers/storage.js +1 -0
  304. package/dist/repository/controllers/sync-application.d.ts +17 -0
  305. package/dist/repository/controllers/sync-application.js +45 -0
  306. package/dist/repository/controllers/sync-controller.d.ts +31 -0
  307. package/dist/repository/controllers/sync-controller.js +300 -0
  308. package/dist/repository/controllers/sync-publication.d.ts +7 -0
  309. package/dist/repository/controllers/sync-publication.js +29 -0
  310. package/dist/repository/controllers/sync-recovery.d.ts +7 -0
  311. package/dist/repository/controllers/sync-recovery.js +27 -0
  312. package/dist/repository/controllers/sync.d.ts +62 -0
  313. package/dist/repository/controllers/sync.js +38 -0
  314. package/dist/repository/controllers/tags.d.ts +7 -0
  315. package/dist/repository/controllers/tags.js +71 -0
  316. package/dist/repository/controllers/transcript-paths.d.ts +2 -0
  317. package/dist/repository/controllers/transcript-paths.js +17 -0
  318. package/dist/repository/controllers/transcript-writers.d.ts +9 -0
  319. package/dist/repository/controllers/transcript-writers.js +37 -0
  320. package/dist/repository/controllers/working-copy-controller.d.ts +22 -0
  321. package/dist/repository/controllers/working-copy-controller.js +58 -0
  322. package/dist/repository/controllers/working-copy-status.d.ts +16 -0
  323. package/dist/repository/controllers/working-copy-status.js +57 -0
  324. package/dist/repository/controllers/workspaces.d.ts +7 -0
  325. package/dist/repository/controllers/workspaces.js +4 -0
  326. package/dist/repository/index.d.ts +9 -0
  327. package/dist/repository/index.js +6 -0
  328. package/manifest.json +2 -2
  329. package/package.json +41 -9
@@ -0,0 +1,158 @@
1
+ <script lang="ts">
2
+ import { onMount, untrack } from "svelte";
3
+ import { MediaQuery } from "svelte/reactivity";
4
+ import { Button } from "@lapismd/design-core/shadcn/button";
5
+ import RepositoryConflictSurface from "../conflicts/RepositoryConflictSurface.svelte";
6
+ import RepositoryConflictText from "../conflicts/RepositoryConflictText.svelte";
7
+ import RepositorySkeleton from "../RepositorySkeleton.svelte";
8
+ import type { SyncController } from "../../controllers/sync-controller.js";
9
+ import type { SyncState } from "../../controllers/sync.js";
10
+ let {
11
+ controller,
12
+ open,
13
+ onClose,
14
+ }: { controller: SyncController; open: boolean; onClose(): void } = $props();
15
+ let snapshot = $state<SyncState>({
16
+ busy: false,
17
+ phase: "ready",
18
+ enabled: true,
19
+ recovery: false,
20
+ });
21
+ let active = $state("");
22
+ let browserOpen = $state(true);
23
+ let draft = $state("");
24
+ let seed = $state("");
25
+ let resolved = $state(false);
26
+ let loaded = "";
27
+ let requested = $state("");
28
+ const compact = new MediaQuery("(max-width: 700px)");
29
+ const files = $derived(
30
+ snapshot.proposal?.conflicts.map((path) => ({ path })) ?? [],
31
+ );
32
+ const detail = $derived(
33
+ snapshot.conflict?.path === active ? snapshot.conflict : undefined,
34
+ );
35
+ const text = $derived(
36
+ detail?.terms.length === 3 &&
37
+ detail.terms.every(
38
+ (term) =>
39
+ term.kind === "text" &&
40
+ term.executable === detail.terms[0].executable,
41
+ ),
42
+ );
43
+ onMount(() => controller.subscribe((next) => (snapshot = next)));
44
+ $effect(() => {
45
+ if (!open || snapshot.busy || !files.length) return;
46
+ const path = files.some((file) => file.path === active)
47
+ ? active
48
+ : files[0].path;
49
+ if (active !== path) active = path;
50
+ if (detail) {
51
+ const key = `${snapshot.proposal?.candidate?.commit}:${path}`;
52
+ if (loaded !== key) {
53
+ loaded = key;
54
+ draft = detail.terms[1]?.text ?? "";
55
+ seed = draft;
56
+ resolved = false;
57
+ }
58
+ } else {
59
+ const key = `${snapshot.proposal?.candidate?.commit}:${path}`;
60
+ if (requested !== key) {
61
+ requested = key;
62
+ untrack(() => void controller.inspect(path));
63
+ }
64
+ }
65
+ });
66
+ $effect(() => {
67
+ if (compact.current) browserOpen = false;
68
+ });
69
+ $effect(() => {
70
+ if (open && !snapshot.busy && !files.length) untrack(onClose);
71
+ });
72
+ </script>
73
+
74
+ <RepositoryConflictSurface
75
+ {open}
76
+ label="Resolve backup synchronization conflicts"
77
+ busy={snapshot.busy}
78
+ locked={snapshot.busy}
79
+ bind:browserOpen
80
+ compact={compact.current}
81
+ {files}
82
+ activePath={active}
83
+ onSelect={(path) => {
84
+ active = path;
85
+ if (compact.current) browserOpen = false;
86
+ }}
87
+ {onClose}
88
+ >
89
+ {#snippet actions()}
90
+ {#if detail}<Button
91
+ size="sm"
92
+ disabled={snapshot.busy || !text || !resolved}
93
+ onclick={() =>
94
+ controller.resolve(active, {
95
+ kind: "text",
96
+ text: draft,
97
+ executable: detail?.terms[0].executable ?? false,
98
+ })}>Save resolution</Button
99
+ >
100
+ <Button
101
+ variant="outline"
102
+ size="sm"
103
+ disabled={snapshot.busy}
104
+ onclick={() => controller.resolve(active, { kind: "delete" })}
105
+ >Delete file</Button
106
+ >{/if}
107
+ {/snippet}
108
+ {#if !detail}
109
+ {#if snapshot.busy}<RepositorySkeleton
110
+ kind="conflicts"
111
+ label="Loading synchronization conflict"
112
+ />
113
+ {:else}<section class="unsupported">
114
+ <p>Conflict details are unavailable.</p>
115
+ <Button
116
+ variant="outline"
117
+ size="sm"
118
+ onclick={() => controller.inspect(active)}
119
+ >Retry conflict details</Button
120
+ >
121
+ </section>{/if}
122
+ {:else if text}<RepositoryConflictText
123
+ path={active}
124
+ left={detail.terms[0].text ?? ""}
125
+ base={seed}
126
+ right={detail.terms[2].text ?? ""}
127
+ editable
128
+ onResolvedChange={({ content, resolved: complete }) => {
129
+ draft = content;
130
+ resolved = complete;
131
+ }}
132
+ />
133
+ {:else}<section class="unsupported">
134
+ <p>Choose a retained version for this file.</p>
135
+ {#each detail.terms.filter((term) => term.role === "add") as term}<Button
136
+ variant="outline"
137
+ size="sm"
138
+ disabled={snapshot.busy || term.kind === "unsupported"}
139
+ onclick={() =>
140
+ controller.resolve(active, { kind: "term", id: term.id })}
141
+ >Use {term.id === 0 ? "local" : "remote"} version ({term.kind})</Button
142
+ >{/each}
143
+ </section>{/if}
144
+ </RepositoryConflictSurface>
145
+
146
+ <style>
147
+ .unsupported {
148
+ padding: 1rem;
149
+ display: flex;
150
+ flex-wrap: wrap;
151
+ gap: 0.5rem;
152
+ align-items: center;
153
+ }
154
+ p {
155
+ flex-basis: 100%;
156
+ font-size: 0.8rem;
157
+ }
158
+ </style>
@@ -0,0 +1,9 @@
1
+ import type { SyncController } from "../../controllers/sync-controller.js";
2
+ type $$ComponentProps = {
3
+ controller: SyncController;
4
+ open: boolean;
5
+ onClose(): void;
6
+ };
7
+ declare const SyncConflictEditor: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type SyncConflictEditor = ReturnType<typeof SyncConflictEditor>;
9
+ export default SyncConflictEditor;
@@ -0,0 +1,97 @@
1
+ <script lang="ts">
2
+ import { onMount } from "svelte";
3
+ import { Button } from "@lapismd/design-core/shadcn/button";
4
+ import { Switch } from "@lapismd/design-core/shadcn/switch";
5
+ import * as Field from "@lapismd/design-core/shadcn/field";
6
+ import BackupCard from "./BackupCard.svelte";
7
+ import RefreshCw from "@lucide/svelte/icons/refresh-cw";
8
+ import GitMerge from "@lucide/svelte/icons/git-merge";
9
+ import type { SyncController } from "../../controllers/sync-controller.js";
10
+ import type { SyncState } from "../../controllers/sync.js";
11
+ let {
12
+ controller,
13
+ setEnabled,
14
+ onReview,
15
+ }: {
16
+ controller: SyncController;
17
+ setEnabled(enabled: boolean): Promise<void>;
18
+ onReview(): void;
19
+ } = $props();
20
+ let snapshot = $state<SyncState>({
21
+ busy: false,
22
+ phase: "ready",
23
+ enabled: true,
24
+ recovery: false,
25
+ });
26
+ onMount(() => controller.subscribe((next) => (snapshot = next)));
27
+ const descriptions = {
28
+ ready:
29
+ "Local history is safe. Connected backups synchronize in the background.",
30
+ fetching: "Fetching and merging remote history…",
31
+ applying: "Applying merged files safely…",
32
+ publishing: "Publishing the selected backup branch…",
33
+ conflicts:
34
+ "Local and remote edits need review. Current files have been preserved.",
35
+ attention:
36
+ "Synchronization needs attention. Your local history remains available.",
37
+ paused:
38
+ "Remote synchronization is paused. Local history remains independent.",
39
+ };
40
+ </script>
41
+
42
+ <BackupCard
43
+ title="Automatic synchronization"
44
+ Icon={RefreshCw}
45
+ description={descriptions[snapshot.phase]}
46
+ >
47
+ <div class="sync-actions">
48
+ <Field.Field orientation="horizontal" data-disabled={snapshot.busy}
49
+ ><Switch
50
+ id="automatic-vault-sync"
51
+ checked={snapshot.enabled}
52
+ disabled={snapshot.busy}
53
+ onCheckedChange={(checked) => void setEnabled(checked)}
54
+ /><Field.Label for="automatic-vault-sync"
55
+ >Synchronize the connected backup automatically</Field.Label
56
+ ></Field.Field
57
+ >
58
+ <Button
59
+ variant="outline"
60
+ size="sm"
61
+ disabled={snapshot.busy || !snapshot.enabled}
62
+ onclick={() => controller.run()}
63
+ ><RefreshCw data-icon="inline-start" />Sync now</Button
64
+ >
65
+ {#if snapshot.proposal?.conflicts.length}<Button
66
+ variant="outline"
67
+ size="sm"
68
+ disabled={snapshot.busy}
69
+ onclick={onReview}
70
+ ><GitMerge data-icon="inline-start" />Review {snapshot.proposal
71
+ .conflicts.length} conflicts</Button
72
+ >{/if}
73
+ {#if snapshot.recovery}<Button
74
+ variant="outline"
75
+ size="sm"
76
+ disabled={snapshot.busy}
77
+ onclick={() => controller.keepCurrent()}>Keep current files</Button
78
+ >{/if}
79
+ </div>
80
+ {#if snapshot.lastSuccess}<p>
81
+ Last synchronized {new Date(snapshot.lastSuccess).toLocaleTimeString()}
82
+ </p>{/if}
83
+ </BackupCard>
84
+
85
+ <style>
86
+ .sync-actions {
87
+ display: flex;
88
+ flex-wrap: wrap;
89
+ align-items: center;
90
+ gap: 0.75rem;
91
+ }
92
+ p {
93
+ color: var(--muted-foreground);
94
+ font-size: 0.75rem;
95
+ margin: 0.75rem 0 0;
96
+ }
97
+ </style>
@@ -0,0 +1,9 @@
1
+ import type { SyncController } from "../../controllers/sync-controller.js";
2
+ type $$ComponentProps = {
3
+ controller: SyncController;
4
+ setEnabled(enabled: boolean): Promise<void>;
5
+ onReview(): void;
6
+ };
7
+ declare const SyncSettings: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type SyncSettings = ReturnType<typeof SyncSettings>;
9
+ export default SyncSettings;
@@ -0,0 +1,7 @@
1
+ import type { RepositoryPlugin } from "../repository-plugin.js";
2
+ import type { AdoptionService } from "../../controllers/adoption.js";
3
+ import { AdoptionController } from "../../controllers/adoption-controller.js";
4
+ export declare function adoptionSettings(plugin: RepositoryPlugin, service?: AdoptionService): {
5
+ controller: AdoptionController;
6
+ close(): Promise<void>;
7
+ } | undefined;
@@ -0,0 +1,42 @@
1
+ import { adoptionRequest } from "../../controllers/adoption.js";
2
+ import { AdoptionController } from "../../controllers/adoption-controller.js";
3
+ import { updateRepositoryData } from "../../controllers/plugin-data.js";
4
+ import { BackgroundWork } from "../../controllers/background-work.js";
5
+ export function adoptionSettings(plugin, service) {
6
+ if (!service)
7
+ return;
8
+ const controller = new AdoptionController(service, {
9
+ async load() {
10
+ const saved = (await plugin.loadData())?.historyAdoption;
11
+ return saved == null ? undefined : adoptionRequest(saved);
12
+ },
13
+ async save(request) {
14
+ await updateRepositoryData(plugin, {
15
+ historyAdoption: request ?? null,
16
+ });
17
+ },
18
+ }, plugin.feedback("Import original history", "repository-history:adoption"), async (action) => {
19
+ let phase;
20
+ const stop = plugin.backup?.controller.subscribe((state) => {
21
+ phase = state.phase;
22
+ });
23
+ stop?.();
24
+ if (!plugin.backup || phase === "closed")
25
+ throw new Error("Enable automatic local history before importing original history");
26
+ return plugin.app.fileEditingSessions.guard(undefined, async () => {
27
+ await plugin.backup?.sync?.controller.drained();
28
+ return action();
29
+ });
30
+ });
31
+ const progress = new BackgroundWork(plugin.app.notifications, plugin.id).follow("Importing original history", {
32
+ subscribe: (listener) => controller.subscribeActivity(listener),
33
+ });
34
+ return {
35
+ controller,
36
+ async close() {
37
+ controller.close();
38
+ await controller.drained();
39
+ progress();
40
+ },
41
+ };
42
+ }
@@ -0,0 +1,35 @@
1
+ import type { WorkspaceCustomSetting } from "@lapis-notes/api";
2
+ import type { ComponentProps } from "svelte";
3
+ import { ForgeController } from "../../controllers/forge-controller.js";
4
+ import type { RepositoryServices } from "../../controllers/history-reader.js";
5
+ import { RemoteController } from "../../controllers/remote-controller.js";
6
+ import type { RepositoryPlugin } from "../repository-plugin.js";
7
+ import type BackupSettings from "./BackupSettings.svelte";
8
+ export declare const BACKUP_SETTINGS = "repository-history.remoteBackup";
9
+ export type BackupSettingsFieldDefinition = WorkspaceCustomSetting & {
10
+ openPanel(): BackupSettingsPanel;
11
+ };
12
+ export type BackupSettingsPanel = {
13
+ props: ComponentProps<typeof BackupSettings>;
14
+ close(): Promise<void>;
15
+ report(error: unknown): void;
16
+ };
17
+ export declare function openBackupSettings(plugin: RepositoryPlugin): void;
18
+ /** Each visible settings panel owns transient accounts; durable work stays plugin-owned. */
19
+ export declare function createBackupSettings(plugin: RepositoryPlugin, services: RepositoryServices): {
20
+ field: BackupSettingsFieldDefinition;
21
+ openPanel: () => {
22
+ props: {
23
+ controller: ForgeController;
24
+ remote: RemoteController | undefined;
25
+ restore: import("../../controllers/restore.js").RestoreController | undefined;
26
+ storage: import("../../controllers/storage-controller.js").StorageController | undefined;
27
+ adoption: import("../../controllers/adoption-controller.js").AdoptionController | undefined;
28
+ sync: import("../../controllers/sync-controller.js").SyncController | undefined;
29
+ setSyncEnabled: (enabled: boolean) => Promise<void>;
30
+ };
31
+ close(): Promise<void>;
32
+ report: (error: unknown) => void;
33
+ };
34
+ close(): Promise<void>;
35
+ } | undefined;
@@ -0,0 +1,96 @@
1
+ import { getWorkspaceHostBinding } from "@lapis-notes/api/workspace-host";
2
+ import { ForgeController } from "../../controllers/forge-controller.js";
3
+ import { RemoteController } from "../../controllers/remote-controller.js";
4
+ import { BackgroundWork } from "../../controllers/background-work.js";
5
+ import BackupSettingsField from "./BackupSettingsField.svelte";
6
+ import { createRemoteRestore } from "./remote-restore.js";
7
+ import { adoptionSettings } from "./adoption-settings.js";
8
+ import { storageSettings } from "./storage-settings.js";
9
+ export const BACKUP_SETTINGS = "repository-history.remoteBackup";
10
+ export function openBackupSettings(plugin) {
11
+ getWorkspaceHostBinding(plugin.app.workspace).controller.settings.open({
12
+ sectionId: "repository-history",
13
+ fieldId: BACKUP_SETTINGS,
14
+ });
15
+ }
16
+ /** Each visible settings panel owns transient accounts; durable work stays plugin-owned. */
17
+ export function createBackupSettings(plugin, services) {
18
+ if (!services.forges)
19
+ return;
20
+ const sessions = new Set();
21
+ const storage = storageSettings(plugin, services.storage);
22
+ const adoption = adoptionSettings(plugin, services.adoption);
23
+ const activity = new BackgroundWork(plugin.app.notifications, plugin.id);
24
+ const forges = services.forges;
25
+ function openPanel() {
26
+ const controller = new ForgeController(forges, plugin.feedback("Forge accounts", "repository-history:forge-accounts"));
27
+ const progress = activity.follow("Connecting forge accounts", {
28
+ subscribe: (listener) => controller.subscribeActivity(listener),
29
+ });
30
+ const remote = services.remote
31
+ ? new RemoteController(services.remote, plugin.feedback("Remote backup", "repository-history:remote"))
32
+ : undefined;
33
+ const restore = services.remote
34
+ ? createRemoteRestore(plugin, services.remote)
35
+ : undefined;
36
+ const remoteProgress = remote &&
37
+ activity.follow("Remote vault backup", {
38
+ subscribe: (listener) => remote.subscribeActivity(listener),
39
+ });
40
+ let closing;
41
+ const panel = {
42
+ props: {
43
+ controller,
44
+ remote,
45
+ restore,
46
+ storage: storage?.controller,
47
+ adoption: adoption?.controller,
48
+ sync: plugin.backup?.sync?.controller,
49
+ setSyncEnabled: (enabled) => plugin
50
+ .backup.sync.setEnabled(enabled)
51
+ .catch((error) => plugin.report(error)),
52
+ },
53
+ close() {
54
+ return (closing ??= (async () => {
55
+ remote?.close();
56
+ restore?.close();
57
+ await controller.close();
58
+ // Fence replies now; account networking must not hold vault closure.
59
+ // Progress remains owned until the actual native operations drain.
60
+ void Promise.allSettled([
61
+ controller.drained(),
62
+ remote?.drained(),
63
+ ]).then(() => {
64
+ progress();
65
+ remoteProgress?.();
66
+ sessions.delete(panel);
67
+ });
68
+ })());
69
+ },
70
+ report: (error) => plugin.report(error),
71
+ };
72
+ sessions.add(panel);
73
+ return panel;
74
+ }
75
+ plugin.addCommand({
76
+ id: "open-backup-settings",
77
+ name: "Open Repository Backup Settings",
78
+ callback: () => openBackupSettings(plugin),
79
+ });
80
+ const field = {
81
+ id: BACKUP_SETTINGS,
82
+ type: "custom",
83
+ title: "Backup and synchronisation",
84
+ presentation: "full-width",
85
+ component: BackupSettingsField,
86
+ openPanel,
87
+ };
88
+ return {
89
+ field,
90
+ openPanel,
91
+ async close() {
92
+ await Promise.allSettled([...sessions].map((panel) => panel.close()));
93
+ await Promise.all([storage?.close(), adoption?.close()]);
94
+ },
95
+ };
96
+ }
@@ -0,0 +1,10 @@
1
+ export declare const forgeIcons: {
2
+ readonly github: {
3
+ readonly name: "GitHub";
4
+ readonly path: "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12";
5
+ };
6
+ readonly forgejo: {
7
+ readonly name: "Forgejo";
8
+ readonly path: "M16.7773 0c1.6018 0 2.9004 1.2986 2.9004 2.9005s-1.2986 2.9004-2.9004 2.9004c-1.0854 0-2.0315-.596-2.5288-1.4787H12.91c-2.3322 0-4.2272 1.8718-4.2649 4.195l-.0007 2.1175a7.0759 7.0759 0 0 1 4.148-1.4205l.1176-.001 1.3385.0002c.4973-.8827 1.4434-1.4788 2.5288-1.4788 1.6018 0 2.9004 1.2986 2.9004 2.9005s-1.2986 2.9004-2.9004 2.9004c-1.0854 0-2.0315-.596-2.5288-1.4787H12.91c-2.3322 0-4.2272 1.8718-4.2649 4.195l-.0007 2.319c.8827.4973 1.4788 1.4434 1.4788 2.5287 0 1.602-1.2986 2.9005-2.9005 2.9005-1.6018 0-2.9004-1.2986-2.9004-2.9005 0-1.0853.596-2.0314 1.4788-2.5287l-.0002-9.9831c0-3.887 3.1195-7.0453 6.9915-7.108l.1176-.001h1.3385C14.7458.5962 15.692 0 16.7773 0ZM7.2227 19.9052c-.6596 0-1.1943.5347-1.1943 1.1943s.5347 1.1943 1.1943 1.1943 1.1944-.5347 1.1944-1.1943-.5348-1.1943-1.1944-1.1943Zm9.5546-10.4644c-.6596 0-1.1944.5347-1.1944 1.1943s.5348 1.1943 1.1944 1.1943c.6596 0 1.1943-.5347 1.1943-1.1943s-.5347-1.1943-1.1943-1.1943Zm0-7.7346c-.6596 0-1.1944.5347-1.1944 1.1943s.5348 1.1943 1.1944 1.1943c.6596 0 1.1943-.5347 1.1943-1.1943s-.5347-1.1943-1.1943-1.1943Z";
9
+ };
10
+ };
@@ -0,0 +1,11 @@
1
+ // Copied from jj-store site-icons.ts; Simple Icons, CC0-1.0. See docs/provenance.json.
2
+ export const forgeIcons = {
3
+ github: {
4
+ name: "GitHub",
5
+ path: "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12",
6
+ },
7
+ forgejo: {
8
+ name: "Forgejo",
9
+ path: "M16.7773 0c1.6018 0 2.9004 1.2986 2.9004 2.9005s-1.2986 2.9004-2.9004 2.9004c-1.0854 0-2.0315-.596-2.5288-1.4787H12.91c-2.3322 0-4.2272 1.8718-4.2649 4.195l-.0007 2.1175a7.0759 7.0759 0 0 1 4.148-1.4205l.1176-.001 1.3385.0002c.4973-.8827 1.4434-1.4788 2.5288-1.4788 1.6018 0 2.9004 1.2986 2.9004 2.9005s-1.2986 2.9004-2.9004 2.9004c-1.0854 0-2.0315-.596-2.5288-1.4787H12.91c-2.3322 0-4.2272 1.8718-4.2649 4.195l-.0007 2.319c.8827.4973 1.4788 1.4434 1.4788 2.5287 0 1.602-1.2986 2.9005-2.9005 2.9005-1.6018 0-2.9004-1.2986-2.9004-2.9005 0-1.0853.596-2.0314 1.4788-2.5287l-.0002-9.9831c0-3.887 3.1195-7.0453 6.9915-7.108l.1176-.001h1.3385C14.7458.5962 15.692 0 16.7773 0ZM7.2227 19.9052c-.6596 0-1.1943.5347-1.1943 1.1943s.5347 1.1943 1.1943 1.1943 1.1944-.5347 1.1944-1.1943-.5348-1.1943-1.1944-1.1943Zm9.5546-10.4644c-.6596 0-1.1944.5347-1.1944 1.1943s.5348 1.1943 1.1944 1.1943c.6596 0 1.1943-.5347 1.1943-1.1943s-.5347-1.1943-1.1943-1.1943Zm0-7.7346c-.6596 0-1.1944.5347-1.1944 1.1943s.5348 1.1943 1.1944 1.1943c.6596 0 1.1943-.5347 1.1943-1.1943s-.5347-1.1943-1.1943-1.1943Z",
10
+ },
11
+ };
@@ -0,0 +1,3 @@
1
+ import type { RepositoryPlugin } from "../repository-plugin.js";
2
+ import type { RemoteService } from "../../controllers/remote.js";
3
+ export declare function createRemoteRestore(plugin: RepositoryPlugin, remote: RemoteService): import("../../controllers/restore.js").RestoreController | undefined;
@@ -0,0 +1,17 @@
1
+ import { remoteRestore } from "../../controllers/remote.js";
2
+ import { BackgroundWork } from "../../controllers/background-work.js";
3
+ import { createRestoreController } from "../restore-controller.js";
4
+ export function createRemoteRestore(plugin, remote) {
5
+ const service = remoteRestore(remote);
6
+ const activity = new BackgroundWork(plugin.app.notifications, plugin.id);
7
+ return createRestoreController(plugin, {
8
+ key: "pendingRemoteRestore",
9
+ title: "Restore remote backup",
10
+ service: {
11
+ ...service,
12
+ previewVault: (checkpoint) => activity.run("Preparing remote restore", () => remote.preview(checkpoint)),
13
+ applyVault: (request) => activity.run("Restoring remote backup", () => remote.restore(request)),
14
+ keepCurrent: () => activity.run("Keeping current vault files", () => remote.keepCurrent()),
15
+ },
16
+ });
17
+ }
@@ -0,0 +1,8 @@
1
+ import type { RepositoryPlugin } from "../repository-plugin.js";
2
+ import type { StorageService } from "../../controllers/storage.js";
3
+ import { StorageController } from "../../controllers/storage-controller.js";
4
+ /** A move belongs to the enabled plugin, not the tab that requested it. */
5
+ export declare function storageSettings(plugin: RepositoryPlugin, service?: StorageService): {
6
+ controller: StorageController;
7
+ close(): Promise<void>;
8
+ } | undefined;
@@ -0,0 +1,23 @@
1
+ import { StorageController } from "../../controllers/storage-controller.js";
2
+ import { BackgroundWork } from "../../controllers/background-work.js";
3
+ /** A move belongs to the enabled plugin, not the tab that requested it. */
4
+ export function storageSettings(plugin, service) {
5
+ if (!service)
6
+ return undefined;
7
+ const controller = new StorageController(service, plugin.feedback("History storage", "repository-history:storage"), (action) => plugin.app.fileEditingSessions.guard(undefined, async () => {
8
+ await plugin.backup?.controller.pause();
9
+ await plugin.backup?.sync?.controller.drained();
10
+ return action();
11
+ }));
12
+ const progress = new BackgroundWork(plugin.app.notifications, plugin.id).follow("Moving history storage", {
13
+ subscribe: (listener) => controller.subscribeActivity(listener),
14
+ });
15
+ return {
16
+ controller,
17
+ async close() {
18
+ controller.close();
19
+ await controller.drained();
20
+ progress();
21
+ },
22
+ };
23
+ }