@pierre/diffs 1.4.0 → 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 (485) hide show
  1. package/dist/components/CodeView.d.ts +6 -4
  2. package/dist/components/CodeView.d.ts.map +1 -1
  3. package/dist/components/CodeView.js +44 -7
  4. package/dist/components/CodeView.js.map +1 -1
  5. package/dist/components/File.d.ts +10 -18
  6. package/dist/components/File.d.ts.map +1 -1
  7. package/dist/components/File.js +70 -53
  8. package/dist/components/File.js.map +1 -1
  9. package/dist/components/FileDiff.d.ts +16 -40
  10. package/dist/components/FileDiff.d.ts.map +1 -1
  11. package/dist/components/FileDiff.js +94 -61
  12. package/dist/components/FileDiff.js.map +1 -1
  13. package/dist/components/FileStream.d.ts +1 -0
  14. package/dist/components/FileStream.d.ts.map +1 -1
  15. package/dist/components/FileStream.js +1 -1
  16. package/dist/components/UnresolvedFile.d.ts +1 -1
  17. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  18. package/dist/components/UnresolvedFile.js +2 -1
  19. package/dist/components/UnresolvedFile.js.map +1 -1
  20. package/dist/components/VirtualizedFile.d.ts +3 -8
  21. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  22. package/dist/components/VirtualizedFile.js +19 -17
  23. package/dist/components/VirtualizedFile.js.map +1 -1
  24. package/dist/components/VirtualizedFileDiff.d.ts +3 -8
  25. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  26. package/dist/components/VirtualizedFileDiff.js +19 -17
  27. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  28. package/dist/components/Virtualizer.d.ts +1 -5
  29. package/dist/components/Virtualizer.d.ts.map +1 -1
  30. package/dist/components/Virtualizer.js.map +1 -1
  31. package/dist/components/VirtulizerDevelopment.d.ts +0 -1
  32. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
  33. package/dist/components/web-components.d.ts.map +1 -1
  34. package/dist/components/web-components.js +2 -1
  35. package/dist/components/web-components.js.map +1 -1
  36. package/dist/constants.d.ts +0 -1
  37. package/dist/constants.d.ts.map +1 -1
  38. package/dist/editor/EditStateManager.d.ts +0 -1
  39. package/dist/editor/EditStateManager.d.ts.map +1 -1
  40. package/dist/editor/EditStateManager.js.map +1 -1
  41. package/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts +0 -1
  42. package/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts.map +1 -1
  43. package/dist/editor/command.d.ts +2 -1
  44. package/dist/editor/command.d.ts.map +1 -1
  45. package/dist/editor/editPrediction.d.ts +3 -2
  46. package/dist/editor/editPrediction.d.ts.map +1 -1
  47. package/dist/editor/editPrediction.js +11 -11
  48. package/dist/editor/editPrediction.js.map +1 -1
  49. package/dist/editor/editStack.d.ts +0 -1
  50. package/dist/editor/editStack.d.ts.map +1 -1
  51. package/dist/editor/editStack.js.map +1 -1
  52. package/dist/editor/editor.d.ts +2 -6
  53. package/dist/editor/editor.d.ts.map +1 -1
  54. package/dist/editor/editor.js +32 -23
  55. package/dist/editor/editor.js.map +1 -1
  56. package/dist/editor/editor2.js.map +1 -1
  57. package/dist/editor/languages.d.ts +0 -1
  58. package/dist/editor/languages.d.ts.map +1 -1
  59. package/dist/editor/languages.js +1 -1
  60. package/dist/editor/languages.js.map +1 -1
  61. package/dist/editor/lineAnnotations.d.ts +0 -1
  62. package/dist/editor/lineAnnotations.d.ts.map +1 -1
  63. package/dist/editor/lineAnnotations.js +2 -1
  64. package/dist/editor/lineAnnotations.js.map +1 -1
  65. package/dist/editor/marker.d.ts +0 -1
  66. package/dist/editor/marker.d.ts.map +1 -1
  67. package/dist/editor/marker.js +5 -3
  68. package/dist/editor/marker.js.map +1 -1
  69. package/dist/editor/matchBrackets.d.ts +0 -1
  70. package/dist/editor/matchBrackets.d.ts.map +1 -1
  71. package/dist/editor/pieceTable.d.ts +0 -1
  72. package/dist/editor/pieceTable.d.ts.map +1 -1
  73. package/dist/editor/pieceTable.js.map +1 -1
  74. package/dist/editor/platform.d.ts +1 -5
  75. package/dist/editor/platform.d.ts.map +1 -1
  76. package/dist/editor/platform.js.map +1 -1
  77. package/dist/editor/popover.d.ts +12 -12
  78. package/dist/editor/popover.d.ts.map +1 -1
  79. package/dist/editor/popover.js.map +1 -1
  80. package/dist/editor/searchPanel.d.ts +0 -1
  81. package/dist/editor/searchPanel.d.ts.map +1 -1
  82. package/dist/editor/searchPanel.js +16 -12
  83. package/dist/editor/searchPanel.js.map +1 -1
  84. package/dist/editor/selection.d.ts +0 -1
  85. package/dist/editor/selection.d.ts.map +1 -1
  86. package/dist/editor/selection.js.map +1 -1
  87. package/dist/editor/selectionAction.d.ts +0 -1
  88. package/dist/editor/selectionAction.d.ts.map +1 -1
  89. package/dist/editor/selectionAction.js.map +1 -1
  90. package/dist/editor/sprite.d.ts.map +1 -1
  91. package/dist/editor/textDocument.d.ts +0 -1
  92. package/dist/editor/textDocument.d.ts.map +1 -1
  93. package/dist/editor/textDocument.js.map +1 -1
  94. package/dist/editor/textDocumentChangeTransaction.d.ts +0 -1
  95. package/dist/editor/textDocumentChangeTransaction.d.ts.map +1 -1
  96. package/dist/editor/textMeasure.d.ts.map +1 -1
  97. package/dist/editor/textMeasure.js.map +1 -1
  98. package/dist/editor/tokenizer.d.ts +1 -11
  99. package/dist/editor/tokenizer.d.ts.map +1 -1
  100. package/dist/editor/tokenizer.js +8 -4
  101. package/dist/editor/tokenizer.js.map +1 -1
  102. package/dist/editor/types.d.ts +0 -1
  103. package/dist/editor/types.d.ts.map +1 -1
  104. package/dist/editor/utils.d.ts.map +1 -1
  105. package/dist/editor/utils.js +11 -7
  106. package/dist/editor/utils.js.map +1 -1
  107. package/dist/highlighter/languages/areLanguagesAttached.d.ts +0 -1
  108. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  109. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +1 -0
  110. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  111. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  112. package/dist/highlighter/languages/constants.d.ts +1 -1
  113. package/dist/highlighter/languages/constants.d.ts.map +1 -1
  114. package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -0
  115. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  116. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -0
  117. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  118. package/dist/highlighter/languages/hasResolvedLanguages.d.ts +0 -1
  119. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  120. package/dist/highlighter/languages/registerCustomLanguage.d.ts +0 -1
  121. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  122. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -0
  123. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  124. package/dist/highlighter/languages/resolveLanguages.d.ts +1 -0
  125. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  126. package/dist/highlighter/shared_highlighter.d.ts +7 -8
  127. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  128. package/dist/highlighter/shared_highlighter.js +7 -3
  129. package/dist/highlighter/shared_highlighter.js.map +1 -1
  130. package/dist/highlighter/themes/areThemesAttached.d.ts +0 -1
  131. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  132. package/dist/highlighter/themes/areThemesAttached.js +1 -1
  133. package/dist/highlighter/themes/attachResolvedThemes.d.ts +0 -1
  134. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  135. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  136. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  137. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +0 -1
  138. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  139. package/dist/highlighter/themes/getResolvedThemes.d.ts +0 -1
  140. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  141. package/dist/highlighter/themes/hasResolvedThemes.d.ts +0 -1
  142. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  143. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  144. package/dist/highlighter/themes/registerCustomTheme.d.ts +0 -1
  145. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  146. package/dist/highlighter/themes/resolveTheme.d.ts +0 -1
  147. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  148. package/dist/highlighter/themes/resolveThemes.d.ts +0 -1
  149. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  150. package/dist/highlighter/themes/themeResolution.d.ts +0 -1
  151. package/dist/highlighter/themes/themeResolution.d.ts.map +1 -1
  152. package/dist/highlighter/themes/themeResolver.d.ts +0 -1
  153. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  154. package/dist/index.d.ts +1 -0
  155. package/dist/index.js +13 -13
  156. package/dist/managers/InteractionManager.d.ts +2 -26
  157. package/dist/managers/InteractionManager.d.ts.map +1 -1
  158. package/dist/managers/InteractionManager.js +1 -3
  159. package/dist/managers/InteractionManager.js.map +1 -1
  160. package/dist/managers/ResizeManager.d.ts +1 -4
  161. package/dist/managers/ResizeManager.d.ts.map +1 -1
  162. package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  163. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  164. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +0 -1
  165. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
  166. package/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts.map +1 -1
  167. package/dist/react/CodeView.d.ts +9 -1
  168. package/dist/react/CodeView.d.ts.map +1 -1
  169. package/dist/react/CodeView.js +39 -33
  170. package/dist/react/CodeView.js.map +1 -1
  171. package/dist/react/EditContext.d.ts +2 -5
  172. package/dist/react/EditContext.d.ts.map +1 -1
  173. package/dist/react/File.d.ts +1 -23
  174. package/dist/react/File.d.ts.map +1 -1
  175. package/dist/react/File.js +13 -12
  176. package/dist/react/File.js.map +1 -1
  177. package/dist/react/FileDiff.d.ts +1 -23
  178. package/dist/react/FileDiff.d.ts.map +1 -1
  179. package/dist/react/FileDiff.js +13 -12
  180. package/dist/react/FileDiff.js.map +1 -1
  181. package/dist/react/MultiFileDiff.d.ts +1 -24
  182. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  183. package/dist/react/MultiFileDiff.js +13 -12
  184. package/dist/react/MultiFileDiff.js.map +1 -1
  185. package/dist/react/PatchDiff.d.ts +1 -23
  186. package/dist/react/PatchDiff.d.ts.map +1 -1
  187. package/dist/react/PatchDiff.js +13 -12
  188. package/dist/react/PatchDiff.js.map +1 -1
  189. package/dist/react/UnresolvedFile.d.ts +1 -18
  190. package/dist/react/UnresolvedFile.d.ts.map +1 -1
  191. package/dist/react/UnresolvedFile.js +15 -14
  192. package/dist/react/UnresolvedFile.js.map +1 -1
  193. package/dist/react/Virtualizer.d.ts +1 -9
  194. package/dist/react/Virtualizer.d.ts.map +1 -1
  195. package/dist/react/Virtualizer.js.map +1 -1
  196. package/dist/react/WorkerPoolContext.d.ts +2 -6
  197. package/dist/react/WorkerPoolContext.d.ts.map +1 -1
  198. package/dist/react/constants.d.ts +0 -1
  199. package/dist/react/constants.d.ts.map +1 -1
  200. package/dist/react/jsx.d.ts +1 -0
  201. package/dist/react/jsx.d.ts.map +1 -1
  202. package/dist/react/types.d.ts +1 -1
  203. package/dist/react/types.d.ts.map +1 -1
  204. package/dist/react/utils/assignRef.d.ts +6 -0
  205. package/dist/react/utils/assignRef.d.ts.map +1 -0
  206. package/dist/react/utils/assignRef.js +9 -0
  207. package/dist/react/utils/assignRef.js.map +1 -0
  208. package/dist/react/utils/renderDiffChildren.d.ts +1 -16
  209. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  210. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  211. package/dist/react/utils/renderFileChildren.d.ts +1 -13
  212. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  213. package/dist/react/utils/renderFileChildren.js.map +1 -1
  214. package/dist/react/utils/templateRender.d.ts +0 -1
  215. package/dist/react/utils/templateRender.d.ts.map +1 -1
  216. package/dist/react/utils/useFileDiffInstance.d.ts +2 -18
  217. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  218. package/dist/react/utils/useFileDiffInstance.js +31 -17
  219. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  220. package/dist/react/utils/useFileInstance.d.ts +2 -16
  221. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  222. package/dist/react/utils/useFileInstance.js +8 -4
  223. package/dist/react/utils/useFileInstance.js.map +1 -1
  224. package/dist/react/utils/useStableCallback.d.ts.map +1 -1
  225. package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -12
  226. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  227. package/dist/renderers/DiffHunksRenderer.d.ts +5 -10
  228. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  229. package/dist/renderers/DiffHunksRenderer.js +36 -30
  230. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  231. package/dist/renderers/FileRenderer.d.ts +2 -1
  232. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  233. package/dist/renderers/FileRenderer.js +5 -5
  234. package/dist/renderers/FileRenderer.js.map +1 -1
  235. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts +3 -9
  236. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  237. package/dist/shiki-stream/stream.d.ts +0 -1
  238. package/dist/shiki-stream/stream.d.ts.map +1 -1
  239. package/dist/shiki-stream/stream.js.map +1 -1
  240. package/dist/shiki-stream/tokenizer.d.ts +0 -1
  241. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  242. package/dist/shiki-stream/types.d.ts +0 -1
  243. package/dist/shiki-stream/types.d.ts.map +1 -1
  244. package/dist/sprite.d.ts.map +1 -1
  245. package/dist/ssr/FileDiffReact.d.ts +1 -8
  246. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  247. package/dist/ssr/FileDiffReact.js +8 -3
  248. package/dist/ssr/FileDiffReact.js.map +1 -1
  249. package/dist/ssr/preloadDiffs.d.ts +6 -34
  250. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  251. package/dist/ssr/preloadFile.d.ts +1 -6
  252. package/dist/ssr/preloadFile.d.ts.map +1 -1
  253. package/dist/ssr/preloadPatchFile.d.ts +1 -5
  254. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  255. package/dist/ssr/renderHTML.d.ts +0 -1
  256. package/dist/ssr/renderHTML.d.ts.map +1 -1
  257. package/dist/string-import.d.ts.map +1 -1
  258. package/dist/style.js.map +1 -1
  259. package/dist/types.d.ts +0 -1
  260. package/dist/types.d.ts.map +1 -1
  261. package/dist/utils/annotationHelpers.d.ts +0 -1
  262. package/dist/utils/annotationHelpers.d.ts.map +1 -1
  263. package/dist/utils/appendItems.d.ts.map +1 -1
  264. package/dist/utils/applyLineTextWithNewline.d.ts.map +1 -1
  265. package/dist/utils/areDiffLineAnnotationsEqual.d.ts +0 -1
  266. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  267. package/dist/utils/areDiffRenderOptionsEqual.d.ts +0 -1
  268. package/dist/utils/areDiffRenderOptionsEqual.d.ts.map +1 -1
  269. package/dist/utils/areDiffTargetsEqual.d.ts +0 -1
  270. package/dist/utils/areDiffTargetsEqual.d.ts.map +1 -1
  271. package/dist/utils/areFileRenderOptionsEqual.d.ts +0 -1
  272. package/dist/utils/areFileRenderOptionsEqual.d.ts.map +1 -1
  273. package/dist/utils/areFileTargetsEqual.d.ts +0 -1
  274. package/dist/utils/areFileTargetsEqual.d.ts.map +1 -1
  275. package/dist/utils/areFilesEqual.d.ts +0 -1
  276. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  277. package/dist/utils/areHunkDataEqual.d.ts +0 -1
  278. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  279. package/dist/utils/areLineAnnotationsEqual.d.ts +0 -1
  280. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  281. package/dist/utils/areManagedSnapshotsEqual.d.ts +0 -1
  282. package/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
  283. package/dist/utils/areMergeConflictActionsEqual.d.ts +0 -1
  284. package/dist/utils/areMergeConflictActionsEqual.d.ts.map +1 -1
  285. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  286. package/dist/utils/areOptionsEqual.d.ts +1 -0
  287. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  288. package/dist/utils/arePrePropertiesEqual.d.ts +0 -1
  289. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  290. package/dist/utils/areRenderRangesEqual.d.ts +0 -1
  291. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  292. package/dist/utils/areSelectionPointsEqual.d.ts +0 -1
  293. package/dist/utils/areSelectionPointsEqual.d.ts.map +1 -1
  294. package/dist/utils/areSelectionsEqual.d.ts +0 -1
  295. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  296. package/dist/utils/areThemesEqual.d.ts +0 -1
  297. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  298. package/dist/utils/areVirtualWindowSpecsEqual.d.ts +0 -1
  299. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  300. package/dist/utils/areWorkerStatsEqual.d.ts +1 -0
  301. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  302. package/dist/utils/awaitWithTimeout.d.ts.map +1 -1
  303. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  304. package/dist/utils/cloneFileDiffMetadata.d.ts +0 -1
  305. package/dist/utils/cloneFileDiffMetadata.d.ts.map +1 -1
  306. package/dist/utils/composeCacheKey.d.ts.map +1 -1
  307. package/dist/utils/computeEstimatedDiffHeights.d.ts +1 -11
  308. package/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
  309. package/dist/utils/computeFileOffsets.d.ts.map +1 -1
  310. package/dist/utils/computeFileOffsets.js +9 -8
  311. package/dist/utils/computeFileOffsets.js.map +1 -1
  312. package/dist/utils/computeVirtualFileMetrics.d.ts +0 -1
  313. package/dist/utils/computeVirtualFileMetrics.d.ts.map +1 -1
  314. package/dist/utils/createAnnotationElement.d.ts +0 -1
  315. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  316. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  317. package/dist/utils/createCodeViewHeaderFooterHostElement.d.ts.map +1 -1
  318. package/dist/utils/createContentColumn.d.ts +0 -1
  319. package/dist/utils/createContentColumn.d.ts.map +1 -1
  320. package/dist/utils/createEmptyRowBuffer.d.ts +0 -1
  321. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  322. package/dist/utils/createFileHeaderElement.d.ts +1 -6
  323. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  324. package/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -1
  325. package/dist/utils/createGutterUtilityElement.d.ts +0 -1
  326. package/dist/utils/createGutterUtilityElement.d.ts.map +1 -1
  327. package/dist/utils/createNoNewlineElement.d.ts +0 -1
  328. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  329. package/dist/utils/createPreElement.d.ts +1 -11
  330. package/dist/utils/createPreElement.d.ts.map +1 -1
  331. package/dist/utils/createRowNodes.d.ts.map +1 -1
  332. package/dist/utils/createSeparator.d.ts +1 -10
  333. package/dist/utils/createSeparator.d.ts.map +1 -1
  334. package/dist/utils/createSeparator.js +12 -10
  335. package/dist/utils/createSeparator.js.map +1 -1
  336. package/dist/utils/createSpanNodeFromToken.d.ts +0 -1
  337. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  338. package/dist/utils/createSpanNodeFromToken.js +2 -1
  339. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  340. package/dist/utils/createStyleElement.d.ts +0 -1
  341. package/dist/utils/createStyleElement.d.ts.map +1 -1
  342. package/dist/utils/createTransformerWithState.d.ts +0 -1
  343. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  344. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  345. package/dist/utils/createWindowFromScrollPosition.d.ts +1 -9
  346. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  347. package/dist/utils/cssWrappers.d.ts +0 -1
  348. package/dist/utils/cssWrappers.d.ts.map +1 -1
  349. package/dist/utils/cssWrappers.js +5 -3
  350. package/dist/utils/cssWrappers.js.map +1 -1
  351. package/dist/utils/detachString.d.ts.map +1 -1
  352. package/dist/utils/diffAcceptRejectHunk.d.ts +0 -1
  353. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  354. package/dist/utils/editSessionAnnotations.d.ts +0 -1
  355. package/dist/utils/editSessionAnnotations.d.ts.map +1 -1
  356. package/dist/utils/editSessionHunks.d.ts +0 -1
  357. package/dist/utils/editSessionHunks.d.ts.map +1 -1
  358. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  359. package/dist/utils/getDiffFileInput.d.ts +1 -5
  360. package/dist/utils/getDiffFileInput.d.ts.map +1 -1
  361. package/dist/utils/getDiffHunksRendererOptions.d.ts +0 -1
  362. package/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -1
  363. package/dist/utils/getFileRendererOptions.d.ts +0 -1
  364. package/dist/utils/getFileRendererOptions.d.ts.map +1 -1
  365. package/dist/utils/getFiletypeFromFileName.d.ts +0 -1
  366. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  367. package/dist/utils/getFiletypeFromFileName.js.map +1 -1
  368. package/dist/utils/getHighlighterOptions.d.ts +1 -5
  369. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  370. package/dist/utils/getHighlighterOptions.js +1 -1
  371. package/dist/utils/getHighlighterOptions.js.map +1 -1
  372. package/dist/utils/getHighlighterThemeStyles.d.ts +1 -6
  373. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  374. package/dist/utils/getHunkSeparatorSlotName.d.ts +0 -1
  375. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  376. package/dist/utils/getHunkSideBoundaries.d.ts.map +1 -1
  377. package/dist/utils/getIconForType.d.ts +0 -1
  378. package/dist/utils/getIconForType.d.ts.map +1 -1
  379. package/dist/utils/getLineAnnotationName.d.ts +0 -1
  380. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  381. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  382. package/dist/utils/getLineNodes.d.ts +0 -1
  383. package/dist/utils/getLineNodes.d.ts.map +1 -1
  384. package/dist/utils/getMergeConflictActionSlotName.d.ts +1 -5
  385. package/dist/utils/getMergeConflictActionSlotName.d.ts.map +1 -1
  386. package/dist/utils/getMergeConflictLineTypes.d.ts +0 -1
  387. package/dist/utils/getMergeConflictLineTypes.d.ts.map +1 -1
  388. package/dist/utils/getOrCreateCodeNode.d.ts +1 -7
  389. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  390. package/dist/utils/getSingularPatch.d.ts +0 -1
  391. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  392. package/dist/utils/getThemes.d.ts +0 -1
  393. package/dist/utils/getThemes.d.ts.map +1 -1
  394. package/dist/utils/getTotalLineCountFromHunks.d.ts +0 -1
  395. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  396. package/dist/utils/guardWebKitScrollDuringRebuild.d.ts.map +1 -1
  397. package/dist/utils/hast_utils.d.ts +2 -12
  398. package/dist/utils/hast_utils.d.ts.map +1 -1
  399. package/dist/utils/hostTheme.d.ts +1 -5
  400. package/dist/utils/hostTheme.d.ts.map +1 -1
  401. package/dist/utils/hydratePartialDiff.d.ts +0 -1
  402. package/dist/utils/hydratePartialDiff.d.ts.map +1 -1
  403. package/dist/utils/includesFileAnnotations.d.ts +0 -1
  404. package/dist/utils/includesFileAnnotations.d.ts.map +1 -1
  405. package/dist/utils/isDefaultRenderRange.d.ts +0 -1
  406. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  407. package/dist/utils/isDiffPlainText.d.ts +0 -1
  408. package/dist/utils/isDiffPlainText.d.ts.map +1 -1
  409. package/dist/utils/isFilePlainText.d.ts +0 -1
  410. package/dist/utils/isFilePlainText.d.ts.map +1 -1
  411. package/dist/utils/isGutterUtilityPath.d.ts.map +1 -1
  412. package/dist/utils/isStyleNode.d.ts.map +1 -1
  413. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  414. package/dist/utils/iterateOverDiff.d.ts +1 -10
  415. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  416. package/dist/utils/iterateOverDiff.js +5 -3
  417. package/dist/utils/iterateOverDiff.js.map +1 -1
  418. package/dist/utils/lineAnnotationIdentity.d.ts +0 -1
  419. package/dist/utils/lineAnnotationIdentity.d.ts.map +1 -1
  420. package/dist/utils/normalizeDiffResolution.d.ts +0 -1
  421. package/dist/utils/normalizeDiffResolution.d.ts.map +1 -1
  422. package/dist/utils/parseDiffDecorations.d.ts +2 -13
  423. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  424. package/dist/utils/parseDiffFromFile.d.ts +0 -1
  425. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  426. package/dist/utils/parseDiffFromFile.js +2 -1
  427. package/dist/utils/parseDiffFromFile.js.map +1 -1
  428. package/dist/utils/parseLineType.d.ts +0 -1
  429. package/dist/utils/parseLineType.d.ts.map +1 -1
  430. package/dist/utils/parseMergeConflictDiffFromFile.d.ts +0 -1
  431. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  432. package/dist/utils/parsePatchFiles.d.ts +0 -1
  433. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  434. package/dist/utils/parsePatchFiles.js +8 -5
  435. package/dist/utils/parsePatchFiles.js.map +1 -1
  436. package/dist/utils/platform.d.ts.map +1 -1
  437. package/dist/utils/prefersReducedMotion.d.ts.map +1 -1
  438. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  439. package/dist/utils/processLine.d.ts +0 -1
  440. package/dist/utils/processLine.d.ts.map +1 -1
  441. package/dist/utils/realignChangeContent.d.ts +0 -1
  442. package/dist/utils/realignChangeContent.d.ts.map +1 -1
  443. package/dist/utils/renderDiffWithHighlighter.d.ts +1 -8
  444. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  445. package/dist/utils/renderFileWithHighlighter.d.ts +1 -11
  446. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  447. package/dist/utils/resolveConflict.d.ts +0 -1
  448. package/dist/utils/resolveConflict.d.ts.map +1 -1
  449. package/dist/utils/resolveRegion.d.ts +0 -1
  450. package/dist/utils/resolveRegion.d.ts.map +1 -1
  451. package/dist/utils/roundToDevicePixel.d.ts.map +1 -1
  452. package/dist/utils/scrollbarGutter.d.ts.map +1 -1
  453. package/dist/utils/scrollbarGutter.js +2 -1
  454. package/dist/utils/scrollbarGutter.js.map +1 -1
  455. package/dist/utils/setLanguageOverride.d.ts +0 -1
  456. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  457. package/dist/utils/setWrapperNodeProps.d.ts +1 -11
  458. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  459. package/dist/utils/setWrapperNodeProps.js +1 -3
  460. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  461. package/dist/utils/shouldUseTokenTransformer.d.ts +0 -1
  462. package/dist/utils/shouldUseTokenTransformer.d.ts.map +1 -1
  463. package/dist/utils/splitFileContents.d.ts.map +1 -1
  464. package/dist/utils/trimPatchContext.d.ts.map +1 -1
  465. package/dist/utils/updateDiffHunks.d.ts +0 -1
  466. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  467. package/dist/utils/virtualDiffLayout.d.ts +10 -55
  468. package/dist/utils/virtualDiffLayout.d.ts.map +1 -1
  469. package/dist/utils/wrapTokenFragments.d.ts +0 -1
  470. package/dist/utils/wrapTokenFragments.d.ts.map +1 -1
  471. package/dist/worker/WorkerPoolManager.d.ts +2 -17
  472. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  473. package/dist/worker/WorkerPoolManager.js +19 -7
  474. package/dist/worker/WorkerPoolManager.js.map +1 -1
  475. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts +1 -5
  476. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  477. package/dist/worker/types.d.ts +0 -1
  478. package/dist/worker/types.d.ts.map +1 -1
  479. package/dist/worker/worker-portable.d.ts +1 -1
  480. package/dist/worker/worker-portable.js +113 -354
  481. package/dist/worker/worker-portable.js.map +1 -1
  482. package/dist/worker/worker.d.ts +1 -1
  483. package/dist/worker/worker.js +14 -11
  484. package/dist/worker/worker.js.map +1 -1
  485. 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;
