@pierre/diffs 1.1.0-beta.6 → 1.1.0-beta.8

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 (291) 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 +58 -33
  10. package/dist/components/File.d.ts.map +1 -1
  11. package/dist/components/File.js +223 -22
  12. package/dist/components/File.js.map +1 -1
  13. package/dist/components/FileDiff.d.ts +42 -16
  14. package/dist/components/FileDiff.d.ts.map +1 -1
  15. package/dist/components/FileDiff.js +505 -65
  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 +4 -7
  38. package/dist/constants.d.ts.map +1 -1
  39. package/dist/constants.js +14 -6
  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.map +1 -1
  45. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  46. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
  47. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  48. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  49. package/dist/highlighter/languages/registerCustomLanguage.d.ts +11 -4
  50. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  51. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
  52. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  53. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  54. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  55. package/dist/highlighter/shared_highlighter.js.map +1 -1
  56. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  57. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  58. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  59. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  60. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  61. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  62. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  63. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  64. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  65. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  66. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  67. package/dist/index.d.ts +13 -10
  68. package/dist/index.js +10 -7
  69. package/dist/managers/LineSelectionManager.d.ts +14 -15
  70. package/dist/managers/LineSelectionManager.d.ts.map +1 -1
  71. package/dist/managers/LineSelectionManager.js +60 -71
  72. package/dist/managers/LineSelectionManager.js.map +1 -1
  73. package/dist/managers/MouseEventManager.d.ts +13 -6
  74. package/dist/managers/MouseEventManager.d.ts.map +1 -1
  75. package/dist/managers/MouseEventManager.js +161 -47
  76. package/dist/managers/MouseEventManager.js.map +1 -1
  77. package/dist/managers/ResizeManager.d.ts +6 -1
  78. package/dist/managers/ResizeManager.d.ts.map +1 -1
  79. package/dist/managers/ResizeManager.js +114 -64
  80. package/dist/managers/ResizeManager.js.map +1 -1
  81. package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  82. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  83. package/dist/react/File.d.ts +1 -0
  84. package/dist/react/File.d.ts.map +1 -1
  85. package/dist/react/File.js +2 -1
  86. package/dist/react/File.js.map +1 -1
  87. package/dist/react/FileDiff.d.ts +1 -0
  88. package/dist/react/FileDiff.d.ts.map +1 -1
  89. package/dist/react/FileDiff.js +2 -1
  90. package/dist/react/FileDiff.js.map +1 -1
  91. package/dist/react/MultiFileDiff.d.ts +1 -0
  92. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  93. package/dist/react/MultiFileDiff.js +2 -1
  94. package/dist/react/MultiFileDiff.js.map +1 -1
  95. package/dist/react/PatchDiff.d.ts +1 -0
  96. package/dist/react/PatchDiff.d.ts.map +1 -1
  97. package/dist/react/PatchDiff.js +3 -2
  98. package/dist/react/PatchDiff.js.map +1 -1
  99. package/dist/react/Virtualizer.d.ts +25 -0
  100. package/dist/react/Virtualizer.d.ts.map +1 -0
  101. package/dist/react/Virtualizer.js +38 -0
  102. package/dist/react/Virtualizer.js.map +1 -0
  103. package/dist/react/WorkerPoolContext.d.ts.map +1 -1
  104. package/dist/react/WorkerPoolContext.js +1 -1
  105. package/dist/react/WorkerPoolContext.js.map +1 -1
  106. package/dist/react/constants.d.ts.map +1 -1
  107. package/dist/react/index.d.ts +3 -2
  108. package/dist/react/index.js +2 -1
  109. package/dist/react/jsx.d.ts.map +1 -1
  110. package/dist/react/types.d.ts +5 -3
  111. package/dist/react/types.d.ts.map +1 -1
  112. package/dist/react/utils/renderDiffChildren.d.ts +5 -5
  113. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  114. package/dist/react/utils/renderFileChildren.d.ts +5 -5
  115. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  116. package/dist/react/utils/templateRender.d.ts.map +1 -1
  117. package/dist/react/utils/useFileDiffInstance.d.ts +5 -3
  118. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  119. package/dist/react/utils/useFileDiffInstance.js +6 -2
  120. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  121. package/dist/react/utils/useFileInstance.d.ts +5 -3
  122. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  123. package/dist/react/utils/useFileInstance.js +6 -2
  124. package/dist/react/utils/useFileInstance.js.map +1 -1
  125. package/dist/react/utils/useStableCallback.d.ts.map +1 -1
  126. package/dist/react/utils/useStableCallback.js.map +1 -1
  127. package/dist/renderers/DiffHunksRenderer.d.ts +15 -10
  128. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  129. package/dist/renderers/DiffHunksRenderer.js +240 -136
  130. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  131. package/dist/renderers/FileRenderer.d.ts +12 -5
  132. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  133. package/dist/renderers/FileRenderer.js +90 -31
  134. package/dist/renderers/FileRenderer.js.map +1 -1
  135. package/dist/shiki-stream/stream.d.ts +2 -2
  136. package/dist/shiki-stream/stream.d.ts.map +1 -1
  137. package/dist/shiki-stream/stream.js.map +1 -1
  138. package/dist/shiki-stream/tokenizer.d.ts +2 -2
  139. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  140. package/dist/shiki-stream/tokenizer.js.map +1 -1
  141. package/dist/shiki-stream/types.d.ts +18 -18
  142. package/dist/shiki-stream/types.d.ts.map +1 -1
  143. package/dist/sprite.d.ts +1 -1
  144. package/dist/sprite.d.ts.map +1 -1
  145. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  146. package/dist/ssr/FileDiffReact.js +1 -1
  147. package/dist/ssr/index.d.ts +2 -2
  148. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  149. package/dist/ssr/preloadFile.d.ts.map +1 -1
  150. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  151. package/dist/ssr/preloadPatchFile.js.map +1 -1
  152. package/dist/ssr/renderHTML.d.ts.map +1 -1
  153. package/dist/style.js +1 -1
  154. package/dist/style.js.map +1 -1
  155. package/dist/types.d.ts +191 -172
  156. package/dist/types.d.ts.map +1 -1
  157. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  158. package/dist/utils/areDiffLineAnnotationsEqual.js.map +1 -1
  159. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  160. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  161. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  162. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  163. package/dist/utils/areOptionsEqual.d.ts +1 -1
  164. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  165. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  166. package/dist/utils/arePrePropertiesEqual.js +1 -1
  167. package/dist/utils/arePrePropertiesEqual.js.map +1 -1
  168. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  169. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  170. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  171. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  172. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  173. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  174. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  175. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  176. package/dist/utils/createContentColumn.d.ts +7 -0
  177. package/dist/utils/createContentColumn.d.ts.map +1 -0
  178. package/dist/utils/createContentColumn.js +17 -0
  179. package/dist/utils/createContentColumn.js.map +1 -0
  180. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  181. package/dist/utils/createEmptyRowBuffer.js +2 -1
  182. package/dist/utils/createEmptyRowBuffer.js.map +1 -1
  183. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  184. package/dist/utils/createHoverContentNode.d.ts.map +1 -1
  185. package/dist/utils/createNoNewlineElement.d.ts +2 -1
  186. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  187. package/dist/utils/createNoNewlineElement.js +3 -6
  188. package/dist/utils/createNoNewlineElement.js.map +1 -1
  189. package/dist/utils/createPreElement.d.ts +2 -1
  190. package/dist/utils/createPreElement.d.ts.map +1 -1
  191. package/dist/utils/createPreElement.js +4 -3
  192. package/dist/utils/createPreElement.js.map +1 -1
  193. package/dist/utils/createRowNodes.d.ts.map +1 -1
  194. package/dist/utils/createSeparator.d.ts.map +1 -1
  195. package/dist/utils/createSeparator.js +1 -1
  196. package/dist/utils/createSeparator.js.map +1 -1
  197. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  198. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  199. package/dist/utils/createStyleElement.d.ts.map +1 -1
  200. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  201. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  202. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  203. package/dist/utils/cssWrappers.d.ts.map +1 -1
  204. package/dist/utils/diffAcceptRejectHunk.d.ts +1 -1
  205. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  206. package/dist/utils/formatCSSVariablePrefix.d.ts +1 -1
  207. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  208. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  209. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  210. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  211. package/dist/utils/getHunkSeparatorSlotName.d.ts +3 -1
  212. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  213. package/dist/utils/getHunkSeparatorSlotName.js.map +1 -1
  214. package/dist/utils/getIconForType.d.ts +1 -1
  215. package/dist/utils/getIconForType.d.ts.map +1 -1
  216. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  217. package/dist/utils/getLineEndingType.d.ts +1 -1
  218. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  219. package/dist/utils/getLineNodes.d.ts.map +1 -1
  220. package/dist/utils/getOrCreateCodeNode.d.ts +4 -2
  221. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  222. package/dist/utils/getOrCreateCodeNode.js +9 -6
  223. package/dist/utils/getOrCreateCodeNode.js.map +1 -1
  224. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  225. package/dist/utils/getThemes.d.ts.map +1 -1
  226. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  227. package/dist/utils/hast_utils.d.ts +6 -3
  228. package/dist/utils/hast_utils.d.ts.map +1 -1
  229. package/dist/utils/hast_utils.js +28 -4
  230. package/dist/utils/hast_utils.js.map +1 -1
  231. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  232. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  233. package/dist/utils/iterateOverDiff.d.ts +26 -13
  234. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  235. package/dist/utils/iterateOverDiff.js +94 -55
  236. package/dist/utils/iterateOverDiff.js.map +1 -1
  237. package/dist/utils/iterateOverFile.d.ts +50 -0
  238. package/dist/utils/iterateOverFile.d.ts.map +1 -0
  239. package/dist/utils/iterateOverFile.js +49 -0
  240. package/dist/utils/iterateOverFile.js.map +1 -0
  241. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  242. package/dist/utils/parseDiffFromFile.d.ts +6 -6
  243. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  244. package/dist/utils/parseDiffFromFile.js +3 -2
  245. package/dist/utils/parseDiffFromFile.js.map +1 -1
  246. package/dist/utils/parseLineType.d.ts +1 -1
  247. package/dist/utils/parseLineType.d.ts.map +1 -1
  248. package/dist/utils/parsePatchFiles.d.ts +12 -10
  249. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  250. package/dist/utils/parsePatchFiles.js +16 -9
  251. package/dist/utils/parsePatchFiles.js.map +1 -1
  252. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  253. package/dist/utils/processLine.d.ts.map +1 -1
  254. package/dist/utils/processLine.js +7 -24
  255. package/dist/utils/processLine.js.map +1 -1
  256. package/dist/utils/renderDiffWithHighlighter.d.ts +2 -2
  257. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  258. package/dist/utils/renderDiffWithHighlighter.js +15 -14
  259. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  260. package/dist/utils/renderFileWithHighlighter.d.ts +7 -2
  261. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  262. package/dist/utils/renderFileWithHighlighter.js +30 -4
  263. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  264. package/dist/utils/resolveVirtualFileMetrics.d.ts +7 -0
  265. package/dist/utils/resolveVirtualFileMetrics.d.ts.map +1 -0
  266. package/dist/utils/resolveVirtualFileMetrics.js +24 -0
  267. package/dist/utils/resolveVirtualFileMetrics.js.map +1 -0
  268. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  269. package/dist/utils/setWrapperNodeProps.d.ts +1 -0
  270. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  271. package/dist/utils/setWrapperNodeProps.js +19 -12
  272. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  273. package/dist/utils/splitFileContents.d.ts +12 -0
  274. package/dist/utils/splitFileContents.d.ts.map +1 -0
  275. package/dist/utils/splitFileContents.js +17 -0
  276. package/dist/utils/splitFileContents.js.map +1 -0
  277. package/dist/utils/trimPatchContext.d.ts +5 -5
  278. package/dist/utils/trimPatchContext.d.ts.map +1 -1
  279. package/dist/worker/WorkerPoolManager.d.ts +2 -2
  280. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  281. package/dist/worker/WorkerPoolManager.js +36 -24
  282. package/dist/worker/WorkerPoolManager.js.map +1 -1
  283. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  284. package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
  285. package/dist/worker/types.d.ts +26 -26
  286. package/dist/worker/types.d.ts.map +1 -1
  287. package/dist/worker/worker-portable.js +323 -143
  288. package/dist/worker/worker-portable.js.map +1 -1
  289. package/dist/worker/worker.js +206 -106
  290. package/dist/worker/worker.js.map +1 -1
  291. package/package.json +52 -53
