@pierre/diffs 1.1.0-beta.1 → 1.1.0-beta.11
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.
- package/README.md +7 -18
- package/dist/components/AdvancedVirtualizedFileDiff.d.ts +40 -0
- package/dist/components/AdvancedVirtualizedFileDiff.d.ts.map +1 -0
- package/dist/components/AdvancedVirtualizedFileDiff.js +145 -0
- package/dist/components/AdvancedVirtualizedFileDiff.js.map +1 -0
- package/dist/components/AdvancedVirtualizer.d.ts +38 -0
- package/dist/components/AdvancedVirtualizer.d.ts.map +1 -0
- package/dist/components/AdvancedVirtualizer.js +201 -0
- package/dist/components/AdvancedVirtualizer.js.map +1 -0
- package/dist/components/File.d.ts +60 -29
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +226 -26
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts +44 -12
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +510 -71
- package/dist/components/FileDiff.js.map +1 -1
- package/dist/components/FileStream.d.ts +5 -0
- package/dist/components/FileStream.d.ts.map +1 -1
- package/dist/components/FileStream.js +66 -8
- package/dist/components/FileStream.js.map +1 -1
- package/dist/components/VirtualizedFile.d.ts +33 -0
- package/dist/components/VirtualizedFile.d.ts.map +1 -0
- package/dist/components/VirtualizedFile.js +227 -0
- package/dist/components/VirtualizedFile.js.map +1 -0
- package/dist/components/VirtualizedFileDiff.d.ts +39 -0
- package/dist/components/VirtualizedFileDiff.d.ts.map +1 -0
- package/dist/components/VirtualizedFileDiff.js +316 -0
- package/dist/components/VirtualizedFileDiff.js.map +1 -0
- package/dist/components/Virtualizer.d.ts +63 -0
- package/dist/components/Virtualizer.d.ts.map +1 -0
- package/dist/components/Virtualizer.js +369 -0
- package/dist/components/Virtualizer.js.map +1 -0
- package/dist/components/VirtulizerDevelopment.d.ts +14 -0
- package/dist/components/VirtulizerDevelopment.d.ts.map +1 -0
- package/dist/components/web-components.d.ts +1 -1
- package/dist/components/web-components.d.ts.map +1 -1
- package/dist/constants.d.ts +6 -8
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +16 -7
- package/dist/constants.js.map +1 -1
- package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/constants.d.ts +3 -1
- package/dist/highlighter/languages/constants.d.ts.map +1 -1
- package/dist/highlighter/languages/constants.js +2 -1
- package/dist/highlighter/languages/constants.js.map +1 -1
- package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
- package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/registerCustomLanguage.d.ts +19 -0
- package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -0
- package/dist/highlighter/languages/registerCustomLanguage.js +21 -0
- package/dist/highlighter/languages/registerCustomLanguage.js.map +1 -0
- package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
- package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
- package/dist/highlighter/languages/resolveLanguage.js +4 -3
- package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
- package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
- package/dist/highlighter/shared_highlighter.d.ts +4 -2
- package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
- package/dist/highlighter/shared_highlighter.js +3 -3
- package/dist/highlighter/shared_highlighter.js.map +1 -1
- package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
- package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/constants.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
- package/dist/index.d.ts +17 -12
- package/dist/index.js +14 -9
- package/dist/managers/LineSelectionManager.d.ts +14 -15
- package/dist/managers/LineSelectionManager.d.ts.map +1 -1
- package/dist/managers/LineSelectionManager.js +60 -71
- package/dist/managers/LineSelectionManager.js.map +1 -1
- package/dist/managers/MouseEventManager.d.ts +13 -6
- package/dist/managers/MouseEventManager.d.ts.map +1 -1
- package/dist/managers/MouseEventManager.js +161 -47
- package/dist/managers/MouseEventManager.js.map +1 -1
- package/dist/managers/ResizeManager.d.ts +6 -1
- package/dist/managers/ResizeManager.d.ts.map +1 -1
- package/dist/managers/ResizeManager.js +114 -64
- package/dist/managers/ResizeManager.js.map +1 -1
- package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
- package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
- package/dist/react/File.d.ts +1 -0
- package/dist/react/File.d.ts.map +1 -1
- package/dist/react/File.js +2 -1
- package/dist/react/File.js.map +1 -1
- package/dist/react/FileDiff.d.ts +1 -0
- package/dist/react/FileDiff.d.ts.map +1 -1
- package/dist/react/FileDiff.js +2 -1
- package/dist/react/FileDiff.js.map +1 -1
- package/dist/react/MultiFileDiff.d.ts +1 -0
- package/dist/react/MultiFileDiff.d.ts.map +1 -1
- package/dist/react/MultiFileDiff.js +2 -1
- package/dist/react/MultiFileDiff.js.map +1 -1
- package/dist/react/PatchDiff.d.ts +1 -0
- package/dist/react/PatchDiff.d.ts.map +1 -1
- package/dist/react/PatchDiff.js +3 -2
- package/dist/react/PatchDiff.js.map +1 -1
- package/dist/react/Virtualizer.d.ts +25 -0
- package/dist/react/Virtualizer.d.ts.map +1 -0
- package/dist/react/Virtualizer.js +38 -0
- package/dist/react/Virtualizer.js.map +1 -0
- package/dist/react/WorkerPoolContext.d.ts.map +1 -1
- package/dist/react/WorkerPoolContext.js +1 -1
- package/dist/react/WorkerPoolContext.js.map +1 -1
- package/dist/react/constants.d.ts.map +1 -1
- package/dist/react/index.d.ts +3 -2
- package/dist/react/index.js +2 -1
- package/dist/react/jsx.d.ts.map +1 -1
- package/dist/react/types.d.ts +5 -3
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.d.ts +5 -5
- package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
- package/dist/react/utils/renderFileChildren.d.ts +5 -5
- package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
- package/dist/react/utils/templateRender.d.ts.map +1 -1
- package/dist/react/utils/useFileDiffInstance.d.ts +5 -3
- package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileDiffInstance.js +6 -2
- package/dist/react/utils/useFileDiffInstance.js.map +1 -1
- package/dist/react/utils/useFileInstance.d.ts +5 -3
- package/dist/react/utils/useFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileInstance.js +6 -2
- package/dist/react/utils/useFileInstance.js.map +1 -1
- package/dist/react/utils/useStableCallback.d.ts.map +1 -1
- package/dist/react/utils/useStableCallback.js.map +1 -1
- package/dist/renderers/DiffHunksRenderer.d.ts +15 -10
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +249 -140
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/renderers/FileRenderer.d.ts +12 -5
- package/dist/renderers/FileRenderer.d.ts.map +1 -1
- package/dist/renderers/FileRenderer.js +90 -31
- package/dist/renderers/FileRenderer.js.map +1 -1
- package/dist/shiki-stream/stream.d.ts +3 -3
- package/dist/shiki-stream/stream.d.ts.map +1 -1
- package/dist/shiki-stream/stream.js.map +1 -1
- package/dist/shiki-stream/tokenizer.d.ts +3 -3
- package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
- package/dist/shiki-stream/tokenizer.js.map +1 -1
- package/dist/shiki-stream/types.d.ts +19 -19
- package/dist/shiki-stream/types.d.ts.map +1 -1
- package/dist/sprite.d.ts +1 -1
- package/dist/sprite.d.ts.map +1 -1
- package/dist/ssr/FileDiffReact.d.ts.map +1 -1
- package/dist/ssr/FileDiffReact.js +1 -1
- package/dist/ssr/index.d.ts +2 -2
- package/dist/ssr/preloadDiffs.d.ts.map +1 -1
- package/dist/ssr/preloadFile.d.ts.map +1 -1
- package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
- package/dist/ssr/preloadPatchFile.js.map +1 -1
- package/dist/ssr/renderHTML.d.ts.map +1 -1
- package/dist/style.js +1 -1
- package/dist/style.js.map +1 -1
- package/dist/types.d.ts +200 -165
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
- package/dist/utils/areDiffLineAnnotationsEqual.js.map +1 -1
- package/dist/utils/areFilesEqual.d.ts.map +1 -1
- package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
- package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
- package/dist/utils/areObjectsEqual.d.ts.map +1 -1
- package/dist/utils/areOptionsEqual.d.ts +1 -1
- package/dist/utils/areOptionsEqual.d.ts.map +1 -1
- package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
- package/dist/utils/arePrePropertiesEqual.js +1 -1
- package/dist/utils/arePrePropertiesEqual.js.map +1 -1
- package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
- package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
- package/dist/utils/areThemesEqual.d.ts.map +1 -1
- package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
- package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
- package/dist/utils/cleanLastNewline.d.ts.map +1 -1
- package/dist/utils/createAnnotationElement.d.ts.map +1 -1
- package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
- package/dist/utils/createContentColumn.d.ts +7 -0
- package/dist/utils/createContentColumn.d.ts.map +1 -0
- package/dist/utils/createContentColumn.js +17 -0
- package/dist/utils/createContentColumn.js.map +1 -0
- package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
- package/dist/utils/createEmptyRowBuffer.js +2 -1
- package/dist/utils/createEmptyRowBuffer.js.map +1 -1
- package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
- package/dist/utils/createHoverContentNode.d.ts.map +1 -1
- package/dist/utils/createNoNewlineElement.d.ts +2 -1
- package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
- package/dist/utils/createNoNewlineElement.js +3 -6
- package/dist/utils/createNoNewlineElement.js.map +1 -1
- package/dist/utils/createPreElement.d.ts +2 -1
- package/dist/utils/createPreElement.d.ts.map +1 -1
- package/dist/utils/createPreElement.js +4 -3
- package/dist/utils/createPreElement.js.map +1 -1
- package/dist/utils/createRowNodes.d.ts.map +1 -1
- package/dist/utils/createSeparator.d.ts.map +1 -1
- package/dist/utils/createSeparator.js +2 -2
- package/dist/utils/createSeparator.js.map +1 -1
- package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
- package/dist/utils/createSpanNodeFromToken.js.map +1 -1
- package/dist/utils/createStyleElement.d.ts.map +1 -1
- package/dist/utils/createTransformerWithState.d.ts.map +1 -1
- package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
- package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
- package/dist/utils/cssWrappers.d.ts.map +1 -1
- package/dist/utils/diffAcceptRejectHunk.d.ts +1 -1
- package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
- package/dist/utils/formatCSSVariablePrefix.d.ts +1 -1
- package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
- package/dist/utils/getFiletypeFromFileName.d.ts +2 -1
- package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
- package/dist/utils/getFiletypeFromFileName.js +14 -4
- package/dist/utils/getFiletypeFromFileName.js.map +1 -1
- package/dist/utils/getHighlighterOptions.d.ts +7 -2
- package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
- package/dist/utils/getHighlighterOptions.js +3 -2
- package/dist/utils/getHighlighterOptions.js.map +1 -1
- package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
- package/dist/utils/getHunkSeparatorSlotName.d.ts +3 -1
- package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
- package/dist/utils/getHunkSeparatorSlotName.js.map +1 -1
- package/dist/utils/getIconForType.d.ts +1 -1
- package/dist/utils/getIconForType.d.ts.map +1 -1
- package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
- package/dist/utils/getLineEndingType.d.ts +1 -1
- package/dist/utils/getLineEndingType.d.ts.map +1 -1
- package/dist/utils/getLineNodes.d.ts.map +1 -1
- package/dist/utils/getOrCreateCodeNode.d.ts +4 -2
- package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
- package/dist/utils/getOrCreateCodeNode.js +9 -6
- package/dist/utils/getOrCreateCodeNode.js.map +1 -1
- package/dist/utils/getSingularPatch.d.ts.map +1 -1
- package/dist/utils/getThemes.d.ts.map +1 -1
- package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
- package/dist/utils/hast_utils.d.ts +6 -3
- package/dist/utils/hast_utils.d.ts.map +1 -1
- package/dist/utils/hast_utils.js +28 -4
- package/dist/utils/hast_utils.js.map +1 -1
- package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
- package/dist/utils/isWorkerContext.d.ts.map +1 -1
- package/dist/utils/iterateOverDiff.d.ts +28 -13
- package/dist/utils/iterateOverDiff.d.ts.map +1 -1
- package/dist/utils/iterateOverDiff.js +101 -60
- package/dist/utils/iterateOverDiff.js.map +1 -1
- package/dist/utils/iterateOverFile.d.ts +50 -0
- package/dist/utils/iterateOverFile.d.ts.map +1 -0
- package/dist/utils/iterateOverFile.js +49 -0
- package/dist/utils/iterateOverFile.js.map +1 -0
- package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
- package/dist/utils/parseDiffFromFile.d.ts +6 -6
- package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
- package/dist/utils/parseDiffFromFile.js +3 -2
- package/dist/utils/parseDiffFromFile.js.map +1 -1
- package/dist/utils/parseLineType.d.ts +1 -1
- package/dist/utils/parseLineType.d.ts.map +1 -1
- package/dist/utils/parsePatchFiles.d.ts +12 -10
- package/dist/utils/parsePatchFiles.d.ts.map +1 -1
- package/dist/utils/parsePatchFiles.js +20 -11
- package/dist/utils/parsePatchFiles.js.map +1 -1
- package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
- package/dist/utils/processLine.d.ts.map +1 -1
- package/dist/utils/processLine.js +7 -24
- package/dist/utils/processLine.js.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.d.ts +4 -3
- package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.js +18 -16
- package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
- package/dist/utils/renderFileWithHighlighter.d.ts +7 -2
- package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderFileWithHighlighter.js +30 -4
- package/dist/utils/renderFileWithHighlighter.js.map +1 -1
- package/dist/utils/resolveVirtualFileMetrics.d.ts +7 -0
- package/dist/utils/resolveVirtualFileMetrics.d.ts.map +1 -0
- package/dist/utils/resolveVirtualFileMetrics.js +25 -0
- package/dist/utils/resolveVirtualFileMetrics.js.map +1 -0
- package/dist/utils/setLanguageOverride.d.ts +2 -1
- package/dist/utils/setLanguageOverride.d.ts.map +1 -1
- package/dist/utils/setLanguageOverride.js.map +1 -1
- package/dist/utils/setWrapperNodeProps.d.ts +1 -0
- package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
- package/dist/utils/setWrapperNodeProps.js +19 -12
- package/dist/utils/setWrapperNodeProps.js.map +1 -1
- package/dist/utils/splitFileContents.d.ts +12 -0
- package/dist/utils/splitFileContents.d.ts.map +1 -0
- package/dist/utils/splitFileContents.js +17 -0
- package/dist/utils/splitFileContents.js.map +1 -0
- package/dist/utils/trimPatchContext.d.ts +11 -0
- package/dist/utils/trimPatchContext.d.ts.map +1 -0
- package/dist/utils/trimPatchContext.js +99 -0
- package/dist/utils/trimPatchContext.js.map +1 -0
- package/dist/worker/WorkerPoolManager.d.ts +6 -4
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/dist/worker/WorkerPoolManager.js +47 -29
- package/dist/worker/WorkerPoolManager.js.map +1 -1
- package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
- package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
- package/dist/worker/types.d.ts +29 -27
- package/dist/worker/types.d.ts.map +1 -1
- package/dist/worker/wasm-BlUZCxHM.js +10 -0
- package/dist/worker/wasm-BlUZCxHM.js.map +1 -0
- package/dist/worker/worker-portable.js +10887 -10257
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js +249 -132
- package/dist/worker/worker.js.map +1 -1
- package/package.json +50 -53
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { BaseCodeOptions, FileContents, LineAnnotation, RenderFileMetadata, ThemeTypes } from "../types.js";
|
|
2
|
-
import { LineSelectionOptions, SelectedLineRange } from "../managers/LineSelectionManager.js";
|
|
3
|
-
import { GetHoveredLineResult, MouseEventManagerBaseOptions } from "../managers/MouseEventManager.js";
|
|
1
|
+
import { BaseCodeOptions, FileContents, LineAnnotation, PrePropertiesConfig, RenderFileMetadata, RenderRange, ThemeTypes } from "../types.js";
|
|
4
2
|
import { WorkerPoolManager } from "../worker/WorkerPoolManager.js";
|
|
5
3
|
import "../worker/index.js";
|
|
4
|
+
import { LineSelectionManager, LineSelectionOptions, SelectedLineRange } from "../managers/LineSelectionManager.js";
|
|
5
|
+
import { GetHoveredLineResult, MouseEventManager, MouseEventManagerBaseOptions } from "../managers/MouseEventManager.js";
|
|
6
|
+
import { ResizeManager } from "../managers/ResizeManager.js";
|
|
7
|
+
import { FileRenderer } from "../renderers/FileRenderer.js";
|
|
6
8
|
|
|
7
9
|
//#region src/components/File.d.ts
|
|
8
10
|
interface FileRenderProps<LAnnotation> {
|
|
@@ -11,16 +13,27 @@ interface FileRenderProps<LAnnotation> {
|
|
|
11
13
|
containerWrapper?: HTMLElement;
|
|
12
14
|
forceRender?: boolean;
|
|
13
15
|
lineAnnotations?: LineAnnotation<LAnnotation>[];
|
|
16
|
+
renderRange?: RenderRange;
|
|
14
17
|
}
|
|
15
|
-
interface FileHyrdateProps<LAnnotation> extends Omit<FileRenderProps<LAnnotation>,
|
|
18
|
+
interface FileHyrdateProps<LAnnotation> extends Omit<FileRenderProps<LAnnotation>, 'fileContainer'> {
|
|
16
19
|
fileContainer: HTMLElement;
|
|
17
20
|
prerenderedHTML?: string;
|
|
18
21
|
}
|
|
19
|
-
interface FileOptions<LAnnotation> extends BaseCodeOptions, MouseEventManagerBaseOptions<
|
|
22
|
+
interface FileOptions<LAnnotation> extends BaseCodeOptions, MouseEventManagerBaseOptions<'file'>, LineSelectionOptions {
|
|
20
23
|
disableFileHeader?: boolean;
|
|
21
24
|
renderCustomMetadata?: RenderFileMetadata;
|
|
25
|
+
/**
|
|
26
|
+
* When true, errors during rendering are rethrown instead of being caught
|
|
27
|
+
* and displayed in the DOM. Useful for testing or when you want to handle
|
|
28
|
+
* errors yourself.
|
|
29
|
+
*/
|
|
30
|
+
disableErrorHandling?: boolean;
|
|
22
31
|
renderAnnotation?(annotation: LineAnnotation<LAnnotation>): HTMLElement | undefined;
|
|
23
|
-
renderHoverUtility?(getHoveredRow: () => GetHoveredLineResult<
|
|
32
|
+
renderHoverUtility?(getHoveredRow: () => GetHoveredLineResult<'file'> | undefined): HTMLElement | null;
|
|
33
|
+
}
|
|
34
|
+
interface AnnotationElementCache<LAnnotation> {
|
|
35
|
+
element: HTMLElement;
|
|
36
|
+
annotation: LineAnnotation<LAnnotation>;
|
|
24
37
|
}
|
|
25
38
|
declare class File<LAnnotation = undefined> {
|
|
26
39
|
options: FileOptions<LAnnotation>;
|
|
@@ -28,48 +41,66 @@ declare class File<LAnnotation = undefined> {
|
|
|
28
41
|
private isContainerManaged;
|
|
29
42
|
static LoadedCustomComponent: boolean;
|
|
30
43
|
readonly __id: string;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
protected fileContainer: HTMLElement | undefined;
|
|
45
|
+
protected spriteSVG: SVGElement | undefined;
|
|
46
|
+
protected pre: HTMLPreElement | undefined;
|
|
47
|
+
protected code: HTMLElement | undefined;
|
|
48
|
+
protected bufferBefore: HTMLElement | undefined;
|
|
49
|
+
protected bufferAfter: HTMLElement | undefined;
|
|
50
|
+
protected unsafeCSSStyle: HTMLStyleElement | undefined;
|
|
51
|
+
protected hoverContent: HTMLElement | undefined;
|
|
52
|
+
protected errorWrapper: HTMLElement | undefined;
|
|
53
|
+
protected placeHolder: HTMLElement | undefined;
|
|
54
|
+
protected lastRenderedHeaderHTML: string | undefined;
|
|
55
|
+
protected appliedPreAttributes: PrePropertiesConfig | undefined;
|
|
56
|
+
protected lastRowCount: number | undefined;
|
|
57
|
+
protected headerElement: HTMLElement | undefined;
|
|
58
|
+
protected headerMetadata: HTMLElement | undefined;
|
|
59
|
+
protected fileRenderer: FileRenderer<LAnnotation>;
|
|
60
|
+
protected resizeManager: ResizeManager;
|
|
61
|
+
protected mouseEventManager: MouseEventManager<'file'>;
|
|
62
|
+
protected lineSelectionManager: LineSelectionManager;
|
|
63
|
+
protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>>;
|
|
64
|
+
protected lineAnnotations: LineAnnotation<LAnnotation>[];
|
|
65
|
+
protected file: FileContents | undefined;
|
|
66
|
+
protected renderRange: RenderRange | undefined;
|
|
49
67
|
constructor(options?: FileOptions<LAnnotation>, workerManager?: WorkerPoolManager | undefined, isContainerManaged?: boolean);
|
|
50
68
|
private handleHighlightRender;
|
|
51
69
|
rerender(): void;
|
|
52
70
|
setOptions(options: FileOptions<LAnnotation> | undefined): void;
|
|
53
71
|
private mergeOptions;
|
|
54
72
|
setThemeType(themeType: ThemeTypes): void;
|
|
55
|
-
getHoveredLine: () =>
|
|
73
|
+
getHoveredLine: () => {
|
|
74
|
+
lineNumber: number;
|
|
75
|
+
} | undefined;
|
|
56
76
|
setLineAnnotations(lineAnnotations: LineAnnotation<LAnnotation>[]): void;
|
|
57
77
|
setSelectedLines(range: SelectedLineRange | null): void;
|
|
58
78
|
cleanUp(): void;
|
|
59
79
|
hydrate(props: FileHyrdateProps<LAnnotation>): void;
|
|
80
|
+
getOrCreateLineCache(file?: FileContents | undefined): string[];
|
|
60
81
|
render({
|
|
61
82
|
file,
|
|
62
83
|
fileContainer,
|
|
63
84
|
forceRender,
|
|
64
85
|
containerWrapper,
|
|
65
|
-
lineAnnotations
|
|
66
|
-
|
|
86
|
+
lineAnnotations,
|
|
87
|
+
renderRange
|
|
88
|
+
}: FileRenderProps<LAnnotation>): boolean;
|
|
89
|
+
private canPartiallyRender;
|
|
90
|
+
renderPlaceholder(height: number): boolean;
|
|
91
|
+
private cleanChildNodes;
|
|
67
92
|
private renderAnnotations;
|
|
68
93
|
private renderHoverUtility;
|
|
69
94
|
private injectUnsafeCSS;
|
|
70
|
-
private
|
|
95
|
+
private applyFullRender;
|
|
96
|
+
private applyPartialRender;
|
|
97
|
+
private getColumns;
|
|
98
|
+
private trimDOMToOverlap;
|
|
99
|
+
private getDOMBoundaryIndices;
|
|
100
|
+
private getLineIndexFromDOMNode;
|
|
101
|
+
private applyBuffers;
|
|
71
102
|
private applyHeaderToDOM;
|
|
72
|
-
|
|
103
|
+
protected getOrCreateFileContainerNode(fileContainer?: HTMLElement, parentNode?: HTMLElement): HTMLElement;
|
|
73
104
|
private getOrCreatePreNode;
|
|
74
105
|
private applyPreNodeAttributes;
|
|
75
106
|
private applyErrorToDOM;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"File.d.ts","names":["
|
|
1
|
+
{"version":3,"file":"File.d.ts","names":["LineSelectionManager","LineSelectionOptions","SelectedLineRange","GetHoveredLineResult","MouseEventManager","MouseEventManagerBaseOptions","ResizeManager","FileRenderer","BaseCodeOptions","FileContents","LineAnnotation","PrePropertiesConfig","RenderFileMetadata","RenderRange","ThemeTypes","WorkerPoolManager","FileRenderProps","LAnnotation","HTMLElement","FileHyrdateProps","Omit","FileOptions","AnnotationElementCache","File","SVGElement","HTMLPreElement","HTMLStyleElement","Map","file","fileContainer","forceRender","containerWrapper","lineAnnotations","renderRange"],"sources":["../../src/components/File.d.ts"],"sourcesContent":["import { LineSelectionManager, type LineSelectionOptions, type SelectedLineRange } from '../managers/LineSelectionManager';\nimport { type GetHoveredLineResult, MouseEventManager, type MouseEventManagerBaseOptions } from '../managers/MouseEventManager';\nimport { ResizeManager } from '../managers/ResizeManager';\nimport { FileRenderer } from '../renderers/FileRenderer';\nimport type { BaseCodeOptions, FileContents, LineAnnotation, PrePropertiesConfig, RenderFileMetadata, RenderRange, ThemeTypes } from '../types';\nimport type { WorkerPoolManager } from '../worker';\nexport interface FileRenderProps<LAnnotation> {\n file: FileContents;\n fileContainer?: HTMLElement;\n containerWrapper?: HTMLElement;\n forceRender?: boolean;\n lineAnnotations?: LineAnnotation<LAnnotation>[];\n renderRange?: RenderRange;\n}\nexport interface FileHyrdateProps<LAnnotation> extends Omit<FileRenderProps<LAnnotation>, 'fileContainer'> {\n fileContainer: HTMLElement;\n prerenderedHTML?: string;\n}\nexport interface FileOptions<LAnnotation> extends BaseCodeOptions, MouseEventManagerBaseOptions<'file'>, LineSelectionOptions {\n disableFileHeader?: boolean;\n renderCustomMetadata?: RenderFileMetadata;\n /**\n * When true, errors during rendering are rethrown instead of being caught\n * and displayed in the DOM. Useful for testing or when you want to handle\n * errors yourself.\n */\n disableErrorHandling?: boolean;\n renderAnnotation?(annotation: LineAnnotation<LAnnotation>): HTMLElement | undefined;\n renderHoverUtility?(getHoveredRow: () => GetHoveredLineResult<'file'> | undefined): HTMLElement | null;\n}\ninterface AnnotationElementCache<LAnnotation> {\n element: HTMLElement;\n annotation: LineAnnotation<LAnnotation>;\n}\nexport declare class File<LAnnotation = undefined> {\n options: FileOptions<LAnnotation>;\n private workerManager?;\n private isContainerManaged;\n static LoadedCustomComponent: boolean;\n readonly __id: string;\n protected fileContainer: HTMLElement | undefined;\n protected spriteSVG: SVGElement | undefined;\n protected pre: HTMLPreElement | undefined;\n protected code: HTMLElement | undefined;\n protected bufferBefore: HTMLElement | undefined;\n protected bufferAfter: HTMLElement | undefined;\n protected unsafeCSSStyle: HTMLStyleElement | undefined;\n protected hoverContent: HTMLElement | undefined;\n protected errorWrapper: HTMLElement | undefined;\n protected placeHolder: HTMLElement | undefined;\n protected lastRenderedHeaderHTML: string | undefined;\n protected appliedPreAttributes: PrePropertiesConfig | undefined;\n protected lastRowCount: number | undefined;\n protected headerElement: HTMLElement | undefined;\n protected headerMetadata: HTMLElement | undefined;\n protected fileRenderer: FileRenderer<LAnnotation>;\n protected resizeManager: ResizeManager;\n protected mouseEventManager: MouseEventManager<'file'>;\n protected lineSelectionManager: LineSelectionManager;\n protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>>;\n protected lineAnnotations: LineAnnotation<LAnnotation>[];\n protected file: FileContents | undefined;\n protected renderRange: RenderRange | undefined;\n constructor(options?: FileOptions<LAnnotation>, workerManager?: WorkerPoolManager | undefined, isContainerManaged?: boolean);\n private handleHighlightRender;\n rerender(): void;\n setOptions(options: FileOptions<LAnnotation> | undefined): void;\n private mergeOptions;\n setThemeType(themeType: ThemeTypes): void;\n getHoveredLine: () => {\n lineNumber: number;\n } | undefined;\n setLineAnnotations(lineAnnotations: LineAnnotation<LAnnotation>[]): void;\n setSelectedLines(range: SelectedLineRange | null): void;\n cleanUp(): void;\n hydrate(props: FileHyrdateProps<LAnnotation>): void;\n getOrCreateLineCache(file?: FileContents | undefined): string[];\n render({ file, fileContainer, forceRender, containerWrapper, lineAnnotations, renderRange }: FileRenderProps<LAnnotation>): boolean;\n private canPartiallyRender;\n renderPlaceholder(height: number): boolean;\n private cleanChildNodes;\n private renderAnnotations;\n private renderHoverUtility;\n private injectUnsafeCSS;\n private applyFullRender;\n private applyPartialRender;\n private getColumns;\n private trimDOMToOverlap;\n private getDOMBoundaryIndices;\n private getLineIndexFromDOMNode;\n private applyBuffers;\n private applyHeaderToDOM;\n protected getOrCreateFileContainerNode(fileContainer?: HTMLElement, parentNode?: HTMLElement): HTMLElement;\n private getOrCreatePreNode;\n private applyPreNodeAttributes;\n private applyErrorToDOM;\n private cleanupErrorWrapper;\n}\nexport {};\n//# sourceMappingURL=File.d.ts.map"],"mappings":"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"}
|
package/dist/components/File.js
CHANGED
|
@@ -2,6 +2,7 @@ import { DEFAULT_THEMES, DIFFS_TAG_NAME, HEADER_METADATA_SLOT_ID, UNSAFE_CSS_ATT
|
|
|
2
2
|
import { LineSelectionManager, pluckLineSelectionOptions } from "../managers/LineSelectionManager.js";
|
|
3
3
|
import { MouseEventManager, pluckMouseEventOptions } from "../managers/MouseEventManager.js";
|
|
4
4
|
import { ResizeManager } from "../managers/ResizeManager.js";
|
|
5
|
+
import { areRenderRangesEqual } from "../utils/areRenderRangesEqual.js";
|
|
5
6
|
import { getLineAnnotationName } from "../utils/getLineAnnotationName.js";
|
|
6
7
|
import { FileRenderer } from "../renderers/FileRenderer.js";
|
|
7
8
|
import { SVGSpriteSheet } from "../sprite.js";
|
|
@@ -19,6 +20,7 @@ import { DiffsContainerLoaded } from "./web-components.js";
|
|
|
19
20
|
import { toHtml } from "hast-util-to-html";
|
|
20
21
|
|
|
21
22
|
//#region src/components/File.ts
|
|
23
|
+
const EMPTY_STRINGS = [];
|
|
22
24
|
let instanceId = -1;
|
|
23
25
|
var File = class {
|
|
24
26
|
static LoadedCustomComponent = DiffsContainerLoaded;
|
|
@@ -27,11 +29,15 @@ var File = class {
|
|
|
27
29
|
spriteSVG;
|
|
28
30
|
pre;
|
|
29
31
|
code;
|
|
32
|
+
bufferBefore;
|
|
33
|
+
bufferAfter;
|
|
30
34
|
unsafeCSSStyle;
|
|
31
35
|
hoverContent;
|
|
32
36
|
errorWrapper;
|
|
37
|
+
placeHolder;
|
|
33
38
|
lastRenderedHeaderHTML;
|
|
34
39
|
appliedPreAttributes;
|
|
40
|
+
lastRowCount;
|
|
35
41
|
headerElement;
|
|
36
42
|
headerMetadata;
|
|
37
43
|
fileRenderer;
|
|
@@ -41,6 +47,7 @@ var File = class {
|
|
|
41
47
|
annotationCache = /* @__PURE__ */ new Map();
|
|
42
48
|
lineAnnotations = [];
|
|
43
49
|
file;
|
|
50
|
+
renderRange;
|
|
44
51
|
constructor(options = { theme: DEFAULT_THEMES }, workerManager, isContainerManaged = false) {
|
|
45
52
|
this.options = options;
|
|
46
53
|
this.workerManager = workerManager;
|
|
@@ -58,7 +65,8 @@ var File = class {
|
|
|
58
65
|
if (this.file == null) return;
|
|
59
66
|
this.render({
|
|
60
67
|
file: this.file,
|
|
61
|
-
forceRender: true
|
|
68
|
+
forceRender: true,
|
|
69
|
+
renderRange: this.renderRange
|
|
62
70
|
});
|
|
63
71
|
}
|
|
64
72
|
setOptions(options) {
|
|
@@ -105,16 +113,21 @@ var File = class {
|
|
|
105
113
|
this.lineSelectionManager.cleanUp();
|
|
106
114
|
this.workerManager?.unsubscribeToThemeChanges(this);
|
|
107
115
|
this.workerManager = void 0;
|
|
116
|
+
this.renderRange = void 0;
|
|
108
117
|
this.file = void 0;
|
|
109
118
|
if (!this.isContainerManaged) this.fileContainer?.parentNode?.removeChild(this.fileContainer);
|
|
110
119
|
if (this.fileContainer?.shadowRoot != null) this.fileContainer.shadowRoot.innerHTML = "";
|
|
111
120
|
this.fileContainer = void 0;
|
|
112
121
|
this.pre = void 0;
|
|
122
|
+
this.bufferBefore = void 0;
|
|
123
|
+
this.bufferAfter = void 0;
|
|
113
124
|
this.appliedPreAttributes = void 0;
|
|
125
|
+
this.lastRowCount = void 0;
|
|
114
126
|
this.headerElement = void 0;
|
|
115
127
|
this.lastRenderedHeaderHTML = void 0;
|
|
116
128
|
this.errorWrapper = void 0;
|
|
117
129
|
this.unsafeCSSStyle = void 0;
|
|
130
|
+
this.placeHolder = void 0;
|
|
118
131
|
}
|
|
119
132
|
hydrate(props) {
|
|
120
133
|
const { fileContainer, prerenderedHTML } = props;
|
|
@@ -143,6 +156,7 @@ var File = class {
|
|
|
143
156
|
if (this.pre == null) this.render(props);
|
|
144
157
|
else {
|
|
145
158
|
const { file, lineAnnotations } = props;
|
|
159
|
+
const { overflow = "scroll" } = this.options;
|
|
146
160
|
this.fileContainer = fileContainer;
|
|
147
161
|
delete this.pre.dataset.dehydrated;
|
|
148
162
|
this.lineAnnotations = lineAnnotations ?? this.lineAnnotations;
|
|
@@ -153,17 +167,23 @@ var File = class {
|
|
|
153
167
|
this.injectUnsafeCSS();
|
|
154
168
|
this.mouseEventManager.setup(this.pre);
|
|
155
169
|
this.lineSelectionManager.setup(this.pre);
|
|
156
|
-
|
|
170
|
+
this.resizeManager.setup(this.pre, overflow === "wrap");
|
|
157
171
|
}
|
|
158
172
|
}
|
|
159
|
-
|
|
173
|
+
getOrCreateLineCache(file = this.file) {
|
|
174
|
+
return file != null ? this.fileRenderer.getOrCreateLineCache(file) : EMPTY_STRINGS;
|
|
175
|
+
}
|
|
176
|
+
render({ file, fileContainer, forceRender = false, containerWrapper, lineAnnotations, renderRange }) {
|
|
177
|
+
const previousRenderRange = this.renderRange;
|
|
160
178
|
const annotationsChanged = lineAnnotations != null && (lineAnnotations.length > 0 || this.lineAnnotations.length > 0) ? lineAnnotations !== this.lineAnnotations : false;
|
|
161
|
-
|
|
179
|
+
const didFileChange = !areFilesEqual(this.file, file);
|
|
180
|
+
if (!forceRender && areRenderRangesEqual(renderRange, this.renderRange) && !didFileChange && !annotationsChanged) return false;
|
|
181
|
+
this.renderRange = renderRange;
|
|
162
182
|
this.file = file;
|
|
163
183
|
this.fileRenderer.setOptions(this.options);
|
|
164
184
|
if (lineAnnotations != null) this.setLineAnnotations(lineAnnotations);
|
|
165
185
|
this.fileRenderer.setLineAnnotations(this.lineAnnotations);
|
|
166
|
-
const { disableFileHeader = false } = this.options;
|
|
186
|
+
const { disableErrorHandling = false, disableFileHeader = false, overflow = "scroll" } = this.options;
|
|
167
187
|
if (disableFileHeader) {
|
|
168
188
|
if (this.headerElement != null) {
|
|
169
189
|
this.headerElement.parentNode?.removeChild(this.headerElement);
|
|
@@ -173,22 +193,70 @@ var File = class {
|
|
|
173
193
|
}
|
|
174
194
|
fileContainer = this.getOrCreateFileContainerNode(fileContainer, containerWrapper);
|
|
175
195
|
try {
|
|
176
|
-
const fileResult = this.fileRenderer.renderFile(file);
|
|
177
|
-
if (fileResult == null) {
|
|
178
|
-
if (this.workerManager != null && !this.workerManager.isInitialized()) this.workerManager.initialize().then(() => this.rerender());
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
if (fileResult.headerAST != null) this.applyHeaderToDOM(fileResult.headerAST, fileContainer);
|
|
182
196
|
const pre = this.getOrCreatePreNode(fileContainer);
|
|
183
|
-
this.
|
|
197
|
+
if (!this.canPartiallyRender(forceRender, annotationsChanged, didFileChange) || !this.applyPartialRender(previousRenderRange, renderRange)) {
|
|
198
|
+
const fileResult = this.fileRenderer.renderFile(file, renderRange);
|
|
199
|
+
if (fileResult == null) {
|
|
200
|
+
if (this.workerManager?.isInitialized() === false) this.workerManager.initialize().then(() => this.rerender());
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
if (fileResult.headerAST != null) this.applyHeaderToDOM(fileResult.headerAST, fileContainer);
|
|
204
|
+
this.applyFullRender(fileResult, pre);
|
|
205
|
+
}
|
|
206
|
+
this.applyBuffers(pre, renderRange);
|
|
207
|
+
this.injectUnsafeCSS();
|
|
208
|
+
this.mouseEventManager.setup(pre);
|
|
209
|
+
this.lineSelectionManager.setup(pre);
|
|
210
|
+
this.resizeManager.setup(pre, overflow === "wrap");
|
|
184
211
|
this.renderAnnotations();
|
|
185
212
|
this.renderHoverUtility();
|
|
186
213
|
} catch (error) {
|
|
187
|
-
if (
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}
|
|
214
|
+
if (disableErrorHandling) throw error;
|
|
215
|
+
console.error(error);
|
|
216
|
+
if (error instanceof Error) this.applyErrorToDOM(error, fileContainer);
|
|
191
217
|
}
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
canPartiallyRender(forceRender, annotationsChanged, didContentChange) {
|
|
221
|
+
if (forceRender || annotationsChanged || didContentChange) return false;
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
renderPlaceholder(height) {
|
|
225
|
+
if (this.fileContainer == null) return false;
|
|
226
|
+
this.cleanChildNodes();
|
|
227
|
+
if (this.placeHolder == null) {
|
|
228
|
+
const shadowRoot = this.fileContainer.shadowRoot ?? this.fileContainer.attachShadow({ mode: "open" });
|
|
229
|
+
this.placeHolder = document.createElement("div");
|
|
230
|
+
this.placeHolder.dataset.placeholder = "";
|
|
231
|
+
shadowRoot.appendChild(this.placeHolder);
|
|
232
|
+
}
|
|
233
|
+
this.placeHolder.style.setProperty("height", `${height}px`);
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
cleanChildNodes() {
|
|
237
|
+
this.resizeManager.cleanUp();
|
|
238
|
+
this.mouseEventManager.cleanUp();
|
|
239
|
+
this.lineSelectionManager.cleanUp();
|
|
240
|
+
this.bufferAfter?.remove();
|
|
241
|
+
this.bufferBefore?.remove();
|
|
242
|
+
this.code?.remove();
|
|
243
|
+
this.errorWrapper?.remove();
|
|
244
|
+
this.headerElement?.remove();
|
|
245
|
+
this.hoverContent?.remove();
|
|
246
|
+
this.pre?.remove();
|
|
247
|
+
this.spriteSVG?.remove();
|
|
248
|
+
this.unsafeCSSStyle?.remove();
|
|
249
|
+
this.bufferAfter = void 0;
|
|
250
|
+
this.bufferBefore = void 0;
|
|
251
|
+
this.code = void 0;
|
|
252
|
+
this.errorWrapper = void 0;
|
|
253
|
+
this.headerElement = void 0;
|
|
254
|
+
this.hoverContent = void 0;
|
|
255
|
+
this.pre = void 0;
|
|
256
|
+
this.spriteSVG = void 0;
|
|
257
|
+
this.unsafeCSSStyle = void 0;
|
|
258
|
+
this.lastRenderedHeaderHTML = void 0;
|
|
259
|
+
this.lastRowCount = void 0;
|
|
192
260
|
}
|
|
193
261
|
renderAnnotations() {
|
|
194
262
|
if (this.isContainerManaged || this.fileContainer == null) {
|
|
@@ -250,23 +318,150 @@ var File = class {
|
|
|
250
318
|
}
|
|
251
319
|
this.unsafeCSSStyle.innerText = wrapUnsafeCSS(unsafeCSS);
|
|
252
320
|
}
|
|
253
|
-
|
|
321
|
+
applyFullRender(result, pre) {
|
|
254
322
|
this.cleanupErrorWrapper();
|
|
255
323
|
this.applyPreNodeAttributes(pre, result);
|
|
256
324
|
this.code = getOrCreateCodeNode({ code: this.code });
|
|
257
|
-
this.code.innerHTML = this.fileRenderer.renderPartialHTML(result
|
|
325
|
+
this.code.innerHTML = this.fileRenderer.renderPartialHTML(this.fileRenderer.renderCodeAST(result));
|
|
258
326
|
pre.replaceChildren(this.code);
|
|
259
|
-
this.
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
327
|
+
this.lastRowCount = result.rowCount;
|
|
328
|
+
}
|
|
329
|
+
applyPartialRender(previousRenderRange, renderRange) {
|
|
330
|
+
if (previousRenderRange == null || renderRange == null) return false;
|
|
331
|
+
const { file, code } = this;
|
|
332
|
+
const columns = code != null ? this.getColumns(code) : void 0;
|
|
333
|
+
if (file == null || code == null || columns == null) return false;
|
|
334
|
+
const previousStart = previousRenderRange.startingLine;
|
|
335
|
+
const nextStart = renderRange.startingLine;
|
|
336
|
+
const previousEnd = previousRenderRange.totalLines === Infinity ? Number.POSITIVE_INFINITY : previousStart + previousRenderRange.totalLines;
|
|
337
|
+
const nextEnd = renderRange.totalLines === Infinity ? Number.POSITIVE_INFINITY : nextStart + renderRange.totalLines;
|
|
338
|
+
const overlapStart = Math.max(previousStart, nextStart);
|
|
339
|
+
const overlapEnd = Math.min(previousEnd, nextEnd);
|
|
340
|
+
if (overlapEnd <= overlapStart) return false;
|
|
341
|
+
if (!this.trimDOMToOverlap(columns.gutter, overlapStart, overlapEnd) || !this.trimDOMToOverlap(columns.content, overlapStart, overlapEnd)) return false;
|
|
342
|
+
let { length: rowCount } = columns.content.children;
|
|
343
|
+
const renderChunk = (startingLine, totalLines) => {
|
|
344
|
+
if (totalLines <= 0) return;
|
|
345
|
+
return this.fileRenderer.renderFile(file, {
|
|
346
|
+
startingLine,
|
|
347
|
+
totalLines,
|
|
348
|
+
bufferBefore: 0,
|
|
349
|
+
bufferAfter: 0
|
|
350
|
+
});
|
|
351
|
+
};
|
|
352
|
+
const prependResult = nextStart < overlapStart ? renderChunk(nextStart, overlapStart - nextStart) : void 0;
|
|
353
|
+
if (prependResult === void 0 && nextStart < overlapStart) return false;
|
|
354
|
+
const appendTotalLines = nextEnd === Number.POSITIVE_INFINITY ? Number.POSITIVE_INFINITY : Math.max(0, nextEnd - overlapEnd);
|
|
355
|
+
const appendResult = nextEnd > overlapEnd ? renderChunk(overlapEnd, appendTotalLines) : void 0;
|
|
356
|
+
if (appendResult === void 0 && nextEnd > overlapEnd) return false;
|
|
357
|
+
this.cleanupErrorWrapper();
|
|
358
|
+
if (prependResult != null) {
|
|
359
|
+
columns.gutter.insertAdjacentHTML("afterbegin", this.fileRenderer.renderPartialHTML(prependResult.gutterAST));
|
|
360
|
+
columns.content.insertAdjacentHTML("afterbegin", this.fileRenderer.renderPartialHTML(prependResult.contentAST));
|
|
361
|
+
rowCount += prependResult.rowCount;
|
|
362
|
+
}
|
|
363
|
+
if (appendResult != null) {
|
|
364
|
+
columns.gutter.insertAdjacentHTML("beforeend", this.fileRenderer.renderPartialHTML(appendResult.gutterAST));
|
|
365
|
+
columns.content.insertAdjacentHTML("beforeend", this.fileRenderer.renderPartialHTML(appendResult.contentAST));
|
|
366
|
+
rowCount += appendResult.rowCount;
|
|
367
|
+
}
|
|
368
|
+
if (this.lastRowCount !== rowCount) {
|
|
369
|
+
columns.gutter.style.setProperty("grid-row", `span ${rowCount}`);
|
|
370
|
+
columns.content.style.setProperty("grid-row", `span ${rowCount}`);
|
|
371
|
+
this.lastRowCount = rowCount;
|
|
372
|
+
}
|
|
373
|
+
return true;
|
|
374
|
+
}
|
|
375
|
+
getColumns(code) {
|
|
376
|
+
const gutter = code.children[0];
|
|
377
|
+
const content = code.children[1];
|
|
378
|
+
if (!(gutter instanceof HTMLElement) || !(content instanceof HTMLElement) || gutter.dataset.gutter == null || content.dataset.content == null) return;
|
|
379
|
+
return {
|
|
380
|
+
gutter,
|
|
381
|
+
content
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
trimDOMToOverlap(container, overlapStart, overlapEnd) {
|
|
385
|
+
const boundaryIndices = this.getDOMBoundaryIndices(container, [overlapStart, overlapEnd]);
|
|
386
|
+
const startIndex = boundaryIndices.get(overlapStart) ?? container.children.length;
|
|
387
|
+
const endIndex = boundaryIndices.get(overlapEnd) ?? container.children.length;
|
|
388
|
+
if (startIndex > endIndex) return false;
|
|
389
|
+
for (let i = container.children.length - 1; i >= endIndex; i -= 1) container.children[i]?.remove();
|
|
390
|
+
for (let i = startIndex - 1; i >= 0; i -= 1) container.children[i]?.remove();
|
|
391
|
+
return true;
|
|
392
|
+
}
|
|
393
|
+
getDOMBoundaryIndices(container, boundaries) {
|
|
394
|
+
const sortedBoundaries = [...new Set(boundaries)].sort((a, b) => a - b);
|
|
395
|
+
const boundaryIndices = /* @__PURE__ */ new Map();
|
|
396
|
+
if (sortedBoundaries.length === 0) return boundaryIndices;
|
|
397
|
+
let boundaryIndex = 0;
|
|
398
|
+
let nextBoundary = sortedBoundaries[boundaryIndex];
|
|
399
|
+
const { children } = container;
|
|
400
|
+
for (let i = 0; i < children.length; i += 1) {
|
|
401
|
+
const child = children[i];
|
|
402
|
+
if (!(child instanceof HTMLElement)) continue;
|
|
403
|
+
const lineIndex = this.getLineIndexFromDOMNode(child);
|
|
404
|
+
if (lineIndex == null) continue;
|
|
405
|
+
while (nextBoundary != null && lineIndex >= nextBoundary) {
|
|
406
|
+
boundaryIndices.set(nextBoundary, i);
|
|
407
|
+
boundaryIndex += 1;
|
|
408
|
+
nextBoundary = sortedBoundaries[boundaryIndex];
|
|
409
|
+
}
|
|
410
|
+
if (boundaryIndex >= sortedBoundaries.length) break;
|
|
411
|
+
}
|
|
412
|
+
for (const boundary of sortedBoundaries) if (!boundaryIndices.has(boundary)) boundaryIndices.set(boundary, children.length);
|
|
413
|
+
return boundaryIndices;
|
|
414
|
+
}
|
|
415
|
+
getLineIndexFromDOMNode(node) {
|
|
416
|
+
const lineIndexAttr = node.dataset.lineIndex;
|
|
417
|
+
if (lineIndexAttr == null) return;
|
|
418
|
+
const parsed = Number(lineIndexAttr);
|
|
419
|
+
return Number.isNaN(parsed) ? void 0 : parsed;
|
|
420
|
+
}
|
|
421
|
+
applyBuffers(pre, renderRange) {
|
|
422
|
+
const { disableVirtualizationBuffers = false } = this.options;
|
|
423
|
+
if (disableVirtualizationBuffers || renderRange == null) {
|
|
424
|
+
if (this.bufferBefore != null) {
|
|
425
|
+
this.bufferBefore.parentNode?.removeChild(this.bufferBefore);
|
|
426
|
+
this.bufferBefore = void 0;
|
|
427
|
+
}
|
|
428
|
+
if (this.bufferAfter != null) {
|
|
429
|
+
this.bufferAfter.parentNode?.removeChild(this.bufferAfter);
|
|
430
|
+
this.bufferAfter = void 0;
|
|
431
|
+
}
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
if (renderRange.bufferBefore > 0) {
|
|
435
|
+
if (this.bufferBefore == null) {
|
|
436
|
+
this.bufferBefore = document.createElement("div");
|
|
437
|
+
this.bufferBefore.dataset.virtualizerBuffer = "before";
|
|
438
|
+
pre.before(this.bufferBefore);
|
|
439
|
+
}
|
|
440
|
+
this.bufferBefore.style.setProperty("height", `${renderRange.bufferBefore}px`);
|
|
441
|
+
this.bufferBefore.style.setProperty("contain", "strict");
|
|
442
|
+
} else if (this.bufferBefore != null) {
|
|
443
|
+
this.bufferBefore.parentNode?.removeChild(this.bufferBefore);
|
|
444
|
+
this.bufferBefore = void 0;
|
|
445
|
+
}
|
|
446
|
+
if (renderRange.bufferAfter > 0) {
|
|
447
|
+
if (this.bufferAfter == null) {
|
|
448
|
+
this.bufferAfter = document.createElement("div");
|
|
449
|
+
this.bufferAfter.dataset.virtualizerBuffer = "after";
|
|
450
|
+
pre.after(this.bufferAfter);
|
|
451
|
+
}
|
|
452
|
+
this.bufferAfter.style.setProperty("height", `${renderRange.bufferAfter}px`);
|
|
453
|
+
this.bufferAfter.style.setProperty("contain", "strict");
|
|
454
|
+
} else if (this.bufferAfter != null) {
|
|
455
|
+
this.bufferAfter.parentNode?.removeChild(this.bufferAfter);
|
|
456
|
+
this.bufferAfter = void 0;
|
|
457
|
+
}
|
|
265
458
|
}
|
|
266
459
|
applyHeaderToDOM(headerAST, container) {
|
|
267
460
|
const { file } = this;
|
|
268
461
|
if (file == null) return;
|
|
269
462
|
this.cleanupErrorWrapper();
|
|
463
|
+
this.placeHolder?.remove();
|
|
464
|
+
this.placeHolder = void 0;
|
|
270
465
|
const headerHTML = toHtml(headerAST);
|
|
271
466
|
if (headerHTML !== this.lastRenderedHeaderHTML) {
|
|
272
467
|
const tempDiv = document.createElement("div");
|
|
@@ -310,19 +505,24 @@ var File = class {
|
|
|
310
505
|
return this.fileContainer;
|
|
311
506
|
}
|
|
312
507
|
getOrCreatePreNode(container) {
|
|
508
|
+
const shadowRoot = container.shadowRoot ?? container.attachShadow({ mode: "open" });
|
|
313
509
|
if (this.pre == null) {
|
|
314
510
|
this.pre = document.createElement("pre");
|
|
315
|
-
container.shadowRoot?.appendChild(this.pre);
|
|
316
511
|
this.appliedPreAttributes = void 0;
|
|
317
|
-
|
|
512
|
+
this.code = void 0;
|
|
513
|
+
shadowRoot.appendChild(this.pre);
|
|
514
|
+
} else if (this.pre.parentNode !== shadowRoot) {
|
|
318
515
|
container.shadowRoot?.appendChild(this.pre);
|
|
319
516
|
this.appliedPreAttributes = void 0;
|
|
320
517
|
}
|
|
518
|
+
this.placeHolder?.remove();
|
|
519
|
+
this.placeHolder = void 0;
|
|
321
520
|
return this.pre;
|
|
322
521
|
}
|
|
323
522
|
applyPreNodeAttributes(pre, { totalLines, themeStyles, baseThemeType }) {
|
|
324
523
|
const { overflow = "scroll", themeType = "system", disableLineNumbers = false } = this.options;
|
|
325
524
|
const preProperties = {
|
|
525
|
+
type: "file",
|
|
326
526
|
split: false,
|
|
327
527
|
themeStyles,
|
|
328
528
|
overflow,
|