@pierre/diffs 1.4.1 → 1.4.3

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 (484) 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 +4 -15
  6. package/dist/components/File.d.ts.map +1 -1
  7. package/dist/components/File.js +4 -0
  8. package/dist/components/File.js.map +1 -1
  9. package/dist/components/FileDiff.d.ts +10 -37
  10. package/dist/components/FileDiff.d.ts.map +1 -1
  11. package/dist/components/FileDiff.js +19 -12
  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/UnresolvedFile.d.ts +1 -1
  16. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  17. package/dist/components/UnresolvedFile.js +2 -1
  18. package/dist/components/UnresolvedFile.js.map +1 -1
  19. package/dist/components/VirtualizedFile.d.ts +2 -8
  20. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  21. package/dist/components/VirtualizedFile.js +19 -18
  22. package/dist/components/VirtualizedFile.js.map +1 -1
  23. package/dist/components/VirtualizedFileDiff.d.ts +2 -8
  24. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  25. package/dist/components/VirtualizedFileDiff.js +19 -15
  26. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  27. package/dist/components/Virtualizer.d.ts +1 -5
  28. package/dist/components/Virtualizer.d.ts.map +1 -1
  29. package/dist/components/Virtualizer.js.map +1 -1
  30. package/dist/components/VirtulizerDevelopment.d.ts +0 -1
  31. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
  32. package/dist/components/web-components.d.ts.map +1 -1
  33. package/dist/components/web-components.js +2 -1
  34. package/dist/components/web-components.js.map +1 -1
  35. package/dist/constants.d.ts +0 -1
  36. package/dist/constants.d.ts.map +1 -1
  37. package/dist/editor/EditStateManager.d.ts +0 -1
  38. package/dist/editor/EditStateManager.d.ts.map +1 -1
  39. package/dist/editor/EditStateManager.js.map +1 -1
  40. package/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts +0 -1
  41. package/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts.map +1 -1
  42. package/dist/editor/command.d.ts +2 -1
  43. package/dist/editor/command.d.ts.map +1 -1
  44. package/dist/editor/editPrediction.d.ts +3 -2
  45. package/dist/editor/editPrediction.d.ts.map +1 -1
  46. package/dist/editor/editPrediction.js +11 -11
  47. package/dist/editor/editPrediction.js.map +1 -1
  48. package/dist/editor/editStack.d.ts +0 -1
  49. package/dist/editor/editStack.d.ts.map +1 -1
  50. package/dist/editor/editStack.js.map +1 -1
  51. package/dist/editor/editor.d.ts +1 -5
  52. package/dist/editor/editor.d.ts.map +1 -1
  53. package/dist/editor/editor.js +23 -20
  54. package/dist/editor/editor.js.map +1 -1
  55. package/dist/editor/editor2.js.map +1 -1
  56. package/dist/editor/languages.d.ts +0 -1
  57. package/dist/editor/languages.d.ts.map +1 -1
  58. package/dist/editor/languages.js +1 -1
  59. package/dist/editor/languages.js.map +1 -1
  60. package/dist/editor/lineAnnotations.d.ts +0 -1
  61. package/dist/editor/lineAnnotations.d.ts.map +1 -1
  62. package/dist/editor/lineAnnotations.js +2 -1
  63. package/dist/editor/lineAnnotations.js.map +1 -1
  64. package/dist/editor/marker.d.ts +0 -1
  65. package/dist/editor/marker.d.ts.map +1 -1
  66. package/dist/editor/marker.js +5 -3
  67. package/dist/editor/marker.js.map +1 -1
  68. package/dist/editor/matchBrackets.d.ts +0 -1
  69. package/dist/editor/matchBrackets.d.ts.map +1 -1
  70. package/dist/editor/pieceTable.d.ts +0 -1
  71. package/dist/editor/pieceTable.d.ts.map +1 -1
  72. package/dist/editor/pieceTable.js.map +1 -1
  73. package/dist/editor/platform.d.ts +1 -5
  74. package/dist/editor/platform.d.ts.map +1 -1
  75. package/dist/editor/platform.js.map +1 -1
  76. package/dist/editor/popover.d.ts +12 -12
  77. package/dist/editor/popover.d.ts.map +1 -1
  78. package/dist/editor/popover.js.map +1 -1
  79. package/dist/editor/searchPanel.d.ts +0 -1
  80. package/dist/editor/searchPanel.d.ts.map +1 -1
  81. package/dist/editor/searchPanel.js +16 -12
  82. package/dist/editor/searchPanel.js.map +1 -1
  83. package/dist/editor/selection.d.ts +0 -1
  84. package/dist/editor/selection.d.ts.map +1 -1
  85. package/dist/editor/selection.js.map +1 -1
  86. package/dist/editor/selectionAction.d.ts +0 -1
  87. package/dist/editor/selectionAction.d.ts.map +1 -1
  88. package/dist/editor/selectionAction.js.map +1 -1
  89. package/dist/editor/sprite.d.ts.map +1 -1
  90. package/dist/editor/textDocument.d.ts +0 -1
  91. package/dist/editor/textDocument.d.ts.map +1 -1
  92. package/dist/editor/textDocument.js.map +1 -1
  93. package/dist/editor/textDocumentChangeTransaction.d.ts +0 -1
  94. package/dist/editor/textDocumentChangeTransaction.d.ts.map +1 -1
  95. package/dist/editor/textMeasure.d.ts.map +1 -1
  96. package/dist/editor/textMeasure.js +27 -3
  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/attachResolvedLanguages.js +8 -1
  112. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  113. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  114. package/dist/highlighter/languages/constants.d.ts +1 -1
  115. package/dist/highlighter/languages/constants.d.ts.map +1 -1
  116. package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -0
  117. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  118. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -0
  119. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  120. package/dist/highlighter/languages/hasResolvedLanguages.d.ts +0 -1
  121. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  122. package/dist/highlighter/languages/registerCustomLanguage.d.ts +3 -2
  123. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  124. package/dist/highlighter/languages/registerCustomLanguage.js +3 -1
  125. package/dist/highlighter/languages/registerCustomLanguage.js.map +1 -1
  126. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -0
  127. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  128. package/dist/highlighter/languages/resolveLanguages.d.ts +1 -0
  129. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  130. package/dist/highlighter/shared_highlighter.d.ts +1 -6
  131. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  132. package/dist/highlighter/themes/areThemesAttached.d.ts +0 -1
  133. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  134. package/dist/highlighter/themes/attachResolvedThemes.d.ts +0 -1
  135. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  136. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  137. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  138. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +0 -1
  139. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  140. package/dist/highlighter/themes/getResolvedThemes.d.ts +0 -1
  141. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  142. package/dist/highlighter/themes/hasResolvedThemes.d.ts +0 -1
  143. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  144. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  145. package/dist/highlighter/themes/registerCustomTheme.d.ts +0 -1
  146. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  147. package/dist/highlighter/themes/resolveTheme.d.ts +0 -1
  148. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  149. package/dist/highlighter/themes/resolveThemes.d.ts +0 -1
  150. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  151. package/dist/highlighter/themes/themeResolution.d.ts +0 -1
  152. package/dist/highlighter/themes/themeResolution.d.ts.map +1 -1
  153. package/dist/highlighter/themes/themeResolver.d.ts +0 -1
  154. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  155. package/dist/index.d.ts +1 -0
  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 +4 -9
  228. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  229. package/dist/renderers/DiffHunksRenderer.js +28 -21
  230. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  231. package/dist/renderers/FileRenderer.d.ts +1 -0
  232. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  233. package/dist/renderers/FileRenderer.js.map +1 -1
  234. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts +3 -9
  235. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  236. package/dist/shiki-stream/stream.d.ts +0 -1
  237. package/dist/shiki-stream/stream.d.ts.map +1 -1
  238. package/dist/shiki-stream/stream.js.map +1 -1
  239. package/dist/shiki-stream/tokenizer.d.ts +0 -1
  240. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  241. package/dist/shiki-stream/types.d.ts +0 -1
  242. package/dist/shiki-stream/types.d.ts.map +1 -1
  243. package/dist/sprite.d.ts.map +1 -1
  244. package/dist/ssr/FileDiffReact.d.ts +1 -8
  245. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  246. package/dist/ssr/FileDiffReact.js +8 -3
  247. package/dist/ssr/FileDiffReact.js.map +1 -1
  248. package/dist/ssr/preloadDiffs.d.ts +6 -34
  249. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  250. package/dist/ssr/preloadFile.d.ts +1 -6
  251. package/dist/ssr/preloadFile.d.ts.map +1 -1
  252. package/dist/ssr/preloadPatchFile.d.ts +1 -5
  253. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  254. package/dist/ssr/renderHTML.d.ts +0 -1
  255. package/dist/ssr/renderHTML.d.ts.map +1 -1
  256. package/dist/string-import.d.ts.map +1 -1
  257. package/dist/style.js.map +1 -1
  258. package/dist/types.d.ts +0 -1
  259. package/dist/types.d.ts.map +1 -1
  260. package/dist/utils/annotationHelpers.d.ts +0 -1
  261. package/dist/utils/annotationHelpers.d.ts.map +1 -1
  262. package/dist/utils/appendItems.d.ts.map +1 -1
  263. package/dist/utils/applyLineTextWithNewline.d.ts.map +1 -1
  264. package/dist/utils/areDiffLineAnnotationsEqual.d.ts +0 -1
  265. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  266. package/dist/utils/areDiffRenderOptionsEqual.d.ts +0 -1
  267. package/dist/utils/areDiffRenderOptionsEqual.d.ts.map +1 -1
  268. package/dist/utils/areDiffTargetsEqual.d.ts +0 -1
  269. package/dist/utils/areDiffTargetsEqual.d.ts.map +1 -1
  270. package/dist/utils/areFileRenderOptionsEqual.d.ts +0 -1
  271. package/dist/utils/areFileRenderOptionsEqual.d.ts.map +1 -1
  272. package/dist/utils/areFileTargetsEqual.d.ts +0 -1
  273. package/dist/utils/areFileTargetsEqual.d.ts.map +1 -1
  274. package/dist/utils/areFilesEqual.d.ts +0 -1
  275. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  276. package/dist/utils/areHunkDataEqual.d.ts +0 -1
  277. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  278. package/dist/utils/areLineAnnotationsEqual.d.ts +0 -1
  279. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  280. package/dist/utils/areManagedSnapshotsEqual.d.ts +0 -1
  281. package/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
  282. package/dist/utils/areMergeConflictActionsEqual.d.ts +0 -1
  283. package/dist/utils/areMergeConflictActionsEqual.d.ts.map +1 -1
  284. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  285. package/dist/utils/areOptionsEqual.d.ts +1 -0
  286. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  287. package/dist/utils/arePrePropertiesEqual.d.ts +0 -1
  288. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  289. package/dist/utils/areRenderRangesEqual.d.ts +0 -1
  290. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  291. package/dist/utils/areSelectionPointsEqual.d.ts +0 -1
  292. package/dist/utils/areSelectionPointsEqual.d.ts.map +1 -1
  293. package/dist/utils/areSelectionsEqual.d.ts +0 -1
  294. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  295. package/dist/utils/areThemesEqual.d.ts +0 -1
  296. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  297. package/dist/utils/areVirtualWindowSpecsEqual.d.ts +0 -1
  298. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  299. package/dist/utils/areWorkerStatsEqual.d.ts +1 -0
  300. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  301. package/dist/utils/awaitWithTimeout.d.ts.map +1 -1
  302. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  303. package/dist/utils/cloneFileDiffMetadata.d.ts +0 -1
  304. package/dist/utils/cloneFileDiffMetadata.d.ts.map +1 -1
  305. package/dist/utils/composeCacheKey.d.ts.map +1 -1
  306. package/dist/utils/computeEstimatedDiffHeights.d.ts +1 -11
  307. package/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
  308. package/dist/utils/computeFileOffsets.d.ts.map +1 -1
  309. package/dist/utils/computeFileOffsets.js +9 -8
  310. package/dist/utils/computeFileOffsets.js.map +1 -1
  311. package/dist/utils/computeVirtualFileMetrics.d.ts +0 -1
  312. package/dist/utils/computeVirtualFileMetrics.d.ts.map +1 -1
  313. package/dist/utils/createAnnotationElement.d.ts +0 -1
  314. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  315. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  316. package/dist/utils/createCodeViewHeaderFooterHostElement.d.ts.map +1 -1
  317. package/dist/utils/createContentColumn.d.ts +0 -1
  318. package/dist/utils/createContentColumn.d.ts.map +1 -1
  319. package/dist/utils/createEmptyRowBuffer.d.ts +0 -1
  320. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  321. package/dist/utils/createFileHeaderElement.d.ts +1 -6
  322. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  323. package/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -1
  324. package/dist/utils/createGutterUtilityElement.d.ts +0 -1
  325. package/dist/utils/createGutterUtilityElement.d.ts.map +1 -1
  326. package/dist/utils/createNoNewlineElement.d.ts +0 -1
  327. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  328. package/dist/utils/createPreElement.d.ts +1 -11
  329. package/dist/utils/createPreElement.d.ts.map +1 -1
  330. package/dist/utils/createRowNodes.d.ts.map +1 -1
  331. package/dist/utils/createSeparator.d.ts +1 -10
  332. package/dist/utils/createSeparator.d.ts.map +1 -1
  333. package/dist/utils/createSeparator.js +12 -10
  334. package/dist/utils/createSeparator.js.map +1 -1
  335. package/dist/utils/createSpanNodeFromToken.d.ts +0 -1
  336. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  337. package/dist/utils/createSpanNodeFromToken.js +2 -1
  338. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  339. package/dist/utils/createStyleElement.d.ts +0 -1
  340. package/dist/utils/createStyleElement.d.ts.map +1 -1
  341. package/dist/utils/createTransformerWithState.d.ts +0 -1
  342. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  343. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  344. package/dist/utils/createWindowFromScrollPosition.d.ts +1 -9
  345. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  346. package/dist/utils/cssWrappers.d.ts +0 -1
  347. package/dist/utils/cssWrappers.d.ts.map +1 -1
  348. package/dist/utils/cssWrappers.js +5 -3
  349. package/dist/utils/cssWrappers.js.map +1 -1
  350. package/dist/utils/detachString.d.ts.map +1 -1
  351. package/dist/utils/diffAcceptRejectHunk.d.ts +0 -1
  352. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  353. package/dist/utils/editSessionAnnotations.d.ts +0 -1
  354. package/dist/utils/editSessionAnnotations.d.ts.map +1 -1
  355. package/dist/utils/editSessionHunks.d.ts +0 -1
  356. package/dist/utils/editSessionHunks.d.ts.map +1 -1
  357. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  358. package/dist/utils/getDiffFileInput.d.ts +1 -5
  359. package/dist/utils/getDiffFileInput.d.ts.map +1 -1
  360. package/dist/utils/getDiffHunksRendererOptions.d.ts +0 -1
  361. package/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -1
  362. package/dist/utils/getFileRendererOptions.d.ts +0 -1
  363. package/dist/utils/getFileRendererOptions.d.ts.map +1 -1
  364. package/dist/utils/getFiletypeFromFileName.d.ts +0 -1
  365. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  366. package/dist/utils/getFiletypeFromFileName.js.map +1 -1
  367. package/dist/utils/getHighlighterOptions.d.ts +1 -5
  368. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  369. package/dist/utils/getHighlighterOptions.js +1 -1
  370. package/dist/utils/getHighlighterOptions.js.map +1 -1
  371. package/dist/utils/getHighlighterThemeStyles.d.ts +1 -6
  372. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  373. package/dist/utils/getHunkSeparatorSlotName.d.ts +0 -1
  374. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  375. package/dist/utils/getHunkSideBoundaries.d.ts.map +1 -1
  376. package/dist/utils/getIconForType.d.ts +0 -1
  377. package/dist/utils/getIconForType.d.ts.map +1 -1
  378. package/dist/utils/getLineAnnotationName.d.ts +0 -1
  379. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  380. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  381. package/dist/utils/getLineNodes.d.ts +0 -1
  382. package/dist/utils/getLineNodes.d.ts.map +1 -1
  383. package/dist/utils/getMergeConflictActionSlotName.d.ts +1 -5
  384. package/dist/utils/getMergeConflictActionSlotName.d.ts.map +1 -1
  385. package/dist/utils/getMergeConflictLineTypes.d.ts +0 -1
  386. package/dist/utils/getMergeConflictLineTypes.d.ts.map +1 -1
  387. package/dist/utils/getOrCreateCodeNode.d.ts +1 -7
  388. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  389. package/dist/utils/getSingularPatch.d.ts +0 -1
  390. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  391. package/dist/utils/getThemes.d.ts +0 -1
  392. package/dist/utils/getThemes.d.ts.map +1 -1
  393. package/dist/utils/getTotalLineCountFromHunks.d.ts +0 -1
  394. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  395. package/dist/utils/guardWebKitScrollDuringRebuild.d.ts.map +1 -1
  396. package/dist/utils/hast_utils.d.ts +2 -12
  397. package/dist/utils/hast_utils.d.ts.map +1 -1
  398. package/dist/utils/hostTheme.d.ts +1 -5
  399. package/dist/utils/hostTheme.d.ts.map +1 -1
  400. package/dist/utils/hydratePartialDiff.d.ts +0 -1
  401. package/dist/utils/hydratePartialDiff.d.ts.map +1 -1
  402. package/dist/utils/includesFileAnnotations.d.ts +0 -1
  403. package/dist/utils/includesFileAnnotations.d.ts.map +1 -1
  404. package/dist/utils/isDefaultRenderRange.d.ts +0 -1
  405. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  406. package/dist/utils/isDiffPlainText.d.ts +0 -1
  407. package/dist/utils/isDiffPlainText.d.ts.map +1 -1
  408. package/dist/utils/isFilePlainText.d.ts +0 -1
  409. package/dist/utils/isFilePlainText.d.ts.map +1 -1
  410. package/dist/utils/isGutterUtilityPath.d.ts.map +1 -1
  411. package/dist/utils/isStyleNode.d.ts.map +1 -1
  412. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  413. package/dist/utils/iterateOverDiff.d.ts +1 -10
  414. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  415. package/dist/utils/iterateOverDiff.js +5 -3
  416. package/dist/utils/iterateOverDiff.js.map +1 -1
  417. package/dist/utils/lineAnnotationIdentity.d.ts +0 -1
  418. package/dist/utils/lineAnnotationIdentity.d.ts.map +1 -1
  419. package/dist/utils/normalizeDiffResolution.d.ts +0 -1
  420. package/dist/utils/normalizeDiffResolution.d.ts.map +1 -1
  421. package/dist/utils/parseDiffDecorations.d.ts +2 -13
  422. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  423. package/dist/utils/parseDiffFromFile.d.ts +0 -1
  424. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  425. package/dist/utils/parseDiffFromFile.js +2 -1
  426. package/dist/utils/parseDiffFromFile.js.map +1 -1
  427. package/dist/utils/parseLineType.d.ts +0 -1
  428. package/dist/utils/parseLineType.d.ts.map +1 -1
  429. package/dist/utils/parseMergeConflictDiffFromFile.d.ts +0 -1
  430. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  431. package/dist/utils/parsePatchFiles.d.ts +0 -1
  432. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  433. package/dist/utils/parsePatchFiles.js +8 -5
  434. package/dist/utils/parsePatchFiles.js.map +1 -1
  435. package/dist/utils/platform.d.ts.map +1 -1
  436. package/dist/utils/prefersReducedMotion.d.ts.map +1 -1
  437. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  438. package/dist/utils/processLine.d.ts +0 -1
  439. package/dist/utils/processLine.d.ts.map +1 -1
  440. package/dist/utils/realignChangeContent.d.ts +0 -1
  441. package/dist/utils/realignChangeContent.d.ts.map +1 -1
  442. package/dist/utils/renderDiffWithHighlighter.d.ts +1 -8
  443. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  444. package/dist/utils/renderFileWithHighlighter.d.ts +1 -11
  445. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  446. package/dist/utils/resolveConflict.d.ts +0 -1
  447. package/dist/utils/resolveConflict.d.ts.map +1 -1
  448. package/dist/utils/resolveRegion.d.ts +0 -1
  449. package/dist/utils/resolveRegion.d.ts.map +1 -1
  450. package/dist/utils/roundToDevicePixel.d.ts.map +1 -1
  451. package/dist/utils/scrollbarGutter.d.ts.map +1 -1
  452. package/dist/utils/scrollbarGutter.js +2 -1
  453. package/dist/utils/scrollbarGutter.js.map +1 -1
  454. package/dist/utils/setLanguageOverride.d.ts +0 -1
  455. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  456. package/dist/utils/setWrapperNodeProps.d.ts +1 -11
  457. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  458. package/dist/utils/setWrapperNodeProps.js +1 -3
  459. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  460. package/dist/utils/shouldUseTokenTransformer.d.ts +0 -1
  461. package/dist/utils/shouldUseTokenTransformer.d.ts.map +1 -1
  462. package/dist/utils/splitFileContents.d.ts.map +1 -1
  463. package/dist/utils/trimPatchContext.d.ts.map +1 -1
  464. package/dist/utils/updateDiffHunks.d.ts +0 -1
  465. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  466. package/dist/utils/virtualDiffLayout.d.ts +10 -55
  467. package/dist/utils/virtualDiffLayout.d.ts.map +1 -1
  468. package/dist/utils/wrapTokenFragments.d.ts +0 -1
  469. package/dist/utils/wrapTokenFragments.d.ts.map +1 -1
  470. package/dist/worker/WorkerPoolManager.d.ts +2 -17
  471. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  472. package/dist/worker/WorkerPoolManager.js +48 -43
  473. package/dist/worker/WorkerPoolManager.js.map +1 -1
  474. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts +1 -5
  475. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  476. package/dist/worker/types.d.ts +0 -1
  477. package/dist/worker/types.d.ts.map +1 -1
  478. package/dist/worker/worker-portable.d.ts +1 -1
  479. package/dist/worker/worker-portable.js +121 -355
  480. package/dist/worker/worker-portable.js.map +1 -1
  481. package/dist/worker/worker.d.ts +1 -1
  482. package/dist/worker/worker.js +22 -12
  483. package/dist/worker/worker.js.map +1 -1
  484. 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;