@@ -4,6 +4,7 @@ import { diffChars, diffWordsWithSpace } from "diff";
4
4
  import { transformerStyleToClass } from "@shikijs/transformers";
5
5
 
6
6
  //#region src/constants.ts
7
+ const SPLIT_WITH_NEWLINES = /(?<=\n)/;
7
8
  const DEFAULT_THEMES = {
8
9
  dark: "pierre-dark",
9
10
  light: "pierre-light"
@@ -74,14 +75,6 @@ function createTextNodeElement(value) {
74
75
  value
75
76
  };
76
77
  }
77
- function createHastElement({ tagName, children = [], properties = {} }) {
78
- return {
79
- type: "element",
80
- tagName,
81
- properties,
82
- children
83
- };
84
- }
85
78
  function findCodeElement(nodes) {
86
79
  let firstChild = nodes.children[0];
87
80
  while (firstChild != null) {
@@ -104,30 +97,13 @@ function processLine(node, line, state) {
104
97
  });
105
98
  throw new Error(errorMessage);
106
99
  }
107
- node.tagName = "span";
108
- node.properties["data-column-content"] = "";
100
+ node.tagName = "div";
101
+ node.properties["data-line"] = lineInfo.lineNumber;
102
+ node.properties["data-alt-line"] = lineInfo.altLineNumber;
103
+ node.properties["data-line-type"] = lineInfo.type;
104
+ node.properties["data-line-index"] = lineInfo.lineIndex;
109
105
  if (node.children.length === 0) node.children.push(createTextNodeElement("\n"));
