@pierre/diffs 1.5.2 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/README.md +4 -3
  2. package/dist/components/CodeView.d.ts +3 -2
  3. package/dist/components/CodeView.d.ts.map +1 -1
  4. package/dist/components/CodeView.js +24 -19
  5. package/dist/components/CodeView.js.map +1 -1
  6. package/dist/components/File.d.ts +31 -9
  7. package/dist/components/File.d.ts.map +1 -1
  8. package/dist/components/File.js +176 -90
  9. package/dist/components/File.js.map +1 -1
  10. package/dist/components/FileDiff.d.ts +32 -9
  11. package/dist/components/FileDiff.d.ts.map +1 -1
  12. package/dist/components/FileDiff.js +225 -131
  13. package/dist/components/FileDiff.js.map +1 -1
  14. package/dist/components/FileStream.d.ts +6 -4
  15. package/dist/components/FileStream.d.ts.map +1 -1
  16. package/dist/components/FileStream.js +49 -36
  17. package/dist/components/FileStream.js.map +1 -1
  18. package/dist/components/UnresolvedFile.d.ts +14 -4
  19. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  20. package/dist/components/UnresolvedFile.js +35 -16
  21. package/dist/components/UnresolvedFile.js.map +1 -1
  22. package/dist/components/VirtualizedFile.d.ts +3 -2
  23. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  24. package/dist/components/VirtualizedFile.js +28 -20
  25. package/dist/components/VirtualizedFile.js.map +1 -1
  26. package/dist/components/VirtualizedFileDiff.d.ts +3 -2
  27. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  28. package/dist/components/VirtualizedFileDiff.js +31 -24
  29. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  30. package/dist/constants.d.ts +4 -2
  31. package/dist/constants.d.ts.map +1 -1
  32. package/dist/constants.js +3 -1
  33. package/dist/constants.js.map +1 -1
  34. package/dist/editor/editor.d.ts +2 -1
  35. package/dist/editor/editor.d.ts.map +1 -1
  36. package/dist/editor/editor.js +5 -1
  37. package/dist/editor/editor.js.map +1 -1
  38. package/dist/editor/platform.d.ts +1 -1
  39. package/dist/editor/platform.js +5 -4
  40. package/dist/editor/platform.js.map +1 -1
  41. package/dist/editor/selection.d.ts +2 -2
  42. package/dist/editor/selection.d.ts.map +1 -1
  43. package/dist/editor/selection.js +31 -6
  44. package/dist/editor/selection.js.map +1 -1
  45. package/dist/editor/tokenizer.d.ts +6 -4
  46. package/dist/editor/tokenizer.d.ts.map +1 -1
  47. package/dist/editor/tokenizer.js +25 -470
  48. package/dist/editor/tokenizer.js.map +1 -1
  49. package/dist/highlighter/DiffsEditorTokenizer.d.ts +16 -0
  50. package/dist/highlighter/DiffsEditorTokenizer.d.ts.map +1 -0
  51. package/dist/highlighter/DiffsEditorTokenizer.js +0 -0
  52. package/dist/highlighter/DiffsHighlighter.d.ts +41 -0
  53. package/dist/highlighter/DiffsHighlighter.d.ts.map +1 -0
  54. package/dist/highlighter/DiffsHighlighter.js +39 -0
  55. package/dist/highlighter/DiffsHighlighter.js.map +1 -0
  56. package/dist/highlighter/backends/highlights.d.ts +26 -0
  57. package/dist/highlighter/backends/highlights.d.ts.map +1 -0
  58. package/dist/highlighter/backends/highlights.js +71 -0
  59. package/dist/highlighter/backends/highlights.js.map +1 -0
  60. package/dist/highlighter/backends/shiki.d.ts +27 -0
  61. package/dist/highlighter/backends/shiki.d.ts.map +1 -0
  62. package/dist/highlighter/backends/shiki.js +107 -0
  63. package/dist/highlighter/backends/shiki.js.map +1 -0
  64. package/dist/highlighter/highlighterType.d.ts +13 -0
  65. package/dist/highlighter/highlighterType.d.ts.map +1 -0
  66. package/dist/highlighter/highlighterType.js +32 -0
  67. package/dist/highlighter/highlighterType.js.map +1 -0
  68. package/dist/highlighter/highlights-editor.d.ts +24 -0
  69. package/dist/highlighter/highlights-editor.d.ts.map +1 -0
  70. package/dist/highlighter/highlights-editor.js +166 -0
  71. package/dist/highlighter/highlights-editor.js.map +1 -0
  72. package/dist/highlighter/highlights-stream.d.ts +20 -0
  73. package/dist/highlighter/highlights-stream.d.ts.map +1 -0
  74. package/dist/highlighter/highlights-stream.js +93 -0
  75. package/dist/highlighter/highlights-stream.js.map +1 -0
  76. package/dist/highlighter/languages/areLanguagesAttached.d.ts +2 -1
  77. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  78. package/dist/highlighter/languages/areLanguagesAttached.js +4 -6
  79. package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
  80. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +6 -1
  81. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  82. package/dist/highlighter/languages/attachResolvedLanguages.js +6 -11
  83. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  84. package/dist/highlighter/languages/constants.d.ts +1 -1
  85. package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -1
  86. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
  87. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
  88. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  89. package/dist/highlighter/languages/resolveLanguage.js +19 -16
  90. package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
  91. package/dist/highlighter/languages/resolveLanguages.d.ts +1 -1
  92. package/dist/highlighter/shared_highlighter.d.ts +24 -9
  93. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  94. package/dist/highlighter/shared_highlighter.js +59 -47
  95. package/dist/highlighter/shared_highlighter.js.map +1 -1
  96. package/dist/highlighter/shiki-editor.d.ts +25 -0
  97. package/dist/highlighter/shiki-editor.d.ts.map +1 -0
  98. package/dist/highlighter/shiki-editor.js +483 -0
  99. package/dist/highlighter/shiki-editor.js.map +1 -0
  100. package/dist/highlighter/shiki-stream.d.ts +20 -0
  101. package/dist/highlighter/shiki-stream.d.ts.map +1 -0
  102. package/dist/highlighter/shiki-stream.js +60 -0
  103. package/dist/highlighter/shiki-stream.js.map +1 -0
  104. package/dist/highlighter/stream-tokenizer.d.ts +40 -0
  105. package/dist/highlighter/stream-tokenizer.d.ts.map +1 -0
  106. package/dist/highlighter/stream-tokenizer.js +70 -0
  107. package/dist/highlighter/stream-tokenizer.js.map +1 -0
  108. package/dist/highlighter/themes/areThemesAttached.d.ts +3 -2
  109. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  110. package/dist/highlighter/themes/areThemesAttached.js +5 -4
  111. package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
  112. package/dist/highlighter/themes/attachResolvedThemes.d.ts +5 -2
  113. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  114. package/dist/highlighter/themes/attachResolvedThemes.js +4 -16
  115. package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
  116. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts +3 -1
  117. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  118. package/dist/highlighter/themes/cleanUpResolvedThemes.js +8 -5
  119. package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
  120. package/dist/highlighter/themes/createCSSVariablesTheme.d.ts +7 -0
  121. package/dist/highlighter/themes/createCSSVariablesTheme.d.ts.map +1 -0
  122. package/dist/highlighter/themes/createCSSVariablesTheme.js +89 -0
  123. package/dist/highlighter/themes/createCSSVariablesTheme.js.map +1 -0
  124. package/dist/highlighter/themes/createCachedLoader.d.ts +5 -0
  125. package/dist/highlighter/themes/createCachedLoader.d.ts.map +1 -0
  126. package/dist/highlighter/themes/createCachedLoader.js +15 -0
  127. package/dist/highlighter/themes/createCachedLoader.js.map +1 -0
  128. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +3 -2
  129. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  130. package/dist/highlighter/themes/getResolvedOrResolveTheme.js +4 -4
  131. package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
  132. package/dist/highlighter/themes/getResolvedThemes.d.ts +3 -2
  133. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  134. package/dist/highlighter/themes/getResolvedThemes.js +4 -3
  135. package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
  136. package/dist/highlighter/themes/hasResolvedThemes.d.ts +2 -2
  137. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  138. package/dist/highlighter/themes/hasResolvedThemes.js +4 -3
  139. package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
  140. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  141. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +3 -3
  142. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
  143. package/dist/highlighter/themes/registerCustomTheme.d.ts +9 -4
  144. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  145. package/dist/highlighter/themes/registerCustomTheme.js +8 -16
  146. package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
  147. package/dist/highlighter/themes/resolveTheme.d.ts +3 -2
  148. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  149. package/dist/highlighter/themes/resolveTheme.js +4 -7
  150. package/dist/highlighter/themes/resolveTheme.js.map +1 -1
  151. package/dist/highlighter/themes/resolveThemes.d.ts +3 -2
  152. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  153. package/dist/highlighter/themes/resolveThemes.js +4 -7
  154. package/dist/highlighter/themes/resolveThemes.js.map +1 -1
  155. package/dist/highlighter/themes/themeResolver.d.ts +10 -4
  156. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  157. package/dist/highlighter/themes/themeResolver.js +141 -2
  158. package/dist/highlighter/themes/themeResolver.js.map +1 -1
  159. package/dist/highlighter/themes/types.d.ts +23 -0
  160. package/dist/highlighter/themes/types.d.ts.map +1 -0
  161. package/dist/highlighter/themes/types.js +0 -0
  162. package/dist/highlighter/tokenizer-types.d.ts +35 -0
  163. package/dist/highlighter/tokenizer-types.d.ts.map +1 -0
  164. package/dist/highlighter/tokenizer-types.js +0 -0
  165. package/dist/highlighter/types.d.ts +55 -0
  166. package/dist/highlighter/types.d.ts.map +1 -0
  167. package/dist/highlighter/types.js +0 -0
  168. package/dist/index.d.ts +22 -13
  169. package/dist/index.js +21 -18
  170. package/dist/managers/InteractionManager.d.ts.map +1 -1
  171. package/dist/managers/InteractionManager.js +2 -2
  172. package/dist/managers/InteractionManager.js.map +1 -1
  173. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +9 -1
  174. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
  175. package/dist/react/CodeView.d.ts +4 -3
  176. package/dist/react/CodeView.d.ts.map +1 -1
  177. package/dist/react/CodeView.js +47 -38
  178. package/dist/react/CodeView.js.map +1 -1
  179. package/dist/react/File.js +3 -3
  180. package/dist/react/File.js.map +1 -1
  181. package/dist/react/FileDiff.js +3 -3
  182. package/dist/react/FileDiff.js.map +1 -1
  183. package/dist/react/MultiFileDiff.js +2 -2
  184. package/dist/react/MultiFileDiff.js.map +1 -1
  185. package/dist/react/PatchDiff.js +3 -3
  186. package/dist/react/PatchDiff.js.map +1 -1
  187. package/dist/react/UnresolvedFile.js +2 -2
  188. package/dist/react/UnresolvedFile.js.map +1 -1
  189. package/dist/react/index.d.ts +9 -4
  190. package/dist/react/types.d.ts +4 -2
  191. package/dist/react/types.d.ts.map +1 -1
  192. package/dist/react/utils/renderDiffChildren.js +1 -1
  193. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  194. package/dist/react/utils/renderFileChildren.js +1 -1
  195. package/dist/react/utils/renderFileChildren.js.map +1 -1
  196. package/dist/react/utils/useFileDiffInstance.d.ts +1 -0
  197. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  198. package/dist/react/utils/useFileDiffInstance.js +29 -24
  199. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  200. package/dist/react/utils/useFileInstance.d.ts +2 -0
  201. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  202. package/dist/react/utils/useFileInstance.js +38 -28
  203. package/dist/react/utils/useFileInstance.js.map +1 -1
  204. package/dist/react/utils/useForceUpdate.d.ts +5 -0
  205. package/dist/react/utils/useForceUpdate.d.ts.map +1 -0
  206. package/dist/react/utils/useForceUpdate.js +27 -0
  207. package/dist/react/utils/useForceUpdate.js.map +1 -0
  208. package/dist/react/utils/useNextRenderData.d.ts +9 -0
  209. package/dist/react/utils/useNextRenderData.d.ts.map +1 -0
  210. package/dist/react/utils/useNextRenderData.js +9 -0
  211. package/dist/react/utils/useNextRenderData.js.map +1 -0
  212. package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -0
  213. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  214. package/dist/react/utils/useUnresolvedFileInstance.js +26 -11
  215. package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
  216. package/dist/renderers/DiffHunksRenderer.d.ts +4 -2
  217. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  218. package/dist/renderers/DiffHunksRenderer.js +82 -43
  219. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  220. package/dist/renderers/FileRenderer.d.ts +6 -2
  221. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  222. package/dist/renderers/FileRenderer.js +77 -43
  223. package/dist/renderers/FileRenderer.js.map +1 -1
  224. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  225. package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -1
  226. package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
  227. package/dist/shiki-stream/index.d.ts +3 -3
  228. package/dist/shiki-stream/index.js +1 -2
  229. package/dist/shiki-stream/stream.d.ts +4 -4
  230. package/dist/shiki-stream/stream.d.ts.map +1 -1
  231. package/dist/shiki-stream/stream.js +20 -9
  232. package/dist/shiki-stream/stream.js.map +1 -1
  233. package/dist/shiki-stream/types.d.ts +7 -38
  234. package/dist/shiki-stream/types.d.ts.map +1 -1
  235. package/dist/ssr/index.d.ts +7 -2
  236. package/dist/ssr/renderHTML.js +2 -2
  237. package/dist/ssr/renderHTML.js.map +1 -1
  238. package/dist/style.js +1 -1
  239. package/dist/style.js.map +1 -1
  240. package/dist/types.d.ts +20 -11
  241. package/dist/types.d.ts.map +1 -1
  242. package/dist/utils/canUseWASM.d.ts +13 -0
  243. package/dist/utils/canUseWASM.d.ts.map +1 -0
  244. package/dist/utils/canUseWASM.js +59 -0
  245. package/dist/utils/canUseWASM.js.map +1 -0
  246. package/dist/utils/createSpanNodeFromToken.d.ts +3 -2
  247. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  248. package/dist/utils/createSpanNodeFromToken.js +4 -5
  249. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  250. package/dist/utils/cssWrappers.d.ts.map +1 -1
  251. package/dist/utils/cssWrappers.js +12 -0
  252. package/dist/utils/cssWrappers.js.map +1 -1
  253. package/dist/utils/getCodeViewItemRenderData.d.ts +10 -0
  254. package/dist/utils/getCodeViewItemRenderData.d.ts.map +1 -0
  255. package/dist/utils/getCodeViewItemRenderData.js +19 -0
  256. package/dist/utils/getCodeViewItemRenderData.js.map +1 -0
  257. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  258. package/dist/utils/getHighlighterOptions.js +3 -2
  259. package/dist/utils/getHighlighterOptions.js.map +1 -1
  260. package/dist/utils/getHighlighterThemeStyles.d.ts +2 -1
  261. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  262. package/dist/utils/getHighlighterThemeStyles.js +13 -3
  263. package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
  264. package/dist/utils/getTokenOptions.d.ts +7 -0
  265. package/dist/utils/getTokenOptions.d.ts.map +1 -0
  266. package/dist/utils/getTokenOptions.js +16 -0
  267. package/dist/utils/getTokenOptions.js.map +1 -0
  268. package/dist/utils/hastToHtml.d.ts +10 -0
  269. package/dist/utils/hastToHtml.d.ts.map +1 -0
  270. package/dist/utils/hastToHtml.js +125 -0
  271. package/dist/utils/hastToHtml.js.map +1 -0
  272. package/dist/utils/hydratePartialDiff.js +4 -0
  273. package/dist/utils/hydratePartialDiff.js.map +1 -1
  274. package/dist/utils/parseDiffDecorations.d.ts +2 -1
  275. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  276. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  277. package/dist/utils/parseMergeConflictDiffFromFile.js +2 -0
  278. package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
  279. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  280. package/dist/utils/parsePatchFiles.js +24 -4
  281. package/dist/utils/parsePatchFiles.js.map +1 -1
  282. package/dist/utils/renderDiffWithHighlighter.d.ts +3 -2
  283. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  284. package/dist/utils/renderDiffWithHighlighter.js +33 -48
  285. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  286. package/dist/utils/renderFileWithHighlighter.d.ts +3 -2
  287. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  288. package/dist/utils/renderFileWithHighlighter.js +10 -26
  289. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  290. package/dist/utils/renderTokenLines.d.ts +22 -0
  291. package/dist/utils/renderTokenLines.d.ts.map +1 -0
  292. package/dist/utils/renderTokenLines.js +250 -0
  293. package/dist/utils/renderTokenLines.js.map +1 -0
  294. package/dist/utils/resolvePreferredHighlighter.d.ts +13 -0
  295. package/dist/utils/resolvePreferredHighlighter.d.ts.map +1 -0
  296. package/dist/utils/resolvePreferredHighlighter.js +11 -0
  297. package/dist/utils/resolvePreferredHighlighter.js.map +1 -0
  298. package/dist/utils/resolveRegion.js +20 -10
  299. package/dist/utils/resolveRegion.js.map +1 -1
  300. package/dist/utils/setDeferredArrayItem.d.ts +5 -0
  301. package/dist/utils/setDeferredArrayItem.d.ts.map +1 -0
  302. package/dist/utils/setDeferredArrayItem.js +39 -0
  303. package/dist/utils/setDeferredArrayItem.js.map +1 -0
  304. package/dist/utils/tokenStyle.d.ts +11 -0
  305. package/dist/utils/tokenStyle.d.ts.map +1 -0
  306. package/dist/utils/tokenStyle.js +32 -0
  307. package/dist/utils/tokenStyle.js.map +1 -0
  308. package/dist/utils/tokensToHtml.d.ts +11 -0
  309. package/dist/utils/tokensToHtml.d.ts.map +1 -0
  310. package/dist/utils/tokensToHtml.js +48 -0
  311. package/dist/utils/tokensToHtml.js.map +1 -0
  312. package/dist/utils/updateDiffHunks.d.ts +2 -2
  313. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  314. package/dist/utils/updateDiffHunks.js +7 -3
  315. package/dist/utils/updateDiffHunks.js.map +1 -1
  316. package/dist/utils/wrapTokenFragments.js.map +1 -1
  317. package/dist/worker/WorkerPoolManager.d.ts +14 -2
  318. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  319. package/dist/worker/WorkerPoolManager.js +155 -67
  320. package/dist/worker/WorkerPoolManager.js.map +1 -1
  321. package/dist/worker/hastLinesTransport.d.ts +14 -0
  322. package/dist/worker/hastLinesTransport.d.ts.map +1 -0
  323. package/dist/worker/hastLinesTransport.js +156 -0
  324. package/dist/worker/hastLinesTransport.js.map +1 -0
  325. package/dist/worker/highlights-CpZm9DAR.js +317 -0
  326. package/dist/worker/highlights-CpZm9DAR.js.map +1 -0
  327. package/dist/worker/index.d.ts +1 -1
  328. package/dist/worker/shiki-Ci4cdHsM.js +697 -0
  329. package/dist/worker/shiki-Ci4cdHsM.js.map +1 -0
  330. package/dist/worker/stream-tokenizer-DK9xp5M5.js +427 -0
  331. package/dist/worker/stream-tokenizer-DK9xp5M5.js.map +1 -0
  332. package/dist/worker/types.d.ts +16 -3
  333. package/dist/worker/types.d.ts.map +1 -1
  334. package/dist/worker/worker-portable.js +41 -13337
  335. package/dist/worker/worker-portable.js.map +1 -1
  336. package/dist/worker/worker.js +681 -349
  337. package/dist/worker/worker.js.map +1 -1
  338. package/dist/worker/workerMessage.d.ts +24 -0
  339. package/dist/worker/workerMessage.d.ts.map +1 -0
  340. package/dist/worker/workerMessage.js +0 -0
  341. package/package.json +5 -3
  342. package/dist/highlighter/themes/constants.d.ts +0 -5
  343. package/dist/highlighter/themes/constants.d.ts.map +0 -1
  344. package/dist/highlighter/themes/constants.js +0 -6
  345. package/dist/highlighter/themes/constants.js.map +0 -1
  346. package/dist/highlighter/themes/themeResolution.d.ts +0 -7
  347. package/dist/highlighter/themes/themeResolution.d.ts.map +0 -1
  348. package/dist/highlighter/themes/themeResolution.js +0 -21
  349. package/dist/highlighter/themes/themeResolution.js.map +0 -1
  350. package/dist/shiki-stream/tokenizer.d.ts +0 -23
  351. package/dist/shiki-stream/tokenizer.d.ts.map +0 -1
  352. package/dist/shiki-stream/tokenizer.js +0 -72
  353. package/dist/shiki-stream/tokenizer.js.map +0 -1
  354. package/dist/utils/createTransformerWithState.d.ts +0 -12
  355. package/dist/utils/createTransformerWithState.d.ts.map +0 -1
  356. package/dist/utils/createTransformerWithState.js +0 -89
  357. package/dist/utils/createTransformerWithState.js.map +0 -1
  358. package/dist/worker/wasm-B9ZqxnKj.js +0 -8
  359. package/dist/worker/wasm-B9ZqxnKj.js.map +0 -1
