@pierre/diffs 1.3.0-beta.5 → 1.3.0-beta.6

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 (623) hide show
  1. package/README.md +9 -9
  2. package/dist/components/CodeView.d.ts +10 -11
  3. package/dist/components/CodeView.d.ts.map +1 -1
  4. package/dist/components/CodeView.js +8 -8
  5. package/dist/components/CodeView.js.map +1 -1
  6. package/dist/components/File.d.ts +4 -5
  7. package/dist/components/File.d.ts.map +1 -1
  8. package/dist/components/File.js +32 -17
  9. package/dist/components/File.js.map +1 -1
  10. package/dist/components/FileDiff.d.ts +19 -19
  11. package/dist/components/FileDiff.d.ts.map +1 -1
  12. package/dist/components/FileDiff.js +84 -54
  13. package/dist/components/FileDiff.js.map +1 -1
  14. package/dist/components/FileStream.d.ts +0 -1
  15. package/dist/components/FileStream.d.ts.map +1 -1
  16. package/dist/components/FileStream.js +4 -4
  17. package/dist/components/FileStream.js.map +1 -1
  18. package/dist/components/UnresolvedFile.d.ts +1 -2
  19. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  20. package/dist/components/UnresolvedFile.js +3 -3
  21. package/dist/components/UnresolvedFile.js.map +1 -1
  22. package/dist/components/VirtualizedFile.d.ts +0 -1
  23. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  24. package/dist/components/VirtualizedFile.js +19 -18
  25. package/dist/components/VirtualizedFile.js.map +1 -1
  26. package/dist/components/VirtualizedFileDiff.d.ts +2 -3
  27. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  28. package/dist/components/VirtualizedFileDiff.js +17 -18
  29. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  30. package/dist/components/Virtualizer.d.ts +1 -1
  31. package/dist/components/Virtualizer.d.ts.map +1 -1
  32. package/dist/components/Virtualizer.js +23 -24
  33. package/dist/components/Virtualizer.js.map +1 -1
  34. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
  35. package/dist/components/web-components.d.ts.map +1 -1
  36. package/dist/components/web-components.js +2 -3
  37. package/dist/components/web-components.js.map +1 -1
  38. package/dist/constants.d.ts +3 -2
  39. package/dist/constants.d.ts.map +1 -1
  40. package/dist/constants.js +3 -2
  41. package/dist/constants.js.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/command.js +7 -3
  45. package/dist/editor/command.js.map +1 -1
  46. package/dist/editor/editStack.d.ts +7 -1
  47. package/dist/editor/editStack.d.ts.map +1 -1
  48. package/dist/editor/editStack.js +3 -3
  49. package/dist/editor/editStack.js.map +1 -1
  50. package/dist/editor/editor.d.ts +26 -2
  51. package/dist/editor/editor.d.ts.map +1 -1
  52. package/dist/editor/editor.js +551 -252
  53. package/dist/editor/editor.js.map +1 -1
  54. package/dist/editor/editor2.js +3 -3
  55. package/dist/editor/editor2.js.map +1 -1
  56. package/dist/editor/index.js +1 -2
  57. package/dist/editor/lineAnnotations.d.ts.map +1 -1
  58. package/dist/editor/lineAnnotations.js +2 -3
  59. package/dist/editor/lineAnnotations.js.map +1 -1
  60. package/dist/editor/marker.d.ts +2 -1
  61. package/dist/editor/marker.d.ts.map +1 -1
  62. package/dist/editor/marker.js +28 -11
  63. package/dist/editor/marker.js.map +1 -1
  64. package/dist/editor/pieceTable.d.ts +4 -2
  65. package/dist/editor/pieceTable.d.ts.map +1 -1
  66. package/dist/editor/pieceTable.js +138 -128
  67. package/dist/editor/pieceTable.js.map +1 -1
  68. package/dist/editor/platform.d.ts +8 -1
  69. package/dist/editor/platform.d.ts.map +1 -1
  70. package/dist/editor/platform.js +16 -5
  71. package/dist/editor/platform.js.map +1 -1
  72. package/dist/editor/searchPanel.d.ts +1 -0
  73. package/dist/editor/searchPanel.d.ts.map +1 -1
  74. package/dist/editor/searchPanel.js +75 -62
  75. package/dist/editor/searchPanel.js.map +1 -1
  76. package/dist/editor/selection.d.ts +41 -4
  77. package/dist/editor/selection.d.ts.map +1 -1
  78. package/dist/editor/selection.js +423 -83
  79. package/dist/editor/selection.js.map +1 -1
  80. package/dist/editor/selectionAction.d.ts +4 -5
  81. package/dist/editor/selectionAction.d.ts.map +1 -1
  82. package/dist/editor/selectionAction.js +14 -64
  83. package/dist/editor/selectionAction.js.map +1 -1
  84. package/dist/editor/sprite.d.ts +2 -2
  85. package/dist/editor/sprite.d.ts.map +1 -1
  86. package/dist/editor/sprite.js +7 -14
  87. package/dist/editor/sprite.js.map +1 -1
  88. package/dist/editor/textDocument.d.ts +5 -4
  89. package/dist/editor/textDocument.d.ts.map +1 -1
  90. package/dist/editor/textDocument.js +26 -15
  91. package/dist/editor/textDocument.js.map +1 -1
  92. package/dist/editor/textMeasure.d.ts +36 -3
  93. package/dist/editor/textMeasure.d.ts.map +1 -1
  94. package/dist/editor/textMeasure.js +79 -10
  95. package/dist/editor/textMeasure.js.map +1 -1
  96. package/dist/editor/tokenzier.d.ts +1 -0
  97. package/dist/editor/tokenzier.d.ts.map +1 -1
  98. package/dist/editor/tokenzier.js +16 -13
  99. package/dist/editor/tokenzier.js.map +1 -1
  100. package/dist/editor/utils.d.ts +2 -1
  101. package/dist/editor/utils.d.ts.map +1 -1
  102. package/dist/editor/utils.js +6 -3
  103. package/dist/editor/utils.js.map +1 -1
  104. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  105. package/dist/highlighter/languages/areLanguagesAttached.js +1 -2
  106. package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
  107. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +0 -2
  108. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  109. package/dist/highlighter/languages/attachResolvedLanguages.js +1 -2
  110. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  111. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  112. package/dist/highlighter/languages/cleanUpResolvedLanguages.js +1 -2
  113. package/dist/highlighter/languages/cleanUpResolvedLanguages.js.map +1 -1
  114. package/dist/highlighter/languages/constants.d.ts +0 -1
  115. package/dist/highlighter/languages/constants.d.ts.map +1 -1
  116. package/dist/highlighter/languages/constants.js +1 -1
  117. package/dist/highlighter/languages/constants.js.map +1 -1
  118. package/dist/highlighter/languages/getResolvedLanguages.d.ts +0 -2
  119. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  120. package/dist/highlighter/languages/getResolvedLanguages.js +1 -2
  121. package/dist/highlighter/languages/getResolvedLanguages.js.map +1 -1
  122. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +0 -2
  123. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  124. package/dist/highlighter/languages/getResolvedOrResolveLanguage.js +1 -2
  125. package/dist/highlighter/languages/getResolvedOrResolveLanguage.js.map +1 -1
  126. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  127. package/dist/highlighter/languages/hasResolvedLanguages.js +1 -2
  128. package/dist/highlighter/languages/hasResolvedLanguages.js.map +1 -1
  129. package/dist/highlighter/languages/registerCustomLanguage.d.ts +0 -1
  130. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  131. package/dist/highlighter/languages/registerCustomLanguage.js +1 -2
  132. package/dist/highlighter/languages/registerCustomLanguage.js.map +1 -1
  133. package/dist/highlighter/languages/resolveLanguage.d.ts +0 -2
  134. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  135. package/dist/highlighter/languages/resolveLanguage.js +4 -5
  136. package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
  137. package/dist/highlighter/languages/resolveLanguages.d.ts +0 -2
  138. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  139. package/dist/highlighter/languages/resolveLanguages.js +1 -2
  140. package/dist/highlighter/languages/resolveLanguages.js.map +1 -1
  141. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  142. package/dist/highlighter/shared_highlighter.js +3 -4
  143. package/dist/highlighter/shared_highlighter.js.map +1 -1
  144. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  145. package/dist/highlighter/themes/areThemesAttached.js +1 -2
  146. package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
  147. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  148. package/dist/highlighter/themes/attachResolvedThemes.js +1 -2
  149. package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
  150. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  151. package/dist/highlighter/themes/cleanUpResolvedThemes.js +1 -2
  152. package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
  153. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  154. package/dist/highlighter/themes/constants.js +1 -1
  155. package/dist/highlighter/themes/constants.js.map +1 -1
  156. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  157. package/dist/highlighter/themes/getResolvedOrResolveTheme.js +1 -2
  158. package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
  159. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  160. package/dist/highlighter/themes/getResolvedThemes.js +1 -2
  161. package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
  162. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  163. package/dist/highlighter/themes/hasResolvedThemes.js +1 -2
  164. package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
  165. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  166. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +1 -2
  167. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
  168. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  169. package/dist/highlighter/themes/registerCustomTheme.js +1 -2
  170. package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
  171. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  172. package/dist/highlighter/themes/resolveTheme.js +1 -2
  173. package/dist/highlighter/themes/resolveTheme.js.map +1 -1
  174. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  175. package/dist/highlighter/themes/resolveThemes.js +1 -2
  176. package/dist/highlighter/themes/resolveThemes.js.map +1 -1
  177. package/dist/highlighter/themes/themeResolution.d.ts.map +1 -1
  178. package/dist/highlighter/themes/themeResolution.js +1 -2
  179. package/dist/highlighter/themes/themeResolution.js.map +1 -1
  180. package/dist/highlighter/themes/themeResolver.d.ts +2 -2
  181. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  182. package/dist/highlighter/themes/themeResolver.js +1 -2
  183. package/dist/highlighter/themes/themeResolver.js.map +1 -1
  184. package/dist/index.d.ts +10 -10
  185. package/dist/index.js +2 -3
  186. package/dist/managers/InteractionManager.d.ts +7 -0
  187. package/dist/managers/InteractionManager.d.ts.map +1 -1
  188. package/dist/managers/InteractionManager.js +25 -3
  189. package/dist/managers/InteractionManager.js.map +1 -1
  190. package/dist/managers/ResizeManager.d.ts.map +1 -1
  191. package/dist/managers/ResizeManager.js +1 -1
  192. package/dist/managers/ResizeManager.js.map +1 -1
  193. package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  194. package/dist/managers/ScrollSyncManager.js +1 -1
  195. package/dist/managers/ScrollSyncManager.js.map +1 -1
  196. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  197. package/dist/managers/UniversalRenderingManager.js +2 -2
  198. package/dist/managers/UniversalRenderingManager.js.map +1 -1
  199. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +228 -0
  200. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -0
  201. package/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts +84 -0
  202. package/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts.map +1 -0
  203. package/dist/react/CodeView.d.ts +1 -1
  204. package/dist/react/CodeView.d.ts.map +1 -1
  205. package/dist/react/CodeView.js +17 -16
  206. package/dist/react/CodeView.js.map +1 -1
  207. package/dist/react/EditorContext.d.ts +0 -1
  208. package/dist/react/EditorContext.d.ts.map +1 -1
  209. package/dist/react/EditorContext.js +2 -5
  210. package/dist/react/EditorContext.js.map +1 -1
  211. package/dist/react/File.d.ts +1 -0
  212. package/dist/react/File.d.ts.map +1 -1
  213. package/dist/react/File.js +4 -6
  214. package/dist/react/File.js.map +1 -1
  215. package/dist/react/FileDiff.d.ts +1 -0
  216. package/dist/react/FileDiff.d.ts.map +1 -1
  217. package/dist/react/FileDiff.js +4 -6
  218. package/dist/react/FileDiff.js.map +1 -1
  219. package/dist/react/MultiFileDiff.d.ts +1 -0
  220. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  221. package/dist/react/MultiFileDiff.js +4 -6
  222. package/dist/react/MultiFileDiff.js.map +1 -1
  223. package/dist/react/PatchDiff.d.ts +1 -0
  224. package/dist/react/PatchDiff.d.ts.map +1 -1
  225. package/dist/react/PatchDiff.js +4 -6
  226. package/dist/react/PatchDiff.js.map +1 -1
  227. package/dist/react/UnresolvedFile.d.ts +2 -1
  228. package/dist/react/UnresolvedFile.d.ts.map +1 -1
  229. package/dist/react/UnresolvedFile.js +4 -6
  230. package/dist/react/UnresolvedFile.js.map +1 -1
  231. package/dist/react/Virtualizer.d.ts.map +1 -1
  232. package/dist/react/Virtualizer.js +2 -5
  233. package/dist/react/Virtualizer.js.map +1 -1
  234. package/dist/react/WorkerPoolContext.d.ts +0 -1
  235. package/dist/react/WorkerPoolContext.d.ts.map +1 -1
  236. package/dist/react/WorkerPoolContext.js +2 -5
  237. package/dist/react/WorkerPoolContext.js.map +1 -1
  238. package/dist/react/constants.d.ts.map +1 -1
  239. package/dist/react/constants.js +1 -1
  240. package/dist/react/constants.js.map +1 -1
  241. package/dist/react/index.d.ts +2 -2
  242. package/dist/react/index.js +1 -2
  243. package/dist/react/jsx.d.ts +0 -2
  244. package/dist/react/jsx.d.ts.map +1 -1
  245. package/dist/react/types.d.ts +2 -0
  246. package/dist/react/types.d.ts.map +1 -1
  247. package/dist/react/utils/renderDiffChildren.d.ts +2 -0
  248. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  249. package/dist/react/utils/renderDiffChildren.js +18 -11
  250. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  251. package/dist/react/utils/renderFileChildren.d.ts +2 -0
  252. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  253. package/dist/react/utils/renderFileChildren.js +18 -11
  254. package/dist/react/utils/renderFileChildren.js.map +1 -1
  255. package/dist/react/utils/templateRender.d.ts.map +1 -1
  256. package/dist/react/utils/templateRender.js +1 -2
  257. package/dist/react/utils/templateRender.js.map +1 -1
  258. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  259. package/dist/react/utils/useFileDiffInstance.js +1 -3
  260. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  261. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  262. package/dist/react/utils/useFileInstance.js +1 -2
  263. package/dist/react/utils/useFileInstance.js.map +1 -1
  264. package/dist/react/utils/useStableCallback.d.ts.map +1 -1
  265. package/dist/react/utils/useStableCallback.js +1 -2
  266. package/dist/react/utils/useStableCallback.js.map +1 -1
  267. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  268. package/dist/react/utils/useUnresolvedFileInstance.js +10 -11
  269. package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
  270. package/dist/renderers/DiffHunksRenderer.d.ts +2 -3
  271. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  272. package/dist/renderers/DiffHunksRenderer.js +30 -24
  273. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  274. package/dist/renderers/FileRenderer.d.ts +1 -3
  275. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  276. package/dist/renderers/FileRenderer.js +14 -11
  277. package/dist/renderers/FileRenderer.js.map +1 -1
  278. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts +1 -2
  279. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  280. package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -2
  281. package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
  282. package/dist/shiki-stream/index.js +1 -2
  283. package/dist/shiki-stream/stream.d.ts +0 -1
  284. package/dist/shiki-stream/stream.d.ts.map +1 -1
  285. package/dist/shiki-stream/stream.js +1 -2
  286. package/dist/shiki-stream/stream.js.map +1 -1
  287. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  288. package/dist/shiki-stream/tokenizer.js +1 -1
  289. package/dist/shiki-stream/tokenizer.js.map +1 -1
  290. package/dist/shiki-stream/types.d.ts +0 -1
  291. package/dist/shiki-stream/types.d.ts.map +1 -1
  292. package/dist/sprite.d.ts.map +1 -1
  293. package/dist/sprite.js +1 -1
  294. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  295. package/dist/ssr/FileDiffReact.js +5 -8
  296. package/dist/ssr/FileDiffReact.js.map +1 -1
  297. package/dist/ssr/index.d.ts +2 -2
  298. package/dist/ssr/index.js +1 -2
  299. package/dist/ssr/preloadDiffs.d.ts +1 -1
  300. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  301. package/dist/ssr/preloadDiffs.js +1 -2
  302. package/dist/ssr/preloadDiffs.js.map +1 -1
  303. package/dist/ssr/preloadFile.d.ts.map +1 -1
  304. package/dist/ssr/preloadFile.js +1 -2
  305. package/dist/ssr/preloadFile.js.map +1 -1
  306. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  307. package/dist/ssr/preloadPatchFile.js +2 -3
  308. package/dist/ssr/preloadPatchFile.js.map +1 -1
  309. package/dist/ssr/renderHTML.d.ts +1 -1
  310. package/dist/ssr/renderHTML.d.ts.map +1 -1
  311. package/dist/ssr/renderHTML.js +1 -2
  312. package/dist/ssr/renderHTML.js.map +1 -1
  313. package/dist/string-import.d.ts +4 -0
  314. package/dist/string-import.d.ts.map +1 -1
  315. package/dist/style.js +3 -3
  316. package/dist/style.js.map +1 -1
  317. package/dist/types.d.ts +11 -5
  318. package/dist/types.d.ts.map +1 -1
  319. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  320. package/dist/utils/areDiffLineAnnotationsEqual.js +1 -1
  321. package/dist/utils/areDiffLineAnnotationsEqual.js.map +1 -1
  322. package/dist/utils/areDiffRenderOptionsEqual.d.ts.map +1 -1
  323. package/dist/utils/areDiffRenderOptionsEqual.js +1 -2
  324. package/dist/utils/areDiffRenderOptionsEqual.js.map +1 -1
  325. package/dist/utils/areDiffTargetsEqual.d.ts.map +1 -1
  326. package/dist/utils/areDiffTargetsEqual.js +1 -1
  327. package/dist/utils/areDiffTargetsEqual.js.map +1 -1
  328. package/dist/utils/areFileRenderOptionsEqual.d.ts.map +1 -1
  329. package/dist/utils/areFileRenderOptionsEqual.js +1 -2
  330. package/dist/utils/areFileRenderOptionsEqual.js.map +1 -1
  331. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  332. package/dist/utils/areFilesEqual.js +1 -1
  333. package/dist/utils/areFilesEqual.js.map +1 -1
  334. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  335. package/dist/utils/areHunkDataEqual.js +1 -1
  336. package/dist/utils/areHunkDataEqual.js.map +1 -1
  337. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  338. package/dist/utils/areLineAnnotationsEqual.js +1 -1
  339. package/dist/utils/areLineAnnotationsEqual.js.map +1 -1
  340. package/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
  341. package/dist/utils/areManagedSnapshotsEqual.js +1 -1
  342. package/dist/utils/areManagedSnapshotsEqual.js.map +1 -1
  343. package/dist/utils/areMergeConflictActionsEqual.d.ts.map +1 -1
  344. package/dist/utils/areMergeConflictActionsEqual.js +1 -1
  345. package/dist/utils/areMergeConflictActionsEqual.js.map +1 -1
  346. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  347. package/dist/utils/areObjectsEqual.js +1 -1
  348. package/dist/utils/areObjectsEqual.js.map +1 -1
  349. package/dist/utils/areOptionsEqual.d.ts +0 -2
  350. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  351. package/dist/utils/areOptionsEqual.js +1 -2
  352. package/dist/utils/areOptionsEqual.js.map +1 -1
  353. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  354. package/dist/utils/arePrePropertiesEqual.js +1 -1
  355. package/dist/utils/arePrePropertiesEqual.js.map +1 -1
  356. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  357. package/dist/utils/areRenderRangesEqual.js +1 -1
  358. package/dist/utils/areRenderRangesEqual.js.map +1 -1
  359. package/dist/utils/areSelectionPointsEqual.d.ts.map +1 -1
  360. package/dist/utils/areSelectionPointsEqual.js +1 -1
  361. package/dist/utils/areSelectionPointsEqual.js.map +1 -1
  362. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  363. package/dist/utils/areSelectionsEqual.js +1 -1
  364. package/dist/utils/areSelectionsEqual.js.map +1 -1
  365. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  366. package/dist/utils/areThemesEqual.js +1 -1
  367. package/dist/utils/areThemesEqual.js.map +1 -1
  368. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  369. package/dist/utils/areVirtualWindowSpecsEqual.js +1 -1
  370. package/dist/utils/areVirtualWindowSpecsEqual.js.map +1 -1
  371. package/dist/utils/areWorkerStatsEqual.d.ts +0 -2
  372. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  373. package/dist/utils/areWorkerStatsEqual.js +1 -1
  374. package/dist/utils/areWorkerStatsEqual.js.map +1 -1
  375. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  376. package/dist/utils/cleanLastNewline.js +1 -1
  377. package/dist/utils/cleanLastNewline.js.map +1 -1
  378. package/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
  379. package/dist/utils/computeEstimatedDiffHeights.js +1 -2
  380. package/dist/utils/computeEstimatedDiffHeights.js.map +1 -1
  381. package/dist/utils/computeFileOffsets.d.ts +9 -1
  382. package/dist/utils/computeFileOffsets.d.ts.map +1 -1
  383. package/dist/utils/computeFileOffsets.js +20 -2
  384. package/dist/utils/computeFileOffsets.js.map +1 -1
  385. package/dist/utils/computeVirtualFileMetrics.d.ts.map +1 -1
  386. package/dist/utils/computeVirtualFileMetrics.js +1 -2
  387. package/dist/utils/computeVirtualFileMetrics.js.map +1 -1
  388. package/dist/utils/createAnnotationElement.d.ts +1 -1
  389. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  390. package/dist/utils/createAnnotationElement.js +1 -2
  391. package/dist/utils/createAnnotationElement.js.map +1 -1
  392. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  393. package/dist/utils/createAnnotationWrapperNode.js +1 -1
  394. package/dist/utils/createAnnotationWrapperNode.js.map +1 -1
  395. package/dist/utils/createContentColumn.d.ts +1 -1
  396. package/dist/utils/createContentColumn.d.ts.map +1 -1
  397. package/dist/utils/createContentColumn.js +1 -2
  398. package/dist/utils/createContentColumn.js.map +1 -1
  399. package/dist/utils/createEmptyRowBuffer.d.ts +1 -1
  400. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  401. package/dist/utils/createEmptyRowBuffer.js +1 -2
  402. package/dist/utils/createEmptyRowBuffer.js.map +1 -1
  403. package/dist/utils/createFileHeaderElement.d.ts +1 -1
  404. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  405. package/dist/utils/createFileHeaderElement.js +6 -3
  406. package/dist/utils/createFileHeaderElement.js.map +1 -1
  407. package/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -1
  408. package/dist/utils/createGutterUtilityContentNode.js +1 -1
  409. package/dist/utils/createGutterUtilityContentNode.js.map +1 -1
  410. package/dist/utils/createGutterUtilityElement.d.ts +1 -1
  411. package/dist/utils/createGutterUtilityElement.d.ts.map +1 -1
  412. package/dist/utils/createGutterUtilityElement.js +1 -2
  413. package/dist/utils/createGutterUtilityElement.js.map +1 -1
  414. package/dist/utils/createNoNewlineElement.d.ts +1 -1
  415. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  416. package/dist/utils/createNoNewlineElement.js +1 -2
  417. package/dist/utils/createNoNewlineElement.js.map +1 -1
  418. package/dist/utils/createPreElement.d.ts +1 -1
  419. package/dist/utils/createPreElement.d.ts.map +1 -1
  420. package/dist/utils/createPreElement.js +1 -2
  421. package/dist/utils/createPreElement.js.map +1 -1
  422. package/dist/utils/createRowNodes.d.ts.map +1 -1
  423. package/dist/utils/createRowNodes.js +1 -1
  424. package/dist/utils/createRowNodes.js.map +1 -1
  425. package/dist/utils/createSeparator.d.ts +1 -1
  426. package/dist/utils/createSeparator.d.ts.map +1 -1
  427. package/dist/utils/createSeparator.js +1 -2
  428. package/dist/utils/createSeparator.js.map +1 -1
  429. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  430. package/dist/utils/createSpanNodeFromToken.js +1 -2
  431. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  432. package/dist/utils/createStyleElement.d.ts +1 -1
  433. package/dist/utils/createStyleElement.d.ts.map +1 -1
  434. package/dist/utils/createStyleElement.js +1 -2
  435. package/dist/utils/createStyleElement.js.map +1 -1
  436. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  437. package/dist/utils/createTransformerWithState.js +1 -2
  438. package/dist/utils/createTransformerWithState.js.map +1 -1
  439. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  440. package/dist/utils/createUnsafeCSSStyleNode.js +1 -2
  441. package/dist/utils/createUnsafeCSSStyleNode.js.map +1 -1
  442. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  443. package/dist/utils/createWindowFromScrollPosition.js +5 -5
  444. package/dist/utils/createWindowFromScrollPosition.js.map +1 -1
  445. package/dist/utils/cssWrappers.d.ts.map +1 -1
  446. package/dist/utils/cssWrappers.js +2 -3
  447. package/dist/utils/cssWrappers.js.map +1 -1
  448. package/dist/utils/detachString.d.ts.map +1 -1
  449. package/dist/utils/detachString.js +1 -1
  450. package/dist/utils/detachString.js.map +1 -1
  451. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  452. package/dist/utils/diffAcceptRejectHunk.js +1 -2
  453. package/dist/utils/diffAcceptRejectHunk.js.map +1 -1
  454. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  455. package/dist/utils/formatCSSVariablePrefix.js +1 -1
  456. package/dist/utils/formatCSSVariablePrefix.js.map +1 -1
  457. package/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -1
  458. package/dist/utils/getDiffHunksRendererOptions.js +1 -1
  459. package/dist/utils/getDiffHunksRendererOptions.js.map +1 -1
  460. package/dist/utils/getFileRendererOptions.d.ts.map +1 -1
  461. package/dist/utils/getFileRendererOptions.js +1 -1
  462. package/dist/utils/getFileRendererOptions.js.map +1 -1
  463. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  464. package/dist/utils/getFiletypeFromFileName.js +1 -1
  465. package/dist/utils/getFiletypeFromFileName.js.map +1 -1
  466. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  467. package/dist/utils/getHighlighterOptions.js +1 -2
  468. package/dist/utils/getHighlighterOptions.js.map +1 -1
  469. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  470. package/dist/utils/getHighlighterThemeStyles.js +1 -2
  471. package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
  472. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  473. package/dist/utils/getHunkSeparatorSlotName.js +1 -1
  474. package/dist/utils/getHunkSeparatorSlotName.js.map +1 -1
  475. package/dist/utils/getIconForType.d.ts.map +1 -1
  476. package/dist/utils/getIconForType.js +1 -1
  477. package/dist/utils/getIconForType.js.map +1 -1
  478. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  479. package/dist/utils/getLineAnnotationName.js +1 -1
  480. package/dist/utils/getLineAnnotationName.js.map +1 -1
  481. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  482. package/dist/utils/getLineEndingType.js +1 -1
  483. package/dist/utils/getLineEndingType.js.map +1 -1
  484. package/dist/utils/getLineNodes.d.ts +1 -1
  485. package/dist/utils/getLineNodes.d.ts.map +1 -1
  486. package/dist/utils/getLineNodes.js +1 -1
  487. package/dist/utils/getLineNodes.js.map +1 -1
  488. package/dist/utils/getMergeConflictActionSlotName.d.ts.map +1 -1
  489. package/dist/utils/getMergeConflictActionSlotName.js +1 -1
  490. package/dist/utils/getMergeConflictActionSlotName.js.map +1 -1
  491. package/dist/utils/getMergeConflictLineTypes.d.ts.map +1 -1
  492. package/dist/utils/getMergeConflictLineTypes.js +1 -2
  493. package/dist/utils/getMergeConflictLineTypes.js.map +1 -1
  494. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  495. package/dist/utils/getOrCreateCodeNode.js +1 -1
  496. package/dist/utils/getOrCreateCodeNode.js.map +1 -1
  497. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  498. package/dist/utils/getSingularPatch.js +1 -2
  499. package/dist/utils/getSingularPatch.js.map +1 -1
  500. package/dist/utils/getThemes.d.ts.map +1 -1
  501. package/dist/utils/getThemes.js +1 -2
  502. package/dist/utils/getThemes.js.map +1 -1
  503. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  504. package/dist/utils/getTotalLineCountFromHunks.js +1 -1
  505. package/dist/utils/getTotalLineCountFromHunks.js.map +1 -1
  506. package/dist/utils/hast_utils.d.ts +1 -1
  507. package/dist/utils/hast_utils.d.ts.map +1 -1
  508. package/dist/utils/hast_utils.js +1 -1
  509. package/dist/utils/hast_utils.js.map +1 -1
  510. package/dist/utils/hostTheme.d.ts.map +1 -1
  511. package/dist/utils/hostTheme.js +1 -2
  512. package/dist/utils/hostTheme.js.map +1 -1
  513. package/dist/utils/includesFileAnnotations.d.ts.map +1 -1
  514. package/dist/utils/includesFileAnnotations.js +5 -5
  515. package/dist/utils/includesFileAnnotations.js.map +1 -1
  516. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  517. package/dist/utils/isDefaultRenderRange.js +1 -1
  518. package/dist/utils/isDefaultRenderRange.js.map +1 -1
  519. package/dist/utils/isDiffPlainText.d.ts.map +1 -1
  520. package/dist/utils/isDiffPlainText.js +1 -2
  521. package/dist/utils/isDiffPlainText.js.map +1 -1
  522. package/dist/utils/isFilePlainText.d.ts.map +1 -1
  523. package/dist/utils/isFilePlainText.js +1 -2
  524. package/dist/utils/isFilePlainText.js.map +1 -1
  525. package/dist/utils/isStyleNode.d.ts.map +1 -1
  526. package/dist/utils/isStyleNode.js +1 -1
  527. package/dist/utils/isStyleNode.js.map +1 -1
  528. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  529. package/dist/utils/isWorkerContext.js +1 -1
  530. package/dist/utils/isWorkerContext.js.map +1 -1
  531. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  532. package/dist/utils/iterateOverDiff.js +44 -45
  533. package/dist/utils/iterateOverDiff.js.map +1 -1
  534. package/dist/utils/normalizeDiffResolution.d.ts.map +1 -1
  535. package/dist/utils/normalizeDiffResolution.js +1 -1
  536. package/dist/utils/normalizeDiffResolution.js.map +1 -1
  537. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  538. package/dist/utils/parseDiffDecorations.js +1 -2
  539. package/dist/utils/parseDiffDecorations.js.map +1 -1
  540. package/dist/utils/parseDiffFromFile.d.ts +0 -1
  541. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  542. package/dist/utils/parseDiffFromFile.js +1 -2
  543. package/dist/utils/parseDiffFromFile.js.map +1 -1
  544. package/dist/utils/parseLineType.d.ts.map +1 -1
  545. package/dist/utils/parseLineType.js +1 -1
  546. package/dist/utils/parseLineType.js.map +1 -1
  547. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  548. package/dist/utils/parseMergeConflictDiffFromFile.js +5 -5
  549. package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
  550. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  551. package/dist/utils/parsePatchFiles.js +6 -7
  552. package/dist/utils/parsePatchFiles.js.map +1 -1
  553. package/dist/utils/prefersReducedMotion.d.ts.map +1 -1
  554. package/dist/utils/prefersReducedMotion.js +1 -1
  555. package/dist/utils/prefersReducedMotion.js.map +1 -1
  556. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  557. package/dist/utils/prerenderHTMLIfNecessary.js +1 -1
  558. package/dist/utils/prerenderHTMLIfNecessary.js.map +1 -1
  559. package/dist/utils/processLine.d.ts +1 -1
  560. package/dist/utils/processLine.d.ts.map +1 -1
  561. package/dist/utils/processLine.js +1 -2
  562. package/dist/utils/processLine.js.map +1 -1
  563. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  564. package/dist/utils/renderDiffWithHighlighter.js +4 -5
  565. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  566. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  567. package/dist/utils/renderFileWithHighlighter.js +1 -2
  568. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  569. package/dist/utils/resolveConflict.d.ts.map +1 -1
  570. package/dist/utils/resolveConflict.js +1 -2
  571. package/dist/utils/resolveConflict.js.map +1 -1
  572. package/dist/utils/resolveRegion.d.ts.map +1 -1
  573. package/dist/utils/resolveRegion.js +1 -1
  574. package/dist/utils/resolveRegion.js.map +1 -1
  575. package/dist/utils/roundToDevicePixel.d.ts.map +1 -1
  576. package/dist/utils/roundToDevicePixel.js +1 -1
  577. package/dist/utils/roundToDevicePixel.js.map +1 -1
  578. package/dist/utils/scrollbarGutter.d.ts.map +1 -1
  579. package/dist/utils/scrollbarGutter.js +1 -2
  580. package/dist/utils/scrollbarGutter.js.map +1 -1
  581. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  582. package/dist/utils/setLanguageOverride.js +1 -1
  583. package/dist/utils/setLanguageOverride.js.map +1 -1
  584. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  585. package/dist/utils/setWrapperNodeProps.js +1 -1
  586. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  587. package/dist/utils/shouldUseTokenTransformer.d.ts.map +1 -1
  588. package/dist/utils/shouldUseTokenTransformer.js +1 -1
  589. package/dist/utils/shouldUseTokenTransformer.js.map +1 -1
  590. package/dist/utils/splitFileContents.d.ts.map +1 -1
  591. package/dist/utils/splitFileContents.js +1 -2
  592. package/dist/utils/splitFileContents.js.map +1 -1
  593. package/dist/utils/trimPatchContext.d.ts.map +1 -1
  594. package/dist/utils/trimPatchContext.js +1 -2
  595. package/dist/utils/trimPatchContext.js.map +1 -1
  596. package/dist/utils/updateDiffHunks.d.ts +2 -1
  597. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  598. package/dist/utils/updateDiffHunks.js +22 -3
  599. package/dist/utils/updateDiffHunks.js.map +1 -1
  600. package/dist/utils/virtualDiffLayout.d.ts.map +1 -1
  601. package/dist/utils/virtualDiffLayout.js +1 -2
  602. package/dist/utils/virtualDiffLayout.js.map +1 -1
  603. package/dist/utils/wrapTokenFragments.d.ts +1 -1
  604. package/dist/utils/wrapTokenFragments.d.ts.map +1 -1
  605. package/dist/utils/wrapTokenFragments.js +1 -2
  606. package/dist/utils/wrapTokenFragments.js.map +1 -1
  607. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  608. package/dist/worker/WorkerPoolManager.js +5 -5
  609. package/dist/worker/WorkerPoolManager.js.map +1 -1
  610. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  611. package/dist/worker/getOrCreateWorkerPoolSingleton.js +1 -2
  612. package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
  613. package/dist/worker/index.js +1 -2
  614. package/dist/worker/types.d.ts.map +1 -1
  615. package/dist/worker/wasm-B9ZqxnKj.js +8 -0
  616. package/dist/worker/wasm-B9ZqxnKj.js.map +1 -0
  617. package/dist/worker/worker-portable.js +2779 -6403
  618. package/dist/worker/worker-portable.js.map +1 -1
  619. package/dist/worker/worker.js +89 -123
  620. package/dist/worker/worker.js.map +1 -1
  621. package/package.json +13 -14
  622. package/dist/worker/wasm-qE0LgnY3.js +0 -10
  623. package/dist/worker/wasm-qE0LgnY3.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FileRenderer.js","names":["options: FileRendererOptions","onRenderUpdate?: () => unknown","workerManager?: WorkerPoolManager | undefined","options: RenderFileOptions","options","contentArray: ElementContent[]"],"sources":["../../src/renderers/FileRenderer.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\nimport { toHtml } from 'hast-util-to-html';\n\nimport {\n DEFAULT_RENDER_RANGE,\n DEFAULT_THEMES,\n DEFAULT_TOKENIZE_MAX_LENGTH,\n} from '../constants';\nimport { areLanguagesAttached } from '../highlighter/languages/areLanguagesAttached';\nimport {\n getHighlighterIfLoaded,\n getSharedHighlighter,\n} from '../highlighter/shared_highlighter';\nimport { areThemesAttached } from '../highlighter/themes/areThemesAttached';\nimport { hasResolvedThemes } from '../highlighter/themes/hasResolvedThemes';\nimport type {\n BaseCodeOptions,\n DiffsHighlighter,\n DiffsTextDocument,\n FileContents,\n FileHeaderRenderMode,\n HighlightedToken,\n LineAnnotation,\n RenderedFileASTCache,\n RenderFileOptions,\n RenderFileResult,\n RenderRange,\n SupportedLanguages,\n ThemedFileResult,\n} from '../types';\nimport { areFileRenderOptionsEqual } from '../utils/areFileRenderOptionsEqual';\nimport { areFilesEqual } from '../utils/areFilesEqual';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { linesFromFileContents } from '../utils/computeFileOffsets';\nimport { createAnnotationElement } from '../utils/createAnnotationElement';\nimport { createContentColumn } from '../utils/createContentColumn';\nimport { createFileHeaderElement } from '../utils/createFileHeaderElement';\nimport { createPreElement } from '../utils/createPreElement';\nimport { getFiletypeFromFileName } from '../utils/getFiletypeFromFileName';\nimport { getHighlighterOptions } from '../utils/getHighlighterOptions';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\nimport { getThemes } from '../utils/getThemes';\nimport {\n createGutterGap,\n createGutterItem,\n createGutterWrapper,\n createHastElement,\n} from '../utils/hast_utils';\nimport {\n FILE_ANNOTATION_HUNK_INDEX,\n FILE_ANNOTATION_LINE_INDEX,\n getFileAnnotations,\n shouldRenderFileAnnotations,\n} from '../utils/includesFileAnnotations';\nimport { isFilePlainText } from '../utils/isFilePlainText';\nimport { renderFileWithHighlighter } from '../utils/renderFileWithHighlighter';\nimport { shouldUseTokenTransformer } from '../utils/shouldUseTokenTransformer';\nimport type { WorkerPoolManager } from '../worker';\n\ntype AnnotationLineMap<LAnnotation> = Record<\n number,\n LineAnnotation<LAnnotation>[] | undefined\n>;\n\ninterface GetRenderOptionsReturn {\n options: RenderFileOptions;\n forceHighlight: boolean;\n}\n\nexport interface FileRenderResult {\n gutterAST: ElementContent[];\n contentAST: ElementContent[];\n preAST: HASTElement;\n headerAST: HASTElement | undefined;\n css: string;\n totalLines: number;\n themeStyles: string;\n baseThemeType: 'light' | 'dark' | undefined;\n rowCount: number;\n bufferBefore: number;\n bufferAfter: number;\n}\n\ninterface LineCache {\n cacheKey: string | undefined;\n lines: string[];\n}\n\nexport interface FileRendererOptions extends BaseCodeOptions {\n headerRenderMode?: FileHeaderRenderMode;\n}\n\nlet instanceId = -1;\n\nexport class FileRenderer<LAnnotation = undefined> {\n readonly __id: string = `file-renderer:${++instanceId}`;\n\n private highlighter: DiffsHighlighter | undefined;\n private renderCache: RenderedFileASTCache | undefined;\n private computedLang: SupportedLanguages = 'text';\n private lineAnnotations: AnnotationLineMap<LAnnotation> = {};\n private lineCache: LineCache | undefined;\n private textDoucmentCache = new WeakMap<FileContents, DiffsTextDocument>();\n\n constructor(\n public options: FileRendererOptions = { theme: DEFAULT_THEMES },\n private onRenderUpdate?: () => unknown,\n private workerManager?: WorkerPoolManager | undefined\n ) {\n if (workerManager?.isWorkingPool() !== true) {\n this.highlighter = areThemesAttached(options.theme ?? DEFAULT_THEMES)\n ? getHighlighterIfLoaded()\n : undefined;\n }\n }\n\n public setOptions(options: FileRendererOptions): void {\n this.options = options;\n }\n\n public mergeOptions(options: Partial<FileRendererOptions>): void {\n this.options = { ...this.options, ...options };\n }\n\n public setLineAnnotations(\n lineAnnotations: LineAnnotation<LAnnotation>[]\n ): void {\n this.lineAnnotations = {};\n for (const annotation of lineAnnotations) {\n const arr = this.lineAnnotations[annotation.lineNumber] ?? [];\n this.lineAnnotations[annotation.lineNumber] = arr;\n arr.push(annotation);\n }\n }\n\n public cleanUp(): void {\n this.recycle();\n this.workerManager = undefined;\n this.onRenderUpdate = undefined;\n }\n\n public recycle(): void {\n this.clearRenderCache();\n this.highlighter = undefined;\n this.workerManager?.cleanUpTasks(this);\n this.lineCache = undefined;\n }\n\n public clearRenderCache(): void {\n const renderCache = this.renderCache;\n this.renderCache = undefined;\n if (\n renderCache != null &&\n renderCache.isDirty === true &&\n renderCache.file.cacheKey != null\n ) {\n // The render cache has been updated by the editor, let's purge it\n // from the worker manager cache.\n this.workerManager?.evictFileFromCache(renderCache.file.cacheKey);\n }\n }\n\n public hydrate(file: FileContents): void {\n const { options } = this.getRenderOptions(file);\n const lines = this.getOrCreateLineCache(file);\n const massiveFile = isFileMassive(\n lines.length,\n this.getTokenizeMaxLength()\n );\n let cache = this.workerManager?.getFileResultCache(file);\n if (cache != null && !areFileRenderOptionsEqual(options, cache.options)) {\n cache = undefined;\n }\n this.renderCache ??= {\n file,\n options,\n highlighted: !massiveFile && !isFilePlainText(file),\n result: massiveFile ? undefined : cache?.result,\n // FIXME(amadeus): Add support for renderRanges\n renderRange: undefined,\n };\n if (this.workerManager?.isWorkingPool() === true) {\n if (this.renderCache.result == null && !massiveFile) {\n // We should only kick off a preload of the AST if we have a WorkerPool\n this.workerManager.highlightFileAST(this, file);\n }\n }\n // Lets attempt to get the highlighter/languages ready immediately\n else if (this.highlighter == null) {\n this.computedLang = file.lang ?? getFiletypeFromFileName(file.name);\n void this.initializeHighlighter();\n }\n }\n\n private getRenderOptions(file: FileContents): GetRenderOptionsReturn {\n const options: RenderFileOptions = (() => {\n if (this.workerManager?.isWorkingPool() === true) {\n return this.workerManager.getFileRenderOptions();\n }\n const { theme = DEFAULT_THEMES, tokenizeMaxLineLength = 1000 } =\n this.options;\n return {\n theme,\n useTokenTransformer: shouldUseTokenTransformer(this.options),\n tokenizeMaxLineLength,\n };\n })();\n const { renderCache } = this;\n if (renderCache?.result == null) {\n return { options, forceHighlight: true };\n }\n if (\n !areFilesEqual(file, renderCache.file) ||\n !areFileRenderOptionsEqual(options, renderCache.options)\n ) {\n return { options, forceHighlight: true };\n }\n return { options, forceHighlight: false };\n }\n\n public getOrCreateLineCache(file: FileContents): string[] {\n // Uncached files will get split every time, not the greatest experience\n // tbh... but something people should try to optimize away\n if (file.cacheKey == null) {\n this.lineCache = undefined;\n return linesFromFileContents(file.contents);\n }\n\n let { lineCache } = this;\n if (lineCache == null || lineCache.cacheKey !== file.cacheKey) {\n lineCache = {\n cacheKey: file.cacheKey,\n lines: linesFromFileContents(file.contents),\n };\n }\n this.lineCache = lineCache;\n return lineCache.lines;\n }\n\n // when a emitLineCountChange is called,\n // calculate the line count using the cached text document\n public getLineCount(file: FileContents): number {\n return (\n this.textDoucmentCache.get(file)?.lineCount ??\n this.getOrCreateLineCache(file).length\n );\n }\n\n public updateRenderCache(\n dirtyLines: Map<number, Array<HighlightedToken>>,\n themeType: 'dark' | 'light'\n ): void {\n if (this.renderCache == null) {\n return;\n }\n const { result } = this.renderCache;\n if (result == null) {\n return;\n }\n for (const [line, tokens] of dirtyLines) {\n result.code[line] = {\n type: 'element',\n tagName: 'div',\n properties: {\n 'data-line': line + 1,\n 'data-line-type': 'context',\n 'data-line-index': line,\n },\n children: tokens.map(([char, fg, text]) => {\n if (char === 0 && fg === '') {\n if (text === '') {\n return {\n type: 'element',\n tagName: 'br',\n properties: {},\n children: [],\n };\n }\n return { type: 'text', value: text };\n }\n return {\n type: 'element',\n tagName: 'span',\n properties: {\n 'data-char': char,\n style: `--diffs-token-${themeType}:${fg};`,\n },\n children: [{ type: 'text', value: text }],\n };\n }),\n };\n }\n\n result.baseThemeType = themeType;\n this.renderCache.isDirty = true;\n }\n\n // normally triggered by the editor when the document line count changes\n public applyDocumentChange(textDocument: DiffsTextDocument): void {\n if (this.renderCache == null) {\n return undefined;\n }\n const { file, result } = this.renderCache;\n if (result != null && result.code.length !== textDocument.lineCount) {\n for (let i = result.code.length; i < textDocument.lineCount; i++) {\n // prefill lines with plain text content\n result.code.push({\n type: 'element',\n tagName: 'div',\n properties: {\n 'data-line': i + 1,\n 'data-line-type': 'context',\n 'data-line-index': i,\n },\n children: [\n {\n type: 'element',\n tagName: 'span',\n properties: {\n 'data-char': 0,\n },\n children: [\n {\n type: 'text',\n value: textDocument.getLineText(i),\n },\n ],\n },\n ],\n });\n }\n this.renderCache.isDirty = true;\n }\n this.textDoucmentCache.set(file, textDocument);\n }\n\n public renderFile(\n file: FileContents | undefined = this.renderCache?.file,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): FileRenderResult | undefined {\n if (file == null) {\n return undefined;\n }\n let { options, forceHighlight } = this.getRenderOptions(file);\n const cache = this.getMatchingWorkerResultCache(file, options);\n if (cache != null && !this.hasHighlightedRenderCache(file, options)) {\n this.renderCache = {\n file,\n highlighted: true,\n renderRange: undefined,\n ...cache,\n };\n forceHighlight = false;\n }\n this.renderCache ??= {\n file,\n highlighted: false,\n options,\n result: undefined,\n renderRange: undefined,\n };\n const lines = this.getOrCreateLineCache(file);\n const hasContent = file.contents.length > 0;\n const forcePlainText =\n !hasContent ||\n isFilePlainText(file) ||\n isFileMassive(lines.length, this.getTokenizeMaxLength());\n const newContent = !areFilesEqual(file, this.renderCache.file);\n const newRenderRange = !areRenderRangesEqual(\n this.renderCache.renderRange,\n renderRange\n );\n if (this.workerManager?.isWorkingPool() === true) {\n // Cache invalidation based on renderRange comparison\n if (\n forcePlainText ||\n this.renderCache.result == null ||\n (!this.renderCache.highlighted && (newContent || newRenderRange))\n ) {\n this.renderCache.file = file;\n this.renderCache.options = options;\n this.renderCache.highlighted = false;\n if (\n this.renderCache.result == null ||\n newContent ||\n newRenderRange ||\n forceHighlight\n ) {\n this.renderCache.result = this.workerManager.getPlainFileAST(\n file,\n renderRange.startingLine,\n renderRange.totalLines,\n lines\n );\n }\n this.renderCache.renderRange = renderRange;\n }\n\n if (\n !forcePlainText &&\n hasContent &&\n (!this.renderCache.highlighted || forceHighlight)\n ) {\n this.workerManager.highlightFileAST(this, file);\n }\n } else {\n this.computedLang = file.lang ?? getFiletypeFromFileName(file.name);\n const hasThemes =\n this.highlighter != null && areThemesAttached(options.theme);\n const hasLangs =\n this.highlighter != null && areLanguagesAttached(this.computedLang);\n const canHighlight = !forcePlainText && hasLangs;\n\n // If we have any semblance of a highlighter with the correct theme(s)\n // attached, we can kick off some form of rendering. If we don't have\n // the correct language, then we can render plain text and after kick off\n // an async job to get the highlighted AST\n if (\n this.highlighter != null &&\n hasThemes &&\n (forceHighlight ||\n forcePlainText ||\n (!this.renderCache.highlighted && canHighlight) ||\n this.renderCache.result == null)\n ) {\n const { result, options } = this.renderFileWithHighlighter(\n file,\n this.highlighter,\n forcePlainText || !hasLangs\n );\n this.renderCache = {\n file,\n options,\n highlighted: canHighlight,\n result,\n renderRange: undefined,\n };\n }\n\n // If we get in here it means we'll have to kick off an async highlight\n // process which will involve initializing the highlighter with new themes\n // and languages\n if (!hasThemes || (!forcePlainText && !hasLangs)) {\n void this.asyncHighlight(file).then(({ result, options }) => {\n // In this case we need to force a re-render, so we can do that by\n // reaching into renderCache\n if (this.renderCache != null) {\n this.renderCache.highlighted = false;\n }\n this.onHighlightSuccess(file, result, options, !forcePlainText);\n });\n }\n }\n\n return this.renderCache.result != null\n ? this.processFileResult(\n this.renderCache.file,\n renderRange,\n this.renderCache.result\n )\n : undefined;\n }\n\n async asyncRender(\n file: FileContents,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): Promise<FileRenderResult> {\n const { result } = await this.asyncHighlight(file);\n return this.processFileResult(file, renderRange, result);\n }\n\n private async asyncHighlight(file: FileContents): Promise<RenderFileResult> {\n const lines = this.getOrCreateLineCache(file);\n const forcePlainText = isFileMassive(\n lines.length,\n this.getTokenizeMaxLength()\n );\n this.computedLang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const hasThemes =\n this.highlighter != null &&\n hasResolvedThemes(getThemes(this.options.theme));\n const hasLangs =\n forcePlainText ||\n (this.highlighter != null && areLanguagesAttached(this.computedLang));\n // If we don't have the required langs or themes, then we need to\n // initialize the highlighter to load the appropriate languages and themes\n if (this.highlighter == null || !hasThemes || !hasLangs) {\n this.highlighter = await this.initializeHighlighter();\n }\n return this.renderFileWithHighlighter(\n file,\n this.highlighter,\n forcePlainText\n );\n }\n\n private renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n forcePlainText = false\n ): RenderFileResult {\n const { options } = this.getRenderOptions(file);\n const result = renderFileWithHighlighter(file, highlighter, options, {\n forcePlainText,\n });\n return { result, options };\n }\n\n private processFileResult(\n file: FileContents,\n renderRange: RenderRange,\n { code, themeStyles, baseThemeType }: ThemedFileResult\n ): FileRenderResult {\n const totalLines = this.getLineCount(file);\n const { disableFileHeader = false } = this.options;\n const contentArray: ElementContent[] = [];\n const gutter = createGutterWrapper();\n const endLine = Math.min(\n renderRange.startingLine + renderRange.totalLines,\n totalLines\n );\n let rowCount = 0;\n\n const fileLevelAnnotations = shouldRenderFileAnnotations(renderRange)\n ? getFileAnnotations(this.lineAnnotations)\n : undefined;\n if (fileLevelAnnotations != null) {\n gutter.children.push(createGutterGap('context', 'annotation', 1));\n contentArray.push(\n createAnnotationElement({\n type: 'annotation',\n hunkIndex: FILE_ANNOTATION_HUNK_INDEX,\n lineIndex: FILE_ANNOTATION_LINE_INDEX,\n annotations: fileLevelAnnotations.map((annotation) =>\n getLineAnnotationName(annotation)\n ),\n })\n );\n rowCount++;\n }\n\n for (\n let lineIndex = renderRange.startingLine;\n lineIndex < endLine;\n lineIndex++\n ) {\n const lineNumber = lineIndex + 1;\n\n // Sparse array - directly indexed by lineIndex\n const line = code[lineIndex];\n if (line == null) {\n const message = 'FileRenderer.processFileResult: Line doesnt exist';\n console.error(message, {\n name: file.name,\n lineIndex,\n lineNumber,\n });\n throw new Error(message);\n }\n\n // Add gutter line number\n gutter.children.push(\n createGutterItem('context', lineNumber, `${lineIndex}`)\n );\n contentArray.push(line);\n rowCount++;\n\n // Check annotations using ACTUAL line number from file\n const annotations = this.lineAnnotations[lineNumber];\n if (annotations != null) {\n gutter.children.push(createGutterGap('context', 'annotation', 1));\n contentArray.push(\n createAnnotationElement({\n type: 'annotation',\n hunkIndex: 0,\n lineIndex: lineNumber,\n annotations: annotations.map((annotation) =>\n getLineAnnotationName(annotation)\n ),\n })\n );\n rowCount++;\n }\n }\n\n // Finalize: wrap gutter and content\n gutter.properties.style = `grid-row: span ${rowCount}`;\n return {\n gutterAST: gutter.children ?? [],\n contentAST: contentArray,\n preAST: this.createPreElement(totalLines),\n headerAST: !disableFileHeader ? this.renderHeader(file) : undefined,\n totalLines: totalLines,\n rowCount,\n themeStyles: themeStyles,\n baseThemeType,\n bufferBefore: renderRange.bufferBefore,\n bufferAfter: renderRange.bufferAfter,\n css: '',\n };\n }\n\n private renderHeader(file: FileContents) {\n const { headerRenderMode = 'default', stickyHeader = false } = this.options;\n return createFileHeaderElement({\n fileOrDiff: file,\n mode: headerRenderMode,\n stickyHeader,\n });\n }\n\n public renderFullHTML(result: FileRenderResult): string {\n return toHtml(this.renderFullAST(result));\n }\n\n public renderFullAST(\n result: FileRenderResult,\n children: ElementContent[] = []\n ): HASTElement {\n children.push(\n createHastElement({\n tagName: 'code',\n children: this.renderCodeAST(result),\n properties: { 'data-code': '' },\n })\n );\n return { ...result.preAST, children };\n }\n\n public renderCodeAST(result: FileRenderResult): ElementContent[] {\n const gutter = createGutterWrapper();\n gutter.children = result.gutterAST;\n gutter.properties.style = `grid-row: span ${result.rowCount}`;\n const contentColumn = createContentColumn(\n result.contentAST,\n result.rowCount\n );\n return [gutter, contentColumn];\n }\n\n public renderPartialHTML(\n children: ElementContent[],\n includeCodeNode: boolean = false\n ): string {\n if (!includeCodeNode) {\n return toHtml(children);\n }\n return toHtml(\n createHastElement({\n tagName: 'code',\n children,\n properties: { 'data-code': '' },\n })\n );\n }\n\n public async initializeHighlighter(): Promise<DiffsHighlighter> {\n this.highlighter = await getSharedHighlighter(\n getHighlighterOptions(this.computedLang, this.options)\n );\n return this.highlighter;\n }\n\n public onHighlightSuccess(\n file: FileContents,\n result: ThemedFileResult,\n options: RenderFileOptions,\n highlighted = true\n ): void {\n if (this.renderCache == null) {\n return;\n }\n const triggerRenderUpdate =\n !areFilesEqual(file, this.renderCache.file) ||\n !this.renderCache.highlighted ||\n !areFileRenderOptionsEqual(options, this.renderCache.options);\n\n this.renderCache = {\n file,\n options,\n highlighted,\n result,\n renderRange: undefined,\n };\n\n if (triggerRenderUpdate) {\n this.onRenderUpdate?.();\n }\n }\n\n private getMatchingWorkerResultCache(\n file: FileContents,\n options: RenderFileOptions\n ): RenderFileResult | undefined {\n const cache = this.workerManager?.getFileResultCache(file);\n if (cache == null || !areFileRenderOptionsEqual(options, cache.options)) {\n return undefined;\n }\n return cache;\n }\n\n private hasHighlightedRenderCache(\n file: FileContents,\n options: RenderFileOptions\n ): boolean {\n const { renderCache } = this;\n return (\n renderCache?.result != null &&\n renderCache.highlighted &&\n areFilesEqual(file, renderCache.file) &&\n areFileRenderOptionsEqual(options, renderCache.options)\n );\n }\n\n public onHighlightError(error: unknown): void {\n console.error(error);\n }\n\n private getTokenizeMaxLength(): number {\n return this.options.tokenizeMaxLength ?? DEFAULT_TOKENIZE_MAX_LENGTH;\n }\n\n private createPreElement(totalLines: number): HASTElement {\n const { disableLineNumbers = false, overflow = 'scroll' } = this.options;\n return createPreElement({\n type: 'file',\n diffIndicators: 'none',\n disableBackground: true,\n disableLineNumbers,\n overflow,\n split: false,\n totalLines,\n });\n }\n}\n\nfunction isFileMassive(lineCount: number, tokenizeMaxLength: number): boolean {\n return lineCount > tokenizeMaxLength;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"FileRenderer.js","names":[],"sources":["../../src/renderers/FileRenderer.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\nimport { toHtml } from 'hast-util-to-html';\n\nimport {\n DEFAULT_RENDER_RANGE,\n DEFAULT_THEMES,\n DEFAULT_TOKENIZE_MAX_LENGTH,\n} from '../constants';\nimport { areLanguagesAttached } from '../highlighter/languages/areLanguagesAttached';\nimport {\n getHighlighterIfLoaded,\n getSharedHighlighter,\n} from '../highlighter/shared_highlighter';\nimport { areThemesAttached } from '../highlighter/themes/areThemesAttached';\nimport { hasResolvedThemes } from '../highlighter/themes/hasResolvedThemes';\nimport type {\n BaseCodeOptions,\n DiffsHighlighter,\n DiffsTextDocument,\n FileContents,\n FileHeaderRenderMode,\n HighlightedToken,\n LineAnnotation,\n RenderedFileASTCache,\n RenderFileOptions,\n RenderFileResult,\n RenderRange,\n SupportedLanguages,\n ThemedFileResult,\n} from '../types';\nimport { areFileRenderOptionsEqual } from '../utils/areFileRenderOptionsEqual';\nimport { areFilesEqual } from '../utils/areFilesEqual';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { linesFromFileContents } from '../utils/computeFileOffsets';\nimport { createAnnotationElement } from '../utils/createAnnotationElement';\nimport { createContentColumn } from '../utils/createContentColumn';\nimport { createFileHeaderElement } from '../utils/createFileHeaderElement';\nimport { createPreElement } from '../utils/createPreElement';\nimport { getFiletypeFromFileName } from '../utils/getFiletypeFromFileName';\nimport { getHighlighterOptions } from '../utils/getHighlighterOptions';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\nimport { getThemes } from '../utils/getThemes';\nimport {\n createGutterGap,\n createGutterItem,\n createGutterWrapper,\n createHastElement,\n} from '../utils/hast_utils';\nimport {\n FILE_ANNOTATION_HUNK_INDEX,\n FILE_ANNOTATION_LINE_INDEX,\n getFileAnnotations,\n shouldRenderFileAnnotations,\n} from '../utils/includesFileAnnotations';\nimport { isFilePlainText } from '../utils/isFilePlainText';\nimport { renderFileWithHighlighter } from '../utils/renderFileWithHighlighter';\nimport { shouldUseTokenTransformer } from '../utils/shouldUseTokenTransformer';\nimport type { WorkerPoolManager } from '../worker';\n\ntype AnnotationLineMap<LAnnotation> = Record<\n number,\n LineAnnotation<LAnnotation>[] | undefined\n>;\n\ninterface GetRenderOptionsReturn {\n options: RenderFileOptions;\n forceHighlight: boolean;\n}\n\nexport interface FileRenderResult {\n gutterAST: ElementContent[];\n contentAST: ElementContent[];\n preAST: HASTElement;\n headerAST: HASTElement | undefined;\n css: string;\n totalLines: number;\n themeStyles: string;\n baseThemeType: 'light' | 'dark' | undefined;\n rowCount: number;\n bufferBefore: number;\n bufferAfter: number;\n}\n\ninterface LineCache {\n cacheKey: string | undefined;\n lines: string[];\n}\n\nexport interface FileRendererOptions extends BaseCodeOptions {\n headerRenderMode?: FileHeaderRenderMode;\n}\n\nlet instanceId = -1;\n\nexport class FileRenderer<LAnnotation = undefined> {\n readonly __id: string = `file-renderer:${++instanceId}`;\n\n private highlighter: DiffsHighlighter | undefined;\n private renderCache: RenderedFileASTCache | undefined;\n private computedLang: SupportedLanguages = 'text';\n private lineAnnotations: AnnotationLineMap<LAnnotation> = {};\n private lineCache: LineCache | undefined;\n private textDoucmentCache = new WeakMap<FileContents, DiffsTextDocument>();\n\n constructor(\n public options: FileRendererOptions = { theme: DEFAULT_THEMES },\n private onRenderUpdate?: () => unknown,\n private workerManager?: WorkerPoolManager | undefined\n ) {\n if (workerManager?.isWorkingPool() !== true) {\n this.highlighter = areThemesAttached(options.theme ?? DEFAULT_THEMES)\n ? getHighlighterIfLoaded()\n : undefined;\n }\n }\n\n public setOptions(options: FileRendererOptions): void {\n this.options = options;\n }\n\n public mergeOptions(options: Partial<FileRendererOptions>): void {\n this.options = { ...this.options, ...options };\n }\n\n public setLineAnnotations(\n lineAnnotations: LineAnnotation<LAnnotation>[]\n ): void {\n this.lineAnnotations = {};\n for (const annotation of lineAnnotations) {\n const arr = this.lineAnnotations[annotation.lineNumber] ?? [];\n this.lineAnnotations[annotation.lineNumber] = arr;\n arr.push(annotation);\n }\n }\n\n public cleanUp(): void {\n this.recycle();\n this.workerManager = undefined;\n this.onRenderUpdate = undefined;\n }\n\n public recycle(): void {\n this.clearRenderCache();\n this.highlighter = undefined;\n this.workerManager?.cleanUpTasks(this);\n this.lineCache = undefined;\n }\n\n public clearRenderCache(): void {\n const renderCache = this.renderCache;\n this.renderCache = undefined;\n if (\n renderCache != null &&\n renderCache.isDirty === true &&\n renderCache.file.cacheKey != null\n ) {\n // The render cache has been updated by the editor, let's purge it\n // from the worker manager cache.\n this.workerManager?.evictFileFromCache(renderCache.file.cacheKey);\n }\n }\n\n public hydrate(file: FileContents): void {\n const { options } = this.getRenderOptions(file);\n const lines = this.getOrCreateLineCache(file);\n const massiveFile = isFileMassive(\n lines.length,\n this.getTokenizeMaxLength()\n );\n let cache = this.workerManager?.getFileResultCache(file);\n if (cache != null && !areFileRenderOptionsEqual(options, cache.options)) {\n cache = undefined;\n }\n this.renderCache ??= {\n file,\n options,\n highlighted: !massiveFile && !isFilePlainText(file),\n result: massiveFile ? undefined : cache?.result,\n // FIXME(amadeus): Add support for renderRanges\n renderRange: undefined,\n };\n if (this.workerManager?.isWorkingPool() === true) {\n if (this.renderCache.result == null && !massiveFile) {\n // We should only kick off a preload of the AST if we have a WorkerPool\n this.workerManager.highlightFileAST(this, file);\n }\n }\n // Lets attempt to get the highlighter/languages ready immediately\n else if (this.highlighter == null) {\n this.computedLang = file.lang ?? getFiletypeFromFileName(file.name);\n void this.initializeHighlighter();\n }\n }\n\n private getRenderOptions(file: FileContents): GetRenderOptionsReturn {\n const options: RenderFileOptions = (() => {\n if (this.workerManager?.isWorkingPool() === true) {\n return this.workerManager.getFileRenderOptions();\n }\n const { theme = DEFAULT_THEMES, tokenizeMaxLineLength = 1000 } =\n this.options;\n return {\n theme,\n useTokenTransformer: shouldUseTokenTransformer(this.options),\n tokenizeMaxLineLength,\n };\n })();\n const { renderCache } = this;\n if (renderCache?.result == null) {\n return { options, forceHighlight: true };\n }\n if (\n !areFilesEqual(file, renderCache.file) ||\n !areFileRenderOptionsEqual(options, renderCache.options)\n ) {\n return { options, forceHighlight: true };\n }\n return { options, forceHighlight: false };\n }\n\n public getOrCreateLineCache(file: FileContents): string[] {\n // Uncached files will get split every time, not the greatest experience\n // tbh... but something people should try to optimize away\n if (file.cacheKey == null) {\n this.lineCache = undefined;\n return linesFromFileContents(file.contents);\n }\n\n let { lineCache } = this;\n if (lineCache == null || lineCache.cacheKey !== file.cacheKey) {\n lineCache = {\n cacheKey: file.cacheKey,\n lines: linesFromFileContents(file.contents),\n };\n }\n this.lineCache = lineCache;\n return lineCache.lines;\n }\n\n // when a emitLineCountChange is called,\n // calculate the line count using the cached text document\n public getLineCount(file: FileContents): number {\n return (\n this.textDoucmentCache.get(file)?.lineCount ??\n this.getOrCreateLineCache(file).length\n );\n }\n\n public updateRenderCache(\n dirtyLines: Map<number, Array<HighlightedToken>>,\n themeType: 'dark' | 'light'\n ): void {\n if (this.renderCache == null) {\n return;\n }\n const { result } = this.renderCache;\n if (result == null) {\n return;\n }\n for (const [line, tokens] of dirtyLines) {\n result.code[line] = {\n type: 'element',\n tagName: 'div',\n properties: {\n 'data-line': line + 1,\n 'data-line-type': 'context',\n 'data-line-index': line,\n },\n children: tokens.map(([char, fg, text]) => {\n if (char === 0 && fg === '') {\n if (text === '') {\n return {\n type: 'element',\n tagName: 'br',\n properties: {},\n children: [],\n };\n }\n return { type: 'text', value: text };\n }\n return {\n type: 'element',\n tagName: 'span',\n properties: {\n 'data-char': char,\n style: `--diffs-token-${themeType}:${fg};`,\n },\n children: [{ type: 'text', value: text }],\n };\n }),\n };\n }\n\n result.baseThemeType = themeType;\n this.renderCache.isDirty = true;\n }\n\n // normally triggered by the editor when the document line count changes\n public applyDocumentChange(textDocument: DiffsTextDocument): void {\n if (this.renderCache == null) {\n return undefined;\n }\n const { file, result } = this.renderCache;\n if (result != null && result.code.length !== textDocument.lineCount) {\n result.code.length = Math.min(result.code.length, textDocument.lineCount);\n for (let i = result.code.length; i < textDocument.lineCount; i++) {\n // prefill lines with plain text content\n result.code.push({\n type: 'element',\n tagName: 'div',\n properties: {\n 'data-line': i + 1,\n 'data-line-type': 'context',\n 'data-line-index': i,\n },\n children: [\n {\n type: 'element',\n tagName: 'span',\n properties: {\n 'data-char': 0,\n },\n children: [\n {\n type: 'text',\n value: textDocument.getLineText(i),\n },\n ],\n },\n ],\n });\n }\n this.renderCache.isDirty = true;\n }\n this.textDoucmentCache.set(file, textDocument);\n }\n\n public renderFile(\n file: FileContents | undefined = this.renderCache?.file,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): FileRenderResult | undefined {\n if (file == null) {\n return undefined;\n }\n let { options, forceHighlight } = this.getRenderOptions(file);\n const cache = this.getMatchingWorkerResultCache(file, options);\n if (cache != null && !this.hasHighlightedRenderCache(file, options)) {\n this.renderCache = {\n file,\n highlighted: true,\n renderRange: undefined,\n ...cache,\n };\n forceHighlight = false;\n }\n this.renderCache ??= {\n file,\n highlighted: false,\n options,\n result: undefined,\n renderRange: undefined,\n };\n const lines = this.getOrCreateLineCache(file);\n const hasContent = file.contents.length > 0;\n const forcePlainText =\n !hasContent ||\n isFilePlainText(file) ||\n isFileMassive(lines.length, this.getTokenizeMaxLength());\n const newContent = !areFilesEqual(file, this.renderCache.file);\n const newRenderRange = !areRenderRangesEqual(\n this.renderCache.renderRange,\n renderRange\n );\n if (this.workerManager?.isWorkingPool() === true) {\n // Cache invalidation based on renderRange comparison\n if (\n forcePlainText ||\n this.renderCache.result == null ||\n (!this.renderCache.highlighted && (newContent || newRenderRange))\n ) {\n this.renderCache.file = file;\n this.renderCache.options = options;\n this.renderCache.highlighted = false;\n if (\n this.renderCache.result == null ||\n newContent ||\n newRenderRange ||\n forceHighlight\n ) {\n this.renderCache.result = this.workerManager.getPlainFileAST(\n file,\n renderRange.startingLine,\n renderRange.totalLines,\n lines\n );\n }\n this.renderCache.renderRange = renderRange;\n }\n\n if (\n !forcePlainText &&\n hasContent &&\n (!this.renderCache.highlighted || forceHighlight)\n ) {\n this.workerManager.highlightFileAST(this, file);\n }\n } else {\n this.computedLang = file.lang ?? getFiletypeFromFileName(file.name);\n const hasThemes =\n this.highlighter != null && areThemesAttached(options.theme);\n const hasLangs =\n this.highlighter != null && areLanguagesAttached(this.computedLang);\n const canHighlight = !forcePlainText && hasLangs;\n\n // If we have any semblance of a highlighter with the correct theme(s)\n // attached, we can kick off some form of rendering. If we don't have\n // the correct language, then we can render plain text and after kick off\n // an async job to get the highlighted AST\n if (\n this.highlighter != null &&\n hasThemes &&\n (forceHighlight ||\n forcePlainText ||\n (!this.renderCache.highlighted && canHighlight) ||\n this.renderCache.result == null)\n ) {\n const { result, options } = this.renderFileWithHighlighter(\n file,\n this.highlighter,\n forcePlainText || !hasLangs\n );\n this.renderCache = {\n file,\n options,\n highlighted: canHighlight,\n result,\n renderRange: undefined,\n };\n }\n\n // If we get in here it means we'll have to kick off an async highlight\n // process which will involve initializing the highlighter with new themes\n // and languages\n if (!hasThemes || (!forcePlainText && !hasLangs)) {\n void this.asyncHighlight(file).then(({ result, options }) => {\n // In this case we need to force a re-render, so we can do that by\n // reaching into renderCache\n if (this.renderCache != null) {\n this.renderCache.highlighted = false;\n }\n this.onHighlightSuccess(file, result, options, !forcePlainText);\n });\n }\n }\n\n return this.renderCache.result != null\n ? this.processFileResult(\n this.renderCache.file,\n renderRange,\n this.renderCache.result\n )\n : undefined;\n }\n\n async asyncRender(\n file: FileContents,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): Promise<FileRenderResult> {\n const { result } = await this.asyncHighlight(file);\n return this.processFileResult(file, renderRange, result);\n }\n\n private async asyncHighlight(file: FileContents): Promise<RenderFileResult> {\n const lines = this.getOrCreateLineCache(file);\n const forcePlainText = isFileMassive(\n lines.length,\n this.getTokenizeMaxLength()\n );\n this.computedLang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const hasThemes =\n this.highlighter != null &&\n hasResolvedThemes(getThemes(this.options.theme));\n const hasLangs =\n forcePlainText ||\n (this.highlighter != null && areLanguagesAttached(this.computedLang));\n // If we don't have the required langs or themes, then we need to\n // initialize the highlighter to load the appropriate languages and themes\n if (this.highlighter == null || !hasThemes || !hasLangs) {\n this.highlighter = await this.initializeHighlighter();\n }\n return this.renderFileWithHighlighter(\n file,\n this.highlighter,\n forcePlainText\n );\n }\n\n private renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n forcePlainText = false\n ): RenderFileResult {\n const { options } = this.getRenderOptions(file);\n const result = renderFileWithHighlighter(file, highlighter, options, {\n forcePlainText,\n });\n return { result, options };\n }\n\n private processFileResult(\n file: FileContents,\n renderRange: RenderRange,\n { code, themeStyles, baseThemeType }: ThemedFileResult\n ): FileRenderResult {\n const totalLines = this.getLineCount(file);\n const { disableFileHeader = false } = this.options;\n const contentArray: ElementContent[] = [];\n const gutter = createGutterWrapper();\n const endLine = Math.min(\n renderRange.startingLine + renderRange.totalLines,\n totalLines\n );\n let rowCount = 0;\n\n const fileLevelAnnotations = shouldRenderFileAnnotations(renderRange)\n ? getFileAnnotations(this.lineAnnotations)\n : undefined;\n if (fileLevelAnnotations != null) {\n gutter.children.push(createGutterGap('context', 'annotation', 1));\n contentArray.push(\n createAnnotationElement({\n type: 'annotation',\n hunkIndex: FILE_ANNOTATION_HUNK_INDEX,\n lineIndex: FILE_ANNOTATION_LINE_INDEX,\n annotations: fileLevelAnnotations.map((annotation) =>\n getLineAnnotationName(annotation)\n ),\n })\n );\n rowCount++;\n }\n\n for (\n let lineIndex = renderRange.startingLine;\n lineIndex < endLine;\n lineIndex++\n ) {\n const lineNumber = lineIndex + 1;\n\n // Sparse array - directly indexed by lineIndex\n const line = code[lineIndex];\n if (line == null) {\n const message = 'FileRenderer.processFileResult: Line doesnt exist';\n console.error(message, {\n name: file.name,\n lineIndex,\n lineNumber,\n });\n throw new Error(message);\n }\n\n // Add gutter line number\n gutter.children.push(\n createGutterItem('context', lineNumber, `${lineIndex}`)\n );\n contentArray.push(line);\n rowCount++;\n\n // Check annotations using ACTUAL line number from file\n const annotations = this.lineAnnotations[lineNumber];\n if (annotations != null) {\n gutter.children.push(createGutterGap('context', 'annotation', 1));\n contentArray.push(\n createAnnotationElement({\n type: 'annotation',\n hunkIndex: 0,\n lineIndex: lineNumber,\n annotations: annotations.map((annotation) =>\n getLineAnnotationName(annotation)\n ),\n })\n );\n rowCount++;\n }\n }\n\n // Finalize: wrap gutter and content\n gutter.properties.style = `grid-row: span ${rowCount}`;\n return {\n gutterAST: gutter.children ?? [],\n contentAST: contentArray,\n preAST: this.createPreElement(totalLines),\n headerAST: !disableFileHeader ? this.renderHeader(file) : undefined,\n totalLines: totalLines,\n rowCount,\n themeStyles: themeStyles,\n baseThemeType,\n bufferBefore: renderRange.bufferBefore,\n bufferAfter: renderRange.bufferAfter,\n css: '',\n };\n }\n\n private renderHeader(file: FileContents) {\n const { headerRenderMode = 'default', stickyHeader = false } = this.options;\n return createFileHeaderElement({\n fileOrDiff: file,\n mode: headerRenderMode,\n stickyHeader,\n });\n }\n\n public renderFullHTML(result: FileRenderResult): string {\n return toHtml(this.renderFullAST(result));\n }\n\n public renderFullAST(\n result: FileRenderResult,\n children: ElementContent[] = []\n ): HASTElement {\n children.push(\n createHastElement({\n tagName: 'code',\n children: this.renderCodeAST(result),\n properties: { 'data-code': '' },\n })\n );\n return { ...result.preAST, children };\n }\n\n public renderCodeAST(result: FileRenderResult): ElementContent[] {\n const gutter = createGutterWrapper();\n gutter.children = result.gutterAST;\n gutter.properties.style = `grid-row: span ${result.rowCount}`;\n const contentColumn = createContentColumn(\n result.contentAST,\n result.rowCount\n );\n return [gutter, contentColumn];\n }\n\n public renderPartialHTML(\n children: ElementContent[],\n includeCodeNode: boolean = false\n ): string {\n if (!includeCodeNode) {\n return toHtml(children);\n }\n return toHtml(\n createHastElement({\n tagName: 'code',\n children,\n properties: { 'data-code': '' },\n })\n );\n }\n\n public async initializeHighlighter(): Promise<DiffsHighlighter> {\n this.highlighter = await getSharedHighlighter(\n getHighlighterOptions(this.computedLang, this.options)\n );\n return this.highlighter;\n }\n\n public onHighlightSuccess(\n file: FileContents,\n result: ThemedFileResult,\n options: RenderFileOptions,\n highlighted = true\n ): void {\n if (this.renderCache == null) {\n return;\n }\n const triggerRenderUpdate =\n !areFilesEqual(file, this.renderCache.file) ||\n !this.renderCache.highlighted ||\n !areFileRenderOptionsEqual(options, this.renderCache.options);\n\n this.renderCache = {\n file,\n options,\n highlighted,\n result,\n renderRange: undefined,\n };\n\n if (triggerRenderUpdate) {\n this.onRenderUpdate?.();\n }\n }\n\n private getMatchingWorkerResultCache(\n file: FileContents,\n options: RenderFileOptions\n ): RenderFileResult | undefined {\n const cache = this.workerManager?.getFileResultCache(file);\n if (cache == null || !areFileRenderOptionsEqual(options, cache.options)) {\n return undefined;\n }\n return cache;\n }\n\n private hasHighlightedRenderCache(\n file: FileContents,\n options: RenderFileOptions\n ): boolean {\n const { renderCache } = this;\n return (\n renderCache?.result != null &&\n renderCache.highlighted &&\n areFilesEqual(file, renderCache.file) &&\n areFileRenderOptionsEqual(options, renderCache.options)\n );\n }\n\n public onHighlightError(error: unknown): void {\n console.error(error);\n }\n\n private getTokenizeMaxLength(): number {\n return this.options.tokenizeMaxLength ?? DEFAULT_TOKENIZE_MAX_LENGTH;\n }\n\n private createPreElement(totalLines: number): HASTElement {\n const { disableLineNumbers = false, overflow = 'scroll' } = this.options;\n return createPreElement({\n type: 'file',\n diffIndicators: 'none',\n disableBackground: true,\n disableLineNumbers,\n overflow,\n split: false,\n totalLines,\n });\n }\n}\n\nfunction isFileMassive(lineCount: number, tokenizeMaxLength: number): boolean {\n return lineCount > tokenizeMaxLength;\n}\n"],"mappings":"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"}
@@ -1,9 +1,8 @@
1
+ import { Element } from "../node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.js";
1
2
  import { FileDiffMetadata, MergeConflictMarkerRow, RenderRange } from "../types.js";
2
3
  import { WorkerPoolManager } from "../worker/WorkerPoolManager.js";
3
- import "../worker/index.js";
4
4
  import { DiffHunksRenderer, DiffHunksRendererOptions, DiffHunksRendererOptionsWithDefaults, HunksRenderResult, LineDecoration, RenderedLineContext, SplitLineDecorationProps, UnifiedInjectedRowPlacement, UnifiedLineDecorationProps } from "./DiffHunksRenderer.js";
5
5
  import { MergeConflictDiffAction } from "../utils/parseMergeConflictDiffFromFile.js";
6
- import { Element } from "hast";
7
6
 
8
7
  //#region src/renderers/UnresolvedFileHunksRenderer.d.ts
9
8
  interface BaseUnresolvedOptionsWithDefaults extends DiffHunksRendererOptionsWithDefaults {
@@ -1 +1 @@
1
- {"version":3,"file":"UnresolvedFileHunksRenderer.d.ts","names":["Element","HASTElement","FileDiffMetadata","MergeConflictMarkerRow","RenderRange","MergeConflictDiffAction","WorkerPoolManager","DiffHunksRenderer","DiffHunksRendererOptions","DiffHunksRendererOptionsWithDefaults","HunksRenderResult","LineDecoration","RenderedLineContext","SplitLineDecorationProps","UnifiedInjectedRowPlacement","UnifiedLineDecorationProps","BaseUnresolvedOptionsWithDefaults","MergeConflictActionsType","UnresolvedFileHunksRendererOptions","UnresolvedFileHunksRenderer","LAnnotation","Promise","type","lineType","side"],"sources":["../../src/renderers/UnresolvedFileHunksRenderer.d.ts"],"sourcesContent":["import type { Element as HASTElement } from 'hast';\nimport type { FileDiffMetadata, MergeConflictMarkerRow, RenderRange } from '../types';\nimport { type MergeConflictDiffAction } from '../utils/parseMergeConflictDiffFromFile';\nimport type { WorkerPoolManager } from '../worker';\nimport { DiffHunksRenderer, type DiffHunksRendererOptions, type DiffHunksRendererOptionsWithDefaults, type HunksRenderResult, type LineDecoration, type RenderedLineContext, type SplitLineDecorationProps, type UnifiedInjectedRowPlacement, type UnifiedLineDecorationProps } from './DiffHunksRenderer';\ninterface BaseUnresolvedOptionsWithDefaults extends DiffHunksRendererOptionsWithDefaults {\n mergeConflictActionsType: MergeConflictActionsType;\n}\ntype MergeConflictActionsType = 'none' | 'default' | 'custom';\nexport interface UnresolvedFileHunksRendererOptions extends DiffHunksRendererOptions {\n mergeConflictActionsType?: MergeConflictActionsType;\n}\nexport declare class UnresolvedFileHunksRenderer<LAnnotation = undefined> extends DiffHunksRenderer<LAnnotation> {\n private pendingConflictActions;\n private pendingMarkerRows;\n private injectedRows;\n options: UnresolvedFileHunksRendererOptions;\n constructor(options?: UnresolvedFileHunksRendererOptions, onRenderUpdate?: () => unknown, workerManager?: WorkerPoolManager | undefined);\n setConflictState(conflictActions: (MergeConflictDiffAction | undefined)[], markerRows: MergeConflictMarkerRow[], diff: FileDiffMetadata): void;\n private syncInjectedRows;\n private addInjectedRow;\n renderDiff(diff?: FileDiffMetadata | undefined, renderRange?: RenderRange): HunksRenderResult | undefined;\n asyncRender(diff: FileDiffMetadata, renderRange?: RenderRange): Promise<HunksRenderResult>;\n protected createPreElement(split: boolean, totalLines: number): HASTElement;\n protected getUnifiedLineDecoration({ type, lineType }: UnifiedLineDecorationProps): LineDecoration;\n protected getSplitLineDecoration({ side, type }: SplitLineDecorationProps): LineDecoration;\n protected getUnifiedInjectedRowsForLine: (ctx: RenderedLineContext) => UnifiedInjectedRowPlacement | undefined;\n protected getOptionsWithDefaults(): BaseUnresolvedOptionsWithDefaults;\n}\nexport {};\n//# sourceMappingURL=UnresolvedFileHunksRenderer.d.ts.map"],"mappings":";;;;;;;;UAKUgB,iCAAAA,SAA0CP;4BACtBQ;;AAF6Q,KAItSA,wBAAAA,GAHKD,MAAAA,GAAiC,SAAA,GACbC,QAAAA;AAEzBA,UACYC,kCAAAA,SAA2CV,wBAD/B,CAAA;EACZU,wBAAAA,CAAAA,EACcD,wBAAAA;AAE/B;AAAoGG,cAA/ED,2BAA+EC,CAAAA,cAAAA,SAAAA,CAAAA,SAAlBb,iBAAkBa,CAAAA,WAAAA,CAAAA,CAAAA;EAIvFF,QAAAA,sBAAAA;EACaA,QAAAA,iBAAAA;EAAoFZ,QAAAA,YAAAA;EACvED,OAAAA,EAF1Ba,kCAE0Bb;EAAoDF,WAAAA,CAAAA,OAAAA,CAAAA,EADjEe,kCACiEf,EAAAA,cAAAA,CAAAA,EAAAA,GAAAA,GAAAA,OAAAA,EAAAA,aAAAA,CAAAA,EADmBG,iBACnBH,GAAAA,SAAAA;EAAgCD,gBAAAA,CAAAA,eAAAA,EAAAA,CAApFG,uBAAoFH,GAAAA,SAAAA,CAAAA,EAAAA,EAAAA,UAAAA,EAAhCC,sBAAgCD,EAAAA,EAAAA,IAAAA,EAAAA,gBAAAA,CAAAA,EAAAA,IAAAA;EAGrGA,QAAAA,gBAAAA;EAA4CE,QAAAA,cAAAA;EAAcM,UAAAA,CAAAA,IAAAA,CAAAA,EAA1DR,gBAA0DQ,GAAAA,SAAAA,EAAAA,WAAAA,CAAAA,EAAdN,WAAcM,CAAAA,EAAAA,iBAAAA,GAAAA,SAAAA;EAC1DR,WAAAA,CAAAA,IAAAA,EAAAA,gBAAAA,EAAAA,WAAAA,CAAAA,EAAgCE,WAAhCF,CAAAA,EAA8CmB,OAA9CnB,CAAsDQ,iBAAtDR,CAAAA;EAAgCE,UAAAA,gBAAAA,CAAAA,KAAAA,EAAAA,OAAAA,EAAAA,UAAAA,EAAAA,MAAAA,CAAAA,EACcH,OADdG;EAAsBM,UAAAA,wBAAAA,CAAAA;IAAAA,IAAAA;IAAAA;EAAAA,CAAAA,EAEjBK,0BAFiBL,CAAAA,EAEYC,cAFZD;EAARW,UAAAA,sBAAAA,CAAAA;IAAAA,IAAAA;IAAAA;EAAAA,CAAAA,EAGfR,wBAHeQ,CAAAA,EAGYV,cAHZU;EACApB,UAAAA,6BAAAA,EAAAA,CAAAA,GAAAA,EAGjBW,mBAHiBX,EAAAA,GAGOa,2BAHPb,GAAAA,SAAAA;EAC3BqB,UAAAA,sBAAAA,CAAAA,CAAAA,EAGDN,iCAHCM"}
1
+ {"version":3,"file":"UnresolvedFileHunksRenderer.d.ts","names":[],"sources":["../../src/renderers/UnresolvedFileHunksRenderer.ts"],"mappings":";;;;;;;UA8DU,iCAAA,SAA0C,oCAAoC;EACtF,wBAAA,EAA0B,wBAAA;AAAA;AAAA,KAGvB,wBAAA;AAAA,UAEY,kCAAA,SAA2C,wBAAwB;EAClF,wBAAA,GAA2B,wBAAA;AAAA;AAAA,cAGhB,2BAAA,kCAEH,iBAAA,CAAkB,WAAA;EAAA,QAClB,sBAAA;EAAA,QACA,iBAAA;EAAA,QACA,YAAA;EACQ,OAAA,EAAS,kCAAA;EAEzB,WAAA,CACE,OAAA,GAAS,kCAAA,EAGT,cAAA,kBACA,aAAA,GAAgB,iBAAA;EAWX,gBAAA,CACL,eAAA,GAAkB,uBAAA,iBAClB,UAAA,EAAY,sBAAA,IACZ,IAAA,EAAM,gBAAA;EAAA,QAOA,gBAAA;EAAA,QA0BA,cAAA;EAUQ,UAAA,CACd,IAAA,GAAO,gBAAA,cACP,WAAA,GAAa,WAAA,GACZ,iBAAA;EAWmB,WAAA,CACpB,IAAA,EAAM,gBAAA,EACN,WAAA,GAAa,WAAA,GACZ,OAAA,CAAQ,iBAAA;EAAA,UASQ,gBAAA,CACjB,KAAA,WACA,UAAA,WACC,OAAA;EAAA,UAMgB,wBAAA;IACjB,IAAA;IACA;EAAA,GACC,0BAAA,GAA6B,cAAA;EAAA,UAiBb,sBAAA;IACjB,IAAA;IACA;EAAA,GACC,wBAAA,GAA2B,cAAA;EAAA,UAiBX,6BAAA,GAA6B,GAAA,EACzC,mBAAA,KACJ,2BAAA;EAAA,UAgCgB,sBAAA,IAA0B,iCAAA;AAAA"}
@@ -3,7 +3,6 @@ import { createGutterGap, createHastElement, createTextNodeElement } from "../ut
3
3
  import { DiffHunksRenderer } from "./DiffHunksRenderer.js";
4
4
  import { getMergeConflictActionSlotName } from "../utils/getMergeConflictActionSlotName.js";
5
5
  import { getMergeConflictActionAnchor } from "../utils/parseMergeConflictDiffFromFile.js";
6
-
7
6
  //#region src/renderers/UnresolvedFileHunksRenderer.ts
8
7
  var UnresolvedFileHunksRenderer = class extends DiffHunksRenderer {
9
8
  pendingConflictActions = [];
@@ -194,7 +193,7 @@ function createMergeConflictActionSeparator() {
194
193
  children: [createTextNodeElement("|")]
195
194
  });
196
195
  }
197
-
198
196
  //#endregion
199
197
  export { UnresolvedFileHunksRenderer };
198
+
200
199
  //# sourceMappingURL=UnresolvedFileHunksRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UnresolvedFileHunksRenderer.js","names":["row: MergeConflictInjectedRowData","before: InjectedRow[]","after: InjectedRow[]","contentChildren: HASTElement[]"],"sources":["../../src/renderers/UnresolvedFileHunksRenderer.ts"],"sourcesContent":["import type { Element as HASTElement, Properties } from 'hast';\n\nimport { DEFAULT_RENDER_RANGE, DEFAULT_THEMES } from '../constants';\nimport type {\n FileDiffMetadata,\n MergeConflictMarkerRow,\n MergeConflictResolution,\n RenderRange,\n} from '../types';\nimport { getMergeConflictActionSlotName } from '../utils/getMergeConflictActionSlotName';\nimport {\n createGutterGap,\n createHastElement,\n createTextNodeElement,\n} from '../utils/hast_utils';\nimport {\n getMergeConflictActionAnchor,\n type MergeConflictDiffAction,\n} from '../utils/parseMergeConflictDiffFromFile';\nimport type { WorkerPoolManager } from '../worker';\nimport {\n DiffHunksRenderer,\n type DiffHunksRendererOptions,\n type DiffHunksRendererOptionsWithDefaults,\n type HunksRenderResult,\n type InjectedRow,\n type LineDecoration,\n type RenderedLineContext,\n type SplitLineDecorationProps,\n type UnifiedInjectedRowPlacement,\n type UnifiedLineDecorationProps,\n} from './DiffHunksRenderer';\n\ntype MergeConflictMarkerType =\n | 'marker-start'\n | 'marker-base'\n | 'marker-separator'\n | 'marker-end'\n | 'current'\n | 'incoming';\n\ninterface MergeConflictActionRowData {\n hunkIndex: number;\n lineIndex: number;\n conflictIndex: number;\n}\n\ninterface MergeConflictMarkerInjectedRow extends MergeConflictMarkerRow {\n type: Extract<\n MergeConflictMarkerRow['type'],\n 'marker-start' | 'marker-base' | 'marker-separator' | 'marker-end'\n >;\n lineText: string;\n lineIndex: number;\n}\n\n// NOTE(amadeus): Don't love this, should probably rework into an\n// interface/extender\ntype MergeConflictInjectedRowData =\n | ({ type: 'actions' } & MergeConflictActionRowData)\n | MergeConflictMarkerInjectedRow;\n\ninterface BaseUnresolvedOptionsWithDefaults extends DiffHunksRendererOptionsWithDefaults {\n mergeConflictActionsType: MergeConflictActionsType;\n}\n\ntype MergeConflictActionsType = 'none' | 'default' | 'custom';\n\nexport interface UnresolvedFileHunksRendererOptions extends DiffHunksRendererOptions {\n mergeConflictActionsType?: MergeConflictActionsType;\n}\n\nexport class UnresolvedFileHunksRenderer<\n LAnnotation = undefined,\n> extends DiffHunksRenderer<LAnnotation> {\n private pendingConflictActions: (MergeConflictDiffAction | undefined)[] = [];\n private pendingMarkerRows: MergeConflictMarkerRow[] = [];\n private injectedRows = new Map<string, MergeConflictInjectedRowData[]>();\n public override options: UnresolvedFileHunksRendererOptions;\n\n constructor(\n options: UnresolvedFileHunksRendererOptions = {\n theme: DEFAULT_THEMES,\n },\n onRenderUpdate?: () => unknown,\n workerManager?: WorkerPoolManager | undefined\n ) {\n super(undefined, onRenderUpdate, workerManager);\n this.options = options;\n }\n\n // SELF_REVIEW: I don't love how this is hooked up with `renderDiff` right\n // now, so we definitely need to figure out what the fuck we are gonna do\n // about it...\n // I think at the very least we should keep it like annotations, and just\n // sorta assume there's a disconnect there\n public setConflictState(\n conflictActions: (MergeConflictDiffAction | undefined)[],\n markerRows: MergeConflictMarkerRow[],\n diff: FileDiffMetadata\n ): void {\n this.pendingConflictActions = conflictActions;\n this.pendingMarkerRows = markerRows;\n this.syncInjectedRows(conflictActions, markerRows, diff);\n }\n\n private syncInjectedRows(\n conflictActions: (MergeConflictDiffAction | undefined)[],\n markerRows: MergeConflictMarkerRow[],\n diff: FileDiffMetadata\n ): void {\n this.injectedRows.clear();\n for (const action of conflictActions) {\n const anchor =\n action != null ? getMergeConflictActionAnchor(action, diff) : undefined;\n if (action == null || anchor == null) {\n continue;\n }\n const row: MergeConflictInjectedRowData = {\n type: 'actions',\n hunkIndex: anchor.hunkIndex,\n lineIndex: anchor.lineIndex,\n conflictIndex: action.conflictIndex,\n };\n this.addInjectedRow(row);\n }\n\n for (const row of markerRows) {\n this.addInjectedRow(row);\n }\n }\n\n private addInjectedRow(row: MergeConflictInjectedRowData): void {\n const key = `${row.hunkIndex}:${row.lineIndex}`;\n const rows = this.injectedRows.get(key);\n if (rows == null) {\n this.injectedRows.set(key, [row]);\n } else {\n rows.push(row);\n }\n }\n\n public override renderDiff(\n diff?: FileDiffMetadata | undefined,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): HunksRenderResult | undefined {\n if (diff != null) {\n this.syncInjectedRows(\n this.pendingConflictActions,\n this.pendingMarkerRows,\n diff\n );\n }\n return super.renderDiff(diff, renderRange);\n }\n\n public override async asyncRender(\n diff: FileDiffMetadata,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): Promise<HunksRenderResult> {\n this.syncInjectedRows(\n this.pendingConflictActions,\n this.pendingMarkerRows,\n diff\n );\n return super.asyncRender(diff, renderRange);\n }\n\n protected override createPreElement(\n split: boolean,\n totalLines: number\n ): HASTElement {\n return super.createPreElement(split, totalLines, {\n 'data-has-merge-conflict': '',\n });\n }\n\n protected override getUnifiedLineDecoration({\n type,\n lineType,\n }: UnifiedLineDecorationProps): LineDecoration {\n const mergeConflictType =\n type === 'change'\n ? lineType === 'change-deletion'\n ? 'current'\n : 'incoming'\n : undefined;\n return {\n gutterLineType: type === 'change' ? 'context' : lineType,\n gutterProperties: getMergeConflictGutterProperties(mergeConflictType),\n contentProperties: getMergeConflictContentProperties(\n type,\n mergeConflictType\n ),\n };\n }\n\n protected override getSplitLineDecoration({\n side,\n type,\n }: SplitLineDecorationProps): LineDecoration {\n const mergeConflictType =\n type === 'change'\n ? side === 'deletions'\n ? 'current'\n : 'incoming'\n : undefined;\n return {\n gutterLineType: type === 'change' ? 'context' : type,\n gutterProperties: getMergeConflictGutterProperties(mergeConflictType),\n contentProperties: getMergeConflictContentProperties(\n type,\n mergeConflictType\n ),\n };\n }\n\n protected override getUnifiedInjectedRowsForLine = (\n ctx: RenderedLineContext\n ): UnifiedInjectedRowPlacement | undefined => {\n const rows = this.injectedRows.get(`${ctx.hunkIndex}:${ctx.lineIndex}`);\n if (rows == null || rows.length === 0) {\n return undefined;\n }\n const { mergeConflictActionsType } = this.getOptionsWithDefaults();\n const before: InjectedRow[] = [];\n const after: InjectedRow[] = [];\n for (const row of rows) {\n if (row.type === 'actions') {\n before.push({\n content: createMergeConflictActionsRowElement({\n row,\n includeDefaultActions: mergeConflictActionsType === 'default',\n includeSlot: true,\n }),\n gutter: createMergeConflictGutterGap('action'),\n });\n continue;\n }\n const target = row.type === 'marker-end' ? after : before;\n target.push({\n content: createMergeConflictMarkerRowElement(row),\n gutter: createMergeConflictGutterGap('marker', row.type),\n });\n }\n return {\n before: before.length > 0 ? before : undefined,\n after: after.length > 0 ? after : undefined,\n };\n };\n\n protected override getOptionsWithDefaults(): BaseUnresolvedOptionsWithDefaults {\n const options = super.getOptionsWithDefaults();\n options.diffStyle = 'unified';\n options.lineDiffType = 'none';\n // NOTE(amadeus): Aint nobody got time for a spread\n (options as BaseUnresolvedOptionsWithDefaults).mergeConflictActionsType =\n this.options.mergeConflictActionsType ?? 'default';\n return options as BaseUnresolvedOptionsWithDefaults;\n }\n}\n\nfunction getMergeConflictGutterProperties(\n mergeConflictType: MergeConflictMarkerType | undefined\n): Properties | undefined {\n return mergeConflictType != null\n ? { 'data-merge-conflict': mergeConflictType }\n : undefined;\n}\n\nfunction getMergeConflictContentProperties(\n type: 'change' | 'context' | 'context-expanded',\n mergeConflictType: MergeConflictMarkerType | undefined\n): Properties | undefined {\n if (mergeConflictType == null) {\n return undefined;\n }\n if (type === 'change') {\n if (mergeConflictType === 'current' || mergeConflictType === 'incoming') {\n return {\n 'data-line-type': 'context',\n 'data-merge-conflict': mergeConflictType,\n };\n }\n return undefined;\n }\n if (\n mergeConflictType === 'marker-start' ||\n mergeConflictType === 'marker-base' ||\n mergeConflictType === 'marker-separator' ||\n mergeConflictType === 'marker-end'\n ) {\n return { 'data-merge-conflict': mergeConflictType };\n }\n return undefined;\n}\n\nfunction createMergeConflictGutterGap(\n type: 'action' | 'marker',\n markerType?: MergeConflictMarkerInjectedRow['type']\n): HASTElement {\n const gap = createGutterGap(undefined, 'annotation', 1);\n gap.properties['data-gutter-buffer'] =\n type === 'action'\n ? 'merge-conflict-action'\n : `merge-conflict-${markerType ?? 'marker'}`;\n return gap;\n}\n\ninterface CreateMergeConflictActionsRowElementProps {\n row: MergeConflictActionRowData;\n includeDefaultActions: boolean;\n includeSlot: boolean;\n}\n\nfunction createMergeConflictActionsRowElement({\n row,\n includeDefaultActions,\n includeSlot,\n}: CreateMergeConflictActionsRowElementProps): HASTElement {\n const contentChildren: HASTElement[] = includeDefaultActions\n ? createMergeConflictActionsContent(row.conflictIndex)\n : [];\n if (includeSlot) {\n contentChildren.push(\n createHastElement({\n tagName: 'slot',\n properties: {\n name: getMergeConflictActionSlotName({\n hunkIndex: row.hunkIndex,\n lineIndex: row.lineIndex,\n conflictIndex: row.conflictIndex,\n }),\n 'data-merge-conflict-action-slot': '',\n },\n })\n );\n }\n return createHastElement({\n tagName: 'div',\n properties: {\n 'data-merge-conflict-actions': '',\n },\n children: [\n createHastElement({\n tagName: 'div',\n properties: { 'data-merge-conflict-actions-content': '' },\n children: contentChildren,\n }),\n ],\n });\n}\n\nfunction createMergeConflictMarkerRowElement(\n row: MergeConflictMarkerInjectedRow\n): HASTElement {\n return createHastElement({\n tagName: 'div',\n properties: {\n 'data-merge-conflict': row.type,\n 'data-merge-conflict-marker-row': '',\n },\n children: [\n createTextNodeElement(row.lineText.replace(/(?:\\r\\n|\\n|\\r)$/, '')),\n ],\n });\n}\n\nfunction createMergeConflictActionsContent(\n conflictIndex: number\n): HASTElement[] {\n return [\n createMergeConflictActionButton({\n resolution: 'current',\n label: 'Accept current change',\n conflictIndex,\n }),\n createMergeConflictActionSeparator(),\n createMergeConflictActionButton({\n resolution: 'incoming',\n label: 'Accept incoming change',\n conflictIndex,\n }),\n createMergeConflictActionSeparator(),\n createMergeConflictActionButton({\n resolution: 'both',\n label: 'Accept both',\n conflictIndex,\n }),\n ];\n}\n\ninterface CreateMergeConflictActionButtonProps {\n resolution: MergeConflictResolution;\n label: string;\n conflictIndex: number;\n}\n\nfunction createMergeConflictActionButton({\n resolution,\n label,\n conflictIndex,\n}: CreateMergeConflictActionButtonProps): HASTElement {\n return createHastElement({\n tagName: 'button',\n properties: {\n type: 'button',\n 'data-merge-conflict-action': resolution,\n 'data-merge-conflict-conflict-index': `${conflictIndex}`,\n },\n children: [createTextNodeElement(label)],\n });\n}\n\nfunction createMergeConflictActionSeparator(): HASTElement {\n return createHastElement({\n tagName: 'span',\n properties: { 'data-merge-conflict-action-separator': '' },\n children: [createTextNodeElement('|')],\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"UnresolvedFileHunksRenderer.js","names":[],"sources":["../../src/renderers/UnresolvedFileHunksRenderer.ts"],"sourcesContent":["import type { Element as HASTElement, Properties } from 'hast';\n\nimport { DEFAULT_RENDER_RANGE, DEFAULT_THEMES } from '../constants';\nimport type {\n FileDiffMetadata,\n MergeConflictMarkerRow,\n MergeConflictResolution,\n RenderRange,\n} from '../types';\nimport { getMergeConflictActionSlotName } from '../utils/getMergeConflictActionSlotName';\nimport {\n createGutterGap,\n createHastElement,\n createTextNodeElement,\n} from '../utils/hast_utils';\nimport {\n getMergeConflictActionAnchor,\n type MergeConflictDiffAction,\n} from '../utils/parseMergeConflictDiffFromFile';\nimport type { WorkerPoolManager } from '../worker';\nimport {\n DiffHunksRenderer,\n type DiffHunksRendererOptions,\n type DiffHunksRendererOptionsWithDefaults,\n type HunksRenderResult,\n type InjectedRow,\n type LineDecoration,\n type RenderedLineContext,\n type SplitLineDecorationProps,\n type UnifiedInjectedRowPlacement,\n type UnifiedLineDecorationProps,\n} from './DiffHunksRenderer';\n\ntype MergeConflictMarkerType =\n | 'marker-start'\n | 'marker-base'\n | 'marker-separator'\n | 'marker-end'\n | 'current'\n | 'incoming';\n\ninterface MergeConflictActionRowData {\n hunkIndex: number;\n lineIndex: number;\n conflictIndex: number;\n}\n\ninterface MergeConflictMarkerInjectedRow extends MergeConflictMarkerRow {\n type: Extract<\n MergeConflictMarkerRow['type'],\n 'marker-start' | 'marker-base' | 'marker-separator' | 'marker-end'\n >;\n lineText: string;\n lineIndex: number;\n}\n\n// NOTE(amadeus): Don't love this, should probably rework into an\n// interface/extender\ntype MergeConflictInjectedRowData =\n | ({ type: 'actions' } & MergeConflictActionRowData)\n | MergeConflictMarkerInjectedRow;\n\ninterface BaseUnresolvedOptionsWithDefaults extends DiffHunksRendererOptionsWithDefaults {\n mergeConflictActionsType: MergeConflictActionsType;\n}\n\ntype MergeConflictActionsType = 'none' | 'default' | 'custom';\n\nexport interface UnresolvedFileHunksRendererOptions extends DiffHunksRendererOptions {\n mergeConflictActionsType?: MergeConflictActionsType;\n}\n\nexport class UnresolvedFileHunksRenderer<\n LAnnotation = undefined,\n> extends DiffHunksRenderer<LAnnotation> {\n private pendingConflictActions: (MergeConflictDiffAction | undefined)[] = [];\n private pendingMarkerRows: MergeConflictMarkerRow[] = [];\n private injectedRows = new Map<string, MergeConflictInjectedRowData[]>();\n public override options: UnresolvedFileHunksRendererOptions;\n\n constructor(\n options: UnresolvedFileHunksRendererOptions = {\n theme: DEFAULT_THEMES,\n },\n onRenderUpdate?: () => unknown,\n workerManager?: WorkerPoolManager | undefined\n ) {\n super(undefined, onRenderUpdate, workerManager);\n this.options = options;\n }\n\n // SELF_REVIEW: I don't love how this is hooked up with `renderDiff` right\n // now, so we definitely need to figure out what the fuck we are gonna do\n // about it...\n // I think at the very least we should keep it like annotations, and just\n // sorta assume there's a disconnect there\n public setConflictState(\n conflictActions: (MergeConflictDiffAction | undefined)[],\n markerRows: MergeConflictMarkerRow[],\n diff: FileDiffMetadata\n ): void {\n this.pendingConflictActions = conflictActions;\n this.pendingMarkerRows = markerRows;\n this.syncInjectedRows(conflictActions, markerRows, diff);\n }\n\n private syncInjectedRows(\n conflictActions: (MergeConflictDiffAction | undefined)[],\n markerRows: MergeConflictMarkerRow[],\n diff: FileDiffMetadata\n ): void {\n this.injectedRows.clear();\n for (const action of conflictActions) {\n const anchor =\n action != null ? getMergeConflictActionAnchor(action, diff) : undefined;\n if (action == null || anchor == null) {\n continue;\n }\n const row: MergeConflictInjectedRowData = {\n type: 'actions',\n hunkIndex: anchor.hunkIndex,\n lineIndex: anchor.lineIndex,\n conflictIndex: action.conflictIndex,\n };\n this.addInjectedRow(row);\n }\n\n for (const row of markerRows) {\n this.addInjectedRow(row);\n }\n }\n\n private addInjectedRow(row: MergeConflictInjectedRowData): void {\n const key = `${row.hunkIndex}:${row.lineIndex}`;\n const rows = this.injectedRows.get(key);\n if (rows == null) {\n this.injectedRows.set(key, [row]);\n } else {\n rows.push(row);\n }\n }\n\n public override renderDiff(\n diff?: FileDiffMetadata | undefined,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): HunksRenderResult | undefined {\n if (diff != null) {\n this.syncInjectedRows(\n this.pendingConflictActions,\n this.pendingMarkerRows,\n diff\n );\n }\n return super.renderDiff(diff, renderRange);\n }\n\n public override async asyncRender(\n diff: FileDiffMetadata,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): Promise<HunksRenderResult> {\n this.syncInjectedRows(\n this.pendingConflictActions,\n this.pendingMarkerRows,\n diff\n );\n return super.asyncRender(diff, renderRange);\n }\n\n protected override createPreElement(\n split: boolean,\n totalLines: number\n ): HASTElement {\n return super.createPreElement(split, totalLines, {\n 'data-has-merge-conflict': '',\n });\n }\n\n protected override getUnifiedLineDecoration({\n type,\n lineType,\n }: UnifiedLineDecorationProps): LineDecoration {\n const mergeConflictType =\n type === 'change'\n ? lineType === 'change-deletion'\n ? 'current'\n : 'incoming'\n : undefined;\n return {\n gutterLineType: type === 'change' ? 'context' : lineType,\n gutterProperties: getMergeConflictGutterProperties(mergeConflictType),\n contentProperties: getMergeConflictContentProperties(\n type,\n mergeConflictType\n ),\n };\n }\n\n protected override getSplitLineDecoration({\n side,\n type,\n }: SplitLineDecorationProps): LineDecoration {\n const mergeConflictType =\n type === 'change'\n ? side === 'deletions'\n ? 'current'\n : 'incoming'\n : undefined;\n return {\n gutterLineType: type === 'change' ? 'context' : type,\n gutterProperties: getMergeConflictGutterProperties(mergeConflictType),\n contentProperties: getMergeConflictContentProperties(\n type,\n mergeConflictType\n ),\n };\n }\n\n protected override getUnifiedInjectedRowsForLine = (\n ctx: RenderedLineContext\n ): UnifiedInjectedRowPlacement | undefined => {\n const rows = this.injectedRows.get(`${ctx.hunkIndex}:${ctx.lineIndex}`);\n if (rows == null || rows.length === 0) {\n return undefined;\n }\n const { mergeConflictActionsType } = this.getOptionsWithDefaults();\n const before: InjectedRow[] = [];\n const after: InjectedRow[] = [];\n for (const row of rows) {\n if (row.type === 'actions') {\n before.push({\n content: createMergeConflictActionsRowElement({\n row,\n includeDefaultActions: mergeConflictActionsType === 'default',\n includeSlot: true,\n }),\n gutter: createMergeConflictGutterGap('action'),\n });\n continue;\n }\n const target = row.type === 'marker-end' ? after : before;\n target.push({\n content: createMergeConflictMarkerRowElement(row),\n gutter: createMergeConflictGutterGap('marker', row.type),\n });\n }\n return {\n before: before.length > 0 ? before : undefined,\n after: after.length > 0 ? after : undefined,\n };\n };\n\n protected override getOptionsWithDefaults(): BaseUnresolvedOptionsWithDefaults {\n const options = super.getOptionsWithDefaults();\n options.diffStyle = 'unified';\n options.lineDiffType = 'none';\n // NOTE(amadeus): Aint nobody got time for a spread\n (options as BaseUnresolvedOptionsWithDefaults).mergeConflictActionsType =\n this.options.mergeConflictActionsType ?? 'default';\n return options as BaseUnresolvedOptionsWithDefaults;\n }\n}\n\nfunction getMergeConflictGutterProperties(\n mergeConflictType: MergeConflictMarkerType | undefined\n): Properties | undefined {\n return mergeConflictType != null\n ? { 'data-merge-conflict': mergeConflictType }\n : undefined;\n}\n\nfunction getMergeConflictContentProperties(\n type: 'change' | 'context' | 'context-expanded',\n mergeConflictType: MergeConflictMarkerType | undefined\n): Properties | undefined {\n if (mergeConflictType == null) {\n return undefined;\n }\n if (type === 'change') {\n if (mergeConflictType === 'current' || mergeConflictType === 'incoming') {\n return {\n 'data-line-type': 'context',\n 'data-merge-conflict': mergeConflictType,\n };\n }\n return undefined;\n }\n if (\n mergeConflictType === 'marker-start' ||\n mergeConflictType === 'marker-base' ||\n mergeConflictType === 'marker-separator' ||\n mergeConflictType === 'marker-end'\n ) {\n return { 'data-merge-conflict': mergeConflictType };\n }\n return undefined;\n}\n\nfunction createMergeConflictGutterGap(\n type: 'action' | 'marker',\n markerType?: MergeConflictMarkerInjectedRow['type']\n): HASTElement {\n const gap = createGutterGap(undefined, 'annotation', 1);\n gap.properties['data-gutter-buffer'] =\n type === 'action'\n ? 'merge-conflict-action'\n : `merge-conflict-${markerType ?? 'marker'}`;\n return gap;\n}\n\ninterface CreateMergeConflictActionsRowElementProps {\n row: MergeConflictActionRowData;\n includeDefaultActions: boolean;\n includeSlot: boolean;\n}\n\nfunction createMergeConflictActionsRowElement({\n row,\n includeDefaultActions,\n includeSlot,\n}: CreateMergeConflictActionsRowElementProps): HASTElement {\n const contentChildren: HASTElement[] = includeDefaultActions\n ? createMergeConflictActionsContent(row.conflictIndex)\n : [];\n if (includeSlot) {\n contentChildren.push(\n createHastElement({\n tagName: 'slot',\n properties: {\n name: getMergeConflictActionSlotName({\n hunkIndex: row.hunkIndex,\n lineIndex: row.lineIndex,\n conflictIndex: row.conflictIndex,\n }),\n 'data-merge-conflict-action-slot': '',\n },\n })\n );\n }\n return createHastElement({\n tagName: 'div',\n properties: {\n 'data-merge-conflict-actions': '',\n },\n children: [\n createHastElement({\n tagName: 'div',\n properties: { 'data-merge-conflict-actions-content': '' },\n children: contentChildren,\n }),\n ],\n });\n}\n\nfunction createMergeConflictMarkerRowElement(\n row: MergeConflictMarkerInjectedRow\n): HASTElement {\n return createHastElement({\n tagName: 'div',\n properties: {\n 'data-merge-conflict': row.type,\n 'data-merge-conflict-marker-row': '',\n },\n children: [\n createTextNodeElement(row.lineText.replace(/(?:\\r\\n|\\n|\\r)$/, '')),\n ],\n });\n}\n\nfunction createMergeConflictActionsContent(\n conflictIndex: number\n): HASTElement[] {\n return [\n createMergeConflictActionButton({\n resolution: 'current',\n label: 'Accept current change',\n conflictIndex,\n }),\n createMergeConflictActionSeparator(),\n createMergeConflictActionButton({\n resolution: 'incoming',\n label: 'Accept incoming change',\n conflictIndex,\n }),\n createMergeConflictActionSeparator(),\n createMergeConflictActionButton({\n resolution: 'both',\n label: 'Accept both',\n conflictIndex,\n }),\n ];\n}\n\ninterface CreateMergeConflictActionButtonProps {\n resolution: MergeConflictResolution;\n label: string;\n conflictIndex: number;\n}\n\nfunction createMergeConflictActionButton({\n resolution,\n label,\n conflictIndex,\n}: CreateMergeConflictActionButtonProps): HASTElement {\n return createHastElement({\n tagName: 'button',\n properties: {\n type: 'button',\n 'data-merge-conflict-action': resolution,\n 'data-merge-conflict-conflict-index': `${conflictIndex}`,\n },\n children: [createTextNodeElement(label)],\n });\n}\n\nfunction createMergeConflictActionSeparator(): HASTElement {\n return createHastElement({\n tagName: 'span',\n properties: { 'data-merge-conflict-action-separator': '' },\n children: [createTextNodeElement('|')],\n });\n}\n"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
1
  import { ShikiStreamTokenizer } from "./tokenizer.js";
2
2
  import { CodeToTokenTransformStream } from "./stream.js";
3
-
4
- export { CodeToTokenTransformStream, ShikiStreamTokenizer };
3
+ export { CodeToTokenTransformStream, ShikiStreamTokenizer };
@@ -3,7 +3,6 @@ import { ShikiStreamTokenizer } from "./tokenizer.js";
3
3
  import { ThemedToken } from "shiki/core";
4
4
 
5
5
  //#region src/shiki-stream/stream.d.ts
6
-
7
6
  /**
8
7
  * Create a transform stream that takes code chunks and emits themed tokens.
9
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","names":["ThemedToken","ShikiStreamTokenizer","CodeToTokenTransformStreamOptions","RecallToken","CodeToTokenTransformStream","TransformStream"],"sources":["../../src/shiki-stream/stream.d.ts"],"sourcesContent":["import type { ThemedToken } from 'shiki/core';\nimport { ShikiStreamTokenizer } from './tokenizer';\nimport type { CodeToTokenTransformStreamOptions, RecallToken } from './types';\n/**\n * Create a transform stream that takes code chunks and emits themed tokens.\n */\nexport declare class CodeToTokenTransformStream extends TransformStream<string, ThemedToken | RecallToken> {\n readonly tokenizer: ShikiStreamTokenizer;\n readonly options: CodeToTokenTransformStreamOptions;\n constructor(options: CodeToTokenTransformStreamOptions);\n}\n//# sourceMappingURL=stream.d.ts.map"],"mappings":";;;;;;;;AAMA;AAAgFA,cAA3DI,0BAAAA,SAAmCC,eAAwBL,CAAAA,MAAAA,EAAAA,WAAAA,GAAcG,WAAdH,CAAAA,CAAAA;EAAcG,SAAAA,SAAAA,EACtEF,oBADsEE;EACtEF,SAAAA,OAAAA,EACFC,iCADED;EACFC,WAAAA,CAAAA,OAAAA,EACGA,iCADHA"}
1
+ {"version":3,"file":"stream.d.ts","names":[],"sources":["../../src/shiki-stream/stream.ts"],"mappings":";;;;;;;AAQA;cAAa,0BAAA,SAAmC,eAAA,SAE9C,WAAA,GAAc,WAAA;EAAA,SAEL,SAAA,EAAW,oBAAA;EAAA,SACX,OAAA,EAAS,iCAAA;EAElB,WAAA,CAAY,OAAA,EAAS,iCAAA;AAAA"}
@@ -1,5 +1,4 @@
1
1
  import { ShikiStreamTokenizer } from "./tokenizer.js";
2
-
3
2
  //#region src/shiki-stream/stream.ts
4
3
  /**
5
4
  * Create a transform stream that takes code chunks and emits themed tokens.
@@ -26,7 +25,7 @@ var CodeToTokenTransformStream = class extends TransformStream {
26
25
  this.options = options;
27
26
  }
28
27
  };
29
-
30
28
  //#endregion
31
29
  export { CodeToTokenTransformStream };
30
+
32
31
  //# sourceMappingURL=stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","names":[],"sources":["../../src/shiki-stream/stream.ts"],"sourcesContent":["import type { ThemedToken } from 'shiki/core';\n\nimport { ShikiStreamTokenizer } from './tokenizer';\nimport type { CodeToTokenTransformStreamOptions, RecallToken } from './types';\n\n/**\n * Create a transform stream that takes code chunks and emits themed tokens.\n */\nexport class CodeToTokenTransformStream extends TransformStream<\n string,\n ThemedToken | RecallToken\n> {\n readonly tokenizer: ShikiStreamTokenizer;\n readonly options: CodeToTokenTransformStreamOptions;\n\n constructor(options: CodeToTokenTransformStreamOptions) {\n const tokenizer = new ShikiStreamTokenizer(options);\n const { allowRecalls = false } = options;\n\n super({\n async transform(chunk, controller) {\n const {\n stable,\n unstable: buffer,\n recall,\n } = await tokenizer.enqueue(chunk);\n if (allowRecalls && recall > 0) {\n // oxlint-disable-next-line typescript/no-explicit-any\n controller.enqueue({ recall } as any);\n }\n for (const token of stable) {\n controller.enqueue(token);\n }\n if (allowRecalls) {\n for (const token of buffer) {\n controller.enqueue(token);\n }\n }\n },\n // oxlint-disable-next-line typescript/require-await\n async flush(controller) {\n const { stable } = tokenizer.close();\n // if allow recalls, the tokens should already be sent\n if (!allowRecalls) {\n for (const token of stable) {\n controller.enqueue(token);\n }\n }\n },\n });\n\n this.tokenizer = tokenizer;\n this.options = options;\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,6BAAb,cAAgD,gBAG9C;CACA,AAAS;CACT,AAAS;CAET,YAAY,SAA4C;EACtD,MAAM,YAAY,IAAI,qBAAqB,QAAQ;EACnD,MAAM,EAAE,eAAe,UAAU;AAEjC,QAAM;GACJ,MAAM,UAAU,OAAO,YAAY;IACjC,MAAM,EACJ,QACA,UAAU,QACV,WACE,MAAM,UAAU,QAAQ,MAAM;AAClC,QAAI,gBAAgB,SAAS,EAE3B,YAAW,QAAQ,EAAE,QAAQ,CAAQ;AAEvC,SAAK,MAAM,SAAS,OAClB,YAAW,QAAQ,MAAM;AAE3B,QAAI,aACF,MAAK,MAAM,SAAS,OAClB,YAAW,QAAQ,MAAM;;GAK/B,MAAM,MAAM,YAAY;IACtB,MAAM,EAAE,WAAW,UAAU,OAAO;AAEpC,QAAI,CAAC,aACH,MAAK,MAAM,SAAS,OAClB,YAAW,QAAQ,MAAM;;GAIhC,CAAC;AAEF,OAAK,YAAY;AACjB,OAAK,UAAU"}
1
+ {"version":3,"file":"stream.js","names":[],"sources":["../../src/shiki-stream/stream.ts"],"sourcesContent":["import type { ThemedToken } from 'shiki/core';\n\nimport { ShikiStreamTokenizer } from './tokenizer';\nimport type { CodeToTokenTransformStreamOptions, RecallToken } from './types';\n\n/**\n * Create a transform stream that takes code chunks and emits themed tokens.\n */\nexport class CodeToTokenTransformStream extends TransformStream<\n string,\n ThemedToken | RecallToken\n> {\n readonly tokenizer: ShikiStreamTokenizer;\n readonly options: CodeToTokenTransformStreamOptions;\n\n constructor(options: CodeToTokenTransformStreamOptions) {\n const tokenizer = new ShikiStreamTokenizer(options);\n const { allowRecalls = false } = options;\n\n super({\n async transform(chunk, controller) {\n const {\n stable,\n unstable: buffer,\n recall,\n } = await tokenizer.enqueue(chunk);\n if (allowRecalls && recall > 0) {\n // oxlint-disable-next-line typescript/no-explicit-any\n controller.enqueue({ recall } as any);\n }\n for (const token of stable) {\n controller.enqueue(token);\n }\n if (allowRecalls) {\n for (const token of buffer) {\n controller.enqueue(token);\n }\n }\n },\n // oxlint-disable-next-line typescript/require-await\n async flush(controller) {\n const { stable } = tokenizer.close();\n // if allow recalls, the tokens should already be sent\n if (!allowRecalls) {\n for (const token of stable) {\n controller.enqueue(token);\n }\n }\n },\n });\n\n this.tokenizer = tokenizer;\n this.options = options;\n }\n}\n"],"mappings":";;;;;AAQA,IAAa,6BAAb,cAAgD,gBAG9C;CACA;CACA;CAEA,YAAY,SAA4C;EACtD,MAAM,YAAY,IAAI,qBAAqB,OAAO;EAClD,MAAM,EAAE,eAAe,UAAU;EAEjC,MAAM;GACJ,MAAM,UAAU,OAAO,YAAY;IACjC,MAAM,EACJ,QACA,UAAU,QACV,WACE,MAAM,UAAU,QAAQ,KAAK;IACjC,IAAI,gBAAgB,SAAS,GAE3B,WAAW,QAAQ,EAAE,OAAO,CAAQ;IAEtC,KAAK,MAAM,SAAS,QAClB,WAAW,QAAQ,KAAK;IAE1B,IAAI,cACF,KAAK,MAAM,SAAS,QAClB,WAAW,QAAQ,KAAK;GAG9B;GAEA,MAAM,MAAM,YAAY;IACtB,MAAM,EAAE,WAAW,UAAU,MAAM;IAEnC,IAAI,CAAC,cACH,KAAK,MAAM,SAAS,QAClB,WAAW,QAAQ,KAAK;GAG9B;EACF,CAAC;EAED,KAAK,YAAY;EACjB,KAAK,UAAU;CACjB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"tokenizer.d.ts","names":["GrammarState","ThemedToken","ShikiStreamTokenizerEnqueueResult","ShikiStreamTokenizerOptions","ShikiStreamTokenizer","Promise"],"sources":["../../src/shiki-stream/tokenizer.d.ts"],"sourcesContent":["import type { GrammarState, ThemedToken } from 'shiki/core';\nimport type { ShikiStreamTokenizerEnqueueResult, ShikiStreamTokenizerOptions } from './types';\nexport declare class ShikiStreamTokenizer {\n readonly options: ShikiStreamTokenizerOptions;\n tokensStable: ThemedToken[];\n tokensUnstable: ThemedToken[];\n lastUnstableCodeChunk: string;\n lastStableGrammarState: GrammarState | undefined;\n constructor(options: ShikiStreamTokenizerOptions);\n /**\n * Enqueue a chunk of code to the buffer.\n */\n enqueue(chunk: string): Promise<ShikiStreamTokenizerEnqueueResult>;\n close(): {\n stable: ThemedToken[];\n };\n clear(): void;\n clone(): ShikiStreamTokenizer;\n}\n//# sourceMappingURL=tokenizer.d.ts.map"],"mappings":";;;;cAEqBI,oBAAAA;oBACCD;EADDC,YAAAA,EAEHH,WAFuB,EAAA;EACnBE,cAAAA,EAEFF,WAFEE,EAAAA;EACJF,qBAAAA,EAAAA,MAAAA;EACEA,sBAAAA,EAEQD,YAFRC,GAAAA,SAAAA;EAEQD,WAAAA,CAAAA,OAAAA,EACHG,2BADGH;EACHG;;;EAMTF,OAAAA,CAAAA,KAAAA,EAAAA,MAAAA,CAAAA,EAFYI,OAEZJ,CAFoBC,iCAEpBD,CAAAA;EAGHG,KAAAA,CAAAA,CAAAA,EAAAA;IAAoB,MAAA,EAHjBH,WAGiB,EAAA;;;WAApBG"}
1
+ {"version":3,"file":"tokenizer.d.ts","names":[],"sources":["../../src/shiki-stream/tokenizer.ts"],"mappings":";;;;cAOa,oBAAA;EAAA,SACK,OAAA,EAAS,2BAAA;EAElB,YAAA,EAAc,WAAA;EACd,cAAA,EAAgB,WAAA;EAEhB,qBAAA;EACA,sBAAA,EAAwB,YAAA;EAE/B,WAAA,CAAY,OAAA,EAAS,2BAAA;EALE;;;EAajB,OAAA,CAAQ,KAAA,WAAgB,OAAA,CAAQ,iCAAA;EAoCtC,KAAA;IAAW,MAAA,EAAQ,WAAA;EAAA;EAUnB,KAAA;EAOA,KAAA,IAAS,oBAAA;AAAA"}
@@ -65,7 +65,7 @@ var ShikiStreamTokenizer = class ShikiStreamTokenizer {
65
65
  return clone;
66
66
  }
67
67
  };
68
-
69
68
  //#endregion
70
69
  export { ShikiStreamTokenizer };
70
+
71
71
  //# sourceMappingURL=tokenizer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokenizer.js","names":["stable: ThemedToken[]","unstable: ThemedToken[]"],"sources":["../../src/shiki-stream/tokenizer.ts"],"sourcesContent":["import type { GrammarState, ThemedToken } from 'shiki/core';\n\nimport type {\n ShikiStreamTokenizerEnqueueResult,\n ShikiStreamTokenizerOptions,\n} from './types';\n\nexport class ShikiStreamTokenizer {\n public readonly options: ShikiStreamTokenizerOptions;\n\n public tokensStable: ThemedToken[] = [];\n public tokensUnstable: ThemedToken[] = [];\n\n public lastUnstableCodeChunk: string = '';\n public lastStableGrammarState: GrammarState | undefined;\n\n constructor(options: ShikiStreamTokenizerOptions) {\n this.options = options;\n }\n\n /**\n * Enqueue a chunk of code to the buffer.\n */\n // oxlint-disable-next-line typescript/require-await\n async enqueue(chunk: string): Promise<ShikiStreamTokenizerEnqueueResult> {\n const chunkLines = (this.lastUnstableCodeChunk + chunk).split('\\n');\n\n const stable: ThemedToken[] = [];\n let unstable: ThemedToken[] = [];\n const recall = this.tokensUnstable.length;\n\n chunkLines.forEach((line, i) => {\n const isLastLine = i === chunkLines.length - 1;\n\n const result = this.options.highlighter.codeToTokens(line, {\n ...this.options,\n grammarState: this.lastStableGrammarState,\n });\n const tokens = result.tokens[0]; // only one line\n if (!isLastLine) tokens.push({ content: '\\n', offset: 0 });\n\n if (!isLastLine) {\n this.lastStableGrammarState = result.grammarState;\n stable.push(...tokens);\n } else {\n unstable = tokens;\n this.lastUnstableCodeChunk = line;\n }\n });\n\n this.tokensStable.push(...stable);\n this.tokensUnstable = unstable;\n\n return {\n recall,\n stable,\n unstable,\n };\n }\n\n close(): { stable: ThemedToken[] } {\n const stable = this.tokensUnstable;\n this.tokensUnstable = [];\n this.lastUnstableCodeChunk = '';\n this.lastStableGrammarState = undefined;\n return {\n stable,\n };\n }\n\n clear(): void {\n this.tokensStable = [];\n this.tokensUnstable = [];\n this.lastUnstableCodeChunk = '';\n this.lastStableGrammarState = undefined;\n }\n\n clone(): ShikiStreamTokenizer {\n const clone = new ShikiStreamTokenizer(this.options);\n clone.lastUnstableCodeChunk = this.lastUnstableCodeChunk;\n clone.tokensUnstable = this.tokensUnstable;\n clone.tokensStable = this.tokensStable;\n clone.lastStableGrammarState = this.lastStableGrammarState;\n return clone;\n }\n}\n"],"mappings":";AAOA,IAAa,uBAAb,MAAa,qBAAqB;CAChC,AAAgB;CAEhB,AAAO,eAA8B,EAAE;CACvC,AAAO,iBAAgC,EAAE;CAEzC,AAAO,wBAAgC;CACvC,AAAO;CAEP,YAAY,SAAsC;AAChD,OAAK,UAAU;;;;;CAOjB,MAAM,QAAQ,OAA2D;EACvE,MAAM,cAAc,KAAK,wBAAwB,OAAO,MAAM,KAAK;EAEnE,MAAMA,SAAwB,EAAE;EAChC,IAAIC,WAA0B,EAAE;EAChC,MAAM,SAAS,KAAK,eAAe;AAEnC,aAAW,SAAS,MAAM,MAAM;GAC9B,MAAM,aAAa,MAAM,WAAW,SAAS;GAE7C,MAAM,SAAS,KAAK,QAAQ,YAAY,aAAa,MAAM;IACzD,GAAG,KAAK;IACR,cAAc,KAAK;IACpB,CAAC;GACF,MAAM,SAAS,OAAO,OAAO;AAC7B,OAAI,CAAC,WAAY,QAAO,KAAK;IAAE,SAAS;IAAM,QAAQ;IAAG,CAAC;AAE1D,OAAI,CAAC,YAAY;AACf,SAAK,yBAAyB,OAAO;AACrC,WAAO,KAAK,GAAG,OAAO;UACjB;AACL,eAAW;AACX,SAAK,wBAAwB;;IAE/B;AAEF,OAAK,aAAa,KAAK,GAAG,OAAO;AACjC,OAAK,iBAAiB;AAEtB,SAAO;GACL;GACA;GACA;GACD;;CAGH,QAAmC;EACjC,MAAM,SAAS,KAAK;AACpB,OAAK,iBAAiB,EAAE;AACxB,OAAK,wBAAwB;AAC7B,OAAK,yBAAyB;AAC9B,SAAO,EACL,QACD;;CAGH,QAAc;AACZ,OAAK,eAAe,EAAE;AACtB,OAAK,iBAAiB,EAAE;AACxB,OAAK,wBAAwB;AAC7B,OAAK,yBAAyB;;CAGhC,QAA8B;EAC5B,MAAM,QAAQ,IAAI,qBAAqB,KAAK,QAAQ;AACpD,QAAM,wBAAwB,KAAK;AACnC,QAAM,iBAAiB,KAAK;AAC5B,QAAM,eAAe,KAAK;AAC1B,QAAM,yBAAyB,KAAK;AACpC,SAAO"}
1
+ {"version":3,"file":"tokenizer.js","names":[],"sources":["../../src/shiki-stream/tokenizer.ts"],"sourcesContent":["import type { GrammarState, ThemedToken } from 'shiki/core';\n\nimport type {\n ShikiStreamTokenizerEnqueueResult,\n ShikiStreamTokenizerOptions,\n} from './types';\n\nexport class ShikiStreamTokenizer {\n public readonly options: ShikiStreamTokenizerOptions;\n\n public tokensStable: ThemedToken[] = [];\n public tokensUnstable: ThemedToken[] = [];\n\n public lastUnstableCodeChunk: string = '';\n public lastStableGrammarState: GrammarState | undefined;\n\n constructor(options: ShikiStreamTokenizerOptions) {\n this.options = options;\n }\n\n /**\n * Enqueue a chunk of code to the buffer.\n */\n // oxlint-disable-next-line typescript/require-await\n async enqueue(chunk: string): Promise<ShikiStreamTokenizerEnqueueResult> {\n const chunkLines = (this.lastUnstableCodeChunk + chunk).split('\\n');\n\n const stable: ThemedToken[] = [];\n let unstable: ThemedToken[] = [];\n const recall = this.tokensUnstable.length;\n\n chunkLines.forEach((line, i) => {\n const isLastLine = i === chunkLines.length - 1;\n\n const result = this.options.highlighter.codeToTokens(line, {\n ...this.options,\n grammarState: this.lastStableGrammarState,\n });\n const tokens = result.tokens[0]; // only one line\n if (!isLastLine) tokens.push({ content: '\\n', offset: 0 });\n\n if (!isLastLine) {\n this.lastStableGrammarState = result.grammarState;\n stable.push(...tokens);\n } else {\n unstable = tokens;\n this.lastUnstableCodeChunk = line;\n }\n });\n\n this.tokensStable.push(...stable);\n this.tokensUnstable = unstable;\n\n return {\n recall,\n stable,\n unstable,\n };\n }\n\n close(): { stable: ThemedToken[] } {\n const stable = this.tokensUnstable;\n this.tokensUnstable = [];\n this.lastUnstableCodeChunk = '';\n this.lastStableGrammarState = undefined;\n return {\n stable,\n };\n }\n\n clear(): void {\n this.tokensStable = [];\n this.tokensUnstable = [];\n this.lastUnstableCodeChunk = '';\n this.lastStableGrammarState = undefined;\n }\n\n clone(): ShikiStreamTokenizer {\n const clone = new ShikiStreamTokenizer(this.options);\n clone.lastUnstableCodeChunk = this.lastUnstableCodeChunk;\n clone.tokensUnstable = this.tokensUnstable;\n clone.tokensStable = this.tokensStable;\n clone.lastStableGrammarState = this.lastStableGrammarState;\n return clone;\n }\n}\n"],"mappings":";AAOA,IAAa,uBAAb,MAAa,qBAAqB;CAChC;CAEA,eAAqC,CAAC;CACtC,iBAAuC,CAAC;CAExC,wBAAuC;CACvC;CAEA,YAAY,SAAsC;EAChD,KAAK,UAAU;CACjB;;;;CAMA,MAAM,QAAQ,OAA2D;EACvE,MAAM,cAAc,KAAK,wBAAwB,MAAA,CAAO,MAAM,IAAI;EAElE,MAAM,SAAwB,CAAC;EAC/B,IAAI,WAA0B,CAAC;EAC/B,MAAM,SAAS,KAAK,eAAe;EAEnC,WAAW,SAAS,MAAM,MAAM;GAC9B,MAAM,aAAa,MAAM,WAAW,SAAS;GAE7C,MAAM,SAAS,KAAK,QAAQ,YAAY,aAAa,MAAM;IACzD,GAAG,KAAK;IACR,cAAc,KAAK;GACrB,CAAC;GACD,MAAM,SAAS,OAAO,OAAO;GAC7B,IAAI,CAAC,YAAY,OAAO,KAAK;IAAE,SAAS;IAAM,QAAQ;GAAE,CAAC;GAEzD,IAAI,CAAC,YAAY;IACf,KAAK,yBAAyB,OAAO;IACrC,OAAO,KAAK,GAAG,MAAM;GACvB,OAAO;IACL,WAAW;IACX,KAAK,wBAAwB;GAC/B;EACF,CAAC;EAED,KAAK,aAAa,KAAK,GAAG,MAAM;EAChC,KAAK,iBAAiB;EAEtB,OAAO;GACL;GACA;GACA;EACF;CACF;CAEA,QAAmC;EACjC,MAAM,SAAS,KAAK;EACpB,KAAK,iBAAiB,CAAC;EACvB,KAAK,wBAAwB;EAC7B,KAAK,yBAAyB,KAAA;EAC9B,OAAO,EACL,OACF;CACF;CAEA,QAAc;EACZ,KAAK,eAAe,CAAC;EACrB,KAAK,iBAAiB,CAAC;EACvB,KAAK,wBAAwB;EAC7B,KAAK,yBAAyB,KAAA;CAChC;CAEA,QAA8B;EAC5B,MAAM,QAAQ,IAAI,qBAAqB,KAAK,OAAO;EACnD,MAAM,wBAAwB,KAAK;EACnC,MAAM,iBAAiB,KAAK;EAC5B,MAAM,eAAe,KAAK;EAC1B,MAAM,yBAAyB,KAAK;EACpC,OAAO;CACT;AACF"}
@@ -1,7 +1,6 @@
1
1
  import { CodeToTokensOptions, HighlighterCore, HighlighterGeneric, ThemedToken } from "shiki/core";
2
2
 
3
3
  //#region src/shiki-stream/types.d.ts
4
-
5
4
  /**
6
5
  * A special token that indicates the number of tokens to be removed from the previous streamed tokens.
7
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":["CodeToTokensOptions","HighlighterCore","HighlighterGeneric","ThemedToken","RecallToken","CodeToTokenTransformStreamOptions","ShikiStreamTokenizerOptions","ShikiStreamTokenizerEnqueueResult"],"sources":["../../src/shiki-stream/types.d.ts"],"sourcesContent":["import type { CodeToTokensOptions, HighlighterCore, HighlighterGeneric, ThemedToken } from 'shiki/core';\n/**\n * A special token that indicates the number of tokens to be removed from the previous streamed tokens.\n *\n * Pass `allowRecalls: true` to the `CodeToTokenTransformStream` to enable recall tokens.\n */\nexport interface RecallToken {\n /**\n * Number of tokens to be removed from the previous streamed tokens.\n */\n recall: number;\n}\nexport type CodeToTokenTransformStreamOptions = ShikiStreamTokenizerOptions & {\n /**\n * Whether to allow recall tokens to be emitted.\n *\n * A recall token is a special token that indicates the number of tokens to be removed from the previous streamed tokens.\n *\n * @default false\n */\n allowRecalls?: boolean;\n};\nexport type ShikiStreamTokenizerOptions = CodeToTokensOptions<string, string> & {\n highlighter: HighlighterCore | HighlighterGeneric<any, any>;\n};\nexport interface ShikiStreamTokenizerEnqueueResult {\n /**\n * Number of last tokens to be recalled\n */\n recall: number;\n /**\n * Stable tokens\n */\n stable: ThemedToken[];\n /**\n * Unstable tokens, they might or might not be recalled\n */\n unstable: ThemedToken[];\n}\n//# sourceMappingURL=types.d.ts.map"],"mappings":";;;;;;AAMA;AAMA;AAUA;AAA0CA,UAhBzBI,WAAAA,CAgByBJ;EACzBC;;;EAEAM,MAAAA,EAAAA,MAAAA;;KAbLF,iCAAAA,GAAoCC;;;;;;;;;;KAUpCA,2BAAAA,GAA8BN;eACzBC,kBAAkBC;;UAElBK,iCAAAA;;;;;;;;UAQLJ;;;;YAIEA"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/shiki-stream/types.ts"],"mappings":";;;;;AAYA;;;UAAiB,WAAA;EAIT;AAGR;;EAHE,MAAM;AAAA;AAAA,KAGI,iCAAA,GAAoC,2BAA2B;EAW/D;;;;;;;EAHV,YAAY;AAAA;AAAA,KAGF,2BAAA,GAA8B,mBAAA;EAKxC,WAAA,EAAa,eAAA,GAAkB,kBAAA;AAAA;AAAA,UAGhB,iCAAA;EAHkC;AAGnD;;EAIE,MAAA;EAQqB;;;EAJrB,MAAA,EAAQ,WAAA;EAIR;;;EAAA,QAAA,EAAU,WAAW;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"sprite.d.ts","names":["SVGSpriteNames","SVGSpriteSheet"],"sources":["../src/sprite.d.ts"],"sourcesContent":["export type SVGSpriteNames = 'diffs-icon-arrow-right-short' | 'diffs-icon-brand-github' | 'diffs-icon-chevron' | 'diffs-icon-chevrons-narrow' | 'diffs-icon-diff-split' | 'diffs-icon-diff-unified' | 'diffs-icon-expand' | 'diffs-icon-expand-all' | 'diffs-icon-file-code' | 'diffs-icon-plus' | 'diffs-icon-symbol-added' | 'diffs-icon-symbol-deleted' | 'diffs-icon-symbol-diffstat' | 'diffs-icon-symbol-ignored' | 'diffs-icon-symbol-modified' | 'diffs-icon-symbol-moved' | 'diffs-icon-symbol-ref';\nexport declare const SVGSpriteSheet = \"<svg data-icon-sprite aria-hidden=\\\"true\\\" width=\\\"0\\\" height=\\\"0\\\">\\n <symbol id=\\\"diffs-icon-arrow-right-short\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M8.47 4.22a.75.75 0 0 0 0 1.06l1.97 1.97H3.75a.75.75 0 0 0 0 1.5h6.69l-1.97 1.97a.75.75 0 1 0 1.06 1.06l3.25-3.25a.75.75 0 0 0 0-1.06L9.53 4.22a.75.75 0 0 0-1.06 0\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-brand-github\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M8 0c4.42 0 8 3.58 8 8a8.01 8.01 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27s-1.36.09-2 .27c-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-chevron\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M1.47 4.47a.75.75 0 0 1 1.06 0L8 9.94l5.47-5.47a.75.75 0 1 1 1.06 1.06l-6 6a.75.75 0 0 1-1.06 0l-6-6a.75.75 0 0 1 0-1.06\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-chevrons-narrow\\\" viewBox=\\\"0 0 10 16\\\">\\n <path d=\\\"M4.47 2.22a.75.75 0 0 1 1.06 0l3.25 3.25a.75.75 0 0 1-1.06 1.06L5 3.81 2.28 6.53a.75.75 0 0 1-1.06-1.06zM1.22 9.47a.75.75 0 0 1 1.06 0L5 12.19l2.72-2.72a.75.75 0 0 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0l-3.25-3.25a.75.75 0 0 1 0-1.06\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-diff-split\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M14 0H8.5v16H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2m-1.5 6.5v1h1a.5.5 0 0 1 0 1h-1v1a.5.5 0 0 1-1 0v-1h-1a.5.5 0 0 1 0-1h1v-1a.5.5 0 0 1 1 0\\\"/><path d=\\\"M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h5.5V0zm.5 7.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1\\\" opacity=\\\".3\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-diff-unified\\\" viewBox=\\\"0 0 16 16\\\">\\n <path fill-rule=\\\"evenodd\\\" d=\\\"M16 14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8.5h16zm-8-4a.5.5 0 0 0-.5.5v1h-1a.5.5 0 0 0 0 1h1v1a.5.5 0 0 0 1 0v-1h1a.5.5 0 0 0 0-1h-1v-1A.5.5 0 0 0 8 10\\\" clip-rule=\\\"evenodd\\\"/><path fill-rule=\\\"evenodd\\\" d=\\\"M14 0a2 2 0 0 1 2 2v5.5H0V2a2 2 0 0 1 2-2zM6.5 3.5a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1z\\\" clip-rule=\\\"evenodd\\\" opacity=\\\".4\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-expand\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M3.47 5.47a.75.75 0 0 1 1.06 0L8 8.94l3.47-3.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 0 1 0-1.06\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-expand-all\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M11.47 9.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 1 1 1.06-1.06L8 12.94zM7.526 1.418a.75.75 0 0 1 1.004.052l4 4a.75.75 0 1 1-1.06 1.06L8 3.06 4.53 6.53a.75.75 0 1 1-1.06-1.06l4-4z\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-file-code\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M10.75 0c.199 0 .39.08.53.22l3.5 3.5c.14.14.22.331.22.53v9A2.75 2.75 0 0 1 12.25 16h-8.5A2.75 2.75 0 0 1 1 13.25V2.75A2.75 2.75 0 0 1 3.75 0zm-7 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h8.5c.69 0 1.25-.56 1.25-1.25V5h-1.25A2.25 2.25 0 0 1 10 2.75V1.5z\\\"/><path d=\\\"M7.248 6.19a.75.75 0 0 1 .063 1.058L5.753 9l1.558 1.752a.75.75 0 0 1-1.122.996l-2-2.25a.75.75 0 0 1 0-.996l2-2.25a.75.75 0 0 1 1.06-.063M8.69 7.248a.75.75 0 1 1 1.12-.996l2 2.25a.75.75 0 0 1 0 .996l-2 2.25a.75.75 0 1 1-1.12-.996L10.245 9z\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-plus\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M8 3a.75.75 0 0 1 .75.75v3.5h3.5a.75.75 0 0 1 0 1.5h-3.5v3.5a.75.75 0 0 1-1.5 0v-3.5h-3.5a.75.75 0 0 1 0-1.5h3.5v-3.5A.75.75 0 0 1 8 3\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-symbol-added\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M8 4a.75.75 0 0 1 .75.75v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5A.75.75 0 0 1 8 4\\\"/><path d=\\\"M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-symbol-deleted\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M4 8a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5A.75.75 0 0 1 4 8\\\"/><path d=\\\"M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-symbol-diffstat\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8\\\"/><path d=\\\"M8.75 4.296a.75.75 0 0 0-1.5 0V6.25h-2a.75.75 0 0 0 0 1.5h2v1.5h1.5v-1.5h2a.75.75 0 0 0 0-1.5h-2zM5.25 10a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5z\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-symbol-ignored\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m11.53-2.47a.75.75 0 0 0-1.06-1.06l-6 6a.75.75 0 1 0 1.06 1.06z\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-symbol-modified\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706s.826.607 1.706.802c.898.2 2.091.288 3.704.288s2.806-.088 3.704-.288c.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5s-2.806.088-3.704.288c-.88.196-1.381.478-1.706.802s-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8M0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m8 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-symbol-moved\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M1.788 4.296c.196-.88.478-1.381.802-1.706s.826-.606 1.706-.802C5.194 1.588 6.387 1.5 8 1.5s2.806.088 3.704.288c.88.196 1.381.478 1.706.802s.607.826.802 1.706c.2.898.288 2.091.288 3.704s-.088 2.806-.288 3.704c-.195.88-.478 1.381-.802 1.706s-.826.607-1.706.802c-.898.2-2.091.288-3.704.288s-2.806-.088-3.704-.288c-.88-.195-1.381-.478-1.706-.802s-.606-.826-.802-1.706C1.588 10.806 1.5 9.613 1.5 8s.088-2.806.288-3.704M8 0C1.412 0 0 1.412 0 8s1.412 8 8 8 8-1.412 8-8-1.412-8-8-8\\\"/><path d=\\\"M8.495 4.695a.75.75 0 0 0-.05 1.06L10.486 8l-2.041 2.246a.75.75 0 0 0 1.11 1.008l2.5-2.75a.75.75 0 0 0 0-1.008l-2.5-2.75a.75.75 0 0 0-1.06-.051m-4 0a.75.75 0 0 0-.05 1.06l2.044 2.248-1.796 1.995a.75.75 0 0 0 1.114 1.004l2.25-2.5a.75.75 0 0 0-.002-1.007l-2.5-2.75a.75.75 0 0 0-1.06-.05\\\"/>\\n </symbol>\\n <symbol id=\\\"diffs-icon-symbol-ref\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706.286.286.71.54 1.41.73V1.86c-.7.19-1.124.444-1.41.73-.324.325-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8m4 6.397c.697.07 1.522.103 2.5.103 1.613 0 2.806-.088 3.704-.288.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5c-.978 0-1.803.033-2.5.103zM0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m7-2a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1z\\\"/>\\n </symbol>\\n</svg>\";\n//# sourceMappingURL=sprite.d.ts.map"],"mappings":";KAAYA,cAAAA;AAAAA,cACSC,cAAAA,GADK,y4QAAA"}
1
+ {"version":3,"file":"sprite.d.ts","names":[],"sources":["../src/sprite.ts"],"mappings":";KAAY,cAAA;AAAA,cAmBC,cAAA"}
package/dist/sprite.js CHANGED
@@ -52,7 +52,7 @@ const SVGSpriteSheet = `<svg data-icon-sprite aria-hidden="true" width="0" heigh
52
52
  <path d="M1.5 8c0 1.613.088 2.806.288 3.704.196.88.478 1.381.802 1.706.286.286.71.54 1.41.73V1.86c-.7.19-1.124.444-1.41.73-.324.325-.606.826-.802 1.706C1.588 5.194 1.5 6.387 1.5 8m4 6.397c.697.07 1.522.103 2.5.103 1.613 0 2.806-.088 3.704-.288.88-.195 1.381-.478 1.706-.802s.607-.826.802-1.706c.2-.898.288-2.091.288-3.704s-.088-2.806-.288-3.704c-.195-.88-.478-1.381-.802-1.706s-.826-.606-1.706-.802C10.806 1.588 9.613 1.5 8 1.5c-.978 0-1.803.033-2.5.103zM0 8c0-6.588 1.412-8 8-8s8 1.412 8 8-1.412 8-8 8-8-1.412-8-8m7-2a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1z"/>
53
53
  </symbol>
54
54
  </svg>`;
55
-
56
55
  //#endregion
57
56
  export { SVGSpriteSheet };
57
+
58
58
  //# sourceMappingURL=sprite.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileDiffReact.d.ts","names":["CSSProperties","ReactNode","DiffLineAnnotation","FileDiffSsrProps","LAnnotation","FileDiffSSR","prerenderedHTML","annotations","className","style","renderAnnotation","React","JSX","Element"],"sources":["../../src/ssr/FileDiffReact.d.ts"],"sourcesContent":["import { type CSSProperties, type ReactNode } from 'react';\nimport type { DiffLineAnnotation } from '../types';\ninterface FileDiffSsrProps<LAnnotation> {\n prerenderedHTML: string;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n renderAnnotation?(annotations: DiffLineAnnotation<LAnnotation>): ReactNode;\n className?: string;\n style?: CSSProperties;\n}\nexport declare function FileDiffSSR<LAnnotation>({ prerenderedHTML, annotations, className, style, renderAnnotation }: FileDiffSsrProps<LAnnotation>): React.JSX.Element;\nexport {};\n//# sourceMappingURL=FileDiffReact.d.ts.map"],"mappings":";;;;UAEUG;;EAAAA,WAAAA,CAAAA,EAEQD,kBAFQE,CAEWA,WAFX,CAAA,EAAA;EAEWA,gBAAAA,EAAAA,WAAAA,EACFF,kBADEE,CACiBA,WADjBA,CAAAA,CAAAA,EACgCH,SADhCG;EAAnBF,SAAAA,CAAAA,EAAAA,MAAAA;EACoCE,KAAAA,CAAAA,EAE1CJ,aAF0CI;;AAAeH,iBAI7CI,WAJ6CJ,CAAAA,WAAAA,CAAAA,CAAAA;EAAAA,eAAAA;EAAAA,WAAAA;EAAAA,SAAAA;EAAAA,KAAAA;EAAAA;AAAAA,CAAAA,EAIkDE,gBAJlDF,CAImEG,WAJnEH,CAAAA,CAAAA,EAIkFU,KAAAA,CAAMC,GAAAA,CAAIC,OAJ5FZ"}
1
+ {"version":3,"file":"FileDiffReact.d.ts","names":[],"sources":["../../src/ssr/FileDiffReact.tsx"],"mappings":";;;;UAUU,gBAAA;EACR,eAAA;EACA,WAAA,GAAc,kBAAA,CAAmB,WAAA;EACjC,gBAAA,EAAkB,WAAA,EAAa,kBAAA,CAAmB,WAAA,IAAe,SAAA;EACjE,SAAA;EACA,KAAA,GAAQ,aAAA;AAAA;AAAA,iBAuBM,WAAA;EACd,eAAA;EACA,WAAA;EACA,SAAA;EACA,KAAA;EACA;AAAA,GACC,gBAAA,CAAiB,WAAA,IAAe,KAAA,CAAM,GAAA,CAAI,OAAA"}
@@ -1,13 +1,10 @@
1
- 'use client';
2
-
3
-
1
+ "use client";
4
2
  import { DIFFS_TAG_NAME } from "../constants.js";
5
3
  import { getLineAnnotationName } from "../utils/getLineAnnotationName.js";
6
4
  import { useEffect, useRef } from "react";
5
+ import { jsx } from "react/jsx-runtime";
7
6
  import { hydrateRoot } from "react-dom/client";
8
7
  import { renderToString } from "react-dom/server";
9
- import { jsx } from "react/jsx-runtime";
10
-
11
8
  //#region src/ssr/FileDiffReact.tsx
12
9
  function escapeHtml(unsafe) {
13
10
  return unsafe.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
@@ -32,8 +29,8 @@ function FileDiffSSR({ prerenderedHTML, annotations, className, style, renderAnn
32
29
  if (!(slotElement instanceof HTMLElement)) return;
33
30
  const slotName = slotElement.getAttribute("slot");
34
31
  if (slotName === null) return;
35
- const annotation = annotations.find((annotation$1) => {
36
- return slotName === getLineAnnotationName(annotation$1);
32
+ const annotation = annotations.find((annotation) => {
33
+ return slotName === getLineAnnotationName(annotation);
37
34
  });
38
35
  if (annotation !== void 0 && renderAnnotation != null) hydrateRoot(slotElement, renderAnnotation(annotation));
39
36
  });
@@ -47,7 +44,7 @@ function FileDiffSSR({ prerenderedHTML, annotations, className, style, renderAnn
47
44
  suppressHydrationWarning: true
48
45
  });
49
46
  }
50
-
51
47
  //#endregion
52
48
  export { FileDiffSSR };
49
+
53
50
  //# sourceMappingURL=FileDiffReact.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileDiffReact.js","names":["annotation"],"sources":["../../src/ssr/FileDiffReact.tsx"],"sourcesContent":["'use client';\n\nimport { type CSSProperties, type ReactNode, useEffect, useRef } from 'react';\nimport { hydrateRoot } from 'react-dom/client';\nimport { renderToString } from 'react-dom/server';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { DiffLineAnnotation } from '../types';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\n\ninterface FileDiffSsrProps<LAnnotation> {\n prerenderedHTML: string;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n renderAnnotation?(annotations: DiffLineAnnotation<LAnnotation>): ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction escapeHtml(unsafe: string): string {\n return unsafe\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n}\n\nfunction serializeStyle(style: CSSProperties): string {\n return Object.entries(style)\n .map(([key, value]) => {\n // Convert camelCase to kebab-case\n const kebabKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n // Escape the value for safety\n return `${kebabKey}:${escapeHtml(String(value))}`;\n })\n .join(';');\n}\n\nexport function FileDiffSSR<LAnnotation>({\n prerenderedHTML,\n annotations,\n className,\n style,\n renderAnnotation,\n}: FileDiffSsrProps<LAnnotation>): React.JSX.Element {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const hydratedRef = useRef(false);\n\n // Store the HTML object in a ref so it has a stable reference\n // This prevents React from trying to update innerHTML on every render\n const htmlObjectRef = useRef<{ __html: string } | null>(null);\n\n if (htmlObjectRef.current === null) {\n // Build the full HTML string with the custom element and DSD\n const classAttr =\n className !== undefined ? ` class=\"${escapeHtml(className)}\"` : '';\n const styleAttr =\n style !== undefined ? ` style=\"${serializeStyle(style)}\"` : '';\n\n // Render annotations as static HTML slots for SSR\n const annotationSlots =\n annotations !== undefined &&\n annotations.length > 0 &&\n renderAnnotation != null\n ? annotations\n .map((annotation) => {\n const slotName = getLineAnnotationName(annotation);\n // Render the component with React markers for proper hydration\n const content = renderToString(renderAnnotation(annotation));\n return `<div slot=\"${slotName}\">${content}</div>`;\n })\n .join('')\n : '';\n\n const fullHTML = `<${DIFFS_TAG_NAME}${classAttr}${styleAttr}><template shadowrootmode=\"open\">${prerenderedHTML}</template>${annotationSlots}</${DIFFS_TAG_NAME}>`;\n\n htmlObjectRef.current = { __html: fullHTML };\n }\n\n useEffect(() => {\n // After mount, hydrate the slots with React using render functions\n if (\n wrapperRef.current !== null &&\n annotations !== undefined &&\n !hydratedRef.current\n ) {\n const fileElement = wrapperRef.current.querySelector(DIFFS_TAG_NAME);\n\n if (fileElement !== null) {\n Array.from(fileElement.children).forEach((slotElement) => {\n if (!(slotElement instanceof HTMLElement)) return;\n\n const slotName = slotElement.getAttribute('slot');\n if (slotName === null) return;\n\n // Find the matching annotation\n const annotation = annotations.find((annotation) => {\n return slotName === getLineAnnotationName(annotation);\n });\n\n if (annotation !== undefined && renderAnnotation != null) {\n hydrateRoot(slotElement, renderAnnotation(annotation));\n }\n });\n\n hydratedRef.current = true;\n }\n }\n }, [annotations, renderAnnotation]);\n\n return (\n <div\n ref={wrapperRef}\n dangerouslySetInnerHTML={htmlObjectRef.current}\n suppressHydrationWarning\n />\n );\n}\n"],"mappings":";;;;;;;;;;;AAkBA,SAAS,WAAW,QAAwB;AAC1C,QAAO,OACJ,QAAQ,MAAM,QAAQ,CACtB,QAAQ,MAAM,OAAO,CACrB,QAAQ,MAAM,OAAO,CACrB,QAAQ,MAAM,SAAS,CACvB,QAAQ,MAAM,SAAS;;AAG5B,SAAS,eAAe,OAA8B;AACpD,QAAO,OAAO,QAAQ,MAAM,CACzB,KAAK,CAAC,KAAK,WAAW;AAIrB,SAAO,GAFU,IAAI,QAAQ,YAAY,MAAM,CAAC,aAAa,CAE1C,GAAG,WAAW,OAAO,MAAM,CAAC;GAC/C,CACD,KAAK,IAAI;;AAGd,SAAgB,YAAyB,EACvC,iBACA,aACA,WACA,OACA,oBACmD;CACnD,MAAM,aAAa,OAAuB,KAAK;CAC/C,MAAM,cAAc,OAAO,MAAM;CAIjC,MAAM,gBAAgB,OAAkC,KAAK;AAE7D,KAAI,cAAc,YAAY,KAwB5B,eAAc,UAAU,EAAE,QAFT,IAAI,iBAnBnB,cAAc,SAAY,WAAW,WAAW,UAAU,CAAC,KAAK,KAEhE,UAAU,SAAY,WAAW,eAAe,MAAM,CAAC,KAAK,GAiBF,mCAAmC,gBAAgB,aAb7G,gBAAgB,UAChB,YAAY,SAAS,KACrB,oBAAoB,OAChB,YACG,KAAK,eAAe;AAInB,SAAO,cAHU,sBAAsB,WAAW,CAGpB,IADd,eAAe,iBAAiB,WAAW,CAAC,CAClB;GAC1C,CACD,KAAK,GAAG,GACX,GAEsI,IAAI,eAAe,IAEnH;AAG9C,iBAAgB;AAEd,MACE,WAAW,YAAY,QACvB,gBAAgB,UAChB,CAAC,YAAY,SACb;GACA,MAAM,cAAc,WAAW,QAAQ,cAAc,eAAe;AAEpE,OAAI,gBAAgB,MAAM;AACxB,UAAM,KAAK,YAAY,SAAS,CAAC,SAAS,gBAAgB;AACxD,SAAI,EAAE,uBAAuB,aAAc;KAE3C,MAAM,WAAW,YAAY,aAAa,OAAO;AACjD,SAAI,aAAa,KAAM;KAGvB,MAAM,aAAa,YAAY,MAAM,iBAAe;AAClD,aAAO,aAAa,sBAAsBA,aAAW;OACrD;AAEF,SAAI,eAAe,UAAa,oBAAoB,KAClD,aAAY,aAAa,iBAAiB,WAAW,CAAC;MAExD;AAEF,gBAAY,UAAU;;;IAGzB,CAAC,aAAa,iBAAiB,CAAC;AAEnC,QACE,oBAAC;EACC,KAAK;EACL,yBAAyB,cAAc;EACvC;GACA"}
1
+ {"version":3,"file":"FileDiffReact.js","names":[],"sources":["../../src/ssr/FileDiffReact.tsx"],"sourcesContent":["'use client';\n\nimport { type CSSProperties, type ReactNode, useEffect, useRef } from 'react';\nimport { hydrateRoot } from 'react-dom/client';\nimport { renderToString } from 'react-dom/server';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { DiffLineAnnotation } from '../types';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\n\ninterface FileDiffSsrProps<LAnnotation> {\n prerenderedHTML: string;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n renderAnnotation?(annotations: DiffLineAnnotation<LAnnotation>): ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction escapeHtml(unsafe: string): string {\n return unsafe\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n}\n\nfunction serializeStyle(style: CSSProperties): string {\n return Object.entries(style)\n .map(([key, value]) => {\n // Convert camelCase to kebab-case\n const kebabKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n // Escape the value for safety\n return `${kebabKey}:${escapeHtml(String(value))}`;\n })\n .join(';');\n}\n\nexport function FileDiffSSR<LAnnotation>({\n prerenderedHTML,\n annotations,\n className,\n style,\n renderAnnotation,\n}: FileDiffSsrProps<LAnnotation>): React.JSX.Element {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const hydratedRef = useRef(false);\n\n // Store the HTML object in a ref so it has a stable reference\n // This prevents React from trying to update innerHTML on every render\n const htmlObjectRef = useRef<{ __html: string } | null>(null);\n\n if (htmlObjectRef.current === null) {\n // Build the full HTML string with the custom element and DSD\n const classAttr =\n className !== undefined ? ` class=\"${escapeHtml(className)}\"` : '';\n const styleAttr =\n style !== undefined ? ` style=\"${serializeStyle(style)}\"` : '';\n\n // Render annotations as static HTML slots for SSR\n const annotationSlots =\n annotations !== undefined &&\n annotations.length > 0 &&\n renderAnnotation != null\n ? annotations\n .map((annotation) => {\n const slotName = getLineAnnotationName(annotation);\n // Render the component with React markers for proper hydration\n const content = renderToString(renderAnnotation(annotation));\n return `<div slot=\"${slotName}\">${content}</div>`;\n })\n .join('')\n : '';\n\n const fullHTML = `<${DIFFS_TAG_NAME}${classAttr}${styleAttr}><template shadowrootmode=\"open\">${prerenderedHTML}</template>${annotationSlots}</${DIFFS_TAG_NAME}>`;\n\n htmlObjectRef.current = { __html: fullHTML };\n }\n\n useEffect(() => {\n // After mount, hydrate the slots with React using render functions\n if (\n wrapperRef.current !== null &&\n annotations !== undefined &&\n !hydratedRef.current\n ) {\n const fileElement = wrapperRef.current.querySelector(DIFFS_TAG_NAME);\n\n if (fileElement !== null) {\n Array.from(fileElement.children).forEach((slotElement) => {\n if (!(slotElement instanceof HTMLElement)) return;\n\n const slotName = slotElement.getAttribute('slot');\n if (slotName === null) return;\n\n // Find the matching annotation\n const annotation = annotations.find((annotation) => {\n return slotName === getLineAnnotationName(annotation);\n });\n\n if (annotation !== undefined && renderAnnotation != null) {\n hydrateRoot(slotElement, renderAnnotation(annotation));\n }\n });\n\n hydratedRef.current = true;\n }\n }\n }, [annotations, renderAnnotation]);\n\n return (\n <div\n ref={wrapperRef}\n dangerouslySetInnerHTML={htmlObjectRef.current}\n suppressHydrationWarning\n />\n );\n}\n"],"mappings":";;;;;;;;AAkBA,SAAS,WAAW,QAAwB;CAC1C,OAAO,OACJ,QAAQ,MAAM,OAAO,CAAC,CACtB,QAAQ,MAAM,MAAM,CAAC,CACrB,QAAQ,MAAM,MAAM,CAAC,CACrB,QAAQ,MAAM,QAAQ,CAAC,CACvB,QAAQ,MAAM,QAAQ;AAC3B;AAEA,SAAS,eAAe,OAA8B;CACpD,OAAO,OAAO,QAAQ,KAAK,CAAC,CACzB,KAAK,CAAC,KAAK,WAAW;EAIrB,OAAO,GAFU,IAAI,QAAQ,YAAY,KAAK,CAAC,CAAC,YAE/B,EAAE,GAAG,WAAW,OAAO,KAAK,CAAC;CAChD,CAAC,CAAC,CACD,KAAK,GAAG;AACb;AAEA,SAAgB,YAAyB,EACvC,iBACA,aACA,WACA,OACA,oBACmD;CACnD,MAAM,aAAa,OAAuB,IAAI;CAC9C,MAAM,cAAc,OAAO,KAAK;CAIhC,MAAM,gBAAgB,OAAkC,IAAI;CAE5D,IAAI,cAAc,YAAY,MAwB5B,cAAc,UAAU,EAAE,QAAQ,IAFb,iBAnBnB,cAAc,KAAA,IAAY,WAAW,WAAW,SAAS,EAAE,KAAK,KAEhE,UAAU,KAAA,IAAY,WAAW,eAAe,KAAK,EAAE,KAAK,GAiBF,mCAAmC,gBAAgB,aAb7G,gBAAgB,KAAA,KAChB,YAAY,SAAS,KACrB,oBAAoB,OAChB,YACG,KAAK,eAAe;EAInB,OAAO,cAHU,sBAAsB,UAGX,EAAE,IADd,eAAe,iBAAiB,UAAU,CAClB,EAAE;CAC5C,CAAC,CAAC,CACD,KAAK,EAAE,IACV,GAEsI,IAAI,eAAe,GAEpH;CAG7C,gBAAgB;EAEd,IACE,WAAW,YAAY,QACvB,gBAAgB,KAAA,KAChB,CAAC,YAAY,SACb;GACA,MAAM,cAAc,WAAW,QAAQ,cAAc,cAAc;GAEnE,IAAI,gBAAgB,MAAM;IACxB,MAAM,KAAK,YAAY,QAAQ,CAAC,CAAC,SAAS,gBAAgB;KACxD,IAAI,EAAE,uBAAuB,cAAc;KAE3C,MAAM,WAAW,YAAY,aAAa,MAAM;KAChD,IAAI,aAAa,MAAM;KAGvB,MAAM,aAAa,YAAY,MAAM,eAAe;MAClD,OAAO,aAAa,sBAAsB,UAAU;KACtD,CAAC;KAED,IAAI,eAAe,KAAA,KAAa,oBAAoB,MAClD,YAAY,aAAa,iBAAiB,UAAU,CAAC;IAEzD,CAAC;IAED,YAAY,UAAU;GACxB;EACF;CACF,GAAG,CAAC,aAAa,gBAAgB,CAAC;CAElC,OACE,oBAAC,OAAD;EACE,KAAK;EACL,yBAAyB,cAAc;EACvC,0BAAA;CACD,CAAA;AAEL"}
@@ -1,6 +1,6 @@
1
- import { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, BundledLanguage, ChangeContent, ChangeTypes, CodeColumnType, CodeToHastOptions, CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewRangeScrollTarget, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, CreatePatchOptionsNonabortable, CustomPreProperties, DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsBaseComponent, DiffsComponentOptions, DiffsEditableComponent, DiffsEditor, DiffsEditorSelection, DiffsHighlighter, DiffsTextDocument, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MergeConflictActionPayload, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, ShikiTransformer, SmoothScrollSettings, StickySpecs, SupportedLanguages, ThemeRegistration, ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, ThemedToken, ThemesType, TokenEventBase, VirtualFileMetrics, VirtualWindowSpecs } from "../types.js";
1
+ import { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, BundledLanguage, ChangeContent, ChangeTypes, CodeColumnType, CodeToHastOptions, CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewRangeScrollTarget, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, CreatePatchOptionsNonabortable, CustomPreProperties, DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsBaseComponent, DiffsComponentOptions, DiffsEditableComponent, DiffsEditor, DiffsEditorSelection, DiffsHighlighter, DiffsTextDocument, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MergeConflictActionPayload, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, ShikiTransformer, SmoothScrollSettings, StickySpecs, SupportedLanguages, ThemeRegistration, ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, ThemedToken, ThemesType, TokenEventBase, VirtualFileMetrics, VirtualWindowSpecs } from "../types.js";
2
2
  import { PreloadDiffOptions, PreloadFileDiffOptions, PreloadFileDiffResult, PreloadMultiFileDiffOptions, PreloadMultiFileDiffResult, PreloadPatchDiffOptions, PreloadPatchDiffResult, PreloadUnresolvedFileOptions, PreloadUnresolvedFileResult, preloadDiffHTML, preloadFileDiff, preloadMultiFileDiff, preloadPatchDiff, preloadUnresolvedFile, preloadUnresolvedFileHTML } from "./preloadDiffs.js";
3
3
  import { PreloadFileOptions, PreloadedFileResult, preloadFile } from "./preloadFile.js";
4
4
  import { PreloadPatchFileOptions, preloadPatchFile } from "./preloadPatchFile.js";
5
5
  import { renderHTML } from "./renderHTML.js";
6
- export { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, BundledLanguage, ChangeContent, ChangeTypes, CodeColumnType, CodeToHastOptions, CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewRangeScrollTarget, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, CreatePatchOptionsNonabortable, CustomPreProperties, DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsBaseComponent, DiffsComponentOptions, DiffsEditableComponent, DiffsEditor, DiffsEditorSelection, DiffsHighlighter, DiffsTextDocument, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MergeConflictActionPayload, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, PreloadDiffOptions, PreloadFileDiffOptions, PreloadFileDiffResult, PreloadFileOptions, PreloadMultiFileDiffOptions, PreloadMultiFileDiffResult, PreloadPatchDiffOptions, PreloadPatchDiffResult, PreloadPatchFileOptions, PreloadUnresolvedFileOptions, PreloadUnresolvedFileResult, PreloadedFileResult, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, ShikiTransformer, SmoothScrollSettings, StickySpecs, SupportedLanguages, ThemeRegistration, ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, ThemedToken, ThemesType, TokenEventBase, VirtualFileMetrics, VirtualWindowSpecs, preloadDiffHTML, preloadFile, preloadFileDiff, preloadMultiFileDiff, preloadPatchDiff, preloadPatchFile, preloadUnresolvedFile, preloadUnresolvedFileHTML, renderHTML };
6
+ export { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, type BundledLanguage, ChangeContent, ChangeTypes, CodeColumnType, type CodeToHastOptions, CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewRangeScrollTarget, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, type CreatePatchOptionsNonabortable, CustomPreProperties, type DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsBaseComponent, DiffsComponentOptions, DiffsEditableComponent, DiffsEditor, DiffsEditorSelection, DiffsHighlighter, DiffsTextDocument, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, type LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MergeConflictActionPayload, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, PreloadDiffOptions, PreloadFileDiffOptions, PreloadFileDiffResult, PreloadFileOptions, PreloadMultiFileDiffOptions, PreloadMultiFileDiffResult, PreloadPatchDiffOptions, PreloadPatchDiffResult, PreloadPatchFileOptions, PreloadUnresolvedFileOptions, PreloadUnresolvedFileResult, PreloadedFileResult, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, type ShikiTransformer, SmoothScrollSettings, StickySpecs, SupportedLanguages, type ThemeRegistration, type ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, type ThemedToken, ThemesType, TokenEventBase, VirtualFileMetrics, VirtualWindowSpecs, preloadDiffHTML, preloadFile, preloadFileDiff, preloadMultiFileDiff, preloadPatchDiff, preloadPatchFile, preloadUnresolvedFile, preloadUnresolvedFileHTML, renderHTML };
package/dist/ssr/index.js CHANGED
@@ -2,5 +2,4 @@ import { renderHTML } from "./renderHTML.js";
2
2
  import { preloadDiffHTML, preloadFileDiff, preloadMultiFileDiff, preloadPatchDiff, preloadUnresolvedFile, preloadUnresolvedFileHTML } from "./preloadDiffs.js";
3
3
  import { preloadFile } from "./preloadFile.js";
4
4
  import { preloadPatchFile } from "./preloadPatchFile.js";
5
-
6
- export { preloadDiffHTML, preloadFile, preloadFileDiff, preloadMultiFileDiff, preloadPatchDiff, preloadPatchFile, preloadUnresolvedFile, preloadUnresolvedFileHTML, renderHTML };
5
+ export { preloadDiffHTML, preloadFile, preloadFileDiff, preloadMultiFileDiff, preloadPatchDiff, preloadPatchFile, preloadUnresolvedFile, preloadUnresolvedFileHTML, renderHTML };
@@ -1,6 +1,6 @@
1
1
  import { DiffLineAnnotation, FileContents, FileDiffMetadata } from "../types.js";
2
- import { UnresolvedFileOptions } from "../components/UnresolvedFile.js";
3
2
  import { FileDiffOptions } from "../components/FileDiff.js";
3
+ import { UnresolvedFileOptions } from "../components/UnresolvedFile.js";
4
4
 
5
5
  //#region src/ssr/preloadDiffs.d.ts
6
6
  interface PreloadDiffOptions<LAnnotation> {