110
- return createHastElement({
111
- tagName: "div",
112
- children: [createHastElement({
113
- tagName: "span",
114
- children: [createHastElement({
115
- tagName: "span",
116
- children: [{
117
- type: "text",
118
- value: `${lineInfo.lineNumber}`
119
- }],
120
- properties: { "data-line-number-content": "" }
121
- })],
122
- properties: { "data-column-number": "" }
123
- }), node],
124
- properties: {
125
- "data-line": lineInfo.lineNumber,
126
- "data-alt-line": lineInfo.altLineNumber,
127
- "data-line-type": lineInfo.type,
128
- "data-line-index": lineInfo.lineIndex
129
- }
130
- });
106
+ return node;
131
107
  }
132
108
 
133
109
  //#endregion
@@ -668,16 +644,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
668
644
  hunk,
669
645
  collapsedBefore: 0,
670
646
  collapsedAfter: 0,
671
- unifiedDeletionLineIndex: unifiedLineIndex$1 + index,
672
- unifiedAdditionLineIndex: unifiedLineIndex$1 + index,
673
- splitLineIndex: splitLineIndex$1 + index,
674
- deletionLineIndex: deletionLineIndex$1 + index,
675
- additionLineIndex: additionLineIndex$1 + index,
676
- deletionLineNumber: deletionLineNumber$1 + index,
677
- additionLineNumber: additionLineNumber$1 + index,
678
647
  type: "context-expanded",