@@ -1,10 +1,13 @@
1
- import { CUSTOM_HEADER_SLOT_ID, DEFAULT_THEMES, EMPTY_RENDER_RANGE, HEADER_FILENAME_SUFFIX_SLOT_ID, HEADER_METADATA_SLOT_ID, HEADER_PREFIX_SLOT_ID } from "../constants.js";
1
+ import { CUSTOM_HEADER_SLOT_ID, DEFAULT_THEMES, EMPTY_LINE_ANNOTATIONS, EMPTY_RENDER_RANGE, HEADER_FILENAME_SUFFIX_SLOT_ID, HEADER_METADATA_SLOT_ID, HEADER_PREFIX_SLOT_ID } from "../constants.js";
2
+ import { HighlighterDisposedError } from "../highlighter/highlighterType.js";
2
3
  import { getThemes } from "../utils/getThemes.js";
3
4
  import { getHighlighterIfLoaded, getSharedHighlighter } from "../highlighter/shared_highlighter.js";
4
5
  import { dequeueRender, queueRender } from "../managers/UniversalRenderingManager.js";
5
6
  import { areThemesEqual } from "../utils/areThemesEqual.js";
6
7
  import { isStyleNode } from "../utils/isStyleNode.js";
7
8
  import { isSafari } from "../utils/platform.js";
