@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,23 @@
1
+ import type { HistorySourcePicker } from "../controllers/history-source.js";
2
+ import type { LocalGraphOperationNode } from "@lapismd/jj-history";
3
+ import type { RepositoryWorkspace } from "../controllers/workspaces.js";
4
+ type $$ComponentProps = {
5
+ sources?: HistorySourcePicker;
6
+ title: string;
7
+ count: number;
8
+ operations: string[];
9
+ operation: string | undefined;
10
+ nodes?: readonly LocalGraphOperationNode[];
11
+ selectionLabel?: string;
12
+ busy: boolean;
13
+ onSelect(operation: string): void;
14
+ onRefresh(): void;
15
+ copyText(value: string): Promise<void>;
16
+ workspaces: readonly RepositoryWorkspace[];
17
+ workspace: string | null;
18
+ onWorkspaceSelect(workspace: string | null): void;
19
+ onWorkspaceOpen?(): void;
20
+ };
21
+ declare const RepositoryLogHeader: import("svelte").Component<$$ComponentProps, {}, "">;
22
+ type RepositoryLogHeader = ReturnType<typeof RepositoryLogHeader>;
23
+ export default RepositoryLogHeader;
@@ -0,0 +1,52 @@
1
+ <script lang="ts">
2
+ import TerminalIcon from "@lucide/svelte/icons/terminal";
3
+ import { operationCommandLabel } from "../controllers/operation-command.js";
4
+ let { attributes }: { attributes: Readonly<Record<string, string>> } =
5
+ $props();
6
+ const command = $derived(
7
+ attributes.args ? operationCommandLabel(attributes.args) : undefined,
8
+ );
9
+ </script>
10
+
11
+ {#if command?.trim()}
12
+ <section
13
+ class="repository-review-operation-command"
14
+ aria-label="Recorded operation command"
15
+ >
16
+ <div class="repository-review-command-label">
17
+ <TerminalIcon aria-hidden="true" />Command
18
+ </div>
19
+ <pre><code>{command}</code></pre>
20
+ </section>
21
+ {/if}
22
+
23
+ <style>
24
+ .repository-review-operation-command {
25
+ min-width: 0;
26
+ padding: 0.75rem 1rem;
27
+ font-size: 0.75rem;
28
+ }
29
+ .repository-review-command-label {
30
+ display: flex;
31
+ align-items: center;
32
+ gap: 0.375rem;
33
+ color: var(--muted-foreground);
34
+ }
35
+ .repository-review-command-label :global(svg) {
36
+ width: 0.875rem;
37
+ height: 0.875rem;
38
+ }
39
+ pre {
40
+ margin: 0.375rem 0 0;
41
+ padding: 0.5rem 0.625rem;
42
+ border-radius: calc(var(--radius) * 0.8);
43
+ background: color-mix(in srgb, var(--foreground) 5%, var(--background));
44
+ color: var(--foreground);
45
+ white-space: pre-wrap;
46
+ overflow-wrap: anywhere;
47
+ }
48
+ code {
49
+ font-family: var(--font-mono, monospace);
50
+ font-size: inherit;
51
+ }
52
+ </style>
@@ -0,0 +1,6 @@
1
+ type $$ComponentProps = {
2
+ attributes: Readonly<Record<string, string>>;
3
+ };
4
+ declare const RepositoryOperationArguments: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type RepositoryOperationArguments = ReturnType<typeof RepositoryOperationArguments>;
6
+ export default RepositoryOperationArguments;
@@ -0,0 +1,163 @@
1
+ <script lang="ts">
2
+ import RepositoryFileTitle from "./RepositoryFileTitle.svelte";
3
+ import * as ColumnCanvas from "@lapismd/design-core/shadcn/column-canvas";
4
+ import * as Empty from "@lapismd/design-core/shadcn/empty";
5
+ import RepositorySkeleton from "./RepositorySkeleton.svelte";
6
+ import {
7
+ FileChangeStats,
8
+ type FileDiffViewMode,
9
+ } from "@lapismd/design-core/diff";
10
+ import { Button } from "@lapismd/design-core/shadcn/button";
11
+ import ChevronDownIcon from "@lucide/svelte/icons/chevron-down";
12
+ import FileSearchIcon from "@lucide/svelte/icons/file-search";
13
+ import type { OperationState } from "../controllers/operation-state.js";
14
+ import type { OperationController } from "../controllers/operation-controller.js";
15
+ import { changeStats } from "../controllers/history-files.js";
16
+ import RepositoryOperationParentPicker from "./RepositoryOperationParentPicker.svelte";
17
+ import RepositoryOperationRail from "./RepositoryOperationRail.svelte";
18
+ import RepositoryOperationArguments from "./RepositoryOperationArguments.svelte";
19
+ import RepositoryOperationMessage from "./RepositoryOperationMessage.svelte";
20
+ import RepositoryDiff from "./RepositoryDiff.svelte";
21
+ import RepositoryDiffControls from "./RepositoryDiffControls.svelte";
22
+ import "./repository-operation-column.css";
23
+ let {
24
+ state: snapshot,
25
+ controller,
26
+ copyText,
27
+ }: {
28
+ state: OperationState;
29
+ controller: OperationController;
30
+ copyText(value: string): Promise<void>;
31
+ } = $props();
32
+ let expanded = $state(true);
33
+ let viewMode = $state<FileDiffViewMode>("unified"),
34
+ wrap = $state(false);
35
+ const stats = $derived(changeStats(snapshot.files.diff));
36
+ const panelId = $derived(
37
+ `operation-metadata-${snapshot.selected?.id ?? "none"}`,
38
+ );
39
+ const operationId = $derived(snapshot.selected?.id);
40
+ $effect(() => {
41
+ operationId;
42
+ expanded = true;
43
+ });
44
+ </script>
45
+
46
+ <ColumnCanvas.Column
47
+ id="diff"
48
+ columnTitle="Diff"
49
+ aria-label="Revision changes"
50
+ style="border:0;border-radius:0;background:transparent"
51
+ >
52
+ <ColumnCanvas.Body>
53
+ <div class="operation-diff-stack" data-view-mode={viewMode}>
54
+ {#if snapshot.selected}
55
+ <section class="operation-card" aria-label="Selected operation">
56
+ <header class="operation-card-header">
57
+ <button
58
+ class="operation-toggle"
59
+ type="button"
60
+ aria-expanded={expanded}
61
+ aria-controls={panelId}
62
+ aria-label={expanded
63
+ ? "Collapse operation details"
64
+ : "Expand operation details"}
65
+ style="flex:none;padding:0.25rem"
66
+ onclick={() => (expanded = !expanded)}
67
+ >
68
+ <ChevronDownIcon aria-hidden="true" />
69
+ </button>
70
+ <RepositoryOperationMessage
71
+ textHover={false}
72
+ message={snapshot.selected.description || "No description"}
73
+ {copyText}
74
+ onSelect={() => (expanded = !expanded)}
75
+ />
76
+ <div class="operation-card-actions">
77
+ <ColumnCanvas.Close
78
+ aria-label="Close Diff column"
79
+ title="Close Diff"
80
+ />
81
+ </div>
82
+ </header>
83
+ {#if expanded}
84
+ <div id={panelId}>
85
+ <RepositoryOperationRail
86
+ operation={snapshot.selected}
87
+ onSelect={(id) => void controller.selectId(id)}
88
+ {copyText}
89
+ />
90
+ {#if snapshot.selected.parents.length > 0}
91
+ <RepositoryOperationParentPicker
92
+ {copyText}
93
+ parents={snapshot.selected.parents}
94
+ nodes={[...snapshot.nodes, ...snapshot.parentNodes]}
95
+ target={snapshot.parent}
96
+ loading={snapshot.busy}
97
+ onOpen={() => void controller.loadParents()}
98
+ onSelect={(id) => void controller.selectParent(id)}
99
+ />
100
+ {#if !snapshot.parent}<p class="operation-parent-hint">
101
+ Choose a parent to compare this operation.
102
+ </p>{/if}
103
+ {/if}
104
+ <RepositoryOperationArguments
105
+ attributes={snapshot.selected.attributes}
106
+ />
107
+ </div>
108
+ {/if}
109
+ </section>
110
+ {/if}
111
+ <section class="operation-file-card" aria-label="Selected file diff">
112
+ {#if snapshot.files.path}
113
+ <header class="operation-card-header">
114
+ <span class="operation-file-path"
115
+ ><RepositoryFileTitle path={snapshot.files.path} /></span
116
+ >
117
+ <div class="operation-card-actions">
118
+ {#if stats}<FileChangeStats {...stats} showZero />{/if}
119
+ <RepositoryDiffControls bind:viewMode bind:wrap />
120
+ </div>
121
+ </header>
122
+ {#if snapshot.files.diff}<RepositoryDiff
123
+ compact
124
+ change={snapshot.files.diff}
125
+ {viewMode}
126
+ {wrap}
127
+ />
128
+ {:else if snapshot.busy}<RepositorySkeleton
129
+ kind="diff"
130
+ label="Loading selected operation comparison"
131
+ />
132
+ {:else}<Empty.Root class="operation-diff-empty" role="status"
133
+ ><Empty.Header
134
+ ><Empty.Media variant="icon"><FileSearchIcon /></Empty.Media
135
+ ><Empty.Title style="font-size:0.875rem;color:var(--foreground)"
136
+ >File preview is unavailable</Empty.Title
137
+ ><Empty.Description style="font-size:0.75rem;max-width:28rem"
138
+ >Retry the selected file comparison.</Empty.Description
139
+ ></Empty.Header
140
+ ><Button
141
+ size="sm"
142
+ onclick={() =>
143
+ controller.files.selectPath(snapshot.files.path!)}
144
+ >Retry preview</Button
145
+ ></Empty.Root
146
+ >{/if}
147
+ {:else}
148
+ <Empty.Root class="operation-diff-empty" role="status">
149
+ <Empty.Header
150
+ ><Empty.Media variant="icon"
151
+ ><FileSearchIcon aria-hidden="true" /></Empty.Media
152
+ ><Empty.Title style="font-size:0.875rem;color:var(--foreground)"
153
+ >No file selected</Empty.Title
154
+ ><Empty.Description style="font-size:0.75rem;max-width:28rem"
155
+ >Select a changed file to preview the operation diff.</Empty.Description
156
+ ></Empty.Header
157
+ >
158
+ </Empty.Root>
159
+ {/if}
160
+ </section>
161
+ </div>
162
+ </ColumnCanvas.Body>
163
+ </ColumnCanvas.Column>
@@ -0,0 +1,11 @@
1
+ import type { OperationState } from "../controllers/operation-state.js";
2
+ import type { OperationController } from "../controllers/operation-controller.js";
3
+ import "./repository-operation-column.css";
4
+ type $$ComponentProps = {
5
+ state: OperationState;
6
+ controller: OperationController;
7
+ copyText(value: string): Promise<void>;
8
+ };
9
+ declare const RepositoryOperationColumn: import("svelte").Component<$$ComponentProps, {}, "">;
10
+ type RepositoryOperationColumn = ReturnType<typeof RepositoryOperationColumn>;
11
+ export default RepositoryOperationColumn;
@@ -0,0 +1,245 @@
1
+ <script lang="ts">
2
+ import RepositorySkeleton from "./RepositorySkeleton.svelte";
3
+ import RepositoryRevisionPicker from "./RepositoryRevisionPicker.svelte";
4
+ import UndoIcon from "@lucide/svelte/icons/undo-2";
5
+ import InfoIcon from "@lucide/svelte/icons/info";
6
+ import EllipsisIcon from "@lucide/svelte/icons/ellipsis";
7
+ import CopyIcon from "@lucide/svelte/icons/copy";
8
+ import * as Menu from "@lapismd/design-core/shadcn/dropdown-menu";
9
+ import { Button } from "@lapismd/design-core/shadcn/button";
10
+ import type { OperationState } from "../controllers/operation-state.js";
11
+ import type { OperationController } from "../controllers/operation-controller.js";
12
+ import { listingFiles } from "../controllers/history-files.js";
13
+ import RepositoryChangedFiles from "./RepositoryChangedFiles.svelte";
14
+ let {
15
+ state: snapshot,
16
+ controller,
17
+ onOpenDiff,
18
+ onOpenDetails,
19
+ copyText,
20
+ commits,
21
+ onHistory,
22
+ }: {
23
+ state: OperationState;
24
+ onHistory?(): void;
25
+ commits: import("@lapismd/jj-history").LocalGraphCommit[];
26
+ controller: OperationController;
27
+ onOpenDiff(): void;
28
+ onOpenDetails(): void;
29
+ copyText(value: string): Promise<void>;
30
+ } = $props();
31
+ const files = $derived(snapshot.files);
32
+ const listing = $derived(listingFiles(files.paths, files.diff));
33
+ let from = $state(""),
34
+ to = $state("");
35
+ const groupId = $derived(files.group?.change);
36
+ $effect(() => {
37
+ groupId;
38
+ from = "";
39
+ to = "";
40
+ });
41
+ </script>
42
+
43
+ <div class="operation-files">
44
+ <div
45
+ class="repository-review-operation-actions"
46
+ role="toolbar"
47
+ aria-label="Selected operation actions"
48
+ >
49
+ <Button
50
+ size="xs"
51
+ variant="outline"
52
+ aria-label="Inspect operation details"
53
+ title="Inspect operation details"
54
+ onclick={onOpenDetails}
55
+ ><InfoIcon data-icon="inline-start" aria-hidden="true" />Inspect</Button
56
+ >
57
+ <RepositoryRevisionPicker
58
+ onOpen={() => void controller.loadRevisions()}
59
+ groups={files.groups}
60
+ selected={files.group?.change}
61
+ {commits}
62
+ {copyText}
63
+ disabled={!files.ready || !files.groups.length}
64
+ onSelect={(id) => controller.files.selectGroup(id)}
65
+ />
66
+ <Button
67
+ size="xs"
68
+ variant="outline"
69
+ disabled
70
+ title="Operation revert is unavailable in this read-only repository plugin"
71
+ ><UndoIcon data-icon="inline-start" aria-hidden="true" />Revert</Button
72
+ >
73
+ <span class="repository-review-operation-menu">
74
+ <Menu.Root>
75
+ <Menu.Trigger>
76
+ {#snippet child({ props })}
77
+ <Button
78
+ {...props}
79
+ variant="ghost"
80
+ size="icon-xs"
81
+ aria-label="More operation actions"
82
+ ><EllipsisIcon aria-hidden="true" /></Button
83
+ >
84
+ {/snippet}
85
+ </Menu.Trigger>
86
+ <Menu.Content
87
+ align="end"
88
+ preventScroll={false}
89
+ style="min-width: 12rem"
90
+ >
91
+ <Menu.Group>
92
+ {#if onHistory}<Menu.Item onSelect={onHistory}
93
+ >Open in JJ Log</Menu.Item
94
+ >{/if}
95
+ <Menu.Item
96
+ onSelect={() => {
97
+ if (snapshot.selected)
98
+ void copyText(snapshot.selected.id).catch(() => {});
99
+ }}><CopyIcon aria-hidden="true" />Copy operation ID</Menu.Item
100
+ >
101
+ </Menu.Group>
102
+ </Menu.Content>
103
+ </Menu.Root>
104
+ </span>
105
+ </div>
106
+ {#if snapshot.busy && !snapshot.detail}
107
+ <RepositorySkeleton kind="operation" label="Loading operation details…" />
108
+ {:else if snapshot.detail?.status === "difference"}
109
+ {#if !files.ready}
110
+ {#if snapshot.busy}<RepositorySkeleton
111
+ kind="files"
112
+ label="Loading operation revisions…"
113
+ />
114
+ {:else}<p role="status">Operation revisions are unavailable.</p>{/if}
115
+ {#if !snapshot.busy}<Button
116
+ size="sm"
117
+ onclick={() => controller.files.retry()}>Retry revisions</Button
118
+ >{/if}
119
+ {:else if !files.groups.length}<p>
120
+ No revision content changes in this operation.
121
+ </p>
122
+ {:else}
123
+ {#if files.group?.comparison.status === "select"}
124
+ <p>Choose both revisions for this comparison.</p>
125
+ <label
126
+ >Before revision<select aria-label="Before revision" bind:value={from}
127
+ ><option value="" disabled>Choose before</option
128
+ >{#each files.group.comparison.before as id (id)}<option value={id}
129
+ >{id}</option
130
+ >{/each}</select
131
+ ></label
132
+ >
133
+ <label
134
+ >After revision<select aria-label="After revision" bind:value={to}
135
+ ><option value="" disabled>Choose after</option
136
+ >{#each files.group.comparison.after as id (id)}<option value={id}
137
+ >{id}</option
138
+ >{/each}</select
139
+ ></label
140
+ >
141
+ <Button
142
+ size="sm"
143
+ disabled={!from || !to || snapshot.busy}
144
+ onclick={() => controller.files.compare(from, to)}
145
+ >Compare revisions</Button
146
+ >
147
+ {:else if files.group?.comparison.status === "unavailable"}<p
148
+ role="status"
149
+ >
150
+ This change has no available content comparison.
151
+ </p>{/if}
152
+ {#if files.from && files.to}
153
+ {#if files.pathsReady || snapshot.busy}<RepositoryChangedFiles
154
+ files={listing}
155
+ selectedPath={files.path}
156
+ initialLoading={!files.pathsReady && snapshot.busy}
157
+ loading={snapshot.busy}
158
+ hasMore={!!files.nextPath}
159
+ onSelect={(path) => {
160
+ onOpenDiff();
161
+ void controller.files.selectPath(path);
162
+ }}
163
+ onMore={() => void controller.files.morePaths()}
164
+ />{/if}
165
+ {#if !files.pathsReady && !snapshot.busy}<p role="status">
166
+ File changes are unavailable.
167
+ </p>
168
+ <Button size="sm" onclick={() => controller.files.retryPaths()}
169
+ >Retry comparison</Button
170
+ >
171
+ {:else if files.pathsReady && !files.paths.length}<p>
172
+ No changed files in this comparison.
173
+ </p>{/if}
174
+ {#if files.paths.length === 500}<p>
175
+ Showing the first 500 changed files.
176
+ </p>{/if}
177
+ {/if}
178
+ {#if files.next}<Button
179
+ size="sm"
180
+ disabled={snapshot.busy}
181
+ onclick={() => controller.files.more()}>More changed revisions</Button
182
+ >{/if}
183
+ {#if files.groups.length === 500}<p>
184
+ Showing the first 500 changed revisions.
185
+ </p>{/if}
186
+ {/if}
187
+ {:else if snapshot.selected && snapshot.selected.parents.length > 0 && !snapshot.parent}<p
188
+ >
189
+ Choose a comparison parent in the operation card.
190
+ </p>
191
+ {:else if snapshot.selected && !snapshot.detail && !snapshot.busy}
192
+ <p role="status">Operation changes are unavailable.</p>
193
+ <Button
194
+ size="sm"
195
+ onclick={() =>
196
+ snapshot.parent
197
+ ? controller.selectParent(snapshot.parent)
198
+ : controller.select(snapshot.selected!)}>Retry operation</Button
199
+ >
200
+ {/if}
201
+ </div>
202
+
203
+ <style>
204
+ .operation-files {
205
+ padding: 0 0.5rem 0.5rem;
206
+ font-size: 0.8125rem;
207
+ }
208
+ .repository-review-operation-actions {
209
+ display: flex;
210
+ align-items: center;
211
+ gap: 0.5rem;
212
+ padding: 0.5rem 0.75rem;
213
+ padding-inline-end: 0.5rem;
214
+ margin: -0.5rem -0.5rem 0.5rem;
215
+ border-block: 1px solid var(--border);
216
+ background: color-mix(in srgb, var(--foreground) 4%, var(--background));
217
+ }
218
+ .repository-review-operation-menu {
219
+ display: inline-flex;
220
+ margin-inline-start: auto;
221
+ --accent: color-mix(in srgb, var(--foreground) 24%, var(--background));
222
+ --muted: var(--accent);
223
+ --ui-column-canvas-header-action-hover: var(--accent);
224
+ }
225
+ label {
226
+ display: flex;
227
+ flex-wrap: wrap;
228
+ align-items: center;
229
+ gap: 0.375rem;
230
+ margin-bottom: 0.5rem;
231
+ }
232
+ select {
233
+ min-width: 0;
234
+ flex: 1;
235
+ width: 100%;
236
+ padding: 0.375rem;
237
+ background: var(--background);
238
+ color: var(--foreground);
239
+ border: 1px solid var(--border);
240
+ border-radius: var(--radius);
241
+ }
242
+ p {
243
+ color: var(--muted-foreground);
244
+ }
245
+ </style>
@@ -0,0 +1,14 @@
1
+ import type { OperationState } from "../controllers/operation-state.js";
2
+ import type { OperationController } from "../controllers/operation-controller.js";
3
+ type $$ComponentProps = {
4
+ state: OperationState;
5
+ onHistory?(): void;
6
+ commits: import("@lapismd/jj-history").LocalGraphCommit[];
7
+ controller: OperationController;
8
+ onOpenDiff(): void;
9
+ onOpenDetails(): void;
10
+ copyText(value: string): Promise<void>;
11
+ };
12
+ declare const RepositoryOperationFiles: import("svelte").Component<$$ComponentProps, {}, "">;
13
+ type RepositoryOperationFiles = ReturnType<typeof RepositoryOperationFiles>;
14
+ export default RepositoryOperationFiles;
@@ -0,0 +1,169 @@
1
+ <script lang="ts">
2
+ import { onDestroy } from "svelte";
3
+ import CheckIcon from "@lucide/svelte/icons/check";
4
+ import CopyIcon from "@lucide/svelte/icons/copy";
5
+ import TriangleAlertIcon from "@lucide/svelte/icons/triangle-alert";
6
+ import { operationMessageParts } from "../controllers/operation-message.js";
7
+ let {
8
+ message,
9
+ onSelect,
10
+ copyText,
11
+ onCopyError,
12
+ textHover = true,
13
+ }: {
14
+ message: string;
15
+ onSelect?(): void;
16
+ copyText(value: string): Promise<void>;
17
+ onCopyError?(error: unknown): void;
18
+ textHover?: boolean;
19
+ } = $props();
20
+ const parts = $derived(operationMessageParts(message));
21
+ let feedback = $state<{ id: string; failed: boolean }>();
22
+ let timer: ReturnType<typeof setTimeout> | undefined;
23
+ let sequence = 0,
24
+ destroyed = false;
25
+ function reset() {
26
+ clearTimeout(timer);
27
+ sequence++;
28
+ feedback = undefined;
29
+ }
30
+ $effect(() => {
31
+ message;
32
+ reset();
33
+ });
34
+ onDestroy(() => {
35
+ destroyed = true;
36
+ reset();
37
+ });
38
+ async function copy(value: string) {
39
+ const request = ++sequence;
40
+ clearTimeout(timer);
41
+ feedback = undefined;
42
+ let failed = false,
43
+ failure: unknown;
44
+ try {
45
+ await copyText(value);
46
+ } catch (error) {
47
+ failed = true;
48
+ failure = error;
49
+ }
50
+ if (destroyed || sequence !== request) return;
51
+ feedback = { id: value, failed };
52
+ if (failed) onCopyError?.(failure);
53
+ timer = setTimeout(() => (feedback = undefined), 1500);
54
+ }
55
+ </script>
56
+
57
+ <span class="repository-review-operation-message">
58
+ {#each parts as part, index (index)}
59
+ {#if part.type === "text"}
60
+ {#if onSelect}<button
61
+ class="message-text"
62
+ data-quiet={!textHover || undefined}
63
+ type="button"
64
+ onclick={onSelect}>{part.value}</button
65
+ >
66
+ {:else}<span class="message-text">{part.value}</span>{/if}
67
+ {:else}
68
+ {@const label = part.type === "change" ? "change ID" : "commit ID"}
69
+ {@const status = feedback?.id === part.value ? feedback : undefined}
70
+ <button
71
+ type="button"
72
+ class="message-id"
73
+ data-change={part.type === "change" || undefined}
74
+ aria-label={`Copy full ${label}: ${part.value}; ${part.value.slice(0, 8)}…${part.value.slice(-4)}`}
75
+ title={`Copy full ${label}`}
76
+ onclick={(event) => {
77
+ event.stopPropagation();
78
+ void copy(part.value);
79
+ }}
80
+ onpointerdown={(event) => event.stopPropagation()}
81
+ onkeydown={(event) => {
82
+ if (event.key === "Enter" || event.key === " ")
83
+ event.stopPropagation();
84
+ }}
85
+ >
86
+ <code>{part.value.slice(0, 8)}…{part.value.slice(-4)}</code>
87
+ {#if status?.failed}<TriangleAlertIcon aria-hidden="true" />
88
+ {:else if status}<CheckIcon aria-hidden="true" />{:else}<CopyIcon
89
+ aria-hidden="true"
90
+ />{/if}
91
+ </button>
92
+ {/if}
93
+ {/each}
94
+ <span class="copy-status" role="status" aria-live="polite"
95
+ >{feedback && !feedback.failed ? "Copied full ID." : ""}</span
96
+ >
97
+ </span>
98
+
99
+ <style>
100
+ .repository-review-operation-message {
101
+ display: inline-flex;
102
+ align-items: center;
103
+ gap: 0.25rem;
104
+ min-width: 0;
105
+ max-width: 100%;
106
+ flex: 1 1 auto;
107
+ overflow: hidden;
108
+ font-size: 0.875rem;
109
+ font-weight: 500;
110
+ line-height: 1.25rem;
111
+ white-space: nowrap;
112
+ }
113
+ .message-text {
114
+ min-width: 0;
115
+ overflow: hidden;
116
+ text-overflow: ellipsis;
117
+ white-space: nowrap;
118
+ }
119
+ button.message-text {
120
+ border: 0;
121
+ padding: 0;
122
+ color: inherit;
123
+ background: transparent;
124
+ font: inherit;
125
+ text-align: start;
126
+ cursor: pointer;
127
+ }
128
+ .message-id {
129
+ display: inline-flex;
130
+ flex: none;
131
+ height: 1.35rem;
132
+ align-items: center;
133
+ gap: 0.25rem;
134
+ padding: 0 0.3rem;
135
+ border: 1px solid transparent;
136
+ border-radius: 0.35rem;
137
+ color: inherit;
138
+ background: color-mix(in srgb, currentcolor 7%, transparent);
139
+ cursor: pointer;
140
+ }
141
+ .message-id[data-change] {
142
+ color: var(--primary);
143
+ }
144
+ .message-id code {
145
+ font-family: var(--font-mono, monospace);
146
+ font-size: 0.75rem;
147
+ font-weight: 500;
148
+ }
149
+ .message-id :global(svg) {
150
+ width: 0.7rem;
151
+ height: 0.7rem;
152
+ flex: none;
153
+ }
154
+ .message-id:hover,
155
+ button.message-text:not([data-quiet]):hover {
156
+ background: color-mix(in srgb, var(--foreground) 12%, var(--background));
157
+ }
158
+ button:focus-visible {
159
+ outline: 2px solid var(--ring);
160
+ outline-offset: 2px;
161
+ }
162
+ .copy-status {
163
+ position: absolute;
164
+ width: 1px;
165
+ height: 1px;
166
+ overflow: hidden;
167
+ clip-path: inset(50%);
168
+ }
169
+ </style>