679
- noEOFCRAddition: false,
680
- noEOFCRDeletion: false
648
+ deletionLine: {
649
+ lineNumber: deletionLineNumber$1 + index,
650
+ lineIndex: deletionLineIndex$1 + index,
651
+ noEOFCR: false,
652
+ unifiedLineIndex: unifiedLineIndex$1 + index,
653
+ splitLineIndex: splitLineIndex$1 + index
654
+ },
655
+ additionLine: {
656
+ unifiedLineIndex: unifiedLineIndex$1 + index,
657
+ splitLineIndex: splitLineIndex$1 + index,
658
+ lineIndex: additionLineIndex$1 + index,
659
+ lineNumber: additionLineNumber$1 + index,
660
+ noEOFCR: false
661
+ }
681
662
  })) break hunkIterator;
682
663
  } else state.incrementCounts(1, 1);
683
664
  index++;
@@ -696,16 +677,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
696
677
  hunk,
697
678
  collapsedBefore: getPendingCollapsed(),
698
679
  collapsedAfter: 0,
699
- unifiedDeletionLineIndex: unifiedLineIndex$1 + index,
700
- unifiedAdditionLineIndex: unifiedLineIndex$1 + index,
701
- splitLineIndex: splitLineIndex$1 + index,
702
- deletionLineIndex: deletionLineIndex$1 + index,
703
- additionLineIndex: additionLineIndex$1 + index,
704
- deletionLineNumber: deletionLineNumber$1 + index,
705
- additionLineNumber: additionLineNumber$1 + index,
706
680
  type: "context-expanded",
707
- noEOFCRAddition: false,
708
- noEOFCRDeletion: false
681
+ deletionLine: {
682
+ lineNumber: deletionLineNumber$1 + index,
683
+ lineIndex: deletionLineIndex$1 + index,
684
+ noEOFCR: false,
685
+ unifiedLineIndex: unifiedLineIndex$1 + index,
686
+ splitLineIndex: splitLineIndex$1 + index
687
+ },
688
+ additionLine: {
689
+ unifiedLineIndex: unifiedLineIndex$1 + index,
690
+ splitLineIndex: splitLineIndex$1 + index,
691
+ lineIndex: additionLineIndex$1 + index,
692
+ lineNumber: additionLineNumber$1 + index,
693
+ noEOFCR: false
694
+ }
709
695
  })) break hunkIterator;
710
696
  } else state.incrementCounts(1, 1);
711
697
  index++;
@@ -737,16 +723,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
737
723
  hunk,
738
724
  collapsedBefore: getPendingCollapsed(),
739
725
  collapsedAfter: getTrailingCollapsedAfter(unifiedRowIndex, splitRowIndex),
740
- unifiedDeletionLineIndex: unifiedRowIndex,
741
- unifiedAdditionLineIndex: unifiedRowIndex,
742
- splitLineIndex: splitRowIndex,
743
- deletionLineIndex: deletionLineIndex + index,
744
- additionLineIndex: additionLineIndex + index,
745
- deletionLineNumber: deletionLineNumber + index,
746
- additionLineNumber: additionLineNumber + index,
747
726
  type: "context",
