@pierre/diffs 1.1.0-beta.7 → 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 (288) 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 +5 -5
  243. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  244. package/dist/utils/parseLineType.d.ts +1 -1
  245. package/dist/utils/parseLineType.d.ts.map +1 -1
  246. package/dist/utils/parsePatchFiles.d.ts +7 -7
  247. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  248. package/dist/utils/parsePatchFiles.js.map +1 -1
  249. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  250. package/dist/utils/processLine.d.ts.map +1 -1
  251. package/dist/utils/processLine.js +7 -24
  252. package/dist/utils/processLine.js.map +1 -1
  253. package/dist/utils/renderDiffWithHighlighter.d.ts +2 -2
  254. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  255. package/dist/utils/renderDiffWithHighlighter.js +15 -14
  256. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  257. package/dist/utils/renderFileWithHighlighter.d.ts +7 -2
  258. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  259. package/dist/utils/renderFileWithHighlighter.js +30 -4
  260. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  261. package/dist/utils/resolveVirtualFileMetrics.d.ts +7 -0
  262. package/dist/utils/resolveVirtualFileMetrics.d.ts.map +1 -0
  263. package/dist/utils/resolveVirtualFileMetrics.js +24 -0
  264. package/dist/utils/resolveVirtualFileMetrics.js.map +1 -0
  265. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  266. package/dist/utils/setWrapperNodeProps.d.ts +1 -0
  267. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  268. package/dist/utils/setWrapperNodeProps.js +19 -12
  269. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  270. package/dist/utils/splitFileContents.d.ts +12 -0
  271. package/dist/utils/splitFileContents.d.ts.map +1 -0
  272. package/dist/utils/splitFileContents.js +17 -0
  273. package/dist/utils/splitFileContents.js.map +1 -0
  274. package/dist/utils/trimPatchContext.d.ts +5 -5
  275. package/dist/utils/trimPatchContext.d.ts.map +1 -1
  276. package/dist/worker/WorkerPoolManager.d.ts +1 -2
  277. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  278. package/dist/worker/WorkerPoolManager.js +7 -2
  279. package/dist/worker/WorkerPoolManager.js.map +1 -1
  280. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  281. package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
  282. package/dist/worker/types.d.ts +26 -26
  283. package/dist/worker/types.d.ts.map +1 -1
  284. package/dist/worker/worker-portable.js +254 -107
  285. package/dist/worker/worker-portable.js.map +1 -1
  286. package/dist/worker/worker.js +206 -106
  287. package/dist/worker/worker.js.map +1 -1
  288. package/package.json +52 -53
@@ -11680,16 +11680,24 @@ 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;
11688
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
+ };
11689
11691
  const DEFAULT_EXPANDED_REGION = Object.freeze({
11690
11692
  fromStart: 0,
11691
11693
  fromEnd: 0
11692
11694
  });
11695
+ const DEFAULT_RENDER_RANGE = {
11696
+ startingLine: 0,
11697
+ totalLines: Infinity,
11698
+ bufferBefore: 0,
11699
+ bufferAfter: 0
11700
+ };
11693
11701
 
11694
11702
  //#endregion
11695
11703
  //#region src/highlighter/languages/constants.ts
@@ -13857,12 +13865,36 @@ function findCodeElement(nodes) {
13857
13865
  }
13858
13866
  return undefined;
13859
13867
  }
