@pierre/diffs 1.4.1 → 1.4.2

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 (477) hide show
  1. package/dist/components/CodeView.d.ts +4 -4
  2. package/dist/components/CodeView.d.ts.map +1 -1
  3. package/dist/components/CodeView.js +8 -6
  4. package/dist/components/CodeView.js.map +1 -1
  5. package/dist/components/File.d.ts +3 -15
  6. package/dist/components/File.d.ts.map +1 -1
  7. package/dist/components/FileDiff.d.ts +9 -37
  8. package/dist/components/FileDiff.d.ts.map +1 -1
  9. package/dist/components/FileDiff.js +15 -12
  10. package/dist/components/FileDiff.js.map +1 -1
  11. package/dist/components/FileStream.d.ts +1 -0
  12. package/dist/components/FileStream.d.ts.map +1 -1
  13. package/dist/components/UnresolvedFile.d.ts +1 -1
  14. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  15. package/dist/components/UnresolvedFile.js +2 -1
  16. package/dist/components/UnresolvedFile.js.map +1 -1
  17. package/dist/components/VirtualizedFile.d.ts +2 -8
  18. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  19. package/dist/components/VirtualizedFile.js +11 -9
  20. package/dist/components/VirtualizedFile.js.map +1 -1
  21. package/dist/components/VirtualizedFileDiff.d.ts +2 -8
  22. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  23. package/dist/components/VirtualizedFileDiff.js +11 -9
  24. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  25. package/dist/components/Virtualizer.d.ts +1 -5
  26. package/dist/components/Virtualizer.d.ts.map +1 -1
  27. package/dist/components/Virtualizer.js.map +1 -1
  28. package/dist/components/VirtulizerDevelopment.d.ts +0 -1
  29. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
  30. package/dist/components/web-components.d.ts.map +1 -1
  31. package/dist/components/web-components.js +2 -1
  32. package/dist/components/web-components.js.map +1 -1
  33. package/dist/constants.d.ts +0 -1
  34. package/dist/constants.d.ts.map +1 -1
  35. package/dist/editor/EditStateManager.d.ts +0 -1
  36. package/dist/editor/EditStateManager.d.ts.map +1 -1
  37. package/dist/editor/EditStateManager.js.map +1 -1
  38. package/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts +0 -1
  39. package/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts.map +1 -1
  40. package/dist/editor/command.d.ts +2 -1
  41. package/dist/editor/command.d.ts.map +1 -1
  42. package/dist/editor/editPrediction.d.ts +3 -2
  43. package/dist/editor/editPrediction.d.ts.map +1 -1
  44. package/dist/editor/editPrediction.js +11 -11
  45. package/dist/editor/editPrediction.js.map +1 -1
  46. package/dist/editor/editStack.d.ts +0 -1
  47. package/dist/editor/editStack.d.ts.map +1 -1
  48. package/dist/editor/editStack.js.map +1 -1
  49. package/dist/editor/editor.d.ts +1 -5
  50. package/dist/editor/editor.d.ts.map +1 -1
  51. package/dist/editor/editor.js +24 -19
  52. package/dist/editor/editor.js.map +1 -1
  53. package/dist/editor/editor2.js.map +1 -1
  54. package/dist/editor/languages.d.ts +0 -1
  55. package/dist/editor/languages.d.ts.map +1 -1
  56. package/dist/editor/languages.js +1 -1
  57. package/dist/editor/languages.js.map +1 -1
  58. package/dist/editor/lineAnnotations.d.ts +0 -1
  59. package/dist/editor/lineAnnotations.d.ts.map +1 -1
  60. package/dist/editor/lineAnnotations.js +2 -1
  61. package/dist/editor/lineAnnotations.js.map +1 -1
  62. package/dist/editor/marker.d.ts +0 -1
  63. package/dist/editor/marker.d.ts.map +1 -1
  64. package/dist/editor/marker.js +5 -3
  65. package/dist/editor/marker.js.map +1 -1
  66. package/dist/editor/matchBrackets.d.ts +0 -1
  67. package/dist/editor/matchBrackets.d.ts.map +1 -1
  68. package/dist/editor/pieceTable.d.ts +0 -1
  69. package/dist/editor/pieceTable.d.ts.map +1 -1
  70. package/dist/editor/pieceTable.js.map +1 -1
  71. package/dist/editor/platform.d.ts +1 -5
  72. package/dist/editor/platform.d.ts.map +1 -1
  73. package/dist/editor/platform.js.map +1 -1
  74. package/dist/editor/popover.d.ts +12 -12
  75. package/dist/editor/popover.d.ts.map +1 -1
  76. package/dist/editor/popover.js.map +1 -1
  77. package/dist/editor/searchPanel.d.ts +0 -1
  78. package/dist/editor/searchPanel.d.ts.map +1 -1
  79. package/dist/editor/searchPanel.js +16 -12
  80. package/dist/editor/searchPanel.js.map +1 -1
  81. package/dist/editor/selection.d.ts +0 -1
  82. package/dist/editor/selection.d.ts.map +1 -1
  83. package/dist/editor/selection.js.map +1 -1
  84. package/dist/editor/selectionAction.d.ts +0 -1
  85. package/dist/editor/selectionAction.d.ts.map +1 -1
  86. package/dist/editor/selectionAction.js.map +1 -1
  87. package/dist/editor/sprite.d.ts.map +1 -1
  88. package/dist/editor/textDocument.d.ts +0 -1
  89. package/dist/editor/textDocument.d.ts.map +1 -1
  90. package/dist/editor/textDocument.js.map +1 -1
  91. package/dist/editor/textDocumentChangeTransaction.d.ts +0 -1
  92. package/dist/editor/textDocumentChangeTransaction.d.ts.map +1 -1
  93. package/dist/editor/textMeasure.d.ts.map +1 -1
  94. package/dist/editor/textMeasure.js.map +1 -1
  95. package/dist/editor/tokenizer.d.ts +1 -11
  96. package/dist/editor/tokenizer.d.ts.map +1 -1
  97. package/dist/editor/tokenizer.js +8 -4
  98. package/dist/editor/tokenizer.js.map +1 -1
  99. package/dist/editor/types.d.ts +0 -1
  100. package/dist/editor/types.d.ts.map +1 -1
  101. package/dist/editor/utils.d.ts.map +1 -1
  102. package/dist/editor/utils.js +11 -7
  103. package/dist/editor/utils.js.map +1 -1
  104. package/dist/highlighter/languages/areLanguagesAttached.d.ts +0 -1
  105. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  106. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +1 -0
  107. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  108. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  109. package/dist/highlighter/languages/constants.d.ts +1 -1
  110. package/dist/highlighter/languages/constants.d.ts.map +1 -1
  111. package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -0
  112. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  113. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -0
  114. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  115. package/dist/highlighter/languages/hasResolvedLanguages.d.ts +0 -1
  116. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  117. package/dist/highlighter/languages/registerCustomLanguage.d.ts +0 -1
  118. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  119. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -0
  120. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  121. package/dist/highlighter/languages/resolveLanguages.d.ts +1 -0
  122. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  123. package/dist/highlighter/shared_highlighter.d.ts +1 -6
  124. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  125. package/dist/highlighter/themes/areThemesAttached.d.ts +0 -1
  126. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  127. package/dist/highlighter/themes/attachResolvedThemes.d.ts +0 -1
  128. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  129. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  130. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  131. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +0 -1
  132. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  133. package/dist/highlighter/themes/getResolvedThemes.d.ts +0 -1
  134. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  135. package/dist/highlighter/themes/hasResolvedThemes.d.ts +0 -1
  136. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  137. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  138. package/dist/highlighter/themes/registerCustomTheme.d.ts +0 -1
  139. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  140. package/dist/highlighter/themes/resolveTheme.d.ts +0 -1
  141. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  142. package/dist/highlighter/themes/resolveThemes.d.ts +0 -1
  143. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  144. package/dist/highlighter/themes/themeResolution.d.ts +0 -1
  145. package/dist/highlighter/themes/themeResolution.d.ts.map +1 -1
  146. package/dist/highlighter/themes/themeResolver.d.ts +0 -1
  147. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  148. package/dist/index.d.ts +1 -0
  149. package/dist/managers/InteractionManager.d.ts +2 -26
  150. package/dist/managers/InteractionManager.d.ts.map +1 -1
  151. package/dist/managers/InteractionManager.js +1 -3
  152. package/dist/managers/InteractionManager.js.map +1 -1
  153. package/dist/managers/ResizeManager.d.ts +1 -4
  154. package/dist/managers/ResizeManager.d.ts.map +1 -1
  155. package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  156. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  157. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +0 -1
  158. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
  159. package/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts.map +1 -1
  160. package/dist/react/CodeView.d.ts +9 -1
  161. package/dist/react/CodeView.d.ts.map +1 -1
  162. package/dist/react/CodeView.js +39 -33
  163. package/dist/react/CodeView.js.map +1 -1
  164. package/dist/react/EditContext.d.ts +2 -5
  165. package/dist/react/EditContext.d.ts.map +1 -1
  166. package/dist/react/File.d.ts +1 -23
  167. package/dist/react/File.d.ts.map +1 -1
  168. package/dist/react/File.js +13 -12
  169. package/dist/react/File.js.map +1 -1
  170. package/dist/react/FileDiff.d.ts +1 -23
  171. package/dist/react/FileDiff.d.ts.map +1 -1
  172. package/dist/react/FileDiff.js +13 -12
  173. package/dist/react/FileDiff.js.map +1 -1
  174. package/dist/react/MultiFileDiff.d.ts +1 -24
  175. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  176. package/dist/react/MultiFileDiff.js +13 -12
  177. package/dist/react/MultiFileDiff.js.map +1 -1
  178. package/dist/react/PatchDiff.d.ts +1 -23
  179. package/dist/react/PatchDiff.d.ts.map +1 -1
  180. package/dist/react/PatchDiff.js +13 -12
  181. package/dist/react/PatchDiff.js.map +1 -1
  182. package/dist/react/UnresolvedFile.d.ts +1 -18
  183. package/dist/react/UnresolvedFile.d.ts.map +1 -1
  184. package/dist/react/UnresolvedFile.js +15 -14
  185. package/dist/react/UnresolvedFile.js.map +1 -1
  186. package/dist/react/Virtualizer.d.ts +1 -9
  187. package/dist/react/Virtualizer.d.ts.map +1 -1
  188. package/dist/react/Virtualizer.js.map +1 -1
  189. package/dist/react/WorkerPoolContext.d.ts +2 -6
  190. package/dist/react/WorkerPoolContext.d.ts.map +1 -1
  191. package/dist/react/constants.d.ts +0 -1
  192. package/dist/react/constants.d.ts.map +1 -1
  193. package/dist/react/jsx.d.ts +1 -0
  194. package/dist/react/jsx.d.ts.map +1 -1
  195. package/dist/react/types.d.ts +1 -1
  196. package/dist/react/types.d.ts.map +1 -1
  197. package/dist/react/utils/assignRef.d.ts +6 -0
  198. package/dist/react/utils/assignRef.d.ts.map +1 -0
  199. package/dist/react/utils/assignRef.js +9 -0
  200. package/dist/react/utils/assignRef.js.map +1 -0
  201. package/dist/react/utils/renderDiffChildren.d.ts +1 -16
  202. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  203. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  204. package/dist/react/utils/renderFileChildren.d.ts +1 -13
  205. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  206. package/dist/react/utils/renderFileChildren.js.map +1 -1
  207. package/dist/react/utils/templateRender.d.ts +0 -1
  208. package/dist/react/utils/templateRender.d.ts.map +1 -1
  209. package/dist/react/utils/useFileDiffInstance.d.ts +2 -18
  210. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  211. package/dist/react/utils/useFileDiffInstance.js +31 -17
  212. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  213. package/dist/react/utils/useFileInstance.d.ts +2 -16
  214. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  215. package/dist/react/utils/useFileInstance.js +8 -4
  216. package/dist/react/utils/useFileInstance.js.map +1 -1
  217. package/dist/react/utils/useStableCallback.d.ts.map +1 -1
  218. package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -12
  219. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  220. package/dist/renderers/DiffHunksRenderer.d.ts +4 -9
  221. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  222. package/dist/renderers/DiffHunksRenderer.js +28 -21
  223. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  224. package/dist/renderers/FileRenderer.d.ts +1 -0
  225. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  226. package/dist/renderers/FileRenderer.js.map +1 -1
  227. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts +3 -9
  228. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  229. package/dist/shiki-stream/stream.d.ts +0 -1
  230. package/dist/shiki-stream/stream.d.ts.map +1 -1
  231. package/dist/shiki-stream/stream.js.map +1 -1
  232. package/dist/shiki-stream/tokenizer.d.ts +0 -1
  233. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  234. package/dist/shiki-stream/types.d.ts +0 -1
  235. package/dist/shiki-stream/types.d.ts.map +1 -1
  236. package/dist/sprite.d.ts.map +1 -1
  237. package/dist/ssr/FileDiffReact.d.ts +1 -8
  238. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  239. package/dist/ssr/FileDiffReact.js +8 -3
  240. package/dist/ssr/FileDiffReact.js.map +1 -1
  241. package/dist/ssr/preloadDiffs.d.ts +6 -34
  242. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  243. package/dist/ssr/preloadFile.d.ts +1 -6
  244. package/dist/ssr/preloadFile.d.ts.map +1 -1
  245. package/dist/ssr/preloadPatchFile.d.ts +1 -5
  246. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  247. package/dist/ssr/renderHTML.d.ts +0 -1
  248. package/dist/ssr/renderHTML.d.ts.map +1 -1
  249. package/dist/string-import.d.ts.map +1 -1
  250. package/dist/style.js.map +1 -1
  251. package/dist/types.d.ts +0 -1
  252. package/dist/types.d.ts.map +1 -1
  253. package/dist/utils/annotationHelpers.d.ts +0 -1
  254. package/dist/utils/annotationHelpers.d.ts.map +1 -1
  255. package/dist/utils/appendItems.d.ts.map +1 -1
  256. package/dist/utils/applyLineTextWithNewline.d.ts.map +1 -1
  257. package/dist/utils/areDiffLineAnnotationsEqual.d.ts +0 -1
  258. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  259. package/dist/utils/areDiffRenderOptionsEqual.d.ts +0 -1
  260. package/dist/utils/areDiffRenderOptionsEqual.d.ts.map +1 -1
  261. package/dist/utils/areDiffTargetsEqual.d.ts +0 -1
  262. package/dist/utils/areDiffTargetsEqual.d.ts.map +1 -1
  263. package/dist/utils/areFileRenderOptionsEqual.d.ts +0 -1
  264. package/dist/utils/areFileRenderOptionsEqual.d.ts.map +1 -1
  265. package/dist/utils/areFileTargetsEqual.d.ts +0 -1
  266. package/dist/utils/areFileTargetsEqual.d.ts.map +1 -1
  267. package/dist/utils/areFilesEqual.d.ts +0 -1
  268. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  269. package/dist/utils/areHunkDataEqual.d.ts +0 -1
  270. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  271. package/dist/utils/areLineAnnotationsEqual.d.ts +0 -1
  272. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  273. package/dist/utils/areManagedSnapshotsEqual.d.ts +0 -1
  274. package/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
  275. package/dist/utils/areMergeConflictActionsEqual.d.ts +0 -1
  276. package/dist/utils/areMergeConflictActionsEqual.d.ts.map +1 -1
  277. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  278. package/dist/utils/areOptionsEqual.d.ts +1 -0
  279. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  280. package/dist/utils/arePrePropertiesEqual.d.ts +0 -1
  281. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  282. package/dist/utils/areRenderRangesEqual.d.ts +0 -1
  283. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  284. package/dist/utils/areSelectionPointsEqual.d.ts +0 -1
  285. package/dist/utils/areSelectionPointsEqual.d.ts.map +1 -1
  286. package/dist/utils/areSelectionsEqual.d.ts +0 -1
  287. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  288. package/dist/utils/areThemesEqual.d.ts +0 -1
  289. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  290. package/dist/utils/areVirtualWindowSpecsEqual.d.ts +0 -1
  291. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  292. package/dist/utils/areWorkerStatsEqual.d.ts +1 -0
  293. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  294. package/dist/utils/awaitWithTimeout.d.ts.map +1 -1
  295. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  296. package/dist/utils/cloneFileDiffMetadata.d.ts +0 -1
  297. package/dist/utils/cloneFileDiffMetadata.d.ts.map +1 -1
  298. package/dist/utils/composeCacheKey.d.ts.map +1 -1
  299. package/dist/utils/computeEstimatedDiffHeights.d.ts +1 -11
  300. package/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
  301. package/dist/utils/computeFileOffsets.d.ts.map +1 -1
  302. package/dist/utils/computeFileOffsets.js +9 -8
  303. package/dist/utils/computeFileOffsets.js.map +1 -1
  304. package/dist/utils/computeVirtualFileMetrics.d.ts +0 -1
  305. package/dist/utils/computeVirtualFileMetrics.d.ts.map +1 -1
  306. package/dist/utils/createAnnotationElement.d.ts +0 -1
  307. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  308. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  309. package/dist/utils/createCodeViewHeaderFooterHostElement.d.ts.map +1 -1
  310. package/dist/utils/createContentColumn.d.ts +0 -1
  311. package/dist/utils/createContentColumn.d.ts.map +1 -1
  312. package/dist/utils/createEmptyRowBuffer.d.ts +0 -1
  313. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  314. package/dist/utils/createFileHeaderElement.d.ts +1 -6
  315. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  316. package/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -1
  317. package/dist/utils/createGutterUtilityElement.d.ts +0 -1
  318. package/dist/utils/createGutterUtilityElement.d.ts.map +1 -1
  319. package/dist/utils/createNoNewlineElement.d.ts +0 -1
  320. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  321. package/dist/utils/createPreElement.d.ts +1 -11
  322. package/dist/utils/createPreElement.d.ts.map +1 -1
  323. package/dist/utils/createRowNodes.d.ts.map +1 -1
  324. package/dist/utils/createSeparator.d.ts +1 -10
  325. package/dist/utils/createSeparator.d.ts.map +1 -1
  326. package/dist/utils/createSeparator.js +12 -10
  327. package/dist/utils/createSeparator.js.map +1 -1
  328. package/dist/utils/createSpanNodeFromToken.d.ts +0 -1
  329. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  330. package/dist/utils/createSpanNodeFromToken.js +2 -1
  331. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  332. package/dist/utils/createStyleElement.d.ts +0 -1
  333. package/dist/utils/createStyleElement.d.ts.map +1 -1
  334. package/dist/utils/createTransformerWithState.d.ts +0 -1
  335. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  336. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  337. package/dist/utils/createWindowFromScrollPosition.d.ts +1 -9
  338. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  339. package/dist/utils/cssWrappers.d.ts +0 -1
  340. package/dist/utils/cssWrappers.d.ts.map +1 -1
  341. package/dist/utils/cssWrappers.js +5 -3
  342. package/dist/utils/cssWrappers.js.map +1 -1
  343. package/dist/utils/detachString.d.ts.map +1 -1
  344. package/dist/utils/diffAcceptRejectHunk.d.ts +0 -1
  345. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  346. package/dist/utils/editSessionAnnotations.d.ts +0 -1
  347. package/dist/utils/editSessionAnnotations.d.ts.map +1 -1
  348. package/dist/utils/editSessionHunks.d.ts +0 -1
  349. package/dist/utils/editSessionHunks.d.ts.map +1 -1
  350. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  351. package/dist/utils/getDiffFileInput.d.ts +1 -5
  352. package/dist/utils/getDiffFileInput.d.ts.map +1 -1
  353. package/dist/utils/getDiffHunksRendererOptions.d.ts +0 -1
  354. package/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -1
  355. package/dist/utils/getFileRendererOptions.d.ts +0 -1
  356. package/dist/utils/getFileRendererOptions.d.ts.map +1 -1
  357. package/dist/utils/getFiletypeFromFileName.d.ts +0 -1
  358. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  359. package/dist/utils/getFiletypeFromFileName.js.map +1 -1
  360. package/dist/utils/getHighlighterOptions.d.ts +1 -5
  361. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  362. package/dist/utils/getHighlighterOptions.js +1 -1
  363. package/dist/utils/getHighlighterOptions.js.map +1 -1
  364. package/dist/utils/getHighlighterThemeStyles.d.ts +1 -6
  365. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  366. package/dist/utils/getHunkSeparatorSlotName.d.ts +0 -1
  367. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  368. package/dist/utils/getHunkSideBoundaries.d.ts.map +1 -1
  369. package/dist/utils/getIconForType.d.ts +0 -1
  370. package/dist/utils/getIconForType.d.ts.map +1 -1
  371. package/dist/utils/getLineAnnotationName.d.ts +0 -1
  372. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  373. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  374. package/dist/utils/getLineNodes.d.ts +0 -1
  375. package/dist/utils/getLineNodes.d.ts.map +1 -1
  376. package/dist/utils/getMergeConflictActionSlotName.d.ts +1 -5
  377. package/dist/utils/getMergeConflictActionSlotName.d.ts.map +1 -1
  378. package/dist/utils/getMergeConflictLineTypes.d.ts +0 -1
  379. package/dist/utils/getMergeConflictLineTypes.d.ts.map +1 -1
  380. package/dist/utils/getOrCreateCodeNode.d.ts +1 -7
  381. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  382. package/dist/utils/getSingularPatch.d.ts +0 -1
  383. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  384. package/dist/utils/getThemes.d.ts +0 -1
  385. package/dist/utils/getThemes.d.ts.map +1 -1
  386. package/dist/utils/getTotalLineCountFromHunks.d.ts +0 -1
  387. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  388. package/dist/utils/guardWebKitScrollDuringRebuild.d.ts.map +1 -1
  389. package/dist/utils/hast_utils.d.ts +2 -12
  390. package/dist/utils/hast_utils.d.ts.map +1 -1
  391. package/dist/utils/hostTheme.d.ts +1 -5
  392. package/dist/utils/hostTheme.d.ts.map +1 -1
  393. package/dist/utils/hydratePartialDiff.d.ts +0 -1
  394. package/dist/utils/hydratePartialDiff.d.ts.map +1 -1
  395. package/dist/utils/includesFileAnnotations.d.ts +0 -1
  396. package/dist/utils/includesFileAnnotations.d.ts.map +1 -1
  397. package/dist/utils/isDefaultRenderRange.d.ts +0 -1
  398. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  399. package/dist/utils/isDiffPlainText.d.ts +0 -1
  400. package/dist/utils/isDiffPlainText.d.ts.map +1 -1
  401. package/dist/utils/isFilePlainText.d.ts +0 -1
  402. package/dist/utils/isFilePlainText.d.ts.map +1 -1
  403. package/dist/utils/isGutterUtilityPath.d.ts.map +1 -1
  404. package/dist/utils/isStyleNode.d.ts.map +1 -1
  405. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  406. package/dist/utils/iterateOverDiff.d.ts +1 -10
  407. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  408. package/dist/utils/iterateOverDiff.js +5 -3
  409. package/dist/utils/iterateOverDiff.js.map +1 -1
  410. package/dist/utils/lineAnnotationIdentity.d.ts +0 -1
  411. package/dist/utils/lineAnnotationIdentity.d.ts.map +1 -1
  412. package/dist/utils/normalizeDiffResolution.d.ts +0 -1
  413. package/dist/utils/normalizeDiffResolution.d.ts.map +1 -1
  414. package/dist/utils/parseDiffDecorations.d.ts +2 -13
  415. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  416. package/dist/utils/parseDiffFromFile.d.ts +0 -1
  417. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  418. package/dist/utils/parseDiffFromFile.js +2 -1
  419. package/dist/utils/parseDiffFromFile.js.map +1 -1
  420. package/dist/utils/parseLineType.d.ts +0 -1
  421. package/dist/utils/parseLineType.d.ts.map +1 -1
  422. package/dist/utils/parseMergeConflictDiffFromFile.d.ts +0 -1
  423. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  424. package/dist/utils/parsePatchFiles.d.ts +0 -1
  425. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  426. package/dist/utils/parsePatchFiles.js +8 -5
  427. package/dist/utils/parsePatchFiles.js.map +1 -1
  428. package/dist/utils/platform.d.ts.map +1 -1
  429. package/dist/utils/prefersReducedMotion.d.ts.map +1 -1
  430. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  431. package/dist/utils/processLine.d.ts +0 -1
  432. package/dist/utils/processLine.d.ts.map +1 -1
  433. package/dist/utils/realignChangeContent.d.ts +0 -1
  434. package/dist/utils/realignChangeContent.d.ts.map +1 -1
  435. package/dist/utils/renderDiffWithHighlighter.d.ts +1 -8
  436. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  437. package/dist/utils/renderFileWithHighlighter.d.ts +1 -11
  438. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  439. package/dist/utils/resolveConflict.d.ts +0 -1
  440. package/dist/utils/resolveConflict.d.ts.map +1 -1
  441. package/dist/utils/resolveRegion.d.ts +0 -1
  442. package/dist/utils/resolveRegion.d.ts.map +1 -1
  443. package/dist/utils/roundToDevicePixel.d.ts.map +1 -1
  444. package/dist/utils/scrollbarGutter.d.ts.map +1 -1
  445. package/dist/utils/scrollbarGutter.js +2 -1
  446. package/dist/utils/scrollbarGutter.js.map +1 -1
  447. package/dist/utils/setLanguageOverride.d.ts +0 -1
  448. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  449. package/dist/utils/setWrapperNodeProps.d.ts +1 -11
  450. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  451. package/dist/utils/setWrapperNodeProps.js +1 -3
  452. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  453. package/dist/utils/shouldUseTokenTransformer.d.ts +0 -1
  454. package/dist/utils/shouldUseTokenTransformer.d.ts.map +1 -1
  455. package/dist/utils/splitFileContents.d.ts.map +1 -1
  456. package/dist/utils/trimPatchContext.d.ts.map +1 -1
  457. package/dist/utils/updateDiffHunks.d.ts +0 -1
  458. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  459. package/dist/utils/virtualDiffLayout.d.ts +10 -55
  460. package/dist/utils/virtualDiffLayout.d.ts.map +1 -1
  461. package/dist/utils/wrapTokenFragments.d.ts +0 -1
  462. package/dist/utils/wrapTokenFragments.d.ts.map +1 -1
  463. package/dist/worker/WorkerPoolManager.d.ts +2 -17
  464. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  465. package/dist/worker/WorkerPoolManager.js +8 -5
  466. package/dist/worker/WorkerPoolManager.js.map +1 -1
  467. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts +1 -5
  468. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  469. package/dist/worker/types.d.ts +0 -1
  470. package/dist/worker/types.d.ts.map +1 -1
  471. package/dist/worker/worker-portable.d.ts +1 -1
  472. package/dist/worker/worker-portable.js +113 -354
  473. package/dist/worker/worker-portable.js.map +1 -1
  474. package/dist/worker/worker.d.ts +1 -1
  475. package/dist/worker/worker.js +14 -11
  476. package/dist/worker/worker.js.map +1 -1
  477. package/package.json +4 -5
