@pierre/diffs 1.5.2 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/README.md +4 -3
  2. package/dist/components/CodeView.d.ts +3 -2
  3. package/dist/components/CodeView.d.ts.map +1 -1
  4. package/dist/components/CodeView.js +24 -19
  5. package/dist/components/CodeView.js.map +1 -1
  6. package/dist/components/File.d.ts +31 -9
  7. package/dist/components/File.d.ts.map +1 -1
  8. package/dist/components/File.js +176 -90
  9. package/dist/components/File.js.map +1 -1
  10. package/dist/components/FileDiff.d.ts +32 -9
  11. package/dist/components/FileDiff.d.ts.map +1 -1
  12. package/dist/components/FileDiff.js +225 -131
  13. package/dist/components/FileDiff.js.map +1 -1
  14. package/dist/components/FileStream.d.ts +6 -4
  15. package/dist/components/FileStream.d.ts.map +1 -1
  16. package/dist/components/FileStream.js +49 -36
  17. package/dist/components/FileStream.js.map +1 -1
  18. package/dist/components/UnresolvedFile.d.ts +14 -4
  19. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  20. package/dist/components/UnresolvedFile.js +35 -16
  21. package/dist/components/UnresolvedFile.js.map +1 -1
  22. package/dist/components/VirtualizedFile.d.ts +3 -2
  23. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  24. package/dist/components/VirtualizedFile.js +28 -20
  25. package/dist/components/VirtualizedFile.js.map +1 -1
  26. package/dist/components/VirtualizedFileDiff.d.ts +3 -2
  27. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  28. package/dist/components/VirtualizedFileDiff.js +31 -24
  29. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  30. package/dist/constants.d.ts +4 -2
  31. package/dist/constants.d.ts.map +1 -1
  32. package/dist/constants.js +3 -1
  33. package/dist/constants.js.map +1 -1
  34. package/dist/editor/editor.d.ts +2 -1
  35. package/dist/editor/editor.d.ts.map +1 -1
  36. package/dist/editor/editor.js +5 -1
  37. package/dist/editor/editor.js.map +1 -1
  38. package/dist/editor/platform.d.ts +1 -1
  39. package/dist/editor/platform.js +5 -4
  40. package/dist/editor/platform.js.map +1 -1
  41. package/dist/editor/selection.d.ts +2 -2
  42. package/dist/editor/selection.d.ts.map +1 -1
  43. package/dist/editor/selection.js +31 -6
  44. package/dist/editor/selection.js.map +1 -1
  45. package/dist/editor/tokenizer.d.ts +6 -4
  46. package/dist/editor/tokenizer.d.ts.map +1 -1
  47. package/dist/editor/tokenizer.js +25 -470
  48. package/dist/editor/tokenizer.js.map +1 -1
  49. package/dist/highlighter/DiffsEditorTokenizer.d.ts +16 -0
  50. package/dist/highlighter/DiffsEditorTokenizer.d.ts.map +1 -0
  51. package/dist/highlighter/DiffsEditorTokenizer.js +0 -0
  52. package/dist/highlighter/DiffsHighlighter.d.ts +41 -0
  53. package/dist/highlighter/DiffsHighlighter.d.ts.map +1 -0
  54. package/dist/highlighter/DiffsHighlighter.js +39 -0
  55. package/dist/highlighter/DiffsHighlighter.js.map +1 -0
  56. package/dist/highlighter/backends/highlights.d.ts +26 -0
  57. package/dist/highlighter/backends/highlights.d.ts.map +1 -0
  58. package/dist/highlighter/backends/highlights.js +71 -0
  59. package/dist/highlighter/backends/highlights.js.map +1 -0
  60. package/dist/highlighter/backends/shiki.d.ts +27 -0
  61. package/dist/highlighter/backends/shiki.d.ts.map +1 -0
  62. package/dist/highlighter/backends/shiki.js +107 -0
  63. package/dist/highlighter/backends/shiki.js.map +1 -0
  64. package/dist/highlighter/highlighterType.d.ts +13 -0
  65. package/dist/highlighter/highlighterType.d.ts.map +1 -0
  66. package/dist/highlighter/highlighterType.js +32 -0
  67. package/dist/highlighter/highlighterType.js.map +1 -0
  68. package/dist/highlighter/highlights-editor.d.ts +24 -0
  69. package/dist/highlighter/highlights-editor.d.ts.map +1 -0
  70. package/dist/highlighter/highlights-editor.js +166 -0
  71. package/dist/highlighter/highlights-editor.js.map +1 -0
  72. package/dist/highlighter/highlights-stream.d.ts +20 -0
  73. package/dist/highlighter/highlights-stream.d.ts.map +1 -0
  74. package/dist/highlighter/highlights-stream.js +93 -0
  75. package/dist/highlighter/highlights-stream.js.map +1 -0
  76. package/dist/highlighter/languages/areLanguagesAttached.d.ts +2 -1
  77. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  78. package/dist/highlighter/languages/areLanguagesAttached.js +4 -6
  79. package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
  80. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +6 -1
  81. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  82. package/dist/highlighter/languages/attachResolvedLanguages.js +6 -11
  83. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  84. package/dist/highlighter/languages/constants.d.ts +1 -1
  85. package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -1
  86. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
  87. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
  88. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  89. package/dist/highlighter/languages/resolveLanguage.js +19 -16
  90. package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
  91. package/dist/highlighter/languages/resolveLanguages.d.ts +1 -1
  92. package/dist/highlighter/shared_highlighter.d.ts +24 -9
  93. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  94. package/dist/highlighter/shared_highlighter.js +59 -47
  95. package/dist/highlighter/shared_highlighter.js.map +1 -1
  96. package/dist/highlighter/shiki-editor.d.ts +25 -0
  97. package/dist/highlighter/shiki-editor.d.ts.map +1 -0
  98. package/dist/highlighter/shiki-editor.js +483 -0
  99. package/dist/highlighter/shiki-editor.js.map +1 -0
  100. package/dist/highlighter/shiki-stream.d.ts +20 -0
  101. package/dist/highlighter/shiki-stream.d.ts.map +1 -0
  102. package/dist/highlighter/shiki-stream.js +60 -0
  103. package/dist/highlighter/shiki-stream.js.map +1 -0
  104. package/dist/highlighter/stream-tokenizer.d.ts +40 -0
  105. package/dist/highlighter/stream-tokenizer.d.ts.map +1 -0
  106. package/dist/highlighter/stream-tokenizer.js +70 -0
  107. package/dist/highlighter/stream-tokenizer.js.map +1 -0
  108. package/dist/highlighter/themes/areThemesAttached.d.ts +3 -2
  109. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  110. package/dist/highlighter/themes/areThemesAttached.js +5 -4
  111. package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
  112. package/dist/highlighter/themes/attachResolvedThemes.d.ts +5 -2
  113. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  114. package/dist/highlighter/themes/attachResolvedThemes.js +4 -16
  115. package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
  116. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts +3 -1
  117. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  118. package/dist/highlighter/themes/cleanUpResolvedThemes.js +8 -5
  119. package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
  120. package/dist/highlighter/themes/createCSSVariablesTheme.d.ts +7 -0
  121. package/dist/highlighter/themes/createCSSVariablesTheme.d.ts.map +1 -0
  122. package/dist/highlighter/themes/createCSSVariablesTheme.js +89 -0
  123. package/dist/highlighter/themes/createCSSVariablesTheme.js.map +1 -0
  124. package/dist/highlighter/themes/createCachedLoader.d.ts +5 -0
  125. package/dist/highlighter/themes/createCachedLoader.d.ts.map +1 -0
  126. package/dist/highlighter/themes/createCachedLoader.js +15 -0
  127. package/dist/highlighter/themes/createCachedLoader.js.map +1 -0
  128. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +3 -2
  129. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  130. package/dist/highlighter/themes/getResolvedOrResolveTheme.js +4 -4
  131. package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
  132. package/dist/highlighter/themes/getResolvedThemes.d.ts +3 -2
  133. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  134. package/dist/highlighter/themes/getResolvedThemes.js +4 -3
  135. package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
  136. package/dist/highlighter/themes/hasResolvedThemes.d.ts +2 -2
  137. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  138. package/dist/highlighter/themes/hasResolvedThemes.js +4 -3
  139. package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
  140. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  141. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +3 -3
  142. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
  143. package/dist/highlighter/themes/registerCustomTheme.d.ts +9 -4
  144. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  145. package/dist/highlighter/themes/registerCustomTheme.js +8 -16
  146. package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
  147. package/dist/highlighter/themes/resolveTheme.d.ts +3 -2
  148. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  149. package/dist/highlighter/themes/resolveTheme.js +4 -7
  150. package/dist/highlighter/themes/resolveTheme.js.map +1 -1
  151. package/dist/highlighter/themes/resolveThemes.d.ts +3 -2
  152. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  153. package/dist/highlighter/themes/resolveThemes.js +4 -7
  154. package/dist/highlighter/themes/resolveThemes.js.map +1 -1
  155. package/dist/highlighter/themes/themeResolver.d.ts +10 -4
  156. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  157. package/dist/highlighter/themes/themeResolver.js +141 -2
  158. package/dist/highlighter/themes/themeResolver.js.map +1 -1
  159. package/dist/highlighter/themes/types.d.ts +23 -0
  160. package/dist/highlighter/themes/types.d.ts.map +1 -0
  161. package/dist/highlighter/themes/types.js +0 -0
  162. package/dist/highlighter/tokenizer-types.d.ts +35 -0
  163. package/dist/highlighter/tokenizer-types.d.ts.map +1 -0
  164. package/dist/highlighter/tokenizer-types.js +0 -0
  165. package/dist/highlighter/types.d.ts +55 -0
  166. package/dist/highlighter/types.d.ts.map +1 -0
  167. package/dist/highlighter/types.js +0 -0
  168. package/dist/index.d.ts +22 -13
  169. package/dist/index.js +21 -18
  170. package/dist/managers/InteractionManager.d.ts.map +1 -1
  171. package/dist/managers/InteractionManager.js +2 -2
  172. package/dist/managers/InteractionManager.js.map +1 -1
  173. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +9 -1
  174. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
  175. package/dist/react/CodeView.d.ts +4 -3
  176. package/dist/react/CodeView.d.ts.map +1 -1
  177. package/dist/react/CodeView.js +47 -38
  178. package/dist/react/CodeView.js.map +1 -1
  179. package/dist/react/File.js +3 -3
  180. package/dist/react/File.js.map +1 -1
  181. package/dist/react/FileDiff.js +3 -3
  182. package/dist/react/FileDiff.js.map +1 -1
  183. package/dist/react/MultiFileDiff.js +2 -2
  184. package/dist/react/MultiFileDiff.js.map +1 -1
  185. package/dist/react/PatchDiff.js +3 -3
  186. package/dist/react/PatchDiff.js.map +1 -1
  187. package/dist/react/UnresolvedFile.js +2 -2
  188. package/dist/react/UnresolvedFile.js.map +1 -1
  189. package/dist/react/index.d.ts +9 -4
  190. package/dist/react/types.d.ts +4 -2
  191. package/dist/react/types.d.ts.map +1 -1
  192. package/dist/react/utils/renderDiffChildren.js +1 -1
  193. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  194. package/dist/react/utils/renderFileChildren.js +1 -1
  195. package/dist/react/utils/renderFileChildren.js.map +1 -1
  196. package/dist/react/utils/useFileDiffInstance.d.ts +1 -0
  197. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  198. package/dist/react/utils/useFileDiffInstance.js +29 -24
  199. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  200. package/dist/react/utils/useFileInstance.d.ts +2 -0
  201. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  202. package/dist/react/utils/useFileInstance.js +38 -28
  203. package/dist/react/utils/useFileInstance.js.map +1 -1
  204. package/dist/react/utils/useForceUpdate.d.ts +5 -0
  205. package/dist/react/utils/useForceUpdate.d.ts.map +1 -0
  206. package/dist/react/utils/useForceUpdate.js +27 -0
  207. package/dist/react/utils/useForceUpdate.js.map +1 -0
  208. package/dist/react/utils/useNextRenderData.d.ts +9 -0
  209. package/dist/react/utils/useNextRenderData.d.ts.map +1 -0
  210. package/dist/react/utils/useNextRenderData.js +9 -0
  211. package/dist/react/utils/useNextRenderData.js.map +1 -0
  212. package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -0
  213. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  214. package/dist/react/utils/useUnresolvedFileInstance.js +26 -11
  215. package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
  216. package/dist/renderers/DiffHunksRenderer.d.ts +4 -2
  217. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  218. package/dist/renderers/DiffHunksRenderer.js +82 -43
  219. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  220. package/dist/renderers/FileRenderer.d.ts +6 -2
  221. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  222. package/dist/renderers/FileRenderer.js +77 -43
  223. package/dist/renderers/FileRenderer.js.map +1 -1
  224. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  225. package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -1
  226. package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
  227. package/dist/shiki-stream/index.d.ts +3 -3
  228. package/dist/shiki-stream/index.js +1 -2
  229. package/dist/shiki-stream/stream.d.ts +4 -4
  230. package/dist/shiki-stream/stream.d.ts.map +1 -1
  231. package/dist/shiki-stream/stream.js +20 -9
  232. package/dist/shiki-stream/stream.js.map +1 -1
  233. package/dist/shiki-stream/types.d.ts +7 -38
  234. package/dist/shiki-stream/types.d.ts.map +1 -1
  235. package/dist/ssr/index.d.ts +7 -2
  236. package/dist/ssr/renderHTML.js +2 -2
  237. package/dist/ssr/renderHTML.js.map +1 -1
  238. package/dist/style.js +1 -1
  239. package/dist/style.js.map +1 -1
  240. package/dist/types.d.ts +20 -11
  241. package/dist/types.d.ts.map +1 -1
  242. package/dist/utils/canUseWASM.d.ts +13 -0
  243. package/dist/utils/canUseWASM.d.ts.map +1 -0
  244. package/dist/utils/canUseWASM.js +59 -0
  245. package/dist/utils/canUseWASM.js.map +1 -0
  246. package/dist/utils/createSpanNodeFromToken.d.ts +3 -2
  247. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  248. package/dist/utils/createSpanNodeFromToken.js +4 -5
  249. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  250. package/dist/utils/cssWrappers.d.ts.map +1 -1
  251. package/dist/utils/cssWrappers.js +12 -0
  252. package/dist/utils/cssWrappers.js.map +1 -1
  253. package/dist/utils/getCodeViewItemRenderData.d.ts +10 -0
  254. package/dist/utils/getCodeViewItemRenderData.d.ts.map +1 -0
  255. package/dist/utils/getCodeViewItemRenderData.js +19 -0
  256. package/dist/utils/getCodeViewItemRenderData.js.map +1 -0
  257. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  258. package/dist/utils/getHighlighterOptions.js +3 -2
  259. package/dist/utils/getHighlighterOptions.js.map +1 -1
  260. package/dist/utils/getHighlighterThemeStyles.d.ts +2 -1
  261. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  262. package/dist/utils/getHighlighterThemeStyles.js +13 -3
  263. package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
  264. package/dist/utils/getTokenOptions.d.ts +7 -0
  265. package/dist/utils/getTokenOptions.d.ts.map +1 -0
  266. package/dist/utils/getTokenOptions.js +16 -0
  267. package/dist/utils/getTokenOptions.js.map +1 -0
  268. package/dist/utils/hastToHtml.d.ts +10 -0
  269. package/dist/utils/hastToHtml.d.ts.map +1 -0
  270. package/dist/utils/hastToHtml.js +125 -0
  271. package/dist/utils/hastToHtml.js.map +1 -0
  272. package/dist/utils/hydratePartialDiff.js +4 -0
  273. package/dist/utils/hydratePartialDiff.js.map +1 -1
  274. package/dist/utils/parseDiffDecorations.d.ts +2 -1
  275. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  276. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  277. package/dist/utils/parseMergeConflictDiffFromFile.js +2 -0
  278. package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
  279. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  280. package/dist/utils/parsePatchFiles.js +24 -4
  281. package/dist/utils/parsePatchFiles.js.map +1 -1
  282. package/dist/utils/renderDiffWithHighlighter.d.ts +3 -2
  283. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  284. package/dist/utils/renderDiffWithHighlighter.js +33 -48
  285. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  286. package/dist/utils/renderFileWithHighlighter.d.ts +3 -2
  287. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  288. package/dist/utils/renderFileWithHighlighter.js +10 -26
  289. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  290. package/dist/utils/renderTokenLines.d.ts +22 -0
  291. package/dist/utils/renderTokenLines.d.ts.map +1 -0
  292. package/dist/utils/renderTokenLines.js +250 -0
  293. package/dist/utils/renderTokenLines.js.map +1 -0
  294. package/dist/utils/resolvePreferredHighlighter.d.ts +13 -0
  295. package/dist/utils/resolvePreferredHighlighter.d.ts.map +1 -0
  296. package/dist/utils/resolvePreferredHighlighter.js +11 -0
  297. package/dist/utils/resolvePreferredHighlighter.js.map +1 -0
  298. package/dist/utils/resolveRegion.js +20 -10
  299. package/dist/utils/resolveRegion.js.map +1 -1
  300. package/dist/utils/setDeferredArrayItem.d.ts +5 -0
  301. package/dist/utils/setDeferredArrayItem.d.ts.map +1 -0
  302. package/dist/utils/setDeferredArrayItem.js +39 -0
  303. package/dist/utils/setDeferredArrayItem.js.map +1 -0
  304. package/dist/utils/tokenStyle.d.ts +11 -0
  305. package/dist/utils/tokenStyle.d.ts.map +1 -0
  306. package/dist/utils/tokenStyle.js +32 -0
  307. package/dist/utils/tokenStyle.js.map +1 -0
  308. package/dist/utils/tokensToHtml.d.ts +11 -0
  309. package/dist/utils/tokensToHtml.d.ts.map +1 -0
  310. package/dist/utils/tokensToHtml.js +48 -0
  311. package/dist/utils/tokensToHtml.js.map +1 -0
  312. package/dist/utils/updateDiffHunks.d.ts +2 -2
  313. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  314. package/dist/utils/updateDiffHunks.js +7 -3
  315. package/dist/utils/updateDiffHunks.js.map +1 -1
  316. package/dist/utils/wrapTokenFragments.js.map +1 -1
  317. package/dist/worker/WorkerPoolManager.d.ts +14 -2
  318. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  319. package/dist/worker/WorkerPoolManager.js +155 -67
  320. package/dist/worker/WorkerPoolManager.js.map +1 -1
  321. package/dist/worker/hastLinesTransport.d.ts +14 -0
  322. package/dist/worker/hastLinesTransport.d.ts.map +1 -0
  323. package/dist/worker/hastLinesTransport.js +156 -0
  324. package/dist/worker/hastLinesTransport.js.map +1 -0
  325. package/dist/worker/highlights-CpZm9DAR.js +317 -0
  326. package/dist/worker/highlights-CpZm9DAR.js.map +1 -0
  327. package/dist/worker/index.d.ts +1 -1
  328. package/dist/worker/shiki-Ci4cdHsM.js +697 -0
  329. package/dist/worker/shiki-Ci4cdHsM.js.map +1 -0
  330. package/dist/worker/stream-tokenizer-DK9xp5M5.js +427 -0
  331. package/dist/worker/stream-tokenizer-DK9xp5M5.js.map +1 -0
  332. package/dist/worker/types.d.ts +16 -3
  333. package/dist/worker/types.d.ts.map +1 -1
  334. package/dist/worker/worker-portable.js +41 -13337
  335. package/dist/worker/worker-portable.js.map +1 -1
  336. package/dist/worker/worker.js +681 -349
  337. package/dist/worker/worker.js.map +1 -1
  338. package/dist/worker/workerMessage.d.ts +24 -0
  339. package/dist/worker/workerMessage.d.ts.map +1 -0
  340. package/dist/worker/workerMessage.js +0 -0
  341. package/package.json +5 -3
  342. package/dist/highlighter/themes/constants.d.ts +0 -5
  343. package/dist/highlighter/themes/constants.d.ts.map +0 -1
  344. package/dist/highlighter/themes/constants.js +0 -6
  345. package/dist/highlighter/themes/constants.js.map +0 -1
  346. package/dist/highlighter/themes/themeResolution.d.ts +0 -7
  347. package/dist/highlighter/themes/themeResolution.d.ts.map +0 -1
  348. package/dist/highlighter/themes/themeResolution.js +0 -21
  349. package/dist/highlighter/themes/themeResolution.js.map +0 -1
  350. package/dist/shiki-stream/tokenizer.d.ts +0 -23
  351. package/dist/shiki-stream/tokenizer.d.ts.map +0 -1
  352. package/dist/shiki-stream/tokenizer.js +0 -72
  353. package/dist/shiki-stream/tokenizer.js.map +0 -1
  354. package/dist/utils/createTransformerWithState.d.ts +0 -12
  355. package/dist/utils/createTransformerWithState.d.ts.map +0 -1
  356. package/dist/utils/createTransformerWithState.js +0 -89
  357. package/dist/utils/createTransformerWithState.js.map +0 -1
  358. package/dist/worker/wasm-B9ZqxnKj.js +0 -8
  359. package/dist/worker/wasm-B9ZqxnKj.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { areManagedSnapshotsEqual } from "../utils/areManagedSnapshotsEqual.js";