13860
- 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) {
13861
13876
  return createHastElement({
13862
13877
  tagName: "div",
13863
13878
  properties: {
13864
- "data-virtualized-buffer": type,
13865
- 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);`
13866
13898
  }
13867
13899
  });
13868
13900
  }
@@ -13880,33 +13912,15 @@ function processLine(node, line, state) {
13880
13912
  });
13881
13913
  throw new Error(errorMessage);
13882
13914
  }
13883
- node.tagName = "span";
13884
- 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;
13885
13920
  if (node.children.length === 0) {
13886
13921
  node.children.push(createTextNodeElement("\n"));
13887
13922
  }
13888
- const children = [createHastElement({
13889
- tagName: "span",
13890
- children: [createHastElement({
13891
- tagName: "span",
13892
- children: [{
13893
- type: "text",
13894
- value: `${lineInfo.lineNumber}`
13895
- }],
13896
- properties: { "data-line-number-content": "" }
13897
- })],
13898
- properties: { "data-column-number": "" }
13899
- }), node];
13900
- return createHastElement({
13901
- tagName: "div",
13902
- children,
13903
- properties: {
13904
- "data-line": lineInfo.lineNumber,
13905
- "data-alt-line": lineInfo.altLineNumber,
13906
- "data-line-type": lineInfo.type,
13907
- "data-line-index": lineInfo.lineIndex
13908
- }
13909
- });
13923
+ return node;
13910
13924
  }
13911
13925
 
13912
13926
  //#endregion
@@ -14532,16 +14546,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14532
14546
  hunk,
14533
14547
  collapsedBefore: 0,
14534
14548
  collapsedAfter: 0,
14535
- unifiedDeletionLineIndex: unifiedLineIndex$1 + index,
14536
- unifiedAdditionLineIndex: unifiedLineIndex$1 + index,
14537
- splitLineIndex: splitLineIndex$1 + index,
14538
- deletionLineIndex: deletionLineIndex$1 + index,
14539
- additionLineIndex: additionLineIndex$1 + index,
14540
- deletionLineNumber: deletionLineNumber$1 + index,
14541
- additionLineNumber: additionLineNumber$1 + index,
14542
14549
  type: "context-expanded",
14543
- noEOFCRAddition: false,
14544
- 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
+ }
14545
14564
  })) {
14546
14565
  break hunkIterator;
14547
14566
  }
@@ -14564,16 +14583,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14564
14583
  hunk,
14565
14584
  collapsedBefore: getPendingCollapsed(),
14566
14585
  collapsedAfter: 0,
14567
- unifiedDeletionLineIndex: unifiedLineIndex$1 + index,
14568
- unifiedAdditionLineIndex: unifiedLineIndex$1 + index,
14569
- splitLineIndex: splitLineIndex$1 + index,
14570
- deletionLineIndex: deletionLineIndex$1 + index,
14571
- additionLineIndex: additionLineIndex$1 + index,
14572
- deletionLineNumber: deletionLineNumber$1 + index,
14573
- additionLineNumber: additionLineNumber$1 + index,
14574
14586
  type: "context-expanded",
14575
- noEOFCRAddition: false,
14576
- 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
+ }
14577
14601
  })) {
14578
14602
  break hunkIterator;
14579
14603
  }
@@ -14611,16 +14635,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14611
14635
  hunk,
14612
14636
  collapsedBefore: getPendingCollapsed(),
14613
14637
  collapsedAfter: getTrailingCollapsedAfter(unifiedRowIndex, splitRowIndex),
14614
- unifiedDeletionLineIndex: unifiedRowIndex,
14615
- unifiedAdditionLineIndex: unifiedRowIndex,
14616
- splitLineIndex: splitRowIndex,
14617
- deletionLineIndex: deletionLineIndex + index,
14618
- additionLineIndex: additionLineIndex + index,
14619
- deletionLineNumber: deletionLineNumber + index,
14620
- additionLineNumber: additionLineNumber + index,
14621
14638
  type: "context",
14622
- noEOFCRAddition: isLastLine && hunk.noEOFCRAdditions,
14623
- 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
+ }
14624
14653
  })) {
14625
14654
  break hunkIterator;
14626
14655
  }
@@ -14698,16 +14727,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
14698
14727
  hunk: undefined,
14699
14728
  collapsedBefore: 0,
14700
14729
  collapsedAfter: isLastLine ? collapsedLines : 0,
14701
- unifiedDeletionLineIndex: unifiedLineIndex + index,
14702
- unifiedAdditionLineIndex: unifiedLineIndex + index,
14703
- splitLineIndex: splitLineIndex + index,
14704
- additionLineIndex: additionLineIndex + index,
14705
- deletionLineIndex: deletionLineIndex + index,
14706
- additionLineNumber: additionLineNumber + index,
14707
- deletionLineNumber: deletionLineNumber + index,
14708
14730
  type: "context-expanded",
14709
- noEOFCRAddition: false,
14710
- 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
+ }
14711
14745
  })) {
14712
14746
  break hunkIterator;
14713
14747
  }
@@ -14812,39 +14846,61 @@ function getChangeIterationRanges(state, content, diffStyle) {
14812
14846
  return merged;
14813
14847
  }
14814
14848
  function getChangeLineData({ hunkIndex, hunk, collapsedAfter, collapsedBefore, diffStyle, index, unifiedLineIndex, splitLineIndex, additionLineIndex, deletionLineIndex, additionLineNumber, deletionLineNumber, content, isLastContent, unifiedCount, splitCount }) {
14815
- 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) {
14873
+ return {
14874
+ type: "change",
14875
+ hunkIndex,
14876
+ hunk,
14877
+ collapsedAfter,
14878
+ collapsedBefore,
14879
+ deletionLine: undefined,
14880
+ additionLine
14881
+ };
14882
+ } else if (deletionLine != null && additionLine == null) {
14816
14883
  return {
14817
14884
  type: "change",
14818
14885
  hunkIndex,
14819
14886
  hunk,
14820
14887
  collapsedAfter,
14821
14888
  collapsedBefore,
14822
- unifiedDeletionLineIndex: index < content.deletions ? unifiedLineIndex + index : undefined,
14823
- unifiedAdditionLineIndex: index >= content.deletions ? unifiedLineIndex + index : undefined,
14824
- splitLineIndex: splitLineIndex + (index < content.deletions ? index : index - content.deletions),
14825
- additionLineIndex: index >= content.deletions ? additionLineIndex + (index - content.deletions) : undefined,
14826
- additionLineNumber: index >= content.deletions ? additionLineNumber + (index - content.deletions) : undefined,
14827
- deletionLineIndex: index < content.deletions ? deletionLineIndex + index : undefined,
14828
- deletionLineNumber: index < content.deletions ? deletionLineNumber + index : undefined,
14829
- noEOFCRDeletion: isLastContent && index === content.deletions - 1 && hunk.noEOFCRDeletions,
14830
- noEOFCRAddition: isLastContent && index === unifiedCount - 1 && hunk.noEOFCRAdditions
14889
+ deletionLine,
14890
+ additionLine: undefined
14831
14891
  };
14832
14892
  }
14893
+ if (deletionLine == null || additionLine == null) {
14894
+ throw new Error("iterateOverDiff: missing change line data");
14895
+ }
14833
14896
  return {
14834
14897
  type: "change",
14835
14898
  hunkIndex,
14836
14899
  hunk,
14837
14900
  collapsedAfter,
14838
14901
  collapsedBefore,
14839
- unifiedDeletionLineIndex: index < content.deletions ? unifiedLineIndex + index : undefined,
14840
- unifiedAdditionLineIndex: index < content.additions ? unifiedLineIndex + content.deletions + index : undefined,
14841
- splitLineIndex: splitLineIndex + index,
14842
- additionLineIndex: index < content.additions ? additionLineIndex + index : undefined,
14843
- additionLineNumber: index < content.additions ? additionLineNumber + index : undefined,
14844
- deletionLineIndex: index < content.deletions ? deletionLineIndex + index : undefined,
14845
- deletionLineNumber: index < content.deletions ? deletionLineNumber + index : undefined,
14846
- noEOFCRDeletion: isLastContent && index === splitCount - 1 && hunk.noEOFCRDeletions,
14847
- noEOFCRAddition: isLastContent && index === splitCount - 1 && hunk.noEOFCRAdditions
14902
+ deletionLine,
14903
+ additionLine
14848
14904
  };
14849
14905
  }
14850
14906
 
@@ -14880,8 +14936,8 @@ function pushOrJoinSpan({ item, arr, enableJoin, isNeutral = false, isLastItem =
14880
14936
 
14881
14937
  //#endregion
14882
14938
  //#region src/utils/renderDiffWithHighlighter.ts
14883
- const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
14884
- function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD } = 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) {
14885
14941
  if (forcePlainText) {
14886
14942
  startingLine ??= 0;
14887
14943
  totalLines ??= Infinity;
@@ -14937,12 +14993,13 @@ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainTex
14937
14993
  totalLines,
14938
14994
  expandedHunks: isWindowedHighlight ? expandedHunksForIteration : true,
14939
14995
  collapsedContextThreshold,
14940
- callback: ({ hunkIndex, additionLineIndex, deletionLineIndex, additionLineNumber, deletionLineNumber, unifiedAdditionLineIndex, unifiedDeletionLineIndex, splitLineIndex, type }) => {
14996
+ callback: ({ hunkIndex, additionLine, deletionLine, type }) => {
14941
14997
  const bucket = getBucketForHunk(hunkIndex);
14942
- 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) {
14943
15000
  computeLineDiffDecorations({
14944
- additionLine: diff.additionLines[additionLineIndex],
14945
- deletionLine: diff.deletionLines[deletionLineIndex],
15001
+ additionLine: diff.additionLines[additionLine.lineIndex],
15002
+ deletionLine: diff.deletionLines[deletionLine.lineIndex],
14946
15003
  deletionLineIndex: bucket.deletionContent.length,
14947
15004
  additionLineIndex: bucket.additionContent.length,
14948
15005
  deletionDecorations: bucket.deletionDecorations,
@@ -14950,22 +15007,22 @@ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainTex
14950
15007
  lineDiffType
14951
15008
  });
14952
15009
  }
14953
- if (deletionLineIndex != null && deletionLineNumber != null && unifiedDeletionLineIndex != null) {
14954
- 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);
14955
15012
  bucket.deletionInfo.push({
14956
15013
  type: type === "change" ? "change-deletion" : type,
14957
- lineNumber: deletionLineNumber,
14958
- altLineNumber: type === "change" ? undefined : additionLineNumber ?? undefined,
14959
- lineIndex: `${unifiedDeletionLineIndex},${splitLineIndex}`
15014
+ lineNumber: deletionLine.lineNumber,
15015
+ altLineNumber: type === "change" ? undefined : additionLine.lineNumber ?? undefined,
15016
+ lineIndex: `${deletionLine.unifiedLineIndex},${splitLineIndex}`
14960
15017
  });
14961
15018
  }
14962
- if (additionLineIndex != null && additionLineNumber != null && unifiedAdditionLineIndex != null) {
14963
- 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);
14964
15021
  bucket.additionInfo.push({
14965
15022
  type: type === "change" ? "change-addition" : type,
14966
- lineNumber: additionLineNumber,
14967
- altLineNumber: type === "change" ? undefined : deletionLineNumber ?? undefined,
14968
- lineIndex: `${unifiedAdditionLineIndex},${splitLineIndex}`
15023
+ lineNumber: additionLine.lineNumber,
15024
+ altLineNumber: type === "change" ? undefined : deletionLine.lineNumber ?? undefined,
15025
+ lineIndex: `${additionLine.unifiedLineIndex},${splitLineIndex}`
14969
15026
  });
14970
15027
  }
14971
15028
  }
@@ -15163,9 +15220,82 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
15163
15220
  };
15164
15221
  }
15165
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
+
15166
15287
  //#endregion
15167
15288
  //#region src/utils/renderFileWithHighlighter.ts
15168
- 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;
15169
15299
  const { state, transformers } = createTransformerWithState();
15170
15300
  const lang = forcePlainText ? "text" : file.lang ?? getFiletypeFromFileName(file.name);
15171
15301
  const baseThemeType = (() => {
@@ -15180,8 +15310,8 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
15180
15310
  });
15181
15311
  state.lineInfo = (shikiLineNumber) => ({
15182
15312
  type: "context",
15183
- lineIndex: shikiLineNumber - 1,
15184
- lineNumber: shikiLineNumber
15313
+ lineIndex: shikiLineNumber - 1 + startingLine,
15314
+ lineNumber: shikiLineNumber + startingLine
15185
15315
  });
15186
15316
  const hastConfig = (() => {
15187
15317
  if (typeof theme === "string") {
@@ -15203,12 +15333,29 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
15203
15333
  tokenizeMaxLineLength
15204
15334
  };
15205
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
+ }
15206
15341
  return {
15207
- code: getLineNodes(highlighter$1.codeToHast(cleanLastNewline(file.contents), hastConfig)),
15342
+ code,
15208
15343
  themeStyles,
15209
15344
  baseThemeType
15210
15345
  };
15211
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
+ }
15212
15359
 
15213
15360
  //#endregion
15214
15361
  //#region src/worker/worker.ts