@@ -200,7 +196,7 @@ declare class Editor<EType extends EditorType = EditorType, LAnnotation = undefi
200
196
  /** @internal */
201
197
  __getDocumentSessionState(): RetainedDiffSessionSnapshot | undefined;
202
198
  /** @internal */
203
- __syncRenderView: (props: SyncRenderViewProps<EType, LAnnotation>) => void;
199
+ __syncRenderView(props: SyncRenderViewProps<EType, LAnnotation>): void;
204
200
  }
205
201
  //#endregion
206
202
  export { type EditPredictContext, type EditPredictProvider, type EditPredictRequest, type EditPredictResponse, Editor, EditorFocusOptions, EditorOptions };
@@ -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";
@@ -265,6 +265,7 @@ var Editor = class {
265
265
  editor,
266
266
  lineAnnotations
267
267
  };
268
+ fileInstance.__acceptEditorChange(event);
268
269
  editor.#options.onChange?.(event);
269
270
  fileInstance.emitEditChange(event);
270
271
  };
@@ -279,6 +280,7 @@ var Editor = class {
279
280
  editor,
280
281
  lineAnnotations
281
282
  };
283
+ fileInstance.__acceptEditorChange(event);
282
284
  editor.#options.onChange?.(event);
283
285
  fileInstance.emitEditChange(event);