@@ -1,6 +1,5 @@
1
1
  import { EditHistoryEntry, EditHistoryState, EditorLineAnnotation, EditorSelection, EditorType, ResolvedTextEdit } from "./types.js";
2
2
  import { TextDocument } from "./textDocument.js";
3
-
4
3
  //#region src/editor/editStack.d.ts
5
4
  type EditStackEntry<EType extends EditorType, LAnnotation = unknown> = EditHistoryEntry<EType, LAnnotation>;
6
5
  /** Options for the edit stack. */
@@ -1 +1 @@
1
- {"version":3,"file":"editStack.d.ts","names":[],"sources":["../../src/editor/editStack.ts"],"mappings":";;;;KAkBY,cAAA,eACI,UAAA,2BAEZ,gBAAA,CAAiB,KAAA,EAAO,WAAA;;UAIX,gBAAA;EAPS;EASxB,UAAU;AAAA;;cAIC,SAAA,eAAwB,UAAA;EAAA;EAMnC,WAAA,CAAY,OAAA,GAAU,gBAAA;EAAA,IAOlB,OAAA;EAAA,IAIA,OAAA;EA7BU;EAkCd,QAAA,IAAY,gBAAA,CAAiB,KAAA,EAAO,WAAA;EAhClC;EA0CF,YAAA,IAAgB,gBAAA,CAAiB,KAAA,EAAO,WAAA;EA1Cd;EAAA,OAmEnB,SAAA,eAAwB,UAAA,eAC7B,KAAA,EAAO,gBAAA,CAAiB,KAAA,EAAO,WAAA,IAC9B,SAAA,CAAU,KAAA,EAAO,WAAA;EArEiB;EAgFrC,KAAA;EA5E+B;EAmF/B,SAAA;EAjFU;EAsFV,IAAA,CAAK,KAAA,EAAO,cAAA,CAAe,KAAA,EAAO,WAAA;EAlFvB;EA4FX,0BAAA,CAA2B,UAAA,EAAY,eAAA;EA5FnB;EAsGpB,0BAAA,CACE,qBAAA,EAAuB,oBAAA,CAAqB,KAAA,EAAO,WAAA,KACnD,oBAAA,EAAsB,oBAAA,CAAqB,KAAA,EAAO,WAAA;EAlG9B;EA4GtB,QAAA,IAAY,cAAA,CAAe,KAAA,EAAO,WAAA;EA5FE;EAiGpC,qBAAA,IAAyB,cAAA,CAAe,KAAA,EAAO,WAAA;EAvFd;EA4FjC,eAAA,CAAgB,KAAA,EAAO,cAAA,CAAe,KAAA,EAAO,WAAA;EA5F7B;EAuGhB,aAAA,IAAiB,cAAA,CAAe,KAAA,EAAO,WAAA;EA7Eb;EAuF1B,aAAA,IAAiB,cAAA,CAAe,KAAA,EAAO,WAAA;AAAA;AAAA,iBA8CzB,oBAAA,eAAmC,UAAA,eACjD,YAAA,EAAc,YAAA,CAAa,KAAA,EAAO,WAAA,GAClC,aAAA,EAAe,gBAAA,IACf,aAAA,UACA,YAAA,UACA,gBAAA,GAAmB,eAAA,IACnB,eAAA,GAAkB,eAAA,IAClB,qBAAA,GAAwB,oBAAA,CAAqB,KAAA,EAAO,WAAA,KACpD,oBAAA,GAAuB,oBAAA,CAAqB,KAAA,EAAO,WAAA,MAClD,cAAA,CAAe,KAAA,EAAO,WAAA;;;;;;iBAmET,4BAAA,eACA,UAAA,eAGd,aAAA,EAAe,cAAA,CAAe,KAAA,EAAO,WAAA,eACrC,SAAA,EAAW,cAAA,CAAe,KAAA,EAAO,WAAA;;iBA8FnB,wBAAA,eAAuC,UAAA,eACrD,aAAA,EAAe,cAAA,CAAe,KAAA,EAAO,WAAA,GACrC,SAAA,EAAW,cAAA,CAAe,KAAA,EAAO,WAAA,IAChC,cAAA,CAAe,KAAA,EAAO,WAAA"}
1
+ {"version":3,"file":"editStack.d.ts","names":[],"sources":["../../src/editor/editStack.ts"],"mappings":";;;KAkBY,eACV,cAAc,YACd,yBACE,iBAAiB,OAAO;;UAIX;;EAEf;;;cAIW,UAAU,cAAc,YAAY;;EAM/C,YAAY,UAAU;MAOlB;MAIA;;EAKJ,YAAY,iBAAiB,OAAO;;EAUpC,gBAAgB,iBAAiB,OAAO;;SAyBjC,UAAU,cAAc,YAAY,aACzC,OAAO,iBAAiB,OAAO,eAC9B,UAAU,OAAO;;EAWpB;;EAOA;;EAKA,KAAK,OAAO,eAAe,OAAO;;EAUlC,2BAA2B,YAAY;;EAUvC,2BACE,uBAAuB,qBAAqB,OAAO,gBACnD,sBAAsB,qBAAqB,OAAO;;EAUpD,YAAY,eAAe,OAAO;;EAKlC,yBAAyB,eAAe,OAAO;;EAK/C,gBAAgB,OAAO,eAAe,OAAO;;EAW7C,iBAAiB,eAAe,OAAO;;EAUvC,iBAAiB,eAAe,OAAO;;iBA8CzB,qBAAqB,cAAc,YAAY,aAC7D,cAAc,aAAa,OAAO,cAClC,eAAe,oBACf,uBACA,sBACA,mBAAmB,mBACnB,kBAAkB,mBAClB,wBAAwB,qBAAqB,OAAO,gBACpD,uBAAuB,qBAAqB,OAAO,iBAClD,eAAe,OAAO;;;;;;iBAmET,6BACd,cAAc,YACd,aAEA,eAAe,eAAe,OAAO,0BACrC,WAAW,eAAe,OAAO;;iBA8FnB,yBAAyB,cAAc,YAAY,aACjE,eAAe,eAAe,OAAO,cACrC,WAAW,eAAe,OAAO,eAChC,eAAe,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"editStack.js","names":["#maxEntries","#undoStack","#redoStack","#canCoalesce"],"sources":["../../src/editor/editStack.ts"],"sourcesContent":["import type { TextDocument } from './textDocument';\nimport type {\n EditHistoryCoalescingMode,\n EditHistoryEntry,\n EditHistoryState,\n EditorLineAnnotation,\n EditorSelection,\n EditorType,\n ResolvedTextEdit,\n} from './types';\n\n/** Largest number of undo or redo entries kept; oldest entries drop first once exceeded. */\nconst DEFAULT_EDIT_STACK_MAX_ENTRIES = 100;\n\nconst COALESCING_MODE_INSERT = 'insert';\nconst COALESCING_MODE_BACKSPACE = 'backspace';\nconst COALESCING_MODE_DELETE = 'delete';\n\nexport type EditStackEntry<\n EType extends EditorType,\n LAnnotation = unknown,\n> = EditHistoryEntry<EType, LAnnotation>;\ntype EditStackCoalescingMode = EditHistoryCoalescingMode;\n\n/** Options for the edit stack. */\nexport interface EditStackOptions {\n /** The maximum number of entries to keep in the undo stack. */\n maxEntries?: number;\n}\n\n/** A stack of edit entries. */\nexport class EditStack<EType extends EditorType, LAnnotation = unknown> {\n #undoStack: EditStackEntry<EType, LAnnotation>[] = [];\n #redoStack: EditStackEntry<EType, LAnnotation>[] = [];\n #maxEntries: number;\n #canCoalesce = false;\n\n constructor(options?: EditStackOptions) {\n this.#maxEntries = Math.max(\n 1,\n options?.maxEntries ?? DEFAULT_EDIT_STACK_MAX_ENTRIES\n );\n }\n\n get canUndo(): boolean {\n return this.#undoStack.length > 0;\n }\n\n get canRedo(): boolean {\n return this.#redoStack.length > 0;\n }\n\n /** Return an independent, developer-editable history snapshot. */\n getState(): EditHistoryState<EType, LAnnotation> {\n return {\n undoStack: this.#undoStack.map(cloneEditStackEntryForState),\n redoStack: this.#redoStack.map(cloneEditStackEntryForState),\n maxEntries: this.#maxEntries,\n canCoalesce: this.#canCoalesce,\n };\n }\n\n /** Return a live view over this stack without copying its entries. */\n getLiveState(): EditHistoryState<EType, LAnnotation> {\n return Object.defineProperties(\n {},\n {\n undoStack: {\n enumerable: true,\n get: () => this.#undoStack,\n },\n redoStack: {\n enumerable: true,\n get: () => this.#redoStack,\n },\n maxEntries: {\n enumerable: true,\n get: () => this.#maxEntries,\n },\n canCoalesce: {\n enumerable: true,\n get: () => this.#canCoalesce,\n },\n }\n ) as EditHistoryState<EType, LAnnotation>;\n }\n\n /** Transfer developer-owned history into an edit stack. */\n static fromState<EType extends EditorType, LAnnotation>(\n state: EditHistoryState<EType, LAnnotation>\n ): EditStack<EType, LAnnotation> {\n const stack = new EditStack<EType, LAnnotation>({\n maxEntries: state.maxEntries,\n });\n stack.#undoStack = state.undoStack;\n stack.#redoStack = state.redoStack;\n stack.#canCoalesce = state.canCoalesce;\n return stack;\n }\n\n /** Clears both the undo and redo stacks. */\n clear(): void {\n this.#undoStack.length = 0;\n this.#redoStack.length = 0;\n this.#canCoalesce = false;\n }\n\n /** Clears the redo stack. */\n clearRedo(): void {\n this.#redoStack.length = 0;\n }\n\n /** Pushes a new entry onto the undo stack. */\n push(entry: EditStackEntry<EType, LAnnotation>): void {\n this.#undoStack.push(entry);\n this.clearRedo();\n this.#canCoalesce = true;\n if (this.#undoStack.length > this.#maxEntries) {\n this.#undoStack.shift();\n }\n }\n\n /** Sets the selections after the last undo entry. */\n setLastUndoSelectionsAfter(selections: EditorSelection[]): void {\n const lastEntry = this.#undoStack[this.#undoStack.length - 1];\n if (lastEntry !== undefined) {\n lastEntry.selectionsAfter = selections.map((selection) => ({\n ...selection,\n }));\n }\n }\n\n /** Sets the line annotations after the last undo entry. */\n setLastUndoLineAnnotations(\n lineAnnotationsBefore: EditorLineAnnotation<EType, LAnnotation>[],\n lineAnnotationsAfter: EditorLineAnnotation<EType, LAnnotation>[]\n ): void {\n const lastEntry = this.#undoStack[this.#undoStack.length - 1];\n if (lastEntry !== undefined) {\n lastEntry.lineAnnotationsBefore = lineAnnotationsBefore.slice();\n lastEntry.lineAnnotationsAfter = lineAnnotationsAfter.slice();\n }\n }\n\n /** Returns the last undo entry, or `undefined` if empty. */\n peekUndo(): EditStackEntry<EType, LAnnotation> | undefined {\n return this.#undoStack[this.#undoStack.length - 1];\n }\n\n /** Returns the last undo entry only while its coalescing group is open. */\n peekUndoForCoalescing(): EditStackEntry<EType, LAnnotation> | undefined {\n return this.#canCoalesce ? this.peekUndo() : undefined;\n }\n\n /** Replaces the last undo entry with the given entry. */\n replaceLastUndo(entry: EditStackEntry<EType, LAnnotation>): void {\n if (this.#undoStack.length === 0) {\n this.push(entry);\n return;\n }\n this.#undoStack[this.#undoStack.length - 1] = entry;\n this.clearRedo();\n this.#canCoalesce = true;\n }\n\n /** Moves the latest undo entry to the redo stack and returns it, or `undefined` if empty. */\n popUndoToRedo(): EditStackEntry<EType, LAnnotation> | void {\n const entry = this.#undoStack.pop();\n if (entry !== undefined) {\n this.#redoStack.push(entry);\n this.#canCoalesce = false;\n return entry;\n }\n }\n\n /** Moves the latest redo entry back to the undo stack and returns it, or `undefined` if empty. */\n popRedoToUndo(): EditStackEntry<EType, LAnnotation> | void {\n const entry = this.#redoStack.pop();\n if (entry !== undefined) {\n this.#undoStack.push(entry);\n this.#canCoalesce = false;\n return entry;\n }\n }\n}\n\nfunction cloneEditStackEntry<EType extends EditorType, LAnnotation>(\n entry: EditStackEntry<EType, LAnnotation>\n): EditStackEntry<EType, LAnnotation> {\n return {\n ...entry,\n forwardEdits: entry.forwardEdits.map((edit) => ({ ...edit })),\n inverseEdits: entry.inverseEdits.map((edit) => ({ ...edit })),\n selectionsBefore: entry.selectionsBefore?.map(cloneSelection),\n selectionsAfter: entry.selectionsAfter?.map(cloneSelection),\n lineAnnotationsBefore: entry.lineAnnotationsBefore?.slice(),\n lineAnnotationsAfter: entry.lineAnnotationsAfter?.slice(),\n };\n}\n\nfunction cloneEditStackEntryForState<EType extends EditorType, LAnnotation>(\n entry: EditStackEntry<EType, LAnnotation>\n): EditStackEntry<EType, LAnnotation> {\n return {\n ...cloneEditStackEntry(entry),\n lineAnnotationsBefore: entry.lineAnnotationsBefore?.map((annotation) => ({\n ...annotation,\n })),\n lineAnnotationsAfter: entry.lineAnnotationsAfter?.map((annotation) => ({\n ...annotation,\n })),\n };\n}\n\nfunction cloneSelection(selection: EditorSelection): EditorSelection {\n return {\n ...selection,\n start: { ...selection.start },\n end: { ...selection.end },\n };\n}\n\nexport function createEditStackEntry<EType extends EditorType, LAnnotation>(\n textDocument: TextDocument<EType, LAnnotation>,\n resolvedEdits: ResolvedTextEdit[],\n versionBefore: number,\n versionAfter: number,\n selectionsBefore?: EditorSelection[],\n selectionsAfter?: EditorSelection[],\n lineAnnotationsBefore?: EditorLineAnnotation<EType, LAnnotation>[],\n lineAnnotationsAfter?: EditorLineAnnotation<EType, LAnnotation>[]\n): EditStackEntry<EType, LAnnotation> {\n const forwardEdits = [...resolvedEdits].sort((a, b) => a.start - b.start);\n const inverseEdits: ResolvedTextEdit[] = [];\n let coalescingMode: EditStackCoalescingMode | undefined;\n if (selectionsBefore?.length === forwardEdits.length) {\n const caretOffsets: number[] = [];\n for (const selection of selectionsBefore) {\n if (\n selection.start.line !== selection.end.line ||\n selection.start.character !== selection.end.character\n ) {\n break;\n }\n caretOffsets.push(textDocument.offsetAt(selection.start));\n }\n if (caretOffsets.length === forwardEdits.length) {\n caretOffsets.sort((a, b) => a - b);\n let isBackspace = true;\n let isDelete = true;\n for (let i = 0; i < forwardEdits.length; i++) {\n const edit = forwardEdits[i];\n if (edit.text.length > 0 || edit.start === edit.end) {\n isBackspace = false;\n isDelete = false;\n break;\n }\n isBackspace &&= caretOffsets[i] === edit.end;\n isDelete &&= caretOffsets[i] === edit.start;\n }\n coalescingMode = isBackspace\n ? COALESCING_MODE_BACKSPACE\n : isDelete\n ? COALESCING_MODE_DELETE\n : undefined;\n }\n }\n for (let i = 0, offsetDelta = 0; i < forwardEdits.length; i++) {\n const edit = forwardEdits[i];\n const replacedText = textDocument.getTextSlice(edit.start, edit.end);\n const startAfterEdit = edit.start + offsetDelta;\n inverseEdits.push({\n start: startAfterEdit,\n end: startAfterEdit + edit.text.length,\n text: replacedText,\n });\n offsetDelta += edit.text.length - (edit.end - edit.start);\n }\n return {\n forwardEdits: forwardEdits.map((edit) => ({ ...edit })),\n inverseEdits: inverseEdits,\n versionBefore,\n versionAfter,\n selectionsBefore: selectionsBefore?.map((selection) => ({\n ...selection,\n })),\n selectionsAfter: selectionsAfter?.map((selection) => ({ ...selection })),\n lineAnnotationsBefore: lineAnnotationsBefore?.slice(),\n lineAnnotationsAfter: lineAnnotationsAfter?.slice(),\n coalescingMode,\n };\n}\n\n/** Determines if the change matches following modes:\n * - 'insert': simple typing\n * - 'backspace': backward delete\n * - 'delete': forward delete\n */\nexport function shouldCoalesceEditStackEntry<\n EType extends EditorType,\n LAnnotation,\n>(\n previousEntry: EditStackEntry<EType, LAnnotation> | undefined,\n nextEntry: EditStackEntry<EType, LAnnotation>\n): boolean {\n if (\n previousEntry === undefined ||\n previousEntry.undoBoundary === true ||\n nextEntry.undoBoundary === true ||\n previousEntry.forwardEdits.length === 0 ||\n previousEntry.forwardEdits.length !== previousEntry.inverseEdits.length ||\n previousEntry.forwardEdits.length !== nextEntry.forwardEdits.length ||\n nextEntry.forwardEdits.length !== nextEntry.inverseEdits.length\n ) {\n return false;\n }\n let mode: EditStackCoalescingMode | undefined;\n for (let i = 0; i < previousEntry.forwardEdits.length; i++) {\n const previousForward = previousEntry.forwardEdits[i];\n const previousInverse = previousEntry.inverseEdits[i];\n const nextForward = nextEntry.forwardEdits[i];\n const nextInverse = nextEntry.inverseEdits[i];\n const mappedNextStart = mapOffsetAfterForwardBatchToBefore(\n nextForward.start,\n previousEntry.forwardEdits\n );\n const previousWasInsert =\n previousForward.start <= previousForward.end &&\n previousForward.text.length > 0 &&\n !previousForward.text.includes('\\n') &&\n !previousInverse.text.includes('\\n');\n const nextIsInsert =\n nextForward.start === nextForward.end &&\n nextForward.text.length > 0 &&\n !nextForward.text.includes('\\n') &&\n nextInverse.text.length === 0;\n if (previousWasInsert && nextIsInsert) {\n // Merge only when the next insert starts exactly where the previous\n // inserted text ends, in after-edit offsets. `previousInverse.end` marks\n // that point, since undo replaces exactly the inserted range. A\n // base-offset check can't tell this apart from a caret that jumped to the\n // left edge: both edges of a pure insert map back to the same base offset,\n // so typing \"a\" then \"b\" at the left edge would merge as \"ab\" while the\n // buffer holds \"ba\", corrupting redo.\n if (nextForward.start !== previousInverse.end) {\n return false;\n }\n mode ??= COALESCING_MODE_INSERT;\n if (\n mode !== COALESCING_MODE_INSERT ||\n (previousEntry.coalescingMode !== undefined &&\n previousEntry.coalescingMode !== COALESCING_MODE_INSERT) ||\n (nextEntry.coalescingMode !== undefined &&\n nextEntry.coalescingMode !== COALESCING_MODE_INSERT)\n ) {\n return false;\n }\n continue;\n }\n const previousWasDelete =\n previousForward.text.length === 0 &&\n previousForward.end > previousForward.start &&\n previousInverse.text.length > 0;\n const nextIsDelete =\n nextForward.text.length === 0 &&\n nextForward.end > nextForward.start &&\n nextInverse.text.length > 0;\n if (previousWasDelete && nextIsDelete) {\n let nextMode: EditStackCoalescingMode;\n if (mappedNextStart === previousForward.end) {\n nextMode = COALESCING_MODE_DELETE;\n } else if (\n mappedNextStart + (nextForward.end - nextForward.start) !==\n previousForward.start\n ) {\n return false;\n } else {\n nextMode = COALESCING_MODE_BACKSPACE;\n }\n mode ??= nextMode;\n if (\n mode !== nextMode ||\n (previousEntry.coalescingMode !== undefined &&\n previousEntry.coalescingMode !== nextMode) ||\n (nextEntry.coalescingMode !== undefined &&\n nextEntry.coalescingMode !== nextMode)\n ) {\n return false;\n }\n continue;\n }\n return false;\n }\n return mode !== undefined;\n}\n\n/** Coalesce edit stack entries for simple typing and single-character deletes. */\nexport function coalesceEditStackEntries<EType extends EditorType, LAnnotation>(\n previousEntry: EditStackEntry<EType, LAnnotation>,\n nextEntry: EditStackEntry<EType, LAnnotation>\n): EditStackEntry<EType, LAnnotation> {\n const forwardEdits: ResolvedTextEdit[] = [];\n const replacedTexts: string[] = [];\n let coalescingMode: EditStackCoalescingMode | undefined;\n for (let i = 0; i < previousEntry.forwardEdits.length; i++) {\n const previousForward = previousEntry.forwardEdits[i];\n const previousInverse = previousEntry.inverseEdits[i];\n const nextForward = nextEntry.forwardEdits[i];\n const nextInverse = nextEntry.inverseEdits[i];\n const mappedNextStart = mapOffsetAfterForwardBatchToBefore(\n nextForward.start,\n previousEntry.forwardEdits\n );\n\n if (previousForward.text.length > 0) {\n coalescingMode ??= COALESCING_MODE_INSERT;\n forwardEdits.push({\n start: previousForward.start,\n end: previousForward.end,\n text: previousForward.text + nextForward.text,\n });\n replacedTexts.push(previousInverse.text);\n continue;\n }\n\n if (mappedNextStart === previousForward.end) {\n coalescingMode ??= COALESCING_MODE_DELETE;\n forwardEdits.push({\n start: previousForward.start,\n end: mappedNextStart + (nextForward.end - nextForward.start),\n text: '',\n });\n replacedTexts.push(previousInverse.text + nextInverse.text);\n continue;\n }\n\n coalescingMode ??= COALESCING_MODE_BACKSPACE;\n forwardEdits.push({\n start: Math.min(previousForward.start, mappedNextStart),\n end: previousForward.end,\n text: '',\n });\n replacedTexts.push(nextInverse.text + previousInverse.text);\n }\n\n return {\n forwardEdits,\n inverseEdits: buildInverseEditsFromReplacedTexts(\n forwardEdits,\n replacedTexts\n ),\n versionBefore: previousEntry.versionBefore,\n versionAfter: nextEntry.versionAfter,\n selectionsBefore: previousEntry.selectionsBefore?.slice(),\n selectionsAfter: nextEntry.selectionsAfter?.slice(),\n lineAnnotationsBefore: previousEntry.lineAnnotationsBefore?.slice(),\n lineAnnotationsAfter: nextEntry.lineAnnotationsAfter?.slice(),\n coalescingMode,\n };\n}\n\nfunction buildInverseEditsFromReplacedTexts(\n forwardEdits: readonly ResolvedTextEdit[],\n replacedTexts: readonly string[]\n): ResolvedTextEdit[] {\n const inverseEdits: ResolvedTextEdit[] = [];\n for (let i = 0, offsetDelta = 0; i < forwardEdits.length; i++) {\n const edit = forwardEdits[i];\n const startAfterEdit = edit.start + offsetDelta;\n inverseEdits.push({\n start: startAfterEdit,\n end: startAfterEdit + edit.text.length,\n text: replacedTexts[i],\n });\n offsetDelta += edit.text.length - (edit.end - edit.start);\n }\n return inverseEdits;\n}\n\nfunction mapOffsetAfterForwardBatchToBefore(\n offsetAfter: number,\n forwardEdits: readonly ResolvedTextEdit[]\n): number {\n let offset = offsetAfter;\n for (const edit of forwardEdits) {\n const oldLength = edit.end - edit.start;\n const newLength = edit.text.length;\n const delta = newLength - oldLength;\n if (offset < edit.start) {\n continue;\n }\n if (offset >= edit.start + newLength) {\n offset -= delta;\n continue;\n }\n offset = edit.start + Math.min(offset - edit.start, oldLength);\n }\n return offset;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"editStack.js","names":[],"sources":["../../src/editor/editStack.ts"],"sourcesContent":["import type { TextDocument } from './textDocument';\nimport type {\n EditHistoryCoalescingMode,\n EditHistoryEntry,\n EditHistoryState,\n EditorLineAnnotation,\n EditorSelection,\n EditorType,\n ResolvedTextEdit,\n} from './types';\n\n/** Largest number of undo or redo entries kept; oldest entries drop first once exceeded. */\nconst DEFAULT_EDIT_STACK_MAX_ENTRIES = 100;\n\nconst COALESCING_MODE_INSERT = 'insert';\nconst COALESCING_MODE_BACKSPACE = 'backspace';\nconst COALESCING_MODE_DELETE = 'delete';\n\nexport type EditStackEntry<\n EType extends EditorType,\n LAnnotation = unknown,\n> = EditHistoryEntry<EType, LAnnotation>;\ntype EditStackCoalescingMode = EditHistoryCoalescingMode;\n\n/** Options for the edit stack. */\nexport interface EditStackOptions {\n /** The maximum number of entries to keep in the undo stack. */\n maxEntries?: number;\n}\n\n/** A stack of edit entries. */\nexport class EditStack<EType extends EditorType, LAnnotation = unknown> {\n #undoStack: EditStackEntry<EType, LAnnotation>[] = [];\n #redoStack: EditStackEntry<EType, LAnnotation>[] = [];\n #maxEntries: number;\n #canCoalesce = false;\n\n constructor(options?: EditStackOptions) {\n this.#maxEntries = Math.max(\n 1,\n options?.maxEntries ?? DEFAULT_EDIT_STACK_MAX_ENTRIES\n );\n }\n\n get canUndo(): boolean {\n return this.#undoStack.length > 0;\n }\n\n get canRedo(): boolean {\n return this.#redoStack.length > 0;\n }\n\n /** Return an independent, developer-editable history snapshot. */\n getState(): EditHistoryState<EType, LAnnotation> {\n return {\n undoStack: this.#undoStack.map(cloneEditStackEntryForState),\n redoStack: this.#redoStack.map(cloneEditStackEntryForState),\n maxEntries: this.#maxEntries,\n canCoalesce: this.#canCoalesce,\n };\n }\n\n /** Return a live view over this stack without copying its entries. */\n getLiveState(): EditHistoryState<EType, LAnnotation> {\n return Object.defineProperties(\n {},\n {\n undoStack: {\n enumerable: true,\n get: () => this.#undoStack,\n },\n redoStack: {\n enumerable: true,\n get: () => this.#redoStack,\n },\n maxEntries: {\n enumerable: true,\n get: () => this.#maxEntries,\n },\n canCoalesce: {\n enumerable: true,\n get: () => this.#canCoalesce,\n },\n }\n ) as EditHistoryState<EType, LAnnotation>;\n }\n\n /** Transfer developer-owned history into an edit stack. */\n static fromState<EType extends EditorType, LAnnotation>(\n state: EditHistoryState<EType, LAnnotation>\n ): EditStack<EType, LAnnotation> {\n const stack = new EditStack<EType, LAnnotation>({\n maxEntries: state.maxEntries,\n });\n stack.#undoStack = state.undoStack;\n stack.#redoStack = state.redoStack;\n stack.#canCoalesce = state.canCoalesce;\n return stack;\n }\n\n /** Clears both the undo and redo stacks. */\n clear(): void {\n this.#undoStack.length = 0;\n this.#redoStack.length = 0;\n this.#canCoalesce = false;\n }\n\n /** Clears the redo stack. */\n clearRedo(): void {\n this.#redoStack.length = 0;\n }\n\n /** Pushes a new entry onto the undo stack. */\n push(entry: EditStackEntry<EType, LAnnotation>): void {\n this.#undoStack.push(entry);\n this.clearRedo();\n this.#canCoalesce = true;\n if (this.#undoStack.length > this.#maxEntries) {\n this.#undoStack.shift();\n }\n }\n\n /** Sets the selections after the last undo entry. */\n setLastUndoSelectionsAfter(selections: EditorSelection[]): void {\n const lastEntry = this.#undoStack[this.#undoStack.length - 1];\n if (lastEntry !== undefined) {\n lastEntry.selectionsAfter = selections.map((selection) => ({\n ...selection,\n }));\n }\n }\n\n /** Sets the line annotations after the last undo entry. */\n setLastUndoLineAnnotations(\n lineAnnotationsBefore: EditorLineAnnotation<EType, LAnnotation>[],\n lineAnnotationsAfter: EditorLineAnnotation<EType, LAnnotation>[]\n ): void {\n const lastEntry = this.#undoStack[this.#undoStack.length - 1];\n if (lastEntry !== undefined) {\n lastEntry.lineAnnotationsBefore = lineAnnotationsBefore.slice();\n lastEntry.lineAnnotationsAfter = lineAnnotationsAfter.slice();\n }\n }\n\n /** Returns the last undo entry, or `undefined` if empty. */\n peekUndo(): EditStackEntry<EType, LAnnotation> | undefined {\n return this.#undoStack[this.#undoStack.length - 1];\n }\n\n /** Returns the last undo entry only while its coalescing group is open. */\n peekUndoForCoalescing(): EditStackEntry<EType, LAnnotation> | undefined {\n return this.#canCoalesce ? this.peekUndo() : undefined;\n }\n\n /** Replaces the last undo entry with the given entry. */\n replaceLastUndo(entry: EditStackEntry<EType, LAnnotation>): void {\n if (this.#undoStack.length === 0) {\n this.push(entry);\n return;\n }\n this.#undoStack[this.#undoStack.length - 1] = entry;\n this.clearRedo();\n this.#canCoalesce = true;\n }\n\n /** Moves the latest undo entry to the redo stack and returns it, or `undefined` if empty. */\n popUndoToRedo(): EditStackEntry<EType, LAnnotation> | void {\n const entry = this.#undoStack.pop();\n if (entry !== undefined) {\n this.#redoStack.push(entry);\n this.#canCoalesce = false;\n return entry;\n }\n }\n\n /** Moves the latest redo entry back to the undo stack and returns it, or `undefined` if empty. */\n popRedoToUndo(): EditStackEntry<EType, LAnnotation> | void {\n const entry = this.#redoStack.pop();\n if (entry !== undefined) {\n this.#undoStack.push(entry);\n this.#canCoalesce = false;\n return entry;\n }\n }\n}\n\nfunction cloneEditStackEntry<EType extends EditorType, LAnnotation>(\n entry: EditStackEntry<EType, LAnnotation>\n): EditStackEntry<EType, LAnnotation> {\n return {\n ...entry,\n forwardEdits: entry.forwardEdits.map((edit) => ({ ...edit })),\n inverseEdits: entry.inverseEdits.map((edit) => ({ ...edit })),\n selectionsBefore: entry.selectionsBefore?.map(cloneSelection),\n selectionsAfter: entry.selectionsAfter?.map(cloneSelection),\n lineAnnotationsBefore: entry.lineAnnotationsBefore?.slice(),\n lineAnnotationsAfter: entry.lineAnnotationsAfter?.slice(),\n };\n}\n\nfunction cloneEditStackEntryForState<EType extends EditorType, LAnnotation>(\n entry: EditStackEntry<EType, LAnnotation>\n): EditStackEntry<EType, LAnnotation> {\n return {\n ...cloneEditStackEntry(entry),\n lineAnnotationsBefore: entry.lineAnnotationsBefore?.map((annotation) => ({\n ...annotation,\n })),\n lineAnnotationsAfter: entry.lineAnnotationsAfter?.map((annotation) => ({\n ...annotation,\n })),\n };\n}\n\nfunction cloneSelection(selection: EditorSelection): EditorSelection {\n return {\n ...selection,\n start: { ...selection.start },\n end: { ...selection.end },\n };\n}\n\nexport function createEditStackEntry<EType extends EditorType, LAnnotation>(\n textDocument: TextDocument<EType, LAnnotation>,\n resolvedEdits: ResolvedTextEdit[],\n versionBefore: number,\n versionAfter: number,\n selectionsBefore?: EditorSelection[],\n selectionsAfter?: EditorSelection[],\n lineAnnotationsBefore?: EditorLineAnnotation<EType, LAnnotation>[],\n lineAnnotationsAfter?: EditorLineAnnotation<EType, LAnnotation>[]\n): EditStackEntry<EType, LAnnotation> {\n const forwardEdits = [...resolvedEdits].sort((a, b) => a.start - b.start);\n const inverseEdits: ResolvedTextEdit[] = [];\n let coalescingMode: EditStackCoalescingMode | undefined;\n if (selectionsBefore?.length === forwardEdits.length) {\n const caretOffsets: number[] = [];\n for (const selection of selectionsBefore) {\n if (\n selection.start.line !== selection.end.line ||\n selection.start.character !== selection.end.character\n ) {\n break;\n }\n caretOffsets.push(textDocument.offsetAt(selection.start));\n }\n if (caretOffsets.length === forwardEdits.length) {\n caretOffsets.sort((a, b) => a - b);\n let isBackspace = true;\n let isDelete = true;\n for (let i = 0; i < forwardEdits.length; i++) {\n const edit = forwardEdits[i];\n if (edit.text.length > 0 || edit.start === edit.end) {\n isBackspace = false;\n isDelete = false;\n break;\n }\n isBackspace &&= caretOffsets[i] === edit.end;\n isDelete &&= caretOffsets[i] === edit.start;\n }\n coalescingMode = isBackspace\n ? COALESCING_MODE_BACKSPACE\n : isDelete\n ? COALESCING_MODE_DELETE\n : undefined;\n }\n }\n for (let i = 0, offsetDelta = 0; i < forwardEdits.length; i++) {\n const edit = forwardEdits[i];\n const replacedText = textDocument.getTextSlice(edit.start, edit.end);\n const startAfterEdit = edit.start + offsetDelta;\n inverseEdits.push({\n start: startAfterEdit,\n end: startAfterEdit + edit.text.length,\n text: replacedText,\n });\n offsetDelta += edit.text.length - (edit.end - edit.start);\n }\n return {\n forwardEdits: forwardEdits.map((edit) => ({ ...edit })),\n inverseEdits: inverseEdits,\n versionBefore,\n versionAfter,\n selectionsBefore: selectionsBefore?.map((selection) => ({\n ...selection,\n })),\n selectionsAfter: selectionsAfter?.map((selection) => ({ ...selection })),\n lineAnnotationsBefore: lineAnnotationsBefore?.slice(),\n lineAnnotationsAfter: lineAnnotationsAfter?.slice(),\n coalescingMode,\n };\n}\n\n/** Determines if the change matches following modes:\n * - 'insert': simple typing\n * - 'backspace': backward delete\n * - 'delete': forward delete\n */\nexport function shouldCoalesceEditStackEntry<\n EType extends EditorType,\n LAnnotation,\n>(\n previousEntry: EditStackEntry<EType, LAnnotation> | undefined,\n nextEntry: EditStackEntry<EType, LAnnotation>\n): boolean {\n if (\n previousEntry === undefined ||\n previousEntry.undoBoundary === true ||\n nextEntry.undoBoundary === true ||\n previousEntry.forwardEdits.length === 0 ||\n previousEntry.forwardEdits.length !== previousEntry.inverseEdits.length ||\n previousEntry.forwardEdits.length !== nextEntry.forwardEdits.length ||\n nextEntry.forwardEdits.length !== nextEntry.inverseEdits.length\n ) {\n return false;\n }\n let mode: EditStackCoalescingMode | undefined;\n for (let i = 0; i < previousEntry.forwardEdits.length; i++) {\n const previousForward = previousEntry.forwardEdits[i];\n const previousInverse = previousEntry.inverseEdits[i];\n const nextForward = nextEntry.forwardEdits[i];\n const nextInverse = nextEntry.inverseEdits[i];\n const mappedNextStart = mapOffsetAfterForwardBatchToBefore(\n nextForward.start,\n previousEntry.forwardEdits\n );\n const previousWasInsert =\n previousForward.start <= previousForward.end &&\n previousForward.text.length > 0 &&\n !previousForward.text.includes('\\n') &&\n !previousInverse.text.includes('\\n');\n const nextIsInsert =\n nextForward.start === nextForward.end &&\n nextForward.text.length > 0 &&\n !nextForward.text.includes('\\n') &&\n nextInverse.text.length === 0;\n if (previousWasInsert && nextIsInsert) {\n // Merge only when the next insert starts exactly where the previous\n // inserted text ends, in after-edit offsets. `previousInverse.end` marks\n // that point, since undo replaces exactly the inserted range. A\n // base-offset check can't tell this apart from a caret that jumped to the\n // left edge: both edges of a pure insert map back to the same base offset,\n // so typing \"a\" then \"b\" at the left edge would merge as \"ab\" while the\n // buffer holds \"ba\", corrupting redo.\n if (nextForward.start !== previousInverse.end) {\n return false;\n }\n mode ??= COALESCING_MODE_INSERT;\n if (\n mode !== COALESCING_MODE_INSERT ||\n (previousEntry.coalescingMode !== undefined &&\n previousEntry.coalescingMode !== COALESCING_MODE_INSERT) ||\n (nextEntry.coalescingMode !== undefined &&\n nextEntry.coalescingMode !== COALESCING_MODE_INSERT)\n ) {\n return false;\n }\n continue;\n }\n const previousWasDelete =\n previousForward.text.length === 0 &&\n previousForward.end > previousForward.start &&\n previousInverse.text.length > 0;\n const nextIsDelete =\n nextForward.text.length === 0 &&\n nextForward.end > nextForward.start &&\n nextInverse.text.length > 0;\n if (previousWasDelete && nextIsDelete) {\n let nextMode: EditStackCoalescingMode;\n if (mappedNextStart === previousForward.end) {\n nextMode = COALESCING_MODE_DELETE;\n } else if (\n mappedNextStart + (nextForward.end - nextForward.start) !==\n previousForward.start\n ) {\n return false;\n } else {\n nextMode = COALESCING_MODE_BACKSPACE;\n }\n mode ??= nextMode;\n if (\n mode !== nextMode ||\n (previousEntry.coalescingMode !== undefined &&\n previousEntry.coalescingMode !== nextMode) ||\n (nextEntry.coalescingMode !== undefined &&\n nextEntry.coalescingMode !== nextMode)\n ) {\n return false;\n }\n continue;\n }\n return false;\n }\n return mode !== undefined;\n}\n\n/** Coalesce edit stack entries for simple typing and single-character deletes. */\nexport function coalesceEditStackEntries<EType extends EditorType, LAnnotation>(\n previousEntry: EditStackEntry<EType, LAnnotation>,\n nextEntry: EditStackEntry<EType, LAnnotation>\n): EditStackEntry<EType, LAnnotation> {\n const forwardEdits: ResolvedTextEdit[] = [];\n const replacedTexts: string[] = [];\n let coalescingMode: EditStackCoalescingMode | undefined;\n for (let i = 0; i < previousEntry.forwardEdits.length; i++) {\n const previousForward = previousEntry.forwardEdits[i];\n const previousInverse = previousEntry.inverseEdits[i];\n const nextForward = nextEntry.forwardEdits[i];\n const nextInverse = nextEntry.inverseEdits[i];\n const mappedNextStart = mapOffsetAfterForwardBatchToBefore(\n nextForward.start,\n previousEntry.forwardEdits\n );\n\n if (previousForward.text.length > 0) {\n coalescingMode ??= COALESCING_MODE_INSERT;\n forwardEdits.push({\n start: previousForward.start,\n end: previousForward.end,\n text: previousForward.text + nextForward.text,\n });\n replacedTexts.push(previousInverse.text);\n continue;\n }\n\n if (mappedNextStart === previousForward.end) {\n coalescingMode ??= COALESCING_MODE_DELETE;\n forwardEdits.push({\n start: previousForward.start,\n end: mappedNextStart + (nextForward.end - nextForward.start),\n text: '',\n });\n replacedTexts.push(previousInverse.text + nextInverse.text);\n continue;\n }\n\n coalescingMode ??= COALESCING_MODE_BACKSPACE;\n forwardEdits.push({\n start: Math.min(previousForward.start, mappedNextStart),\n end: previousForward.end,\n text: '',\n });\n replacedTexts.push(nextInverse.text + previousInverse.text);\n }\n\n return {\n forwardEdits,\n inverseEdits: buildInverseEditsFromReplacedTexts(\n forwardEdits,\n replacedTexts\n ),\n versionBefore: previousEntry.versionBefore,\n versionAfter: nextEntry.versionAfter,\n selectionsBefore: previousEntry.selectionsBefore?.slice(),\n selectionsAfter: nextEntry.selectionsAfter?.slice(),\n lineAnnotationsBefore: previousEntry.lineAnnotationsBefore?.slice(),\n lineAnnotationsAfter: nextEntry.lineAnnotationsAfter?.slice(),\n coalescingMode,\n };\n}\n\nfunction buildInverseEditsFromReplacedTexts(\n forwardEdits: readonly ResolvedTextEdit[],\n replacedTexts: readonly string[]\n): ResolvedTextEdit[] {\n const inverseEdits: ResolvedTextEdit[] = [];\n for (let i = 0, offsetDelta = 0; i < forwardEdits.length; i++) {\n const edit = forwardEdits[i];\n const startAfterEdit = edit.start + offsetDelta;\n inverseEdits.push({\n start: startAfterEdit,\n end: startAfterEdit + edit.text.length,\n text: replacedTexts[i],\n });\n offsetDelta += edit.text.length - (edit.end - edit.start);\n }\n return inverseEdits;\n}\n\nfunction mapOffsetAfterForwardBatchToBefore(\n offsetAfter: number,\n forwardEdits: readonly ResolvedTextEdit[]\n): number {\n let offset = offsetAfter;\n for (const edit of forwardEdits) {\n const oldLength = edit.end - edit.start;\n const newLength = edit.text.length;\n const delta = newLength - oldLength;\n if (offset < edit.start) {\n continue;\n }\n if (offset >= edit.start + newLength) {\n offset -= delta;\n continue;\n }\n offset = edit.start + Math.min(offset - edit.start, oldLength);\n }\n return offset;\n}\n"],"mappings":"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"}
@@ -8,7 +8,6 @@ import { LanguageConfigMap } from "./languages.js";
8
8
  import { Marker } from "./marker.js";
9
9
  import { AutoSurround } from "./selection.js";
10
10
  import { SelectionActionContext } from "./selectionAction.js";
11
-
12
11
  //#region src/editor/editor.d.ts
13
12
  interface SyncRenderViewBaseProps {
14
13
  highlighter: DiffsHighlighter;
@@ -180,10 +179,7 @@ declare class Editor<EType extends EditorType = EditorType, LAnnotation = undefi
180
179
  * no complete session exists.
181
180
  */
182
181
  getEditState(): EditState<EType, LAnnotation> | undefined;
183
- setViewState({
184
- selections,
185
- view
186
- }: EditorViewState): void;
182
+ setViewState({ selections, view }: EditorViewState): void;
187
183
  setSelections(selections: (Range & {
188
184
  direction: 'none' | 'backward' | 'forward';
189
185
  })[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"editor.d.ts","names":[],"sources":["../../src/editor/editor.ts"],"mappings":"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"}
1
+ {"version":3,"file":"editor.d.ts","names":[],"sources":["../../src/editor/editor.ts"],"mappings":";;;;;;;;;;;UAwOU;EACR,aAAa;EACb,eAAe;EACf,aAAa;;EAEb;;UAGQ,wBAAwB,qBAAqB;EACrD,MAAM;EACN,iBAAiB,eAAe;;EAEhC;;UAGQ,wBAAwB,qBAAqB;EACrD,UAAU;EACV,iBAAiB,mBAAmB;;EAEpC;;KAGG,oBACH,cAAc,YACd,eACE,uBACA,wBAAwB,eACxB,wBAAwB;KAEvB,gBACH,cAAc,YACd,aACA,SACE,uBACA,KAAK,aAAa,SAClB,SAAS,aAAa;UAkBT,cAAc,cAAc,YAAY,aAAa;;EAEpE;;;;;;EAMA;;;;;;EAMA,eAAe,mBAAmB,OAAO;;EAEzC,SAAS;;EAET;;EAEA;;;;;EAKA,eAAe;;EAEf,wBAAwB;;;;;EAKxB;;;;EAIA;;;;;;;IAOE;;;;IAIA,UAAU;;;;;;IAMV,6BAA6B;;;;;;IAM7B,6BAA6B;;;;;;;EAO/B;IACE,WAAW,kBAAkB;;;EAG/B,yBACE,SAAS,uBAAuB,OAAO,iBACpC;;;;EAIL,eAAe,OAAO,YAAY,WAAW;;EAE7C,YACE,QAAQ,OAAO,OAAO,aAAa,QACnC,cAAc,gBAAgB,OAAO,aAAa;;;;;;EAOpD,YAAY,OAAO,kBAAkB,OAAO,aAAa;;;;;;EAMzD,cACE,OAAO,wBAAwB,OAAO,aAAa;;EAGrD;;EAEA;EAEA;;UAGe,2BAA2B;;EAE1C;;EAEA;;EAEA;;cAiDW,OACX,cAAc,aAAa,YAC3B,yBACA;;WAqMkB,MAAM;;;;;;;EADxB,YACkB,MAAM,OACtB,UAAS,cAAc,OAAO,aAAa,QAC3C;EAkBF,WAAW,SAAS,cAAc,OAAO,aAAa;EAmBtD,mBACE,OAAO,wBAAwB,OAAO,aAAa;;EAMrD,sBAAsB;EAItB,UAAU,QAAQ,YAAY;EA4B9B,KAAK,UAAU,gBAAgB,OAAO,aAAa,QACjD,cAAc;aAAqB;cAAoC;;;;;;;;;;;EA8HzE,WAAW,OAAO,YAAY;;MAmE1B;;MAOA;;EAOJ;;EAKA;EAIA,WAAW;EAeX;;EAKA,gBAAgB;;;;;EA6BhB,gBAAgB,UAAU,OAAO;EAcjC,eAAe,YAAY,QAAQ;EA2BnC,cACE,aAAa;IAAU;;EAoCzB,WAAW,SAAS;EA8BpB,MAAM,UAAU;EAuChB;EAiBA,QAAQ;;EAwJR;;EAWA;;EAeA,sBAAsB,eAAe,eAAe;;EAoBpD,6BAA6B;;EAQ7B,iBAAiB,OAAO,oBAAoB,OAAO"}
@@ -64,7 +64,7 @@ const MAX_EDIT_WIDEN_WINDOW_MULTIPLE = 2;
64
64
  const MAX_WRAP_OFFSETS_CACHE_LINES = 1e4;
65
65
  const EDIT_PREDICTION_DEBOUNCE_MS = 300;
66
66
  const MAX_EDIT_PREDICTION_RESPONSE_EDITS = 256;
67
- const MAX_EDIT_PREDICTION_RESPONSE_BYTES = 128 * 1024;
67
+ const MAX_EDIT_PREDICTION_RESPONSE_BYTES = 131072;
68
68
  const editPredictionTextEncoder = new TextEncoder();
69
69
  const SELECTION_ACTION_POPOVER_PLACEMENT_KEY = "selection-action";
70
70
  const MULTI_SELECTION_CLIPBOARD_TYPE = "application/vnd.pierre.diffs-selections+json";
@@ -290,8 +290,10 @@ var Editor = class {
290
290
  } catch (error) {
291
291
  this.cleanUp("recycle");
292
292
  if (editSession.type === "file-diff" && editSession.diffSession == null) editSession.diffSession = previousDiffSession;
293
- if (this.#detach == null && editStateKey != null) if (editor.type === "file") EditStateManager.releaseFile(editStateKey, editor);
294
- else EditStateManager.releaseFileDiff(editStateKey, editor);
293
+ if (this.#detach == null && editStateKey != null) {
294
+ if (editor.type === "file") EditStateManager.releaseFile(editStateKey, editor);
295
+ else EditStateManager.releaseFileDiff(editStateKey, editor);
296
+ }
295
297
  this.#editSession = previousSession;
296
298
  if (this.#detach == null) {
297
299
  this.#fileInstance = void 0;
@@ -642,10 +644,13 @@ var Editor = class {
642
644
  for (const child of el.children) {
643
645
  if (!(child instanceof HTMLElement)) continue;
644
646
  const { gutter, content } = child.dataset;
645
- if (gutter != null) if (isDeletions) deletionsGutterEl = child;
646
- else gutterEl = child;
647
- else if (content != null) if (isDeletions) deletionsContentEl = child;
648
- else contentEl = child;
647
+ if (gutter != null) {
648
+ if (isDeletions) deletionsGutterEl = child;
649
+ else gutterEl = child;
650
+ } else if (content != null) {
651
+ if (isDeletions) deletionsContentEl = child;
652
+ else contentEl = child;
653
+ }
649
654
  }
650
655
  }
651
656
  if (deletionsContentEl == null) this.#deletionsColumn = void 0;
@@ -969,9 +974,10 @@ var Editor = class {
969
974
  this.#updateSelections([extendSelection(primarySelection, selection)]);
970
975
  return;
971
976
  }
972
- if (this.#isContentMouseDown) if (this.#selectionStart !== void 0) selection = createSelectionFrom(this.#selectionStart, selection);
973
- else this.#selectionStart = selection;
974
- else if (this.#selectionStart !== void 0) selection.direction = createSelectionFrom(this.#selectionStart, selection).direction;
977
+ if (this.#isContentMouseDown) {
978
+ if (this.#selectionStart !== void 0) selection = createSelectionFrom(this.#selectionStart, selection);
979
+ else this.#selectionStart = selection;
980
+ } else if (this.#selectionStart !== void 0) selection.direction = createSelectionFrom(this.#selectionStart, selection).direction;
975
981
  else if (this.#selections !== void 0 && this.#selections.length === 1) {
976
982
  const previous = this.#selections[0];
977
983
  if (comparePosition(previous.start, selection.start) === 0 && comparePosition(previous.end, selection.end) === 0) selection.direction = previous.direction;
@@ -1522,9 +1528,7 @@ var Editor = class {
1522
1528
  }
1523
1529
  break;
1524
1530
  case "undo":
1525
- case "redo":
1526
- this.#applyHistoryChange(command);
1527
- break;
1531
+ case "redo": this.#applyHistoryChange(command);
1528
1532
  }
1529
1533
  }
1530
1534
  #applyHistoryChange(command) {
@@ -1925,9 +1929,7 @@ var Editor = class {
1925
1929
  case "insertTranspose":
1926
1930
  this.#insertTranspose();
1927
1931
  break;
1928
- default:
1929
- console.warn(`[diffs] Unknown input type: ${inputType}`, data);
1930
- break;
1932
+ default: console.warn(`[diffs] Unknown input type: ${inputType}`, data);
1931
1933
  }
1932
1934
  }
1933
1935
  #focus(position, preventScroll = true, shouldFocus) {
@@ -3077,9 +3079,11 @@ var Editor = class {
3077
3079
  const [left, wrapLine] = this.#getCharX(line, character);
3078
3080
  const cacheKey = "caret-" + line + "/" + wrapLine + ":" + character;
3079
3081
  if (renderCtx.elements.has(cacheKey)) return;
3082
+ const x = left - 1;
3083
+ const y = this.#getLineY(line) + wrapLine * this.#metrics.lineHeight;
3080
3084
  const caretEl = h("div", {
3081
3085
  dataset: "caret",
3082
- style: { transform: `translateX(${left - 1}px) translateY(${this.#getLineY(line) + wrapLine * this.#metrics.lineHeight}px)` }
3086
+ style: { transform: `translateX(${x}px) translateY(${y}px)` }
3083
3087
  }, renderCtx.fragment);
3084
3088
  renderCtx.elements.set(cacheKey, caretEl);
3085
3089
  if (isPrimary) {
@@ -3337,7 +3341,7 @@ var Editor = class {
3337
3341
  const selections = this.#selections;
3338
3342
  const textDocument = this.#editSession?.document;
3339
3343
  if (selections === void 0 || textDocument === void 0) return;
3340
- const { nextSelections, change } = applyDeleteSoftLineBackwardToSelections(textDocument, selections, this.#isWrap ? (line, character) => {
3344
+ const getSoftLineStart = this.#isWrap ? (line, character) => {
3341
3345
  const wrapOffsets = this.#wrapLineTextOrWholeLine(line);
3342
3346
  for (let w = 0; w + 1 < wrapOffsets.length; w++) {
3343
3347
  const segmentStart = wrapOffsets[w];
@@ -3345,7 +3349,8 @@ var Editor = class {
3345
3349
  if (character >= segmentStart && character <= segmentEnd) return segmentStart;
3346
3350
  }
3347
3351
  return 0;
3348
- } : void 0, this.#lineAnnotations);
3352
+ } : void 0;
3353
+ const { nextSelections, change } = applyDeleteSoftLineBackwardToSelections(textDocument, selections, getSoftLineStart, this.#lineAnnotations);
3349
3354
  if (change !== void 0) this.#applyChange(change, nextSelections, this.#applyChangeToLineAnnotations(change));
3350
3355
  }
3351
3356
  #deleteWordBackward() {