@lapis-notes/history 0.1.2 → 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 (334) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE.md +3 -7
  3. package/README.md +2 -2
  4. package/dist/history-compare-panel.css +28 -6
  5. package/dist/history-compare-panel.svelte +115 -108
  6. package/dist/repository/NOTICE.md +11 -0
  7. package/dist/repository/components/RepositoryAuthorAvatar.svelte +77 -0
  8. package/dist/repository/components/RepositoryAuthorAvatar.svelte.d.ts +11 -0
  9. package/dist/repository/components/RepositoryBackupStatus.svelte +236 -0
  10. package/dist/repository/components/RepositoryBackupStatus.svelte.d.ts +11 -0
  11. package/dist/repository/components/RepositoryChangedFiles.svelte +104 -0
  12. package/dist/repository/components/RepositoryChangedFiles.svelte.d.ts +13 -0
  13. package/dist/repository/components/RepositoryCommitMessage.svelte +93 -0
  14. package/dist/repository/components/RepositoryCommitMessage.svelte.d.ts +6 -0
  15. package/dist/repository/components/RepositoryCommitPicker.svelte +205 -0
  16. package/dist/repository/components/RepositoryCommitPicker.svelte.d.ts +17 -0
  17. package/dist/repository/components/RepositoryComparisonBar.svelte +71 -0
  18. package/dist/repository/components/RepositoryComparisonBar.svelte.d.ts +9 -0
  19. package/dist/repository/components/RepositoryComparisonTime.svelte +32 -0
  20. package/dist/repository/components/RepositoryComparisonTime.svelte.d.ts +6 -0
  21. package/dist/repository/components/RepositoryDiff.svelte +56 -0
  22. package/dist/repository/components/RepositoryDiff.svelte.d.ts +11 -0
  23. package/dist/repository/components/RepositoryDiffColumn.svelte +78 -0
  24. package/dist/repository/components/RepositoryDiffColumn.svelte.d.ts +14 -0
  25. package/dist/repository/components/RepositoryDiffControls.svelte +117 -0
  26. package/dist/repository/components/RepositoryDiffControls.svelte.d.ts +8 -0
  27. package/dist/repository/components/RepositoryFileHistory.svelte +170 -0
  28. package/dist/repository/components/RepositoryFileHistory.svelte.d.ts +10 -0
  29. package/dist/repository/components/RepositoryFileTitle.svelte +30 -0
  30. package/dist/repository/components/RepositoryFileTitle.svelte.d.ts +6 -0
  31. package/dist/repository/components/RepositoryGraph.svelte +216 -0
  32. package/dist/repository/components/RepositoryGraph.svelte.d.ts +19 -0
  33. package/dist/repository/components/RepositoryGraphSvg.svelte +110 -0
  34. package/dist/repository/components/RepositoryGraphSvg.svelte.d.ts +11 -0
  35. package/dist/repository/components/RepositoryIdentifiers.svelte +221 -0
  36. package/dist/repository/components/RepositoryIdentifiers.svelte.d.ts +15 -0
  37. package/dist/repository/components/RepositoryLogHeader.svelte +90 -0
  38. package/dist/repository/components/RepositoryLogHeader.svelte.d.ts +23 -0
  39. package/dist/repository/components/RepositoryOperationArguments.svelte +52 -0
  40. package/dist/repository/components/RepositoryOperationArguments.svelte.d.ts +6 -0
  41. package/dist/repository/components/RepositoryOperationColumn.svelte +163 -0
  42. package/dist/repository/components/RepositoryOperationColumn.svelte.d.ts +11 -0
  43. package/dist/repository/components/RepositoryOperationFiles.svelte +245 -0
  44. package/dist/repository/components/RepositoryOperationFiles.svelte.d.ts +14 -0
  45. package/dist/repository/components/RepositoryOperationMessage.svelte +169 -0
  46. package/dist/repository/components/RepositoryOperationMessage.svelte.d.ts +10 -0
  47. package/dist/repository/components/RepositoryOperationOption.svelte +183 -0
  48. package/dist/repository/components/RepositoryOperationOption.svelte.d.ts +10 -0
  49. package/dist/repository/components/RepositoryOperationParentPicker.svelte +188 -0
  50. package/dist/repository/components/RepositoryOperationParentPicker.svelte.d.ts +14 -0
  51. package/dist/repository/components/RepositoryOperationPinPicker.svelte +170 -0
  52. package/dist/repository/components/RepositoryOperationPinPicker.svelte.d.ts +13 -0
  53. package/dist/repository/components/RepositoryOperationRail.svelte +136 -0
  54. package/dist/repository/components/RepositoryOperationRail.svelte.d.ts +9 -0
  55. package/dist/repository/components/RepositoryOperationTarget.svelte +99 -0
  56. package/dist/repository/components/RepositoryOperationTarget.svelte.d.ts +8 -0
  57. package/dist/repository/components/RepositoryOperations.svelte +199 -0
  58. package/dist/repository/components/RepositoryOperations.svelte.d.ts +12 -0
  59. package/dist/repository/components/RepositoryPanel.svelte +207 -0
  60. package/dist/repository/components/RepositoryPanel.svelte.d.ts +15 -0
  61. package/dist/repository/components/RepositoryParentSummary.svelte +52 -0
  62. package/dist/repository/components/RepositoryParentSummary.svelte.d.ts +10 -0
  63. package/dist/repository/components/RepositoryPickerSearch.svelte +51 -0
  64. package/dist/repository/components/RepositoryPickerSearch.svelte.d.ts +11 -0
  65. package/dist/repository/components/RepositoryRestoreDialog.svelte +81 -0
  66. package/dist/repository/components/RepositoryRestoreDialog.svelte.d.ts +7 -0
  67. package/dist/repository/components/RepositoryRevisionActions.svelte +53 -0
  68. package/dist/repository/components/RepositoryRevisionActions.svelte.d.ts +9 -0
  69. package/dist/repository/components/RepositoryRevisionFiles.svelte +110 -0
  70. package/dist/repository/components/RepositoryRevisionFiles.svelte.d.ts +14 -0
  71. package/dist/repository/components/RepositoryRevisionOption.svelte +60 -0
  72. package/dist/repository/components/RepositoryRevisionOption.svelte.d.ts +9 -0
  73. package/dist/repository/components/RepositoryRevisionPicker.svelte +165 -0
  74. package/dist/repository/components/RepositoryRevisionPicker.svelte.d.ts +14 -0
  75. package/dist/repository/components/RepositoryRevisions.svelte +115 -0
  76. package/dist/repository/components/RepositoryRevisions.svelte.d.ts +20 -0
  77. package/dist/repository/components/RepositoryShell.svelte +44 -0
  78. package/dist/repository/components/RepositoryShell.svelte.d.ts +11 -0
  79. package/dist/repository/components/RepositorySkeleton.svelte +138 -0
  80. package/dist/repository/components/RepositorySkeleton.svelte.d.ts +7 -0
  81. package/dist/repository/components/RepositorySourcePicker.svelte +114 -0
  82. package/dist/repository/components/RepositorySourcePicker.svelte.d.ts +7 -0
  83. package/dist/repository/components/RepositoryUpstreamActions.svelte +125 -0
  84. package/dist/repository/components/RepositoryUpstreamActions.svelte.d.ts +8 -0
  85. package/dist/repository/components/RepositoryWorkingCopyStatus.svelte +290 -0
  86. package/dist/repository/components/RepositoryWorkingCopyStatus.svelte.d.ts +11 -0
  87. package/dist/repository/components/RepositoryWorkspacePicker.svelte +158 -0
  88. package/dist/repository/components/RepositoryWorkspacePicker.svelte.d.ts +11 -0
  89. package/dist/repository/components/backup/AdoptionSettings.svelte +95 -0
  90. package/dist/repository/components/backup/AdoptionSettings.svelte.d.ts +7 -0
  91. package/dist/repository/components/backup/BackupCard.svelte +79 -0
  92. package/dist/repository/components/backup/BackupCard.svelte.d.ts +14 -0
  93. package/dist/repository/components/backup/BackupField.svelte +45 -0
  94. package/dist/repository/components/backup/BackupField.svelte.d.ts +10 -0
  95. package/dist/repository/components/backup/BackupSelect.svelte +71 -0
  96. package/dist/repository/components/backup/BackupSelect.svelte.d.ts +35 -0
  97. package/dist/repository/components/backup/BackupSettings.svelte +122 -0
  98. package/dist/repository/components/backup/BackupSettings.svelte.d.ts +18 -0
  99. package/dist/repository/components/backup/BackupSettingsField.svelte +13 -0
  100. package/dist/repository/components/backup/BackupSettingsField.svelte.d.ts +4 -0
  101. package/dist/repository/components/backup/ForgeAccounts.svelte +231 -0
  102. package/dist/repository/components/backup/ForgeAccounts.svelte.d.ts +9 -0
  103. package/dist/repository/components/backup/ForgeAuthorization.svelte +267 -0
  104. package/dist/repository/components/backup/ForgeAuthorization.svelte.d.ts +9 -0
  105. package/dist/repository/components/backup/ForgeIcon.svelte +21 -0
  106. package/dist/repository/components/backup/ForgeIcon.svelte.d.ts +7 -0
  107. package/dist/repository/components/backup/PublicationRecovery.svelte +129 -0
  108. package/dist/repository/components/backup/PublicationRecovery.svelte.d.ts +11 -0
  109. package/dist/repository/components/backup/RemoteSettings.svelte +288 -0
  110. package/dist/repository/components/backup/RemoteSettings.svelte.d.ts +11 -0
  111. package/dist/repository/components/backup/RepositorySettingsPage.svelte +51 -0
  112. package/dist/repository/components/backup/RepositorySettingsPage.svelte.d.ts +4 -0
  113. package/dist/repository/components/backup/StorageSettings.svelte +158 -0
  114. package/dist/repository/components/backup/StorageSettings.svelte.d.ts +7 -0
  115. package/dist/repository/components/backup/SyncConflictEditor.svelte +158 -0
  116. package/dist/repository/components/backup/SyncConflictEditor.svelte.d.ts +9 -0
  117. package/dist/repository/components/backup/SyncSettings.svelte +97 -0
  118. package/dist/repository/components/backup/SyncSettings.svelte.d.ts +9 -0
  119. package/dist/repository/components/backup/adoption-settings.d.ts +7 -0
  120. package/dist/repository/components/backup/adoption-settings.js +42 -0
  121. package/dist/repository/components/backup/backup-settings.d.ts +35 -0
  122. package/dist/repository/components/backup/backup-settings.js +96 -0
  123. package/dist/repository/components/backup/forge-icons.d.ts +10 -0
  124. package/dist/repository/components/backup/forge-icons.js +11 -0
  125. package/dist/repository/components/backup/remote-restore.d.ts +3 -0
  126. package/dist/repository/components/backup/remote-restore.js +17 -0
  127. package/dist/repository/components/backup/storage-settings.d.ts +8 -0
  128. package/dist/repository/components/backup/storage-settings.js +23 -0
  129. package/dist/repository/components/blame/RepositoryBlameCommitTitle.svelte +212 -0
  130. package/dist/repository/components/blame/RepositoryBlameCommitTitle.svelte.d.ts +14 -0
  131. package/dist/repository/components/blame/RepositoryBlameGroup.svelte +189 -0
  132. package/dist/repository/components/blame/RepositoryBlameGroup.svelte.d.ts +20 -0
  133. package/dist/repository/components/blame/RepositoryBlamePanel.svelte +148 -0
  134. package/dist/repository/components/blame/RepositoryBlamePanel.svelte.d.ts +13 -0
  135. package/dist/repository/components/blame/RepositoryBlameRows.svelte +137 -0
  136. package/dist/repository/components/blame/RepositoryBlameRows.svelte.d.ts +32 -0
  137. package/dist/repository/components/blame/RepositoryBlameView.svelte +121 -0
  138. package/dist/repository/components/blame/RepositoryBlameView.svelte.d.ts +16 -0
  139. package/dist/repository/components/blame/blame-view.d.ts +16 -0
  140. package/dist/repository/components/blame/blame-view.js +73 -0
  141. package/dist/repository/components/blame/editor-actions.d.ts +3 -0
  142. package/dist/repository/components/blame/editor-actions.js +53 -0
  143. package/dist/repository/components/conflicts/RepositoryConflictActions.svelte +83 -0
  144. package/dist/repository/components/conflicts/RepositoryConflictActions.svelte.d.ts +13 -0
  145. package/dist/repository/components/conflicts/RepositoryConflictBody.svelte +93 -0
  146. package/dist/repository/components/conflicts/RepositoryConflictBody.svelte.d.ts +16 -0
  147. package/dist/repository/components/conflicts/RepositoryConflictFileTree.svelte +84 -0
  148. package/dist/repository/components/conflicts/RepositoryConflictFileTree.svelte.d.ts +21 -0
  149. package/dist/repository/components/conflicts/RepositoryConflictPath.svelte +35 -0
  150. package/dist/repository/components/conflicts/RepositoryConflictPath.svelte.d.ts +9 -0
  151. package/dist/repository/components/conflicts/RepositoryConflictResolution.svelte +133 -0
  152. package/dist/repository/components/conflicts/RepositoryConflictResolution.svelte.d.ts +12 -0
  153. package/dist/repository/components/conflicts/RepositoryConflictSurface.svelte +105 -0
  154. package/dist/repository/components/conflicts/RepositoryConflictSurface.svelte.d.ts +23 -0
  155. package/dist/repository/components/conflicts/RepositoryConflictText.svelte +104 -0
  156. package/dist/repository/components/conflicts/RepositoryConflictText.svelte.d.ts +26 -0
  157. package/dist/repository/components/conflicts/RepositorySidebarToggleIcon.svelte +52 -0
  158. package/dist/repository/components/conflicts/RepositorySidebarToggleIcon.svelte.d.ts +7 -0
  159. package/dist/repository/components/conflicts/repository-conflict-file-tree.css +73 -0
  160. package/dist/repository/components/conflicts/repository-conflicts.css +125 -0
  161. package/dist/repository/components/file-history-view.d.ts +15 -0
  162. package/dist/repository/components/file-history-view.js +110 -0
  163. package/dist/repository/components/operation-view.d.ts +16 -0
  164. package/dist/repository/components/operation-view.js +95 -0
  165. package/dist/repository/components/repository-backup.d.ts +22 -0
  166. package/dist/repository/components/repository-backup.js +75 -0
  167. package/dist/repository/components/repository-column-chrome.css +35 -0
  168. package/dist/repository/components/repository-commit-picker.css +55 -0
  169. package/dist/repository/components/repository-feedback.d.ts +7 -0
  170. package/dist/repository/components/repository-feedback.js +40 -0
  171. package/dist/repository/components/repository-identifiers.css +199 -0
  172. package/dist/repository/components/repository-navigation.d.ts +4 -0
  173. package/dist/repository/components/repository-navigation.js +16 -0
  174. package/dist/repository/components/repository-operation-column.css +112 -0
  175. package/dist/repository/components/repository-picker-options.css +11 -0
  176. package/dist/repository/components/repository-plugin.d.ts +33 -0
  177. package/dist/repository/components/repository-plugin.js +191 -0
  178. package/dist/repository/components/repository-review-identifiers.css +50 -0
  179. package/dist/repository/components/repository-status.d.ts +13 -0
  180. package/dist/repository/components/repository-status.js +227 -0
  181. package/dist/repository/components/repository-sync.d.ts +13 -0
  182. package/dist/repository/components/repository-sync.js +93 -0
  183. package/dist/repository/components/repository-tools.d.ts +3 -0
  184. package/dist/repository/components/repository-tools.js +13 -0
  185. package/dist/repository/components/repository-view.d.ts +16 -0
  186. package/dist/repository/components/repository-view.js +140 -0
  187. package/dist/repository/components/restore-controller.d.ts +9 -0
  188. package/dist/repository/components/restore-controller.js +44 -0
  189. package/dist/repository/components/search/search-provider.d.ts +3 -0
  190. package/dist/repository/components/search/search-provider.js +185 -0
  191. package/dist/repository/controllers/adoption-controller.d.ts +29 -0
  192. package/dist/repository/controllers/adoption-controller.js +145 -0
  193. package/dist/repository/controllers/adoption.d.ts +30 -0
  194. package/dist/repository/controllers/adoption.js +21 -0
  195. package/dist/repository/controllers/ai-history.d.ts +57 -0
  196. package/dist/repository/controllers/ai-history.js +51 -0
  197. package/dist/repository/controllers/author.d.ts +2 -0
  198. package/dist/repository/controllers/author.js +11 -0
  199. package/dist/repository/controllers/background-work.d.ts +14 -0
  200. package/dist/repository/controllers/background-work.js +57 -0
  201. package/dist/repository/controllers/backup-follow.d.ts +5 -0
  202. package/dist/repository/controllers/backup-follow.js +29 -0
  203. package/dist/repository/controllers/backup.d.ts +39 -0
  204. package/dist/repository/controllers/backup.js +129 -0
  205. package/dist/repository/controllers/blame-chunks.d.ts +13 -0
  206. package/dist/repository/controllers/blame-chunks.js +51 -0
  207. package/dist/repository/controllers/blame-controller.d.ts +17 -0
  208. package/dist/repository/controllers/blame-controller.js +148 -0
  209. package/dist/repository/controllers/blame-model.d.ts +25 -0
  210. package/dist/repository/controllers/blame-model.js +31 -0
  211. package/dist/repository/controllers/blame-preferences.d.ts +3 -0
  212. package/dist/repository/controllers/blame-preferences.js +18 -0
  213. package/dist/repository/controllers/commit-cards.d.ts +4 -0
  214. package/dist/repository/controllers/commit-cards.js +38 -0
  215. package/dist/repository/controllers/conflict-menu.d.ts +2 -0
  216. package/dist/repository/controllers/conflict-menu.js +1 -0
  217. package/dist/repository/controllers/file-history-controller.d.ts +29 -0
  218. package/dist/repository/controllers/file-history-controller.js +182 -0
  219. package/dist/repository/controllers/forge-accounts.d.ts +48 -0
  220. package/dist/repository/controllers/forge-accounts.js +1 -0
  221. package/dist/repository/controllers/forge-controller.d.ts +24 -0
  222. package/dist/repository/controllers/forge-controller.js +168 -0
  223. package/dist/repository/controllers/graph/model.d.ts +20 -0
  224. package/dist/repository/controllers/graph/model.js +33 -0
  225. package/dist/repository/controllers/graph/repository-log-graph.d.ts +44 -0
  226. package/dist/repository/controllers/graph/repository-log-graph.js +182 -0
  227. package/dist/repository/controllers/graph/repository-log-lanes.d.ts +7 -0
  228. package/dist/repository/controllers/graph/repository-log-lanes.js +19 -0
  229. package/dist/repository/controllers/graph/revision-id.d.ts +3 -0
  230. package/dist/repository/controllers/graph/revision-id.js +10 -0
  231. package/dist/repository/controllers/history-canvas.d.ts +2 -0
  232. package/dist/repository/controllers/history-canvas.js +45 -0
  233. package/dist/repository/controllers/history-controller.d.ts +31 -0
  234. package/dist/repository/controllers/history-controller.js +238 -0
  235. package/dist/repository/controllers/history-files.d.ts +7 -0
  236. package/dist/repository/controllers/history-files.js +18 -0
  237. package/dist/repository/controllers/history-graph.d.ts +20 -0
  238. package/dist/repository/controllers/history-graph.js +89 -0
  239. package/dist/repository/controllers/history-index-controller.d.ts +22 -0
  240. package/dist/repository/controllers/history-index-controller.js +77 -0
  241. package/dist/repository/controllers/history-lifetime.d.ts +13 -0
  242. package/dist/repository/controllers/history-lifetime.js +40 -0
  243. package/dist/repository/controllers/history-reader.d.ts +22 -0
  244. package/dist/repository/controllers/history-reader.js +1 -0
  245. package/dist/repository/controllers/history-search-expression.d.ts +9 -0
  246. package/dist/repository/controllers/history-search-expression.js +86 -0
  247. package/dist/repository/controllers/history-selection.d.ts +5 -0
  248. package/dist/repository/controllers/history-selection.js +32 -0
  249. package/dist/repository/controllers/history-source.d.ts +10 -0
  250. package/dist/repository/controllers/history-source.js +7 -0
  251. package/dist/repository/controllers/history-state.d.ts +34 -0
  252. package/dist/repository/controllers/history-state.js +55 -0
  253. package/dist/repository/controllers/indexed-search-validation.d.ts +4 -0
  254. package/dist/repository/controllers/indexed-search-validation.js +64 -0
  255. package/dist/repository/controllers/indexed-search.d.ts +11 -0
  256. package/dist/repository/controllers/indexed-search.js +1 -0
  257. package/dist/repository/controllers/log-canvas.d.ts +2 -0
  258. package/dist/repository/controllers/log-canvas.js +25 -0
  259. package/dist/repository/controllers/native-indexed-search.d.ts +4 -0
  260. package/dist/repository/controllers/native-indexed-search.js +10 -0
  261. package/dist/repository/controllers/open-history-revision.d.ts +3 -0
  262. package/dist/repository/controllers/open-history-revision.js +8 -0
  263. package/dist/repository/controllers/operation-command.d.ts +2 -0
  264. package/dist/repository/controllers/operation-command.js +55 -0
  265. package/dist/repository/controllers/operation-controller.d.ts +33 -0
  266. package/dist/repository/controllers/operation-controller.js +267 -0
  267. package/dist/repository/controllers/operation-files.d.ts +33 -0
  268. package/dist/repository/controllers/operation-files.js +182 -0
  269. package/dist/repository/controllers/operation-graph.d.ts +17 -0
  270. package/dist/repository/controllers/operation-graph.js +50 -0
  271. package/dist/repository/controllers/operation-message.d.ts +5 -0
  272. package/dist/repository/controllers/operation-message.js +18 -0
  273. package/dist/repository/controllers/operation-metadata.d.ts +5 -0
  274. package/dist/repository/controllers/operation-metadata.js +26 -0
  275. package/dist/repository/controllers/operation-parent.d.ts +5 -0
  276. package/dist/repository/controllers/operation-parent.js +46 -0
  277. package/dist/repository/controllers/operation-state.d.ts +28 -0
  278. package/dist/repository/controllers/operation-state.js +26 -0
  279. package/dist/repository/controllers/parent-candidates.d.ts +4 -0
  280. package/dist/repository/controllers/parent-candidates.js +27 -0
  281. package/dist/repository/controllers/plugin-data.d.ts +9 -0
  282. package/dist/repository/controllers/plugin-data.js +33 -0
  283. package/dist/repository/controllers/preparation-queue.d.ts +9 -0
  284. package/dist/repository/controllers/preparation-queue.js +55 -0
  285. package/dist/repository/controllers/remote-controller.d.ts +23 -0
  286. package/dist/repository/controllers/remote-controller.js +98 -0
  287. package/dist/repository/controllers/remote.d.ts +48 -0
  288. package/dist/repository/controllers/remote.js +13 -0
  289. package/dist/repository/controllers/restore-recovery.d.ts +3 -0
  290. package/dist/repository/controllers/restore-recovery.js +32 -0
  291. package/dist/repository/controllers/restore.d.ts +66 -0
  292. package/dist/repository/controllers/restore.js +201 -0
  293. package/dist/repository/controllers/revision-comparison.d.ts +20 -0
  294. package/dist/repository/controllers/revision-comparison.js +89 -0
  295. package/dist/repository/controllers/search-controller.d.ts +19 -0
  296. package/dist/repository/controllers/search-controller.js +105 -0
  297. package/dist/repository/controllers/search-page.d.ts +2 -0
  298. package/dist/repository/controllers/search-page.js +39 -0
  299. package/dist/repository/controllers/search.d.ts +51 -0
  300. package/dist/repository/controllers/search.js +8 -0
  301. package/dist/repository/controllers/services.d.ts +7 -0
  302. package/dist/repository/controllers/services.js +24 -0
  303. package/dist/repository/controllers/storage-controller.d.ts +30 -0
  304. package/dist/repository/controllers/storage-controller.js +130 -0
  305. package/dist/repository/controllers/storage.d.ts +26 -0
  306. package/dist/repository/controllers/storage.js +1 -0
  307. package/dist/repository/controllers/sync-application.d.ts +17 -0
  308. package/dist/repository/controllers/sync-application.js +45 -0
  309. package/dist/repository/controllers/sync-controller.d.ts +31 -0
  310. package/dist/repository/controllers/sync-controller.js +300 -0
  311. package/dist/repository/controllers/sync-publication.d.ts +7 -0
  312. package/dist/repository/controllers/sync-publication.js +29 -0
  313. package/dist/repository/controllers/sync-recovery.d.ts +7 -0
  314. package/dist/repository/controllers/sync-recovery.js +27 -0
  315. package/dist/repository/controllers/sync.d.ts +62 -0
  316. package/dist/repository/controllers/sync.js +38 -0
  317. package/dist/repository/controllers/tags.d.ts +7 -0
  318. package/dist/repository/controllers/tags.js +71 -0
  319. package/dist/repository/controllers/transcript-paths.d.ts +2 -0
  320. package/dist/repository/controllers/transcript-paths.js +17 -0
  321. package/dist/repository/controllers/transcript-writers.d.ts +9 -0
  322. package/dist/repository/controllers/transcript-writers.js +37 -0
  323. package/dist/repository/controllers/working-copy-controller.d.ts +22 -0
  324. package/dist/repository/controllers/working-copy-controller.js +58 -0
  325. package/dist/repository/controllers/working-copy-status.d.ts +16 -0
  326. package/dist/repository/controllers/working-copy-status.js +57 -0
  327. package/dist/repository/controllers/workspaces.d.ts +7 -0
  328. package/dist/repository/controllers/workspaces.js +4 -0
  329. package/dist/repository/index.d.ts +9 -0
  330. package/dist/repository/index.js +6 -0
  331. package/manifest.json +12 -3
  332. package/package.json +43 -10
  333. package/registry-content/overview.md +10 -0
  334. package/registry.json +131 -2