284
286
  };
@@ -288,8 +290,10 @@ var Editor = class {
288
290
  } catch (error) {
289
291
  this.cleanUp("recycle");
290
292
  if (editSession.type === "file-diff" && editSession.diffSession == null) editSession.diffSession = previousDiffSession;
291
- if (this.#detach == null && editStateKey != null) if (editor.type === "file") EditStateManager.releaseFile(editStateKey, editor);
292
- 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
+ }
293
297
  this.#editSession = previousSession;
294
298
  if (this.#detach == null) {
295
299
  this.#fileInstance = void 0;
@@ -612,8 +616,8 @@ var Editor = class {
612
616
  return snapshot != null ? cloneRetainedDiffSessionSnapshot(snapshot) : void 0;
613
617
  }
614
618
  /** @internal */
615
- __syncRenderView = (props) => {
616
- const { highlighter, fileContainer, renderRange, resetHistory = false } = props;
619
+ __syncRenderView(props) {
620
+ const { highlighter, fileContainer, renderRange, externalDocument = false } = props;
617
621
  const renderView = props;
618
622
  let fileOrDiff;
619
623
  if ("file" in renderView && this.type === "file") fileOrDiff = renderView.file;
@@ -621,7 +625,6 @@ var Editor = class {
621
625
  else throw new Error("Editor.__syncRenderView: Impossible render state");
622
626
  const lineAnnotations = renderView.lineAnnotations;
623
627
  const editStateKey = this.#editStateKey;
624
- const externalDocument = renderView.externalDocument === true;
625
628
  const fileInstance = this.#fileInstance;
626
629
  const editSession = this.#editSession;
627
630
  if (!this.#isRendering || fileInstance == null || editSession == null) return;
@@ -641,10 +644,13 @@ var Editor = class {
641
644
  for (const child of el.children) {
642
645
  if (!(child instanceof HTMLElement)) continue;
643
646
  const { gutter, content } = child.dataset;
644
- if (gutter != null) if (isDeletions) deletionsGutterEl = child;
645
- else gutterEl = child;
646
- else if (content != null) if (isDeletions) deletionsContentEl = child;
647
- 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
+ }
648
654
  }
649
655
  }
650
656
  if (deletionsContentEl == null) this.#deletionsColumn = void 0;
@@ -668,6 +674,7 @@ var Editor = class {
668
674
  const languageId = fileOrDiff.lang ?? getFiletypeFromFileName(fileOrDiff.name);
669
675
  const contents = "contents" in fileOrDiff ? fileOrDiff.contents : fileOrDiff.additionLines.join("");
670
676
  const previousTextDocument = editSession.document;
677
+ const resetHistory = props.resetHistory ?? (previousTextDocument != null && editSession.fileInfo != null && (editSession.fileInfo.name !== fileOrDiff.name || previousTextDocument.languageId !== languageId));
671
678
  const documentChanges = externalDocument && previousTextDocument !== void 0 && previousTextDocument.getText() !== contents ? [createFullDocumentChange(previousTextDocument.getText(), contents)] : void 0;
672
679
  const resetForExternalDocument = externalDocument && resetHistory;
673
680
  if (editSession.document == null || editSession.fileInfo == null || editStateKey == null && (editSession.fileInfo.name !== fileOrDiff.name || editSession.document.languageId !== languageId) || resetForExternalDocument) {
@@ -768,6 +775,7 @@ var Editor = class {
768
775
  const { startingLine, totalLines } = renderRange;
769
776
  console.log("[diffs/editor] render file:", fileOrDiff.name, "RenderRange:", startingLine + "-" + (startingLine + totalLines), "of", editSession.document?.lineCount, "lines");
770
777
  }
778
+ if (externalDocument) fileInstance.__acknowledgeDocumentUpdate();
771
779
  this.#checkpointEditSessionState();
772
780
  } catch (error) {
773
781
  this.#restoreEditorStateOnSync = restoreEditorStateOnSync;
@@ -776,7 +784,7 @@ var Editor = class {
776
784
  }
777
785
  if (documentChanges != null) this.#emitChange(documentChanges, lineAnnotations);
778
786
  this.#scheduleOnAttach(fileInstance);
779
- };
787
+ }
780
788
  #applyExternalDocumentReplacement(editSession, contents, lineAnnotations) {
781
789
  const textDocument = editSession.document;
782
790
  if (textDocument == null || textDocument.getText() === contents) return;
@@ -966,9 +974,10 @@ var Editor = class {
966
974
  this.#updateSelections([extendSelection(primarySelection, selection)]);
967
975
  return;
968
976
  }
969
- if (this.#isContentMouseDown) if (this.#selectionStart !== void 0) selection = createSelectionFrom(this.#selectionStart, selection);
970
- else this.#selectionStart = selection;
971
- 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;
972
981
  else if (this.#selections !== void 0 && this.#selections.length === 1) {
973
982
  const previous = this.#selections[0];
974
983
  if (comparePosition(previous.start, selection.start) === 0 && comparePosition(previous.end, selection.end) === 0) selection.direction = previous.direction;
@@ -1519,9 +1528,7 @@ var Editor = class {
1519
1528
  }
1520
1529
  break;
1521
1530
  case "undo":
1522
- case "redo":
1523
- this.#applyHistoryChange(command);
1524
- break;
1531
+ case "redo": this.#applyHistoryChange(command);
1525
1532
  }
1526
1533
  }
1527
1534
  #applyHistoryChange(command) {
@@ -1922,9 +1929,7 @@ var Editor = class {
1922
1929
  case "insertTranspose":
1923
1930
  this.#insertTranspose();
1924
1931
  break;
1925
- default:
1926
- console.warn(`[diffs] Unknown input type: ${inputType}`, data);
1927
- break;
1932
+ default: console.warn(`[diffs] Unknown input type: ${inputType}`, data);
1928
1933
  }
1929
1934
  }
1930
1935
  #focus(position, preventScroll = true, shouldFocus) {
@@ -3074,9 +3079,11 @@ var Editor = class {
3074
3079
  const [left, wrapLine] = this.#getCharX(line, character);
3075
3080
  const cacheKey = "caret-" + line + "/" + wrapLine + ":" + character;
3076
3081
  if (renderCtx.elements.has(cacheKey)) return;
3082
+ const x = left - 1;
3083
+ const y = this.#getLineY(line) + wrapLine * this.#metrics.lineHeight;
3077
3084
  const caretEl = h("div", {
3078
3085
  dataset: "caret",
3079
- style: { transform: `translateX(${left - 1}px) translateY(${this.#getLineY(line) + wrapLine * this.#metrics.lineHeight}px)` }
3086
+ style: { transform: `translateX(${x}px) translateY(${y}px)` }
3080
3087
  }, renderCtx.fragment);
3081
3088
  renderCtx.elements.set(cacheKey, caretEl);
3082
3089
  if (isPrimary) {
@@ -3334,7 +3341,7 @@ var Editor = class {
3334
3341
  const selections = this.#selections;
3335
3342
  const textDocument = this.#editSession?.document;
3336
3343
  if (selections === void 0 || textDocument === void 0) return;
3337
- const { nextSelections, change } = applyDeleteSoftLineBackwardToSelections(textDocument, selections, this.#isWrap ? (line, character) => {
3344
+ const getSoftLineStart = this.#isWrap ? (line, character) => {
3338
3345
  const wrapOffsets = this.#wrapLineTextOrWholeLine(line);
3339
3346
  for (let w = 0; w + 1 < wrapOffsets.length; w++) {
3340
3347
  const segmentStart = wrapOffsets[w];
@@ -3342,7 +3349,8 @@ var Editor = class {
3342
3349
  if (character >= segmentStart && character <= segmentEnd) return segmentStart;
3343
3350
  }
3344
3351
  return 0;
3345
- } : void 0, this.#lineAnnotations);
3352
+ } : void 0;
3353
+ const { nextSelections, change } = applyDeleteSoftLineBackwardToSelections(textDocument, selections, getSoftLineStart, this.#lineAnnotations);
3346
3354
  if (change !== void 0) this.#applyChange(change, nextSelections, this.#applyChangeToLineAnnotations(change));
3347
3355
  }
3348
3356
  #deleteWordBackward() {
@@ -3403,6 +3411,7 @@ var Editor = class {
3403
3411
  }
3404
3412
  this.#rerender(change, newLineAnnotations, renderRange, shouldUpdateBuffer);
3405
3413
  if (newSelections != null) this.#updateSelections(newSelections);
3414
+ this.#fileInstance?.__acknowledgeDocumentUpdate();
3406
3415
  this.#checkpointEditSessionState();
3407
3416
  this.#recordEditPredictionHistory(change, options?.editSource ?? "user");
3408
3417
  this.#scheduleEditPrediction();