@pierre/diffs 1.1.0-beta.1 → 1.1.0-beta.10

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 (305) hide show
  1. package/dist/components/AdvancedVirtualizedFileDiff.d.ts +40 -0
  2. package/dist/components/AdvancedVirtualizedFileDiff.d.ts.map +1 -0
  3. package/dist/components/AdvancedVirtualizedFileDiff.js +145 -0
  4. package/dist/components/AdvancedVirtualizedFileDiff.js.map +1 -0
  5. package/dist/components/AdvancedVirtualizer.d.ts +38 -0
  6. package/dist/components/AdvancedVirtualizer.d.ts.map +1 -0
  7. package/dist/components/AdvancedVirtualizer.js +201 -0
  8. package/dist/components/AdvancedVirtualizer.js.map +1 -0
  9. package/dist/components/File.d.ts +60 -29
  10. package/dist/components/File.d.ts.map +1 -1
  11. package/dist/components/File.js +226 -26
  12. package/dist/components/File.js.map +1 -1
  13. package/dist/components/FileDiff.d.ts +44 -12
  14. package/dist/components/FileDiff.d.ts.map +1 -1
  15. package/dist/components/FileDiff.js +510 -71
  16. package/dist/components/FileDiff.js.map +1 -1
  17. package/dist/components/FileStream.d.ts +5 -0
  18. package/dist/components/FileStream.d.ts.map +1 -1
  19. package/dist/components/FileStream.js +66 -8
  20. package/dist/components/FileStream.js.map +1 -1
  21. package/dist/components/VirtualizedFile.d.ts +33 -0
  22. package/dist/components/VirtualizedFile.d.ts.map +1 -0
  23. package/dist/components/VirtualizedFile.js +227 -0
  24. package/dist/components/VirtualizedFile.js.map +1 -0
  25. package/dist/components/VirtualizedFileDiff.d.ts +39 -0
  26. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -0
  27. package/dist/components/VirtualizedFileDiff.js +316 -0
  28. package/dist/components/VirtualizedFileDiff.js.map +1 -0
  29. package/dist/components/Virtualizer.d.ts +63 -0
  30. package/dist/components/Virtualizer.d.ts.map +1 -0
  31. package/dist/components/Virtualizer.js +369 -0
  32. package/dist/components/Virtualizer.js.map +1 -0
  33. package/dist/components/VirtulizerDevelopment.d.ts +14 -0
  34. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -0
  35. package/dist/components/web-components.d.ts +1 -1
  36. package/dist/components/web-components.d.ts.map +1 -1
  37. package/dist/constants.d.ts +6 -8
  38. package/dist/constants.d.ts.map +1 -1
  39. package/dist/constants.js +16 -7
  40. package/dist/constants.js.map +1 -1
  41. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  42. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  43. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  44. package/dist/highlighter/languages/constants.d.ts +3 -1
  45. package/dist/highlighter/languages/constants.d.ts.map +1 -1
  46. package/dist/highlighter/languages/constants.js +2 -1
  47. package/dist/highlighter/languages/constants.js.map +1 -1
  48. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  49. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
  50. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  51. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  52. package/dist/highlighter/languages/registerCustomLanguage.d.ts +19 -0
  53. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -0
  54. package/dist/highlighter/languages/registerCustomLanguage.js +21 -0
  55. package/dist/highlighter/languages/registerCustomLanguage.js.map +1 -0
  56. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
  57. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  58. package/dist/highlighter/languages/resolveLanguage.js +4 -3
  59. package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
  60. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  61. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  62. package/dist/highlighter/shared_highlighter.js.map +1 -1
  63. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  64. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  65. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  66. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  67. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  68. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  69. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  70. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  71. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  72. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  73. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  74. package/dist/index.d.ts +17 -12
  75. package/dist/index.js +14 -9
  76. package/dist/managers/LineSelectionManager.d.ts +14 -15
  77. package/dist/managers/LineSelectionManager.d.ts.map +1 -1
  78. package/dist/managers/LineSelectionManager.js +60 -71
  79. package/dist/managers/LineSelectionManager.js.map +1 -1
  80. package/dist/managers/MouseEventManager.d.ts +13 -6
  81. package/dist/managers/MouseEventManager.d.ts.map +1 -1
  82. package/dist/managers/MouseEventManager.js +161 -47
  83. package/dist/managers/MouseEventManager.js.map +1 -1
  84. package/dist/managers/ResizeManager.d.ts +6 -1
  85. package/dist/managers/ResizeManager.d.ts.map +1 -1
  86. package/dist/managers/ResizeManager.js +114 -64
  87. package/dist/managers/ResizeManager.js.map +1 -1
  88. package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  89. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  90. package/dist/react/File.d.ts +1 -0
  91. package/dist/react/File.d.ts.map +1 -1
  92. package/dist/react/File.js +2 -1
  93. package/dist/react/File.js.map +1 -1
  94. package/dist/react/FileDiff.d.ts +1 -0
  95. package/dist/react/FileDiff.d.ts.map +1 -1
  96. package/dist/react/FileDiff.js +2 -1
  97. package/dist/react/FileDiff.js.map +1 -1
  98. package/dist/react/MultiFileDiff.d.ts +1 -0
  99. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  100. package/dist/react/MultiFileDiff.js +2 -1
  101. package/dist/react/MultiFileDiff.js.map +1 -1
  102. package/dist/react/PatchDiff.d.ts +1 -0
  103. package/dist/react/PatchDiff.d.ts.map +1 -1
  104. package/dist/react/PatchDiff.js +3 -2
  105. package/dist/react/PatchDiff.js.map +1 -1
  106. package/dist/react/Virtualizer.d.ts +25 -0
  107. package/dist/react/Virtualizer.d.ts.map +1 -0
  108. package/dist/react/Virtualizer.js +38 -0
  109. package/dist/react/Virtualizer.js.map +1 -0
  110. package/dist/react/WorkerPoolContext.d.ts.map +1 -1
  111. package/dist/react/WorkerPoolContext.js +1 -1
  112. package/dist/react/WorkerPoolContext.js.map +1 -1
  113. package/dist/react/constants.d.ts.map +1 -1
  114. package/dist/react/index.d.ts +3 -2
  115. package/dist/react/index.js +2 -1
  116. package/dist/react/jsx.d.ts.map +1 -1
  117. package/dist/react/types.d.ts +5 -3
  118. package/dist/react/types.d.ts.map +1 -1
  119. package/dist/react/utils/renderDiffChildren.d.ts +5 -5
  120. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  121. package/dist/react/utils/renderFileChildren.d.ts +5 -5
  122. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  123. package/dist/react/utils/templateRender.d.ts.map +1 -1
  124. package/dist/react/utils/useFileDiffInstance.d.ts +5 -3
  125. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  126. package/dist/react/utils/useFileDiffInstance.js +6 -2
  127. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  128. package/dist/react/utils/useFileInstance.d.ts +5 -3
  129. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  130. package/dist/react/utils/useFileInstance.js +6 -2
  131. package/dist/react/utils/useFileInstance.js.map +1 -1
  132. package/dist/react/utils/useStableCallback.d.ts.map +1 -1
  133. package/dist/react/utils/useStableCallback.js.map +1 -1
  134. package/dist/renderers/DiffHunksRenderer.d.ts +15 -10
  135. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  136. package/dist/renderers/DiffHunksRenderer.js +249 -140
  137. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  138. package/dist/renderers/FileRenderer.d.ts +12 -5
  139. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  140. package/dist/renderers/FileRenderer.js +90 -31
  141. package/dist/renderers/FileRenderer.js.map +1 -1
  142. package/dist/shiki-stream/stream.d.ts +2 -2
  143. package/dist/shiki-stream/stream.d.ts.map +1 -1
  144. package/dist/shiki-stream/stream.js.map +1 -1
  145. package/dist/shiki-stream/tokenizer.d.ts +2 -2
  146. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  147. package/dist/shiki-stream/tokenizer.js.map +1 -1
  148. package/dist/shiki-stream/types.d.ts +18 -18
  149. package/dist/shiki-stream/types.d.ts.map +1 -1
  150. package/dist/sprite.d.ts +1 -1
  151. package/dist/sprite.d.ts.map +1 -1
  152. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  153. package/dist/ssr/FileDiffReact.js +1 -1
  154. package/dist/ssr/index.d.ts +2 -2
  155. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  156. package/dist/ssr/preloadFile.d.ts.map +1 -1
  157. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  158. package/dist/ssr/preloadPatchFile.js.map +1 -1
  159. package/dist/ssr/renderHTML.d.ts.map +1 -1
  160. package/dist/style.js +1 -1
  161. package/dist/style.js.map +1 -1
  162. package/dist/types.d.ts +198 -165
  163. package/dist/types.d.ts.map +1 -1
  164. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  165. package/dist/utils/areDiffLineAnnotationsEqual.js.map +1 -1
  166. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  167. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  168. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  169. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  170. package/dist/utils/areOptionsEqual.d.ts +1 -1
  171. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  172. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  173. package/dist/utils/arePrePropertiesEqual.js +1 -1
  174. package/dist/utils/arePrePropertiesEqual.js.map +1 -1
  175. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  176. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  177. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  178. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  179. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  180. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  181. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  182. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  183. package/dist/utils/createContentColumn.d.ts +7 -0
  184. package/dist/utils/createContentColumn.d.ts.map +1 -0
  185. package/dist/utils/createContentColumn.js +17 -0
  186. package/dist/utils/createContentColumn.js.map +1 -0
  187. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  188. package/dist/utils/createEmptyRowBuffer.js +2 -1
  189. package/dist/utils/createEmptyRowBuffer.js.map +1 -1
  190. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  191. package/dist/utils/createHoverContentNode.d.ts.map +1 -1
  192. package/dist/utils/createNoNewlineElement.d.ts +2 -1
  193. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  194. package/dist/utils/createNoNewlineElement.js +3 -6
  195. package/dist/utils/createNoNewlineElement.js.map +1 -1
  196. package/dist/utils/createPreElement.d.ts +2 -1
  197. package/dist/utils/createPreElement.d.ts.map +1 -1
  198. package/dist/utils/createPreElement.js +4 -3
  199. package/dist/utils/createPreElement.js.map +1 -1
  200. package/dist/utils/createRowNodes.d.ts.map +1 -1
  201. package/dist/utils/createSeparator.d.ts.map +1 -1
  202. package/dist/utils/createSeparator.js +2 -2
  203. package/dist/utils/createSeparator.js.map +1 -1
  204. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  205. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  206. package/dist/utils/createStyleElement.d.ts.map +1 -1
  207. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  208. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  209. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  210. package/dist/utils/cssWrappers.d.ts.map +1 -1
  211. package/dist/utils/diffAcceptRejectHunk.d.ts +1 -1
  212. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  213. package/dist/utils/formatCSSVariablePrefix.d.ts +1 -1
  214. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  215. package/dist/utils/getFiletypeFromFileName.d.ts +2 -1
  216. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  217. package/dist/utils/getFiletypeFromFileName.js +14 -4
  218. package/dist/utils/getFiletypeFromFileName.js.map +1 -1
  219. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  220. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  221. package/dist/utils/getHunkSeparatorSlotName.d.ts +3 -1
  222. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  223. package/dist/utils/getHunkSeparatorSlotName.js.map +1 -1
  224. package/dist/utils/getIconForType.d.ts +1 -1
  225. package/dist/utils/getIconForType.d.ts.map +1 -1
  226. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  227. package/dist/utils/getLineEndingType.d.ts +1 -1
  228. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  229. package/dist/utils/getLineNodes.d.ts.map +1 -1
  230. package/dist/utils/getOrCreateCodeNode.d.ts +4 -2
  231. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  232. package/dist/utils/getOrCreateCodeNode.js +9 -6
  233. package/dist/utils/getOrCreateCodeNode.js.map +1 -1
  234. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  235. package/dist/utils/getThemes.d.ts.map +1 -1
  236. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  237. package/dist/utils/hast_utils.d.ts +6 -3
  238. package/dist/utils/hast_utils.d.ts.map +1 -1
  239. package/dist/utils/hast_utils.js +28 -4
  240. package/dist/utils/hast_utils.js.map +1 -1
  241. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  242. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  243. package/dist/utils/iterateOverDiff.d.ts +28 -13
  244. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  245. package/dist/utils/iterateOverDiff.js +101 -60
  246. package/dist/utils/iterateOverDiff.js.map +1 -1
  247. package/dist/utils/iterateOverFile.d.ts +50 -0
  248. package/dist/utils/iterateOverFile.d.ts.map +1 -0
  249. package/dist/utils/iterateOverFile.js +49 -0
  250. package/dist/utils/iterateOverFile.js.map +1 -0
  251. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  252. package/dist/utils/parseDiffFromFile.d.ts +6 -6
  253. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  254. package/dist/utils/parseDiffFromFile.js +3 -2
  255. package/dist/utils/parseDiffFromFile.js.map +1 -1
  256. package/dist/utils/parseLineType.d.ts +1 -1
  257. package/dist/utils/parseLineType.d.ts.map +1 -1
  258. package/dist/utils/parsePatchFiles.d.ts +12 -10
  259. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  260. package/dist/utils/parsePatchFiles.js +20 -11
  261. package/dist/utils/parsePatchFiles.js.map +1 -1
  262. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  263. package/dist/utils/processLine.d.ts.map +1 -1
  264. package/dist/utils/processLine.js +7 -24
  265. package/dist/utils/processLine.js.map +1 -1
  266. package/dist/utils/renderDiffWithHighlighter.d.ts +4 -3
  267. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  268. package/dist/utils/renderDiffWithHighlighter.js +18 -16
  269. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  270. package/dist/utils/renderFileWithHighlighter.d.ts +7 -2
  271. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  272. package/dist/utils/renderFileWithHighlighter.js +30 -4
  273. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  274. package/dist/utils/resolveVirtualFileMetrics.d.ts +7 -0
  275. package/dist/utils/resolveVirtualFileMetrics.d.ts.map +1 -0
  276. package/dist/utils/resolveVirtualFileMetrics.js +25 -0
  277. package/dist/utils/resolveVirtualFileMetrics.js.map +1 -0
  278. package/dist/utils/setLanguageOverride.d.ts +2 -1
  279. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  280. package/dist/utils/setLanguageOverride.js.map +1 -1
  281. package/dist/utils/setWrapperNodeProps.d.ts +1 -0
  282. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  283. package/dist/utils/setWrapperNodeProps.js +19 -12
  284. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  285. package/dist/utils/splitFileContents.d.ts +12 -0
  286. package/dist/utils/splitFileContents.d.ts.map +1 -0
  287. package/dist/utils/splitFileContents.js +17 -0
  288. package/dist/utils/splitFileContents.js.map +1 -0
  289. package/dist/utils/trimPatchContext.d.ts +11 -0
  290. package/dist/utils/trimPatchContext.d.ts.map +1 -0
  291. package/dist/utils/trimPatchContext.js +99 -0
  292. package/dist/utils/trimPatchContext.js.map +1 -0
  293. package/dist/worker/WorkerPoolManager.d.ts +3 -3
  294. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  295. package/dist/worker/WorkerPoolManager.js +39 -26
  296. package/dist/worker/WorkerPoolManager.js.map +1 -1
  297. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  298. package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
  299. package/dist/worker/types.d.ts +26 -26
  300. package/dist/worker/types.d.ts.map +1 -1
  301. package/dist/worker/worker-portable.js +352 -154
  302. package/dist/worker/worker-portable.js.map +1 -1
  303. package/dist/worker/worker.js +222 -113
  304. package/dist/worker/worker.js.map +1 -1
  305. package/package.json +52 -53