9
+ import { resolvePreferredHighlighter } from "../utils/resolvePreferredHighlighter.js";
10
+ import { hastToHtml } from "../utils/hastToHtml.js";
8
11
  import { InteractionManager, pluckInteractionOptions } from "../managers/InteractionManager.js";
9
12
  import { ResizeManager } from "../managers/ResizeManager.js";
10
13
  import { areRenderRangesEqual } from "../utils/areRenderRangesEqual.js";
@@ -45,7 +48,6 @@ import { DiffHunksRenderer } from "../renderers/DiffHunksRenderer.js";
45
48
  import { areDiffLineAnnotationsEqual } from "../utils/areDiffLineAnnotationsEqual.js";
46
49
  import { areHunkDataEqual } from "../utils/areHunkDataEqual.js";
47
50
  import { getDiffHunksRendererOptions } from "../utils/getDiffHunksRendererOptions.js";
48
- import { toHtml } from "hast-util-to-html";
49
51
  //#region src/components/FileDiff.ts
50
52
  function canHydrateDiff(fileDiff) {
51
53
  return fileDiff.isPartial && (fileDiff.type === "change" || fileDiff.type === "rename-changed" || fileDiff.type === "rename-pure");
@@ -67,16 +69,16 @@ function shouldResetUndoState(prevDiff, nextDiff) {
67
69
  function areLinesEqual(first, second) {
68
70
  return first.length === second.length && first.every((line, index) => line === second[index]);
69
71
  }
70
- function canRestoreDiffSession(snapshot, externalDiff) {
72
+ function canRestoreDiffSession(snapshot, inputDiff) {
71
73
  const { oldFile } = snapshot;
72
- if (oldFile == null) return externalDiff.type === "new";
73
- return externalDiff.type !== "new" && oldFile.name === (externalDiff.prevName ?? externalDiff.name) && areLinesEqual(oldFile.lines, externalDiff.deletionLines);
74
+ if (oldFile == null) return inputDiff.type === "new";
75
+ return inputDiff.type !== "new" && oldFile.name === (inputDiff.prevName ?? inputDiff.name) && areLinesEqual(oldFile.lines, inputDiff.deletionLines);
74
76
  }
75
77
  let instanceId = -1;
76
78
  var FileDiff = class {
77
79
  options;
78
80
  workerManager;
79
- isContainerManaged;
81
+ requestOwnerRender;
80
82
  static LoadedCustomComponent = true;
81
83
  __id = `file-diff:${++instanceId}`;
82
84
  type = "file-diff";
@@ -107,13 +109,17 @@ var FileDiff = class {
107
109
  scrollSyncManager;
108
110
  interactionManager;
109
111
  annotationCache = /* @__PURE__ */ new Map();
110
- lineAnnotations = [];
112
+ get lineAnnotations() {
113
+ return this.renderedData?.lineAnnotations ?? EMPTY_LINE_ANNOTATIONS;
114
+ }
111
115
  managersDirty = false;
112
116
  deletionFile;
113
117
  additionFile;
114
118
  fileDiff;
115
119
  editSession;
116
- renderedDiff;
120
+ renderedData;
121
+ pendingData;
122
+ forceRenderOverride;
117
123
  renderRange;
118
124
  pendingFiles;
119
125
  appliedPreAttributes;
@@ -130,10 +136,10 @@ var FileDiff = class {
130
136
  lineStateRefreshPending = false;
131
137
  deferredSelectedLines;
132
138
  deferredEditorActiveLine;
133
- constructor(options = { theme: DEFAULT_THEMES }, workerManager, isContainerManaged = false) {
139
+ constructor(options = { theme: DEFAULT_THEMES }, workerManager, requestOwnerRender) {
134
140
  this.options = options;
135
141
  this.workerManager = workerManager;
136
- this.isContainerManaged = isContainerManaged;
142
+ this.requestOwnerRender = requestOwnerRender;
137
143
  this.hunksRenderer = this.createHunksRenderer(options);
138
144
  this.resizeManager = new ResizeManager();
139
145
  this.scrollSyncManager = new ScrollSyncManager();
@@ -252,27 +258,35 @@ var FileDiff = class {
252
258
  return resolveEditSessionSlotName(this.editSession?.annotations, annotation, getLineAnnotationName);
253
259
  };
254
260
  getLatestAnnotations() {
255
- return this.editSession?.annotations?.current ?? this.lineAnnotations;
261
+ return this.pendingData?.lineAnnotations ?? this.editSession?.annotations?.current ?? this.lineAnnotations;
262
+ }
263
+ getAnnotationsForDiff(fileDiff) {
264
+ const { pendingData } = this;
265
+ return pendingData != null && areDiffTargetsEqual(fileDiff, pendingData.fileDiff) ? pendingData.lineAnnotations : this.lineAnnotations;
256
266
  }
257
267
  isNewAnnotations(lineAnnotations) {
258
268
  const session = this.editSession?.annotations;
259
- if (lineAnnotations === this.lineAnnotations) return false;
269
+ if (lineAnnotations === this.getLatestAnnotations()) return false;
260
270
  return session == null || lineAnnotations !== session.provided && lineAnnotations !== session.current;
261
271
  }
262
272
  setLineAnnotations(lineAnnotations) {
263
273
  const sessionAnnotations = this.editSession?.annotations;
264
- if (sessionAnnotations == null) {
265
- this.lineAnnotations = lineAnnotations;
266
- return;
274
+ if (sessionAnnotations != null) {
275
+ if (!this.isNewAnnotations(lineAnnotations)) return;
276
+ writeEditSessionAnnotations(sessionAnnotations, lineAnnotations, getLineAnnotationName);
267
277
  }
268
- if (!this.isNewAnnotations(lineAnnotations)) return;
269
- this.lineAnnotations = lineAnnotations;
270
- writeEditSessionAnnotations(sessionAnnotations, lineAnnotations, getLineAnnotationName);
278
+ const fileDiff = this.getWorkingDiff();
279
+ if (fileDiff != null) this.pendingData = {
280
+ fileDiff,
281
+ lineAnnotations
282
+ };
271
283
  }
272
284
  syncEditSessionAnnotationsFromEditor(lineAnnotations) {
273
285
  const session = this.editSession?.annotations;
274
286
  if (session == null || lineAnnotations === session.current) return false;
275
287
  session.current = lineAnnotations;
288
+ if (this.renderedData != null) this.renderedData.lineAnnotations = lineAnnotations;
289
+ this.pendingData = void 0;
276
290
  this.hunksRenderer.setLineAnnotations(lineAnnotations);
277
291
  this.renderAnnotations();
278
292
  return true;
@@ -317,7 +331,7 @@ var FileDiff = class {
317
331
  }
318
332
  shouldApplyColumnVariables(overflow) {
319
333
  if (typeof this.options.hunkSeparators === "function") return true;
320
- return overflow === "scroll" && (this.getLatestAnnotations().length > 0 || this.pre?.hasAttribute("data-has-merge-conflict") === true);
334
+ return overflow === "scroll" && (this.lineAnnotations.length > 0 || this.pre?.hasAttribute("data-has-merge-conflict") === true);
321
335
  }
322
336
  getCodeScrollLeft() {
323
337
  return Math.max(this.codeUnified?.scrollLeft ?? 0, this.codeDeletions?.scrollLeft ?? 0, this.codeAdditions?.scrollLeft ?? 0);
@@ -346,10 +360,13 @@ var FileDiff = class {
346
360
  this.workerManager?.unsubscribeToThemeChanges(this);
347
361
  this.renderRange = void 0;
348
362
  if (!recycle) this.pendingFiles = void 0;
349
- if (!this.isContainerManaged) this.fileContainer?.remove();
363
+ if (!this.isComponentManaged) this.fileContainer?.remove();
350
364
  this.fileContainer = void 0;
351
365
  this.mounted = false;
352
- if (!recycle) this.lineAnnotations = [];
366
+ if (!recycle) {
367
+ this.renderedData = void 0;
368
+ this.pendingData = void 0;
369
+ }
353
370
  this.clearAuxiliaryNodes();
354
371
  this.annotationCache.clear();
355
372
  this.pre = void 0;
@@ -385,7 +402,6 @@ var FileDiff = class {
385
402
  this.workerManager = void 0;
386
403
  this.fileDiff = void 0;
387
404
  this.editSession = void 0;
388
- this.renderedDiff = void 0;
389
405
  this.deletionFile = void 0;
390
406
  this.additionFile = void 0;
391
407
  }
@@ -474,14 +490,19 @@ var FileDiff = class {
474
490
  this.hydrateMeasuredScrollbar();
475
491
  }
476
492
  hydrationSetup({ fileDiff, oldFile, newFile, lineAnnotations }) {
477
- this.lineAnnotations = lineAnnotations ?? this.lineAnnotations;
493
+ const hydratedAnnotations = lineAnnotations ?? this.getLatestAnnotations();
494
+ this.pendingData = void 0;
478
495
  this.additionFile = newFile;
479
496
  this.deletionFile = oldFile;
480
497
  this.fileDiff = fileDiff ?? (oldFile !== void 0 && newFile !== void 0 ? parseDiffFromFile(oldFile, newFile, this.options.parseDiffOptions) : void 0);
498
+ this.renderedData = this.fileDiff != null ? {
499
+ fileDiff: this.fileDiff,
500
+ lineAnnotations: hydratedAnnotations
501
+ } : void 0;
502
+ if (this.fileDiff != null) this.adoptRenderData(this.fileDiff);
481
503
  if (this.pre == null) return;
482
504
  this.syncInteractionOptions();
483
505
  this.hunksRenderer.hydrate(this.fileDiff);
484
- this.renderedDiff = this.fileDiff;
485
506
  this.renderAnnotations();
486
507
  this.renderGutterUtility();
487
508
  this.injectUnsafeCSS();
@@ -489,12 +510,23 @@ var FileDiff = class {
489
510
  this.flushManagers();
490
511
  }
491
512
  rerender() {
492
- if (!this.enabled || this.fileDiff == null && this.additionFile == null && this.deletionFile == null) return;
513
+ if (!this.enabled || this.getInputDiff() == null && this.additionFile == null && this.deletionFile == null) return;
514
+ if (this.requestRender()) return;
493
515
  this.render({
494
516
  forceRender: true,
495
517
  renderRange: this.renderRange
496
518
  });
497
519
  }
520
+ requestRender() {
521
+ const { requestOwnerRender } = this;
522
+ if (this.editSession != null || requestOwnerRender == null) return false;
523
+ this.forceRenderOverride = true;
524
+ requestOwnerRender();
525
+ return true;
526
+ }
527
+ get isComponentManaged() {
528
+ return this.requestOwnerRender != null;
529
+ }
498
530
  onThemeChange() {
499
531
  this.hunksRenderer.clearRenderCache();
500
532
  this.rerender();
@@ -508,7 +540,8 @@ var FileDiff = class {
508
540
  this.rerender();
509
541
  };
510
542
  loadFilesIfNecessary() {
511
- const { fileDiff, options: { loadDiffFiles } } = this;
543
+ const fileDiff = this.getInputDiff();
544
+ const { loadDiffFiles } = this.options;
512
545
  if (fileDiff == null || !canHydrateDiff(fileDiff) || this.pendingFiles?.fileDiff === fileDiff) return;
513
546
  if (loadDiffFiles == null) throw new Error("FileDiff: loadDiffFiles is required to load full files for a partial diff");
514
547
  const promise = this.loadFilesForDiff(fileDiff, loadDiffFiles);
@@ -528,7 +561,8 @@ var FileDiff = class {
528
561
  * `loadDiffFiles` was passed in to `options`
529
562
  */
530
563
  __canAttachEditor() {
531
- return this.fileDiff != null && !this.fileDiff.isPartial;
564
+ const fileDiff = this.getInputDiff();
565
+ return fileDiff != null && !fileDiff.isPartial;
532
566
  }
533
567
  /**
534
568
  * Load a partial diff before starting a new edit session. Call this before
@@ -539,7 +573,8 @@ var FileDiff = class {
539
573
  if (this.__canAttachEditor()) return;
540
574
  const pending = this.__prepareForEditing();
541
575
  if (pending == null) {
542
- if (this.fileDiff?.isPartial === true && !canHydrateDiff(this.fileDiff)) throw new Error("FileDiff.prepareForEditing: this partial diff cannot be hydrated; provide a complete diff");
576
+ const fileDiff = this.getInputDiff();
577
+ if (fileDiff?.isPartial === true && !canHydrateDiff(fileDiff)) throw new Error("FileDiff.prepareForEditing: this partial diff cannot be hydrated; provide a complete diff");
543
578
  throw new Error("FileDiff.prepareForEditing: a partial diff requires loadDiffFiles");
544
579
  }
545
580
  await pending;
@@ -548,14 +583,15 @@ var FileDiff = class {
548
583
  /** Hydrate a diff if necessary */
549
584
  __prepareForEditing() {
550
585
  if (this.__canAttachEditor()) return;
551
- if (this.fileDiff?.isPartial === true && !canHydrateDiff(this.fileDiff)) throw new Error("FileDiff: this partial diff cannot be hydrated; provide a complete diff to edit");
586
+ const fileDiff = this.getInputDiff();
587
+ if (fileDiff?.isPartial === true && !canHydrateDiff(fileDiff)) throw new Error("FileDiff: this partial diff cannot be hydrated; provide a complete diff to edit");
552
588
  this.loadFilesIfNecessary();
553
589
  return this.pendingFiles?.promise;
554
590
  }
555
591
  async loadFilesForDiff(fileDiff, loadDiffFiles) {
556
592
  try {
557
593
  const files = await loadDiffFiles(fileDiff);
558
- if (this.fileDiff !== fileDiff) return;
594
+ if (this.getInputDiff() !== fileDiff) return;
559
595
  await this.handleFilesLoaded(fileDiff, files);
560
596
  } catch (error) {
561
597
  if (this.options.disableErrorHandling === true) throw error;
@@ -563,7 +599,7 @@ var FileDiff = class {
563
599
  }
564
600
  }
565
601
  async handleFilesLoaded(expectedDiff, files) {
566
- if (this.fileDiff !== expectedDiff || !expectedDiff.isPartial) return;
602
+ if (this.getInputDiff() !== expectedDiff || !expectedDiff.isPartial) return;
567
603
  hydratePartialDiff("merge", expectedDiff, files);
568
604
  this.setHydratedState(files);
569
605
  if (this.installHydratedSessionDiff(expectedDiff)) {
@@ -571,58 +607,69 @@ var FileDiff = class {
571
607
  return;
572
608
  }
573
609
  await awaitWithTimeout(() => this.primeHighlightCache(expectedDiff));
574
- if (!this.enabled || this.fileDiff !== expectedDiff) return;
610
+ if (!this.enabled || this.getInputDiff() !== expectedDiff) return;
575
611
  this.rerender();
576
612
  }
577
613
  installHydratedSessionDiff(expectedDiff) {
578
614
  if (expectedDiff.isPartial) throw new Error("FileDiff.installHydratedSessionDiff: diffs cannot be partial for editing");
579
- if (this.fileDiff !== expectedDiff) return false;
615
+ if (this.getInputDiff() !== expectedDiff) return false;
580
616
  if (this.editSession?.outgoingDiff != null) {
581
617
  this.installEditSession(expectedDiff);
582
618
  return true;
583
619
  }
584
620
  return false;
585
621
  }
586
- updateExternalDiff(incomingExternalDiff, lineAnnotations) {
587
- if (areDiffTargetsEqual(this.fileDiff, incomingExternalDiff)) return false;
588
- const outgoingDiff = this.editSession?.outgoingDiff ?? this.editSession?.diff;
589
- this.fileDiff = incomingExternalDiff;
590
- if (outgoingDiff != null) {
591
- if (incomingExternalDiff.isPartial) this.loadFilesIfNecessary();
592
- else this.installEditSession(incomingExternalDiff);
622
+ updateInputDiff(incomingDiff, lineAnnotations) {
623
+ if (areDiffTargetsEqual(this.getInputDiff(), incomingDiff)) return false;
624
+ const previousAnnotations = this.getLatestAnnotations();
625
+ this.fileDiff = incomingDiff;
626
+ const { editSession: previousSession } = this;
627
+ const outgoingDiff = previousSession?.outgoingDiff ?? previousSession?.diff;
628
+ if (previousSession != null) {
629
+ if (incomingDiff.isPartial) previousSession.inputDiff = incomingDiff;
630
+ else this.installEditSession(incomingDiff);
593
631
  if (this.editSession != null) this.editSession.outgoingDiff = outgoingDiff;
594
632
  }
595
- if (this.editSession?.annotations != null && lineAnnotations != null) {
596
- this.lineAnnotations = lineAnnotations;
597
- this.editSession.annotations = adoptEditSessionAnnotations(lineAnnotations, getLineAnnotationName, this.editSession.annotations);
598
- }
633
+ if (this.editSession?.annotations != null && lineAnnotations != null) this.editSession.annotations = adoptEditSessionAnnotations(lineAnnotations, getLineAnnotationName, this.editSession.annotations);
634
+ this.pendingData = {
635
+ fileDiff: this.editSession?.diff ?? incomingDiff,
636
+ lineAnnotations: this.editSession?.annotations?.current ?? lineAnnotations ?? previousAnnotations
637
+ };
638
+ if (outgoingDiff != null && incomingDiff.isPartial) this.loadFilesIfNecessary();
599
639
  return true;
600
640
  }
601
- installEditSession(externalDiff, retainedDocument, retainedSession) {
602
- const externalContents = externalDiff.additionLines.join("");
641
+ installEditSession(inputDiff, retainedDocument, retainedSession) {
642
+ const inputContents = inputDiff.additionLines.join("");
603
643
  const retainedLines = retainedDocument != null ? splitFileContents(retainedDocument.contents) : void 0;
604
- const restoreRetainedSession = retainedSession != null && canRestoreDiffSession(retainedSession, externalDiff);
644
+ const restoreRetainedSession = retainedSession != null && canRestoreDiffSession(retainedSession, inputDiff);
605
645
  if (retainedSession != null && !restoreRetainedSession) throw new Error("FileDiff: retained session cannot resume against a different old file");
606
- if (retainedDocument != null && retainedDocument.contents !== externalContents && !restoreRetainedSession) throw new Error("FileDiff: retained edits are missing their diff session state");
607
- const usesExternalDocument = retainedDocument == null || retainedDocument.name === externalDiff.name && retainedDocument.lang === externalDiff.lang && retainedDocument.contents === externalContents;
608
- const sessionDiff = createEditSessionDiff(externalDiff);
609
- if (retainedDocument != null && retainedLines != null && !usesExternalDocument) {
646
+ if (retainedDocument != null && retainedDocument.contents !== inputContents && !restoreRetainedSession) throw new Error("FileDiff: retained edits are missing their diff session state");
647
+ const usesInputDocument = retainedDocument == null || retainedDocument.name === inputDiff.name && retainedDocument.lang === inputDiff.lang && retainedDocument.contents === inputContents;
648
+ const sessionDiff = createEditSessionDiff(inputDiff);
649
+ if (retainedDocument != null && retainedLines != null && !usesInputDocument) {
610
650
  sessionDiff.name = retainedDocument.name;
611
651
  sessionDiff.lang = retainedDocument.lang;
612
652
  }
613
- if (restoreRetainedSession && retainedSession != null && retainedLines != null) {
653
+ if (restoreRetainedSession && retainedSession != null && retainedDocument != null && retainedLines != null) {
614
654
  sessionDiff.additionLines = retainedLines;
655
+ sessionDiff.additionCharacterCount = retainedDocument.contents.length;
615
656
  sessionDiff.type = retainedSession.type;
616
657
  sessionDiff.hunks = retainedSession.hunks;
617
658
  sessionDiff.editSessionDirty = true;
618
659
  recomputeDiffRenderLineCounts(sessionDiff);
619
660
  }
661
+ const annotations = this.editSession?.annotations ?? adoptEditSessionAnnotations(this.getLatestAnnotations(), getLineAnnotationName);
620
662
  this.editSession = {
621
663
  diff: sessionDiff,
622
- annotations: this.editSession?.annotations ?? adoptEditSessionAnnotations(this.lineAnnotations, getLineAnnotationName),
664
+ inputDiff,
665
+ annotations,
623
666
  outgoingDiff: this.editSession?.outgoingDiff
624
667
  };
625
- this.hunksRenderer.beginEditSession(sessionDiff, usesExternalDocument && !restoreRetainedSession ? externalDiff : void 0);
668
+ this.pendingData = {
669
+ fileDiff: sessionDiff,
670
+ lineAnnotations: annotations.current
671
+ };
672
+ this.hunksRenderer.beginEditSession(sessionDiff, usesInputDocument && !restoreRetainedSession ? inputDiff : void 0);
626
673
  }
627
674
  setHydratedState(files) {
628
675
  this.deletionFile = files.oldFile;
@@ -632,6 +679,8 @@ var FileDiff = class {
632
679
  }
633
680
  render({ fileDiff, deferManagers = false, forceRender = false, preventEmit = false, lineAnnotations, fileContainer, containerWrapper, renderRange, ...fileInputProps }) {
634
681
  if (!this.enabled) throw new Error("FileDiff.render: attempting to call render after cleaned up");
682
+ forceRender = this.forceRenderOverride ?? forceRender;
683
+ this.forceRenderOverride = void 0;
635
684
  const fileInput = getDiffFileInput(fileInputProps, "FileDiff.render");
636
685
  const oldFile = fileInput?.oldFile;
637
686
  const newFile = fileInput?.newFile;
@@ -641,7 +690,7 @@ var FileDiff = class {
641
690
  const themeChanged = this.hasThemeChanged();
642
691
  const hasFileInput = fileInput != null;
643
692
  const filesDidChange = hasFileInput && (!areOptionalFilesEqual(oldFile, this.deletionFile) || !areOptionalFilesEqual(newFile, this.additionFile));
644
- let diffDidChange = fileDiff != null && !areDiffTargetsEqual(fileDiff, this.fileDiff);
693
+ let diffDidChange = fileDiff != null && !areDiffTargetsEqual(fileDiff, this.getInputDiff());
645
694
  const annotationsChanged = lineAnnotations != null && (lineAnnotations.length > 0 || this.getLatestAnnotations().length > 0) ? this.isNewAnnotations(lineAnnotations) : false;
646
695
  if (!collapsed && areRenderRangesEqual(nextRenderRange, this.renderRange) && !forceRender && !annotationsChanged && !themeChanged && (fileDiff != null && !diffDidChange || fileDiff == null && !filesDidChange)) {
647
696
  const rendered = this.applyCachedThemeState(themeType);
@@ -649,7 +698,7 @@ var FileDiff = class {
649
698
  return rendered;
650
699
  }
651
700
  let nextParsedFileDiff;
652
- if (fileDiff == null && hasFileInput && (filesDidChange || this.fileDiff == null)) nextParsedFileDiff = parseDiffFromFile(fileInput.oldFile, fileInput.newFile, this.options.parseDiffOptions);
701
+ if (fileDiff == null && hasFileInput && (filesDidChange || this.getInputDiff() == null)) nextParsedFileDiff = parseDiffFromFile(fileInput.oldFile, fileInput.newFile, this.options.parseDiffOptions);
653
702
  const { renderRange: previousRenderRange } = this;
654
703
  this.renderRange = nextRenderRange;
655
704
  if (hasFileInput) {
@@ -659,23 +708,23 @@ var FileDiff = class {
659
708
  this.deletionFile = void 0;
660
709
  this.additionFile = void 0;
661
710
  }
662
- if (fileDiff != null && diffDidChange) this.updateExternalDiff(fileDiff, lineAnnotations);
711
+ if (fileDiff != null && diffDidChange) this.updateInputDiff(fileDiff, lineAnnotations);
663
712
  else if (nextParsedFileDiff != null) {
664
713
  diffDidChange = true;
665
- this.updateExternalDiff(nextParsedFileDiff, lineAnnotations);
714
+ this.updateInputDiff(nextParsedFileDiff, lineAnnotations);
666
715
  }
667
716
  if (diffDidChange) this.clearReusableHeader();
668
717
  if (lineAnnotations != null) this.setLineAnnotations(lineAnnotations);
669
- const latestDiff = this.getLatestDiff();
670
- if (latestDiff == null) return false;
671
- if (latestDiff.editSessionDirty === true && this.shouldSelfHealEditSession()) {
672
- finishEditSessionForDiff(latestDiff, this.options.parseDiffOptions);
718
+ const workingDiff = this.getWorkingDiff();
719
+ if (workingDiff == null) return false;
720
+ if (workingDiff.editSessionDirty === true && this.shouldSelfHealEditSession()) {
721
+ finishEditSessionForDiff(workingDiff, this.options.parseDiffOptions);
673
722
  this.hunksRenderer.refreshHighlightedResult();
674
723
  }
675
724
  if (expandUnchanged) this.loadFilesIfNecessary();
676
725
  this.hunksRenderer.setOptions(this.getHunksRendererOptions(this.options));
677
726
  this.syncInteractionOptions();
678
- this.hunksRenderer.setLineAnnotations(this.getLatestAnnotations());
727
+ this.prepareRenderData(this.hunksRenderer.getDiffForNextRender(workingDiff));
679
728
  const { disableErrorHandling = false, disableFileHeader = false } = this.options;
680
729
  if (disableFileHeader) {
681
730
  if (this.headerElement != null) {
@@ -691,11 +740,11 @@ var FileDiff = class {
691
740
  this.removeRenderedCode();
692
741
  this.clearAuxiliaryNodes();
693
742
  try {
694
- const hunksResult = this.hunksRenderer.renderDiff(latestDiff, EMPTY_RENDER_RANGE);
743
+ const hunksResult = this.hunksRenderer.renderDiff(workingDiff, EMPTY_RENDER_RANGE);
695
744
  if (hunksResult != null) this.applyThemeState(fileContainer, hunksResult.themeStyles, themeType, hunksResult.baseThemeType);
696
745
  if (hunksResult?.headerElement != null) this.applyHeaderToDOM(hunksResult.headerElement, fileContainer, hunksResult.fileDiff);
697
746
  this.renderSeparators([]);
698
- this.renderedDiff = hunksResult?.fileDiff ?? latestDiff;
747
+ this.adoptRenderData(hunksResult?.fileDiff ?? workingDiff);
699
748
  this.injectUnsafeCSS();
700
749
  } catch (error) {
701
750
  if (disableErrorHandling) throw error;
@@ -708,12 +757,12 @@ var FileDiff = class {
708
757
  }
709
758
  try {
710
759
  const pre = this.getOrCreatePreNode(fileContainer);
711
- if (!(this.canPartiallyRender(forceRender, annotationsChanged, filesDidChange || diffDidChange || themeChanged || !areDiffTargetsEqual(this.renderedDiff, latestDiff)) && this.applyPartialRender({
712
- fileDiff: latestDiff,
760
+ if (!(this.canPartiallyRender(forceRender, annotationsChanged, filesDidChange || diffDidChange || themeChanged || !areDiffTargetsEqual(this.getRenderedDiff(), workingDiff)) && this.applyPartialRender({
761
+ fileDiff: workingDiff,
713
762
  previousRenderRange,
714
763
  renderRange: nextRenderRange
715
764
  }))) {
716
- const hunksResult = this.hunksRenderer.renderDiff(latestDiff, nextRenderRange);
765
+ const hunksResult = this.hunksRenderer.renderDiff(workingDiff, nextRenderRange);
717
766
  if (hunksResult == null) {
718
767
  if (this.workerManager?.isInitialized() === false && this.workerManager.isWorkingPool()) this.workerManager.initialize().catch(() => {}).then(() => this.rerender());
719
768
  return false;
@@ -726,7 +775,10 @@ var FileDiff = class {
726
775
  this.pre = void 0;
727
776
  }
728
777
  this.renderSeparators(hunksResult.hunkData);
729
- this.renderedDiff = hunksResult.fileDiff;
778
+ this.adoptRenderData(hunksResult.fileDiff);
779
+ } else {
780
+ const renderedDiff = this.getRenderedDiff();
781
+ if (renderedDiff != null) this.adoptRenderData(renderedDiff);
730
782
  }
731
783
  this.applyBuffers(pre, nextRenderRange);
732
784
  this.injectUnsafeCSS();
@@ -759,24 +811,56 @@ var FileDiff = class {
759
811
  this.mounted = true;
760
812
  onPostRender?.(fileContainer, this, phase);
761
813
  }
762
- getLatestDiff(fileDiff = this.fileDiff) {
763
- return this.editSession?.diff ?? fileDiff;
814
+ getInputDiff() {
815
+ return this.fileDiff;
816
+ }
817
+ getWorkingDiff(fallbackDiff = this.fileDiff) {
818
+ return this.editSession?.diff ?? fallbackDiff;
764
819
  }
765
820
  getRenderedDiff() {
766
- return this.renderedDiff;
821
+ return this.renderedData?.fileDiff;
822
+ }
823
+ /**
824
+ * @internal Data the next render() with this input will display. While a
825
+ * replacement diff is being highlighted, this is still the displayed data.
826
+ */
827
+ __getNextRenderData({ fileDiff, lineAnnotations }) {
828
+ const sessionAnnotations = this.editSession?.annotations;
829
+ if (sessionAnnotations != null) return {
830
+ fileDiff,
831
+ lineAnnotations: lineAnnotations != null && this.isNewAnnotations(lineAnnotations) ? lineAnnotations : sessionAnnotations.provided
832
+ };
833
+ const workingDiff = this.getWorkingDiff(fileDiff) ?? fileDiff;
834
+ const nextDiff = this.hunksRenderer.getDiffForNextRender(workingDiff);
835
+ return {
836
+ fileDiff: nextDiff,
837
+ lineAnnotations: lineAnnotations != null && areDiffTargetsEqual(nextDiff, workingDiff) ? lineAnnotations : this.getAnnotationsForDiff(nextDiff)
838
+ };
839
+ }
840
+ prepareRenderData(fileDiff) {
841
+ this.hunksRenderer.setLineAnnotations(this.getAnnotationsForDiff(fileDiff));
842
+ }
843
+ adoptRenderData(fileDiff) {
844
+ const { pendingData } = this;
845
+ const matchesPending = pendingData != null && areDiffTargetsEqual(fileDiff, pendingData.fileDiff);
846
+ this.renderedData = {
847
+ fileDiff,
848
+ lineAnnotations: matchesPending ? pendingData.lineAnnotations : this.lineAnnotations
849
+ };
850
+ if (matchesPending) this.pendingData = void 0;
767
851
  }
768
852
  syncRenderViewToEditor() {
769
853
  const { editor, fileContainer } = this;
770
854
  const lineAnnotations = this.getLatestAnnotations();
771
855
  const renderRange = this.computeEditorRenderRange(this.renderRange);
772
- const fileDiff = this.getLatestDiff();
856
+ const fileDiff = this.getWorkingDiff();
773
857
  if (editor == null || fileContainer == null || fileDiff == null || fileDiff.isPartial) return;
774
858
  const sync = (highlighter) => {
775
- if (!this.enabled || this.editor !== editor || this.fileContainer !== fileContainer || this.getLatestDiff() !== fileDiff) return;
859
+ if (!this.enabled || this.editor !== editor || this.fileContainer !== fileContainer || this.getWorkingDiff() !== fileDiff) return;
776
860
  const replacement = this.editSession?.outgoingDiff;
777
- const { fileDiff: externalDiff } = this;
778
- const externalDocument = replacement != null && externalDiff != null && replacement !== fileDiff;
779
- const resetHistory = externalDocument && replacement != null && externalDiff != null ? shouldResetUndoState(replacement, externalDiff) : false;
861
+ const inputDiff = this.getInputDiff();
862
+ const externalDocument = replacement != null && inputDiff != null && replacement !== fileDiff;
863
+ const resetHistory = externalDocument && replacement != null && inputDiff != null ? shouldResetUndoState(replacement, inputDiff) : false;
780
864
  editor.__syncRenderView({
781
865
  highlighter,
782
866
  fileContainer,
@@ -797,11 +881,13 @@ var FileDiff = class {
797
881
  else getSharedHighlighter({
798
882
  themes: getThemes(theme),
799
883
  langs: ["text", lang],
800
- preferredHighlighter: this.workerManager?.getPreferredHighlighter() ?? this.options.preferredHighlighter
801
- }).then(sync);
884
+ preferredHighlighter: resolvePreferredHighlighter(this.workerManager, this.options)
885
+ }).then(sync).catch((error) => {
886
+ if (!(error instanceof HighlighterDisposedError)) console.error(error);
887
+ });
802
888
  }
803
889
  computeEditorRenderRange(renderRange) {
804
- const fileDiff = this.getLatestDiff();
890
+ const fileDiff = this.getWorkingDiff();
805
891
  if (renderRange == null || fileDiff == null || isDefaultRenderRange(renderRange)) return renderRange;
806
892
  const { diffStyle = "split", expandUnchanged = false, collapsedContextThreshold = 1 } = this.options;
807
893
  let firstLineNumber;
@@ -851,7 +937,8 @@ var FileDiff = class {
851
937
  * When `clone` is true, the returned lines and hunks are copied.
852
938
  */
853
939
  __captureDocumentSessionState(clone = true) {
854
- let { fileDiff, editSession: { diff: sessionDiff, outgoingDiff } = {} } = this;
940
+ const fileDiff = this.getInputDiff();
941
+ let { diff: sessionDiff, outgoingDiff } = this.editSession ?? {};
855
942
  if (outgoingDiff != null && fileDiff != null) {
856
943
  if (!fileDiff.isPartial && shouldResetUndoState(outgoingDiff, fileDiff)) return;
857
944
  sessionDiff = outgoingDiff;
@@ -892,17 +979,17 @@ var FileDiff = class {
892
979
  this.resumeEditorRendering(editor);
893
980
  }
894
981
  resumeEditorRendering(editor) {
895
- const { fileDiff: externalDiff } = this;
982
+ const inputDiff = this.getInputDiff();
896
983
  const pendingReplacement = this.editSession?.outgoingDiff;
897
- if (pendingReplacement != null && externalDiff != null && !externalDiff.isPartial && this.editSession?.diff === pendingReplacement) this.installEditSession(externalDiff);
898
- const initialExternalDiff = this.editSession == null && externalDiff != null && !externalDiff.isPartial ? externalDiff : void 0;
899
- if (initialExternalDiff != null) this.installEditSession(initialExternalDiff, editor.__getDocumentContents(getAdditionFile(initialExternalDiff)), editor.__getDocumentSessionState());
984
+ if (pendingReplacement != null && inputDiff != null && !inputDiff.isPartial && this.editSession?.diff === pendingReplacement) this.installEditSession(inputDiff);
985
+ const initialInputDiff = this.editSession == null && inputDiff != null && !inputDiff.isPartial ? inputDiff : void 0;
986
+ if (initialInputDiff != null) this.installEditSession(initialInputDiff, editor.__getDocumentContents(getAdditionFile(initialInputDiff)), editor.__getDocumentSessionState());
900
987
  else if (this.editSession != null) this.hunksRenderer.beginEditSession(this.editSession.diff);
901
988
  this.editor = editor;
902
- if (this.fileDiff?.isPartial === true) this.loadFilesIfNecessary();
989
+ if (this.getInputDiff()?.isPartial === true) this.loadFilesIfNecessary();
903
990
  const editSessionDiff = this.editSession?.diff;
904
991
  if (this.hunksRenderer.editorRenderReady()) {
905
- if (editSessionDiff != null && this.hunksRenderer.diffCache === editSessionDiff) this.renderedDiff = editSessionDiff;
992
+ if (editSessionDiff != null && this.hunksRenderer.diffCache === editSessionDiff) this.adoptRenderData(editSessionDiff);
906
993
  this.syncRenderViewToEditor();
907
994
  } else this.rerender();
908
995
  }
@@ -917,7 +1004,7 @@ var FileDiff = class {
917
1004
  * Requires the editor to be detached first. Does nothing when no session
918
1005
  * exists, so callers can invoke it again safely after it has settled.
919
1006
  *
920
- * `onEditComplete` receives the completed diff, current external diff,
1007
+ * `onEditComplete` receives the completed diff, current input diff,
921
1008
  * complete file pair, and both annotation collections even when the final
922
1009
  * text is unchanged. In `install` mode, accepting installs the completed diff
923
1010
  * and its annotations; rejecting or having no handler restores the external
@@ -928,9 +1015,10 @@ var FileDiff = class {
928
1015
  this.settleEditSession(mode === "install", editor);
929
1016
  }
930
1017
  settleEditSession(installResult, editor) {
931
- const { editSession, fileDiff: externalDiff, lineAnnotations: externalAnnotations } = this;
932
- if (editSession == null || externalDiff == null) return;
933
- const { diff: editSessionDiff, annotations: editSessionAnnotations } = editSession;
1018
+ const { editSession } = this;
1019
+ if (editSession == null) return;
1020
+ const { diff: editSessionDiff, inputDiff, annotations: editSessionAnnotations } = editSession;
1021
+ const inputAnnotations = editSessionAnnotations?.provided ?? this.lineAnnotations;
934
1022
  if (this.editor != null) throw new Error("FileDiff.__completeEditSession: detach the editor before completing the session");
935
1023
  this.hunksRenderer.endEditSession();
936
1024
  this.finalizeEditSessionHunks();
@@ -950,20 +1038,20 @@ var FileDiff = class {
950
1038
  const event = {
951
1039
  fileDiff: completedDiff,
952
1040
  editor,
953
- originalFileDiff: externalDiff,
1041
+ originalFileDiff: inputDiff,
954
1042
  oldFile: completedDiff.type === "new" ? null : {
955
1043
  name: completedDiff.prevName ?? completedDiff.name,
956
1044
  contents: completedDiff.deletionLines.join("")
957
1045
  },
958
1046
  newFile,
959
1047
  lineAnnotations: sessionAnnotationsCurrent,
960
- originalLineAnnotations: externalAnnotations
1048
+ originalLineAnnotations: inputAnnotations
961
1049
  };
962
1050
  Object.freeze(event);
963
1051
  try {
964
1052
  editor.__emitEditComplete(event);
965
1053
  if (this.options.onEditComplete?.(event) === "accept") {
966
- if (completedDiff.cacheKey != null && completedDiff.cacheKey === externalDiff.cacheKey) throw new Error("FileDiff.__completeEditSession: an accepted diff must not reuse the replaced diff cacheKey");
1054
+ if (completedDiff.cacheKey != null && completedDiff.cacheKey === inputDiff.cacheKey) throw new Error("FileDiff.__completeEditSession: an accepted diff must not reuse the replaced diff cacheKey");
967
1055
  acceptedDiff = completedDiff;
968
1056
  acceptedOldFile = event.oldFile;
969
1057
  acceptedNewFile = event.newFile;
@@ -973,14 +1061,17 @@ var FileDiff = class {
973
1061
  failure = error;
974
1062
  }
975
1063
  if (installResult && acceptedDiff != null) {
976
- this.fileDiff = acceptedDiff;
977
1064
  if (this.additionFile != null) {
978
1065
  this.deletionFile = acceptedOldFile;
979
1066
  this.additionFile = acceptedNewFile;
980
1067
  }
981
- if (sessionAnnotationsCurrent != null) this.lineAnnotations = sessionAnnotationsCurrent;
982
1068
  }
983
1069
  this.editSession = void 0;
1070
+ this.fileDiff = installResult && acceptedDiff != null ? acceptedDiff : inputDiff;
1071
+ this.pendingData = {
1072
+ fileDiff: this.fileDiff,
1073
+ lineAnnotations: installResult && acceptedDiff != null ? sessionAnnotationsCurrent ?? inputAnnotations : inputAnnotations
1074
+ };
984
1075
  if (installResult && this.fileContainer != null) this.rerender();
985
1076
  if (failed) throw failure;
986
1077
  }
@@ -997,7 +1088,7 @@ var FileDiff = class {
997
1088
  * ran.
998
1089
  */
999
1090
  finalizeEditSessionHunks() {
1000
- const fileDiff = this.getLatestDiff();
1091
+ const fileDiff = this.getWorkingDiff();
1001
1092
  if (fileDiff == null || fileDiff.editSessionDirty !== true) return false;
1002
1093
  const { collapsedContextThreshold = 1 } = this.options;
1003
1094
  const anchors = captureExpansionAnchors(fileDiff, this.hunksRenderer.getExpandedHunksMap(), collapsedContextThreshold);
@@ -1049,9 +1140,8 @@ var FileDiff = class {
1049
1140
  }
1050
1141
  }
1051
1142
  detachAdditionLines() {
1052
- const editSessionDiff = this.editSession?.diff;
1053
- const { fileDiff } = this;
1054
- if (editSessionDiff != null && (editSessionDiff.additionLines === fileDiff?.additionLines || editSessionDiff.additionLines === editSessionDiff.deletionLines)) editSessionDiff.additionLines = [...editSessionDiff.additionLines];
1143
+ const { diff: editSessionDiff, inputDiff } = this.editSession ?? {};
1144
+ if (editSessionDiff != null && (editSessionDiff.additionLines === inputDiff?.additionLines || editSessionDiff.additionLines === editSessionDiff.deletionLines)) editSessionDiff.additionLines = [...editSessionDiff.additionLines];
1055
1145
  }
1056
1146
  isLineRenderable(lineNumber) {
1057
1147
  const fileDiff = this.getRenderedDiff();
@@ -1169,7 +1259,7 @@ var FileDiff = class {
1169
1259
  this.placeHolder.style.setProperty("height", `${height}px`);
1170
1260
  return true;
1171
1261
  }
1172
- async primeHighlightCache(fileDiff = this.fileDiff) {
1262
+ async primeHighlightCache(fileDiff = this.getInputDiff()) {
1173
1263
  const { workerManager } = this;
1174
1264
  if (fileDiff == null || workerManager == null || !workerManager.isWorkingPool() || fileDiff.cacheKey == null || isDiffPlainText(fileDiff)) return;
1175
1265
  const tokenizeMaxLength = this.options.tokenizeMaxLength ?? 1e5;
@@ -1223,7 +1313,7 @@ var FileDiff = class {
1223
1313
  }
1224
1314
  renderSeparators(hunkData) {
1225
1315
  const { hunkSeparators } = this.options;
1226
- if (this.isContainerManaged || this.fileContainer == null || typeof hunkSeparators !== "function") {
1316
+ if (this.isComponentManaged || this.fileContainer == null || typeof hunkSeparators !== "function") {
1227
1317
  for (const { element } of this.separatorCache.values()) element.remove();
1228
1318
  this.separatorCache.clear();
1229
1319
  return;
@@ -1254,31 +1344,34 @@ var FileDiff = class {
1254
1344
  }
1255
1345
  }
1256
1346
  renderAnnotations() {
1257
- if (this.isContainerManaged || this.fileContainer == null) {
1347
+ if (this.isComponentManaged || this.fileContainer == null) {
1258
1348
  for (const { element } of this.annotationCache.values()) element.remove();
1259
1349
  this.annotationCache.clear();
1260
1350
  return;
1261
1351
  }
1262
1352
  const staleAnnotations = new Map(this.annotationCache);
1263
- const { renderAnnotation } = this.options;
1264
- const lineAnnotations = this.getLatestAnnotations();
1265
- if (renderAnnotation != null && lineAnnotations.length > 0) for (const [index, annotation] of lineAnnotations.entries()) {
1266
- const name = this.getAnnotationSlotName(annotation);
1267
- const id = `${index}-${name}`;
1268
- let cache = this.annotationCache.get(id);
1269
- if (cache == null || !areDiffLineAnnotationsEqual(annotation, cache.annotation)) {
1270
- cache?.element.remove();
1271
- const content = renderAnnotation(annotation);
1272
- if (content == null) continue;
1273
- cache = {
1274
- element: createAnnotationWrapperNode(name),
1275
- annotation
1276
- };
1277
- cache.element.appendChild(content);
1278
- this.fileContainer.appendChild(cache.element);
1279
- this.annotationCache.set(id, cache);
1353
+ const { renderedData, options: { renderAnnotation } } = this;
1354
+ if (renderAnnotation != null && renderedData != null) {
1355
+ const { fileDiff, lineAnnotations } = renderedData;
1356
+ for (const [index, annotation] of lineAnnotations.entries()) {
1357
+ const name = this.getAnnotationSlotName(annotation);
1358
+ const id = `${index}-${name}`;
1359
+ let cache = this.annotationCache.get(id);
1360
+ if (cache == null || cache.fileDiff !== fileDiff || !areDiffLineAnnotationsEqual(annotation, cache.annotation)) {
1361
+ cache?.element.remove();
1362
+ const content = renderAnnotation(annotation, fileDiff);
1363
+ if (content == null) continue;
1364
+ cache = {
1365
+ element: createAnnotationWrapperNode(name),
1366
+ annotation,
1367
+ fileDiff
1368
+ };
1369
+ cache.element.appendChild(content);
1370
+ this.fileContainer.appendChild(cache.element);
1371
+ this.annotationCache.set(id, cache);
1372
+ }
1373
+ staleAnnotations.delete(id);
1280
1374
  }
1281
- staleAnnotations.delete(id);
1282
1375
  }
1283
1376
  for (const [id, { element }] of staleAnnotations.entries()) {
1284
1377
  this.annotationCache.delete(id);
@@ -1376,7 +1469,7 @@ var FileDiff = class {
1376
1469
  this.placeHolder?.remove();
1377
1470
  this.placeHolder = void 0;
1378
1471
  const { headerCache: { fileDiff: cachedHeaderDiff, html: cachedHeaderHTML, lastRenderedHTML } } = this;
1379
- const headerHTML = (fileDiff !== this.editSession?.diff && areDiffTargetsEqual(cachedHeaderDiff, fileDiff) ? cachedHeaderHTML : void 0) ?? toHtml(headerAST);
1472
+ const headerHTML = (fileDiff !== this.editSession?.diff && areDiffTargetsEqual(cachedHeaderDiff, fileDiff) ? cachedHeaderHTML : void 0) ?? hastToHtml(headerAST);
1380
1473
  this.headerCache.html = headerHTML;
1381
1474
  this.headerCache.fileDiff = fileDiff;
1382
1475
  if (headerHTML !== lastRenderedHTML) {
@@ -1389,7 +1482,7 @@ var FileDiff = class {
1389
1482
  this.headerElement = newHeader;
1390
1483
  this.headerCache.lastRenderedHTML = headerHTML;
1391
1484
  }
1392
- if (this.isContainerManaged) return;
1485
+ if (this.isComponentManaged) return;
1393
1486
  const { renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata } = this.options;
1394
1487
  if (renderCustomHeader != null) {
1395
1488
  const content = renderCustomHeader(fileDiff) ?? void 0;
@@ -1447,6 +1540,7 @@ var FileDiff = class {
1447
1540
  }
1448
1541
  injectUnsafeCSS() {
1449
1542
  const { unsafeCSS } = this.options;
1543
+ this.pre?.toggleAttribute("data-custom-styles", Boolean(unsafeCSS));
1450
1544
  const shadowRoot = this.fileContainer?.shadowRoot;
1451
1545
  if (shadowRoot == null) return;
1452
1546
  if (unsafeCSS == null || unsafeCSS === "") {
@@ -1515,8 +1609,8 @@ var FileDiff = class {
1515
1609
  const gutterChildren = getElementChildren(ast[0]);
1516
1610
  const contentChildren = getElementChildren(ast[1]);
1517
1611
  if (gutterChildren == null || contentChildren == null) return false;
1518
- columns.gutter.innerHTML = toHtml(gutterChildren);
1519
- columns.content.innerHTML = toHtml(contentChildren);
1612
+ columns.gutter.innerHTML = hastToHtml(gutterChildren);
1613
+ columns.content.innerHTML = hastToHtml(contentChildren);
1520
1614
  if (rowCount !== this.lastRowCount) {
1521
1615
  columns.gutter.style.setProperty("grid-row", `span ${rowCount}`);
1522
1616
  columns.content.style.setProperty("grid-row", `span ${rowCount}`);
@@ -1639,7 +1733,7 @@ var FileDiff = class {
1639
1733
  else if (diffStyle === "split" && Array.isArray(codeElements)) this.insertPartialHTML(diffStyle, codeElements, result, insertPosition);
1640
1734
  else throw new Error("FileDiff.applyPartialRender.applyChunk: invalid chunk application");
1641
1735
  rowCount += result.rowCount;
1642
- this.renderedDiff = result.fileDiff;
1736
+ this.adoptRenderData(result.fileDiff);
1643
1737
  };
1644
1738
  this.cleanupErrorWrapper();
1645
1739
  applyChunk(prependResult, "afterbegin");
@@ -1662,7 +1756,7 @@ var FileDiff = class {
1662
1756
  } else throw new Error("FileDiff.insertPartialHTML: Invalid argument composition");
1663
1757
  }
1664
1758
  refreshSplitDiffView() {
1665
- const fileDiff = this.getLatestDiff();
1759
+ const fileDiff = this.getWorkingDiff();
1666
1760
  if (this.options.diffStyle !== "split" || fileDiff == null) return;
1667
1761
  const hunksResult = this.hunksRenderer.renderDiff(fileDiff, this.renderRange);
1668
1762
  if (hunksResult == null) return;
@@ -1681,10 +1775,10 @@ var FileDiff = class {
1681
1775
  };
1682
1776
  applyLineType("deletions", columns[0]);
1683
1777
  applyLineType("additions", columns[1]);
1684
- this.renderedDiff = hunksResult.fileDiff;
1778
+ this.adoptRenderData(hunksResult.fileDiff);
1685
1779
  }
1686
1780
  refreshUnifiedDiffView() {
1687
- const fileDiff = this.getLatestDiff();
1781
+ const fileDiff = this.getWorkingDiff();
1688
1782
  if (this.options.diffStyle !== "unified" || fileDiff == null) return;
1689
1783
  const hunksResult = this.hunksRenderer.renderDiff(fileDiff, this.renderRange);
1690
1784
  if (hunksResult == null) return;
@@ -1694,12 +1788,12 @@ var FileDiff = class {
1694
1788
  const gutterChildren = getElementChildren(ast?.[0]);
1695
1789
  const contentChildren = getElementChildren(ast?.[1]);
1696
1790
  const applyColumns = () => {
1697
- for (const [el, astChildren] of [[columns.gutter, gutterChildren], [columns.content, contentChildren]]) if (astChildren != null) el.innerHTML = toHtml(astChildren);
1791
+ for (const [el, astChildren] of [[columns.gutter, gutterChildren], [columns.content, contentChildren]]) if (astChildren != null) el.innerHTML = hastToHtml(astChildren);
1698
1792
  if (hunksResult.rowCount !== this.lastRowCount) {
1699
1793
  this.applyRowSpan("unified", columns, hunksResult.rowCount);
1700
1794
  this.lastRowCount = hunksResult.rowCount;
1701
1795
  }
1702
- this.renderedDiff = hunksResult.fileDiff;
1796
+ this.adoptRenderData(hunksResult.fileDiff);
1703
1797
  };
1704
1798
  if (this.shouldGuardRebuildScroll()) guardWebKitScrollDuringRebuild(this.pre, applyColumns);
1705
1799
  else applyColumns();