@@ -962,16 +967,15 @@ var Editor = class {
962
967
  if (typeof selectionRaw.getComposedRanges === "function") composedRange = selectionRaw.getComposedRanges({ shadowRoots: [shadowRoot] })?.[0];
963
968
  else composedRange = getShadowRootRange(shadowRoot);
964
969
  if (composedRange === void 0 || !this.#rangeBelongsToEditor(composedRange)) return;
965
- let selection = convertSelection(composedRange, 0);
970
+ const selection = convertSelection(composedRange, 0);
966
971
  if (selection === void 0) return;
967
972
  if (this.#isContentMouseDown && this.#shiftKeyPressed && this.#selections !== void 0 && this.#selections.length > 0) {
968
973
  const primarySelection = this.#selections.at(-1);
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.#selectionStart !== void 0) selection.direction = createSelectionFrom(this.#selectionStart, selection).direction;
978
+ else if (this.#isContentMouseDown) this.#selectionStart = selection;
975
979
  else if (this.#selections !== void 0 && this.#selections.length === 1) {
976
980
  const previous = this.#selections[0];
977
981
  if (comparePosition(previous.start, selection.start) === 0 && comparePosition(previous.end, selection.end) === 0) selection.direction = previous.direction;
@@ -1522,9 +1526,7 @@ var Editor = class {
1522
1526
  }
1523
1527
  break;
1524
1528
  case "undo":
1525
- case "redo":
1526
- this.#applyHistoryChange(command);
1527
- break;
1529
+ case "redo": this.#applyHistoryChange(command);
1528
1530
  }
1529
1531
  }
1530
1532
  #applyHistoryChange(command) {
@@ -1925,9 +1927,7 @@ var Editor = class {
1925
1927
  case "insertTranspose":
1926
1928
  this.#insertTranspose();
1927
1929
  break;
1928
- default:
1929
- console.warn(`[diffs] Unknown input type: ${inputType}`, data);
1930
- break;
1930
+ default: console.warn(`[diffs] Unknown input type: ${inputType}`, data);
1931
1931
  }
1932
1932
  }
1933
1933
  #focus(position, preventScroll = true, shouldFocus) {
@@ -3077,9 +3077,11 @@ var Editor = class {
3077
3077
  const [left, wrapLine] = this.#getCharX(line, character);
3078
3078
  const cacheKey = "caret-" + line + "/" + wrapLine + ":" + character;
3079
3079
  if (renderCtx.elements.has(cacheKey)) return;
3080
+ const x = left - 1;
3081
+ const y = this.#getLineY(line) + wrapLine * this.#metrics.lineHeight;
3080
3082
  const caretEl = h("div", {
3081
3083
  dataset: "caret",
3082
- style: { transform: `translateX(${left - 1}px) translateY(${this.#getLineY(line) + wrapLine * this.#metrics.lineHeight}px)` }
3084
+ style: { transform: `translateX(${x}px) translateY(${y}px)` }
3083
3085
  }, renderCtx.fragment);
3084
3086
  renderCtx.elements.set(cacheKey, caretEl);
3085
3087
  if (isPrimary) {
@@ -3337,7 +3339,7 @@ var Editor = class {
3337
3339
  const selections = this.#selections;
3338
3340
  const textDocument = this.#editSession?.document;
3339
3341
  if (selections === void 0 || textDocument === void 0) return;
3340
- const { nextSelections, change } = applyDeleteSoftLineBackwardToSelections(textDocument, selections, this.#isWrap ? (line, character) => {
3342
+ const getSoftLineStart = this.#isWrap ? (line, character) => {
3341
3343
  const wrapOffsets = this.#wrapLineTextOrWholeLine(line);
3342
3344
  for (let w = 0; w + 1 < wrapOffsets.length; w++) {
3343
3345
  const segmentStart = wrapOffsets[w];
@@ -3345,7 +3347,8 @@ var Editor = class {
3345
3347
  if (character >= segmentStart && character <= segmentEnd) return segmentStart;
3346
3348
  }
3347
3349
  return 0;
3348
- } : void 0, this.#lineAnnotations);
3350
+ } : void 0;
3351
+ const { nextSelections, change } = applyDeleteSoftLineBackwardToSelections(textDocument, selections, getSoftLineStart, this.#lineAnnotations);
3349
3352
  if (change !== void 0) this.#applyChange(change, nextSelections, this.#applyChangeToLineAnnotations(change));
3350
3353
  }
3351
3354
  #deleteWordBackward() {