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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (623) hide show
  1. package/README.md +9 -9
  2. package/dist/components/CodeView.d.ts +10 -11
  3. package/dist/components/CodeView.d.ts.map +1 -1
  4. package/dist/components/CodeView.js +8 -8
  5. package/dist/components/CodeView.js.map +1 -1
  6. package/dist/components/File.d.ts +4 -5
  7. package/dist/components/File.d.ts.map +1 -1
  8. package/dist/components/File.js +32 -17
  9. package/dist/components/File.js.map +1 -1
  10. package/dist/components/FileDiff.d.ts +19 -19
  11. package/dist/components/FileDiff.d.ts.map +1 -1
  12. package/dist/components/FileDiff.js +84 -54
  13. package/dist/components/FileDiff.js.map +1 -1
  14. package/dist/components/FileStream.d.ts +0 -1
  15. package/dist/components/FileStream.d.ts.map +1 -1
  16. package/dist/components/FileStream.js +4 -4
  17. package/dist/components/FileStream.js.map +1 -1
  18. package/dist/components/UnresolvedFile.d.ts +1 -2
  19. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  20. package/dist/components/UnresolvedFile.js +3 -3
  21. package/dist/components/UnresolvedFile.js.map +1 -1
  22. package/dist/components/VirtualizedFile.d.ts +0 -1
  23. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  24. package/dist/components/VirtualizedFile.js +19 -18
  25. package/dist/components/VirtualizedFile.js.map +1 -1
  26. package/dist/components/VirtualizedFileDiff.d.ts +2 -3
  27. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  28. package/dist/components/VirtualizedFileDiff.js +17 -18
  29. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  30. package/dist/components/Virtualizer.d.ts +1 -1
  31. package/dist/components/Virtualizer.d.ts.map +1 -1
  32. package/dist/components/Virtualizer.js +23 -24
  33. package/dist/components/Virtualizer.js.map +1 -1
  34. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
  35. package/dist/components/web-components.d.ts.map +1 -1
  36. package/dist/components/web-components.js +2 -3
  37. package/dist/components/web-components.js.map +1 -1
  38. package/dist/constants.d.ts +3 -2
  39. package/dist/constants.d.ts.map +1 -1
  40. package/dist/constants.js +3 -2
  41. package/dist/constants.js.map +1 -1
  42. package/dist/editor/command.d.ts +2 -1
  43. package/dist/editor/command.d.ts.map +1 -1
  44. package/dist/editor/command.js +7 -3
  45. package/dist/editor/command.js.map +1 -1
  46. package/dist/editor/editStack.d.ts +7 -1
  47. package/dist/editor/editStack.d.ts.map +1 -1
  48. package/dist/editor/editStack.js +3 -3
  49. package/dist/editor/editStack.js.map +1 -1
  50. package/dist/editor/editor.d.ts +26 -2
  51. package/dist/editor/editor.d.ts.map +1 -1
  52. package/dist/editor/editor.js +551 -252
  53. package/dist/editor/editor.js.map +1 -1
  54. package/dist/editor/editor2.js +3 -3
  55. package/dist/editor/editor2.js.map +1 -1
  56. package/dist/editor/index.js +1 -2
  57. package/dist/editor/lineAnnotations.d.ts.map +1 -1
  58. package/dist/editor/lineAnnotations.js +2 -3
  59. package/dist/editor/lineAnnotations.js.map +1 -1
  60. package/dist/editor/marker.d.ts +2 -1
  61. package/dist/editor/marker.d.ts.map +1 -1
  62. package/dist/editor/marker.js +28 -11
  63. package/dist/editor/marker.js.map +1 -1
  64. package/dist/editor/pieceTable.d.ts +4 -2
  65. package/dist/editor/pieceTable.d.ts.map +1 -1
  66. package/dist/editor/pieceTable.js +138 -128
  67. package/dist/editor/pieceTable.js.map +1 -1
  68. package/dist/editor/platform.d.ts +8 -1
  69. package/dist/editor/platform.d.ts.map +1 -1
  70. package/dist/editor/platform.js +16 -5
  71. package/dist/editor/platform.js.map +1 -1
  72. package/dist/editor/searchPanel.d.ts +1 -0
  73. package/dist/editor/searchPanel.d.ts.map +1 -1
  74. package/dist/editor/searchPanel.js +75 -62
  75. package/dist/editor/searchPanel.js.map +1 -1
  76. package/dist/editor/selection.d.ts +41 -4
  77. package/dist/editor/selection.d.ts.map +1 -1
  78. package/dist/editor/selection.js +423 -83
  79. package/dist/editor/selection.js.map +1 -1
  80. package/dist/editor/selectionAction.d.ts +4 -5
  81. package/dist/editor/selectionAction.d.ts.map +1 -1
  82. package/dist/editor/selectionAction.js +14 -64
  83. package/dist/editor/selectionAction.js.map +1 -1
  84. package/dist/editor/sprite.d.ts +2 -2
  85. package/dist/editor/sprite.d.ts.map +1 -1
  86. package/dist/editor/sprite.js +7 -14
  87. package/dist/editor/sprite.js.map +1 -1
  88. package/dist/editor/textDocument.d.ts +5 -4
  89. package/dist/editor/textDocument.d.ts.map +1 -1
  90. package/dist/editor/textDocument.js +26 -15
  91. package/dist/editor/textDocument.js.map +1 -1
  92. package/dist/editor/textMeasure.d.ts +36 -3
  93. package/dist/editor/textMeasure.d.ts.map +1 -1
  94. package/dist/editor/textMeasure.js +79 -10
  95. package/dist/editor/textMeasure.js.map +1 -1
  96. package/dist/editor/tokenzier.d.ts +1 -0
  97. package/dist/editor/tokenzier.d.ts.map +1 -1
  98. package/dist/editor/tokenzier.js +16 -13
  99. package/dist/editor/tokenzier.js.map +1 -1
  100. package/dist/editor/utils.d.ts +2 -1
  101. package/dist/editor/utils.d.ts.map +1 -1
  102. package/dist/editor/utils.js +6 -3
  103. package/dist/editor/utils.js.map +1 -1
  104. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  105. package/dist/highlighter/languages/areLanguagesAttached.js +1 -2
  106. package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
  107. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +0 -2
  108. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  109. package/dist/highlighter/languages/attachResolvedLanguages.js +1 -2
  110. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  111. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  112. package/dist/highlighter/languages/cleanUpResolvedLanguages.js +1 -2
  113. package/dist/highlighter/languages/cleanUpResolvedLanguages.js.map +1 -1
  114. package/dist/highlighter/languages/constants.d.ts +0 -1
  115. package/dist/highlighter/languages/constants.d.ts.map +1 -1
  116. package/dist/highlighter/languages/constants.js +1 -1
  117. package/dist/highlighter/languages/constants.js.map +1 -1
  118. package/dist/highlighter/languages/getResolvedLanguages.d.ts +0 -2
  119. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  120. package/dist/highlighter/languages/getResolvedLanguages.js +1 -2
  121. package/dist/highlighter/languages/getResolvedLanguages.js.map +1 -1
  122. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +0 -2
  123. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  124. package/dist/highlighter/languages/getResolvedOrResolveLanguage.js +1 -2
  125. package/dist/highlighter/languages/getResolvedOrResolveLanguage.js.map +1 -1
  126. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  127. package/dist/highlighter/languages/hasResolvedLanguages.js +1 -2
  128. package/dist/highlighter/languages/hasResolvedLanguages.js.map +1 -1
  129. package/dist/highlighter/languages/registerCustomLanguage.d.ts +0 -1
  130. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  131. package/dist/highlighter/languages/registerCustomLanguage.js +1 -2
  132. package/dist/highlighter/languages/registerCustomLanguage.js.map +1 -1
  133. package/dist/highlighter/languages/resolveLanguage.d.ts +0 -2
  134. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  135. package/dist/highlighter/languages/resolveLanguage.js +4 -5
  136. package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
  137. package/dist/highlighter/languages/resolveLanguages.d.ts +0 -2
  138. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  139. package/dist/highlighter/languages/resolveLanguages.js +1 -2
  140. package/dist/highlighter/languages/resolveLanguages.js.map +1 -1
  141. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  142. package/dist/highlighter/shared_highlighter.js +3 -4
  143. package/dist/highlighter/shared_highlighter.js.map +1 -1
  144. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  145. package/dist/highlighter/themes/areThemesAttached.js +1 -2
  146. package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
  147. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  148. package/dist/highlighter/themes/attachResolvedThemes.js +1 -2
  149. package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
  150. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  151. package/dist/highlighter/themes/cleanUpResolvedThemes.js +1 -2
  152. package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
  153. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  154. package/dist/highlighter/themes/constants.js +1 -1
  155. package/dist/highlighter/themes/constants.js.map +1 -1
  156. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  157. package/dist/highlighter/themes/getResolvedOrResolveTheme.js +1 -2
  158. package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
  159. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  160. package/dist/highlighter/themes/getResolvedThemes.js +1 -2
  161. package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
  162. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  163. package/dist/highlighter/themes/hasResolvedThemes.js +1 -2
  164. package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
  165. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  166. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +1 -2
  167. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
  168. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  169. package/dist/highlighter/themes/registerCustomTheme.js +1 -2
  170. package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
  171. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  172. package/dist/highlighter/themes/resolveTheme.js +1 -2
  173. package/dist/highlighter/themes/resolveTheme.js.map +1 -1
  174. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  175. package/dist/highlighter/themes/resolveThemes.js +1 -2
  176. package/dist/highlighter/themes/resolveThemes.js.map +1 -1
  177. package/dist/highlighter/themes/themeResolution.d.ts.map +1 -1
  178. package/dist/highlighter/themes/themeResolution.js +1 -2
  179. package/dist/highlighter/themes/themeResolution.js.map +1 -1
  180. package/dist/highlighter/themes/themeResolver.d.ts +2 -2
  181. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  182. package/dist/highlighter/themes/themeResolver.js +1 -2
  183. package/dist/highlighter/themes/themeResolver.js.map +1 -1
  184. package/dist/index.d.ts +10 -10
  185. package/dist/index.js +2 -3
  186. package/dist/managers/InteractionManager.d.ts +7 -0
  187. package/dist/managers/InteractionManager.d.ts.map +1 -1
  188. package/dist/managers/InteractionManager.js +25 -3
  189. package/dist/managers/InteractionManager.js.map +1 -1
  190. package/dist/managers/ResizeManager.d.ts.map +1 -1
  191. package/dist/managers/ResizeManager.js +1 -1
  192. package/dist/managers/ResizeManager.js.map +1 -1
  193. package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  194. package/dist/managers/ScrollSyncManager.js +1 -1
  195. package/dist/managers/ScrollSyncManager.js.map +1 -1
  196. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  197. package/dist/managers/UniversalRenderingManager.js +2 -2
  198. package/dist/managers/UniversalRenderingManager.js.map +1 -1
  199. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +228 -0
  200. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -0
  201. package/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts +84 -0
  202. package/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts.map +1 -0
  203. package/dist/react/CodeView.d.ts +1 -1
  204. package/dist/react/CodeView.d.ts.map +1 -1
  205. package/dist/react/CodeView.js +17 -16
  206. package/dist/react/CodeView.js.map +1 -1
  207. package/dist/react/EditorContext.d.ts +0 -1
  208. package/dist/react/EditorContext.d.ts.map +1 -1
  209. package/dist/react/EditorContext.js +2 -5
  210. package/dist/react/EditorContext.js.map +1 -1
  211. package/dist/react/File.d.ts +1 -0
  212. package/dist/react/File.d.ts.map +1 -1
  213. package/dist/react/File.js +4 -6
  214. package/dist/react/File.js.map +1 -1
  215. package/dist/react/FileDiff.d.ts +1 -0
  216. package/dist/react/FileDiff.d.ts.map +1 -1
  217. package/dist/react/FileDiff.js +4 -6
  218. package/dist/react/FileDiff.js.map +1 -1
  219. package/dist/react/MultiFileDiff.d.ts +1 -0
  220. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  221. package/dist/react/MultiFileDiff.js +4 -6
  222. package/dist/react/MultiFileDiff.js.map +1 -1
  223. package/dist/react/PatchDiff.d.ts +1 -0
  224. package/dist/react/PatchDiff.d.ts.map +1 -1
  225. package/dist/react/PatchDiff.js +4 -6
  226. package/dist/react/PatchDiff.js.map +1 -1
  227. package/dist/react/UnresolvedFile.d.ts +2 -1
  228. package/dist/react/UnresolvedFile.d.ts.map +1 -1
  229. package/dist/react/UnresolvedFile.js +4 -6
  230. package/dist/react/UnresolvedFile.js.map +1 -1
  231. package/dist/react/Virtualizer.d.ts.map +1 -1
  232. package/dist/react/Virtualizer.js +2 -5
  233. package/dist/react/Virtualizer.js.map +1 -1
  234. package/dist/react/WorkerPoolContext.d.ts +0 -1
  235. package/dist/react/WorkerPoolContext.d.ts.map +1 -1
  236. package/dist/react/WorkerPoolContext.js +2 -5
  237. package/dist/react/WorkerPoolContext.js.map +1 -1
  238. package/dist/react/constants.d.ts.map +1 -1
  239. package/dist/react/constants.js +1 -1
  240. package/dist/react/constants.js.map +1 -1
  241. package/dist/react/index.d.ts +2 -2
  242. package/dist/react/index.js +1 -2
  243. package/dist/react/jsx.d.ts +0 -2
  244. package/dist/react/jsx.d.ts.map +1 -1
  245. package/dist/react/types.d.ts +2 -0
  246. package/dist/react/types.d.ts.map +1 -1
  247. package/dist/react/utils/renderDiffChildren.d.ts +2 -0
  248. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  249. package/dist/react/utils/renderDiffChildren.js +18 -11
  250. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  251. package/dist/react/utils/renderFileChildren.d.ts +2 -0
  252. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  253. package/dist/react/utils/renderFileChildren.js +18 -11
  254. package/dist/react/utils/renderFileChildren.js.map +1 -1
  255. package/dist/react/utils/templateRender.d.ts.map +1 -1
  256. package/dist/react/utils/templateRender.js +1 -2
  257. package/dist/react/utils/templateRender.js.map +1 -1
  258. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  259. package/dist/react/utils/useFileDiffInstance.js +1 -3
  260. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  261. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  262. package/dist/react/utils/useFileInstance.js +1 -2
  263. package/dist/react/utils/useFileInstance.js.map +1 -1
  264. package/dist/react/utils/useStableCallback.d.ts.map +1 -1
  265. package/dist/react/utils/useStableCallback.js +1 -2
  266. package/dist/react/utils/useStableCallback.js.map +1 -1
  267. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  268. package/dist/react/utils/useUnresolvedFileInstance.js +10 -11
  269. package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
  270. package/dist/renderers/DiffHunksRenderer.d.ts +2 -3
  271. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  272. package/dist/renderers/DiffHunksRenderer.js +30 -24
  273. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  274. package/dist/renderers/FileRenderer.d.ts +1 -3
  275. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  276. package/dist/renderers/FileRenderer.js +14 -11
  277. package/dist/renderers/FileRenderer.js.map +1 -1
  278. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts +1 -2
  279. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  280. package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -2
  281. package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
  282. package/dist/shiki-stream/index.js +1 -2
  283. package/dist/shiki-stream/stream.d.ts +0 -1
  284. package/dist/shiki-stream/stream.d.ts.map +1 -1
  285. package/dist/shiki-stream/stream.js +1 -2
  286. package/dist/shiki-stream/stream.js.map +1 -1
  287. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  288. package/dist/shiki-stream/tokenizer.js +1 -1
  289. package/dist/shiki-stream/tokenizer.js.map +1 -1
  290. package/dist/shiki-stream/types.d.ts +0 -1
  291. package/dist/shiki-stream/types.d.ts.map +1 -1
  292. package/dist/sprite.d.ts.map +1 -1
  293. package/dist/sprite.js +1 -1
  294. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  295. package/dist/ssr/FileDiffReact.js +5 -8
  296. package/dist/ssr/FileDiffReact.js.map +1 -1
  297. package/dist/ssr/index.d.ts +2 -2
  298. package/dist/ssr/index.js +1 -2
  299. package/dist/ssr/preloadDiffs.d.ts +1 -1
  300. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  301. package/dist/ssr/preloadDiffs.js +1 -2
  302. package/dist/ssr/preloadDiffs.js.map +1 -1
  303. package/dist/ssr/preloadFile.d.ts.map +1 -1
  304. package/dist/ssr/preloadFile.js +1 -2
  305. package/dist/ssr/preloadFile.js.map +1 -1
  306. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  307. package/dist/ssr/preloadPatchFile.js +2 -3
  308. package/dist/ssr/preloadPatchFile.js.map +1 -1
  309. package/dist/ssr/renderHTML.d.ts +1 -1
  310. package/dist/ssr/renderHTML.d.ts.map +1 -1
  311. package/dist/ssr/renderHTML.js +1 -2
  312. package/dist/ssr/renderHTML.js.map +1 -1
  313. package/dist/string-import.d.ts +4 -0
  314. package/dist/string-import.d.ts.map +1 -1
  315. package/dist/style.js +3 -3
  316. package/dist/style.js.map +1 -1
  317. package/dist/types.d.ts +11 -5
  318. package/dist/types.d.ts.map +1 -1
  319. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  320. package/dist/utils/areDiffLineAnnotationsEqual.js +1 -1
  321. package/dist/utils/areDiffLineAnnotationsEqual.js.map +1 -1
  322. package/dist/utils/areDiffRenderOptionsEqual.d.ts.map +1 -1
  323. package/dist/utils/areDiffRenderOptionsEqual.js +1 -2
  324. package/dist/utils/areDiffRenderOptionsEqual.js.map +1 -1
  325. package/dist/utils/areDiffTargetsEqual.d.ts.map +1 -1
  326. package/dist/utils/areDiffTargetsEqual.js +1 -1
  327. package/dist/utils/areDiffTargetsEqual.js.map +1 -1
  328. package/dist/utils/areFileRenderOptionsEqual.d.ts.map +1 -1
  329. package/dist/utils/areFileRenderOptionsEqual.js +1 -2
  330. package/dist/utils/areFileRenderOptionsEqual.js.map +1 -1
  331. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  332. package/dist/utils/areFilesEqual.js +1 -1
  333. package/dist/utils/areFilesEqual.js.map +1 -1
  334. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  335. package/dist/utils/areHunkDataEqual.js +1 -1
  336. package/dist/utils/areHunkDataEqual.js.map +1 -1
  337. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  338. package/dist/utils/areLineAnnotationsEqual.js +1 -1
  339. package/dist/utils/areLineAnnotationsEqual.js.map +1 -1
  340. package/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
  341. package/dist/utils/areManagedSnapshotsEqual.js +1 -1
  342. package/dist/utils/areManagedSnapshotsEqual.js.map +1 -1
  343. package/dist/utils/areMergeConflictActionsEqual.d.ts.map +1 -1
  344. package/dist/utils/areMergeConflictActionsEqual.js +1 -1
  345. package/dist/utils/areMergeConflictActionsEqual.js.map +1 -1
  346. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  347. package/dist/utils/areObjectsEqual.js +1 -1
  348. package/dist/utils/areObjectsEqual.js.map +1 -1
  349. package/dist/utils/areOptionsEqual.d.ts +0 -2
  350. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  351. package/dist/utils/areOptionsEqual.js +1 -2
  352. package/dist/utils/areOptionsEqual.js.map +1 -1
  353. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  354. package/dist/utils/arePrePropertiesEqual.js +1 -1
  355. package/dist/utils/arePrePropertiesEqual.js.map +1 -1
  356. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  357. package/dist/utils/areRenderRangesEqual.js +1 -1
  358. package/dist/utils/areRenderRangesEqual.js.map +1 -1
  359. package/dist/utils/areSelectionPointsEqual.d.ts.map +1 -1
  360. package/dist/utils/areSelectionPointsEqual.js +1 -1
  361. package/dist/utils/areSelectionPointsEqual.js.map +1 -1
  362. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  363. package/dist/utils/areSelectionsEqual.js +1 -1
  364. package/dist/utils/areSelectionsEqual.js.map +1 -1
  365. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  366. package/dist/utils/areThemesEqual.js +1 -1
  367. package/dist/utils/areThemesEqual.js.map +1 -1
  368. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  369. package/dist/utils/areVirtualWindowSpecsEqual.js +1 -1
  370. package/dist/utils/areVirtualWindowSpecsEqual.js.map +1 -1
  371. package/dist/utils/areWorkerStatsEqual.d.ts +0 -2
  372. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  373. package/dist/utils/areWorkerStatsEqual.js +1 -1
  374. package/dist/utils/areWorkerStatsEqual.js.map +1 -1
  375. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  376. package/dist/utils/cleanLastNewline.js +1 -1
  377. package/dist/utils/cleanLastNewline.js.map +1 -1
  378. package/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
  379. package/dist/utils/computeEstimatedDiffHeights.js +1 -2
  380. package/dist/utils/computeEstimatedDiffHeights.js.map +1 -1
  381. package/dist/utils/computeFileOffsets.d.ts +9 -1
  382. package/dist/utils/computeFileOffsets.d.ts.map +1 -1
  383. package/dist/utils/computeFileOffsets.js +20 -2
  384. package/dist/utils/computeFileOffsets.js.map +1 -1
  385. package/dist/utils/computeVirtualFileMetrics.d.ts.map +1 -1
  386. package/dist/utils/computeVirtualFileMetrics.js +1 -2
  387. package/dist/utils/computeVirtualFileMetrics.js.map +1 -1
  388. package/dist/utils/createAnnotationElement.d.ts +1 -1
  389. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  390. package/dist/utils/createAnnotationElement.js +1 -2
  391. package/dist/utils/createAnnotationElement.js.map +1 -1
  392. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  393. package/dist/utils/createAnnotationWrapperNode.js +1 -1
  394. package/dist/utils/createAnnotationWrapperNode.js.map +1 -1
  395. package/dist/utils/createContentColumn.d.ts +1 -1
  396. package/dist/utils/createContentColumn.d.ts.map +1 -1
  397. package/dist/utils/createContentColumn.js +1 -2
  398. package/dist/utils/createContentColumn.js.map +1 -1
  399. package/dist/utils/createEmptyRowBuffer.d.ts +1 -1
  400. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  401. package/dist/utils/createEmptyRowBuffer.js +1 -2
  402. package/dist/utils/createEmptyRowBuffer.js.map +1 -1
  403. package/dist/utils/createFileHeaderElement.d.ts +1 -1
  404. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  405. package/dist/utils/createFileHeaderElement.js +6 -3
  406. package/dist/utils/createFileHeaderElement.js.map +1 -1
  407. package/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -1
  408. package/dist/utils/createGutterUtilityContentNode.js +1 -1
  409. package/dist/utils/createGutterUtilityContentNode.js.map +1 -1
  410. package/dist/utils/createGutterUtilityElement.d.ts +1 -1
  411. package/dist/utils/createGutterUtilityElement.d.ts.map +1 -1
  412. package/dist/utils/createGutterUtilityElement.js +1 -2
  413. package/dist/utils/createGutterUtilityElement.js.map +1 -1
  414. package/dist/utils/createNoNewlineElement.d.ts +1 -1
  415. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  416. package/dist/utils/createNoNewlineElement.js +1 -2
  417. package/dist/utils/createNoNewlineElement.js.map +1 -1
  418. package/dist/utils/createPreElement.d.ts +1 -1
  419. package/dist/utils/createPreElement.d.ts.map +1 -1
  420. package/dist/utils/createPreElement.js +1 -2
  421. package/dist/utils/createPreElement.js.map +1 -1
  422. package/dist/utils/createRowNodes.d.ts.map +1 -1
  423. package/dist/utils/createRowNodes.js +1 -1
  424. package/dist/utils/createRowNodes.js.map +1 -1
  425. package/dist/utils/createSeparator.d.ts +1 -1
  426. package/dist/utils/createSeparator.d.ts.map +1 -1
  427. package/dist/utils/createSeparator.js +1 -2
  428. package/dist/utils/createSeparator.js.map +1 -1
  429. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  430. package/dist/utils/createSpanNodeFromToken.js +1 -2
  431. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  432. package/dist/utils/createStyleElement.d.ts +1 -1
  433. package/dist/utils/createStyleElement.d.ts.map +1 -1
  434. package/dist/utils/createStyleElement.js +1 -2
  435. package/dist/utils/createStyleElement.js.map +1 -1
  436. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  437. package/dist/utils/createTransformerWithState.js +1 -2
  438. package/dist/utils/createTransformerWithState.js.map +1 -1
  439. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  440. package/dist/utils/createUnsafeCSSStyleNode.js +1 -2
  441. package/dist/utils/createUnsafeCSSStyleNode.js.map +1 -1
  442. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  443. package/dist/utils/createWindowFromScrollPosition.js +5 -5
  444. package/dist/utils/createWindowFromScrollPosition.js.map +1 -1
  445. package/dist/utils/cssWrappers.d.ts.map +1 -1
  446. package/dist/utils/cssWrappers.js +2 -3
  447. package/dist/utils/cssWrappers.js.map +1 -1
  448. package/dist/utils/detachString.d.ts.map +1 -1
  449. package/dist/utils/detachString.js +1 -1
  450. package/dist/utils/detachString.js.map +1 -1
  451. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  452. package/dist/utils/diffAcceptRejectHunk.js +1 -2
  453. package/dist/utils/diffAcceptRejectHunk.js.map +1 -1
  454. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  455. package/dist/utils/formatCSSVariablePrefix.js +1 -1
  456. package/dist/utils/formatCSSVariablePrefix.js.map +1 -1
  457. package/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -1
  458. package/dist/utils/getDiffHunksRendererOptions.js +1 -1
  459. package/dist/utils/getDiffHunksRendererOptions.js.map +1 -1
  460. package/dist/utils/getFileRendererOptions.d.ts.map +1 -1
  461. package/dist/utils/getFileRendererOptions.js +1 -1
  462. package/dist/utils/getFileRendererOptions.js.map +1 -1
  463. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  464. package/dist/utils/getFiletypeFromFileName.js +1 -1
  465. package/dist/utils/getFiletypeFromFileName.js.map +1 -1
  466. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  467. package/dist/utils/getHighlighterOptions.js +1 -2
  468. package/dist/utils/getHighlighterOptions.js.map +1 -1
  469. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  470. package/dist/utils/getHighlighterThemeStyles.js +1 -2
  471. package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
  472. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  473. package/dist/utils/getHunkSeparatorSlotName.js +1 -1
  474. package/dist/utils/getHunkSeparatorSlotName.js.map +1 -1
  475. package/dist/utils/getIconForType.d.ts.map +1 -1
  476. package/dist/utils/getIconForType.js +1 -1
  477. package/dist/utils/getIconForType.js.map +1 -1
  478. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  479. package/dist/utils/getLineAnnotationName.js +1 -1
  480. package/dist/utils/getLineAnnotationName.js.map +1 -1
  481. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  482. package/dist/utils/getLineEndingType.js +1 -1
  483. package/dist/utils/getLineEndingType.js.map +1 -1
  484. package/dist/utils/getLineNodes.d.ts +1 -1
  485. package/dist/utils/getLineNodes.d.ts.map +1 -1
  486. package/dist/utils/getLineNodes.js +1 -1
  487. package/dist/utils/getLineNodes.js.map +1 -1
  488. package/dist/utils/getMergeConflictActionSlotName.d.ts.map +1 -1
  489. package/dist/utils/getMergeConflictActionSlotName.js +1 -1
  490. package/dist/utils/getMergeConflictActionSlotName.js.map +1 -1
  491. package/dist/utils/getMergeConflictLineTypes.d.ts.map +1 -1
  492. package/dist/utils/getMergeConflictLineTypes.js +1 -2
  493. package/dist/utils/getMergeConflictLineTypes.js.map +1 -1
  494. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  495. package/dist/utils/getOrCreateCodeNode.js +1 -1
  496. package/dist/utils/getOrCreateCodeNode.js.map +1 -1
  497. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  498. package/dist/utils/getSingularPatch.js +1 -2
  499. package/dist/utils/getSingularPatch.js.map +1 -1
  500. package/dist/utils/getThemes.d.ts.map +1 -1
  501. package/dist/utils/getThemes.js +1 -2
  502. package/dist/utils/getThemes.js.map +1 -1
  503. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  504. package/dist/utils/getTotalLineCountFromHunks.js +1 -1
  505. package/dist/utils/getTotalLineCountFromHunks.js.map +1 -1
  506. package/dist/utils/hast_utils.d.ts +1 -1
  507. package/dist/utils/hast_utils.d.ts.map +1 -1
  508. package/dist/utils/hast_utils.js +1 -1
  509. package/dist/utils/hast_utils.js.map +1 -1
  510. package/dist/utils/hostTheme.d.ts.map +1 -1
  511. package/dist/utils/hostTheme.js +1 -2
  512. package/dist/utils/hostTheme.js.map +1 -1
  513. package/dist/utils/includesFileAnnotations.d.ts.map +1 -1
  514. package/dist/utils/includesFileAnnotations.js +5 -5
  515. package/dist/utils/includesFileAnnotations.js.map +1 -1
  516. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  517. package/dist/utils/isDefaultRenderRange.js +1 -1
  518. package/dist/utils/isDefaultRenderRange.js.map +1 -1
  519. package/dist/utils/isDiffPlainText.d.ts.map +1 -1
  520. package/dist/utils/isDiffPlainText.js +1 -2
  521. package/dist/utils/isDiffPlainText.js.map +1 -1
  522. package/dist/utils/isFilePlainText.d.ts.map +1 -1
  523. package/dist/utils/isFilePlainText.js +1 -2
  524. package/dist/utils/isFilePlainText.js.map +1 -1
  525. package/dist/utils/isStyleNode.d.ts.map +1 -1
  526. package/dist/utils/isStyleNode.js +1 -1
  527. package/dist/utils/isStyleNode.js.map +1 -1
  528. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  529. package/dist/utils/isWorkerContext.js +1 -1
  530. package/dist/utils/isWorkerContext.js.map +1 -1
  531. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  532. package/dist/utils/iterateOverDiff.js +44 -45
  533. package/dist/utils/iterateOverDiff.js.map +1 -1
  534. package/dist/utils/normalizeDiffResolution.d.ts.map +1 -1
  535. package/dist/utils/normalizeDiffResolution.js +1 -1
  536. package/dist/utils/normalizeDiffResolution.js.map +1 -1
  537. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  538. package/dist/utils/parseDiffDecorations.js +1 -2
  539. package/dist/utils/parseDiffDecorations.js.map +1 -1
  540. package/dist/utils/parseDiffFromFile.d.ts +0 -1
  541. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  542. package/dist/utils/parseDiffFromFile.js +1 -2
  543. package/dist/utils/parseDiffFromFile.js.map +1 -1
  544. package/dist/utils/parseLineType.d.ts.map +1 -1
  545. package/dist/utils/parseLineType.js +1 -1
  546. package/dist/utils/parseLineType.js.map +1 -1
  547. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  548. package/dist/utils/parseMergeConflictDiffFromFile.js +5 -5
  549. package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
  550. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  551. package/dist/utils/parsePatchFiles.js +6 -7
  552. package/dist/utils/parsePatchFiles.js.map +1 -1
  553. package/dist/utils/prefersReducedMotion.d.ts.map +1 -1
  554. package/dist/utils/prefersReducedMotion.js +1 -1
  555. package/dist/utils/prefersReducedMotion.js.map +1 -1
  556. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  557. package/dist/utils/prerenderHTMLIfNecessary.js +1 -1
  558. package/dist/utils/prerenderHTMLIfNecessary.js.map +1 -1
  559. package/dist/utils/processLine.d.ts +1 -1
  560. package/dist/utils/processLine.d.ts.map +1 -1
  561. package/dist/utils/processLine.js +1 -2
  562. package/dist/utils/processLine.js.map +1 -1
  563. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  564. package/dist/utils/renderDiffWithHighlighter.js +4 -5
  565. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  566. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  567. package/dist/utils/renderFileWithHighlighter.js +1 -2
  568. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  569. package/dist/utils/resolveConflict.d.ts.map +1 -1
  570. package/dist/utils/resolveConflict.js +1 -2
  571. package/dist/utils/resolveConflict.js.map +1 -1
  572. package/dist/utils/resolveRegion.d.ts.map +1 -1
  573. package/dist/utils/resolveRegion.js +1 -1
  574. package/dist/utils/resolveRegion.js.map +1 -1
  575. package/dist/utils/roundToDevicePixel.d.ts.map +1 -1
  576. package/dist/utils/roundToDevicePixel.js +1 -1
  577. package/dist/utils/roundToDevicePixel.js.map +1 -1
  578. package/dist/utils/scrollbarGutter.d.ts.map +1 -1
  579. package/dist/utils/scrollbarGutter.js +1 -2
  580. package/dist/utils/scrollbarGutter.js.map +1 -1
  581. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  582. package/dist/utils/setLanguageOverride.js +1 -1
  583. package/dist/utils/setLanguageOverride.js.map +1 -1
  584. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  585. package/dist/utils/setWrapperNodeProps.js +1 -1
  586. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  587. package/dist/utils/shouldUseTokenTransformer.d.ts.map +1 -1
  588. package/dist/utils/shouldUseTokenTransformer.js +1 -1
  589. package/dist/utils/shouldUseTokenTransformer.js.map +1 -1
  590. package/dist/utils/splitFileContents.d.ts.map +1 -1
  591. package/dist/utils/splitFileContents.js +1 -2
  592. package/dist/utils/splitFileContents.js.map +1 -1
  593. package/dist/utils/trimPatchContext.d.ts.map +1 -1
  594. package/dist/utils/trimPatchContext.js +1 -2
  595. package/dist/utils/trimPatchContext.js.map +1 -1
  596. package/dist/utils/updateDiffHunks.d.ts +2 -1
  597. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  598. package/dist/utils/updateDiffHunks.js +22 -3
  599. package/dist/utils/updateDiffHunks.js.map +1 -1
  600. package/dist/utils/virtualDiffLayout.d.ts.map +1 -1
  601. package/dist/utils/virtualDiffLayout.js +1 -2
  602. package/dist/utils/virtualDiffLayout.js.map +1 -1
  603. package/dist/utils/wrapTokenFragments.d.ts +1 -1
  604. package/dist/utils/wrapTokenFragments.d.ts.map +1 -1
  605. package/dist/utils/wrapTokenFragments.js +1 -2
  606. package/dist/utils/wrapTokenFragments.js.map +1 -1
  607. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  608. package/dist/worker/WorkerPoolManager.js +5 -5
  609. package/dist/worker/WorkerPoolManager.js.map +1 -1
  610. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  611. package/dist/worker/getOrCreateWorkerPoolSingleton.js +1 -2
  612. package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
  613. package/dist/worker/index.js +1 -2
  614. package/dist/worker/types.d.ts.map +1 -1
  615. package/dist/worker/wasm-B9ZqxnKj.js +8 -0
  616. package/dist/worker/wasm-B9ZqxnKj.js.map +1 -0
  617. package/dist/worker/worker-portable.js +2779 -6403
  618. package/dist/worker/worker-portable.js.map +1 -1
  619. package/dist/worker/worker.js +89 -123
  620. package/dist/worker/worker.js.map +1 -1
  621. package/package.json +13 -14
  622. package/dist/worker/wasm-qE0LgnY3.js +0 -10
  623. package/dist/worker/wasm-qE0LgnY3.js.map +0 -1