@@ -11672,7 +11672,7 @@ const SPLIT_WITH_NEWLINES = /(?<=\n)/;
11672
11672
  const FILENAME_HEADER_REGEX = /^(---|\+\+\+)\s+([^\t\r\n]+)/;
11673
11673
  const FILENAME_HEADER_REGEX_GIT = /^(---|\+\+\+)\s+[ab]\/([^\t\r\n]+)/;
11674
11674
  const ALTERNATE_FILE_NAMES_GIT = /^diff --git (?:"a\/(.+?)"|a\/(.+?)) (?:"b\/(.+?)"|b\/(.+?))$/;
11675
- const FILE_MODE_FROM_INDEX = /^index (?:[0-9a-f]+)\.\.(?:[0-9a-f]+)(?: (\d+))?/;
11675
+ const INDEX_LINE_METADATA = /^index ([0-9a-f]+)\.\.([0-9a-f]+)(?: (\d+))?$/i;
11676
11676
  const HEADER_METADATA_SLOT_ID = "header-metadata";
11677
11677
  const DEFAULT_THEMES = {
11678
11678
  dark: "pierre-dark",
@@ -11680,20 +11680,30 @@ const DEFAULT_THEMES = {
11680
11680
  };
11681
11681
  const UNSAFE_CSS_ATTRIBUTE = "data-unsafe-css";
11682
11682
  const CORE_CSS_ATTRIBUTE = "data-core-css";
11683
- const LINE_HUNK_COUNT = 10;
11684
- const LINE_HEIGHT = 20;
11685
- const DIFF_HEADER_HEIGHT = 44;
11686
- const HUNK_SEPARATOR_HEIGHT = 32;
11687
- const FILE_GAP = 8;
11683
+ const DEFAULT_COLLAPSED_CONTEXT_THRESHOLD = 1;
11684
+ const DEFAULT_VIRTUAL_FILE_METRICS = {
11685
+ hunkLineCount: 50,
11686
+ lineHeight: 20,
11687
+ diffHeaderHeight: 44,
11688
+ hunkSeparatorHeight: 32,
11689
+ fileGap: 8
11690
+ };
11688
11691
  const DEFAULT_EXPANDED_REGION = Object.freeze({
11689
11692
  fromStart: 0,
11690
11693
  fromEnd: 0
11691
11694
  });
11695
+ const DEFAULT_RENDER_RANGE = {
11696
+ startingLine: 0,
11697
+ totalLines: Infinity,
11698
+ bufferBefore: 0,
11699
+ bufferAfter: 0
11700
+ };
11692
11701
 
11693
11702
  //#endregion
11694
11703
  //#region src/highlighter/languages/constants.ts
11695
11704
  const ResolvedLanguages = new Map();
11696
11705
  const ResolvingLanguages = new Map();
11706
+ const RegisteredCustomLanguages = new Map();
11697
11707
  const AttachedLanguages = new Set();
11698
11708
 
11699
11709
  //#endregion
@@ -11744,7 +11754,7 @@ function attachResolvedThemes(themes, highlighter$1) {
11744
11754
  }
11745
11755
 
11746
11756
  //#endregion
11747
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/base.js
11757
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/base.js
11748
11758
  var Diff = class {
11749
11759
  diff(oldStr, newStr, options = {}) {
11750
11760
  let callback;
@@ -11968,7 +11978,7 @@ var Diff = class {
11968
11978
  };
11969
11979
 
11970
11980
  //#endregion
11971
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/character.js
11981
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/character.js
11972
11982
  var CharacterDiff = class extends Diff {};
11973
11983
  const characterDiff = new CharacterDiff();
11974
11984
  function diffChars(oldStr, newStr, options) {
@@ -11976,7 +11986,7 @@ function diffChars(oldStr, newStr, options) {
11976
11986
  }
11977
11987
 
11978
11988
  //#endregion
11979
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/string.js
11989
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/util/string.js
11980
11990
  function longestCommonPrefix(str1, str2) {
11981
11991
  let i$2;
11982
11992
  for (i$2 = 0; i$2 < str1.length && i$2 < str2.length; i$2++) {
@@ -12085,8 +12095,8 @@ function leadingWs(string) {
12085
12095
  }
12086
12096
 
12087
12097
  //#endregion
12088
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/word.js
12089
- const extendedWordChars = "a-zA-Z0-9_\\u{C0}-\\u{FF}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}";
12098
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/word.js
12099
+ const extendedWordChars = "a-zA-Z0-9_\\u{AD}\\u{C0}-\\u{D6}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}";
12090
12100
  const tokenizeIncludingWhitespace = new RegExp(`[${extendedWordChars}]+|\\s+|[^${extendedWordChars}]`, "ug");
12091
12101
  var WordDiff = class extends Diff {
12092
12102
  equals(left, right, options) {
@@ -12103,7 +12113,15 @@ var WordDiff = class extends Diff {
12103
12113
  if (segmenter.resolvedOptions().granularity != "word") {
12104
12114
  throw new Error("The segmenter passed must have a granularity of \"word\"");
12105
12115
  }
12106
- parts = Array.from(segmenter.segment(value), (segment) => segment.segment);
12116
+ parts = [];
12117
+ for (const segmentObj of Array.from(segmenter.segment(value))) {
12118
+ const segment = segmentObj.segment;
12119
+ if (parts.length && /\s/.test(parts[parts.length - 1]) && /\s/.test(segment)) {
12120
+ parts[parts.length - 1] += segment;
12121
+ } else {
12122
+ parts.push(segment);
12123
+ }
12124
+ }
12107
12125
  } else {
12108
12126
  parts = value.match(tokenizeIncludingWhitespace) || [];
12109
12127
  }
@@ -12231,7 +12249,7 @@ function diffWordsWithSpace(oldStr, newStr, options) {
12231
12249
  }
12232
12250
 
12233
12251
  //#endregion
12234
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/params.js
12252
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/util/params.js
12235
12253
  function generateOptions(options, defaults) {
12236
12254
  if (typeof options === "function") {
12237
12255
  defaults.callback = options;
@@ -12247,7 +12265,7 @@ function generateOptions(options, defaults) {
12247
12265
  }
12248
12266
 
12249
12267
  //#endregion
12250
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/line.js
12268
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/line.js
12251
12269
  var LineDiff = class extends Diff {
12252
12270
  constructor() {
12253
12271
  super(...arguments);
@@ -12300,7 +12318,7 @@ function tokenize(value, options) {
12300
12318
  }
12301
12319
 
12302
12320
  //#endregion
12303
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/sentence.js
12321
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js
12304
12322
  function isSentenceEndPunct(char) {
12305
12323
  return char == "." || char == "!" || char == "?";
12306
12324
  }
@@ -12333,7 +12351,7 @@ function diffSentences(oldStr, newStr, options) {
12333
12351
  }
12334
12352
 
12335
12353
  //#endregion
12336
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/css.js
12354
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/css.js
12337
12355
  var CssDiff = class extends Diff {
12338
12356
  tokenize(value) {
12339
12357
  return value.split(/([{}:;,]|\s+)/);
@@ -12345,7 +12363,7 @@ function diffCss(oldStr, newStr, options) {
12345
12363
  }
12346
12364
 
12347
12365
  //#endregion
12348
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/json.js
12366
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/json.js
12349
12367
  var JsonDiff = class extends Diff {
12350
12368
  constructor() {
12351
12369
  super(...arguments);
@@ -12419,7 +12437,7 @@ function canonicalize(obj, stack, replacementStack, replacer, key$1) {
12419
12437
  }
12420
12438
 
12421
12439
  //#endregion
12422
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/array.js
12440
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/diff/array.js
12423
12441
  var ArrayDiff = class extends Diff {
12424
12442
  tokenize(value) {
12425
12443
  return value.slice();
@@ -12437,7 +12455,7 @@ function diffArrays(oldArr, newArr, options) {
12437
12455
  }
12438
12456
 
12439
12457
  //#endregion
12440
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/line-endings.js
12458
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/patch/line-endings.js
12441
12459
  function unixToWin(patch) {
12442
12460
  if (Array.isArray(patch)) {
12443
12461
  return patch.map((p$1) => unixToWin(p$1));
@@ -12477,7 +12495,7 @@ function isWin(patch) {
12477
12495
  }
12478
12496
 
12479
12497
  //#endregion
12480
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/parse.js
12498
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/patch/parse.js
12481
12499
  /**
12482
12500
  * Parses a patch into structured data, in the same structure returned by `structuredPatch`.
12483
12501
  *
@@ -12494,9 +12512,9 @@ function parsePatch(uniDiff) {
12494
12512
  if (/^(---|\+\+\+|@@)\s/.test(line)) {
12495
12513
  break;
12496
12514
  }
12497
- const header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line);
12498
- if (header) {
12499
- index.index = header[1];
12515
+ const headerMatch = /^(?:Index:|diff(?: -r \w+)+)\s+/.exec(line);
12516
+ if (headerMatch) {
12517
+ index.index = line.substring(headerMatch[0].length).trim();
12500
12518
  }
12501
12519
  i$2++;
12502
12520
  }
@@ -12517,14 +12535,14 @@ function parsePatch(uniDiff) {
12517
12535
  }
12518
12536
  }
12519
12537
  function parseFileHeader(index) {
12520
- const fileHeader = /^(---|\+\+\+)\s+(.*)\r?$/.exec(diffstr[i$2]);
12521
- if (fileHeader) {
12522
- const data = fileHeader[2].split(" ", 2), header = (data[1] || "").trim();
12538
+ const fileHeaderMatch = /^(---|\+\+\+)\s+/.exec(diffstr[i$2]);
12539
+ if (fileHeaderMatch) {
12540
+ const prefix = fileHeaderMatch[1], data = diffstr[i$2].substring(3).trim().split(" ", 2), header = (data[1] || "").trim();
12523
12541
  let fileName = data[0].replace(/\\\\/g, "\\");
12524
- if (/^".*"$/.test(fileName)) {
12542
+ if (fileName.startsWith("\"") && fileName.endsWith("\"")) {
12525
12543
  fileName = fileName.substr(1, fileName.length - 2);
12526
12544
  }
12527
- if (fileHeader[1] === "---") {
12545
+ if (prefix === "---") {
12528
12546
  index.oldFileName = fileName;
12529
12547
  index.oldHeader = header;
12530
12548
  } else {
@@ -12588,7 +12606,7 @@ function parsePatch(uniDiff) {
12588
12606
  }
12589
12607
 
12590
12608
  //#endregion
12591
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/distance-iterator.js
12609
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/util/distance-iterator.js
12592
12610
  function distance_iterator_default(start, minLine, maxLine) {
12593
12611
  let wantForward = true, backwardExhausted = false, forwardExhausted = false, localOffset = 1;
12594
12612
  return function iterator() {
@@ -12618,7 +12636,7 @@ function distance_iterator_default(start, minLine, maxLine) {
12618
12636
  }
12619
12637
 
12620
12638
  //#endregion
12621
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/apply.js
12639
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/patch/apply.js
12622
12640
  /**
12623
12641
  * attempts to apply a unified diff patch.
12624
12642
  *
@@ -12837,7 +12855,7 @@ function applyPatches(uniDiff, options) {
12837
12855
  }
12838
12856
 
12839
12857
  //#endregion
12840
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/reverse.js
12858
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/patch/reverse.js
12841
12859
  function reversePatch(structuredPatch$1) {
12842
12860
  if (Array.isArray(structuredPatch$1)) {
12843
12861
  return structuredPatch$1.map((patch) => reversePatch(patch)).reverse();
@@ -12868,7 +12886,22 @@ function reversePatch(structuredPatch$1) {
12868
12886
  }
12869
12887
 
12870
12888
  //#endregion
12871
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/create.js
12889
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/patch/create.js
12890
+ const INCLUDE_HEADERS = {
12891
+ includeIndex: true,
12892
+ includeUnderline: true,
12893
+ includeFileHeaders: true
12894
+ };
12895
+ const FILE_HEADERS_ONLY = {
12896
+ includeIndex: false,
12897
+ includeUnderline: false,
12898
+ includeFileHeaders: true
12899
+ };
12900
+ const OMIT_HEADERS = {
12901
+ includeIndex: false,
12902
+ includeUnderline: false,
12903
+ includeFileHeaders: false
12904
+ };
12872
12905
  function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
12873
12906
  let optionsObj;
12874
12907
  if (!options) {
@@ -12982,17 +13015,27 @@ function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, ne
12982
13015
  * creates a unified diff patch.
12983
13016
  * @param patch either a single structured patch object (as returned by `structuredPatch`) or an array of them (as returned by `parsePatch`)
12984
13017
  */
12985
- function formatPatch(patch) {
13018
+ function formatPatch(patch, headerOptions) {
13019
+ if (!headerOptions) {
13020
+ headerOptions = INCLUDE_HEADERS;
13021
+ }
12986
13022
  if (Array.isArray(patch)) {
12987
- return patch.map(formatPatch).join("\n");
13023
+ if (patch.length > 1 && !headerOptions.includeFileHeaders) {
13024
+ throw new Error("Cannot omit file headers on a multi-file patch. " + "(The result would be unparseable; how would a tool trying to apply " + "the patch know which changes are to which file?)");
13025
+ }
13026
+ return patch.map((p$1) => formatPatch(p$1, headerOptions)).join("\n");
12988
13027
  }
12989
13028
  const ret = [];
12990
- if (patch.oldFileName == patch.newFileName) {
13029
+ if (headerOptions.includeIndex && patch.oldFileName == patch.newFileName) {
12991
13030
  ret.push("Index: " + patch.oldFileName);
12992
13031
  }
12993
- ret.push("===================================================================");
12994
- ret.push("--- " + patch.oldFileName + (typeof patch.oldHeader === "undefined" ? "" : " " + patch.oldHeader));
12995
- ret.push("+++ " + patch.newFileName + (typeof patch.newHeader === "undefined" ? "" : " " + patch.newHeader));
13032
+ if (headerOptions.includeUnderline) {
13033
+ ret.push("===================================================================");
13034
+ }
13035
+ if (headerOptions.includeFileHeaders) {
13036
+ ret.push("--- " + patch.oldFileName + (typeof patch.oldHeader === "undefined" ? "" : " " + patch.oldHeader));
13037
+ ret.push("+++ " + patch.newFileName + (typeof patch.newHeader === "undefined" ? "" : " " + patch.newHeader));
13038
+ }
12996
13039
  for (let i$2 = 0; i$2 < patch.hunks.length; i$2++) {
12997
13040
  const hunk = patch.hunks[i$2];
12998
13041
  if (hunk.oldLines === 0) {
@@ -13017,14 +13060,14 @@ function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader
13017
13060
  if (!patchObj) {
13018
13061
  return;
13019
13062
  }
13020
- return formatPatch(patchObj);
13063
+ return formatPatch(patchObj, options === null || options === void 0 ? void 0 : options.headerOptions);
13021
13064
  } else {
13022
13065
  const { callback } = options;
13023
13066
  structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, Object.assign(Object.assign({}, options), { callback: (patchObj) => {
13024
13067
  if (!patchObj) {
13025
13068
  callback(undefined);
13026
13069
  } else {
13027
- callback(formatPatch(patchObj));
13070
+ callback(formatPatch(patchObj, options.headerOptions));
13028
13071
  }
13029
13072
  } }));
13030
13073
  }
@@ -13047,7 +13090,7 @@ function splitLines(text$1) {
13047
13090
  }
13048
13091
 
13049
13092
  //#endregion
13050
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/convert/dmp.js
13093
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/convert/dmp.js
13051
13094
  /**
13052
13095
  * converts a list of change objects to the format returned by Google's [diff-match-patch](https://github.com/google/diff-match-patch) library
13053
13096
  */
@@ -13069,7 +13112,7 @@ function convertChangesToDMP(changes) {
13069
13112
  }
13070
13113
 
13071
13114
  //#endregion
13072
- //#region ../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/convert/xml.js
13115
+ //#region ../../node_modules/.bun/diff@8.0.3/node_modules/diff/libesm/convert/xml.js
13073
13116
  /**
13074
13117
  * converts a list of change objects to a serialized XML format
13075
13118
  */
@@ -13822,12 +13865,36 @@ function findCodeElement(nodes) {
13822
13865
  }
13823
13866
  return undefined;
13824
13867
  }
13825
- function createBufferElement(type, height) {
13868
+ function createGutterWrapper(children) {
13869
+ return createHastElement({
13870
+ tagName: "div",
13871
+ properties: { "data-gutter": "" },
13872
+ children
13873
+ });
13874
+ }
13875
+ function createGutterItem(lineType, lineNumber, lineIndex) {
13826
13876
  return createHastElement({
13827
13877
  tagName: "div",
13828
13878
  properties: {
13829
- "data-virtualized-buffer": type,
13830
- style: `height: ${height}px`
13879
+ "data-line-type": lineType,
13880
+ "data-column-number": lineNumber,
13881
+ "data-line-index": lineIndex
13882
+ },
13883
+ children: lineNumber != null ? [createHastElement({
13884
+ tagName: "span",
13885
+ properties: { "data-line-number-content": "" },
13886
+ children: [createTextNodeElement(`${lineNumber}`)]
13887
+ })] : undefined
13888
+ });
13889
+ }
13890
+ function createGutterGap(type, bufferType, size) {
13891
+ return createHastElement({
13892
+ tagName: "div",
13893
+ properties: {
13894
+ "data-gutter-buffer": bufferType,
13895
+ "data-buffer-size": size,
13896
+ "data-line-type": bufferType === "annotation" ? undefined : type,
13897
+ style: bufferType === "annotation" ? `grid-row: span ${size};` : `grid-row: span ${size};min-height:calc(${size} * 1lh);`
13831
13898
  }
13832
13899
  });
13833
13900
  }
@@ -13845,33 +13912,15 @@ function processLine(node, line, state) {
13845
13912
  });
13846
13913
  throw new Error(errorMessage);
13847
13914
  }
13848
- node.tagName = "span";
13849
- node.properties["data-column-content"] = "";
13915
+ node.tagName = "div";
13916
+ node.properties["data-line"] = lineInfo.lineNumber;
13917
+ node.properties["data-alt-line"] = lineInfo.altLineNumber;
13918
+ node.properties["data-line-type"] = lineInfo.type;
13919
+ node.properties["data-line-index"] = lineInfo.lineIndex;
13850
13920
  if (node.children.length === 0) {
13851
13921
  node.children.push(createTextNodeElement("\n"));
13852
13922
  }
13853
- const children = [createHastElement({
13854
- tagName: "span",
13855
- children: [createHastElement({
13856
- tagName: "span",
13857
- children: [{
13858
- type: "text",
13859
- value: `${lineInfo.lineNumber}`
13860
- }],
13861
- properties: { "data-line-number-content": "" }
13862
- })],
13863
- properties: { "data-column-number": "" }
13864
- }), node];
13865
- return createHastElement({
13866
- tagName: "div",
13867
- children,
13868
- properties: {
13869
- "data-line": lineInfo.lineNumber,
13870
- "data-alt-line": lineInfo.altLineNumber,
13871
- "data-line-type": lineInfo.type,
13872
- "data-line-index": lineInfo.lineIndex
13873
- }
13874
- });
13923
+ return node;
13875
13924
  }
13876
13925
 
13877
13926
  //#endregion
@@ -13948,6 +13997,7 @@ function formatCSSVariablePrefix(type) {
13948
13997
 
13949
13998
  //#endregion
13950
13999
  //#region src/utils/getFiletypeFromFileName.ts
14000
+ const CUSTOM_EXTENSION_TO_FILE_FORMAT = new Map();
13951
14001
  const EXTENSION_TO_FILE_FORMAT = {
13952
14002
  "1c": "1c",
13953
14003
  abap: "abap",
@@ -14278,19 +14328,33 @@ const EXTENSION_TO_FILE_FORMAT = {
14278
14328
  sty: "tex"
14279
14329
  };
14280
14330
  function getFiletypeFromFileName(fileName) {
14331
+ if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(fileName)) {
14332
+ return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(fileName) ?? "text";
14333
+ }
14281
14334
  if (EXTENSION_TO_FILE_FORMAT[fileName] != null) {
14282
14335
  return EXTENSION_TO_FILE_FORMAT[fileName];
14283
14336
  }
14284
14337
  const compoundMatch = fileName.match(/\.([^/\\]+\.[^/\\]+)$/);
14285
- if (compoundMatch != null && EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] != null) {
14286
- return EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] ?? "text";
14338
+ if (compoundMatch != null) {
14339
+ if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(compoundMatch[1])) {
14340
+ return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(compoundMatch[1]) ?? "text";
14341
+ }
14342
+ if (EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] != null) {
14343
+ return EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] ?? "text";
14344
+ }
14345
+ }
14346
+ const simpleMatch = fileName.match(/\.([^.]+)$/)?.[1] ?? "";
14347
+ if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(simpleMatch)) {
14348
+ return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(simpleMatch) ?? "text";
14287
14349
  }
14288
- const simpleMatch = fileName.match(/\.([^.]+)$/);
14289
- return EXTENSION_TO_FILE_FORMAT[simpleMatch?.[1] ?? ""] ?? "text";
14350
+ return EXTENSION_TO_FILE_FORMAT[simpleMatch] ?? "text";
14290
14351
  }
14291
14352
  function extendFileFormatMap(map) {
14292
14353
  for (const key$1 in map) {
14293
- EXTENSION_TO_FILE_FORMAT[key$1] = map[key$1];
14354
+ const lang = map[key$1];
14355
+ if (lang != null) {
14356
+ CUSTOM_EXTENSION_TO_FILE_FORMAT.set(key$1, lang);
14357
+ }
14294
14358
  }
14295
14359
  }
14296
14360
 
@@ -14355,7 +14419,7 @@ function getLineNodes(nodes) {
14355
14419
 
14356
14420
  //#endregion
14357
14421
  //#region src/utils/iterateOverDiff.ts
14358
- function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infinity, expandedHunks, callback }) {
14422
+ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infinity, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD, callback }) {
14359
14423
  const state = {
14360
14424
  finalHunk: diff.hunks.at(-1),
14361
14425
  viewportStart: startingLine,
@@ -14436,7 +14500,7 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14436
14500
  if (state.shouldBreak()) {
14437
14501
  break;
14438
14502
  }
14439
- const leadingRegion = getExpandedRegion(diff.isPartial, hunk.collapsedBefore, expandedHunks, hunkIndex);
14503
+ const leadingRegion = getExpandedRegion(diff.isPartial, hunk.collapsedBefore, expandedHunks, hunkIndex, collapsedContextThreshold);
14440
14504
  const trailingRegion = (() => {
14441
14505
  if (hunk !== state.finalHunk || !hasFinalCollapsedHunk(diff)) {
14442
14506
  return undefined;
@@ -14447,7 +14511,7 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14447
14511
  throw new Error(`iterateOverDiff: trailing context mismatch (additions=${additionRemaining}, deletions=${deletionRemaining}) for ${diff.name}`);
14448
14512
  }
14449
14513
  const trailingRangeSize = Math.min(additionRemaining, deletionRemaining);
14450
- return getExpandedRegion(diff.isPartial, trailingRangeSize, expandedHunks, diff.hunks.length);
14514
+ return getExpandedRegion(diff.isPartial, trailingRangeSize, expandedHunks, diff.hunks.length, collapsedContextThreshold);
14451
14515
  })();
14452
14516
  const expandedLineCount = leadingRegion.fromStart + leadingRegion.fromEnd;
14453
14517
  function getTrailingCollapsedAfter(unifiedLineIndex$1, splitLineIndex$1) {
@@ -14482,16 +14546,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14482
14546
  hunk,
14483
14547
  collapsedBefore: 0,
14484
14548
  collapsedAfter: 0,
14485
- unifiedDeletionLineIndex: unifiedLineIndex$1 + index,
14486
- unifiedAdditionLineIndex: unifiedLineIndex$1 + index,
14487
- splitLineIndex: splitLineIndex$1 + index,
14488
- deletionLineIndex: deletionLineIndex$1 + index,
14489
- additionLineIndex: additionLineIndex$1 + index,
14490
- deletionLineNumber: deletionLineNumber$1 + index,
14491
- additionLineNumber: additionLineNumber$1 + index,
14492
14549
  type: "context-expanded",
14493
- noEOFCRAddition: false,
14494
- noEOFCRDeletion: false
14550
+ deletionLine: {
14551
+ lineNumber: deletionLineNumber$1 + index,
14552
+ lineIndex: deletionLineIndex$1 + index,
14553
+ noEOFCR: false,
14554
+ unifiedLineIndex: unifiedLineIndex$1 + index,
14555
+ splitLineIndex: splitLineIndex$1 + index
14556
+ },
14557
+ additionLine: {
14558
+ unifiedLineIndex: unifiedLineIndex$1 + index,
14559
+ splitLineIndex: splitLineIndex$1 + index,
14560
+ lineIndex: additionLineIndex$1 + index,
14561
+ lineNumber: additionLineNumber$1 + index,
14562
+ noEOFCR: false
14563
+ }
14495
14564
  })) {
14496
14565
  break hunkIterator;
14497
14566
  }
@@ -14514,16 +14583,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14514
14583
  hunk,
14515
14584
  collapsedBefore: getPendingCollapsed(),
14516
14585
  collapsedAfter: 0,
14517
- unifiedDeletionLineIndex: unifiedLineIndex$1 + index,
14518
- unifiedAdditionLineIndex: unifiedLineIndex$1 + index,
14519
- splitLineIndex: splitLineIndex$1 + index,
14520
- deletionLineIndex: deletionLineIndex$1 + index,
14521
- additionLineIndex: additionLineIndex$1 + index,
14522
- deletionLineNumber: deletionLineNumber$1 + index,
14523
- additionLineNumber: additionLineNumber$1 + index,
14524
14586
  type: "context-expanded",
14525
- noEOFCRAddition: false,
14526
- noEOFCRDeletion: false
14587
+ deletionLine: {
14588
+ lineNumber: deletionLineNumber$1 + index,
14589
+ lineIndex: deletionLineIndex$1 + index,
14590
+ noEOFCR: false,
14591
+ unifiedLineIndex: unifiedLineIndex$1 + index,
14592
+ splitLineIndex: splitLineIndex$1 + index
14593
+ },
14594
+ additionLine: {
14595
+ unifiedLineIndex: unifiedLineIndex$1 + index,
14596
+ splitLineIndex: splitLineIndex$1 + index,
14597
+ lineIndex: additionLineIndex$1 + index,
14598
+ lineNumber: additionLineNumber$1 + index,
14599
+ noEOFCR: false
14600
+ }
14527
14601
  })) {
14528
14602
  break hunkIterator;
14529
14603
  }
@@ -14561,16 +14635,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14561
14635
  hunk,
14562
14636
  collapsedBefore: getPendingCollapsed(),
14563
14637
  collapsedAfter: getTrailingCollapsedAfter(unifiedRowIndex, splitRowIndex),
14564
- unifiedDeletionLineIndex: unifiedRowIndex,
14565
- unifiedAdditionLineIndex: unifiedRowIndex,
14566
- splitLineIndex: splitRowIndex,
14567
- deletionLineIndex: deletionLineIndex + index,
14568
- additionLineIndex: additionLineIndex + index,
14569
- deletionLineNumber: deletionLineNumber + index,
14570
- additionLineNumber: additionLineNumber + index,
14571
14638
  type: "context",
14572
- noEOFCRAddition: isLastLine && hunk.noEOFCRAdditions,
14573
- noEOFCRDeletion: isLastLine && hunk.noEOFCRDeletions
14639
+ deletionLine: {
14640
+ lineNumber: deletionLineNumber + index,
14641
+ lineIndex: deletionLineIndex + index,
14642
+ noEOFCR: isLastLine && hunk.noEOFCRDeletions,
14643
+ unifiedLineIndex: unifiedRowIndex,
14644
+ splitLineIndex: splitRowIndex
14645
+ },
14646
+ additionLine: {
14647
+ unifiedLineIndex: unifiedRowIndex,
14648
+ splitLineIndex: splitRowIndex,
14649
+ lineIndex: additionLineIndex + index,
14650
+ lineNumber: additionLineNumber + index,
14651
+ noEOFCR: isLastLine && hunk.noEOFCRAdditions
14652
+ }
14574
14653
  })) {
14575
14654
  break hunkIterator;
14576
14655
  }
@@ -14648,16 +14727,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14648
14727
  hunk: undefined,
14649
14728
  collapsedBefore: 0,
14650
14729
  collapsedAfter: isLastLine ? collapsedLines : 0,
14651
- unifiedDeletionLineIndex: unifiedLineIndex + index,
14652
- unifiedAdditionLineIndex: unifiedLineIndex + index,
14653
- splitLineIndex: splitLineIndex + index,
14654
- additionLineIndex: additionLineIndex + index,
14655
- deletionLineIndex: deletionLineIndex + index,
14656
- additionLineNumber: additionLineNumber + index,
14657
- deletionLineNumber: deletionLineNumber + index,
14658
14730
  type: "context-expanded",
14659
- noEOFCRAddition: false,
14660
- noEOFCRDeletion: false
14731
+ deletionLine: {
14732
+ lineNumber: deletionLineNumber + index,
14733
+ lineIndex: deletionLineIndex + index,
14734
+ noEOFCR: false,
14735
+ unifiedLineIndex: unifiedLineIndex + index,
14736
+ splitLineIndex: splitLineIndex + index
14737
+ },
14738
+ additionLine: {
14739
+ unifiedLineIndex: unifiedLineIndex + index,
14740
+ splitLineIndex: splitLineIndex + index,
14741
+ lineIndex: additionLineIndex + index,
14742
+ lineNumber: additionLineNumber + index,
14743
+ noEOFCR: false
14744
+ }
14661
14745
  })) {
14662
14746
  break hunkIterator;
14663
14747
  }
@@ -14669,7 +14753,7 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14669
14753
  }
14670
14754
  }
14671
14755
  }
14672
- function getExpandedRegion(isPartial, rangeSize, expandedHunks, hunkIndex) {
14756
+ function getExpandedRegion(isPartial, rangeSize, expandedHunks, hunkIndex, collapsedContextThreshold) {
14673
14757
  rangeSize = Math.max(rangeSize, 0);
14674
14758
  if (rangeSize === 0 || isPartial) {
14675
14759
  return {
@@ -14679,7 +14763,7 @@ function getExpandedRegion(isPartial, rangeSize, expandedHunks, hunkIndex) {
14679
14763
  collapsedLines: Math.max(rangeSize, 0)
14680
14764
  };
14681
14765
  }
14682
- if (expandedHunks === true) {
14766
+ if (expandedHunks === true || rangeSize <= collapsedContextThreshold) {
14683
14767
  return {
14684
14768
  fromStart: rangeSize,
14685
14769
  fromEnd: 0,
@@ -14762,23 +14846,52 @@ function getChangeIterationRanges(state, content, diffStyle) {
14762
14846
  return merged;
14763
14847
  }
14764
14848
  function getChangeLineData({ hunkIndex, hunk, collapsedAfter, collapsedBefore, diffStyle, index, unifiedLineIndex, splitLineIndex, additionLineIndex, deletionLineIndex, additionLineNumber, deletionLineNumber, content, isLastContent, unifiedCount, splitCount }) {
14765
- if (diffStyle === "unified") {
14849
+ const unifiedDeletionLineIndex = index < content.deletions ? unifiedLineIndex + index : undefined;
14850
+ const unifiedAdditionLineIndex = diffStyle === "unified" ? index >= content.deletions ? unifiedLineIndex + index : undefined : index < content.additions ? unifiedLineIndex + content.deletions + index : undefined;
14851
+ const resolvedSplitLineIndex = diffStyle === "unified" ? splitLineIndex + (index < content.deletions ? index : index - content.deletions) : splitLineIndex + index;
14852
+ const deletionLineIndexValue = index < content.deletions ? deletionLineIndex + index : undefined;
14853
+ const deletionLineNumberValue = index < content.deletions ? deletionLineNumber + index : undefined;
14854
+ const additionLineIndexValue = diffStyle === "unified" ? index >= content.deletions ? additionLineIndex + (index - content.deletions) : undefined : index < content.additions ? additionLineIndex + index : undefined;
14855
+ const additionLineNumberValue = diffStyle === "unified" ? index >= content.deletions ? additionLineNumber + (index - content.deletions) : undefined : index < content.additions ? additionLineNumber + index : undefined;
14856
+ const noEOFCRDeletion = diffStyle === "unified" ? isLastContent && index === content.deletions - 1 && hunk.noEOFCRDeletions : isLastContent && index === splitCount - 1 && hunk.noEOFCRDeletions;
14857
+ const noEOFCRAddition = diffStyle === "unified" ? isLastContent && index === unifiedCount - 1 && hunk.noEOFCRAdditions : isLastContent && index === splitCount - 1 && hunk.noEOFCRAdditions;
14858
+ const deletionLine = deletionLineIndexValue != null && deletionLineNumberValue != null && unifiedDeletionLineIndex != null ? {
14859
+ lineNumber: deletionLineNumberValue,
14860
+ lineIndex: deletionLineIndexValue,
14861
+ noEOFCR: noEOFCRDeletion,
14862
+ unifiedLineIndex: unifiedDeletionLineIndex,
14863
+ splitLineIndex: resolvedSplitLineIndex
14864
+ } : undefined;
14865
+ const additionLine = additionLineIndexValue != null && additionLineNumberValue != null && unifiedAdditionLineIndex != null ? {
14866
+ unifiedLineIndex: unifiedAdditionLineIndex,
14867
+ splitLineIndex: resolvedSplitLineIndex,
14868
+ lineIndex: additionLineIndexValue,
14869
+ lineNumber: additionLineNumberValue,
14870
+ noEOFCR: noEOFCRAddition
14871
+ } : undefined;
14872
+ if (deletionLine == null && additionLine != null) {
14766
14873
  return {
14767
14874
  type: "change",
14768
14875
  hunkIndex,
14769
14876
  hunk,
14770
14877
  collapsedAfter,
14771
14878
  collapsedBefore,
14772
- unifiedDeletionLineIndex: index < content.deletions ? unifiedLineIndex + index : undefined,
14773
- unifiedAdditionLineIndex: index >= content.deletions ? unifiedLineIndex + index : undefined,
14774
- splitLineIndex: splitLineIndex + (index < content.deletions ? index : index - content.deletions),
14775
- additionLineIndex: index >= content.deletions ? additionLineIndex + (index - content.deletions) : undefined,
14776
- additionLineNumber: index >= content.deletions ? additionLineNumber + (index - content.deletions) : undefined,
14777
- deletionLineIndex: index < content.deletions ? deletionLineIndex + index : undefined,
14778
- deletionLineNumber: index < content.deletions ? deletionLineNumber + index : undefined,
14779
- noEOFCRDeletion: isLastContent && index === content.deletions - 1 && hunk.noEOFCRDeletions,
14780
- noEOFCRAddition: isLastContent && index === unifiedCount - 1 && hunk.noEOFCRAdditions
14879
+ deletionLine: undefined,
14880
+ additionLine
14781
14881
  };
14882
+ } else if (deletionLine != null && additionLine == null) {
14883
+ return {
14884
+ type: "change",
14885
+ hunkIndex,
14886
+ hunk,
14887
+ collapsedAfter,
14888
+ collapsedBefore,
14889
+ deletionLine,
14890
+ additionLine: undefined
14891
+ };
14892
+ }
14893
+ if (deletionLine == null || additionLine == null) {
14894
+ throw new Error("iterateOverDiff: missing change line data");
14782
14895
  }
14783
14896
  return {
14784
14897
  type: "change",
@@ -14786,15 +14899,8 @@ function getChangeLineData({ hunkIndex, hunk, collapsedAfter, collapsedBefore, d
14786
14899
  hunk,
14787
14900
  collapsedAfter,
14788
14901
  collapsedBefore,
14789
- unifiedDeletionLineIndex: index < content.deletions ? unifiedLineIndex + index : undefined,
14790
- unifiedAdditionLineIndex: index < content.additions ? unifiedLineIndex + content.deletions + index : undefined,
14791
- splitLineIndex: splitLineIndex + index,
14792
- additionLineIndex: index < content.additions ? additionLineIndex + index : undefined,
14793
- additionLineNumber: index < content.additions ? additionLineNumber + index : undefined,
14794
- deletionLineIndex: index < content.deletions ? deletionLineIndex + index : undefined,
14795
- deletionLineNumber: index < content.deletions ? deletionLineNumber + index : undefined,
14796
- noEOFCRDeletion: isLastContent && index === splitCount - 1 && hunk.noEOFCRDeletions,
14797
- noEOFCRAddition: isLastContent && index === splitCount - 1 && hunk.noEOFCRAdditions
14902
+ deletionLine,
14903
+ additionLine
14798
14904
  };
14799
14905
  }
14800
14906
 
@@ -14830,8 +14936,8 @@ function pushOrJoinSpan({ item, arr, enableJoin, isNeutral = false, isLastItem =
14830
14936
 
14831
14937
  //#endregion
14832
14938
  //#region src/utils/renderDiffWithHighlighter.ts
14833
- const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
14834
- function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainText, startingLine, totalLines, expandedHunks } = DEFAULT_PLAIN_TEXT_OPTIONS) {
14939
+ const DEFAULT_PLAIN_TEXT_OPTIONS$1 = { forcePlainText: false };
14940
+ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD } = DEFAULT_PLAIN_TEXT_OPTIONS$1) {
14835
14941
  if (forcePlainText) {
14836
14942
  startingLine ??= 0;
14837
14943
  totalLines ??= Infinity;
@@ -14886,12 +14992,14 @@ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainTex
14886
14992
  startingLine,
14887
14993
  totalLines,
14888
14994
  expandedHunks: isWindowedHighlight ? expandedHunksForIteration : true,
14889
- callback: ({ hunkIndex, additionLineIndex, deletionLineIndex, additionLineNumber, deletionLineNumber, unifiedAdditionLineIndex, unifiedDeletionLineIndex, splitLineIndex, type }) => {
14995
+ collapsedContextThreshold,
14996
+ callback: ({ hunkIndex, additionLine, deletionLine, type }) => {
14890
14997
  const bucket = getBucketForHunk(hunkIndex);
14891
- if (type === "change" && lineDiffType !== "none" && additionLineIndex != null && deletionLineIndex != null) {
14998
+ const splitLineIndex = additionLine != null ? additionLine.splitLineIndex : deletionLine.splitLineIndex;
14999
+ if (type === "change" && additionLine != null && deletionLine != null) {
14892
15000
  computeLineDiffDecorations({
14893
- additionLine: diff.additionLines[additionLineIndex],
14894
- deletionLine: diff.deletionLines[deletionLineIndex],
15001
+ additionLine: diff.additionLines[additionLine.lineIndex],
15002
+ deletionLine: diff.deletionLines[deletionLine.lineIndex],
14895
15003
  deletionLineIndex: bucket.deletionContent.length,
14896
15004
  additionLineIndex: bucket.additionContent.length,
14897
15005
  deletionDecorations: bucket.deletionDecorations,
@@ -14899,22 +15007,22 @@ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainTex
14899
15007
  lineDiffType
14900
15008
  });
14901
15009
  }
14902
- if (deletionLineIndex != null && deletionLineNumber != null && unifiedDeletionLineIndex != null) {
14903
- appendContent(diff.deletionLines[deletionLineIndex], deletionLineIndex, bucket.deletionSegments, bucket.deletionContent);
15010
+ if (deletionLine != null) {
15011
+ appendContent(diff.deletionLines[deletionLine.lineIndex], deletionLine.lineIndex, bucket.deletionSegments, bucket.deletionContent);
14904
15012
  bucket.deletionInfo.push({
14905
15013
  type: type === "change" ? "change-deletion" : type,
14906
- lineNumber: deletionLineNumber,
14907
- altLineNumber: type === "change" ? undefined : additionLineNumber ?? undefined,
14908
- lineIndex: `${unifiedDeletionLineIndex},${splitLineIndex}`
15014
+ lineNumber: deletionLine.lineNumber,
15015
+ altLineNumber: type === "change" ? undefined : additionLine.lineNumber ?? undefined,
15016
+ lineIndex: `${deletionLine.unifiedLineIndex},${splitLineIndex}`
14909
15017
  });
14910
15018
  }
14911
- if (additionLineIndex != null && additionLineNumber != null && unifiedAdditionLineIndex != null) {
14912
- appendContent(diff.additionLines[additionLineIndex], additionLineIndex, bucket.additionSegments, bucket.additionContent);
15019
+ if (additionLine != null) {
15020
+ appendContent(diff.additionLines[additionLine.lineIndex], additionLine.lineIndex, bucket.additionSegments, bucket.additionContent);
14913
15021
  bucket.additionInfo.push({
14914
15022
  type: type === "change" ? "change-addition" : type,
14915
- lineNumber: additionLineNumber,
14916
- altLineNumber: type === "change" ? undefined : deletionLineNumber ?? undefined,
14917
- lineIndex: `${unifiedAdditionLineIndex},${splitLineIndex}`
15023
+ lineNumber: additionLine.lineNumber,
15024
+ altLineNumber: type === "change" ? undefined : deletionLine.lineNumber ?? undefined,
15025
+ lineIndex: `${additionLine.unifiedLineIndex},${splitLineIndex}`
14918
15026
  });
14919
15027
  }
14920
15028
  }
@@ -15112,9 +15220,82 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
15112
15220
  };
15113
15221
  }
15114
15222
 
15223
+ //#endregion
15224
+ //#region src/utils/iterateOverFile.ts
15225
+ /**
15226
+ * Iterates over lines in a file with optional windowing support.
15227
+ *
15228
+ * Similar to `iterateOverDiff` but simplified for linear file content.
15229
+ * Supports viewport windowing for virtualization scenarios.
15230
+ *
15231
+ * @param props - Configuration for iteration
15232
+ * @param props.lines - Pre-split array of lines (use splitFileContents() to create from string)
15233
+ * @param props.startingLine - Optional starting line index (0-based, default: 0)
15234
+ * @param props.totalLines - Optional max lines to iterate (default: Infinity)
15235
+ * @param props.callback - Callback invoked for each line in the window.
15236
+ * Return `true` to stop iteration early.
15237
+ *
15238
+ * @example
15239
+ * ```typescript
15240
+ * const lines = splitFileContents('line1\nline2\nline3');
15241
+ * iterateOverFile({
15242
+ * lines,
15243
+ * startingLine: 0,
15244
+ * totalLines: 10,
15245
+ * callback: ({ lineIndex, lineNumber, content, isLastLine }) => {
15246
+ * console.log(`Line ${lineNumber}: ${content}`);
15247
+ * if (content.includes('stop')) return true; // Stop iteration
15248
+ * }
15249
+ * });
15250
+ * ```
15251
+ */
15252
+ function iterateOverFile({ lines, startingLine = 0, totalLines = Infinity, callback }) {
15253
+ const len = Math.min(startingLine + totalLines, lines.length);
15254
+ const lastLineIndex = (() => {
15255
+ const lastLine = lines.at(-1);
15256
+ if (lastLine === "" || lastLine === "\n" || lastLine === "\r\n" || lastLine === "\r") {
15257
+ return Math.max(0, lines.length - 2);
15258
+ }
15259
+ return lines.length - 1;
15260
+ })();
15261
+ for (let lineIndex = startingLine; lineIndex < len; lineIndex++) {
15262
+ const isLastLine = lineIndex === lastLineIndex;
15263
+ if (callback({
15264
+ lineIndex,
15265
+ lineNumber: lineIndex + 1,
15266
+ content: lines[lineIndex],
15267
+ isLastLine
15268
+ }) === true || isLastLine) {
15269
+ break;
15270
+ }
15271
+ }
15272
+ }
15273
+
15274
+ //#endregion
15275
+ //#region src/utils/splitFileContents.ts
15276
+ /**
15277
+ * Splits file contents into lines using the same logic as diff parsing.
15278
+ * - Preserves trailing newlines on each line
15279
+ *
15280
+ * @param contents - The raw file contents string
15281
+ * @returns Array of lines with newlines preserved
15282
+ */
15283
+ function splitFileContents(contents) {
15284
+ return contents !== "" ? contents.split(SPLIT_WITH_NEWLINES) : [];
15285
+ }
15286
+
15115
15287
  //#endregion
15116
15288
  //#region src/utils/renderFileWithHighlighter.ts
15117
- function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES, tokenizeMaxLineLength }, forcePlainText = false) {
15289
+ const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
15290
+ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES, tokenizeMaxLineLength }, { forcePlainText, startingLine, totalLines, lines } = DEFAULT_PLAIN_TEXT_OPTIONS) {
15291
+ if (forcePlainText) {
15292
+ startingLine ??= 0;
15293
+ totalLines ??= Infinity;
15294
+ } else {
15295
+ startingLine = 0;
15296
+ totalLines = Infinity;
15297
+ }
15298
+ const isWindowedHighlight = startingLine > 0 || totalLines < Infinity;
15118
15299
  const { state, transformers } = createTransformerWithState();
15119
15300
  const lang = forcePlainText ? "text" : file.lang ?? getFiletypeFromFileName(file.name);
15120
15301
  const baseThemeType = (() => {
@@ -15129,8 +15310,8 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
15129
15310
  });
15130
15311
  state.lineInfo = (shikiLineNumber) => ({
15131
15312
  type: "context",
15132
- lineIndex: shikiLineNumber - 1,
15133
- lineNumber: shikiLineNumber
15313
+ lineIndex: shikiLineNumber - 1 + startingLine,
15314
+ lineNumber: shikiLineNumber + startingLine
15134
15315
  });
15135
15316
  const hastConfig = (() => {
15136
15317
  if (typeof theme === "string") {
@@ -15152,12 +15333,29 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
15152
15333
  tokenizeMaxLineLength
15153
15334
  };
15154
15335
  })();
15336
+ const highlightedLines = getLineNodes(highlighter$1.codeToHast(isWindowedHighlight ? extractWindowedFileContent(lines ?? splitFileContents(file.contents), startingLine, totalLines) : cleanLastNewline(file.contents), hastConfig));
15337
+ const code = isWindowedHighlight ? new Array(startingLine) : highlightedLines;
15338
+ if (isWindowedHighlight) {
15339
+ code.push(...highlightedLines);
15340
+ }
15155
15341
  return {
15156
- code: getLineNodes(highlighter$1.codeToHast(cleanLastNewline(file.contents), hastConfig)),
15342
+ code,
15157
15343
  themeStyles,
15158
15344
  baseThemeType
15159
15345
  };
15160
15346
  }
15347
+ function extractWindowedFileContent(lines, startingLine, totalLines) {
15348
+ let windowContent = "";
15349
+ iterateOverFile({
15350
+ lines,
15351
+ startingLine,
15352
+ totalLines,
15353
+ callback({ content }) {
15354
+ windowContent += content;
15355
+ }
15356
+ });
15357
+ return windowContent;
15358
+ }
15161
15359
 
15162
15360
  //#endregion
15163
15361
  //#region src/worker/worker.ts