3
2
  import { areOptionsEqual } from "../utils/areOptionsEqual.js";
3
+ import { getCodeViewItemRenderData } from "../utils/getCodeViewItemRenderData.js";
4
4
  import { CodeView as CodeView$1 } from "../components/CodeView.js";
5
5
  import { useStableCallback } from "./utils/useStableCallback.js";
6
6
  import { useCreateEditor } from "./EditContext.js";
@@ -290,7 +290,7 @@ function createSlotContentStore() {
290
290
  return snapshot;
291
291
  },
292
292
  publish(nextSnapshot) {
293
- if (areManagedSnapshotsEqual(snapshot, nextSnapshot)) return;
293
+ if (snapshot === nextSnapshot) return;
294
294
  snapshot = nextSnapshot;
295
295
  for (const listener of listeners) listener();
296
296
  },
@@ -323,17 +323,29 @@ const SlotPortals = memo(function SlotPortals({ managedContentStore, renderCusto
323
323
  const subscribe = useStableCallback((listener) => managedContentStore.subscribe(listener));
324
324
  const getSnapshot = useStableCallback(() => managedContentStore.getSnapshot());
325
325
  const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
326
- let itemKeys = "";
327
- for (const item of snapshot?.items ?? []) itemKeys += `${item.id}:${item.version}:${item.type}`;
328
326
  const renderedItems = useMemo(() => {
329
- return snapshot?.items?.map((renderedItem) => createPortal(renderCodeViewItemChildren({
330
- renderedItem,
327
+ const renderers = {
331
328
  renderCustomHeader,
332
329
  renderHeaderPrefix,
333
330
  renderHeaderFilenameSuffix,
334
331
  renderHeaderMetadata,
335
332
  renderAnnotation,
336
333
  renderGutterUtility
334
+ };
335
+ return snapshot?.items?.map((renderedItem) => createPortal(renderedItem.type === "diff" ? /* @__PURE__ */ jsx(DiffItemSlots, {
336
+ version: renderedItem.version ?? 0,
337
+ item: renderedItem.item,
338
+ getHoveredLine: renderedItem.instance.getHoveredLine,
339
+ getAnnotationSlotName: renderedItem.instance.getAnnotationSlotName,
340
+ ...getCodeViewItemRenderData(renderedItem),
341
+ ...renderers
342
+ }) : /* @__PURE__ */ jsx(FileItemSlots, {
343
+ version: renderedItem.version ?? 0,
344
+ item: renderedItem.item,
345
+ getHoveredLine: renderedItem.instance.getHoveredLine,
346
+ getAnnotationSlotName: renderedItem.instance.getAnnotationSlotName,
347
+ ...getCodeViewItemRenderData(renderedItem),
348
+ ...renderers
337
349
  }), renderedItem.element, renderedItem.id));
338
350
  }, [
339
351
  renderCustomHeader,
@@ -342,7 +354,7 @@ const SlotPortals = memo(function SlotPortals({ managedContentStore, renderCusto
342
354
  renderHeaderMetadata,
343
355
  renderAnnotation,
344
356
  renderGutterUtility,
345
- itemKeys
357
+ snapshot?.items
346
358
  ]);
347
359
  const renderedHeader = useMemo(() => {
348
360
  return renderCodeViewHeader != null && snapshot?.header != null ? createPortal(renderCodeViewHeader(), snapshot.header) : null;
@@ -356,37 +368,34 @@ const SlotPortals = memo(function SlotPortals({ managedContentStore, renderCusto
356
368
  renderedFooter
357
369
  ] });
358
370
  });
359
- function renderCodeViewItemChildren({ renderedItem, renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata, renderAnnotation, renderGutterUtility }) {
360
- if (renderedItem.type === "diff") {
361
- const { item, instance } = renderedItem;
362
- return renderDiffChildren({
363
- fileDiff: item.fileDiff,
364
- renderCustomHeader: renderCustomHeader != null ? () => renderCustomHeader(item) : void 0,
365
- renderHeaderPrefix: renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : void 0,
366
- renderHeaderFilenameSuffix: renderHeaderFilenameSuffix != null ? () => renderHeaderFilenameSuffix(item) : void 0,
367
- renderHeaderMetadata: renderHeaderMetadata != null ? () => renderHeaderMetadata(item) : void 0,
368
- renderAnnotation: renderAnnotation != null ? (annotation) => renderAnnotation(annotation, item) : void 0,
369
- lineAnnotations: item.annotations,
370
- renderGutterUtility: renderGutterUtility != null ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item) : void 0,
371
- getHoveredLine: instance.getHoveredLine,
372
- getAnnotationSlotName: instance.getAnnotationSlotName
373
- });
374
- } else {
375
- const { item, instance } = renderedItem;
376
- return renderFileChildren({
377
- file: item.file,
378
- renderCustomHeader: renderCustomHeader != null ? () => renderCustomHeader(item) : void 0,
379
- renderHeaderPrefix: renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : void 0,
380
- renderHeaderFilenameSuffix: renderHeaderFilenameSuffix != null ? () => renderHeaderFilenameSuffix(item) : void 0,
381
- renderHeaderMetadata: renderHeaderMetadata != null ? () => renderHeaderMetadata(item) : void 0,
382
- renderAnnotation: renderAnnotation != null ? (annotation) => renderAnnotation(annotation, item) : void 0,
383
- lineAnnotations: item.annotations,
384
- renderGutterUtility: renderGutterUtility != null ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item) : void 0,
385
- getHoveredLine: instance.getHoveredLine,
386
- getAnnotationSlotName: instance.getAnnotationSlotName
387
- });
388
- }
389
- }
371
+ const DiffItemSlots = memo(function DiffItemSlots({ item, fileDiff, lineAnnotations, getHoveredLine, getAnnotationSlotName, renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata, renderAnnotation, renderGutterUtility }) {
372
+ return renderDiffChildren({
373
+ fileDiff,
374
+ renderCustomHeader: renderCustomHeader != null ? () => renderCustomHeader(item) : void 0,
375
+ renderHeaderPrefix: renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : void 0,
376
+ renderHeaderFilenameSuffix: renderHeaderFilenameSuffix != null ? () => renderHeaderFilenameSuffix(item) : void 0,
377
+ renderHeaderMetadata: renderHeaderMetadata != null ? () => renderHeaderMetadata(item) : void 0,
378
+ renderAnnotation: renderAnnotation != null ? (annotation, fileDiff) => renderAnnotation(annotation, fileDiff, item) : void 0,
379
+ lineAnnotations,
380
+ renderGutterUtility: renderGutterUtility != null ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item) : void 0,
381
+ getHoveredLine,
382
+ getAnnotationSlotName
383
+ });
384
+ });
385
+ const FileItemSlots = memo(function FileItemSlots({ item, file, lineAnnotations, getHoveredLine, getAnnotationSlotName, renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata, renderAnnotation, renderGutterUtility }) {
386
+ return renderFileChildren({
387
+ file,
388
+ renderCustomHeader: renderCustomHeader != null ? () => renderCustomHeader(item) : void 0,
389
+ renderHeaderPrefix: renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : void 0,
390
+ renderHeaderFilenameSuffix: renderHeaderFilenameSuffix != null ? () => renderHeaderFilenameSuffix(item) : void 0,
391
+ renderHeaderMetadata: renderHeaderMetadata != null ? () => renderHeaderMetadata(item) : void 0,
392
+ renderAnnotation: renderAnnotation != null ? (annotation, file) => renderAnnotation(annotation, file, item) : void 0,
393
+ lineAnnotations,
394
+ renderGutterUtility: renderGutterUtility != null ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item) : void 0,
395
+ getHoveredLine,
396
+ getAnnotationSlotName
397
+ });
398
+ });
390
399
  function noopRender() {}
391
400
  //#endregion
392
401
  export { CodeView };
@@ -1 +1 @@
1
- {"version":3,"file":"CodeView.js","names":["CodeViewClass"],"sources":["../../src/react/CodeView.tsx"],"sourcesContent":["'use client';\n\nimport {\n type CSSProperties,\n forwardRef,\n memo,\n type ReactNode,\n type Ref,\n useContext,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\nimport { createPortal, flushSync } from 'react-dom';\n\nimport type {\n Editor,\n EditorChangeEvent,\n EditorOptions,\n EditorType,\n} from '../edit';\nimport {\n areOptionsEqual,\n CodeView as CodeViewClass,\n type CodeViewCoordinator,\n type CodeViewCreateEditorOptions,\n type CodeViewItem,\n type CodeViewItemEditCompleteEventMap,\n type CodeViewItemEditCompleteHandler,\n type CodeViewLineSelection,\n type CodeViewMode,\n type CodeViewModeItemMap,\n type CodeViewOptions,\n type CodeViewRenderedItem,\n type CodeViewScrollTarget,\n type CodeViewSlotSnapshot,\n type DiffLineAnnotation,\n type GetHoveredLineResult,\n type LineAnnotation,\n} from '../index';\nimport { areManagedSnapshotsEqual } from '../utils/areManagedSnapshotsEqual';\nimport { useCreateEditor } from './EditContext';\nimport { assignRef } from './utils/assignRef';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { renderFileChildren } from './utils/renderFileChildren';\nimport { useStableCallback } from './utils/useStableCallback';\nimport { WorkerPoolContext } from './WorkerPoolContext';\n\nexport type { CodeViewItemEditCompleteHandler };\n\nconst useIsomorphicLayoutEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ntype CodeViewGutterUtilityGetter =\n | (() => GetHoveredLineResult<'file'> | undefined)\n | (() => GetHoveredLineResult<'diff'> | undefined);\n\nexport type CodeViewReactOptions<LAnnotation, Caret> = Omit<\n CodeViewOptions<LAnnotation, Caret>,\n 'controlledSelection' | 'createEditor' | 'onSelectedLinesChange'\n>;\n\ninterface CodeViewBaseProps<LAnnotation, Caret> {\n options?: CodeViewReactOptions<LAnnotation, Caret>;\n /**\n * Creation-time options passed to the nearest EditProvider factory.\n * CodeView supplies its item-specific change callback.\n */\n editorOptions?: Omit<\n EditorOptions<EditorType, LAnnotation, Caret>,\n 'onChange'\n >;\n /** Resolve an in-memory retention key for an item's draft and undo history. */\n getEditStateKey?(item: CodeViewItem<LAnnotation>): string | undefined;\n className?: string;\n style?: CSSProperties;\n /**\n * Ref to the scroll container element. A callback ref follows the React 18\n * protocol: it is called with the element on mount and with `null` on\n * unmount. A cleanup function returned from the callback (the React 19\n * form) is ignored, so release resources on the `null` call or use a ref\n * object.\n */\n containerRef?: Ref<HTMLDivElement>;\n disableWorkerPool?: boolean;\n selectedLines?: CodeViewLineSelection | null;\n onSelectedLinesChange?(selection: CodeViewLineSelection | null): void;\n onScroll?(scrollTop: number, viewer: CodeViewClass<LAnnotation, Caret>): void;\n /** Render a non-virtualized node at the very start of the scroll content,\n * before the first item. Always rendered; scrolls with the content. */\n renderCodeViewHeader?(): ReactNode;\n /** Render a non-virtualized node at the very end of the scroll content, after\n * the last item. Always rendered; scrolls with the content. */\n renderCodeViewFooter?(): ReactNode;\n /**\n * Called with the editor's `EditorChangeEvent` and the owning item on every\n * document change. Do not feed it directly back into the controlled item,\n * which can create update loops.\n */\n onItemEditChange?(\n event: EditorChangeEvent<EditorType, LAnnotation, Caret>,\n item: CodeViewItem<LAnnotation>\n ): void;\n /**\n * Called once when an edit session ends: edit turned off, the item removed,\n * or the CodeView unmounted (where the result is not installed). Collapse\n * suspends the session instead of completing it. `nextItem` is the accepted\n * replacement CodeView built from `item`: the event's completed\n * `file`/`fileDiff` and annotations, `edit: false`, and a bumped `version`.\n * Return `'accept'` to install the edit — CodeView applies `nextItem` through\n * the item update path when the item still exists, and a controlled owner\n * puts the same `nextItem` into its state — or `'reject'` to revert. The event\n * is frozen; re-key the accepted value in place before accepting.\n */\n onItemEditComplete?: CodeViewItemEditCompleteHandler<LAnnotation, Caret>;\n renderCustomHeader?(item: CodeViewItem<LAnnotation>): ReactNode;\n renderHeaderPrefix?(item: CodeViewItem<LAnnotation>): ReactNode;\n renderHeaderFilenameSuffix?(item: CodeViewItem<LAnnotation>): ReactNode;\n renderHeaderMetadata?(item: CodeViewItem<LAnnotation>): ReactNode;\n renderAnnotation?(\n annotation: LineAnnotation<LAnnotation> | DiffLineAnnotation<LAnnotation>,\n item: CodeViewItem<LAnnotation>\n ): ReactNode;\n renderGutterUtility?(\n getHoveredLine: CodeViewGutterUtilityGetter,\n item: CodeViewItem<LAnnotation>\n ): ReactNode;\n}\n\nexport interface ControlledCodeViewProps<\n LAnnotation,\n Caret,\n> extends CodeViewBaseProps<LAnnotation, Caret> {\n items: readonly CodeViewItem<LAnnotation>[];\n initialItems?: never;\n}\n\nexport interface UncontrolledCodeViewProps<\n LAnnotation,\n Caret,\n> extends CodeViewBaseProps<LAnnotation, Caret> {\n // Seeds the imperative CodeView instance once. Later item changes should go\n // through the ref API instead of being reconciled from React props.\n initialItems?: readonly CodeViewItem<LAnnotation>[];\n items?: never;\n}\n\nexport type CodeViewProps<LAnnotation, Caret> =\n | ControlledCodeViewProps<LAnnotation, Caret>\n | UncontrolledCodeViewProps<LAnnotation, Caret>;\n\nexport interface CodeViewHandle<LAnnotation, Caret> {\n addItems(items: readonly CodeViewItem<LAnnotation>[]): void;\n getItem(id: string): CodeViewItem<LAnnotation> | undefined;\n removeItem(id: string): boolean;\n updateItem(item: CodeViewItem<LAnnotation>): boolean;\n updateItemId(oldId: string, newId: string): boolean;\n scrollTo(target: CodeViewScrollTarget): void;\n setSelectedLines(selection: CodeViewLineSelection | null): void;\n getSelectedLines(): CodeViewLineSelection | null;\n clearSelectedLines(): void;\n getEditor(\n id: string\n ):\n | Editor<'file', LAnnotation, Caret>\n | Editor<'file-diff', LAnnotation, Caret>\n | undefined;\n getInstance(): CodeViewClass<LAnnotation, Caret> | undefined;\n}\n\ntype CodeViewComponent = <LAnnotation = undefined, Caret = undefined>(\n props: CodeViewProps<LAnnotation, Caret> & {\n ref?: React.Ref<CodeViewHandle<LAnnotation, Caret>>;\n }\n) => React.JSX.Element;\n\ntype SlotPortalsComponent = <LAnnotation, Caret>(\n props: SlotPortalsProps<LAnnotation, Caret>\n) => React.JSX.Element;\n\ninterface ManagedContentStore<LAnnotation, Caret> {\n getSnapshot(): CodeViewSlotSnapshot<LAnnotation, Caret> | undefined;\n publish(snapshot: CodeViewSlotSnapshot<LAnnotation, Caret> | undefined): void;\n subscribe(listener: () => void): () => void;\n}\n\ninterface CachedDataRef<LAnnotation, Caret> {\n instance: CodeViewClass<LAnnotation, Caret> | undefined;\n items: readonly CodeViewItem<LAnnotation>[] | undefined;\n controlled: boolean;\n managedOptions: CodeViewOptions<LAnnotation, Caret> | undefined;\n disableFlushSync: boolean;\n slotCoordinator: CodeViewCoordinator<LAnnotation, Caret> | undefined;\n}\n\nfunction createDefaultCache<LAnnotation, Caret>(\n controlled: boolean\n): CachedDataRef<LAnnotation, Caret> {\n return {\n instance: undefined,\n items: undefined,\n controlled,\n managedOptions: undefined,\n disableFlushSync: false,\n slotCoordinator: undefined,\n };\n}\n\nfunction CodeViewInner<LAnnotation = undefined, Caret = undefined>(\n props: CodeViewProps<LAnnotation, Caret>,\n ref: React.ForwardedRef<CodeViewHandle<LAnnotation, Caret>>\n): React.JSX.Element {\n const {\n className,\n containerRef,\n disableWorkerPool = false,\n editorOptions,\n getEditStateKey,\n initialItems,\n items: controlledItems,\n onItemEditChange,\n onItemEditComplete,\n onScroll,\n onSelectedLinesChange,\n options,\n renderAnnotation,\n renderCodeViewFooter,\n renderCodeViewHeader,\n renderCustomHeader,\n renderGutterUtility,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderHeaderPrefix,\n selectedLines,\n style,\n } = props;\n const controlled = controlledItems !== undefined;\n const contextCreateEditor = useCreateEditor<LAnnotation, Caret>();\n const poolManager = useContext(WorkerPoolContext);\n const cachedDataRef = useRef<CachedDataRef<LAnnotation, Caret>>(\n createDefaultCache<LAnnotation, Caret>(controlled)\n );\n const hasCustomHeader = renderCustomHeader != null;\n const hasAnnotationRenderer = renderAnnotation != null;\n const hasGutterRenderer = renderGutterUtility != null;\n const hasHeaderRenderers =\n hasCustomHeader ||\n renderHeaderPrefix != null ||\n renderHeaderFilenameSuffix != null ||\n renderHeaderMetadata != null;\n const hasRenderers =\n hasHeaderRenderers || hasAnnotationRenderer || hasGutterRenderer;\n const hasCodeViewHeader = renderCodeViewHeader != null;\n const hasCodeViewFooter = renderCodeViewFooter != null;\n const emitSelectedLinesChange = useStableCallback(\n (selection: CodeViewLineSelection | null) => {\n onSelectedLinesChange?.(selection);\n }\n );\n const controlledSelection = selectedLines !== undefined;\n\n // Keep the adapter stable so provider and editor-option changes affect the\n // next item edit session without forcing CodeView to reconcile active editors.\n const createEditor = useStableCallback(\n <EType extends EditorType>(\n editorType: EType,\n options: CodeViewCreateEditorOptions<EType, LAnnotation, Caret>,\n editStateKey?: string\n ): Editor<EType, LAnnotation, Caret> => {\n if (contextCreateEditor == null) {\n throw new Error('CodeView: EditContext is not attached');\n }\n\n const resolvedOptions = {\n ...editorOptions,\n ...options,\n } as EditorOptions<EType, LAnnotation, Caret>;\n const editor = contextCreateEditor(\n editorType,\n resolvedOptions,\n editStateKey\n );\n return editor;\n }\n );\n const emitItemEditChange = useStableCallback(\n (\n event: EditorChangeEvent<EditorType, LAnnotation, Caret>,\n item: CodeViewItem<LAnnotation>\n ) => {\n onItemEditChange?.(event, item);\n }\n );\n const emitItemEditComplete = useStableCallback(\n <TMode extends CodeViewMode>(\n event: CodeViewItemEditCompleteEventMap<LAnnotation, Caret>[TMode],\n item: CodeViewModeItemMap<LAnnotation>[TMode],\n nextItem: CodeViewModeItemMap<LAnnotation>[TMode]\n ) => onItemEditComplete?.(event, item, nextItem) ?? 'reject'\n );\n\n const managedOptions = useMemo(\n () =>\n createManagedCodeViewOptions({\n options,\n hasCustomHeader,\n hasGutterRenderer,\n hasCodeViewHeader,\n hasCodeViewFooter,\n onSelectedLinesChange:\n onSelectedLinesChange != null ? emitSelectedLinesChange : undefined,\n controlledSelection,\n getEditStateKey,\n createEditor: contextCreateEditor != null ? createEditor : undefined,\n onItemEditChange:\n onItemEditChange != null ? emitItemEditChange : undefined,\n onItemEditComplete:\n onItemEditComplete != null ? emitItemEditComplete : undefined,\n }),\n [\n contextCreateEditor,\n controlledSelection,\n createEditor,\n emitItemEditChange,\n emitItemEditComplete,\n emitSelectedLinesChange,\n hasCodeViewFooter,\n hasCodeViewHeader,\n hasCustomHeader,\n hasGutterRenderer,\n getEditStateKey,\n onItemEditChange,\n onItemEditComplete,\n onSelectedLinesChange,\n options,\n ]\n );\n\n const [slotContentStore] = useState<ManagedContentStore<LAnnotation, Caret>>(\n () => createSlotContentStore()\n );\n const [, forceUpdate] = useState<unknown>({});\n\n const nodeRef = useStableCallback((node: HTMLDivElement | null) => {\n // If we have a pre-existing instance and there's no node or the node being\n // passed in is NOT the same as before, then we need to clean up and\n // garbage collect the old instance\n if (\n cachedDataRef.current.instance != null &&\n (node == null ||\n node !== cachedDataRef.current.instance.getContainerElement())\n ) {\n cachedDataRef.current.instance.cleanUp();\n slotContentStore.publish(undefined);\n cachedDataRef.current = createDefaultCache<LAnnotation, Caret>(\n controlled\n );\n }\n\n // If our node matches the existing node then we should not attempt to\n // setup. This is a case that should never be possible to hit, but just in\n // case, lets make sure we don't re-setup an instance that is already setup\n // properly\n if (\n node != null &&\n node !== cachedDataRef.current.instance?.getContainerElement()\n ) {\n cachedDataRef.current.instance = new CodeViewClass<LAnnotation, Caret>(\n managedOptions,\n !disableWorkerPool ? poolManager : undefined,\n true\n );\n cachedDataRef.current.instance.setup(node);\n }\n\n assignRef(containerRef, node);\n });\n\n const onSnapshotChange = useStableCallback(\n (snapshot: CodeViewSlotSnapshot<LAnnotation, Caret> | undefined) => {\n if (cachedDataRef.current.disableFlushSync) {\n slotContentStore.publish(snapshot);\n } else {\n flushSync(() => {\n slotContentStore.publish(snapshot);\n });\n }\n }\n );\n\n const slotCoordinator: CodeViewCoordinator<LAnnotation, Caret> | undefined =\n useMemo(() => {\n // A coordinator is needed whenever React portals anything — per-item\n // slots and codeview header and footer\n if (\n !hasHeaderRenderers &&\n !hasAnnotationRenderer &&\n !hasGutterRenderer &&\n !hasCodeViewHeader &&\n !hasCodeViewFooter\n ) {\n return undefined;\n } else {\n return {\n hasHeaderRenderers,\n hasAnnotationRenderer,\n hasGutterRenderer,\n onSnapshotChange,\n };\n }\n }, [\n onSnapshotChange,\n hasAnnotationRenderer,\n hasGutterRenderer,\n hasHeaderRenderers,\n hasCodeViewHeader,\n hasCodeViewFooter,\n ]);\n\n useIsomorphicLayoutEffect(() => {\n return onScroll != null\n ? cachedDataRef.current.instance?.subscribeToScroll(onScroll)\n : undefined;\n });\n\n useIsomorphicLayoutEffect(() => {\n const {\n instance,\n controlled: prevControlled,\n items: prevItems,\n managedOptions: prevManagedOptions,\n slotCoordinator: prevSlotCoordinator,\n } = cachedDataRef.current;\n if (instance == null) {\n return;\n }\n\n try {\n cachedDataRef.current.disableFlushSync = true;\n let shouldRender = false;\n\n if (!areOptionsEqual(managedOptions, prevManagedOptions)) {\n cachedDataRef.current.managedOptions = managedOptions;\n instance.setOptions(managedOptions);\n shouldRender = true;\n }\n\n if (prevControlled !== controlled) {\n console.error(\n 'CodeView: cannot switch between controlled and uncontrolled modes. Remount with a new key instead.'\n );\n return;\n }\n\n if (controlled) {\n if (controlledItems !== prevItems) {\n if (areItemListsEqual(prevItems, controlledItems)) {\n cachedDataRef.current.items = controlledItems;\n } else if (isAppendOnlyItemUpdate(prevItems, controlledItems)) {\n cachedDataRef.current.items = controlledItems;\n instance.addItems(controlledItems.slice(prevItems.length));\n } else {\n cachedDataRef.current.items = controlledItems;\n instance.setItems(controlledItems);\n shouldRender = true;\n }\n }\n }\n // If uncontrolled, we should only ever set items once, and just depend\n // on imperative instance changes going forward\n else if (prevItems == null) {\n const seedItems = initialItems ?? [];\n cachedDataRef.current.items = seedItems;\n if (seedItems.length > 0) {\n instance.setItems(seedItems);\n shouldRender = true;\n }\n }\n\n if (selectedLines !== undefined) {\n instance.setSelectedLines(selectedLines, { notify: false });\n }\n\n const slotPublish = instance.setSlotCoordinator(slotCoordinator);\n let forceInlinePublish = false;\n if (slotCoordinator !== prevSlotCoordinator) {\n if (slotCoordinator == null || prevSlotCoordinator == null) {\n forceInlinePublish = true;\n }\n cachedDataRef.current.slotCoordinator = slotCoordinator;\n }\n\n if (shouldRender || slotPublish) {\n instance.render(true);\n }\n\n // FIXME(amadeus): This feels kinda bad and flakey with regards to how\n // other things are working... it makes me think that we should\n // re-architect the slotCoordinator a bit, and maybe DON'T make it an\n // undefineable thing...\n if (slotPublish && slotCoordinator == null) {\n slotContentStore.publish(undefined);\n }\n\n if (forceInlinePublish) {\n forceUpdate({});\n }\n } finally {\n cachedDataRef.current.disableFlushSync = false;\n }\n });\n\n // Setup the ref handler\n useImperativeHandle(\n ref,\n (): CodeViewHandle<LAnnotation, Caret> => ({\n addItems(items) {\n const { controlled, instance } = cachedDataRef.current;\n assertUncontrolledCodeViewAction(controlled, 'addItems');\n if (instance == null) {\n console.error(\n 'CodeView.addItems: no valid instance to append items with',\n items\n );\n } else {\n instance.addItems(items);\n }\n },\n getItem(id) {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error('CodeView.getItem: no valid instance exists', id);\n return undefined;\n } else {\n return instance.getItem(id);\n }\n },\n removeItem(id) {\n const { controlled, instance } = cachedDataRef.current;\n assertUncontrolledCodeViewAction(controlled, 'removeItem');\n if (instance == null) {\n console.error(\n 'CodeView.removeItem: no valid instance to remove item from',\n id\n );\n return false;\n }\n\n return instance.removeItem(id);\n },\n updateItem(item) {\n const { controlled, instance } = cachedDataRef.current;\n assertUncontrolledCodeViewAction(controlled, 'updateItem');\n if (instance == null) {\n console.error(\n 'CodeView.updateItem: no valid instance to update item with',\n item\n );\n return false;\n }\n\n return instance.updateItem(item);\n },\n updateItemId(oldId, newId) {\n const { controlled, instance } = cachedDataRef.current;\n assertUncontrolledCodeViewAction(controlled, 'updateItemId');\n if (instance == null) {\n console.error(\n 'CodeView.updateItemId: no valid instance to update item id with',\n oldId,\n newId\n );\n return false;\n }\n\n return instance.updateItemId(oldId, newId);\n },\n scrollTo(target) {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error(\n 'CodeView.scrollTo: no valid instance to scroll with',\n target\n );\n } else {\n instance.scrollTo(target);\n }\n },\n setSelectedLines(selection) {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error(\n 'CodeView.setSelectedLines: no valid instance to update selection with',\n selection\n );\n } else {\n instance.setSelectedLines(selection, { notify: false });\n emitSelectedLinesChange(selection);\n }\n },\n getSelectedLines() {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error('CodeView.getSelectedLines: no valid instance exists');\n return null;\n } else {\n return instance.getSelectedLines();\n }\n },\n clearSelectedLines() {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error(\n 'CodeView.clearSelectedLines: no valid instance to update selection with'\n );\n } else {\n instance.clearSelectedLines({ notify: false });\n emitSelectedLinesChange(null);\n }\n },\n getEditor(id) {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error('CodeView.getEditor: no valid instance exists', id);\n return undefined;\n }\n\n return instance.getEditor(id);\n },\n getInstance() {\n return cachedDataRef.current.instance;\n },\n }),\n [emitSelectedLinesChange]\n );\n\n return (\n <>\n <div ref={nodeRef} className={className} style={style} />\n {(hasRenderers || hasCodeViewHeader || hasCodeViewFooter) && (\n <SlotPortals<LAnnotation, Caret>\n managedContentStore={slotContentStore}\n renderCustomHeader={renderCustomHeader}\n renderHeaderPrefix={renderHeaderPrefix}\n renderHeaderFilenameSuffix={renderHeaderFilenameSuffix}\n renderHeaderMetadata={renderHeaderMetadata}\n renderAnnotation={renderAnnotation}\n renderGutterUtility={renderGutterUtility}\n renderCodeViewHeader={renderCodeViewHeader}\n renderCodeViewFooter={renderCodeViewFooter}\n />\n )}\n </>\n );\n}\n\n// React was a mistake\nexport const CodeView = forwardRef(CodeViewInner) as CodeViewComponent;\n\nfunction isAppendOnlyItemUpdate<LAnnotation>(\n previousItems: readonly CodeViewItem<LAnnotation>[] | undefined,\n nextItems: readonly CodeViewItem<LAnnotation>[]\n): previousItems is readonly CodeViewItem<LAnnotation>[] {\n if (previousItems == null || nextItems.length <= previousItems.length) {\n return false;\n }\n\n if (previousItems.length === 0) {\n return true;\n }\n\n for (let index = 0; index < previousItems.length; index++) {\n if (nextItems[index] !== previousItems[index]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction areItemListsEqual<LAnnotation>(\n previousItems: readonly CodeViewItem<LAnnotation>[] | undefined,\n nextItems: readonly CodeViewItem<LAnnotation>[]\n): boolean {\n if (previousItems == null || previousItems.length !== nextItems.length) {\n return false;\n }\n\n for (let index = 0; index < previousItems.length; index++) {\n if (previousItems[index] !== nextItems[index]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction assertUncontrolledCodeViewAction(\n controlled: boolean,\n action: string\n): void {\n if (!controlled) {\n return;\n }\n\n throw new Error(\n `CodeView.${action} cannot be used when CodeView is controlled. Use initialItems for imperative item updates.`\n );\n}\n\nfunction createSlotContentStore<LAnnotation, Caret>(): ManagedContentStore<\n LAnnotation,\n Caret\n> {\n let snapshot: CodeViewSlotSnapshot<LAnnotation, Caret> | undefined;\n const listeners = new Set<() => void>();\n\n return {\n getSnapshot() {\n return snapshot;\n },\n publish(nextSnapshot) {\n if (areManagedSnapshotsEqual(snapshot, nextSnapshot)) {\n return;\n }\n\n snapshot = nextSnapshot;\n for (const listener of listeners) {\n listener();\n }\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\ninterface CreateManagedCodeViewOptionsProps<LAnnotation, Caret> {\n options: CodeViewReactOptions<LAnnotation, Caret> | undefined;\n hasCustomHeader: boolean;\n hasGutterRenderer: boolean;\n hasCodeViewHeader: boolean;\n hasCodeViewFooter: boolean;\n onSelectedLinesChange?(selection: CodeViewLineSelection | null): void;\n controlledSelection: boolean;\n getEditStateKey: CodeViewOptions<LAnnotation, Caret>['getEditStateKey'];\n createEditor: CodeViewOptions<LAnnotation, Caret>['createEditor'];\n onItemEditChange: CodeViewOptions<LAnnotation, Caret>['onItemEditChange'];\n onItemEditComplete: CodeViewOptions<LAnnotation, Caret>['onItemEditComplete'];\n}\n\nfunction createManagedCodeViewOptions<LAnnotation, Caret>({\n options,\n hasCustomHeader,\n hasGutterRenderer,\n hasCodeViewHeader,\n hasCodeViewFooter,\n onSelectedLinesChange,\n controlledSelection,\n getEditStateKey,\n createEditor,\n onItemEditChange,\n onItemEditComplete,\n}: CreateManagedCodeViewOptionsProps<LAnnotation, Caret>): CodeViewOptions<\n LAnnotation,\n Caret\n> {\n const managedOptions: CodeViewOptions<LAnnotation, Caret> = {\n ...options,\n controlledSelection,\n onSelectedLinesChange,\n createEditor,\n };\n\n if (getEditStateKey != null) {\n managedOptions.getEditStateKey = getEditStateKey;\n }\n\n // Prop-level editor callbacks win over their options-object counterparts,\n // but an absent prop must not clobber a value provided via `options`.\n if (onItemEditChange != null) {\n managedOptions.onItemEditChange = onItemEditChange;\n }\n if (onItemEditComplete != null) {\n managedOptions.onItemEditComplete = onItemEditComplete;\n }\n\n // The imperative CodeView adapters use this callback's presence to\n // switch file and diff headers into custom-slot mode. React portals\n // provide the actual header content, so this placeholder\n // intentionally returns nothing.\n if (hasCustomHeader) {\n managedOptions.renderCustomHeader = noopRender;\n }\n\n // The imperative CodeView adapters use this callback's presence to\n // create the custom gutter utility slot. React portals provide the\n // actual content, so this placeholder intentionally returns nothing.\n if (hasGutterRenderer) {\n managedOptions.renderGutterUtility = noopRender;\n }\n\n // The imperative CodeView adapters use these callbacks' presence to create the\n // header/footer host elements. React portals the actual content into them (via\n // the slot snapshot), so these placeholders intentionally return nothing.\n if (hasCodeViewHeader) {\n managedOptions.renderCodeViewHeader = noopRender;\n }\n if (hasCodeViewFooter) {\n managedOptions.renderCodeViewFooter = noopRender;\n }\n\n return managedOptions;\n}\n\ninterface RenderCodeViewItemChildrenProps<LAnnotation, Caret> {\n renderedItem: CodeViewRenderedItem<LAnnotation, Caret>;\n renderCustomHeader: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderCustomHeader'];\n renderHeaderPrefix: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderPrefix'];\n renderHeaderFilenameSuffix: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderFilenameSuffix'];\n renderHeaderMetadata: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderMetadata'];\n renderAnnotation: CodeViewBaseProps<LAnnotation, Caret>['renderAnnotation'];\n renderGutterUtility: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderGutterUtility'];\n}\n\ninterface SlotPortalsProps<LAnnotation, Caret> {\n managedContentStore: ManagedContentStore<LAnnotation, Caret>;\n renderCustomHeader: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderCustomHeader'];\n renderHeaderPrefix: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderPrefix'];\n renderHeaderFilenameSuffix: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderFilenameSuffix'];\n renderHeaderMetadata: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderMetadata'];\n renderAnnotation: CodeViewBaseProps<LAnnotation, Caret>['renderAnnotation'];\n renderGutterUtility: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderGutterUtility'];\n renderCodeViewHeader: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderCodeViewHeader'];\n renderCodeViewFooter: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderCodeViewFooter'];\n}\n\nconst SlotPortals = memo(function SlotPortals<LAnnotation, Caret>({\n managedContentStore,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n renderCodeViewHeader,\n renderCodeViewFooter,\n}: SlotPortalsProps<LAnnotation, Caret>) {\n 'use no memo';\n const subscribe = useStableCallback((listener: () => void) =>\n managedContentStore.subscribe(listener)\n );\n const getSnapshot = useStableCallback(() =>\n managedContentStore.getSnapshot()\n );\n const snapshot = useSyncExternalStore<\n CodeViewSlotSnapshot<LAnnotation, Caret> | undefined\n >(subscribe, getSnapshot, getSnapshot);\n let itemKeys = '';\n for (const item of snapshot?.items ?? []) {\n itemKeys += `${item.id}:${item.version}:${item.type}`;\n }\n // NOTE(amadeus): And just like that, the react compiler do be failing us\n // lol... we need to pre-render everything for items, headers and footers to\n // not trigger needless renders while scrolling\n const renderedItems = useMemo(\n () => {\n return snapshot?.items?.map((renderedItem) =>\n createPortal(\n renderCodeViewItemChildren({\n renderedItem,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n }),\n renderedItem.element,\n renderedItem.id\n )\n );\n },\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n [\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n itemKeys,\n ]\n );\n const renderedHeader = useMemo(() => {\n return renderCodeViewHeader != null && snapshot?.header != null\n ? createPortal(renderCodeViewHeader(), snapshot.header)\n : null;\n }, [renderCodeViewHeader, snapshot?.header]);\n const renderedFooter = useMemo(() => {\n return renderCodeViewFooter != null && snapshot?.footer != null\n ? createPortal(renderCodeViewFooter(), snapshot.footer)\n : null;\n }, [renderCodeViewFooter, snapshot?.footer]);\n return (\n <>\n {renderedItems}\n {renderedHeader}\n {renderedFooter}\n </>\n );\n}) as SlotPortalsComponent;\n\nfunction renderCodeViewItemChildren<LAnnotation, Caret>({\n renderedItem,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n}: RenderCodeViewItemChildrenProps<LAnnotation, Caret>): ReactNode {\n if (renderedItem.type === 'diff') {\n const { item, instance } = renderedItem;\n return renderDiffChildren({\n fileDiff: item.fileDiff,\n renderCustomHeader:\n renderCustomHeader != null ? () => renderCustomHeader(item) : undefined,\n renderHeaderPrefix:\n renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : undefined,\n renderHeaderFilenameSuffix:\n renderHeaderFilenameSuffix != null\n ? () => renderHeaderFilenameSuffix(item)\n : undefined,\n renderHeaderMetadata:\n renderHeaderMetadata != null\n ? () => renderHeaderMetadata(item)\n : undefined,\n renderAnnotation:\n renderAnnotation != null\n ? (annotation) => renderAnnotation(annotation, item)\n : undefined,\n lineAnnotations: item.annotations,\n renderGutterUtility:\n renderGutterUtility != null\n ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item)\n : undefined,\n getHoveredLine: instance.getHoveredLine,\n getAnnotationSlotName: instance.getAnnotationSlotName,\n });\n } else {\n const { item, instance } = renderedItem;\n return renderFileChildren({\n file: item.file,\n renderCustomHeader:\n renderCustomHeader != null ? () => renderCustomHeader(item) : undefined,\n renderHeaderPrefix:\n renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : undefined,\n renderHeaderFilenameSuffix:\n renderHeaderFilenameSuffix != null\n ? () => renderHeaderFilenameSuffix(item)\n : undefined,\n renderHeaderMetadata:\n renderHeaderMetadata != null\n ? () => renderHeaderMetadata(item)\n : undefined,\n renderAnnotation:\n renderAnnotation != null\n ? (annotation) => renderAnnotation(annotation, item)\n : undefined,\n lineAnnotations: item.annotations,\n renderGutterUtility:\n renderGutterUtility != null\n ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item)\n : undefined,\n getHoveredLine: instance.getHoveredLine,\n getAnnotationSlotName: instance.getAnnotationSlotName,\n });\n }\n}\n\nfunction noopRender() {\n return undefined;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CodeView.js","names":["CodeViewClass"],"sources":["../../src/react/CodeView.tsx"],"sourcesContent":["'use client';\n\nimport {\n type CSSProperties,\n forwardRef,\n memo,\n type ReactNode,\n type Ref,\n useContext,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\nimport { createPortal, flushSync } from 'react-dom';\n\nimport type {\n Editor,\n EditorChangeEvent,\n EditorOptions,\n EditorType,\n} from '../edit';\nimport {\n areOptionsEqual,\n CodeView as CodeViewClass,\n type CodeViewCoordinator,\n type CodeViewCreateEditorOptions,\n type CodeViewDiffItem,\n type CodeViewFileItem,\n type CodeViewItem,\n type CodeViewItemEditCompleteEventMap,\n type CodeViewItemEditCompleteHandler,\n type CodeViewLineSelection,\n type CodeViewMode,\n type CodeViewModeItemMap,\n type CodeViewOptions,\n type CodeViewScrollTarget,\n type CodeViewSlotSnapshot,\n type DiffLineAnnotation,\n type FileContents,\n type FileDiffMetadata,\n type GetHoveredLineResult,\n type LineAnnotation,\n} from '../index';\nimport { getCodeViewItemRenderData } from '../utils/getCodeViewItemRenderData';\nimport { useCreateEditor } from './EditContext';\nimport { assignRef } from './utils/assignRef';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { renderFileChildren } from './utils/renderFileChildren';\nimport { useStableCallback } from './utils/useStableCallback';\nimport { WorkerPoolContext } from './WorkerPoolContext';\n\nexport type { CodeViewItemEditCompleteHandler };\n\nconst useIsomorphicLayoutEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ntype CodeViewGutterUtilityGetter =\n | (() => GetHoveredLineResult<'file'> | undefined)\n | (() => GetHoveredLineResult<'diff'> | undefined);\n\nexport type CodeViewAnnotationArgs<LAnnotation> =\n | [\n annotation: LineAnnotation<LAnnotation>,\n file: FileContents,\n item: CodeViewFileItem<LAnnotation>,\n ]\n | [\n annotation: DiffLineAnnotation<LAnnotation>,\n fileDiff: FileDiffMetadata,\n item: CodeViewDiffItem<LAnnotation>,\n ];\n\nexport type CodeViewReactOptions<LAnnotation, Caret> = Omit<\n CodeViewOptions<LAnnotation, Caret>,\n 'controlledSelection' | 'createEditor' | 'onSelectedLinesChange'\n>;\n\ninterface CodeViewBaseProps<LAnnotation, Caret> {\n options?: CodeViewReactOptions<LAnnotation, Caret>;\n /**\n * Creation-time options passed to the nearest EditProvider factory.\n * CodeView supplies its item-specific change callback.\n */\n editorOptions?: Omit<\n EditorOptions<EditorType, LAnnotation, Caret>,\n 'onChange'\n >;\n /** Resolve an in-memory retention key for an item's draft and undo history. */\n getEditStateKey?(item: CodeViewItem<LAnnotation>): string | undefined;\n className?: string;\n style?: CSSProperties;\n /**\n * Ref to the scroll container element. A callback ref follows the React 18\n * protocol: it is called with the element on mount and with `null` on\n * unmount. A cleanup function returned from the callback (the React 19\n * form) is ignored, so release resources on the `null` call or use a ref\n * object.\n */\n containerRef?: Ref<HTMLDivElement>;\n disableWorkerPool?: boolean;\n selectedLines?: CodeViewLineSelection | null;\n onSelectedLinesChange?(selection: CodeViewLineSelection | null): void;\n onScroll?(scrollTop: number, viewer: CodeViewClass<LAnnotation, Caret>): void;\n /** Render a non-virtualized node at the very start of the scroll content,\n * before the first item. Always rendered; scrolls with the content. */\n renderCodeViewHeader?(): ReactNode;\n /** Render a non-virtualized node at the very end of the scroll content, after\n * the last item. Always rendered; scrolls with the content. */\n renderCodeViewFooter?(): ReactNode;\n /**\n * Called with the editor's `EditorChangeEvent` and the owning item on every\n * document change. Do not feed it directly back into the controlled item,\n * which can create update loops.\n */\n onItemEditChange?(\n event: EditorChangeEvent<EditorType, LAnnotation, Caret>,\n item: CodeViewItem<LAnnotation>\n ): void;\n /**\n * Called once when an edit session ends: edit turned off, the item removed,\n * or the CodeView unmounted (where the result is not installed). Collapse\n * suspends the session instead of completing it. `nextItem` is the accepted\n * replacement CodeView built from `item`: the event's completed\n * `file`/`fileDiff` and annotations, `edit: false`, and a bumped `version`.\n * Return `'accept'` to install the edit — CodeView applies `nextItem` through\n * the item update path when the item still exists, and a controlled owner\n * puts the same `nextItem` into its state — or `'reject'` to revert. The event\n * is frozen; re-key the accepted value in place before accepting.\n */\n onItemEditComplete?: CodeViewItemEditCompleteHandler<LAnnotation, Caret>;\n renderCustomHeader?(item: CodeViewItem<LAnnotation>): ReactNode;\n renderHeaderPrefix?(item: CodeViewItem<LAnnotation>): ReactNode;\n renderHeaderFilenameSuffix?(item: CodeViewItem<LAnnotation>): ReactNode;\n renderHeaderMetadata?(item: CodeViewItem<LAnnotation>): ReactNode;\n renderAnnotation?(...args: CodeViewAnnotationArgs<LAnnotation>): ReactNode;\n renderGutterUtility?(\n getHoveredLine: CodeViewGutterUtilityGetter,\n item: CodeViewItem<LAnnotation>\n ): ReactNode;\n}\n\nexport interface ControlledCodeViewProps<\n LAnnotation,\n Caret,\n> extends CodeViewBaseProps<LAnnotation, Caret> {\n items: readonly CodeViewItem<LAnnotation>[];\n initialItems?: never;\n}\n\nexport interface UncontrolledCodeViewProps<\n LAnnotation,\n Caret,\n> extends CodeViewBaseProps<LAnnotation, Caret> {\n // Seeds the imperative CodeView instance once. Later item changes should go\n // through the ref API instead of being reconciled from React props.\n initialItems?: readonly CodeViewItem<LAnnotation>[];\n items?: never;\n}\n\nexport type CodeViewProps<LAnnotation, Caret> =\n | ControlledCodeViewProps<LAnnotation, Caret>\n | UncontrolledCodeViewProps<LAnnotation, Caret>;\n\nexport interface CodeViewHandle<LAnnotation, Caret> {\n addItems(items: readonly CodeViewItem<LAnnotation>[]): void;\n getItem(id: string): CodeViewItem<LAnnotation> | undefined;\n removeItem(id: string): boolean;\n updateItem(item: CodeViewItem<LAnnotation>): boolean;\n updateItemId(oldId: string, newId: string): boolean;\n scrollTo(target: CodeViewScrollTarget): void;\n setSelectedLines(selection: CodeViewLineSelection | null): void;\n getSelectedLines(): CodeViewLineSelection | null;\n clearSelectedLines(): void;\n getEditor(\n id: string\n ):\n | Editor<'file', LAnnotation, Caret>\n | Editor<'file-diff', LAnnotation, Caret>\n | undefined;\n getInstance(): CodeViewClass<LAnnotation, Caret> | undefined;\n}\n\ntype CodeViewComponent = <LAnnotation = undefined, Caret = undefined>(\n props: CodeViewProps<LAnnotation, Caret> & {\n ref?: React.Ref<CodeViewHandle<LAnnotation, Caret>>;\n }\n) => React.JSX.Element;\n\ntype SlotPortalsComponent = <LAnnotation, Caret>(\n props: SlotPortalsProps<LAnnotation, Caret>\n) => React.JSX.Element;\n\ntype DiffItemSlotsComponent = <LAnnotation, Caret>(\n props: DiffItemSlotsProps<LAnnotation, Caret>\n) => ReactNode;\n\ntype FileItemSlotsComponent = <LAnnotation, Caret>(\n props: FileItemSlotsProps<LAnnotation, Caret>\n) => ReactNode;\n\ninterface ManagedContentStore<LAnnotation, Caret> {\n getSnapshot(): CodeViewSlotSnapshot<LAnnotation, Caret> | undefined;\n publish(snapshot: CodeViewSlotSnapshot<LAnnotation, Caret> | undefined): void;\n subscribe(listener: () => void): () => void;\n}\n\ninterface CachedDataRef<LAnnotation, Caret> {\n instance: CodeViewClass<LAnnotation, Caret> | undefined;\n items: readonly CodeViewItem<LAnnotation>[] | undefined;\n controlled: boolean;\n managedOptions: CodeViewOptions<LAnnotation, Caret> | undefined;\n disableFlushSync: boolean;\n slotCoordinator: CodeViewCoordinator<LAnnotation, Caret> | undefined;\n}\n\nfunction createDefaultCache<LAnnotation, Caret>(\n controlled: boolean\n): CachedDataRef<LAnnotation, Caret> {\n return {\n instance: undefined,\n items: undefined,\n controlled,\n managedOptions: undefined,\n disableFlushSync: false,\n slotCoordinator: undefined,\n };\n}\n\nfunction CodeViewInner<LAnnotation = undefined, Caret = undefined>(\n props: CodeViewProps<LAnnotation, Caret>,\n ref: React.ForwardedRef<CodeViewHandle<LAnnotation, Caret>>\n): React.JSX.Element {\n const {\n className,\n containerRef,\n disableWorkerPool = false,\n editorOptions,\n getEditStateKey,\n initialItems,\n items: controlledItems,\n onItemEditChange,\n onItemEditComplete,\n onScroll,\n onSelectedLinesChange,\n options,\n renderAnnotation,\n renderCodeViewFooter,\n renderCodeViewHeader,\n renderCustomHeader,\n renderGutterUtility,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderHeaderPrefix,\n selectedLines,\n style,\n } = props;\n const controlled = controlledItems !== undefined;\n const contextCreateEditor = useCreateEditor<LAnnotation, Caret>();\n const poolManager = useContext(WorkerPoolContext);\n const cachedDataRef = useRef<CachedDataRef<LAnnotation, Caret>>(\n createDefaultCache<LAnnotation, Caret>(controlled)\n );\n const hasCustomHeader = renderCustomHeader != null;\n const hasAnnotationRenderer = renderAnnotation != null;\n const hasGutterRenderer = renderGutterUtility != null;\n const hasHeaderRenderers =\n hasCustomHeader ||\n renderHeaderPrefix != null ||\n renderHeaderFilenameSuffix != null ||\n renderHeaderMetadata != null;\n const hasRenderers =\n hasHeaderRenderers || hasAnnotationRenderer || hasGutterRenderer;\n const hasCodeViewHeader = renderCodeViewHeader != null;\n const hasCodeViewFooter = renderCodeViewFooter != null;\n const emitSelectedLinesChange = useStableCallback(\n (selection: CodeViewLineSelection | null) => {\n onSelectedLinesChange?.(selection);\n }\n );\n const controlledSelection = selectedLines !== undefined;\n\n // Keep the adapter stable so provider and editor-option changes affect the\n // next item edit session without forcing CodeView to reconcile active editors.\n const createEditor = useStableCallback(\n <EType extends EditorType>(\n editorType: EType,\n options: CodeViewCreateEditorOptions<EType, LAnnotation, Caret>,\n editStateKey?: string\n ): Editor<EType, LAnnotation, Caret> => {\n if (contextCreateEditor == null) {\n throw new Error('CodeView: EditContext is not attached');\n }\n\n const resolvedOptions = {\n ...editorOptions,\n ...options,\n } as EditorOptions<EType, LAnnotation, Caret>;\n const editor = contextCreateEditor(\n editorType,\n resolvedOptions,\n editStateKey\n );\n return editor;\n }\n );\n const emitItemEditChange = useStableCallback(\n (\n event: EditorChangeEvent<EditorType, LAnnotation, Caret>,\n item: CodeViewItem<LAnnotation>\n ) => {\n onItemEditChange?.(event, item);\n }\n );\n const emitItemEditComplete = useStableCallback(\n <TMode extends CodeViewMode>(\n event: CodeViewItemEditCompleteEventMap<LAnnotation, Caret>[TMode],\n item: CodeViewModeItemMap<LAnnotation>[TMode],\n nextItem: CodeViewModeItemMap<LAnnotation>[TMode]\n ) => onItemEditComplete?.(event, item, nextItem) ?? 'reject'\n );\n\n const managedOptions = useMemo(\n () =>\n createManagedCodeViewOptions({\n options,\n hasCustomHeader,\n hasGutterRenderer,\n hasCodeViewHeader,\n hasCodeViewFooter,\n onSelectedLinesChange:\n onSelectedLinesChange != null ? emitSelectedLinesChange : undefined,\n controlledSelection,\n getEditStateKey,\n createEditor: contextCreateEditor != null ? createEditor : undefined,\n onItemEditChange:\n onItemEditChange != null ? emitItemEditChange : undefined,\n onItemEditComplete:\n onItemEditComplete != null ? emitItemEditComplete : undefined,\n }),\n [\n contextCreateEditor,\n controlledSelection,\n createEditor,\n emitItemEditChange,\n emitItemEditComplete,\n emitSelectedLinesChange,\n hasCodeViewFooter,\n hasCodeViewHeader,\n hasCustomHeader,\n hasGutterRenderer,\n getEditStateKey,\n onItemEditChange,\n onItemEditComplete,\n onSelectedLinesChange,\n options,\n ]\n );\n\n const [slotContentStore] = useState<ManagedContentStore<LAnnotation, Caret>>(\n () => createSlotContentStore()\n );\n const [, forceUpdate] = useState<unknown>({});\n\n const nodeRef = useStableCallback((node: HTMLDivElement | null) => {\n // If we have a pre-existing instance and there's no node or the node being\n // passed in is NOT the same as before, then we need to clean up and\n // garbage collect the old instance\n if (\n cachedDataRef.current.instance != null &&\n (node == null ||\n node !== cachedDataRef.current.instance.getContainerElement())\n ) {\n cachedDataRef.current.instance.cleanUp();\n slotContentStore.publish(undefined);\n cachedDataRef.current = createDefaultCache<LAnnotation, Caret>(\n controlled\n );\n }\n\n // If our node matches the existing node then we should not attempt to\n // setup. This is a case that should never be possible to hit, but just in\n // case, lets make sure we don't re-setup an instance that is already setup\n // properly\n if (\n node != null &&\n node !== cachedDataRef.current.instance?.getContainerElement()\n ) {\n cachedDataRef.current.instance = new CodeViewClass<LAnnotation, Caret>(\n managedOptions,\n !disableWorkerPool ? poolManager : undefined,\n true\n );\n cachedDataRef.current.instance.setup(node);\n }\n\n assignRef(containerRef, node);\n });\n\n const onSnapshotChange = useStableCallback(\n (snapshot: CodeViewSlotSnapshot<LAnnotation, Caret> | undefined) => {\n if (cachedDataRef.current.disableFlushSync) {\n slotContentStore.publish(snapshot);\n } else {\n flushSync(() => {\n slotContentStore.publish(snapshot);\n });\n }\n }\n );\n\n const slotCoordinator: CodeViewCoordinator<LAnnotation, Caret> | undefined =\n useMemo(() => {\n // A coordinator is needed whenever React portals anything — per-item\n // slots and codeview header and footer\n if (\n !hasHeaderRenderers &&\n !hasAnnotationRenderer &&\n !hasGutterRenderer &&\n !hasCodeViewHeader &&\n !hasCodeViewFooter\n ) {\n return undefined;\n } else {\n return {\n hasHeaderRenderers,\n hasAnnotationRenderer,\n hasGutterRenderer,\n onSnapshotChange,\n };\n }\n }, [\n onSnapshotChange,\n hasAnnotationRenderer,\n hasGutterRenderer,\n hasHeaderRenderers,\n hasCodeViewHeader,\n hasCodeViewFooter,\n ]);\n\n useIsomorphicLayoutEffect(() => {\n return onScroll != null\n ? cachedDataRef.current.instance?.subscribeToScroll(onScroll)\n : undefined;\n });\n\n useIsomorphicLayoutEffect(() => {\n const {\n instance,\n controlled: prevControlled,\n items: prevItems,\n managedOptions: prevManagedOptions,\n slotCoordinator: prevSlotCoordinator,\n } = cachedDataRef.current;\n if (instance == null) {\n return;\n }\n\n try {\n cachedDataRef.current.disableFlushSync = true;\n let shouldRender = false;\n\n if (!areOptionsEqual(managedOptions, prevManagedOptions)) {\n cachedDataRef.current.managedOptions = managedOptions;\n instance.setOptions(managedOptions);\n shouldRender = true;\n }\n\n if (prevControlled !== controlled) {\n console.error(\n 'CodeView: cannot switch between controlled and uncontrolled modes. Remount with a new key instead.'\n );\n return;\n }\n\n if (controlled) {\n if (controlledItems !== prevItems) {\n if (areItemListsEqual(prevItems, controlledItems)) {\n cachedDataRef.current.items = controlledItems;\n } else if (isAppendOnlyItemUpdate(prevItems, controlledItems)) {\n cachedDataRef.current.items = controlledItems;\n instance.addItems(controlledItems.slice(prevItems.length));\n } else {\n cachedDataRef.current.items = controlledItems;\n instance.setItems(controlledItems);\n shouldRender = true;\n }\n }\n }\n // If uncontrolled, we should only ever set items once, and just depend\n // on imperative instance changes going forward\n else if (prevItems == null) {\n const seedItems = initialItems ?? [];\n cachedDataRef.current.items = seedItems;\n if (seedItems.length > 0) {\n instance.setItems(seedItems);\n shouldRender = true;\n }\n }\n\n if (selectedLines !== undefined) {\n instance.setSelectedLines(selectedLines, { notify: false });\n }\n\n const slotPublish = instance.setSlotCoordinator(slotCoordinator);\n let forceInlinePublish = false;\n if (slotCoordinator !== prevSlotCoordinator) {\n if (slotCoordinator == null || prevSlotCoordinator == null) {\n forceInlinePublish = true;\n }\n cachedDataRef.current.slotCoordinator = slotCoordinator;\n }\n\n if (shouldRender || slotPublish) {\n instance.render(true);\n }\n\n // FIXME(amadeus): This feels kinda bad and flakey with regards to how\n // other things are working... it makes me think that we should\n // re-architect the slotCoordinator a bit, and maybe DON'T make it an\n // undefineable thing...\n if (slotPublish && slotCoordinator == null) {\n slotContentStore.publish(undefined);\n }\n\n if (forceInlinePublish) {\n forceUpdate({});\n }\n } finally {\n cachedDataRef.current.disableFlushSync = false;\n }\n });\n\n // Setup the ref handler\n useImperativeHandle(\n ref,\n (): CodeViewHandle<LAnnotation, Caret> => ({\n addItems(items) {\n const { controlled, instance } = cachedDataRef.current;\n assertUncontrolledCodeViewAction(controlled, 'addItems');\n if (instance == null) {\n console.error(\n 'CodeView.addItems: no valid instance to append items with',\n items\n );\n } else {\n instance.addItems(items);\n }\n },\n getItem(id) {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error('CodeView.getItem: no valid instance exists', id);\n return undefined;\n } else {\n return instance.getItem(id);\n }\n },\n removeItem(id) {\n const { controlled, instance } = cachedDataRef.current;\n assertUncontrolledCodeViewAction(controlled, 'removeItem');\n if (instance == null) {\n console.error(\n 'CodeView.removeItem: no valid instance to remove item from',\n id\n );\n return false;\n }\n\n return instance.removeItem(id);\n },\n updateItem(item) {\n const { controlled, instance } = cachedDataRef.current;\n assertUncontrolledCodeViewAction(controlled, 'updateItem');\n if (instance == null) {\n console.error(\n 'CodeView.updateItem: no valid instance to update item with',\n item\n );\n return false;\n }\n\n return instance.updateItem(item);\n },\n updateItemId(oldId, newId) {\n const { controlled, instance } = cachedDataRef.current;\n assertUncontrolledCodeViewAction(controlled, 'updateItemId');\n if (instance == null) {\n console.error(\n 'CodeView.updateItemId: no valid instance to update item id with',\n oldId,\n newId\n );\n return false;\n }\n\n return instance.updateItemId(oldId, newId);\n },\n scrollTo(target) {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error(\n 'CodeView.scrollTo: no valid instance to scroll with',\n target\n );\n } else {\n instance.scrollTo(target);\n }\n },\n setSelectedLines(selection) {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error(\n 'CodeView.setSelectedLines: no valid instance to update selection with',\n selection\n );\n } else {\n instance.setSelectedLines(selection, { notify: false });\n emitSelectedLinesChange(selection);\n }\n },\n getSelectedLines() {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error('CodeView.getSelectedLines: no valid instance exists');\n return null;\n } else {\n return instance.getSelectedLines();\n }\n },\n clearSelectedLines() {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error(\n 'CodeView.clearSelectedLines: no valid instance to update selection with'\n );\n } else {\n instance.clearSelectedLines({ notify: false });\n emitSelectedLinesChange(null);\n }\n },\n getEditor(id) {\n const { instance } = cachedDataRef.current;\n if (instance == null) {\n console.error('CodeView.getEditor: no valid instance exists', id);\n return undefined;\n }\n\n return instance.getEditor(id);\n },\n getInstance() {\n return cachedDataRef.current.instance;\n },\n }),\n [emitSelectedLinesChange]\n );\n\n return (\n <>\n <div ref={nodeRef} className={className} style={style} />\n {(hasRenderers || hasCodeViewHeader || hasCodeViewFooter) && (\n <SlotPortals<LAnnotation, Caret>\n managedContentStore={slotContentStore}\n renderCustomHeader={renderCustomHeader}\n renderHeaderPrefix={renderHeaderPrefix}\n renderHeaderFilenameSuffix={renderHeaderFilenameSuffix}\n renderHeaderMetadata={renderHeaderMetadata}\n renderAnnotation={renderAnnotation}\n renderGutterUtility={renderGutterUtility}\n renderCodeViewHeader={renderCodeViewHeader}\n renderCodeViewFooter={renderCodeViewFooter}\n />\n )}\n </>\n );\n}\n\n// React was a mistake\nexport const CodeView = forwardRef(CodeViewInner) as CodeViewComponent;\n\nfunction isAppendOnlyItemUpdate<LAnnotation>(\n previousItems: readonly CodeViewItem<LAnnotation>[] | undefined,\n nextItems: readonly CodeViewItem<LAnnotation>[]\n): previousItems is readonly CodeViewItem<LAnnotation>[] {\n if (previousItems == null || nextItems.length <= previousItems.length) {\n return false;\n }\n\n if (previousItems.length === 0) {\n return true;\n }\n\n for (let index = 0; index < previousItems.length; index++) {\n if (nextItems[index] !== previousItems[index]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction areItemListsEqual<LAnnotation>(\n previousItems: readonly CodeViewItem<LAnnotation>[] | undefined,\n nextItems: readonly CodeViewItem<LAnnotation>[]\n): boolean {\n if (previousItems == null || previousItems.length !== nextItems.length) {\n return false;\n }\n\n for (let index = 0; index < previousItems.length; index++) {\n if (previousItems[index] !== nextItems[index]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction assertUncontrolledCodeViewAction(\n controlled: boolean,\n action: string\n): void {\n if (!controlled) {\n return;\n }\n\n throw new Error(\n `CodeView.${action} cannot be used when CodeView is controlled. Use initialItems for imperative item updates.`\n );\n}\n\nfunction createSlotContentStore<LAnnotation, Caret>(): ManagedContentStore<\n LAnnotation,\n Caret\n> {\n let snapshot: CodeViewSlotSnapshot<LAnnotation, Caret> | undefined;\n const listeners = new Set<() => void>();\n\n return {\n getSnapshot() {\n return snapshot;\n },\n publish(nextSnapshot) {\n if (snapshot === nextSnapshot) {\n return;\n }\n\n snapshot = nextSnapshot;\n for (const listener of listeners) {\n listener();\n }\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\ninterface CreateManagedCodeViewOptionsProps<LAnnotation, Caret> {\n options: CodeViewReactOptions<LAnnotation, Caret> | undefined;\n hasCustomHeader: boolean;\n hasGutterRenderer: boolean;\n hasCodeViewHeader: boolean;\n hasCodeViewFooter: boolean;\n onSelectedLinesChange?(selection: CodeViewLineSelection | null): void;\n controlledSelection: boolean;\n getEditStateKey: CodeViewOptions<LAnnotation, Caret>['getEditStateKey'];\n createEditor: CodeViewOptions<LAnnotation, Caret>['createEditor'];\n onItemEditChange: CodeViewOptions<LAnnotation, Caret>['onItemEditChange'];\n onItemEditComplete: CodeViewOptions<LAnnotation, Caret>['onItemEditComplete'];\n}\n\nfunction createManagedCodeViewOptions<LAnnotation, Caret>({\n options,\n hasCustomHeader,\n hasGutterRenderer,\n hasCodeViewHeader,\n hasCodeViewFooter,\n onSelectedLinesChange,\n controlledSelection,\n getEditStateKey,\n createEditor,\n onItemEditChange,\n onItemEditComplete,\n}: CreateManagedCodeViewOptionsProps<LAnnotation, Caret>): CodeViewOptions<\n LAnnotation,\n Caret\n> {\n const managedOptions: CodeViewOptions<LAnnotation, Caret> = {\n ...options,\n controlledSelection,\n onSelectedLinesChange,\n createEditor,\n };\n\n if (getEditStateKey != null) {\n managedOptions.getEditStateKey = getEditStateKey;\n }\n\n // Prop-level editor callbacks win over their options-object counterparts,\n // but an absent prop must not clobber a value provided via `options`.\n if (onItemEditChange != null) {\n managedOptions.onItemEditChange = onItemEditChange;\n }\n if (onItemEditComplete != null) {\n managedOptions.onItemEditComplete = onItemEditComplete;\n }\n\n // The imperative CodeView adapters use this callback's presence to\n // switch file and diff headers into custom-slot mode. React portals\n // provide the actual header content, so this placeholder\n // intentionally returns nothing.\n if (hasCustomHeader) {\n managedOptions.renderCustomHeader = noopRender;\n }\n\n // The imperative CodeView adapters use this callback's presence to\n // create the custom gutter utility slot. React portals provide the\n // actual content, so this placeholder intentionally returns nothing.\n if (hasGutterRenderer) {\n managedOptions.renderGutterUtility = noopRender;\n }\n\n // The imperative CodeView adapters use these callbacks' presence to create the\n // header/footer host elements. React portals the actual content into them (via\n // the slot snapshot), so these placeholders intentionally return nothing.\n if (hasCodeViewHeader) {\n managedOptions.renderCodeViewHeader = noopRender;\n }\n if (hasCodeViewFooter) {\n managedOptions.renderCodeViewFooter = noopRender;\n }\n\n return managedOptions;\n}\n\ninterface CodeViewItemRenderers<LAnnotation, Caret> {\n renderCustomHeader: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderCustomHeader'];\n renderHeaderPrefix: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderPrefix'];\n renderHeaderFilenameSuffix: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderFilenameSuffix'];\n renderHeaderMetadata: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderMetadata'];\n renderAnnotation: CodeViewBaseProps<LAnnotation, Caret>['renderAnnotation'];\n renderGutterUtility: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderGutterUtility'];\n}\n\ninterface DiffItemSlotsProps<LAnnotation, Caret> extends CodeViewItemRenderers<\n LAnnotation,\n Caret\n> {\n version: number;\n item: CodeViewDiffItem<LAnnotation>;\n fileDiff: FileDiffMetadata;\n lineAnnotations: DiffLineAnnotation<LAnnotation>[];\n getHoveredLine(): GetHoveredLineResult<'diff'> | undefined;\n getAnnotationSlotName(annotation: DiffLineAnnotation<LAnnotation>): string;\n}\n\ninterface FileItemSlotsProps<LAnnotation, Caret> extends CodeViewItemRenderers<\n LAnnotation,\n Caret\n> {\n version: number;\n item: CodeViewFileItem<LAnnotation>;\n file: FileContents;\n lineAnnotations: LineAnnotation<LAnnotation>[];\n getHoveredLine(): GetHoveredLineResult<'file'> | undefined;\n getAnnotationSlotName(annotation: LineAnnotation<LAnnotation>): string;\n}\n\ninterface SlotPortalsProps<LAnnotation, Caret> {\n managedContentStore: ManagedContentStore<LAnnotation, Caret>;\n renderCustomHeader: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderCustomHeader'];\n renderHeaderPrefix: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderPrefix'];\n renderHeaderFilenameSuffix: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderFilenameSuffix'];\n renderHeaderMetadata: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderHeaderMetadata'];\n renderAnnotation: CodeViewBaseProps<LAnnotation, Caret>['renderAnnotation'];\n renderGutterUtility: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderGutterUtility'];\n renderCodeViewHeader: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderCodeViewHeader'];\n renderCodeViewFooter: CodeViewBaseProps<\n LAnnotation,\n Caret\n >['renderCodeViewFooter'];\n}\n\nconst SlotPortals = memo(function SlotPortals<LAnnotation, Caret>({\n managedContentStore,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n renderCodeViewHeader,\n renderCodeViewFooter,\n}: SlotPortalsProps<LAnnotation, Caret>) {\n 'use no memo';\n const subscribe = useStableCallback((listener: () => void) =>\n managedContentStore.subscribe(listener)\n );\n const getSnapshot = useStableCallback(() =>\n managedContentStore.getSnapshot()\n );\n const snapshot = useSyncExternalStore<\n CodeViewSlotSnapshot<LAnnotation, Caret> | undefined\n >(subscribe, getSnapshot, getSnapshot);\n // NOTE(amadeus): And just like that, the react compiler do be failing us\n // lol... we need to pre-render everything for items, headers and footers to\n // not trigger needless renders while scrolling\n const renderedItems = useMemo(\n () => {\n const renderers = {\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n };\n return snapshot?.items?.map((renderedItem) =>\n createPortal(\n renderedItem.type === 'diff' ? (\n <DiffItemSlots\n version={renderedItem.version ?? 0}\n item={renderedItem.item}\n getHoveredLine={renderedItem.instance.getHoveredLine}\n getAnnotationSlotName={\n renderedItem.instance.getAnnotationSlotName\n }\n {...getCodeViewItemRenderData(renderedItem)}\n {...renderers}\n />\n ) : (\n <FileItemSlots\n version={renderedItem.version ?? 0}\n item={renderedItem.item}\n getHoveredLine={renderedItem.instance.getHoveredLine}\n getAnnotationSlotName={\n renderedItem.instance.getAnnotationSlotName\n }\n {...getCodeViewItemRenderData(renderedItem)}\n {...renderers}\n />\n ),\n renderedItem.element,\n renderedItem.id\n )\n );\n },\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n [\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n snapshot?.items,\n ]\n );\n const renderedHeader = useMemo(() => {\n return renderCodeViewHeader != null && snapshot?.header != null\n ? createPortal(renderCodeViewHeader(), snapshot.header)\n : null;\n }, [renderCodeViewHeader, snapshot?.header]);\n const renderedFooter = useMemo(() => {\n return renderCodeViewFooter != null && snapshot?.footer != null\n ? createPortal(renderCodeViewFooter(), snapshot.footer)\n : null;\n }, [renderCodeViewFooter, snapshot?.footer]);\n return (\n <>\n {renderedItems}\n {renderedHeader}\n {renderedFooter}\n </>\n );\n}) as SlotPortalsComponent;\n\n// Each item's slot content is its own memoized component, so republishing the\n// slot snapshot only rerenders items whose displayed data changed. An item in\n// an edit session keeps the same data while the editor moves its rows.\nconst DiffItemSlots = memo(function DiffItemSlots<LAnnotation, Caret>({\n item,\n fileDiff,\n lineAnnotations,\n getHoveredLine,\n getAnnotationSlotName,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n}: DiffItemSlotsProps<LAnnotation, Caret>): ReactNode {\n return renderDiffChildren({\n fileDiff,\n renderCustomHeader:\n renderCustomHeader != null ? () => renderCustomHeader(item) : undefined,\n renderHeaderPrefix:\n renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : undefined,\n renderHeaderFilenameSuffix:\n renderHeaderFilenameSuffix != null\n ? () => renderHeaderFilenameSuffix(item)\n : undefined,\n renderHeaderMetadata:\n renderHeaderMetadata != null\n ? () => renderHeaderMetadata(item)\n : undefined,\n renderAnnotation:\n renderAnnotation != null\n ? (annotation, fileDiff) => renderAnnotation(annotation, fileDiff, item)\n : undefined,\n lineAnnotations,\n renderGutterUtility:\n renderGutterUtility != null\n ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item)\n : undefined,\n getHoveredLine,\n getAnnotationSlotName,\n });\n}) as DiffItemSlotsComponent;\n\nconst FileItemSlots = memo(function FileItemSlots<LAnnotation, Caret>({\n item,\n file,\n lineAnnotations,\n getHoveredLine,\n getAnnotationSlotName,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n}: FileItemSlotsProps<LAnnotation, Caret>): ReactNode {\n return renderFileChildren({\n file,\n renderCustomHeader:\n renderCustomHeader != null ? () => renderCustomHeader(item) : undefined,\n renderHeaderPrefix:\n renderHeaderPrefix != null ? () => renderHeaderPrefix(item) : undefined,\n renderHeaderFilenameSuffix:\n renderHeaderFilenameSuffix != null\n ? () => renderHeaderFilenameSuffix(item)\n : undefined,\n renderHeaderMetadata:\n renderHeaderMetadata != null\n ? () => renderHeaderMetadata(item)\n : undefined,\n renderAnnotation:\n renderAnnotation != null\n ? (annotation, file) => renderAnnotation(annotation, file, item)\n : undefined,\n lineAnnotations,\n renderGutterUtility:\n renderGutterUtility != null\n ? (getHoveredLine) => renderGutterUtility(getHoveredLine, item)\n : undefined,\n getHoveredLine,\n getAnnotationSlotName,\n });\n}) as FileItemSlotsComponent;\n\nfunction noopRender() {\n return undefined;\n}\n"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { useFileInstance } from "./utils/useFileInstance.js";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  //#region src/react/File.tsx
8
8
  function File({ file, lineAnnotations, selectedLines, options, editorOptions, editStateKey, metrics, className, style, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata, prerenderedHTML, renderGutterUtility, disableWorkerPool = false, edit = false, onEditChange, onEditComplete }) {
9
- const { ref, getHoveredLine, getAnnotationSlotName } = useFileInstance({
9
+ const { ref, getHoveredLine, getAnnotationSlotName, file: renderedFile, lineAnnotations: renderedAnnotations } = useFileInstance({
10
10
  file,
11
11
  options,
12
12
  editorOptions,
@@ -23,14 +23,14 @@ function File({ file, lineAnnotations, selectedLines, options, editorOptions, ed
23
23
  onEditComplete
24
24
  });
25
25
  const children = renderFileChildren({
26
- file,
26
+ file: renderedFile,
27
27
  renderAnnotation,
28
28
  renderCustomHeader,
29
29
  renderHeaderPrefix,
30
30
  renderHeaderFilenameSuffix,
31
31
  renderHeaderMetadata,
32
32
  renderGutterUtility,
33
- lineAnnotations,
33
+ lineAnnotations: renderedAnnotations,
34
34
  getHoveredLine,
35
35
  getAnnotationSlotName
36
36
  });
@@ -1 +1 @@
1
- {"version":3,"file":"File.js","names":[],"sources":["../../src/react/File.tsx"],"sourcesContent":["'use client';\n\nimport {\n type FileEditChangeHandler,\n type FileEditCompleteEvent,\n type FileEditCompleteHandler,\n} from '../components/File';\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileProps } from './types';\nimport { renderFileChildren } from './utils/renderFileChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileInstance } from './utils/useFileInstance';\n\nexport type {\n FileEditChangeHandler,\n FileEditCompleteEvent,\n FileEditCompleteHandler,\n};\nexport type { FileOptions } from './types';\n\nexport function File<LAnnotation = undefined, Caret = undefined>({\n file,\n lineAnnotations,\n selectedLines,\n options,\n editorOptions,\n editStateKey,\n metrics,\n className,\n style,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n prerenderedHTML,\n renderGutterUtility,\n disableWorkerPool = false,\n edit = false,\n onEditChange,\n onEditComplete,\n}: FileProps<LAnnotation, Caret>): React.JSX.Element {\n const { ref, getHoveredLine, getAnnotationSlotName } = useFileInstance({\n file,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n edit,\n onEditChange,\n onEditComplete,\n });\n const children = renderFileChildren({\n file,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderGutterUtility,\n lineAnnotations,\n getHoveredLine,\n getAnnotationSlotName,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n"],"mappings":";;;;;;;AAoBA,SAAgB,KAAiD,EAC/D,MACA,iBACA,eACA,SACA,eACA,cACA,SACA,WACA,OACA,kBACA,oBACA,oBACA,4BACA,sBACA,iBACA,qBACA,oBAAoB,OACpB,OAAO,OACP,cACA,kBACmD;CACnD,MAAM,EAAE,KAAK,gBAAgB,0BAA0B,gBAAgB;EACrE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,WAAW,mBAAmB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,OACE,oBAAC,gBAAD;EAAqB;EAAgB;EAAkB;EACpD,UAAA,eAAe,UAAU,eAAe;CAC3B,CAAA;AAEpB"}
1
+ {"version":3,"file":"File.js","names":[],"sources":["../../src/react/File.tsx"],"sourcesContent":["'use client';\n\nimport {\n type FileEditChangeHandler,\n type FileEditCompleteEvent,\n type FileEditCompleteHandler,\n} from '../components/File';\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileProps } from './types';\nimport { renderFileChildren } from './utils/renderFileChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileInstance } from './utils/useFileInstance';\n\nexport type {\n FileEditChangeHandler,\n FileEditCompleteEvent,\n FileEditCompleteHandler,\n};\nexport type { FileOptions } from './types';\n\nexport function File<LAnnotation = undefined, Caret = undefined>({\n file,\n lineAnnotations,\n selectedLines,\n options,\n editorOptions,\n editStateKey,\n metrics,\n className,\n style,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n prerenderedHTML,\n renderGutterUtility,\n disableWorkerPool = false,\n edit = false,\n onEditChange,\n onEditComplete,\n}: FileProps<LAnnotation, Caret>): React.JSX.Element {\n const {\n ref,\n getHoveredLine,\n getAnnotationSlotName,\n file: renderedFile,\n lineAnnotations: renderedAnnotations,\n } = useFileInstance({\n file,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n edit,\n onEditChange,\n onEditComplete,\n });\n const children = renderFileChildren({\n file: renderedFile,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderGutterUtility,\n lineAnnotations: renderedAnnotations,\n getHoveredLine,\n getAnnotationSlotName,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n"],"mappings":";;;;;;;AAoBA,SAAgB,KAAiD,EAC/D,MACA,iBACA,eACA,SACA,eACA,cACA,SACA,WACA,OACA,kBACA,oBACA,oBACA,4BACA,sBACA,iBACA,qBACA,oBAAoB,OACpB,OAAO,OACP,cACA,kBACmD;CACnD,MAAM,EACJ,KACA,gBACA,uBACA,MAAM,cACN,iBAAiB,wBACf,gBAAgB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,WAAW,mBAAmB;EAClC,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA,iBAAiB;EACjB;EACA;CACF,CAAC;CACD,OACE,oBAAC,gBAAD;EAAqB;EAAgB;EAAkB;EACpD,UAAA,eAAe,UAAU,eAAe;CAC3B,CAAA;AAEpB"}
@@ -6,7 +6,7 @@ import { useFileDiffInstance } from "./utils/useFileDiffInstance.js";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  //#region src/react/FileDiff.tsx
8
8
  function FileDiff({ fileDiff, options, editorOptions, editStateKey, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata, renderGutterUtility, disableWorkerPool = false, edit = false, onEditChange, onEditComplete }) {
9
- const { ref, getHoveredLine, getAnnotationSlotName } = useFileDiffInstance({
9
+ const { ref, getHoveredLine, getAnnotationSlotName, fileDiff: renderedDiff, lineAnnotations: renderedAnnotations } = useFileDiffInstance({
10
10
  fileDiff,
11
11
  options,
12
12
  editorOptions,
@@ -23,14 +23,14 @@ function FileDiff({ fileDiff, options, editorOptions, editStateKey, metrics, lin
23
23
  onEditComplete
24
24
  });
25
25
  const children = renderDiffChildren({
26
- fileDiff,
26
+ fileDiff: renderedDiff,
27
27
  renderCustomHeader,
28
28
  renderHeaderPrefix,
29
29
  renderHeaderFilenameSuffix,
30
30
  renderHeaderMetadata,
31
31
  renderAnnotation,
32
32
  renderGutterUtility,
33
- lineAnnotations,
33
+ lineAnnotations: renderedAnnotations,
34
34
  getHoveredLine,
35
35
  getAnnotationSlotName
36
36
  });
@@ -1 +1 @@
1
- {"version":3,"file":"FileDiff.js","names":[],"sources":["../../src/react/FileDiff.tsx"],"sourcesContent":["'use client';\n\nimport type {\n FileDiffEditChangeHandler,\n FileDiffEditCompleteEvent,\n FileDiffEditCompleteHandler,\n} from '../components/FileDiff';\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileDiffMetadata } from '../types';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport type {\n FileDiffEditChangeHandler,\n FileDiffEditCompleteEvent,\n FileDiffEditCompleteHandler,\n FileDiffMetadata,\n};\n\nexport interface FileDiffProps<LAnnotation, Caret> extends DiffBasePropsReact<\n LAnnotation,\n Caret\n> {\n fileDiff: FileDiffMetadata;\n disableWorkerPool?: boolean;\n}\n\nexport function FileDiff<LAnnotation = undefined, Caret = undefined>({\n fileDiff,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderGutterUtility,\n disableWorkerPool = false,\n edit = false,\n onEditChange,\n onEditComplete,\n}: FileDiffProps<LAnnotation, Caret>): React.JSX.Element {\n const { ref, getHoveredLine, getAnnotationSlotName } = useFileDiffInstance({\n fileDiff,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n edit,\n onEditChange,\n onEditComplete,\n });\n const children = renderDiffChildren({\n fileDiff,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n lineAnnotations,\n getHoveredLine,\n getAnnotationSlotName,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n"],"mappings":";;;;;;;AA6BA,SAAgB,SAAqD,EACnE,UACA,SACA,eACA,cACA,SACA,iBACA,eACA,WACA,OACA,iBACA,kBACA,oBACA,oBACA,4BACA,sBACA,qBACA,oBAAoB,OACpB,OAAO,OACP,cACA,kBACuD;CACvD,MAAM,EAAE,KAAK,gBAAgB,0BAA0B,oBAAoB;EACzE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,WAAW,mBAAmB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,OACE,oBAAC,gBAAD;EAAqB;EAAgB;EAAkB;EACpD,UAAA,eAAe,UAAU,eAAe;CAC3B,CAAA;AAEpB"}
1
+ {"version":3,"file":"FileDiff.js","names":[],"sources":["../../src/react/FileDiff.tsx"],"sourcesContent":["'use client';\n\nimport type {\n FileDiffEditChangeHandler,\n FileDiffEditCompleteEvent,\n FileDiffEditCompleteHandler,\n} from '../components/FileDiff';\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileDiffMetadata } from '../types';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport type {\n FileDiffEditChangeHandler,\n FileDiffEditCompleteEvent,\n FileDiffEditCompleteHandler,\n FileDiffMetadata,\n};\n\nexport interface FileDiffProps<LAnnotation, Caret> extends DiffBasePropsReact<\n LAnnotation,\n Caret\n> {\n fileDiff: FileDiffMetadata;\n disableWorkerPool?: boolean;\n}\n\nexport function FileDiff<LAnnotation = undefined, Caret = undefined>({\n fileDiff,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderGutterUtility,\n disableWorkerPool = false,\n edit = false,\n onEditChange,\n onEditComplete,\n}: FileDiffProps<LAnnotation, Caret>): React.JSX.Element {\n const {\n ref,\n getHoveredLine,\n getAnnotationSlotName,\n fileDiff: renderedDiff,\n lineAnnotations: renderedAnnotations,\n } = useFileDiffInstance({\n fileDiff,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n edit,\n onEditChange,\n onEditComplete,\n });\n const children = renderDiffChildren({\n fileDiff: renderedDiff,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n lineAnnotations: renderedAnnotations,\n getHoveredLine,\n getAnnotationSlotName,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n"],"mappings":";;;;;;;AA6BA,SAAgB,SAAqD,EACnE,UACA,SACA,eACA,cACA,SACA,iBACA,eACA,WACA,OACA,iBACA,kBACA,oBACA,oBACA,4BACA,sBACA,qBACA,oBAAoB,OACpB,OAAO,OACP,cACA,kBACuD;CACvD,MAAM,EACJ,KACA,gBACA,uBACA,UAAU,cACV,iBAAiB,wBACf,oBAAoB;EACtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,WAAW,mBAAmB;EAClC,UAAU;EACV;EACA;EACA;EACA;EACA;EACA;EACA,iBAAiB;EACjB;EACA;CACF,CAAC;CACD,OACE,oBAAC,gBAAD;EAAqB;EAAgB;EAAkB;EACpD,UAAA,eAAe,UAAU,eAAe;CAC3B,CAAA;AAEpB"}
@@ -6,7 +6,7 @@ import { useFileDiffInstance } from "./utils/useFileDiffInstance.js";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  //#region src/react/MultiFileDiff.tsx
8
8
  function MultiFileDiff({ oldFile, newFile, options, editorOptions, editStateKey, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata, renderGutterUtility, disableWorkerPool = false, edit = false, onEditChange, onEditComplete }) {
9
- const { fileDiff, ref, getHoveredLine, getAnnotationSlotName } = useFileDiffInstance({
9
+ const { fileDiff, ref, getHoveredLine, getAnnotationSlotName, lineAnnotations: renderedAnnotations } = useFileDiffInstance({
10
10
  oldFile,
11
11
  newFile,
12
12
  options,
@@ -30,7 +30,7 @@ function MultiFileDiff({ oldFile, newFile, options, editorOptions, editStateKey,
30
30
  renderHeaderFilenameSuffix,
31
31
  renderHeaderMetadata,
32
32
  renderAnnotation,
33
- lineAnnotations,
33
+ lineAnnotations: renderedAnnotations,
34
34
  renderGutterUtility,
35
35
  getHoveredLine,
36
36
  getAnnotationSlotName
@@ -1 +1 @@
1
- {"version":3,"file":"MultiFileDiff.js","names":[],"sources":["../../src/react/MultiFileDiff.tsx"],"sourcesContent":["'use client';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { DiffFileInput, FileContents } from '../types';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport type { FileContents };\n\ninterface MultiFileDiffBaseProps<LAnnotation, Caret> extends DiffBasePropsReact<\n LAnnotation,\n Caret\n> {\n disableWorkerPool?: boolean;\n}\n\nexport type MultiFileDiffProps<LAnnotation, Caret> = MultiFileDiffBaseProps<\n LAnnotation,\n Caret\n> &\n DiffFileInput;\n\nexport function MultiFileDiff<LAnnotation = undefined, Caret = undefined>({\n oldFile,\n newFile,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderGutterUtility,\n disableWorkerPool = false,\n edit = false,\n onEditChange,\n onEditComplete,\n}: MultiFileDiffProps<LAnnotation, Caret>): React.JSX.Element {\n const { fileDiff, ref, getHoveredLine, getAnnotationSlotName } =\n useFileDiffInstance({\n oldFile,\n newFile,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n edit,\n onEditChange,\n onEditComplete,\n });\n const children = renderDiffChildren({\n fileDiff,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n lineAnnotations,\n renderGutterUtility,\n getHoveredLine,\n getAnnotationSlotName,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n"],"mappings":";;;;;;;AAwBA,SAAgB,cAA0D,EACxE,SACA,SACA,SACA,eACA,cACA,SACA,iBACA,eACA,WACA,OACA,iBACA,kBACA,oBACA,oBACA,4BACA,sBACA,qBACA,oBAAoB,OACpB,OAAO,OACP,cACA,kBAC4D;CAC5D,MAAM,EAAE,UAAU,KAAK,gBAAgB,0BACrC,oBAAoB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACA;EACA;EACA;CACF,CAAC;CACH,MAAM,WAAW,mBAAmB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,OACE,oBAAC,gBAAD;EAAqB;EAAgB;EAAkB;EACpD,UAAA,eAAe,UAAU,eAAe;CAC3B,CAAA;AAEpB"}
1
+ {"version":3,"file":"MultiFileDiff.js","names":[],"sources":["../../src/react/MultiFileDiff.tsx"],"sourcesContent":["'use client';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { DiffFileInput, FileContents } from '../types';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport type { FileContents };\n\ninterface MultiFileDiffBaseProps<LAnnotation, Caret> extends DiffBasePropsReact<\n LAnnotation,\n Caret\n> {\n disableWorkerPool?: boolean;\n}\n\nexport type MultiFileDiffProps<LAnnotation, Caret> = MultiFileDiffBaseProps<\n LAnnotation,\n Caret\n> &\n DiffFileInput;\n\nexport function MultiFileDiff<LAnnotation = undefined, Caret = undefined>({\n oldFile,\n newFile,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderGutterUtility,\n disableWorkerPool = false,\n edit = false,\n onEditChange,\n onEditComplete,\n}: MultiFileDiffProps<LAnnotation, Caret>): React.JSX.Element {\n const {\n fileDiff,\n ref,\n getHoveredLine,\n getAnnotationSlotName,\n lineAnnotations: renderedAnnotations,\n } = useFileDiffInstance({\n oldFile,\n newFile,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n edit,\n onEditChange,\n onEditComplete,\n });\n const children = renderDiffChildren({\n fileDiff,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n lineAnnotations: renderedAnnotations,\n renderGutterUtility,\n getHoveredLine,\n getAnnotationSlotName,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n"],"mappings":";;;;;;;AAwBA,SAAgB,cAA0D,EACxE,SACA,SACA,SACA,eACA,cACA,SACA,iBACA,eACA,WACA,OACA,iBACA,kBACA,oBACA,oBACA,4BACA,sBACA,qBACA,oBAAoB,OACpB,OAAO,OACP,cACA,kBAC4D;CAC5D,MAAM,EACJ,UACA,KACA,gBACA,uBACA,iBAAiB,wBACf,oBAAoB;EACtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,WAAW,mBAAmB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA,iBAAiB;EACjB;EACA;EACA;CACF,CAAC;CACD,OACE,oBAAC,gBAAD;EAAqB;EAAgB;EAAkB;EACpD,UAAA,eAAe,UAAU,eAAe;CAC3B,CAAA;AAEpB"}
@@ -9,7 +9,7 @@ import { jsx } from "react/jsx-runtime";
9
9
  //#region src/react/PatchDiff.tsx
10
10
  function PatchDiff({ patch, options, editorOptions, editStateKey, metrics, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata, renderGutterUtility, disableWorkerPool = false, edit = false, onEditChange, onEditComplete }) {
11
11
  const fileDiff = usePatch(patch);
12
- const { ref, getHoveredLine, getAnnotationSlotName } = useFileDiffInstance({
12
+ const { ref, getHoveredLine, getAnnotationSlotName, fileDiff: renderedDiff, lineAnnotations: renderedAnnotations } = useFileDiffInstance({
13
13
  fileDiff,
14
14
  options,
15
15
  editorOptions,
@@ -26,13 +26,13 @@ function PatchDiff({ patch, options, editorOptions, editStateKey, metrics, lineA
26
26
  onEditComplete
27
27
  });
28
28
  const children = renderDiffChildren({
29
- fileDiff,
29
+ fileDiff: renderedDiff,
30
30
  renderCustomHeader,
31
31
  renderHeaderPrefix,
32
32
  renderHeaderFilenameSuffix,
33
33
  renderHeaderMetadata,
34
34
  renderAnnotation,
35
- lineAnnotations,
35
+ lineAnnotations: renderedAnnotations,
36
36
  renderGutterUtility,
37
37
  getHoveredLine,
38
38
  getAnnotationSlotName
@@ -1 +1 @@
1
- {"version":3,"file":"PatchDiff.js","names":[],"sources":["../../src/react/PatchDiff.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileDiffMetadata } from '../types';\nimport { getSingularPatch } from '../utils/getSingularPatch';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport interface PatchDiffProps<LAnnotation, Caret> extends DiffBasePropsReact<\n LAnnotation,\n Caret\n> {\n patch: string;\n disableWorkerPool?: boolean;\n}\n\nexport function PatchDiff<LAnnotation = undefined, Caret = undefined>({\n patch,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderGutterUtility,\n disableWorkerPool = false,\n edit = false,\n onEditChange,\n onEditComplete,\n}: PatchDiffProps<LAnnotation, Caret>): React.JSX.Element {\n const fileDiff = usePatch(patch);\n const { ref, getHoveredLine, getAnnotationSlotName } = useFileDiffInstance({\n fileDiff,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n edit,\n onEditChange,\n onEditComplete,\n });\n const children = renderDiffChildren({\n fileDiff,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n lineAnnotations,\n renderGutterUtility,\n getHoveredLine,\n getAnnotationSlotName,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n\nfunction usePatch(patch: string): FileDiffMetadata {\n return useMemo<FileDiffMetadata>(() => getSingularPatch(patch), [patch]);\n}\n"],"mappings":";;;;;;;;;AAoBA,SAAgB,UAAsD,EACpE,OACA,SACA,eACA,cACA,SACA,iBACA,eACA,WACA,OACA,iBACA,kBACA,oBACA,oBACA,4BACA,sBACA,qBACA,oBAAoB,OACpB,OAAO,OACP,cACA,kBACwD;CACxD,MAAM,WAAW,SAAS,KAAK;CAC/B,MAAM,EAAE,KAAK,gBAAgB,0BAA0B,oBAAoB;EACzE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,WAAW,mBAAmB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,OACE,oBAAC,gBAAD;EAAqB;EAAgB;EAAkB;EACpD,UAAA,eAAe,UAAU,eAAe;CAC3B,CAAA;AAEpB;AAEA,SAAS,SAAS,OAAiC;CACjD,OAAO,cAAgC,iBAAiB,KAAK,GAAG,CAAC,KAAK,CAAC;AACzE"}
1
+ {"version":3,"file":"PatchDiff.js","names":[],"sources":["../../src/react/PatchDiff.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { FileDiffMetadata } from '../types';\nimport { getSingularPatch } from '../utils/getSingularPatch';\nimport type { DiffBasePropsReact } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useFileDiffInstance } from './utils/useFileDiffInstance';\n\nexport interface PatchDiffProps<LAnnotation, Caret> extends DiffBasePropsReact<\n LAnnotation,\n Caret\n> {\n patch: string;\n disableWorkerPool?: boolean;\n}\n\nexport function PatchDiff<LAnnotation = undefined, Caret = undefined>({\n patch,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderGutterUtility,\n disableWorkerPool = false,\n edit = false,\n onEditChange,\n onEditComplete,\n}: PatchDiffProps<LAnnotation, Caret>): React.JSX.Element {\n const fileDiff = usePatch(patch);\n const {\n ref,\n getHoveredLine,\n getAnnotationSlotName,\n fileDiff: renderedDiff,\n lineAnnotations: renderedAnnotations,\n } = useFileDiffInstance({\n fileDiff,\n options,\n editorOptions,\n editStateKey,\n metrics,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n edit,\n onEditChange,\n onEditComplete,\n });\n const children = renderDiffChildren({\n fileDiff: renderedDiff,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n lineAnnotations: renderedAnnotations,\n renderGutterUtility,\n getHoveredLine,\n getAnnotationSlotName,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n\nfunction usePatch(patch: string): FileDiffMetadata {\n return useMemo<FileDiffMetadata>(() => getSingularPatch(patch), [patch]);\n}\n"],"mappings":";;;;;;;;;AAoBA,SAAgB,UAAsD,EACpE,OACA,SACA,eACA,cACA,SACA,iBACA,eACA,WACA,OACA,iBACA,kBACA,oBACA,oBACA,4BACA,sBACA,qBACA,oBAAoB,OACpB,OAAO,OACP,cACA,kBACwD;CACxD,MAAM,WAAW,SAAS,KAAK;CAC/B,MAAM,EACJ,KACA,gBACA,uBACA,UAAU,cACV,iBAAiB,wBACf,oBAAoB;EACtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,WAAW,mBAAmB;EAClC,UAAU;EACV;EACA;EACA;EACA;EACA;EACA,iBAAiB;EACjB;EACA;EACA;CACF,CAAC;CACD,OACE,oBAAC,gBAAD;EAAqB;EAAgB;EAAkB;EACpD,UAAA,eAAe,UAAU,eAAe;CAC3B,CAAA;AAEpB;AAEA,SAAS,SAAS,OAAiC;CACjD,OAAO,cAAgC,iBAAiB,KAAK,GAAG,CAAC,KAAK,CAAC;AACzE"}
@@ -6,7 +6,7 @@ import { useUnresolvedFileInstance } from "./utils/useUnresolvedFileInstance.js"
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  //#region src/react/UnresolvedFile.tsx
8
8
  function UnresolvedFile({ file, options, lineAnnotations, selectedLines, className, style, prerenderedHTML, renderAnnotation, renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata, renderGutterUtility, renderMergeConflictUtility, disableWorkerPool = false }) {
9
- const { ref, getHoveredLine, fileDiff, actions, getInstance } = useUnresolvedFileInstance({
9
+ const { ref, getHoveredLine, fileDiff, actions, getInstance, lineAnnotations: renderedAnnotations } = useUnresolvedFileInstance({
10
10
  file,
11
11
  options,
12
12
  lineAnnotations,
@@ -25,7 +25,7 @@ function UnresolvedFile({ file, options, lineAnnotations, selectedLines, classNa
25
25
  renderHeaderMetadata,
26
26
  renderAnnotation,
27
27
  renderGutterUtility,
28
- lineAnnotations,
28
+ lineAnnotations: renderedAnnotations,
29
29
  getHoveredLine,
30
30
  actions,
31
31
  renderMergeConflictUtility,
@@ -1 +1 @@
1
- {"version":3,"file":"UnresolvedFile.js","names":[],"sources":["../../src/react/UnresolvedFile.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\n\nimport type { UnresolvedFile as UnresolvedFileClass } from '../components/UnresolvedFile';\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { UnresolvedFileHunksRendererOptions } from '../renderers/UnresolvedFileHunksRenderer';\nimport type {\n FileContents,\n HunkSeparators,\n MergeConflictResolution,\n PostRenderPhase,\n} from '../types';\nimport { type MergeConflictDiffAction } from '../utils/parseMergeConflictDiffFromFile';\nimport type { FileDiffProps } from './FileDiff';\nimport type { FileDiffOptions } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useUnresolvedFileInstance } from './utils/useUnresolvedFileInstance';\n\nexport interface RenderMergeConflictActionContext {\n resolveConflict(resolution: MergeConflictResolution): void;\n}\n\nexport type RenderMergeConflictActions = (\n action: MergeConflictDiffAction,\n context: RenderMergeConflictActionContext\n) => ReactNode;\n\nexport type MergeConflictActionsTypeOption =\n | 'none'\n | 'default'\n | RenderMergeConflictActions;\n\nexport interface UnresolvedFileReactOptions<LAnnotation>\n extends\n Omit<\n FileDiffOptions<LAnnotation, undefined>,\n 'hunkSeparators' | 'diffStyle' | 'onMergeConflictAction' | 'onPostRender'\n >,\n UnresolvedFileHunksRendererOptions {\n hunkSeparators?: HunkSeparators;\n onPostRender?(\n node: HTMLElement,\n instance: UnresolvedFileClass<LAnnotation>,\n phase: PostRenderPhase\n ): unknown;\n maxContextLines?: number;\n}\n\nexport interface UnresolvedFileProps<LAnnotation> extends Omit<\n FileDiffProps<LAnnotation, undefined>,\n | 'fileDiff'\n | 'options'\n | 'edit'\n | 'editorOptions'\n | 'onEditChange'\n | 'onEditComplete'\n> {\n file: FileContents;\n options?: UnresolvedFileReactOptions<LAnnotation>;\n renderMergeConflictUtility?(\n action: MergeConflictDiffAction,\n getInstance: () => UnresolvedFileClass<LAnnotation> | undefined\n ): ReactNode;\n disableWorkerPool?: boolean;\n}\n\nexport function UnresolvedFile<LAnnotation = undefined>({\n file,\n options,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderGutterUtility,\n renderMergeConflictUtility,\n disableWorkerPool = false,\n}: UnresolvedFileProps<LAnnotation>): React.JSX.Element {\n const { ref, getHoveredLine, fileDiff, actions, getInstance } =\n useUnresolvedFileInstance({\n file,\n options,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasConflictUtility: renderMergeConflictUtility != null,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n });\n const children = renderDiffChildren({\n fileDiff,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n lineAnnotations,\n getHoveredLine,\n actions,\n renderMergeConflictUtility,\n getInstance,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n"],"mappings":";;;;;;;AAoEA,SAAgB,eAAwC,EACtD,MACA,SACA,iBACA,eACA,WACA,OACA,iBACA,kBACA,oBACA,oBACA,4BACA,sBACA,qBACA,4BACA,oBAAoB,SACkC;CACtD,MAAM,EAAE,KAAK,gBAAgB,UAAU,SAAS,gBAC9C,0BAA0B;EACxB;EACA;EACA;EACA;EACA;EACA,oBAAoB,8BAA8B;EAClD,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;CACF,CAAC;CACH,MAAM,WAAW,mBAAmB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,OACE,oBAAC,gBAAD;EAAqB;EAAgB;EAAkB;EACpD,UAAA,eAAe,UAAU,eAAe;CAC3B,CAAA;AAEpB"}
1
+ {"version":3,"file":"UnresolvedFile.js","names":[],"sources":["../../src/react/UnresolvedFile.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\n\nimport type { UnresolvedFile as UnresolvedFileClass } from '../components/UnresolvedFile';\nimport { DIFFS_TAG_NAME } from '../constants';\nimport type { UnresolvedFileHunksRendererOptions } from '../renderers/UnresolvedFileHunksRenderer';\nimport type {\n FileContents,\n HunkSeparators,\n MergeConflictResolution,\n PostRenderPhase,\n} from '../types';\nimport { type MergeConflictDiffAction } from '../utils/parseMergeConflictDiffFromFile';\nimport type { FileDiffProps } from './FileDiff';\nimport type { FileDiffOptions } from './types';\nimport { renderDiffChildren } from './utils/renderDiffChildren';\nimport { templateRender } from './utils/templateRender';\nimport { useUnresolvedFileInstance } from './utils/useUnresolvedFileInstance';\n\nexport interface RenderMergeConflictActionContext {\n resolveConflict(resolution: MergeConflictResolution): void;\n}\n\nexport type RenderMergeConflictActions = (\n action: MergeConflictDiffAction,\n context: RenderMergeConflictActionContext\n) => ReactNode;\n\nexport type MergeConflictActionsTypeOption =\n | 'none'\n | 'default'\n | RenderMergeConflictActions;\n\nexport interface UnresolvedFileReactOptions<LAnnotation>\n extends\n Omit<\n FileDiffOptions<LAnnotation, undefined>,\n 'hunkSeparators' | 'diffStyle' | 'onMergeConflictAction' | 'onPostRender'\n >,\n UnresolvedFileHunksRendererOptions {\n hunkSeparators?: HunkSeparators;\n onPostRender?(\n node: HTMLElement,\n instance: UnresolvedFileClass<LAnnotation>,\n phase: PostRenderPhase\n ): unknown;\n maxContextLines?: number;\n}\n\nexport interface UnresolvedFileProps<LAnnotation> extends Omit<\n FileDiffProps<LAnnotation, undefined>,\n | 'fileDiff'\n | 'options'\n | 'edit'\n | 'editorOptions'\n | 'onEditChange'\n | 'onEditComplete'\n> {\n file: FileContents;\n options?: UnresolvedFileReactOptions<LAnnotation>;\n renderMergeConflictUtility?(\n action: MergeConflictDiffAction,\n getInstance: () => UnresolvedFileClass<LAnnotation> | undefined\n ): ReactNode;\n disableWorkerPool?: boolean;\n}\n\nexport function UnresolvedFile<LAnnotation = undefined>({\n file,\n options,\n lineAnnotations,\n selectedLines,\n className,\n style,\n prerenderedHTML,\n renderAnnotation,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderGutterUtility,\n renderMergeConflictUtility,\n disableWorkerPool = false,\n}: UnresolvedFileProps<LAnnotation>): React.JSX.Element {\n const {\n ref,\n getHoveredLine,\n fileDiff,\n actions,\n getInstance,\n lineAnnotations: renderedAnnotations,\n } = useUnresolvedFileInstance({\n file,\n options,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasConflictUtility: renderMergeConflictUtility != null,\n hasGutterRenderUtility: renderGutterUtility != null,\n hasCustomHeader: renderCustomHeader != null,\n disableWorkerPool,\n });\n const children = renderDiffChildren({\n fileDiff,\n renderCustomHeader,\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderHeaderMetadata,\n renderAnnotation,\n renderGutterUtility,\n lineAnnotations: renderedAnnotations,\n getHoveredLine,\n actions,\n renderMergeConflictUtility,\n getInstance,\n });\n return (\n <DIFFS_TAG_NAME ref={ref} className={className} style={style}>\n {templateRender(children, prerenderedHTML)}\n </DIFFS_TAG_NAME>\n );\n}\n"],"mappings":";;;;;;;AAoEA,SAAgB,eAAwC,EACtD,MACA,SACA,iBACA,eACA,WACA,OACA,iBACA,kBACA,oBACA,oBACA,4BACA,sBACA,qBACA,4BACA,oBAAoB,SACkC;CACtD,MAAM,EACJ,KACA,gBACA,UACA,SACA,aACA,iBAAiB,wBACf,0BAA0B;EAC5B;EACA;EACA;EACA;EACA;EACA,oBAAoB,8BAA8B;EAClD,wBAAwB,uBAAuB;EAC/C,iBAAiB,sBAAsB;EACvC;CACF,CAAC;CACD,MAAM,WAAW,mBAAmB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,iBAAiB;EACjB;EACA;EACA;EACA;CACF,CAAC;CACD,OACE,oBAAC,gBAAD;EAAqB;EAAgB;EAAkB;EACpD,UAAA,eAAe,UAAU,eAAe;CAC3B,CAAA;AAEpB"}
@@ -1,10 +1,15 @@
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, DiffFileInput, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsHighlighter, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffContentsLoader, FileDiffLoadedChangedFiles, FileDiffLoadedFiles, FileDiffLoadedPureRenamedFile, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MaybeDiffFileInput, 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
- import { EditorFactory, FileDiffEditCompleteEvent, FileEditCompleteEvent } from "../editor/types.js";
1
+ import { DiffsTheme } from "../highlighter/themes/types.js";
2
+ import { DiffsEditorTokenizer } from "../highlighter/DiffsEditorTokenizer.js";
3
3
  import { WorkerInitializationRenderOptions, WorkerPoolOptions } from "../worker/types.js";
4
+ import { DiffsEditorTokenizerOptions, DiffsStreamTokenizer } from "../highlighter/tokenizer-types.js";
5
+ import { DiffsHighlighter } from "../highlighter/DiffsHighlighter.js";
6
+ import { CodeToHtmlOptions, CodeToTokensOptions, DecorationItem, ThemedToken, TokensResult } from "../highlighter/types.js";
7
+ import { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, ChangeContent, ChangeTypes, CodeColumnType, CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewRangeScrollTarget, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, CreatePatchOptionsNonabortable, CustomPreProperties, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffFileInput, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffContentsLoader, FileDiffLoadedChangedFiles, FileDiffLoadedFiles, FileDiffLoadedPureRenamedFile, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MaybeDiffFileInput, 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, SmoothScrollSettings, StickySpecs, SupportedLanguages, ThemeTypes, ThemedDiffResult, ThemedFileResult, ThemesType, TokenEventBase, VirtualFileMetrics, VirtualWindowSpecs } from "../types.js";
8
+ import { EditorFactory, FileDiffEditCompleteEvent, FileEditCompleteEvent } from "../editor/types.js";
4
9
  import { FileEditChangeHandler, FileEditCompleteHandler } from "../components/File.js";
5
10
  import { FileDiffEditChangeHandler, FileDiffEditCompleteHandler } from "../components/FileDiff.js";
6
11
  import { CodeViewItemEditCompleteHandler } from "../components/CodeView.js";
7
- import { CodeView, CodeViewHandle, CodeViewProps, CodeViewReactOptions, ControlledCodeViewProps, UncontrolledCodeViewProps } from "./CodeView.js";
12
+ import { CodeView, CodeViewAnnotationArgs, CodeViewHandle, CodeViewProps, CodeViewReactOptions, ControlledCodeViewProps, UncontrolledCodeViewProps } from "./CodeView.js";
8
13
  import { DiffBasePropsReact, FileDiffOptions, FileOptions, FileProps } from "./types.js";
9
14
  import { File } from "./File.js";
10
15
  import { FileDiff, FileDiffProps } from "./FileDiff.js";
@@ -21,4 +26,4 @@ import { templateRender } from "./utils/templateRender.js";
21
26
  import { useFileDiffInstance } from "./utils/useFileDiffInstance.js";
22
27
  import { useFileInstance } from "./utils/useFileInstance.js";
23
28
  import { useStableCallback } from "./utils/useStableCallback.js";
24
- export { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, type BundledLanguage, ChangeContent, ChangeTypes, CodeColumnType, type CodeToHastOptions, CodeView, CodeViewDiffItem, CodeViewFileItem, CodeViewHandle, CodeViewItem, type CodeViewItemEditCompleteHandler, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewProps, CodeViewRangeScrollTarget, CodeViewReactOptions, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, ControlledCodeViewProps, type CreatePatchOptionsNonabortable, CustomPreProperties, type DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffBasePropsReact, DiffFileInput, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsHighlighter, DiffsThemeNames, EditContext, EditProvider, EditProviderProps, type EditorFactory, ExpansionDirections, ExtensionFormatMap, File, FileContents, FileDiff, FileDiffContentsLoader, type FileDiffEditChangeHandler, type FileDiffEditCompleteEvent, type FileDiffEditCompleteHandler, FileDiffLoadedChangedFiles, FileDiffLoadedFiles, FileDiffLoadedPureRenamedFile, FileDiffMetadata, FileDiffOptions, FileDiffProps, type FileEditChangeHandler, type FileEditCompleteEvent, type FileEditCompleteHandler, FileHeaderRenderMode, FileOptions, FileProps, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, GutterUtilitySlotStyles, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, type LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MaybeDiffFileInput, MergeConflictActionPayload, MergeConflictActionsTypeOption, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, MergeConflictSlotStyles, MultiFileDiff, MultiFileDiffProps, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PatchDiff, PatchDiffProps, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderMergeConflictActionContext, RenderMergeConflictActions, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, type ShikiTransformer, SmoothScrollSettings, StickySpecs, SupportedLanguages, type ThemeRegistration, type ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, type ThemedToken, ThemesType, TokenEventBase, UncontrolledCodeViewProps, UnresolvedFile, UnresolvedFileProps, UnresolvedFileReactOptions, VirtualFileMetrics, VirtualWindowSpecs, Virtualizer, VirtualizerContext, type WorkerInitializationRenderOptions, WorkerPoolContext, WorkerPoolContextProvider, type WorkerPoolOptions, noopRender, renderDiffChildren, renderFileChildren, templateRender, useCreateEditor, useFileDiffInstance, useFileInstance, useStableCallback, useVirtualizer, useWorkerPool };
29
+ export { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, ChangeContent, ChangeTypes, CodeColumnType, type CodeToHtmlOptions, type CodeToTokensOptions, CodeView, CodeViewAnnotationArgs, CodeViewDiffItem, CodeViewFileItem, CodeViewHandle, CodeViewItem, type CodeViewItemEditCompleteHandler, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewProps, CodeViewRangeScrollTarget, CodeViewReactOptions, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, ControlledCodeViewProps, type CreatePatchOptionsNonabortable, CustomPreProperties, type DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffBasePropsReact, DiffFileInput, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, type DiffsEditorTokenizer, type DiffsEditorTokenizerOptions, type DiffsHighlighter, type DiffsStreamTokenizer, type DiffsTheme, DiffsThemeNames, EditContext, EditProvider, EditProviderProps, type EditorFactory, ExpansionDirections, ExtensionFormatMap, File, FileContents, FileDiff, FileDiffContentsLoader, type FileDiffEditChangeHandler, type FileDiffEditCompleteEvent, type FileDiffEditCompleteHandler, FileDiffLoadedChangedFiles, FileDiffLoadedFiles, FileDiffLoadedPureRenamedFile, FileDiffMetadata, FileDiffOptions, FileDiffProps, type FileEditChangeHandler, type FileEditCompleteEvent, type FileEditCompleteHandler, FileHeaderRenderMode, FileOptions, FileProps, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, GutterUtilitySlotStyles, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MaybeDiffFileInput, MergeConflictActionPayload, MergeConflictActionsTypeOption, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, MergeConflictSlotStyles, MultiFileDiff, MultiFileDiffProps, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PatchDiff, PatchDiffProps, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderMergeConflictActionContext, RenderMergeConflictActions, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, SmoothScrollSettings, StickySpecs, SupportedLanguages, ThemeTypes, ThemedDiffResult, ThemedFileResult, type ThemedToken, ThemesType, TokenEventBase, type TokensResult, UncontrolledCodeViewProps, UnresolvedFile, UnresolvedFileProps, UnresolvedFileReactOptions, VirtualFileMetrics, VirtualWindowSpecs, Virtualizer, VirtualizerContext, type WorkerInitializationRenderOptions, WorkerPoolContext, WorkerPoolContextProvider, type WorkerPoolOptions, noopRender, renderDiffChildren, renderFileChildren, templateRender, useCreateEditor, useFileDiffInstance, useFileInstance, useStableCallback, useVirtualizer, useWorkerPool };