748
- noEOFCRAddition: isLastLine && hunk.noEOFCRAdditions,
749
- noEOFCRDeletion: isLastLine && hunk.noEOFCRDeletions
727
+ deletionLine: {
728
+ lineNumber: deletionLineNumber + index,
729
+ lineIndex: deletionLineIndex + index,
730
+ noEOFCR: isLastLine && hunk.noEOFCRDeletions,
731
+ unifiedLineIndex: unifiedRowIndex,
732
+ splitLineIndex: splitRowIndex
733
+ },
734
+ additionLine: {
735
+ unifiedLineIndex: unifiedRowIndex,
736
+ splitLineIndex: splitRowIndex,
737
+ lineIndex: additionLineIndex + index,
738
+ lineNumber: additionLineNumber + index,
739
+ noEOFCR: isLastLine && hunk.noEOFCRAdditions
740
+ }
750
741
  })) break hunkIterator;
751
742
  } else state.incrementCounts(1, 1);
752
743
  index++;
@@ -811,16 +802,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
811
802
  hunk: void 0,
812
803
  collapsedBefore: 0,
813
804
  collapsedAfter: isLastLine ? collapsedLines : 0,
814
- unifiedDeletionLineIndex: unifiedLineIndex + index,
815
- unifiedAdditionLineIndex: unifiedLineIndex + index,
816
- splitLineIndex: splitLineIndex + index,
817
- additionLineIndex: additionLineIndex + index,
818
- deletionLineIndex: deletionLineIndex + index,
819
- additionLineNumber: additionLineNumber + index,
820
- deletionLineNumber: deletionLineNumber + index,
821
805
  type: "context-expanded",
822
- noEOFCRAddition: false,
823
- noEOFCRDeletion: false
806
+ deletionLine: {
807
+ lineNumber: deletionLineNumber + index,
808
+ lineIndex: deletionLineIndex + index,
809
+ noEOFCR: false,
810
+ unifiedLineIndex: unifiedLineIndex + index,
811
+ splitLineIndex: splitLineIndex + index
812
+ },
813
+ additionLine: {
814
+ unifiedLineIndex: unifiedLineIndex + index,
815
+ splitLineIndex: splitLineIndex + index,
816
+ lineIndex: additionLineIndex + index,
817
+ lineNumber: additionLineNumber + index,
818
+ noEOFCR: false
819
+ }
824
820
  })) break hunkIterator;
825
821
  } else state.incrementCounts(1, 1);
826
822
  index++;
@@ -899,37 +895,56 @@ function getChangeIterationRanges(state, content, diffStyle) {
899
895
  return merged;
900
896
  }