@@ -1,7 +1,6 @@
1
1
  import { AppliedThemeStyleCache, BaseCodeOptions, DiffsEditableComponent, DiffsEditor, DiffsTextDocument, FileContents, HighlightedToken, LineAnnotation, PostRenderPhase, PrePropertiesConfig, RenderFileMetadata, RenderRange, SelectedLineRange, ThemeTypes } from "../types.js";
2
2
  import { GetHoveredLineResult, InteractionManager, InteractionManagerBaseOptions, SelectionWriteOptions } from "../managers/InteractionManager.js";
3
3
  import { WorkerPoolManager } from "../worker/WorkerPoolManager.js";
4
- import "../worker/index.js";
5
4
  import { ResizeManager } from "../managers/ResizeManager.js";
6
5
  import { FileRenderer } from "../renderers/FileRenderer.js";
7
6
 
@@ -23,6 +22,7 @@ interface FileHydrateProps<LAnnotation> extends Omit<FileRenderProps<LAnnotation
23
22
  interface FileOptions<LAnnotation> extends BaseCodeOptions, InteractionManagerBaseOptions<'file'> {
24
23
  disableFileHeader?: boolean;
25
24
  renderHeaderPrefix?: RenderFileMetadata;
25
+ renderHeaderFilenameSuffix?: RenderFileMetadata;
26
26
  renderHeaderMetadata?: RenderFileMetadata;
27
27
  renderCustomHeader?: RenderFileMetadata;
28
28
  /**
@@ -72,6 +72,7 @@ declare class File<LAnnotation = undefined> implements DiffsEditableComponent<LA
72
72
  protected headerElement: HTMLElement | undefined;
73
73
  protected headerCustom: HTMLElement | undefined;
74
74
  protected headerPrefix: HTMLElement | undefined;
75
+ protected headerFilenameSuffix: HTMLElement | undefined;
75
76
  protected headerMetadata: HTMLElement | undefined;
76
77
  protected fileRenderer: FileRenderer<LAnnotation>;
77
78
  protected resizeManager: ResizeManager;
@@ -93,9 +94,7 @@ declare class File<LAnnotation = undefined> implements DiffsEditableComponent<LA
93
94
  setThemeType(themeType: ThemeTypes): void;
94
95
  private applyCachedThemeState;
95
96
  private hasThemeChanged;
96
- getHoveredLine: () => {
97
- lineNumber: number;
98
- } | undefined;
97
+ getHoveredLine: () => GetHoveredLineResult<'file'> | undefined;
99
98
  setLineAnnotations(lineAnnotations: LineAnnotation<LAnnotation>[]): void;
100
99
  setSelectedLines(range: SelectedLineRange | null, options?: SelectionWriteOptions): void;
101
100
  flushManagers(): void;
@@ -109,7 +108,7 @@ declare class File<LAnnotation = undefined> implements DiffsEditableComponent<LA
109
108
  }: HydrationSetup<LAnnotation>): void;
110
109
  getOrCreateLineCache(file?: FileContents | undefined): string[];
111
110
  protected updateBuffers(renderRange: RenderRange): void;
112
- private syncRenderView;
111
+ private syncRenderViewToEditor;
113
112
  attachEditor(editor: DiffsEditor<LAnnotation>): () => void;
114
113
  applyDocumentChange(textDocument: DiffsTextDocument, newLineAnnotations?: LineAnnotation<LAnnotation>[]): void;
115
114
  updateRenderCache(dirtyLines: Map<number, Array<HighlightedToken>>, themeType: 'dark' | 'light'): void;
@@ -1 +1 @@
1
- {"version":3,"file":"File.d.ts","names":["GetHoveredLineResult","InteractionManager","InteractionManagerBaseOptions","SelectionWriteOptions","ResizeManager","FileRenderer","AppliedThemeStyleCache","BaseCodeOptions","DiffsEditableComponent","DiffsEditor","DiffsTextDocument","FileContents","HighlightedToken","LineAnnotation","PostRenderPhase","PrePropertiesConfig","RenderFileMetadata","RenderRange","SelectedLineRange","ThemeTypes","WorkerPoolManager","FileRenderProps","LAnnotation","HTMLElement","FileHydrateProps","Omit","FileOptions","File","AnnotationElementCache","HydrationSetup","SVGElement","HTMLPreElement","HTMLStyleElement","Map","file","lineAnnotations","Array","fileContainer","forceRender","preventEmit","containerWrapper","deferManagers","renderRange"],"sources":["../../src/components/File.d.ts"],"sourcesContent":["import { type GetHoveredLineResult, InteractionManager, type InteractionManagerBaseOptions, type SelectionWriteOptions } from '../managers/InteractionManager';\nimport { ResizeManager } from '../managers/ResizeManager';\nimport { FileRenderer } from '../renderers/FileRenderer';\nimport type { AppliedThemeStyleCache, BaseCodeOptions, DiffsEditableComponent, DiffsEditor, DiffsTextDocument, FileContents, HighlightedToken, LineAnnotation, PostRenderPhase, PrePropertiesConfig, RenderFileMetadata, RenderRange, SelectedLineRange, ThemeTypes } from '../types';\nimport type { WorkerPoolManager } from '../worker';\nexport interface FileRenderProps<LAnnotation> {\n file: FileContents;\n fileContainer?: HTMLElement;\n containerWrapper?: HTMLElement;\n deferManagers?: boolean;\n forceRender?: boolean;\n preventEmit?: boolean;\n lineAnnotations?: LineAnnotation<LAnnotation>[];\n renderRange?: RenderRange;\n}\nexport interface FileHydrateProps<LAnnotation> extends Omit<FileRenderProps<LAnnotation>, 'fileContainer'> {\n fileContainer: HTMLElement;\n prerenderedHTML?: string;\n}\nexport interface FileOptions<LAnnotation> extends BaseCodeOptions, InteractionManagerBaseOptions<'file'> {\n disableFileHeader?: boolean;\n renderHeaderPrefix?: RenderFileMetadata;\n renderHeaderMetadata?: RenderFileMetadata;\n renderCustomHeader?: RenderFileMetadata;\n /**\n * When true, errors during rendering are rethrown instead of being caught\n * and displayed in the DOM. Useful for testing or when you want to handle\n * errors yourself.\n */\n disableErrorHandling?: boolean;\n renderAnnotation?(annotation: LineAnnotation<LAnnotation>): HTMLElement | undefined;\n renderGutterUtility?(getHoveredRow: () => GetHoveredLineResult<'file'> | undefined): HTMLElement | null | undefined;\n onPostRender?(node: HTMLElement, instance: File<LAnnotation>, phase: PostRenderPhase): unknown;\n}\ninterface AnnotationElementCache<LAnnotation> {\n element: HTMLElement;\n annotation: LineAnnotation<LAnnotation>;\n}\ninterface HydrationSetup<LAnnotation> {\n file: FileContents;\n lineAnnotations: LineAnnotation<LAnnotation>[] | undefined;\n}\nexport declare class File<LAnnotation = undefined> implements DiffsEditableComponent<LAnnotation> {\n options: FileOptions<LAnnotation>;\n private workerManager?;\n private isContainerManaged;\n static LoadedCustomComponent: boolean;\n readonly __id: string;\n readonly type = \"file\";\n protected fileContainer: HTMLElement | undefined;\n protected spriteSVG: SVGElement | undefined;\n protected pre: HTMLPreElement | undefined;\n protected code: HTMLElement | undefined;\n protected bufferBefore: HTMLElement | undefined;\n protected bufferAfter: HTMLElement | undefined;\n protected themeCSSStyle: HTMLStyleElement | undefined;\n protected appliedThemeCSS: AppliedThemeStyleCache | undefined;\n protected hasAdoptedThemeCSS: boolean;\n protected unsafeCSSStyle: HTMLStyleElement | undefined;\n protected appliedUnsafeCSS: string | undefined;\n protected gutterUtilityContent: HTMLElement | undefined;\n protected errorWrapper: HTMLElement | undefined;\n protected placeHolder: HTMLElement | undefined;\n protected lastRenderedHeaderHTML: string | undefined;\n protected cachedHeaderHTML: string | undefined;\n protected appliedPreAttributes: PrePropertiesConfig | undefined;\n protected lastRowCount: number | undefined;\n private mounted;\n protected headerElement: HTMLElement | undefined;\n protected headerCustom: HTMLElement | undefined;\n protected headerPrefix: HTMLElement | undefined;\n protected headerMetadata: HTMLElement | undefined;\n protected fileRenderer: FileRenderer<LAnnotation>;\n protected resizeManager: ResizeManager;\n protected interactionManager: InteractionManager<'file'>;\n protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>>;\n protected lineAnnotations: LineAnnotation<LAnnotation>[];\n protected managersDirty: boolean;\n file: FileContents | undefined;\n protected renderRange: RenderRange | undefined;\n protected enabled: boolean;\n protected editor: DiffsEditor<LAnnotation> | undefined;\n constructor(options?: FileOptions<LAnnotation>, workerManager?: WorkerPoolManager | undefined, isContainerManaged?: boolean);\n private handleHighlightRender;\n rerender(): void;\n onThemeChange(): void;\n setOptions(options: FileOptions<LAnnotation> | undefined): void;\n protected syncInteractionOptions(): void;\n private mergeOptions;\n setThemeType(themeType: ThemeTypes): void;\n private applyCachedThemeState;\n private hasThemeChanged;\n getHoveredLine: () => {\n lineNumber: number;\n } | undefined;\n setLineAnnotations(lineAnnotations: LineAnnotation<LAnnotation>[]): void;\n setSelectedLines(range: SelectedLineRange | null, options?: SelectionWriteOptions): void;\n flushManagers(): void;\n cleanUp(recycle?: boolean): void;\n virtualizedSetup(): void;\n hydrate(props: FileHydrateProps<LAnnotation>): void;\n protected hydrateElements(fileContainer: HTMLElement, prerenderedHTML: string | undefined): void;\n protected hydrationSetup({ file, lineAnnotations }: HydrationSetup<LAnnotation>): void;\n getOrCreateLineCache(file?: FileContents | undefined): string[];\n protected updateBuffers(renderRange: RenderRange): void;\n private syncRenderView;\n attachEditor(editor: DiffsEditor<LAnnotation>): () => void;\n applyDocumentChange(textDocument: DiffsTextDocument, newLineAnnotations?: LineAnnotation<LAnnotation>[]): void;\n updateRenderCache(dirtyLines: Map<number, Array<HighlightedToken>>, themeType: 'dark' | 'light'): void;\n render({ file, fileContainer, forceRender, preventEmit, containerWrapper, deferManagers, lineAnnotations, renderRange }: FileRenderProps<LAnnotation>): boolean;\n private emitPostRender;\n private removeRenderedCode;\n private clearAuxiliaryNodes;\n private canPartiallyRender;\n renderPlaceholder(height: number): boolean;\n primeHighlightCache(): void;\n private cleanChildNodes;\n private renderAnnotations;\n private renderGutterUtility;\n private injectUnsafeCSS;\n private applyThemeState;\n private hydrateMeasuredScrollbar;\n private applyFullRender;\n private applyPartialRender;\n private getColumns;\n private trimDOMToOverlap;\n private getDOMBoundaryIndices;\n private getLineIndexFromDOMNode;\n private applyBuffers;\n protected shouldDisableVirtualizationBuffers(): boolean;\n private applyHeaderToDOM;\n private clearHeaderSlots;\n private upsertHeaderSlotElement;\n private replaceHeaderSlotContent;\n private createHeaderSlotElement;\n protected getOrCreateFileContainerNode(fileContainer?: HTMLElement, parentNode?: HTMLElement): HTMLElement;\n private adoptReusableShellElements;\n private ensureSpriteSVG;\n private getOrCreatePreNode;\n private syncCodeNodeFromPre;\n private applyPreNodeAttributes;\n private applyErrorToDOM;\n private cleanupErrorWrapper;\n}\nexport {};\n//# sourceMappingURL=File.d.ts.map"],"mappings":"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"}
1
+ {"version":3,"file":"File.d.ts","names":[],"sources":["../../src/components/File.ts"],"mappings":";;;;;;;UAoEiB,eAAA;EACf,IAAA,EAAM,YAAA;EACN,aAAA,GAAgB,WAAA;EAChB,gBAAA,GAAmB,WAAA;EACnB,aAAA;EACA,WAAA;EACA,WAAA;EACA,eAAA,GAAkB,cAAA,CAAe,WAAA;EACjC,WAAA,GAAc,WAAA;AAAA;AAAA,UAGC,gBAAA,sBAAsC,IAAA,CACrD,eAAA,CAAgB,WAAA;EAGhB,aAAA,EAAe,WAAA;EACf,eAAA;AAAA;AAAA,UAGe,WAAA,sBACP,eAAA,EAAiB,6BAAA;EACzB,iBAAA;EACA,kBAAA,GAAqB,kBAAA;EACrB,0BAAA,GAA6B,kBAAA;EAC7B,oBAAA,GAAuB,kBAAA;EACvB,kBAAA,GAAqB,kBAAA;EAtBF;;;;;EA4BnB,oBAAA;EACA,gBAAA,EACE,UAAA,EAAY,cAAA,CAAe,WAAA,IAC1B,WAAA;EACH,mBAAA,EACE,aAAA,QAAqB,oBAAA,uBACpB,WAAA;EAEH,YAAA,EACE,IAAA,EAAM,WAAA,EACN,QAAA,EAAU,IAAA,CAAK,WAAA,GACf,KAAA,EAAO,eAAA;AAAA;AAAA,UAID,sBAAA;EACR,OAAA,EAAS,WAAA;EACT,UAAA,EAAY,cAAA,CAAe,WAAA;AAAA;AAAA,UAQnB,cAAA;EACR,IAAA,EAAM,YAAA;EACN,eAAA,EAAiB,cAAA,CAAe,WAAA;AAAA;AAAA,cAKrB,IAAA,qCAEA,sBAAA,CAAuB,WAAA;EAgDzB,OAAA,EAAS,WAAA,CAAY,WAAA;EAAA,QACpB,aAAA;EAAA,QACA,kBAAA;EAAA,OAjDH,qBAAA;EAAA,SAEE,IAAA;EAAA,SACA,IAAA;EAAA,UAEC,aAAA,EAAe,WAAA;EAAA,UACf,SAAA,EAAW,UAAA;EAAA,UACX,GAAA,EAAK,cAAA;EAAA,UACL,IAAA,EAAM,WAAA;EAAA,UACN,YAAA,EAAc,WAAA;EAAA,UACd,WAAA,EAAa,WAAA;EAAA,UACb,aAAA,EAAe,gBAAA;EAAA,UACf,eAAA,EAAiB,sBAAA;EAAA,UACjB,kBAAA;EAAA,UACA,cAAA,EAAgB,gBAAA;EAAA,UAChB,gBAAA;EAAA,UACA,oBAAA,EAAsB,WAAA;EAAA,UACtB,YAAA,EAAc,WAAA;EAAA,UACd,WAAA,EAAa,WAAA;EAAA,UACb,sBAAA;EAAA,UACA,gBAAA;EAAA,UACA,oBAAA,EAAsB,mBAAA;EAAA,UACtB,YAAA;EAAA,QACF,OAAA;EAAA,UAEE,aAAA,EAAe,WAAA;EAAA,UACf,YAAA,EAAc,WAAA;EAAA,UACd,YAAA,EAAc,WAAA;EAAA,UACd,oBAAA,EAAsB,WAAA;EAAA,UACtB,cAAA,EAAgB,WAAA;EAAA,UAEhB,YAAA,EAAc,YAAA,CAAa,WAAA;EAAA,UAC3B,aAAA,EAAe,aAAA;EAAA,UACf,kBAAA,EAAoB,kBAAA;EAAA,UAEpB,eAAA,EAAiB,GAAA,SAAY,sBAAA,CAAuB,WAAA;EAAA,UAEpD,eAAA,EAAiB,cAAA,CAAe,WAAA;EAAA,UAChC,aAAA;EAEH,IAAA,EAAM,YAAA;EAAA,UACH,WAAA,EAAa,WAAA;EAAA,UACb,OAAA;EAAA,UAEA,MAAA,EAAQ,WAAA,CAAY,WAAA;EAE9B,WAAA,CACS,OAAA,GAAS,WAAA,CAAY,WAAA,GACpB,aAAA,GAAgB,iBAAA,cAChB,kBAAA;EAAA,QAeF,qBAAA;EAID,QAAA;EASA,aAAA;EAKA,UAAA,CAAW,OAAA,EAAS,WAAA,CAAY,WAAA;EAAA,UAO7B,sBAAA;EAAA,QAIF,YAAA;EAID,YAAA,CAAa,SAAA,EAAW,UAAA;EAAA,QAQvB,qBAAA;EAAA,QAqBA,eAAA;EAUD,cAAA,QAAqB,oBAAA;EAIrB,kBAAA,CACL,eAAA,EAAiB,cAAA,CAAe,WAAA;EAK3B,gBAAA,CACL,KAAA,EAAO,iBAAA,SACP,OAAA,GAAU,qBAAA;EAKL,aAAA;EAYA,OAAA,CAAQ,OAAA;EA0DR,gBAAA;EAKA,OAAA,CAAQ,KAAA,EAAO,gBAAA,CAAiB,WAAA;EAAA,UA4B7B,eAAA,CACR,aAAA,EAAe,WAAA,EACf,eAAA;EAAA,UAkDQ,cAAA;IACR,IAAA;IACA;EAAA,GACC,cAAA,CAAe,WAAA;EAgBX,oBAAA,CACL,IAAA,GAAM,YAAA;EAAA,UAOE,aAAA,CAAc,WAAA,EAAa,WAAA;EAAA,QAM7B,sBAAA;EAiBD,YAAA,CAAa,MAAA,EAAQ,WAAA,CAAY,WAAA;EAYjC,mBAAA,CACL,YAAA,EAAc,iBAAA,EACd,kBAAA,GAAqB,cAAA,CAAe,WAAA;EAc/B,iBAAA,CACL,UAAA,EAAY,GAAA,SAAY,KAAA,CAAM,gBAAA,IAC9B,SAAA;EAKK,MAAA;IACL,IAAA;IACA,aAAA;IACA,WAAA;IACA,WAAA;IACA,gBAAA;IACA,aAAA;IACA,eAAA;IACA;EAAA,GACC,eAAA,CAAgB,WAAA;EAAA,QAyJX,cAAA;EAAA,QA2BA,kBAAA;EAAA,QAmBA,mBAAA;EAAA,QAUA,kBAAA;EAWD,iBAAA,CAAkB,MAAA;EAmBlB,mBAAA;EAAA,QAoBC,eAAA;EAAA,QA2CA,iBAAA;EAAA,QA4CA,mBAAA;EAAA,QAqBA,eAAA;EAAA,QAiCA,eAAA;EAAA,QAqDA,wBAAA;EAAA,QAWA,eAAA;EAAA,QAqBA,kBAAA;EAAA,QA4GA,UAAA;EAAA,QAcA,gBAAA;EAAA,QA2BA,qBAAA;EAAA,QA8CA,uBAAA;EAAA,QASA,YAAA;EAAA,UAiDE,kCAAA;EAAA,QAIF,gBAAA;EAAA,QA6EA,gBAAA;EAAA,QAYA,uBAAA;EAAA,QAkBA,wBAAA;EAAA,QAYA,uBAAA;EAAA,UAME,4BAAA,CACR,aAAA,GAAgB,WAAA,EAChB,UAAA,GAAa,WAAA,GACZ,WAAA;EAAA,QAgCK,0BAAA;EAAA,QAyBA,eAAA;EAAA,QAgBA,kBAAA;EAAA,QAuBA,mBAAA;EAAA,QAaA,sBAAA;EAAA,QAqBA,eAAA;EAAA,QAqBA,mBAAA;AAAA"}
@@ -1,5 +1,4 @@
1
- import { CUSTOM_HEADER_SLOT_ID, DEFAULT_THEMES, DEFAULT_TOKENIZE_MAX_LENGTH, DIFFS_TAG_NAME, EMPTY_RENDER_RANGE, HEADER_METADATA_SLOT_ID, HEADER_PREFIX_SLOT_ID, THEME_CSS_ATTRIBUTE, UNSAFE_CSS_ATTRIBUTE } from "../constants.js";
2
- import { queueRender } from "../managers/UniversalRenderingManager.js";
1
+ import { CUSTOM_HEADER_SLOT_ID, DEFAULT_THEMES, EMPTY_RENDER_RANGE, HEADER_FILENAME_SUFFIX_SLOT_ID, HEADER_METADATA_SLOT_ID, HEADER_PREFIX_SLOT_ID } from "../constants.js";
3
2
  import { areThemesEqual } from "../utils/areThemesEqual.js";