@@ -0,0 +1,105 @@
1
+ <script lang="ts">
2
+ import { setContext, type Snippet } from "svelte";
3
+ import {
4
+ conflictMenuContext,
5
+ type ConflictMenuState,
6
+ } from "../../controllers/conflict-menu.js";
7
+ import { AppShell } from "@lapismd/design-core/shell";
8
+ import { Button } from "@lapismd/design-core/shadcn/button";
9
+ import XIcon from "@lucide/svelte/icons/x";
10
+ import RepositorySidebarToggleIcon from "./RepositorySidebarToggleIcon.svelte";
11
+ import RepositoryConflictBody from "./RepositoryConflictBody.svelte";
12
+ import "./repository-conflicts.css";
13
+ let bodyHeight = $state(0);
14
+ function measure(node: HTMLDivElement) {
15
+ const observer = new ResizeObserver(() => {
16
+ bodyHeight = node.clientHeight;
17
+ });
18
+ observer.observe(node);
19
+ return { destroy: () => observer.disconnect() };
20
+ }
21
+ let {
22
+ open,
23
+ label,
24
+ returnFocus,
25
+ busy,
26
+ dismissOnEscape = true,
27
+ locked,
28
+ browserOpen = $bindable(true),
29
+ compact,
30
+ files,
31
+ activePath,
32
+ onSelect,
33
+ onClose,
34
+ actions,
35
+ children,
36
+ }: {
37
+ open: boolean;
38
+ label: string;
39
+ returnFocus?: HTMLElement | null;
40
+ busy: boolean;
41
+ dismissOnEscape?: boolean;
42
+ locked: boolean;
43
+ browserOpen?: boolean;
44
+ compact: boolean;
45
+ files: readonly { path: string }[];
46
+ activePath: string;
47
+ onSelect: (path: string) => void;
48
+ onClose: () => void;
49
+ actions: Snippet;
50
+ children: Snippet;
51
+ } = $props();
52
+ const menus = new Set<symbol>();
53
+ let menuCount = $state(0);
54
+ setContext<ConflictMenuState>(conflictMenuContext, (id, next) => {
55
+ if (next) menus.add(id);
56
+ else menus.delete(id);
57
+ menuCount = menus.size;
58
+ });
59
+ </script>
60
+
61
+ <AppShell.SurfaceLayer
62
+ {open}
63
+ {returnFocus}
64
+ {label}
65
+ coverPanelIds={["right"]}
66
+ mobilePlacement="root"
67
+ dismissOnEscape={!busy && dismissOnEscape && menuCount === 0}
68
+ onDismiss={onClose}
69
+ class="store-conflict-editor"
70
+ >
71
+ <AppShell.SurfaceLayer.Header class="store-conflict-editor__header">
72
+ <Button
73
+ type="button"
74
+ variant="ghost"
75
+ size="icon-sm"
76
+ aria-label={`${browserOpen ? "Hide" : "Show"} conflict file browser`}
77
+ title={`${browserOpen ? "Hide" : "Show"} conflict file browser`}
78
+ aria-expanded={browserOpen}
79
+ aria-controls="conflict-file-browser"
80
+ onclick={() => (browserOpen = !browserOpen)}
81
+ ><RepositorySidebarToggleIcon expanded={browserOpen} /></Button
82
+ >
83
+ <h1 class="store-conflict-editor__title">Resolve conflicts</h1>
84
+ {@render actions()}
85
+ <Button
86
+ type="button"
87
+ variant="ghost"
88
+ size="icon-sm"
89
+ aria-label="Close conflict editor"
90
+ disabled={busy}
91
+ onclick={onClose}><XIcon aria-hidden="true" /></Button
92
+ >
93
+ </AppShell.SurfaceLayer.Header>
94
+ <div class="store-conflict-editor__body" use:measure>
95
+ <RepositoryConflictBody
96
+ {files}
97
+ height={bodyHeight}
98
+ {activePath}
99
+ {browserOpen}
100
+ {compact}
101
+ {locked}
102
+ {onSelect}>{@render children()}</RepositoryConflictBody
103
+ >
104
+ </div>
105
+ </AppShell.SurfaceLayer>
@@ -0,0 +1,23 @@
1
+ import { type Snippet } from "svelte";
2
+ import "./repository-conflicts.css";
3
+ type $$ComponentProps = {
4
+ open: boolean;
5
+ label: string;
6
+ returnFocus?: HTMLElement | null;
7
+ busy: boolean;
8
+ dismissOnEscape?: boolean;
9
+ locked: boolean;
10
+ browserOpen?: boolean;
11
+ compact: boolean;
12
+ files: readonly {
13
+ path: string;
14
+ }[];
15
+ activePath: string;
16
+ onSelect: (path: string) => void;
17
+ onClose: () => void;
18
+ actions: Snippet;
19
+ children: Snippet;
20
+ };
21
+ declare const RepositoryConflictSurface: import("svelte").Component<$$ComponentProps, {}, "browserOpen">;
22
+ type RepositoryConflictSurface = ReturnType<typeof RepositoryConflictSurface>;
23
+ export default RepositoryConflictSurface;
@@ -0,0 +1,104 @@
1
+ <script lang="ts">
2
+ import { getContext, onDestroy, type ComponentProps } from "svelte";
3
+ import { MergeEditor } from "@lapismd/design-core/diff";
4
+ import * as DropdownMenu from "@lapismd/design-core/shadcn/dropdown-menu";
5
+ import { Button } from "@lapismd/design-core/shadcn/button";
6
+ import EllipsisVertical from "@lucide/svelte/icons/ellipsis-vertical";
7
+ import {
8
+ conflictMenuContext,
9
+ type ConflictMenuState,
10
+ } from "../../controllers/conflict-menu.js";
11
+ let {
12
+ path,
13
+ headerActions: hostActions,
14
+ ...props
15
+ }: ComponentProps<typeof MergeEditor> = $props();
16
+ let settings = $state({
17
+ wrap: false,
18
+ syncHorizontalScroll: true,
19
+ ignoreWhitespace: false,
20
+ ignoreCase: false,
21
+ });
22
+ const ignoreWhitespace = $derived(
23
+ props.ignoreWhitespace ?? settings.ignoreWhitespace,
24
+ );
25
+ const ignoreCase = $derived(props.ignoreCase ?? settings.ignoreCase);
26
+ const menuId = Symbol("merge-settings");
27
+ const nestedMenu = getContext<ConflictMenuState | undefined>(
28
+ conflictMenuContext,
29
+ );
30
+ function update(patch: Partial<typeof settings>) {
31
+ settings = { ...settings, ...patch };
32
+ }
33
+ function menuOpen(next: boolean) {
34
+ if (next) nestedMenu?.(menuId, true);
35
+ else queueMicrotask(() => nestedMenu?.(menuId, false));
36
+ }
37
+ onDestroy(() => nestedMenu?.(menuId, false));
38
+ </script>
39
+
40
+ <MergeEditor
41
+ {path}
42
+ language={path?.endsWith(".md") ? "markdown" : null}
43
+ baseLabel="Resolved"
44
+ editableSides={["base"]}
45
+ {...props}
46
+ wrap={props.wrap ?? settings.wrap}
47
+ syncHorizontalScroll={props.syncHorizontalScroll ??
48
+ settings.syncHorizontalScroll}
49
+ {ignoreWhitespace}
50
+ {ignoreCase}
51
+ onResolvedChange={(change) =>
52
+ props.onResolvedChange?.({
53
+ ...change,
54
+ // Comparison filters cannot certify that a native conflict was resolved.
55
+ resolved: change.resolved && !ignoreWhitespace && !ignoreCase,
56
+ })}
57
+ >
58
+ {#snippet headerActions()}
59
+ {@render hostActions?.()}
60
+ <DropdownMenu.Root onOpenChange={menuOpen}>
61
+ <DropdownMenu.Trigger>
62
+ {#snippet child({ props: triggerProps })}
63
+ <Button
64
+ {...triggerProps}
65
+ variant="ghost"
66
+ size="icon-xs"
67
+ aria-label="Merge editor settings"
68
+ title="Merge editor settings"
69
+ >
70
+ <EllipsisVertical aria-hidden="true" />
71
+ </Button>
72
+ {/snippet}
73
+ </DropdownMenu.Trigger>
74
+ <DropdownMenu.Content align="end" style="min-width: 14rem">
75
+ <DropdownMenu.Group>
76
+ <DropdownMenu.CheckboxItem
77
+ checked={props.wrap ?? settings.wrap}
78
+ onCheckedChange={(wrap) => update({ wrap })}
79
+ closeOnSelect={false}>Wrap lines</DropdownMenu.CheckboxItem
80
+ >
81
+ <DropdownMenu.CheckboxItem
82
+ checked={props.syncHorizontalScroll ??
83
+ settings.syncHorizontalScroll}
84
+ onCheckedChange={(syncHorizontalScroll) =>
85
+ update({ syncHorizontalScroll })}
86
+ closeOnSelect={false}
87
+ >Sync horizontal scroll</DropdownMenu.CheckboxItem
88
+ >
89
+ <DropdownMenu.Separator />
90
+ <DropdownMenu.CheckboxItem
91
+ checked={ignoreWhitespace}
92
+ onCheckedChange={(ignoreWhitespace) => update({ ignoreWhitespace })}
93
+ closeOnSelect={false}>Ignore whitespace</DropdownMenu.CheckboxItem
94
+ >
95
+ <DropdownMenu.CheckboxItem
96
+ checked={ignoreCase}
97
+ onCheckedChange={(ignoreCase) => update({ ignoreCase })}
98
+ closeOnSelect={false}>Ignore case</DropdownMenu.CheckboxItem
99
+ >
100
+ </DropdownMenu.Group>
101
+ </DropdownMenu.Content>
102
+ </DropdownMenu.Root>
103
+ {/snippet}
104
+ </MergeEditor>
@@ -0,0 +1,26 @@
1
+ declare const RepositoryConflictText: import("svelte").Component<{
2
+ mode?: import("@lapismd/design-core/diff").MergeEditorMode;
3
+ left: string;
4
+ right: string;
5
+ base?: string;
6
+ leftLabel?: string;
7
+ baseLabel?: string;
8
+ rightLabel?: string;
9
+ path?: string;
10
+ headerCenter?: import("svelte").Snippet;
11
+ headerActions?: import("svelte").Snippet;
12
+ language?: string | null;
13
+ readOnly?: boolean;
14
+ editable?: boolean;
15
+ editableSides?: readonly import("@lapismd/design-core/diff").MergeSide[];
16
+ ignoreWhitespace?: boolean;
17
+ ignoreCase?: boolean;
18
+ syncHorizontalScroll?: boolean;
19
+ wrap?: boolean;
20
+ onLeftChange?: (content: string) => void;
21
+ onBaseChange?: (content: string) => void;
22
+ onRightChange?: (content: string) => void;
23
+ onResolvedChange?: (state: import("@lapismd/design-core/diff").MergeResolvedChange) => void;
24
+ }, {}, "">;
25
+ type RepositoryConflictText = ReturnType<typeof RepositoryConflictText>;
26
+ export default RepositoryConflictText;
@@ -0,0 +1,52 @@
1
+ <script lang="ts">
2
+ let {
3
+ side = "left",
4
+ expanded = true,
5
+ }: {
6
+ side?: "left" | "right";
7
+ expanded?: boolean;
8
+ } = $props();
9
+ </script>
10
+
11
+ <svg
12
+ class="community-sidebar-toggle-icon"
13
+ data-ui-part="sidebar-toggle-icon"
14
+ data-side={side}
15
+ data-expanded={expanded}
16
+ xmlns="http://www.w3.org/2000/svg"
17
+ width="24"
18
+ height="24"
19
+ viewBox="0 0 24 24"
20
+ fill="none"
21
+ stroke="currentColor"
22
+ stroke-width="2"
23
+ stroke-linecap="round"
24
+ stroke-linejoin="round"
25
+ aria-hidden="true"
26
+ >
27
+ <rect x="1" y="2" width="22" height="20" rx="4"></rect>
28
+ <g transform={side === "right" ? "translate(24 0) scale(-1 1)" : undefined}>
29
+ <rect
30
+ class="community-sidebar-toggle-icon__indicator"
31
+ x="4"
32
+ y="5"
33
+ width={expanded ? 6 : 2}
34
+ height="14"
35
+ rx="2"
36
+ fill="currentColor"
37
+ data-ui-part="sidebar-toggle-indicator"
38
+ ></rect>
39
+ </g>
40
+ </svg>
41
+
42
+ <style>
43
+ .community-sidebar-toggle-icon__indicator {
44
+ width: 2px;
45
+ transition: width 140ms ease;
46
+ }
47
+
48
+ .community-sidebar-toggle-icon[data-expanded="true"]
49
+ .community-sidebar-toggle-icon__indicator {
50
+ width: 6px;
51
+ }
52
+ </style>
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ side?: "left" | "right";
3
+ expanded?: boolean;
4
+ };
5
+ declare const RepositorySidebarToggleIcon: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type RepositorySidebarToggleIcon = ReturnType<typeof RepositorySidebarToggleIcon>;
7
+ export default RepositorySidebarToggleIcon;
@@ -0,0 +1,73 @@
1
+ .community-projects__file-tree {
2
+ --ui-diff-row-hover: color-mix(
3
+ in srgb,
4
+ var(--foreground) 7%,
5
+ var(--background)
6
+ );
7
+ --ui-diff-selected: color-mix(
8
+ in srgb,
9
+ var(--foreground) 12%,
10
+ var(--background)
11
+ );
12
+ display: flex;
13
+ min-width: 0;
14
+ min-height: 0;
15
+ height: 100%;
16
+ box-sizing: border-box;
17
+ flex-direction: column;
18
+ padding: 0 0.5rem 0.5rem;
19
+ background: var(--background);
20
+ }
21
+
22
+ .community-projects__file-tree-actions {
23
+ display: flex;
24
+ height: var(--community-projects-file-header-height, 2.25rem);
25
+ box-sizing: border-box;
26
+ align-items: center;
27
+ gap: 0.45rem;
28
+ margin-inline: -0.5rem;
29
+ padding: 0.2rem 0.5rem 0.2rem 1rem;
30
+ padding-inline-start: 0.5rem;
31
+ border-bottom: 1px solid var(--border);
32
+ }
33
+
34
+ .community-projects__file-tree-title {
35
+ min-width: 0;
36
+ flex: 1 1 auto;
37
+ overflow: hidden;
38
+ color: var(--foreground);
39
+ font-size: var(--community-text-secondary);
40
+ font-weight: 600;
41
+ text-overflow: ellipsis;
42
+ white-space: nowrap;
43
+ }
44
+
45
+ .community-projects__file-tree-count {
46
+ display: inline-flex;
47
+ min-width: 1.25rem;
48
+ flex: none;
49
+ align-items: center;
50
+ justify-content: center;
51
+ padding: 0.05rem 0.35rem;
52
+ border-radius: 999px;
53
+ background: color-mix(in srgb, var(--foreground) 7%, var(--background));
54
+ color: var(--foreground);
55
+ font-size: var(--community-text-secondary);
56
+ font-weight: 600;
57
+ line-height: 1rem;
58
+ }
59
+
60
+ .review-conflict-file-list {
61
+ flex: 1;
62
+ min-height: 0;
63
+ padding-block-start: 0.35rem;
64
+ }
65
+ .review-conflict-file-label {
66
+ flex: 1;
67
+ min-width: 0;
68
+ line-height: 1.5rem;
69
+ font-size: 0.75rem;
70
+ overflow: hidden;
71
+ text-overflow: ellipsis;
72
+ white-space: nowrap;
73
+ }
@@ -0,0 +1,125 @@
1
+ /* Adapted from jj-store's conflict editor; all selectors target owned hosts. */
2
+ .store-conflict-editor {
3
+ --ui-shell-surface-layer-inline-end-inset: 0px;
4
+ }
5
+ .store-conflict-editor__header {
6
+ padding-inline-start: 0.5rem;
7
+ gap: 0.5rem;
8
+ border-bottom: 1px solid var(--border);
9
+ }
10
+ .store-conflict-editor__title {
11
+ flex: 1;
12
+ min-width: 0;
13
+ margin: 0;
14
+ overflow: hidden;
15
+ font-size: 0.875rem;
16
+ text-overflow: ellipsis;
17
+ white-space: nowrap;
18
+ }
19
+ .store-conflict-editor__body-shell {
20
+ --ui-shell-height: 100%;
21
+ --ui-shell-main-block-inset: 0px;
22
+ --ui-shell-main-radius: 0px;
23
+ --ui-shell-main-shadow: none;
24
+ --ui-shell-main-border: 0;
25
+ }
26
+ .store-conflict-editor__body {
27
+ min-width: 0;
28
+ min-height: 0;
29
+ overflow: hidden;
30
+ }
31
+ .store-conflict-editor__file-browser {
32
+ height: 100%;
33
+ }
34
+ .store-conflict-editor__content-body {
35
+ display: flex;
36
+ height: 100%;
37
+ min-width: 0;
38
+ min-height: 0;
39
+ box-sizing: border-box;
40
+ flex-direction: column;
41
+ gap: 0.5rem;
42
+ padding: 0.5rem;
43
+ }
44
+ .store-conflict-editor__content[hidden] {
45
+ display: none;
46
+ }
47
+ .store-conflict-editor__path,
48
+ .store-conflict-path {
49
+ display: flex;
50
+ min-width: 0;
51
+ min-height: 0;
52
+ flex: 1;
53
+ flex-direction: column;
54
+ gap: 0.5rem;
55
+ }
56
+ .store-conflict-editor__path[hidden] {
57
+ display: none;
58
+ }
59
+ .store-conflict-path__editor {
60
+ min-width: 0;
61
+ min-height: 0;
62
+ flex: 1;
63
+ }
64
+ .store-conflict-path__unsupported {
65
+ display: grid;
66
+ align-content: start;
67
+ gap: 0.75rem;
68
+ flex: 1;
69
+ }
70
+ .store-conflict-path__terms,
71
+ .store-conflict-editor__actions {
72
+ display: flex;
73
+ flex-wrap: wrap;
74
+ align-items: center;
75
+ gap: 0.5rem;
76
+ }
77
+ .store-conflict-editor__staged {
78
+ color: var(--muted-foreground);
79
+ font-size: 0.75rem;
80
+ }
81
+ .store-conflict-path__error,
82
+ .store-conflict-editor__error {
83
+ margin: 0;
84
+ color: var(--destructive);
85
+ font-size: 0.8125rem;
86
+ }
87
+ @media (max-width: 700px) {
88
+ .store-conflict-editor__header {
89
+ padding-inline: 0.5rem;
90
+ gap: 0.25rem;
91
+ }
92
+ .store-conflict-editor__actions {
93
+ flex-wrap: nowrap;
94
+ gap: 0.25rem;
95
+ }
96
+ .store-conflict-editor__action-label,
97
+ .store-conflict-editor__staged {
98
+ position: absolute;
99
+ width: 1px;
100
+ height: 1px;
101
+ overflow: hidden;
102
+ clip-path: inset(50%);
103
+ white-space: nowrap;
104
+ }
105
+ }
106
+
107
+ .store-conflict-editor {
108
+ --community-text-secondary: 0.75rem;
109
+ }
110
+ .community-projects__file-tree-region {
111
+ background: var(--background);
112
+ }
113
+ .store-conflict-preview {
114
+ padding: 1rem;
115
+ font-size: 0.8125rem;
116
+ }
117
+ .store-conflict-preview h2 {
118
+ margin: 0;
119
+ font-size: 0.875rem;
120
+ }
121
+ .store-conflict-preview pre {
122
+ padding: 1rem;
123
+ overflow: auto;
124
+ background: var(--muted);
125
+ }
@@ -0,0 +1,15 @@
1
+ import { View, type WorkspaceLeaf } from "@lapis-notes/api";
2
+ import type { RepositoryPlugin } from "./repository-plugin.js";
3
+ export declare class FileHistoryView extends View {
4
+ #private;
5
+ private readonly plugin;
6
+ constructor(leaf: WorkspaceLeaf, plugin: RepositoryPlugin);
7
+ getViewType(): string;
8
+ getDisplayText(): string;
9
+ getIcon(): string;
10
+ protected onOpen(): Promise<void>;
11
+ protected onClose(): Promise<void>;
12
+ onload(): void;
13
+ onunload(): void;
14
+ }
15
+ export declare function registerFileHistoryView(plugin: RepositoryPlugin): void;
@@ -0,0 +1,110 @@
1
+ import { FileView, View } from "@lapis-notes/api";
2
+ import { mount, unmount } from "svelte";
3
+ import RepositoryFileHistory from "./RepositoryFileHistory.svelte";
4
+ import { followBackup } from "../controllers/backup-follow.js";
5
+ export class FileHistoryView extends View {
6
+ plugin;
7
+ #controller;
8
+ #component;
9
+ constructor(leaf, plugin) {
10
+ super(leaf);
11
+ this.plugin = plugin;
12
+ }
13
+ getViewType() {
14
+ return "repository-file-history";
15
+ }
16
+ getDisplayText() {
17
+ return "File history";
18
+ }
19
+ getIcon() {
20
+ return "file-clock";
21
+ }
22
+ async onOpen() { }
23
+ async onClose() { }
24
+ onload() {
25
+ const controller = (this.#controller =
26
+ this.plugin.createFileHistoryController());
27
+ this.register(followBackup(this.plugin.backup?.controller, controller));
28
+ const workspace = this.app.workspace;
29
+ const follow = (leaf = workspace.activeLeaf) => {
30
+ let root = false;
31
+ workspace.iterateRootLeaves((candidate) => {
32
+ if (candidate === leaf)
33
+ root = true;
34
+ });
35
+ if (!leaf || root)
36
+ void controller.follow(leaf?.view instanceof FileView ? leaf.view.file?.path : undefined);
37
+ };
38
+ this.registerEvent(workspace.on("active-leaf-change", follow));
39
+ this.registerEvent(workspace.on("file-open", () => follow()));
40
+ this.registerEvent(this.app.vault.on("rename", (file, oldPath) => {
41
+ const path = controller.state.path;
42
+ if (path === oldPath)
43
+ void controller.follow(file.path);
44
+ else if (path?.startsWith(`${oldPath}/`))
45
+ void controller.follow(file.path + path.slice(oldPath.length));
46
+ }));
47
+ this.registerEvent(this.app.vault.on("delete", (file) => {
48
+ if (file.path === controller.state.path)
49
+ void controller.follow();
50
+ }));
51
+ this.#component = mount(RepositoryFileHistory, {
52
+ target: this.containerEl,
53
+ props: {
54
+ controller,
55
+ copyText: (value) => this.plugin.copyIdentifier(value),
56
+ onBlame: () => {
57
+ const { operation, workspaceCommit: commit, path } = controller.state;
58
+ if (operation && commit && path)
59
+ void this.plugin
60
+ .openBlame(operation, commit, path)
61
+ .catch((error) => this.plugin.report(error));
62
+ },
63
+ onOpen: (revision) => void this.plugin
64
+ .open(controller.state.operation, revision)
65
+ .catch((error) => this.plugin.report(error)),
66
+ },
67
+ });
68
+ follow();
69
+ }
70
+ onunload() {
71
+ if (this.#component)
72
+ void unmount(this.#component);
73
+ this.#component = undefined;
74
+ if (this.#controller)
75
+ void this.plugin
76
+ .release(this.#controller)
77
+ .catch((error) => this.plugin.report(error));
78
+ }
79
+ }
80
+ export function registerFileHistoryView(plugin) {
81
+ let active = true;
82
+ plugin.register(() => {
83
+ active = false;
84
+ });
85
+ const ensure = async (reveal = false) => {
86
+ if (!active)
87
+ return;
88
+ const workspace = plugin.app.workspace;
89
+ let leaf = workspace.getLeavesOfType("repository-file-history")[0];
90
+ if (!leaf) {
91
+ leaf = workspace.ensureSideLeaf("repository-file-history");
92
+ await leaf.setViewState({ type: "repository-file-history", state: {} });
93
+ }
94
+ if (reveal && active)
95
+ await workspace.revealLeaf(leaf);
96
+ };
97
+ plugin.registerSidebarView("repository-file-history", (leaf) => new FileHistoryView(leaf, plugin), { side: "right", title: "File history", icon: "file-clock" }, {
98
+ kind: "command",
99
+ command: {
100
+ id: "open-file-history",
101
+ name: "Open File History",
102
+ callback: () => {
103
+ void ensure(true).catch((error) => plugin.report(error));
104
+ },
105
+ },
106
+ });
107
+ plugin.app.workspace.onLayoutReady(() => {
108
+ void ensure().catch((error) => plugin.report(error));
109
+ });
110
+ }
@@ -0,0 +1,16 @@
1
+ import { View, type WorkspaceLeaf } from "@lapis-notes/api";
2
+ import type { RepositoryPlugin } from "./repository-plugin.js";
3
+ export declare class OperationView extends View {
4
+ #private;
5
+ private readonly plugin;
6
+ constructor(leaf: WorkspaceLeaf, plugin: RepositoryPlugin);
7
+ getViewType(): string;
8
+ getDisplayText(): string;
9
+ getIcon(): string;
10
+ getState(): Record<string, unknown>;
11
+ setState(state: Record<string, unknown>): Promise<void>;
12
+ protected onOpen(): Promise<void>;
13
+ protected onClose(): Promise<void>;
14
+ onload(): void;
15
+ onunload(): void;
16
+ }