901
897
  function getChangeLineData({ hunkIndex, hunk, collapsedAfter, collapsedBefore, diffStyle, index, unifiedLineIndex, splitLineIndex, additionLineIndex, deletionLineIndex, additionLineNumber, deletionLineNumber, content, isLastContent, unifiedCount, splitCount }) {
902
- if (diffStyle === "unified") return {
898
+ const unifiedDeletionLineIndex = index < content.deletions ? unifiedLineIndex + index : void 0;
899
+ const unifiedAdditionLineIndex = diffStyle === "unified" ? index >= content.deletions ? unifiedLineIndex + index : void 0 : index < content.additions ? unifiedLineIndex + content.deletions + index : void 0;
900
+ const resolvedSplitLineIndex = diffStyle === "unified" ? splitLineIndex + (index < content.deletions ? index : index - content.deletions) : splitLineIndex + index;
901
+ const deletionLineIndexValue = index < content.deletions ? deletionLineIndex + index : void 0;
902
+ const deletionLineNumberValue = index < content.deletions ? deletionLineNumber + index : void 0;
903
+ const additionLineIndexValue = diffStyle === "unified" ? index >= content.deletions ? additionLineIndex + (index - content.deletions) : void 0 : index < content.additions ? additionLineIndex + index : void 0;
904
+ const additionLineNumberValue = diffStyle === "unified" ? index >= content.deletions ? additionLineNumber + (index - content.deletions) : void 0 : index < content.additions ? additionLineNumber + index : void 0;
905
+ const noEOFCRDeletion = diffStyle === "unified" ? isLastContent && index === content.deletions - 1 && hunk.noEOFCRDeletions : isLastContent && index === splitCount - 1 && hunk.noEOFCRDeletions;
906
+ const noEOFCRAddition = diffStyle === "unified" ? isLastContent && index === unifiedCount - 1 && hunk.noEOFCRAdditions : isLastContent && index === splitCount - 1 && hunk.noEOFCRAdditions;
907
+ const deletionLine = deletionLineIndexValue != null && deletionLineNumberValue != null && unifiedDeletionLineIndex != null ? {
908
+ lineNumber: deletionLineNumberValue,
909
+ lineIndex: deletionLineIndexValue,
910
+ noEOFCR: noEOFCRDeletion,
911
+ unifiedLineIndex: unifiedDeletionLineIndex,
912
+ splitLineIndex: resolvedSplitLineIndex
913
+ } : void 0;
914
+ const additionLine = additionLineIndexValue != null && additionLineNumberValue != null && unifiedAdditionLineIndex != null ? {
915
+ unifiedLineIndex: unifiedAdditionLineIndex,
916
+ splitLineIndex: resolvedSplitLineIndex,
917
+ lineIndex: additionLineIndexValue,
918
+ lineNumber: additionLineNumberValue,
919
+ noEOFCR: noEOFCRAddition
920
+ } : void 0;
921
+ if (deletionLine == null && additionLine != null) return {
922
+ type: "change",
923
+ hunkIndex,
924
+ hunk,
925
+ collapsedAfter,
926
+ collapsedBefore,
927
+ deletionLine: void 0,
928
+ additionLine
929
+ };
930
+ else if (deletionLine != null && additionLine == null) return {
903
931
  type: "change",
904
932
  hunkIndex,
905
933
  hunk,
906
934
  collapsedAfter,
907
935
  collapsedBefore,
908
- unifiedDeletionLineIndex: index < content.deletions ? unifiedLineIndex + index : void 0,
909
- unifiedAdditionLineIndex: index >= content.deletions ? unifiedLineIndex + index : void 0,
910
- splitLineIndex: splitLineIndex + (index < content.deletions ? index : index - content.deletions),
911
- additionLineIndex: index >= content.deletions ? additionLineIndex + (index - content.deletions) : void 0,
912
- additionLineNumber: index >= content.deletions ? additionLineNumber + (index - content.deletions) : void 0,
913
- deletionLineIndex: index < content.deletions ? deletionLineIndex + index : void 0,
914
- deletionLineNumber: index < content.deletions ? deletionLineNumber + index : void 0,
915
- noEOFCRDeletion: isLastContent && index === content.deletions - 1 && hunk.noEOFCRDeletions,
916
- noEOFCRAddition: isLastContent && index === unifiedCount - 1 && hunk.noEOFCRAdditions
936
+ deletionLine,
937
+ additionLine: void 0
917
938
  };
939
+ if (deletionLine == null || additionLine == null) throw new Error("iterateOverDiff: missing change line data");
918
940
  return {
919
941
  type: "change",
920
942
  hunkIndex,
921
943
  hunk,
922
944
  collapsedAfter,
923
945
  collapsedBefore,
924
- unifiedDeletionLineIndex: index < content.deletions ? unifiedLineIndex + index : void 0,
925
- unifiedAdditionLineIndex: index < content.additions ? unifiedLineIndex + content.deletions + index : void 0,
926
- splitLineIndex: splitLineIndex + index,
927
- additionLineIndex: index < content.additions ? additionLineIndex + index : void 0,
928
- additionLineNumber: index < content.additions ? additionLineNumber + index : void 0,
929
- deletionLineIndex: index < content.deletions ? deletionLineIndex + index : void 0,
930
- deletionLineNumber: index < content.deletions ? deletionLineNumber + index : void 0,
931
- noEOFCRDeletion: isLastContent && index === splitCount - 1 && hunk.noEOFCRDeletions,
932
- noEOFCRAddition: isLastContent && index === splitCount - 1 && hunk.noEOFCRAdditions
946
+ deletionLine,
947
+ additionLine
933
948
  };
934
949
  }
935
950
 
@@ -965,8 +980,8 @@ function pushOrJoinSpan({ item, arr, enableJoin, isNeutral = false, isLastItem =
965
980
 
966
981
  //#endregion
967
982
  //#region src/utils/renderDiffWithHighlighter.ts
968
- const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
969
- function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD } = DEFAULT_PLAIN_TEXT_OPTIONS) {
983
+ const DEFAULT_PLAIN_TEXT_OPTIONS$1 = { forcePlainText: false };
984
+ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD } = DEFAULT_PLAIN_TEXT_OPTIONS$1) {
970
985
  if (forcePlainText) {
971
986
  startingLine ??= 0;
972
987
  totalLines ??= Infinity;
@@ -1019,33 +1034,34 @@ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainTex
1019
1034
  totalLines,
1020
1035
  expandedHunks: isWindowedHighlight ? expandedHunksForIteration : true,
1021
1036
  collapsedContextThreshold,
1022
- callback: ({ hunkIndex, additionLineIndex, deletionLineIndex, additionLineNumber, deletionLineNumber, unifiedAdditionLineIndex, unifiedDeletionLineIndex, splitLineIndex, type }) => {
1037
+ callback: ({ hunkIndex, additionLine, deletionLine, type }) => {
1023
1038
  const bucket = getBucketForHunk(hunkIndex);
1024
- if (type === "change" && lineDiffType !== "none" && additionLineIndex != null && deletionLineIndex != null) computeLineDiffDecorations({
1025
- additionLine: diff.additionLines[additionLineIndex],
1026
- deletionLine: diff.deletionLines[deletionLineIndex],
1039
+ const splitLineIndex = additionLine != null ? additionLine.splitLineIndex : deletionLine.splitLineIndex;
1040
+ if (type === "change" && additionLine != null && deletionLine != null) computeLineDiffDecorations({
1041
+ additionLine: diff.additionLines[additionLine.lineIndex],
1042
+ deletionLine: diff.deletionLines[deletionLine.lineIndex],
1027
1043
  deletionLineIndex: bucket.deletionContent.length,
1028
1044
  additionLineIndex: bucket.additionContent.length,
1029
1045
  deletionDecorations: bucket.deletionDecorations,
1030
1046
  additionDecorations: bucket.additionDecorations,
1031
1047
  lineDiffType
1032
1048
  });
1033
- if (deletionLineIndex != null && deletionLineNumber != null && unifiedDeletionLineIndex != null) {
1034
- appendContent(diff.deletionLines[deletionLineIndex], deletionLineIndex, bucket.deletionSegments, bucket.deletionContent);
1049
+ if (deletionLine != null) {
1050
+ appendContent(diff.deletionLines[deletionLine.lineIndex], deletionLine.lineIndex, bucket.deletionSegments, bucket.deletionContent);
1035
1051
  bucket.deletionInfo.push({
1036
1052
  type: type === "change" ? "change-deletion" : type,
1037
- lineNumber: deletionLineNumber,
1038
- altLineNumber: type === "change" ? void 0 : additionLineNumber ?? void 0,
1039
- lineIndex: `${unifiedDeletionLineIndex},${splitLineIndex}`
1053
+ lineNumber: deletionLine.lineNumber,
1054
+ altLineNumber: type === "change" ? void 0 : additionLine.lineNumber ?? void 0,
1055
+ lineIndex: `${deletionLine.unifiedLineIndex},${splitLineIndex}`
1040
1056
  });
1041
1057
  }
1042
- if (additionLineIndex != null && additionLineNumber != null && unifiedAdditionLineIndex != null) {
1043
- appendContent(diff.additionLines[additionLineIndex], additionLineIndex, bucket.additionSegments, bucket.additionContent);
1058
+ if (additionLine != null) {
1059
+ appendContent(diff.additionLines[additionLine.lineIndex], additionLine.lineIndex, bucket.additionSegments, bucket.additionContent);
1044
1060
  bucket.additionInfo.push({
1045
1061
  type: type === "change" ? "change-addition" : type,
1046
- lineNumber: additionLineNumber,
1047
- altLineNumber: type === "change" ? void 0 : deletionLineNumber ?? void 0,
1048
- lineIndex: `${unifiedAdditionLineIndex},${splitLineIndex}`
1062
+ lineNumber: additionLine.lineNumber,
1063
+ altLineNumber: type === "change" ? void 0 : deletionLine.lineNumber ?? void 0,
1064
+ lineIndex: `${additionLine.unifiedLineIndex},${splitLineIndex}`
1049
1065
  });
1050
1066
  }
1051
1067
  }
@@ -1212,9 +1228,78 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
1212
1228
  };
1213
1229
  }
1214
1230
 
1231
+ //#endregion
1232
+ //#region src/utils/iterateOverFile.ts
1233
+ /**
1234
+ * Iterates over lines in a file with optional windowing support.
1235
+ *
1236
+ * Similar to `iterateOverDiff` but simplified for linear file content.
1237
+ * Supports viewport windowing for virtualization scenarios.
1238
+ *
1239
+ * @param props - Configuration for iteration
1240
+ * @param props.lines - Pre-split array of lines (use splitFileContents() to create from string)
1241
+ * @param props.startingLine - Optional starting line index (0-based, default: 0)
1242
+ * @param props.totalLines - Optional max lines to iterate (default: Infinity)
1243
+ * @param props.callback - Callback invoked for each line in the window.
1244
+ * Return `true` to stop iteration early.
1245
+ *
1246
+ * @example
1247
+ * ```typescript
1248
+ * const lines = splitFileContents('line1\nline2\nline3');
1249
+ * iterateOverFile({
1250
+ * lines,
1251
+ * startingLine: 0,
1252
+ * totalLines: 10,
1253
+ * callback: ({ lineIndex, lineNumber, content, isLastLine }) => {
1254
+ * console.log(`Line ${lineNumber}: ${content}`);
1255
+ * if (content.includes('stop')) return true; // Stop iteration
1256
+ * }
1257
+ * });
1258
+ * ```
1259
+ */
1260
+ function iterateOverFile({ lines, startingLine = 0, totalLines = Infinity, callback }) {
1261
+ const len = Math.min(startingLine + totalLines, lines.length);
1262
+ const lastLineIndex = (() => {
1263
+ const lastLine = lines.at(-1);
1264
+ if (lastLine === "" || lastLine === "\n" || lastLine === "\r\n" || lastLine === "\r") return Math.max(0, lines.length - 2);
1265
+ return lines.length - 1;
1266
+ })();
1267
+ for (let lineIndex = startingLine; lineIndex < len; lineIndex++) {
1268
+ const isLastLine = lineIndex === lastLineIndex;
1269
+ if (callback({
1270
+ lineIndex,
1271
+ lineNumber: lineIndex + 1,
1272
+ content: lines[lineIndex],
1273
+ isLastLine
1274
+ }) === true || isLastLine) break;
1275
+ }
1276
+ }
1277
+
1278
+ //#endregion
1279
+ //#region src/utils/splitFileContents.ts
1280
+ /**
1281
+ * Splits file contents into lines using the same logic as diff parsing.
1282
+ * - Preserves trailing newlines on each line
1283
+ *
1284
+ * @param contents - The raw file contents string
1285
+ * @returns Array of lines with newlines preserved
1286
+ */
1287
+ function splitFileContents(contents) {
1288
+ return contents !== "" ? contents.split(SPLIT_WITH_NEWLINES) : [];
1289
+ }
1290
+
1215
1291
  //#endregion
1216
1292
  //#region src/utils/renderFileWithHighlighter.ts
1217
- function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES, tokenizeMaxLineLength }, forcePlainText = false) {
1293
+ const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
1294
+ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES, tokenizeMaxLineLength }, { forcePlainText, startingLine, totalLines, lines } = DEFAULT_PLAIN_TEXT_OPTIONS) {
1295
+ if (forcePlainText) {
1296
+ startingLine ??= 0;
1297
+ totalLines ??= Infinity;
1298
+ } else {
1299
+ startingLine = 0;
1300
+ totalLines = Infinity;
1301
+ }
1302
+ const isWindowedHighlight = startingLine > 0 || totalLines < Infinity;
1218
1303
  const { state, transformers } = createTransformerWithState();
1219
1304
  const lang = forcePlainText ? "text" : file.lang ?? getFiletypeFromFileName(file.name);
1220
1305
  const baseThemeType = (() => {
@@ -1226,8 +1311,8 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
1226
1311
  });
1227
1312
  state.lineInfo = (shikiLineNumber) => ({
1228
1313
  type: "context",
1229
- lineIndex: shikiLineNumber - 1,
1230
- lineNumber: shikiLineNumber
1314
+ lineIndex: shikiLineNumber - 1 + startingLine,
1315
+ lineNumber: shikiLineNumber + startingLine
1231
1316
  });
1232
1317
  const hastConfig = (() => {
1233
1318
  if (typeof theme === "string") return {
@@ -1247,12 +1332,27 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
1247
1332
  tokenizeMaxLineLength
1248
1333
  };
1249
1334
  })();
1335
+ const highlightedLines = getLineNodes(highlighter$1.codeToHast(isWindowedHighlight ? extractWindowedFileContent(lines ?? splitFileContents(file.contents), startingLine, totalLines) : cleanLastNewline(file.contents), hastConfig));
1336
+ const code = isWindowedHighlight ? new Array(startingLine) : highlightedLines;
1337
+ if (isWindowedHighlight) code.push(...highlightedLines);
1250
1338
  return {
1251
- code: getLineNodes(highlighter$1.codeToHast(cleanLastNewline(file.contents), hastConfig)),
1339
+ code,
1252
1340
  themeStyles,
1253
1341
  baseThemeType
1254
1342
  };
1255
1343
  }
1344
+ function extractWindowedFileContent(lines, startingLine, totalLines) {
1345
+ let windowContent = "";
1346
+ iterateOverFile({
1347
+ lines,
1348
+ startingLine,
1349
+ totalLines,
1350
+ callback({ content }) {
1351
+ windowContent += content;
1352
+ }
1353
+ });
1354
+ return windowContent;
1355
+ }
1256
1356
 
1257
1357
  //#endregion
1258
1358
  //#region src/worker/worker.ts