4
3
  import { isStyleNode } from "../utils/isStyleNode.js";
5
4
  import { areFilesEqual } from "../utils/areFilesEqual.js";
@@ -22,14 +21,16 @@ import { getOrCreateCodeNode } from "../utils/getOrCreateCodeNode.js";
22
21
  import { upsertHostThemeStyle } from "../utils/hostTheme.js";
23
22
  import { prerenderHTMLIfNecessary } from "../utils/prerenderHTMLIfNecessary.js";
24
23
  import { setPreNodeProperties } from "../utils/setWrapperNodeProps.js";
25
- import { DiffsContainerLoaded } from "./web-components.js";
24
+ import "./web-components.js";
26
25
  import { toHtml } from "hast-util-to-html";
27
-
28
26
  //#region src/components/File.ts
29
27
  const EMPTY_STRINGS = [""];
30
28
  let instanceId = -1;
31
29
  var File = class {
32
- static LoadedCustomComponent = DiffsContainerLoaded;
30
+ options;
31
+ workerManager;
32
+ isContainerManaged;
33
+ static LoadedCustomComponent = true;
33
34
  __id = `file:${++instanceId}`;
34
35
  type = "file";
35
36
  fileContainer;
@@ -54,6 +55,7 @@ var File = class {
54
55
  headerElement;
55
56
  headerCustom;
56
57
  headerPrefix;
58
+ headerFilenameSuffix;
57
59
  headerMetadata;
58
60
  fileRenderer;
59
61
  resizeManager;
@@ -151,12 +153,15 @@ var File = class {
151
153
  if (!recycle) this.lineAnnotations = [];
152
154
  this.annotationCache.clear();
153
155
  this.pre = void 0;
156
+ this.bufferBefore?.remove();
154
157
  this.bufferBefore = void 0;
158
+ this.bufferAfter?.remove();
155
159
  this.bufferAfter = void 0;
156
160
  this.appliedPreAttributes = void 0;
157
161
  this.lastRowCount = void 0;
158
162
  this.headerElement = void 0;
159
163
  this.headerPrefix = void 0;
164
+ this.headerFilenameSuffix = void 0;
160
165
  this.headerMetadata = void 0;
161
166
  this.headerCustom = void 0;
162
167
  this.lastRenderedHeaderHTML = void 0;
@@ -210,11 +215,11 @@ var File = class {
210
215
  this.appliedPreAttributes = void 0;
211
216
  continue;
212
217
  }
213
- if (element instanceof HTMLStyleElement && element.hasAttribute(THEME_CSS_ATTRIBUTE)) {
218
+ if (element instanceof HTMLStyleElement && element.hasAttribute("data-theme-css")) {
214
219
  this.themeCSSStyle = element;
215
220
  continue;
216
221
  }
217
- if (element instanceof HTMLStyleElement && element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)) {
222
+ if (element instanceof HTMLStyleElement && element.hasAttribute("data-unsafe-css")) {
218
223
  this.unsafeCSSStyle = element;
219
224
  this.appliedUnsafeCSS = element.textContent;
220
225
  continue;
@@ -251,20 +256,22 @@ var File = class {
251
256
  updateBuffers(renderRange) {
252
257
  if (this.pre != null) this.applyBuffers(this.pre, renderRange);
253
258
  }
254
- syncRenderView = () => {
259
+ syncRenderViewToEditor() {
255
260
  const editor = this.editor;
256
261
  const fileContainer = this.fileContainer;
257
262
  const file = this.file;
258
263
  if (editor != null && fileContainer != null && file != null) this.fileRenderer.initializeHighlighter().then((highlighter) => {
259
264
  editor.__syncRenderView(highlighter, fileContainer, file, this.lineAnnotations, this.renderRange);
260
265
  });
261
- };
266
+ }
262
267
  attachEditor(editor) {
263
268
  this.editor?.cleanUp();
264
269
  this.editor = editor;
265
- queueRender(this.syncRenderView);
270
+ this.interactionManager.setEditorAttached(true);
271
+ this.syncRenderViewToEditor();
266
272
  return () => {
267
273
  this.editor = void 0;
274
+ this.interactionManager.setEditorAttached(false);
268
275
  };
269
276
  }
270
277
  applyDocumentChange(textDocument, newLineAnnotations) {
@@ -340,7 +347,7 @@ var File = class {
340
347
  if (!deferManagers) this.flushManagers();
341
348
  this.renderAnnotations();
342
349
  this.renderGutterUtility();
343
- if (this.editor != null) queueRender(this.syncRenderView);
350
+ if (this.editor != null) this.syncRenderViewToEditor();
344
351
  } catch (error) {
345
352
  if (disableErrorHandling) throw error;
346
353
  console.error(error);
@@ -403,7 +410,7 @@ var File = class {
403
410
  primeHighlightCache() {
404
411
  const { file, workerManager } = this;
405
412
  if (file == null || file.cacheKey == null || workerManager == null || isFilePlainText(file)) return;
406
- if (this.fileRenderer.getOrCreateLineCache(file).length > (this.options.tokenizeMaxLength ?? DEFAULT_TOKENIZE_MAX_LENGTH)) return;
413
+ if (this.fileRenderer.getOrCreateLineCache(file).length > (this.options.tokenizeMaxLength ?? 1e5)) return;
407
414
  workerManager.primeFileHighlightCache(file);
408
415
  }
409
416
  cleanChildNodes() {
@@ -416,6 +423,7 @@ var File = class {
416
423
  this.headerElement?.remove();
417
424
  this.gutterUtilityContent?.remove();
418
425
  this.headerPrefix?.remove();
426
+ this.headerFilenameSuffix?.remove();
419
427
  this.headerMetadata?.remove();
420
428
  this.headerCustom?.remove();
421
429
  this.pre?.remove();
@@ -429,6 +437,7 @@ var File = class {
429
437
  this.headerElement = void 0;
430
438
  this.gutterUtilityContent = void 0;
431
439
  this.headerPrefix = void 0;
440
+ this.headerFilenameSuffix = void 0;
432
441
  this.headerMetadata = void 0;
433
442
  this.headerCustom = void 0;
434
443
  this.pre = void 0;
@@ -719,18 +728,22 @@ var File = class {
719
728
  this.lastRenderedHeaderHTML = headerHTML;
720
729
  }
721
730
  if (this.isContainerManaged) return;
722
- const { renderHeaderPrefix, renderCustomHeader, renderHeaderMetadata } = this.options;
731
+ const { renderHeaderPrefix, renderHeaderFilenameSuffix, renderCustomHeader, renderHeaderMetadata } = this.options;
723
732
  if (renderCustomHeader != null) {
724
733
  const content = renderCustomHeader(file) ?? void 0;
725
734
  this.headerCustom = this.upsertHeaderSlotElement(container, this.headerCustom, CUSTOM_HEADER_SLOT_ID, content);
726
735
  this.headerPrefix?.remove();
736
+ this.headerFilenameSuffix?.remove();
727
737
  this.headerMetadata?.remove();
728
738
  this.headerPrefix = void 0;
739
+ this.headerFilenameSuffix = void 0;
729
740
  this.headerMetadata = void 0;
730
741
  } else {
731
742
  const prefix = renderHeaderPrefix?.(file) ?? void 0;
743
+ const suffix = renderHeaderFilenameSuffix?.(file) ?? void 0;
732
744
  const content = renderHeaderMetadata?.(file) ?? void 0;
733
745
  this.headerPrefix = this.upsertHeaderSlotElement(container, this.headerPrefix, HEADER_PREFIX_SLOT_ID, prefix);
746
+ this.headerFilenameSuffix = this.upsertHeaderSlotElement(container, this.headerFilenameSuffix, HEADER_FILENAME_SUFFIX_SLOT_ID, suffix);
734
747
  this.headerMetadata = this.upsertHeaderSlotElement(container, this.headerMetadata, HEADER_METADATA_SLOT_ID, content);
735
748
  this.headerCustom?.remove();
736
749
  this.headerCustom = void 0;
@@ -738,9 +751,11 @@ var File = class {
738
751
  }
739
752
  clearHeaderSlots() {
740
753
  this.headerPrefix?.remove();
754
+ this.headerFilenameSuffix?.remove();
741
755
  this.headerMetadata?.remove();
742
756
  this.headerCustom?.remove();
743
757
  this.headerPrefix = void 0;
758
+ this.headerFilenameSuffix = void 0;
744
759
  this.headerMetadata = void 0;
745
760
  this.headerCustom = void 0;
746
761
  }
@@ -766,7 +781,7 @@ var File = class {
766
781
  }
767
782
  getOrCreateFileContainerNode(fileContainer, parentNode) {
768
783
  const { fileContainer: previousContainer } = this;
769
- const nextContainer = fileContainer ?? previousContainer ?? document.createElement(DIFFS_TAG_NAME);
784
+ const nextContainer = fileContainer ?? previousContainer ?? document.createElement("diffs-container");
770
785
  const containerChanged = previousContainer !== nextContainer;
771
786
  if (containerChanged) this.emitPostRender(true);
772
787
  this.fileContainer = nextContainer;
@@ -783,10 +798,10 @@ var File = class {
783
798
  const { shadowRoot } = fileContainer;
784
799
  if (shadowRoot == null) return;
785
800
  for (const element of shadowRoot.children) if (element instanceof SVGElement) this.spriteSVG ??= element;
786
- else if (isStyleNode(element) && element.hasAttribute(THEME_CSS_ATTRIBUTE)) {
801
+ else if (isStyleNode(element) && element.hasAttribute("data-theme-css")) {
787
802
  this.themeCSSStyle ??= element;
788
803
  this.hasAdoptedThemeCSS = true;
789
- } else if (isStyleNode(element) && element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)) {
804
+ } else if (isStyleNode(element) && element.hasAttribute("data-unsafe-css")) {
790
805
  this.unsafeCSSStyle ??= element;
791
806
  this.appliedUnsafeCSS ??= this.options.unsafeCSS ?? void 0;
792
807
  }
@@ -871,7 +886,7 @@ function shouldRenderCode(pre, file, collapsed = false) {
871
886
  function shouldRenderHeader(headerElement, file, disableFileHeader = false) {
872
887
  return headerElement == null && file != null && !disableFileHeader;
873
888
  }
874
-
875
889
  //#endregion
876
890
  export { File };
891
+
877
892
  //# sourceMappingURL=File.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"File.js","names":["EMPTY_STRINGS: string[]","options: FileOptions<LAnnotation>","workerManager?: WorkerPoolManager | undefined","error: unknown","phase: PostRenderPhase","preProperties: PrePropertiesConfig"],"sources":["../../src/components/File.ts"],"sourcesContent":["import type { Element as HASTElement } from 'hast';\nimport { toHtml } from 'hast-util-to-html';\n\nimport {\n CUSTOM_HEADER_SLOT_ID,\n DEFAULT_THEMES,\n DEFAULT_TOKENIZE_MAX_LENGTH,\n DIFFS_TAG_NAME,\n EMPTY_RENDER_RANGE,\n HEADER_METADATA_SLOT_ID,\n HEADER_PREFIX_SLOT_ID,\n THEME_CSS_ATTRIBUTE,\n UNSAFE_CSS_ATTRIBUTE,\n} from '../constants';\nimport {\n type GetHoveredLineResult,\n InteractionManager,\n type InteractionManagerBaseOptions,\n pluckInteractionOptions,\n type SelectionWriteOptions,\n} from '../managers/InteractionManager';\nimport { ResizeManager } from '../managers/ResizeManager';\nimport { queueRender } from '../managers/UniversalRenderingManager';\nimport { FileRenderer, type FileRenderResult } from '../renderers/FileRenderer';\nimport { SVGSpriteSheet } from '../sprite';\nimport type {\n AppliedThemeStyleCache,\n BaseCodeOptions,\n DiffsEditableComponent,\n DiffsEditor,\n DiffsTextDocument,\n FileContents,\n HighlightedToken,\n LineAnnotation,\n PostRenderPhase,\n PrePropertiesConfig,\n RenderFileMetadata,\n RenderRange,\n SelectedLineRange,\n ThemeTypes,\n} from '../types';\nimport { areFilesEqual } from '../utils/areFilesEqual';\nimport { areLineAnnotationsEqual } from '../utils/areLineAnnotationsEqual';\nimport { arePrePropertiesEqual } from '../utils/arePrePropertiesEqual';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { areThemesEqual } from '../utils/areThemesEqual';\nimport { createAnnotationWrapperNode } from '../utils/createAnnotationWrapperNode';\nimport { createGutterUtilityContentNode } from '../utils/createGutterUtilityContentNode';\nimport { createUnsafeCSSStyleNode } from '../utils/createUnsafeCSSStyleNode';\nimport {\n patchScrollbarGutterSize,\n wrapThemeCSS,\n wrapUnsafeCSS,\n} from '../utils/cssWrappers';\nimport { getFileRendererOptions } from '../utils/getFileRendererOptions';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\nimport { getOrCreateCodeNode } from '../utils/getOrCreateCodeNode';\nimport { upsertHostThemeStyle } from '../utils/hostTheme';\nimport { isFilePlainText } from '../utils/isFilePlainText';\nimport { isStyleNode } from '../utils/isStyleNode';\nimport { prerenderHTMLIfNecessary } from '../utils/prerenderHTMLIfNecessary';\nimport { getMeasuredScrollbarGutter } from '../utils/scrollbarGutter';\nimport { setPreNodeProperties } from '../utils/setWrapperNodeProps';\nimport type { WorkerPoolManager } from '../worker';\nimport { DiffsContainerLoaded } from './web-components';\n\nconst EMPTY_STRINGS: string[] = [''];\n\nexport interface FileRenderProps<LAnnotation> {\n file: FileContents;\n fileContainer?: HTMLElement;\n containerWrapper?: HTMLElement;\n deferManagers?: boolean;\n forceRender?: boolean;\n preventEmit?: boolean;\n lineAnnotations?: LineAnnotation<LAnnotation>[];\n renderRange?: RenderRange;\n}\n\nexport interface FileHydrateProps<LAnnotation> extends Omit<\n FileRenderProps<LAnnotation>,\n 'fileContainer'\n> {\n fileContainer: HTMLElement;\n prerenderedHTML?: string;\n}\n\nexport interface FileOptions<LAnnotation>\n extends BaseCodeOptions, InteractionManagerBaseOptions<'file'> {\n disableFileHeader?: boolean;\n renderHeaderPrefix?: RenderFileMetadata;\n renderHeaderMetadata?: RenderFileMetadata;\n renderCustomHeader?: RenderFileMetadata;\n /**\n * When true, errors during rendering are rethrown instead of being caught\n * and displayed in the DOM. Useful for testing or when you want to handle\n * errors yourself.\n */\n disableErrorHandling?: boolean;\n renderAnnotation?(\n annotation: LineAnnotation<LAnnotation>\n ): HTMLElement | undefined;\n renderGutterUtility?(\n getHoveredRow: () => GetHoveredLineResult<'file'> | undefined\n ): HTMLElement | null | undefined;\n\n onPostRender?(\n node: HTMLElement,\n instance: File<LAnnotation>,\n phase: PostRenderPhase\n ): unknown;\n}\n\ninterface AnnotationElementCache<LAnnotation> {\n element: HTMLElement;\n annotation: LineAnnotation<LAnnotation>;\n}\n\ninterface ColumnElements {\n gutter: HTMLElement;\n content: HTMLElement;\n}\n\ninterface HydrationSetup<LAnnotation> {\n file: FileContents;\n lineAnnotations: LineAnnotation<LAnnotation>[] | undefined;\n}\n\nlet instanceId = -1;\n\nexport class File<\n LAnnotation = undefined,\n> implements DiffsEditableComponent<LAnnotation> {\n static LoadedCustomComponent: boolean = DiffsContainerLoaded;\n\n readonly __id: string = `file:${++instanceId}`;\n readonly type = 'file';\n\n protected fileContainer: HTMLElement | undefined;\n protected spriteSVG: SVGElement | undefined;\n protected pre: HTMLPreElement | undefined;\n protected code: HTMLElement | undefined;\n protected bufferBefore: HTMLElement | undefined;\n protected bufferAfter: HTMLElement | undefined;\n protected themeCSSStyle: HTMLStyleElement | undefined;\n protected appliedThemeCSS: AppliedThemeStyleCache | undefined;\n protected hasAdoptedThemeCSS = false;\n protected unsafeCSSStyle: HTMLStyleElement | undefined;\n protected appliedUnsafeCSS: string | undefined;\n protected gutterUtilityContent: HTMLElement | undefined;\n protected errorWrapper: HTMLElement | undefined;\n protected placeHolder: HTMLElement | undefined;\n protected lastRenderedHeaderHTML: string | undefined;\n protected cachedHeaderHTML: string | undefined;\n protected appliedPreAttributes: PrePropertiesConfig | undefined;\n protected lastRowCount: number | undefined;\n private mounted = false;\n\n protected headerElement: HTMLElement | undefined;\n protected headerCustom: HTMLElement | undefined;\n protected headerPrefix: HTMLElement | undefined;\n protected headerMetadata: HTMLElement | undefined;\n\n protected fileRenderer: FileRenderer<LAnnotation>;\n protected resizeManager: ResizeManager;\n protected interactionManager: InteractionManager<'file'>;\n\n protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>> =\n new Map();\n protected lineAnnotations: LineAnnotation<LAnnotation>[] = [];\n protected managersDirty = false;\n\n public file: FileContents | undefined;\n protected renderRange: RenderRange | undefined;\n protected enabled = true;\n\n protected editor: DiffsEditor<LAnnotation> | undefined;\n\n constructor(\n public options: FileOptions<LAnnotation> = { theme: DEFAULT_THEMES },\n private workerManager?: WorkerPoolManager | undefined,\n private isContainerManaged = false\n ) {\n this.fileRenderer = new FileRenderer<LAnnotation>(\n options,\n this.handleHighlightRender,\n this.workerManager\n );\n this.resizeManager = new ResizeManager();\n this.interactionManager = new InteractionManager(\n 'file',\n pluckInteractionOptions(options)\n );\n this.workerManager?.subscribeToThemeChanges(this);\n }\n\n private handleHighlightRender = (): void => {\n this.rerender();\n };\n\n public rerender(): void {\n if (!this.enabled || this.file == null) return;\n this.render({\n file: this.file,\n forceRender: true,\n renderRange: this.renderRange,\n });\n }\n\n public onThemeChange(): void {\n this.fileRenderer.clearRenderCache();\n this.rerender();\n }\n\n public setOptions(options: FileOptions<LAnnotation> | undefined): void {\n if (options == null) return;\n this.options = options;\n this.cachedHeaderHTML = undefined;\n this.syncInteractionOptions();\n }\n\n protected syncInteractionOptions(): void {\n this.interactionManager.setOptions(pluckInteractionOptions(this.options));\n }\n\n private mergeOptions(options: Partial<FileOptions<LAnnotation>>): void {\n this.options = { ...this.options, ...options };\n }\n\n public setThemeType(themeType: ThemeTypes): void {\n if ((this.options.themeType ?? 'system') === themeType) {\n return;\n }\n this.mergeOptions({ themeType });\n this.applyCachedThemeState(themeType);\n }\n\n private applyCachedThemeState(themeType: ThemeTypes): boolean {\n if (\n typeof this.options.theme === 'string' ||\n this.fileContainer == null ||\n this.appliedThemeCSS == null\n ) {\n return false;\n }\n const effectiveThemeType = this.appliedThemeCSS.baseThemeType ?? themeType;\n if (this.appliedThemeCSS.themeType === effectiveThemeType) {\n return false;\n }\n this.applyThemeState(\n this.fileContainer,\n this.appliedThemeCSS.themeStyles,\n themeType,\n this.appliedThemeCSS.baseThemeType\n );\n return true;\n }\n\n private hasThemeChanged(): boolean {\n return (\n this.appliedThemeCSS != null &&\n !areThemesEqual(\n this.appliedThemeCSS.theme,\n this.options.theme ?? DEFAULT_THEMES\n )\n );\n }\n\n public getHoveredLine = (): GetHoveredLineResult<'file'> | undefined => {\n return this.interactionManager.getHoveredLine();\n };\n\n public setLineAnnotations(\n lineAnnotations: LineAnnotation<LAnnotation>[]\n ): void {\n this.lineAnnotations = lineAnnotations;\n }\n\n public setSelectedLines(\n range: SelectedLineRange | null,\n options?: SelectionWriteOptions\n ): void {\n this.interactionManager.setSelection(range, options);\n }\n\n public flushManagers(): void {\n if (!this.managersDirty || this.pre == null) {\n this.managersDirty = false;\n return;\n }\n\n const { overflow = 'scroll' } = this.options;\n this.interactionManager.setup(this.pre);\n this.resizeManager.setup(this.pre, overflow === 'wrap');\n this.managersDirty = false;\n }\n\n public cleanUp(recycle = false): void {\n this.emitPostRender(true);\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n this.managersDirty = false;\n this.workerManager?.unsubscribeToThemeChanges(this);\n this.renderRange = undefined;\n\n // Clean up the elements\n if (!this.isContainerManaged) {\n this.fileContainer?.remove();\n }\n this.fileContainer = undefined;\n this.mounted = false;\n if (!recycle) {\n this.lineAnnotations = [];\n }\n this.annotationCache.clear();\n this.pre = undefined;\n this.bufferBefore = undefined;\n this.bufferAfter = undefined;\n this.appliedPreAttributes = undefined;\n this.lastRowCount = undefined;\n this.headerElement = undefined;\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.lastRenderedHeaderHTML = undefined;\n if (!recycle) {\n this.cachedHeaderHTML = undefined;\n }\n this.errorWrapper = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n this.placeHolder = undefined;\n this.unsafeCSSStyle = undefined;\n\n if (recycle) {\n this.fileRenderer.recycle();\n } else {\n this.fileRenderer.cleanUp();\n this.workerManager = undefined;\n this.file = undefined;\n }\n\n this.enabled = false;\n\n // Clean up the editor\n this.editor?.cleanUp();\n this.editor = undefined;\n }\n\n public virtualizedSetup(): void {\n this.enabled = true;\n this.workerManager?.subscribeToThemeChanges(this);\n }\n\n public hydrate(props: FileHydrateProps<LAnnotation>): void {\n const {\n fileContainer,\n prerenderedHTML,\n preventEmit = false,\n file,\n lineAnnotations,\n } = props;\n this.hydrateElements(fileContainer, prerenderedHTML);\n if (\n shouldRenderCode(this.pre, file, this.options.collapsed) ||\n shouldRenderHeader(\n this.headerElement,\n file,\n this.options.disableFileHeader\n )\n ) {\n this.render({ ...props, preventEmit: true });\n }\n // Otherwise orchestrate our setup.\n else {\n this.hydrationSetup({ file, lineAnnotations });\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n }\n\n protected hydrateElements(\n fileContainer: HTMLElement,\n prerenderedHTML: string | undefined\n ): void {\n if (this.fileContainer !== fileContainer) {\n this.emitPostRender(true);\n }\n prerenderHTMLIfNecessary(fileContainer, prerenderedHTML);\n for (const element of Array.from(\n fileContainer.shadowRoot?.children ?? []\n )) {\n if (element instanceof SVGElement) {\n this.spriteSVG = element;\n continue;\n }\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element instanceof HTMLPreElement) {\n this.pre = element;\n this.appliedPreAttributes = undefined;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle = element;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle = element;\n this.appliedUnsafeCSS = element.textContent;\n continue;\n }\n if ('diffsHeader' in element.dataset) {\n this.headerElement = element;\n this.lastRenderedHeaderHTML = undefined;\n continue;\n }\n }\n if (this.pre != null) {\n this.syncCodeNodeFromPre(this.pre);\n this.pre.removeAttribute('data-dehydrated');\n }\n this.fileContainer = fileContainer;\n this.hydrateMeasuredScrollbar();\n }\n\n protected hydrationSetup({\n file,\n lineAnnotations,\n }: HydrationSetup<LAnnotation>): void {\n this.lineAnnotations = lineAnnotations ?? this.lineAnnotations;\n this.file = file;\n this.fileRenderer.setOptions(getFileRendererOptions(this.options));\n this.syncInteractionOptions();\n if (this.pre == null) {\n return;\n }\n this.fileRenderer.hydrate(file);\n this.renderAnnotations();\n this.renderGutterUtility();\n this.injectUnsafeCSS();\n this.managersDirty = true;\n this.flushManagers();\n }\n\n public getOrCreateLineCache(\n file: FileContents | undefined = this.file\n ): string[] {\n return file != null\n ? this.fileRenderer.getOrCreateLineCache(file)\n : EMPTY_STRINGS;\n }\n\n protected updateBuffers(renderRange: RenderRange): void {\n if (this.pre != null) {\n this.applyBuffers(this.pre, renderRange);\n }\n }\n\n private syncRenderView = () => {\n const editor = this.editor;\n const fileContainer = this.fileContainer;\n const file = this.file;\n if (editor != null && fileContainer != null && file != null) {\n void this.fileRenderer.initializeHighlighter().then((highlighter) => {\n editor.__syncRenderView(\n highlighter,\n fileContainer,\n file,\n this.lineAnnotations,\n this.renderRange\n );\n });\n }\n };\n\n public attachEditor(editor: DiffsEditor<LAnnotation>): () => void {\n this.editor?.cleanUp();\n this.editor = editor;\n queueRender(this.syncRenderView);\n return () => {\n this.editor = undefined;\n };\n }\n\n // normally triggered by the editor when the document line count changes\n public applyDocumentChange(\n textDocument: DiffsTextDocument,\n newLineAnnotations?: LineAnnotation<LAnnotation>[]\n ): void {\n this.fileRenderer.applyDocumentChange(textDocument);\n if (\n newLineAnnotations != null &&\n newLineAnnotations !== this.lineAnnotations &&\n this.file != null\n ) {\n this.setLineAnnotations(newLineAnnotations);\n this.fileRenderer.setLineAnnotations(this.lineAnnotations);\n this.renderAnnotations();\n }\n }\n\n public updateRenderCache(\n dirtyLines: Map<number, Array<HighlightedToken>>,\n themeType: 'dark' | 'light'\n ): void {\n this.fileRenderer.updateRenderCache(dirtyLines, themeType);\n }\n\n public render({\n file,\n fileContainer,\n forceRender = false,\n preventEmit = false,\n containerWrapper,\n deferManagers = false,\n lineAnnotations,\n renderRange,\n }: FileRenderProps<LAnnotation>): boolean {\n if (!this.enabled) {\n throw new Error(\n 'File.render: attempting to call render after cleaned up'\n );\n }\n\n // postpone background tokenizing to next frame for avoiding UI freeze\n // during render\n this.editor?.__postponeBackgroundTokenizeToNextFrame();\n\n const { collapsed = false, themeType = 'system' } = this.options;\n const nextRenderRange = collapsed ? undefined : renderRange;\n const previousRenderRange = this.renderRange;\n const themeChanged = this.hasThemeChanged();\n const annotationsChanged =\n lineAnnotations != null &&\n (lineAnnotations.length > 0 || this.lineAnnotations.length > 0)\n ? lineAnnotations !== this.lineAnnotations\n : false;\n const didFileChange = !areFilesEqual(this.file, file);\n if (\n !collapsed &&\n !forceRender &&\n areRenderRangesEqual(nextRenderRange, this.renderRange) &&\n !didFileChange &&\n !annotationsChanged &&\n !themeChanged\n ) {\n return this.applyCachedThemeState(themeType);\n }\n\n this.renderRange = nextRenderRange;\n if (didFileChange) {\n this.cachedHeaderHTML = undefined;\n }\n this.file = file;\n this.fileRenderer.setOptions(getFileRendererOptions(this.options));\n this.syncInteractionOptions();\n if (lineAnnotations != null) {\n this.setLineAnnotations(lineAnnotations);\n }\n this.fileRenderer.setLineAnnotations(this.lineAnnotations);\n\n const { disableErrorHandling = false, disableFileHeader = false } =\n this.options;\n if (disableFileHeader) {\n // Remove existing header from DOM\n if (this.headerElement != null) {\n this.headerElement.remove();\n this.headerElement = undefined;\n this.lastRenderedHeaderHTML = undefined;\n }\n this.clearHeaderSlots();\n }\n\n fileContainer = this.getOrCreateFileContainerNode(\n fileContainer,\n containerWrapper\n );\n this.applyCachedThemeState(themeType);\n\n if (collapsed) {\n this.removeRenderedCode();\n this.clearAuxiliaryNodes();\n\n try {\n const fileResult = this.fileRenderer.renderFile(\n file,\n EMPTY_RENDER_RANGE\n );\n if (fileResult != null) {\n this.applyThemeState(\n fileContainer,\n fileResult.themeStyles,\n themeType,\n fileResult.baseThemeType\n );\n }\n if (fileResult?.headerAST != null) {\n this.applyHeaderToDOM(fileResult.headerAST, fileContainer);\n }\n this.injectUnsafeCSS();\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n try {\n const pre = this.getOrCreatePreNode(fileContainer);\n if (\n !this.canPartiallyRender(\n forceRender,\n annotationsChanged,\n didFileChange || themeChanged\n ) ||\n !this.applyPartialRender(previousRenderRange, nextRenderRange)\n ) {\n const fileResult = this.fileRenderer.renderFile(file, nextRenderRange);\n if (fileResult == null) {\n if (this.workerManager?.isInitialized() === false) {\n void this.workerManager.initialize().then(() => this.rerender());\n }\n return false;\n }\n this.applyThemeState(\n fileContainer,\n fileResult.themeStyles,\n themeType,\n fileResult.baseThemeType\n );\n if (fileResult.headerAST != null) {\n this.applyHeaderToDOM(fileResult.headerAST, fileContainer);\n }\n this.applyFullRender(fileResult, pre);\n }\n\n this.applyBuffers(pre, nextRenderRange);\n this.injectUnsafeCSS();\n this.managersDirty = true;\n if (!deferManagers) {\n this.flushManagers();\n }\n this.renderAnnotations();\n this.renderGutterUtility();\n if (this.editor != null) {\n queueRender(this.syncRenderView);\n }\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n private emitPostRender(unmount = false) {\n const {\n fileContainer,\n options: { onPostRender },\n } = this;\n\n if (unmount) {\n if (!this.mounted) {\n return;\n }\n this.mounted = false;\n if (fileContainer == null) {\n return;\n }\n onPostRender?.(fileContainer, this, 'unmount');\n return;\n }\n\n if (fileContainer == null) {\n return;\n }\n\n const phase: PostRenderPhase = this.mounted ? 'update' : 'mount';\n this.mounted = true;\n onPostRender?.(fileContainer, this, phase);\n }\n\n private removeRenderedCode(): void {\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n\n this.bufferBefore?.remove();\n this.bufferBefore = undefined;\n this.bufferAfter?.remove();\n this.bufferAfter = undefined;\n\n this.code?.remove();\n this.code = undefined;\n\n this.pre?.remove();\n this.pre = undefined;\n\n this.appliedPreAttributes = undefined;\n this.lastRowCount = undefined;\n }\n\n private clearAuxiliaryNodes(): void {\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n }\n\n private canPartiallyRender(\n forceRender: boolean,\n annotationsChanged: boolean,\n didContentChange: boolean\n ): boolean {\n if (forceRender || annotationsChanged || didContentChange) {\n return false;\n }\n return true;\n }\n\n public renderPlaceholder(height: number): boolean {\n if (this.fileContainer == null) {\n return false;\n }\n this.emitPostRender(true);\n this.cleanChildNodes();\n\n if (this.placeHolder == null) {\n const shadowRoot =\n this.fileContainer.shadowRoot ??\n this.fileContainer.attachShadow({ mode: 'open' });\n this.placeHolder = document.createElement('div');\n this.placeHolder.dataset.placeholder = '';\n shadowRoot.appendChild(this.placeHolder);\n }\n this.placeHolder.style.setProperty('height', `${height}px`);\n return true;\n }\n\n public primeHighlightCache(): void {\n const { file, workerManager } = this;\n if (\n file == null ||\n file.cacheKey == null ||\n workerManager == null ||\n isFilePlainText(file)\n ) {\n return;\n }\n const lines = this.fileRenderer.getOrCreateLineCache(file);\n if (\n lines.length >\n (this.options.tokenizeMaxLength ?? DEFAULT_TOKENIZE_MAX_LENGTH)\n ) {\n return;\n }\n workerManager.primeFileHighlightCache(file);\n }\n\n private cleanChildNodes() {\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n\n this.bufferAfter?.remove();\n this.bufferBefore?.remove();\n this.code?.remove();\n this.errorWrapper?.remove();\n this.headerElement?.remove();\n this.gutterUtilityContent?.remove();\n this.headerPrefix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.pre?.remove();\n this.spriteSVG?.remove();\n this.themeCSSStyle?.remove();\n this.unsafeCSSStyle?.remove();\n\n this.bufferAfter = undefined;\n this.bufferBefore = undefined;\n this.code = undefined;\n this.errorWrapper = undefined;\n this.headerElement = undefined;\n this.gutterUtilityContent = undefined;\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.pre = undefined;\n this.spriteSVG = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n\n this.lastRenderedHeaderHTML = undefined;\n this.lastRowCount = undefined;\n\n this.mounted = false;\n }\n\n private renderAnnotations(): void {\n if (this.isContainerManaged || this.fileContainer == null) {\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n return;\n }\n const staleAnnotations = new Map(this.annotationCache);\n const { renderAnnotation } = this.options;\n if (renderAnnotation != null && this.lineAnnotations.length > 0) {\n for (const [index, annotation] of this.lineAnnotations.entries()) {\n const id = `${index}-${getLineAnnotationName(annotation)}`;\n let cache = this.annotationCache.get(id);\n if (\n cache == null ||\n !areLineAnnotationsEqual(annotation, cache.annotation)\n ) {\n cache?.element.remove();\n const content = renderAnnotation(annotation);\n // If we can't render anything, then we should not render anything\n // and clear the annotation cache if necessary.\n if (content == null) {\n continue;\n }\n cache = {\n element: createAnnotationWrapperNode(\n getLineAnnotationName(annotation)\n ),\n annotation,\n };\n cache.element.appendChild(content);\n this.fileContainer.appendChild(cache.element);\n this.annotationCache.set(id, cache);\n }\n staleAnnotations.delete(id);\n }\n }\n for (const [id, { element }] of staleAnnotations.entries()) {\n this.annotationCache.delete(id);\n element.remove();\n }\n }\n\n private renderGutterUtility() {\n const { renderGutterUtility } = this.options;\n if (this.fileContainer == null || renderGutterUtility == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const element = renderGutterUtility(this.interactionManager.getHoveredLine);\n if (element != null && this.gutterUtilityContent != null) {\n return;\n } else if (element == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const gutterUtilityContent = createGutterUtilityContentNode();\n gutterUtilityContent.appendChild(element);\n this.fileContainer.appendChild(gutterUtilityContent);\n this.gutterUtilityContent = gutterUtilityContent;\n }\n\n private injectUnsafeCSS(): void {\n const { unsafeCSS } = this.options;\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null) {\n return;\n }\n\n if (unsafeCSS == null || unsafeCSS === '') {\n if (this.unsafeCSSStyle != null) {\n this.unsafeCSSStyle.remove();\n this.unsafeCSSStyle = undefined;\n }\n this.appliedUnsafeCSS = undefined;\n return;\n }\n\n if (\n this.unsafeCSSStyle?.parentNode === shadowRoot &&\n this.appliedUnsafeCSS === unsafeCSS\n ) {\n return;\n }\n\n // Create or update the style element\n this.unsafeCSSStyle ??= createUnsafeCSSStyleNode();\n if (this.unsafeCSSStyle.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.unsafeCSSStyle);\n }\n // Wrap in @layer unsafe to match SSR behavior\n this.unsafeCSSStyle.textContent = wrapUnsafeCSS(unsafeCSS);\n this.appliedUnsafeCSS = unsafeCSS;\n }\n\n private applyThemeState(\n container: HTMLElement,\n themeStyles: string,\n themeType: ThemeTypes,\n baseThemeType?: 'light' | 'dark'\n ): void {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n const effectiveThemeType = baseThemeType ?? themeType;\n const currentTheme = this.options.theme ?? DEFAULT_THEMES;\n const theme =\n typeof currentTheme === 'string' ? currentTheme : { ...currentTheme };\n const scrollbarGutter = getMeasuredScrollbarGutter(shadowRoot);\n if (\n this.themeCSSStyle?.parentNode === shadowRoot &&\n this.appliedThemeCSS?.themeStyles === themeStyles &&\n this.appliedThemeCSS.themeType === effectiveThemeType &&\n this.appliedThemeCSS.scrollbarGutter === scrollbarGutter\n ) {\n this.appliedThemeCSS.theme = theme;\n return;\n }\n if (\n this.hasAdoptedThemeCSS &&\n this.themeCSSStyle?.parentNode === shadowRoot\n ) {\n this.hasAdoptedThemeCSS = false;\n this.appliedThemeCSS = {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n };\n return;\n }\n this.themeCSSStyle = upsertHostThemeStyle({\n shadowRoot,\n currentNode: this.themeCSSStyle,\n themeCSS: wrapThemeCSS(themeStyles, effectiveThemeType, scrollbarGutter),\n });\n this.appliedThemeCSS =\n this.themeCSSStyle != null\n ? {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n }\n : undefined;\n }\n\n private hydrateMeasuredScrollbar(): void {\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null || this.themeCSSStyle == null) {\n return;\n }\n this.themeCSSStyle.textContent = patchScrollbarGutterSize(\n this.themeCSSStyle.textContent ?? '',\n getMeasuredScrollbarGutter(shadowRoot)\n );\n }\n\n private applyFullRender(result: FileRenderResult, pre: HTMLPreElement): void {\n this.cleanupErrorWrapper();\n this.applyPreNodeAttributes(pre, result);\n this.code = getOrCreateCodeNode({ code: this.code });\n const codeAst = this.fileRenderer.renderCodeAST(result);\n if (this.code.childElementCount >= 2) {\n for (let i = 0; i < 2; i++) {\n const domEl = this.code.children[i] as HTMLElement;\n const astEl = codeAst[i] as HASTElement;\n domEl.innerHTML = toHtml(astEl.children);\n domEl.style.cssText = astEl.properties.style as string;\n }\n } else {\n this.code.innerHTML = toHtml(codeAst);\n }\n if (!pre.contains(this.code)) {\n pre.replaceChildren(this.code);\n }\n this.lastRowCount = result.rowCount;\n }\n\n private applyPartialRender(\n previousRenderRange: RenderRange | undefined,\n renderRange: RenderRange | undefined\n ): boolean {\n if (previousRenderRange == null || renderRange == null) {\n return false;\n }\n const { file, code } = this;\n const columns = code != null ? this.getColumns(code) : undefined;\n if (file == null || code == null || columns == null) {\n return false;\n }\n\n const previousStart = previousRenderRange.startingLine;\n const nextStart = renderRange.startingLine;\n const previousEnd =\n previousRenderRange.totalLines === Infinity\n ? Number.POSITIVE_INFINITY\n : previousStart + previousRenderRange.totalLines;\n const nextEnd =\n renderRange.totalLines === Infinity\n ? Number.POSITIVE_INFINITY\n : nextStart + renderRange.totalLines;\n\n const overlapStart = Math.max(previousStart, nextStart);\n const overlapEnd = Math.min(previousEnd, nextEnd);\n if (overlapEnd <= overlapStart) {\n return false;\n }\n\n if (\n !this.trimDOMToOverlap(columns.gutter, overlapStart, overlapEnd) ||\n !this.trimDOMToOverlap(columns.content, overlapStart, overlapEnd)\n ) {\n return false;\n }\n\n let { length: rowCount } = columns.content.children;\n\n const renderChunk = (\n startingLine: number,\n totalLines: number\n ): FileRenderResult | undefined => {\n if (totalLines <= 0) {\n return undefined;\n }\n return this.fileRenderer.renderFile(file, {\n startingLine,\n totalLines,\n bufferBefore: 0,\n bufferAfter: 0,\n });\n };\n\n const prependResult =\n nextStart < overlapStart\n ? renderChunk(nextStart, overlapStart - nextStart)\n : undefined;\n if (prependResult === undefined && nextStart < overlapStart) {\n return false;\n }\n\n const appendTotalLines =\n nextEnd === Number.POSITIVE_INFINITY\n ? Number.POSITIVE_INFINITY\n : Math.max(0, nextEnd - overlapEnd);\n const appendResult =\n nextEnd > overlapEnd\n ? renderChunk(overlapEnd, appendTotalLines)\n : undefined;\n if (appendResult === undefined && nextEnd > overlapEnd) {\n return false;\n }\n\n this.cleanupErrorWrapper();\n if (prependResult != null) {\n columns.gutter.insertAdjacentHTML(\n 'afterbegin',\n this.fileRenderer.renderPartialHTML(prependResult.gutterAST)\n );\n columns.content.insertAdjacentHTML(\n 'afterbegin',\n this.fileRenderer.renderPartialHTML(prependResult.contentAST)\n );\n rowCount += prependResult.rowCount;\n }\n\n if (appendResult != null) {\n columns.gutter.insertAdjacentHTML(\n 'beforeend',\n this.fileRenderer.renderPartialHTML(appendResult.gutterAST)\n );\n columns.content.insertAdjacentHTML(\n 'beforeend',\n this.fileRenderer.renderPartialHTML(appendResult.contentAST)\n );\n rowCount += appendResult.rowCount;\n }\n\n if (this.lastRowCount !== rowCount) {\n columns.gutter.style.setProperty('grid-row', `span ${rowCount}`);\n columns.content.style.setProperty('grid-row', `span ${rowCount}`);\n this.lastRowCount = rowCount;\n }\n\n return true;\n }\n\n private getColumns(code: HTMLElement): ColumnElements | undefined {\n const gutter = code.children[0];\n const content = code.children[1];\n if (\n !(gutter instanceof HTMLElement) ||\n !(content instanceof HTMLElement) ||\n gutter.dataset.gutter == null ||\n content.dataset.content == null\n ) {\n return undefined;\n }\n return { gutter, content };\n }\n\n private trimDOMToOverlap(\n container: HTMLElement,\n overlapStart: number,\n overlapEnd: number\n ): boolean {\n const boundaryIndices = this.getDOMBoundaryIndices(container, [\n overlapStart,\n overlapEnd,\n ]);\n const startIndex =\n boundaryIndices.get(overlapStart) ?? container.children.length;\n const endIndex =\n boundaryIndices.get(overlapEnd) ?? container.children.length;\n\n if (startIndex > endIndex) {\n return false;\n }\n\n for (let i = container.children.length - 1; i >= endIndex; i -= 1) {\n container.children[i]?.remove();\n }\n for (let i = startIndex - 1; i >= 0; i -= 1) {\n container.children[i]?.remove();\n }\n return true;\n }\n\n private getDOMBoundaryIndices(\n container: HTMLElement,\n boundaries: number[]\n ): Map<number, number> {\n const sortedBoundaries = [...new Set(boundaries)].sort((a, b) => a - b);\n const boundaryIndices = new Map<number, number>();\n if (sortedBoundaries.length === 0) {\n return boundaryIndices;\n }\n let boundaryIndex = 0;\n let nextBoundary = sortedBoundaries[boundaryIndex];\n const { children } = container;\n\n if (nextBoundary === 0) {\n boundaryIndices.set(0, 0);\n boundaryIndex += 1;\n nextBoundary = sortedBoundaries[boundaryIndex];\n }\n\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i];\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n const lineIndex = this.getLineIndexFromDOMNode(child);\n if (lineIndex == null) {\n continue;\n }\n while (nextBoundary != null && lineIndex >= nextBoundary) {\n boundaryIndices.set(nextBoundary, i);\n boundaryIndex += 1;\n nextBoundary = sortedBoundaries[boundaryIndex];\n }\n if (boundaryIndex >= sortedBoundaries.length) {\n break;\n }\n }\n\n for (const boundary of sortedBoundaries) {\n if (!boundaryIndices.has(boundary)) {\n boundaryIndices.set(boundary, children.length);\n }\n }\n return boundaryIndices;\n }\n\n private getLineIndexFromDOMNode(node: HTMLElement): number | undefined {\n const lineIndexAttr = node.dataset.lineIndex;\n if (lineIndexAttr == null) {\n return undefined;\n }\n const parsed = Number(lineIndexAttr);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n private applyBuffers(\n pre: HTMLPreElement,\n renderRange: RenderRange | undefined\n ) {\n if (renderRange == null || this.shouldDisableVirtualizationBuffers()) {\n if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n return;\n }\n\n if (renderRange.bufferBefore > 0) {\n if (this.bufferBefore == null) {\n this.bufferBefore = document.createElement('div');\n this.bufferBefore.dataset.virtualizerBuffer = 'before';\n pre.before(this.bufferBefore);\n }\n this.bufferBefore.style.setProperty(\n 'height',\n `${renderRange.bufferBefore}px`\n );\n this.bufferBefore.style.setProperty('contain', 'strict');\n } else if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n\n if (renderRange.bufferAfter > 0) {\n if (this.bufferAfter == null) {\n this.bufferAfter = document.createElement('div');\n this.bufferAfter.dataset.virtualizerBuffer = 'after';\n pre.after(this.bufferAfter);\n }\n this.bufferAfter.style.setProperty(\n 'height',\n `${renderRange.bufferAfter}px`\n );\n this.bufferAfter.style.setProperty('contain', 'strict');\n } else if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n }\n\n protected shouldDisableVirtualizationBuffers(): boolean {\n return this.options.disableVirtualizationBuffers ?? false;\n }\n\n private applyHeaderToDOM(\n headerAST: HASTElement,\n container: HTMLElement\n ): void {\n const { file } = this;\n if (file == null) return;\n this.cleanupErrorWrapper();\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n const headerHTML = this.cachedHeaderHTML ?? toHtml(headerAST);\n this.cachedHeaderHTML = headerHTML;\n if (headerHTML !== this.lastRenderedHeaderHTML) {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = headerHTML;\n const newHeader = tempDiv.firstElementChild;\n if (!(newHeader instanceof HTMLElement)) {\n return;\n }\n if (this.headerElement != null) {\n container.shadowRoot?.replaceChild(newHeader, this.headerElement);\n } else {\n container.shadowRoot?.prepend(newHeader);\n }\n this.headerElement = newHeader;\n this.lastRenderedHeaderHTML = headerHTML;\n }\n\n if (this.isContainerManaged) return;\n\n const { renderHeaderPrefix, renderCustomHeader, renderHeaderMetadata } =\n this.options;\n\n if (renderCustomHeader != null) {\n const content = renderCustomHeader(file) ?? undefined;\n this.headerCustom = this.upsertHeaderSlotElement(\n container,\n this.headerCustom,\n CUSTOM_HEADER_SLOT_ID,\n content\n );\n this.headerPrefix?.remove();\n this.headerMetadata?.remove();\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n } else {\n const prefix = renderHeaderPrefix?.(file) ?? undefined;\n const content = renderHeaderMetadata?.(file) ?? undefined;\n this.headerPrefix = this.upsertHeaderSlotElement(\n container,\n this.headerPrefix,\n HEADER_PREFIX_SLOT_ID,\n prefix\n );\n this.headerMetadata = this.upsertHeaderSlotElement(\n container,\n this.headerMetadata,\n HEADER_METADATA_SLOT_ID,\n content\n );\n this.headerCustom?.remove();\n this.headerCustom = undefined;\n }\n }\n\n private clearHeaderSlots(): void {\n this.headerPrefix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n }\n\n // Header slot callbacks are presence-based render hooks, not reactive views.\n private upsertHeaderSlotElement(\n container: HTMLElement,\n current: HTMLElement | undefined,\n slot: string,\n content: Element | string | number | undefined\n ): HTMLElement | undefined {\n if (content == null) {\n current?.remove();\n return undefined;\n }\n const element = current ?? this.createHeaderSlotElement(slot);\n if (current == null) {\n container.appendChild(element);\n }\n this.replaceHeaderSlotContent(element, content);\n return element;\n }\n\n private replaceHeaderSlotContent(\n element: HTMLElement,\n content: Element | string | number\n ): void {\n element.replaceChildren();\n if (content instanceof Element) {\n element.appendChild(content);\n } else {\n element.innerText = `${content}`;\n }\n }\n\n private createHeaderSlotElement(slot: string): HTMLElement {\n const element = document.createElement('div');\n element.slot = slot;\n return element;\n }\n\n protected getOrCreateFileContainerNode(\n fileContainer?: HTMLElement,\n parentNode?: HTMLElement\n ): HTMLElement {\n const { fileContainer: previousContainer } = this;\n const nextContainer =\n fileContainer ??\n previousContainer ??\n document.createElement(DIFFS_TAG_NAME);\n const containerChanged = previousContainer !== nextContainer;\n if (containerChanged) {\n this.emitPostRender(true);\n }\n this.fileContainer = nextContainer;\n if (previousContainer != null && containerChanged) {\n this.lastRenderedHeaderHTML = undefined;\n this.headerElement = undefined;\n }\n if (parentNode != null && this.fileContainer.parentNode !== parentNode) {\n parentNode.appendChild(this.fileContainer);\n }\n if (containerChanged) {\n this.adoptReusableShellElements(this.fileContainer);\n }\n this.ensureSpriteSVG(this.fileContainer);\n return this.fileContainer;\n }\n\n // NOTE(amadeus): Technically this method is not safe for use outside of\n // the CodeView component, however I don't think in practice it really\n // should matter, but maybe there's some system we need in place to prevent\n // this from running outside of that environment?\n //\n // It's making very specific assumptions that all the elements will have the\n // correct content based on CodeView global options\n private adoptReusableShellElements(fileContainer: HTMLElement): void {\n const { shadowRoot } = fileContainer;\n if (shadowRoot == null) {\n return;\n }\n\n for (const element of shadowRoot.children) {\n if (element instanceof SVGElement) {\n this.spriteSVG ??= element;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle ??= element;\n this.hasAdoptedThemeCSS = true;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle ??= element;\n this.appliedUnsafeCSS ??= this.options.unsafeCSS ?? undefined;\n }\n }\n }\n\n private ensureSpriteSVG(fileContainer: HTMLElement): void {\n const shadowRoot =\n fileContainer.shadowRoot ?? fileContainer.attachShadow({ mode: 'open' });\n if (this.spriteSVG == null) {\n const fragment = document.createElement('div');\n fragment.innerHTML = SVGSpriteSheet;\n const firstChild = fragment.firstChild;\n if (firstChild instanceof SVGElement) {\n this.spriteSVG = firstChild;\n }\n }\n if (this.spriteSVG != null && this.spriteSVG.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.spriteSVG);\n }\n }\n\n private getOrCreatePreNode(container: HTMLElement): HTMLPreElement {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n // If we haven't created a pre element yet, lets go ahead and do that\n if (this.pre == null) {\n this.pre = document.createElement('pre');\n this.appliedPreAttributes = undefined;\n this.code = undefined;\n shadowRoot.appendChild(this.pre);\n }\n // If we have a new parent container for the pre element, lets go ahead and\n // move it into the new container\n else if (this.pre.parentNode !== shadowRoot) {\n container.shadowRoot?.appendChild(this.pre);\n this.appliedPreAttributes = undefined;\n }\n\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n\n return this.pre;\n }\n\n private syncCodeNodeFromPre(pre: HTMLPreElement): void {\n this.code = undefined;\n for (const child of Array.from(pre.children)) {\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n if (child.hasAttribute('data-code')) {\n this.code = child;\n return;\n }\n }\n }\n\n private applyPreNodeAttributes(\n pre: HTMLPreElement,\n { totalLines }: FileRenderResult\n ): void {\n const { overflow = 'scroll', disableLineNumbers = false } = this.options;\n const preProperties: PrePropertiesConfig = {\n type: 'file',\n split: false,\n overflow,\n disableLineNumbers,\n diffIndicators: 'none',\n disableBackground: true,\n totalLines,\n };\n if (arePrePropertiesEqual(preProperties, this.appliedPreAttributes)) {\n return;\n }\n setPreNodeProperties(pre, preProperties);\n this.appliedPreAttributes = preProperties;\n }\n\n private applyErrorToDOM(error: Error, container: HTMLElement) {\n this.cleanupErrorWrapper();\n this.pre?.remove();\n this.pre = undefined;\n this.appliedPreAttributes = undefined;\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n this.errorWrapper ??= document.createElement('div');\n this.errorWrapper.dataset.errorWrapper = '';\n this.errorWrapper.textContent = '';\n shadowRoot.appendChild(this.errorWrapper);\n const errorMessage = document.createElement('div');\n errorMessage.dataset.errorMessage = '';\n errorMessage.innerText = error.message;\n this.errorWrapper.appendChild(errorMessage);\n const errorStack = document.createElement('pre');\n errorStack.dataset.errorStack = '';\n errorStack.innerText = error.stack ?? 'No Error Stack';\n this.errorWrapper.appendChild(errorStack);\n }\n\n private cleanupErrorWrapper() {\n this.errorWrapper?.remove();\n this.errorWrapper = undefined;\n }\n}\n\nfunction shouldRenderCode(\n pre: HTMLPreElement | undefined,\n file: FileContents | undefined,\n collapsed = false\n): boolean {\n return !collapsed && pre == null && file != null;\n}\n\nfunction shouldRenderHeader(\n headerElement: HTMLElement | undefined,\n file: FileContents | undefined,\n disableFileHeader: boolean = false\n): boolean {\n return headerElement == null && file != null && !disableFileHeader;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"File.js","names":[],"sources":["../../src/components/File.ts"],"sourcesContent":["import type { Element as HASTElement } from 'hast';\nimport { toHtml } from 'hast-util-to-html';\n\nimport {\n CUSTOM_HEADER_SLOT_ID,\n DEFAULT_THEMES,\n DEFAULT_TOKENIZE_MAX_LENGTH,\n DIFFS_TAG_NAME,\n EMPTY_RENDER_RANGE,\n HEADER_FILENAME_SUFFIX_SLOT_ID,\n HEADER_METADATA_SLOT_ID,\n HEADER_PREFIX_SLOT_ID,\n THEME_CSS_ATTRIBUTE,\n UNSAFE_CSS_ATTRIBUTE,\n} from '../constants';\nimport {\n type GetHoveredLineResult,\n InteractionManager,\n type InteractionManagerBaseOptions,\n pluckInteractionOptions,\n type SelectionWriteOptions,\n} from '../managers/InteractionManager';\nimport { ResizeManager } from '../managers/ResizeManager';\nimport { FileRenderer, type FileRenderResult } from '../renderers/FileRenderer';\nimport { SVGSpriteSheet } from '../sprite';\nimport type {\n AppliedThemeStyleCache,\n BaseCodeOptions,\n DiffsEditableComponent,\n DiffsEditor,\n DiffsTextDocument,\n FileContents,\n HighlightedToken,\n LineAnnotation,\n PostRenderPhase,\n PrePropertiesConfig,\n RenderFileMetadata,\n RenderRange,\n SelectedLineRange,\n ThemeTypes,\n} from '../types';\nimport { areFilesEqual } from '../utils/areFilesEqual';\nimport { areLineAnnotationsEqual } from '../utils/areLineAnnotationsEqual';\nimport { arePrePropertiesEqual } from '../utils/arePrePropertiesEqual';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { areThemesEqual } from '../utils/areThemesEqual';\nimport { createAnnotationWrapperNode } from '../utils/createAnnotationWrapperNode';\nimport { createGutterUtilityContentNode } from '../utils/createGutterUtilityContentNode';\nimport { createUnsafeCSSStyleNode } from '../utils/createUnsafeCSSStyleNode';\nimport {\n patchScrollbarGutterSize,\n wrapThemeCSS,\n wrapUnsafeCSS,\n} from '../utils/cssWrappers';\nimport { getFileRendererOptions } from '../utils/getFileRendererOptions';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\nimport { getOrCreateCodeNode } from '../utils/getOrCreateCodeNode';\nimport { upsertHostThemeStyle } from '../utils/hostTheme';\nimport { isFilePlainText } from '../utils/isFilePlainText';\nimport { isStyleNode } from '../utils/isStyleNode';\nimport { prerenderHTMLIfNecessary } from '../utils/prerenderHTMLIfNecessary';\nimport { getMeasuredScrollbarGutter } from '../utils/scrollbarGutter';\nimport { setPreNodeProperties } from '../utils/setWrapperNodeProps';\nimport type { WorkerPoolManager } from '../worker';\nimport { DiffsContainerLoaded } from './web-components';\n\nconst EMPTY_STRINGS: string[] = [''];\n\nexport interface FileRenderProps<LAnnotation> {\n file: FileContents;\n fileContainer?: HTMLElement;\n containerWrapper?: HTMLElement;\n deferManagers?: boolean;\n forceRender?: boolean;\n preventEmit?: boolean;\n lineAnnotations?: LineAnnotation<LAnnotation>[];\n renderRange?: RenderRange;\n}\n\nexport interface FileHydrateProps<LAnnotation> extends Omit<\n FileRenderProps<LAnnotation>,\n 'fileContainer'\n> {\n fileContainer: HTMLElement;\n prerenderedHTML?: string;\n}\n\nexport interface FileOptions<LAnnotation>\n extends BaseCodeOptions, InteractionManagerBaseOptions<'file'> {\n disableFileHeader?: boolean;\n renderHeaderPrefix?: RenderFileMetadata;\n renderHeaderFilenameSuffix?: RenderFileMetadata;\n renderHeaderMetadata?: RenderFileMetadata;\n renderCustomHeader?: RenderFileMetadata;\n /**\n * When true, errors during rendering are rethrown instead of being caught\n * and displayed in the DOM. Useful for testing or when you want to handle\n * errors yourself.\n */\n disableErrorHandling?: boolean;\n renderAnnotation?(\n annotation: LineAnnotation<LAnnotation>\n ): HTMLElement | undefined;\n renderGutterUtility?(\n getHoveredRow: () => GetHoveredLineResult<'file'> | undefined\n ): HTMLElement | null | undefined;\n\n onPostRender?(\n node: HTMLElement,\n instance: File<LAnnotation>,\n phase: PostRenderPhase\n ): unknown;\n}\n\ninterface AnnotationElementCache<LAnnotation> {\n element: HTMLElement;\n annotation: LineAnnotation<LAnnotation>;\n}\n\ninterface ColumnElements {\n gutter: HTMLElement;\n content: HTMLElement;\n}\n\ninterface HydrationSetup<LAnnotation> {\n file: FileContents;\n lineAnnotations: LineAnnotation<LAnnotation>[] | undefined;\n}\n\nlet instanceId = -1;\n\nexport class File<\n LAnnotation = undefined,\n> implements DiffsEditableComponent<LAnnotation> {\n static LoadedCustomComponent: boolean = DiffsContainerLoaded;\n\n readonly __id: string = `file:${++instanceId}`;\n readonly type = 'file';\n\n protected fileContainer: HTMLElement | undefined;\n protected spriteSVG: SVGElement | undefined;\n protected pre: HTMLPreElement | undefined;\n protected code: HTMLElement | undefined;\n protected bufferBefore: HTMLElement | undefined;\n protected bufferAfter: HTMLElement | undefined;\n protected themeCSSStyle: HTMLStyleElement | undefined;\n protected appliedThemeCSS: AppliedThemeStyleCache | undefined;\n protected hasAdoptedThemeCSS = false;\n protected unsafeCSSStyle: HTMLStyleElement | undefined;\n protected appliedUnsafeCSS: string | undefined;\n protected gutterUtilityContent: HTMLElement | undefined;\n protected errorWrapper: HTMLElement | undefined;\n protected placeHolder: HTMLElement | undefined;\n protected lastRenderedHeaderHTML: string | undefined;\n protected cachedHeaderHTML: string | undefined;\n protected appliedPreAttributes: PrePropertiesConfig | undefined;\n protected lastRowCount: number | undefined;\n private mounted = false;\n\n protected headerElement: HTMLElement | undefined;\n protected headerCustom: HTMLElement | undefined;\n protected headerPrefix: HTMLElement | undefined;\n protected headerFilenameSuffix: HTMLElement | undefined;\n protected headerMetadata: HTMLElement | undefined;\n\n protected fileRenderer: FileRenderer<LAnnotation>;\n protected resizeManager: ResizeManager;\n protected interactionManager: InteractionManager<'file'>;\n\n protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>> =\n new Map();\n protected lineAnnotations: LineAnnotation<LAnnotation>[] = [];\n protected managersDirty = false;\n\n public file: FileContents | undefined;\n protected renderRange: RenderRange | undefined;\n protected enabled = true;\n\n protected editor: DiffsEditor<LAnnotation> | undefined;\n\n constructor(\n public options: FileOptions<LAnnotation> = { theme: DEFAULT_THEMES },\n private workerManager?: WorkerPoolManager | undefined,\n private isContainerManaged = false\n ) {\n this.fileRenderer = new FileRenderer<LAnnotation>(\n options,\n this.handleHighlightRender,\n this.workerManager\n );\n this.resizeManager = new ResizeManager();\n this.interactionManager = new InteractionManager(\n 'file',\n pluckInteractionOptions(options)\n );\n this.workerManager?.subscribeToThemeChanges(this);\n }\n\n private handleHighlightRender = (): void => {\n this.rerender();\n };\n\n public rerender(): void {\n if (!this.enabled || this.file == null) return;\n this.render({\n file: this.file,\n forceRender: true,\n renderRange: this.renderRange,\n });\n }\n\n public onThemeChange(): void {\n this.fileRenderer.clearRenderCache();\n this.rerender();\n }\n\n public setOptions(options: FileOptions<LAnnotation> | undefined): void {\n if (options == null) return;\n this.options = options;\n this.cachedHeaderHTML = undefined;\n this.syncInteractionOptions();\n }\n\n protected syncInteractionOptions(): void {\n this.interactionManager.setOptions(pluckInteractionOptions(this.options));\n }\n\n private mergeOptions(options: Partial<FileOptions<LAnnotation>>): void {\n this.options = { ...this.options, ...options };\n }\n\n public setThemeType(themeType: ThemeTypes): void {\n if ((this.options.themeType ?? 'system') === themeType) {\n return;\n }\n this.mergeOptions({ themeType });\n this.applyCachedThemeState(themeType);\n }\n\n private applyCachedThemeState(themeType: ThemeTypes): boolean {\n if (\n typeof this.options.theme === 'string' ||\n this.fileContainer == null ||\n this.appliedThemeCSS == null\n ) {\n return false;\n }\n const effectiveThemeType = this.appliedThemeCSS.baseThemeType ?? themeType;\n if (this.appliedThemeCSS.themeType === effectiveThemeType) {\n return false;\n }\n this.applyThemeState(\n this.fileContainer,\n this.appliedThemeCSS.themeStyles,\n themeType,\n this.appliedThemeCSS.baseThemeType\n );\n return true;\n }\n\n private hasThemeChanged(): boolean {\n return (\n this.appliedThemeCSS != null &&\n !areThemesEqual(\n this.appliedThemeCSS.theme,\n this.options.theme ?? DEFAULT_THEMES\n )\n );\n }\n\n public getHoveredLine = (): GetHoveredLineResult<'file'> | undefined => {\n return this.interactionManager.getHoveredLine();\n };\n\n public setLineAnnotations(\n lineAnnotations: LineAnnotation<LAnnotation>[]\n ): void {\n this.lineAnnotations = lineAnnotations;\n }\n\n public setSelectedLines(\n range: SelectedLineRange | null,\n options?: SelectionWriteOptions\n ): void {\n this.interactionManager.setSelection(range, options);\n }\n\n public flushManagers(): void {\n if (!this.managersDirty || this.pre == null) {\n this.managersDirty = false;\n return;\n }\n\n const { overflow = 'scroll' } = this.options;\n this.interactionManager.setup(this.pre);\n this.resizeManager.setup(this.pre, overflow === 'wrap');\n this.managersDirty = false;\n }\n\n public cleanUp(recycle = false): void {\n this.emitPostRender(true);\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n this.managersDirty = false;\n this.workerManager?.unsubscribeToThemeChanges(this);\n this.renderRange = undefined;\n\n // Clean up the elements\n if (!this.isContainerManaged) {\n this.fileContainer?.remove();\n }\n this.fileContainer = undefined;\n this.mounted = false;\n if (!recycle) {\n this.lineAnnotations = [];\n }\n this.annotationCache.clear();\n this.pre = undefined;\n this.bufferBefore?.remove();\n this.bufferBefore = undefined;\n this.bufferAfter?.remove();\n this.bufferAfter = undefined;\n this.appliedPreAttributes = undefined;\n this.lastRowCount = undefined;\n this.headerElement = undefined;\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.lastRenderedHeaderHTML = undefined;\n if (!recycle) {\n this.cachedHeaderHTML = undefined;\n }\n this.errorWrapper = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n this.placeHolder = undefined;\n this.unsafeCSSStyle = undefined;\n\n if (recycle) {\n this.fileRenderer.recycle();\n } else {\n this.fileRenderer.cleanUp();\n this.workerManager = undefined;\n this.file = undefined;\n }\n\n this.enabled = false;\n\n // Clean up the editor\n this.editor?.cleanUp();\n this.editor = undefined;\n }\n\n public virtualizedSetup(): void {\n this.enabled = true;\n this.workerManager?.subscribeToThemeChanges(this);\n }\n\n public hydrate(props: FileHydrateProps<LAnnotation>): void {\n const {\n fileContainer,\n prerenderedHTML,\n preventEmit = false,\n file,\n lineAnnotations,\n } = props;\n this.hydrateElements(fileContainer, prerenderedHTML);\n if (\n shouldRenderCode(this.pre, file, this.options.collapsed) ||\n shouldRenderHeader(\n this.headerElement,\n file,\n this.options.disableFileHeader\n )\n ) {\n this.render({ ...props, preventEmit: true });\n }\n // Otherwise orchestrate our setup.\n else {\n this.hydrationSetup({ file, lineAnnotations });\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n }\n\n protected hydrateElements(\n fileContainer: HTMLElement,\n prerenderedHTML: string | undefined\n ): void {\n if (this.fileContainer !== fileContainer) {\n this.emitPostRender(true);\n }\n prerenderHTMLIfNecessary(fileContainer, prerenderedHTML);\n for (const element of Array.from(\n fileContainer.shadowRoot?.children ?? []\n )) {\n if (element instanceof SVGElement) {\n this.spriteSVG = element;\n continue;\n }\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element instanceof HTMLPreElement) {\n this.pre = element;\n this.appliedPreAttributes = undefined;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle = element;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle = element;\n this.appliedUnsafeCSS = element.textContent;\n continue;\n }\n if ('diffsHeader' in element.dataset) {\n this.headerElement = element;\n this.lastRenderedHeaderHTML = undefined;\n continue;\n }\n }\n if (this.pre != null) {\n this.syncCodeNodeFromPre(this.pre);\n this.pre.removeAttribute('data-dehydrated');\n }\n this.fileContainer = fileContainer;\n this.hydrateMeasuredScrollbar();\n }\n\n protected hydrationSetup({\n file,\n lineAnnotations,\n }: HydrationSetup<LAnnotation>): void {\n this.lineAnnotations = lineAnnotations ?? this.lineAnnotations;\n this.file = file;\n this.fileRenderer.setOptions(getFileRendererOptions(this.options));\n this.syncInteractionOptions();\n if (this.pre == null) {\n return;\n }\n this.fileRenderer.hydrate(file);\n this.renderAnnotations();\n this.renderGutterUtility();\n this.injectUnsafeCSS();\n this.managersDirty = true;\n this.flushManagers();\n }\n\n public getOrCreateLineCache(\n file: FileContents | undefined = this.file\n ): string[] {\n return file != null\n ? this.fileRenderer.getOrCreateLineCache(file)\n : EMPTY_STRINGS;\n }\n\n protected updateBuffers(renderRange: RenderRange): void {\n if (this.pre != null) {\n this.applyBuffers(this.pre, renderRange);\n }\n }\n\n private syncRenderViewToEditor(): void {\n const editor = this.editor;\n const fileContainer = this.fileContainer;\n const file = this.file;\n if (editor != null && fileContainer != null && file != null) {\n void this.fileRenderer.initializeHighlighter().then((highlighter) => {\n editor.__syncRenderView(\n highlighter,\n fileContainer,\n file,\n this.lineAnnotations,\n this.renderRange\n );\n });\n }\n }\n\n public attachEditor(editor: DiffsEditor<LAnnotation>): () => void {\n this.editor?.cleanUp();\n this.editor = editor;\n this.interactionManager.setEditorAttached(true);\n this.syncRenderViewToEditor();\n return () => {\n this.editor = undefined;\n this.interactionManager.setEditorAttached(false);\n };\n }\n\n // normally triggered by the editor when the document line count changes\n public applyDocumentChange(\n textDocument: DiffsTextDocument,\n newLineAnnotations?: LineAnnotation<LAnnotation>[]\n ): void {\n this.fileRenderer.applyDocumentChange(textDocument);\n if (\n newLineAnnotations != null &&\n newLineAnnotations !== this.lineAnnotations &&\n this.file != null\n ) {\n this.setLineAnnotations(newLineAnnotations);\n this.fileRenderer.setLineAnnotations(this.lineAnnotations);\n this.renderAnnotations();\n }\n }\n\n public updateRenderCache(\n dirtyLines: Map<number, Array<HighlightedToken>>,\n themeType: 'dark' | 'light'\n ): void {\n this.fileRenderer.updateRenderCache(dirtyLines, themeType);\n }\n\n public render({\n file,\n fileContainer,\n forceRender = false,\n preventEmit = false,\n containerWrapper,\n deferManagers = false,\n lineAnnotations,\n renderRange,\n }: FileRenderProps<LAnnotation>): boolean {\n if (!this.enabled) {\n throw new Error(\n 'File.render: attempting to call render after cleaned up'\n );\n }\n\n // postpone background tokenizing to next frame for avoiding UI freeze\n // during render\n this.editor?.__postponeBackgroundTokenizeToNextFrame();\n\n const { collapsed = false, themeType = 'system' } = this.options;\n const nextRenderRange = collapsed ? undefined : renderRange;\n const previousRenderRange = this.renderRange;\n const themeChanged = this.hasThemeChanged();\n const annotationsChanged =\n lineAnnotations != null &&\n (lineAnnotations.length > 0 || this.lineAnnotations.length > 0)\n ? lineAnnotations !== this.lineAnnotations\n : false;\n const didFileChange = !areFilesEqual(this.file, file);\n if (\n !collapsed &&\n !forceRender &&\n areRenderRangesEqual(nextRenderRange, this.renderRange) &&\n !didFileChange &&\n !annotationsChanged &&\n !themeChanged\n ) {\n return this.applyCachedThemeState(themeType);\n }\n\n this.renderRange = nextRenderRange;\n if (didFileChange) {\n this.cachedHeaderHTML = undefined;\n }\n this.file = file;\n this.fileRenderer.setOptions(getFileRendererOptions(this.options));\n this.syncInteractionOptions();\n if (lineAnnotations != null) {\n this.setLineAnnotations(lineAnnotations);\n }\n this.fileRenderer.setLineAnnotations(this.lineAnnotations);\n\n const { disableErrorHandling = false, disableFileHeader = false } =\n this.options;\n if (disableFileHeader) {\n // Remove existing header from DOM\n if (this.headerElement != null) {\n this.headerElement.remove();\n this.headerElement = undefined;\n this.lastRenderedHeaderHTML = undefined;\n }\n this.clearHeaderSlots();\n }\n\n fileContainer = this.getOrCreateFileContainerNode(\n fileContainer,\n containerWrapper\n );\n this.applyCachedThemeState(themeType);\n\n if (collapsed) {\n this.removeRenderedCode();\n this.clearAuxiliaryNodes();\n\n try {\n const fileResult = this.fileRenderer.renderFile(\n file,\n EMPTY_RENDER_RANGE\n );\n if (fileResult != null) {\n this.applyThemeState(\n fileContainer,\n fileResult.themeStyles,\n themeType,\n fileResult.baseThemeType\n );\n }\n if (fileResult?.headerAST != null) {\n this.applyHeaderToDOM(fileResult.headerAST, fileContainer);\n }\n this.injectUnsafeCSS();\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n try {\n const pre = this.getOrCreatePreNode(fileContainer);\n if (\n !this.canPartiallyRender(\n forceRender,\n annotationsChanged,\n didFileChange || themeChanged\n ) ||\n !this.applyPartialRender(previousRenderRange, nextRenderRange)\n ) {\n const fileResult = this.fileRenderer.renderFile(file, nextRenderRange);\n if (fileResult == null) {\n if (this.workerManager?.isInitialized() === false) {\n void this.workerManager.initialize().then(() => this.rerender());\n }\n return false;\n }\n this.applyThemeState(\n fileContainer,\n fileResult.themeStyles,\n themeType,\n fileResult.baseThemeType\n );\n if (fileResult.headerAST != null) {\n this.applyHeaderToDOM(fileResult.headerAST, fileContainer);\n }\n this.applyFullRender(fileResult, pre);\n }\n\n this.applyBuffers(pre, nextRenderRange);\n this.injectUnsafeCSS();\n this.managersDirty = true;\n if (!deferManagers) {\n this.flushManagers();\n }\n this.renderAnnotations();\n this.renderGutterUtility();\n if (this.editor != null) {\n this.syncRenderViewToEditor();\n }\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n private emitPostRender(unmount = false) {\n const {\n fileContainer,\n options: { onPostRender },\n } = this;\n\n if (unmount) {\n if (!this.mounted) {\n return;\n }\n this.mounted = false;\n if (fileContainer == null) {\n return;\n }\n onPostRender?.(fileContainer, this, 'unmount');\n return;\n }\n\n if (fileContainer == null) {\n return;\n }\n\n const phase: PostRenderPhase = this.mounted ? 'update' : 'mount';\n this.mounted = true;\n onPostRender?.(fileContainer, this, phase);\n }\n\n private removeRenderedCode(): void {\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n\n this.bufferBefore?.remove();\n this.bufferBefore = undefined;\n this.bufferAfter?.remove();\n this.bufferAfter = undefined;\n\n this.code?.remove();\n this.code = undefined;\n\n this.pre?.remove();\n this.pre = undefined;\n\n this.appliedPreAttributes = undefined;\n this.lastRowCount = undefined;\n }\n\n private clearAuxiliaryNodes(): void {\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n }\n\n private canPartiallyRender(\n forceRender: boolean,\n annotationsChanged: boolean,\n didContentChange: boolean\n ): boolean {\n if (forceRender || annotationsChanged || didContentChange) {\n return false;\n }\n return true;\n }\n\n public renderPlaceholder(height: number): boolean {\n if (this.fileContainer == null) {\n return false;\n }\n this.emitPostRender(true);\n this.cleanChildNodes();\n\n if (this.placeHolder == null) {\n const shadowRoot =\n this.fileContainer.shadowRoot ??\n this.fileContainer.attachShadow({ mode: 'open' });\n this.placeHolder = document.createElement('div');\n this.placeHolder.dataset.placeholder = '';\n shadowRoot.appendChild(this.placeHolder);\n }\n this.placeHolder.style.setProperty('height', `${height}px`);\n return true;\n }\n\n public primeHighlightCache(): void {\n const { file, workerManager } = this;\n if (\n file == null ||\n file.cacheKey == null ||\n workerManager == null ||\n isFilePlainText(file)\n ) {\n return;\n }\n const lines = this.fileRenderer.getOrCreateLineCache(file);\n if (\n lines.length >\n (this.options.tokenizeMaxLength ?? DEFAULT_TOKENIZE_MAX_LENGTH)\n ) {\n return;\n }\n workerManager.primeFileHighlightCache(file);\n }\n\n private cleanChildNodes() {\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n\n this.bufferAfter?.remove();\n this.bufferBefore?.remove();\n this.code?.remove();\n this.errorWrapper?.remove();\n this.headerElement?.remove();\n this.gutterUtilityContent?.remove();\n this.headerPrefix?.remove();\n this.headerFilenameSuffix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.pre?.remove();\n this.spriteSVG?.remove();\n this.themeCSSStyle?.remove();\n this.unsafeCSSStyle?.remove();\n\n this.bufferAfter = undefined;\n this.bufferBefore = undefined;\n this.code = undefined;\n this.errorWrapper = undefined;\n this.headerElement = undefined;\n this.gutterUtilityContent = undefined;\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.pre = undefined;\n this.spriteSVG = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n\n this.lastRenderedHeaderHTML = undefined;\n this.lastRowCount = undefined;\n\n this.mounted = false;\n }\n\n private renderAnnotations(): void {\n if (this.isContainerManaged || this.fileContainer == null) {\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n return;\n }\n const staleAnnotations = new Map(this.annotationCache);\n const { renderAnnotation } = this.options;\n if (renderAnnotation != null && this.lineAnnotations.length > 0) {\n for (const [index, annotation] of this.lineAnnotations.entries()) {\n const id = `${index}-${getLineAnnotationName(annotation)}`;\n let cache = this.annotationCache.get(id);\n if (\n cache == null ||\n !areLineAnnotationsEqual(annotation, cache.annotation)\n ) {\n cache?.element.remove();\n const content = renderAnnotation(annotation);\n // If we can't render anything, then we should not render anything\n // and clear the annotation cache if necessary.\n if (content == null) {\n continue;\n }\n cache = {\n element: createAnnotationWrapperNode(\n getLineAnnotationName(annotation)\n ),\n annotation,\n };\n cache.element.appendChild(content);\n this.fileContainer.appendChild(cache.element);\n this.annotationCache.set(id, cache);\n }\n staleAnnotations.delete(id);\n }\n }\n for (const [id, { element }] of staleAnnotations.entries()) {\n this.annotationCache.delete(id);\n element.remove();\n }\n }\n\n private renderGutterUtility() {\n const { renderGutterUtility } = this.options;\n if (this.fileContainer == null || renderGutterUtility == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const element = renderGutterUtility(this.interactionManager.getHoveredLine);\n if (element != null && this.gutterUtilityContent != null) {\n return;\n } else if (element == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const gutterUtilityContent = createGutterUtilityContentNode();\n gutterUtilityContent.appendChild(element);\n this.fileContainer.appendChild(gutterUtilityContent);\n this.gutterUtilityContent = gutterUtilityContent;\n }\n\n private injectUnsafeCSS(): void {\n const { unsafeCSS } = this.options;\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null) {\n return;\n }\n\n if (unsafeCSS == null || unsafeCSS === '') {\n if (this.unsafeCSSStyle != null) {\n this.unsafeCSSStyle.remove();\n this.unsafeCSSStyle = undefined;\n }\n this.appliedUnsafeCSS = undefined;\n return;\n }\n\n if (\n this.unsafeCSSStyle?.parentNode === shadowRoot &&\n this.appliedUnsafeCSS === unsafeCSS\n ) {\n return;\n }\n\n // Create or update the style element\n this.unsafeCSSStyle ??= createUnsafeCSSStyleNode();\n if (this.unsafeCSSStyle.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.unsafeCSSStyle);\n }\n // Wrap in @layer unsafe to match SSR behavior\n this.unsafeCSSStyle.textContent = wrapUnsafeCSS(unsafeCSS);\n this.appliedUnsafeCSS = unsafeCSS;\n }\n\n private applyThemeState(\n container: HTMLElement,\n themeStyles: string,\n themeType: ThemeTypes,\n baseThemeType?: 'light' | 'dark'\n ): void {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n const effectiveThemeType = baseThemeType ?? themeType;\n const currentTheme = this.options.theme ?? DEFAULT_THEMES;\n const theme =\n typeof currentTheme === 'string' ? currentTheme : { ...currentTheme };\n const scrollbarGutter = getMeasuredScrollbarGutter(shadowRoot);\n if (\n this.themeCSSStyle?.parentNode === shadowRoot &&\n this.appliedThemeCSS?.themeStyles === themeStyles &&\n this.appliedThemeCSS.themeType === effectiveThemeType &&\n this.appliedThemeCSS.scrollbarGutter === scrollbarGutter\n ) {\n this.appliedThemeCSS.theme = theme;\n return;\n }\n if (\n this.hasAdoptedThemeCSS &&\n this.themeCSSStyle?.parentNode === shadowRoot\n ) {\n this.hasAdoptedThemeCSS = false;\n this.appliedThemeCSS = {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n };\n return;\n }\n this.themeCSSStyle = upsertHostThemeStyle({\n shadowRoot,\n currentNode: this.themeCSSStyle,\n themeCSS: wrapThemeCSS(themeStyles, effectiveThemeType, scrollbarGutter),\n });\n this.appliedThemeCSS =\n this.themeCSSStyle != null\n ? {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n }\n : undefined;\n }\n\n private hydrateMeasuredScrollbar(): void {\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null || this.themeCSSStyle == null) {\n return;\n }\n this.themeCSSStyle.textContent = patchScrollbarGutterSize(\n this.themeCSSStyle.textContent ?? '',\n getMeasuredScrollbarGutter(shadowRoot)\n );\n }\n\n private applyFullRender(result: FileRenderResult, pre: HTMLPreElement): void {\n this.cleanupErrorWrapper();\n this.applyPreNodeAttributes(pre, result);\n this.code = getOrCreateCodeNode({ code: this.code });\n const codeAst = this.fileRenderer.renderCodeAST(result);\n if (this.code.childElementCount >= 2) {\n for (let i = 0; i < 2; i++) {\n const domEl = this.code.children[i] as HTMLElement;\n const astEl = codeAst[i] as HASTElement;\n domEl.innerHTML = toHtml(astEl.children);\n domEl.style.cssText = astEl.properties.style as string;\n }\n } else {\n this.code.innerHTML = toHtml(codeAst);\n }\n if (!pre.contains(this.code)) {\n pre.replaceChildren(this.code);\n }\n this.lastRowCount = result.rowCount;\n }\n\n private applyPartialRender(\n previousRenderRange: RenderRange | undefined,\n renderRange: RenderRange | undefined\n ): boolean {\n if (previousRenderRange == null || renderRange == null) {\n return false;\n }\n const { file, code } = this;\n const columns = code != null ? this.getColumns(code) : undefined;\n if (file == null || code == null || columns == null) {\n return false;\n }\n\n const previousStart = previousRenderRange.startingLine;\n const nextStart = renderRange.startingLine;\n const previousEnd =\n previousRenderRange.totalLines === Infinity\n ? Number.POSITIVE_INFINITY\n : previousStart + previousRenderRange.totalLines;\n const nextEnd =\n renderRange.totalLines === Infinity\n ? Number.POSITIVE_INFINITY\n : nextStart + renderRange.totalLines;\n\n const overlapStart = Math.max(previousStart, nextStart);\n const overlapEnd = Math.min(previousEnd, nextEnd);\n if (overlapEnd <= overlapStart) {\n return false;\n }\n\n if (\n !this.trimDOMToOverlap(columns.gutter, overlapStart, overlapEnd) ||\n !this.trimDOMToOverlap(columns.content, overlapStart, overlapEnd)\n ) {\n return false;\n }\n\n let { length: rowCount } = columns.content.children;\n\n const renderChunk = (\n startingLine: number,\n totalLines: number\n ): FileRenderResult | undefined => {\n if (totalLines <= 0) {\n return undefined;\n }\n return this.fileRenderer.renderFile(file, {\n startingLine,\n totalLines,\n bufferBefore: 0,\n bufferAfter: 0,\n });\n };\n\n const prependResult =\n nextStart < overlapStart\n ? renderChunk(nextStart, overlapStart - nextStart)\n : undefined;\n if (prependResult === undefined && nextStart < overlapStart) {\n return false;\n }\n\n const appendTotalLines =\n nextEnd === Number.POSITIVE_INFINITY\n ? Number.POSITIVE_INFINITY\n : Math.max(0, nextEnd - overlapEnd);\n const appendResult =\n nextEnd > overlapEnd\n ? renderChunk(overlapEnd, appendTotalLines)\n : undefined;\n if (appendResult === undefined && nextEnd > overlapEnd) {\n return false;\n }\n\n this.cleanupErrorWrapper();\n if (prependResult != null) {\n columns.gutter.insertAdjacentHTML(\n 'afterbegin',\n this.fileRenderer.renderPartialHTML(prependResult.gutterAST)\n );\n columns.content.insertAdjacentHTML(\n 'afterbegin',\n this.fileRenderer.renderPartialHTML(prependResult.contentAST)\n );\n rowCount += prependResult.rowCount;\n }\n\n if (appendResult != null) {\n columns.gutter.insertAdjacentHTML(\n 'beforeend',\n this.fileRenderer.renderPartialHTML(appendResult.gutterAST)\n );\n columns.content.insertAdjacentHTML(\n 'beforeend',\n this.fileRenderer.renderPartialHTML(appendResult.contentAST)\n );\n rowCount += appendResult.rowCount;\n }\n\n if (this.lastRowCount !== rowCount) {\n columns.gutter.style.setProperty('grid-row', `span ${rowCount}`);\n columns.content.style.setProperty('grid-row', `span ${rowCount}`);\n this.lastRowCount = rowCount;\n }\n\n return true;\n }\n\n private getColumns(code: HTMLElement): ColumnElements | undefined {\n const gutter = code.children[0];\n const content = code.children[1];\n if (\n !(gutter instanceof HTMLElement) ||\n !(content instanceof HTMLElement) ||\n gutter.dataset.gutter == null ||\n content.dataset.content == null\n ) {\n return undefined;\n }\n return { gutter, content };\n }\n\n private trimDOMToOverlap(\n container: HTMLElement,\n overlapStart: number,\n overlapEnd: number\n ): boolean {\n const boundaryIndices = this.getDOMBoundaryIndices(container, [\n overlapStart,\n overlapEnd,\n ]);\n const startIndex =\n boundaryIndices.get(overlapStart) ?? container.children.length;\n const endIndex =\n boundaryIndices.get(overlapEnd) ?? container.children.length;\n\n if (startIndex > endIndex) {\n return false;\n }\n\n for (let i = container.children.length - 1; i >= endIndex; i -= 1) {\n container.children[i]?.remove();\n }\n for (let i = startIndex - 1; i >= 0; i -= 1) {\n container.children[i]?.remove();\n }\n return true;\n }\n\n private getDOMBoundaryIndices(\n container: HTMLElement,\n boundaries: number[]\n ): Map<number, number> {\n const sortedBoundaries = [...new Set(boundaries)].sort((a, b) => a - b);\n const boundaryIndices = new Map<number, number>();\n if (sortedBoundaries.length === 0) {\n return boundaryIndices;\n }\n let boundaryIndex = 0;\n let nextBoundary = sortedBoundaries[boundaryIndex];\n const { children } = container;\n\n if (nextBoundary === 0) {\n boundaryIndices.set(0, 0);\n boundaryIndex += 1;\n nextBoundary = sortedBoundaries[boundaryIndex];\n }\n\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i];\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n const lineIndex = this.getLineIndexFromDOMNode(child);\n if (lineIndex == null) {\n continue;\n }\n while (nextBoundary != null && lineIndex >= nextBoundary) {\n boundaryIndices.set(nextBoundary, i);\n boundaryIndex += 1;\n nextBoundary = sortedBoundaries[boundaryIndex];\n }\n if (boundaryIndex >= sortedBoundaries.length) {\n break;\n }\n }\n\n for (const boundary of sortedBoundaries) {\n if (!boundaryIndices.has(boundary)) {\n boundaryIndices.set(boundary, children.length);\n }\n }\n return boundaryIndices;\n }\n\n private getLineIndexFromDOMNode(node: HTMLElement): number | undefined {\n const lineIndexAttr = node.dataset.lineIndex;\n if (lineIndexAttr == null) {\n return undefined;\n }\n const parsed = Number(lineIndexAttr);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n private applyBuffers(\n pre: HTMLPreElement,\n renderRange: RenderRange | undefined\n ) {\n if (renderRange == null || this.shouldDisableVirtualizationBuffers()) {\n if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n return;\n }\n\n if (renderRange.bufferBefore > 0) {\n if (this.bufferBefore == null) {\n this.bufferBefore = document.createElement('div');\n this.bufferBefore.dataset.virtualizerBuffer = 'before';\n pre.before(this.bufferBefore);\n }\n this.bufferBefore.style.setProperty(\n 'height',\n `${renderRange.bufferBefore}px`\n );\n this.bufferBefore.style.setProperty('contain', 'strict');\n } else if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n\n if (renderRange.bufferAfter > 0) {\n if (this.bufferAfter == null) {\n this.bufferAfter = document.createElement('div');\n this.bufferAfter.dataset.virtualizerBuffer = 'after';\n pre.after(this.bufferAfter);\n }\n this.bufferAfter.style.setProperty(\n 'height',\n `${renderRange.bufferAfter}px`\n );\n this.bufferAfter.style.setProperty('contain', 'strict');\n } else if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n }\n\n protected shouldDisableVirtualizationBuffers(): boolean {\n return this.options.disableVirtualizationBuffers ?? false;\n }\n\n private applyHeaderToDOM(\n headerAST: HASTElement,\n container: HTMLElement\n ): void {\n const { file } = this;\n if (file == null) return;\n this.cleanupErrorWrapper();\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n const headerHTML = this.cachedHeaderHTML ?? toHtml(headerAST);\n this.cachedHeaderHTML = headerHTML;\n if (headerHTML !== this.lastRenderedHeaderHTML) {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = headerHTML;\n const newHeader = tempDiv.firstElementChild;\n if (!(newHeader instanceof HTMLElement)) {\n return;\n }\n if (this.headerElement != null) {\n container.shadowRoot?.replaceChild(newHeader, this.headerElement);\n } else {\n container.shadowRoot?.prepend(newHeader);\n }\n this.headerElement = newHeader;\n this.lastRenderedHeaderHTML = headerHTML;\n }\n\n if (this.isContainerManaged) return;\n\n const {\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderCustomHeader,\n renderHeaderMetadata,\n } = this.options;\n\n if (renderCustomHeader != null) {\n const content = renderCustomHeader(file) ?? undefined;\n this.headerCustom = this.upsertHeaderSlotElement(\n container,\n this.headerCustom,\n CUSTOM_HEADER_SLOT_ID,\n content\n );\n this.headerPrefix?.remove();\n this.headerFilenameSuffix?.remove();\n this.headerMetadata?.remove();\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n } else {\n const prefix = renderHeaderPrefix?.(file) ?? undefined;\n const suffix = renderHeaderFilenameSuffix?.(file) ?? undefined;\n const content = renderHeaderMetadata?.(file) ?? undefined;\n this.headerPrefix = this.upsertHeaderSlotElement(\n container,\n this.headerPrefix,\n HEADER_PREFIX_SLOT_ID,\n prefix\n );\n this.headerFilenameSuffix = this.upsertHeaderSlotElement(\n container,\n this.headerFilenameSuffix,\n HEADER_FILENAME_SUFFIX_SLOT_ID,\n suffix\n );\n this.headerMetadata = this.upsertHeaderSlotElement(\n container,\n this.headerMetadata,\n HEADER_METADATA_SLOT_ID,\n content\n );\n this.headerCustom?.remove();\n this.headerCustom = undefined;\n }\n }\n\n private clearHeaderSlots(): void {\n this.headerPrefix?.remove();\n this.headerFilenameSuffix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n }\n\n // Header slot callbacks are presence-based render hooks, not reactive views.\n private upsertHeaderSlotElement(\n container: HTMLElement,\n current: HTMLElement | undefined,\n slot: string,\n content: Element | string | number | undefined\n ): HTMLElement | undefined {\n if (content == null) {\n current?.remove();\n return undefined;\n }\n const element = current ?? this.createHeaderSlotElement(slot);\n if (current == null) {\n container.appendChild(element);\n }\n this.replaceHeaderSlotContent(element, content);\n return element;\n }\n\n private replaceHeaderSlotContent(\n element: HTMLElement,\n content: Element | string | number\n ): void {\n element.replaceChildren();\n if (content instanceof Element) {\n element.appendChild(content);\n } else {\n element.innerText = `${content}`;\n }\n }\n\n private createHeaderSlotElement(slot: string): HTMLElement {\n const element = document.createElement('div');\n element.slot = slot;\n return element;\n }\n\n protected getOrCreateFileContainerNode(\n fileContainer?: HTMLElement,\n parentNode?: HTMLElement\n ): HTMLElement {\n const { fileContainer: previousContainer } = this;\n const nextContainer =\n fileContainer ??\n previousContainer ??\n document.createElement(DIFFS_TAG_NAME);\n const containerChanged = previousContainer !== nextContainer;\n if (containerChanged) {\n this.emitPostRender(true);\n }\n this.fileContainer = nextContainer;\n if (previousContainer != null && containerChanged) {\n this.lastRenderedHeaderHTML = undefined;\n this.headerElement = undefined;\n }\n if (parentNode != null && this.fileContainer.parentNode !== parentNode) {\n parentNode.appendChild(this.fileContainer);\n }\n if (containerChanged) {\n this.adoptReusableShellElements(this.fileContainer);\n }\n this.ensureSpriteSVG(this.fileContainer);\n return this.fileContainer;\n }\n\n // NOTE(amadeus): Technically this method is not safe for use outside of\n // the CodeView component, however I don't think in practice it really\n // should matter, but maybe there's some system we need in place to prevent\n // this from running outside of that environment?\n //\n // It's making very specific assumptions that all the elements will have the\n // correct content based on CodeView global options\n private adoptReusableShellElements(fileContainer: HTMLElement): void {\n const { shadowRoot } = fileContainer;\n if (shadowRoot == null) {\n return;\n }\n\n for (const element of shadowRoot.children) {\n if (element instanceof SVGElement) {\n this.spriteSVG ??= element;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle ??= element;\n this.hasAdoptedThemeCSS = true;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle ??= element;\n this.appliedUnsafeCSS ??= this.options.unsafeCSS ?? undefined;\n }\n }\n }\n\n private ensureSpriteSVG(fileContainer: HTMLElement): void {\n const shadowRoot =\n fileContainer.shadowRoot ?? fileContainer.attachShadow({ mode: 'open' });\n if (this.spriteSVG == null) {\n const fragment = document.createElement('div');\n fragment.innerHTML = SVGSpriteSheet;\n const firstChild = fragment.firstChild;\n if (firstChild instanceof SVGElement) {\n this.spriteSVG = firstChild;\n }\n }\n if (this.spriteSVG != null && this.spriteSVG.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.spriteSVG);\n }\n }\n\n private getOrCreatePreNode(container: HTMLElement): HTMLPreElement {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n // If we haven't created a pre element yet, lets go ahead and do that\n if (this.pre == null) {\n this.pre = document.createElement('pre');\n this.appliedPreAttributes = undefined;\n this.code = undefined;\n shadowRoot.appendChild(this.pre);\n }\n // If we have a new parent container for the pre element, lets go ahead and\n // move it into the new container\n else if (this.pre.parentNode !== shadowRoot) {\n container.shadowRoot?.appendChild(this.pre);\n this.appliedPreAttributes = undefined;\n }\n\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n\n return this.pre;\n }\n\n private syncCodeNodeFromPre(pre: HTMLPreElement): void {\n this.code = undefined;\n for (const child of Array.from(pre.children)) {\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n if (child.hasAttribute('data-code')) {\n this.code = child;\n return;\n }\n }\n }\n\n private applyPreNodeAttributes(\n pre: HTMLPreElement,\n { totalLines }: FileRenderResult\n ): void {\n const { overflow = 'scroll', disableLineNumbers = false } = this.options;\n const preProperties: PrePropertiesConfig = {\n type: 'file',\n split: false,\n overflow,\n disableLineNumbers,\n diffIndicators: 'none',\n disableBackground: true,\n totalLines,\n };\n if (arePrePropertiesEqual(preProperties, this.appliedPreAttributes)) {\n return;\n }\n setPreNodeProperties(pre, preProperties);\n this.appliedPreAttributes = preProperties;\n }\n\n private applyErrorToDOM(error: Error, container: HTMLElement) {\n this.cleanupErrorWrapper();\n this.pre?.remove();\n this.pre = undefined;\n this.appliedPreAttributes = undefined;\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n this.errorWrapper ??= document.createElement('div');\n this.errorWrapper.dataset.errorWrapper = '';\n this.errorWrapper.textContent = '';\n shadowRoot.appendChild(this.errorWrapper);\n const errorMessage = document.createElement('div');\n errorMessage.dataset.errorMessage = '';\n errorMessage.innerText = error.message;\n this.errorWrapper.appendChild(errorMessage);\n const errorStack = document.createElement('pre');\n errorStack.dataset.errorStack = '';\n errorStack.innerText = error.stack ?? 'No Error Stack';\n this.errorWrapper.appendChild(errorStack);\n }\n\n private cleanupErrorWrapper() {\n this.errorWrapper?.remove();\n this.errorWrapper = undefined;\n }\n}\n\nfunction shouldRenderCode(\n pre: HTMLPreElement | undefined,\n file: FileContents | undefined,\n collapsed = false\n): boolean {\n return !collapsed && pre == null && file != null;\n}\n\nfunction shouldRenderHeader(\n headerElement: HTMLElement | undefined,\n file: FileContents | undefined,\n disableFileHeader: boolean = false\n): boolean {\n return headerElement == null && file != null && !disableFileHeader;\n}\n"],"mappings":"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"}