@pierre/diffs 1.1.0-beta.16 → 1.1.0-beta.17
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/dist/components/AdvancedVirtualizedFileDiff.d.ts.map +1 -1
- package/dist/components/AdvancedVirtualizedFileDiff.js +2 -7
- package/dist/components/AdvancedVirtualizedFileDiff.js.map +1 -1
- package/dist/components/File.d.ts +14 -2
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +89 -23
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts +15 -3
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +101 -23
- package/dist/components/FileDiff.js.map +1 -1
- package/dist/components/VirtualizedFile.js +4 -2
- package/dist/components/VirtualizedFile.js.map +1 -1
- package/dist/components/VirtualizedFileDiff.js +4 -2
- package/dist/components/VirtualizedFileDiff.js.map +1 -1
- package/dist/components/Virtualizer.js +2 -1
- package/dist/components/Virtualizer.js.map +1 -1
- package/dist/constants.d.ts +3 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +8 -1
- package/dist/constants.js.map +1 -1
- package/dist/highlighter/shared_highlighter.js +12 -4
- package/dist/highlighter/shared_highlighter.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.js +5 -4
- package/dist/managers/MouseEventManager.d.ts +20 -5
- package/dist/managers/MouseEventManager.d.ts.map +1 -1
- package/dist/managers/MouseEventManager.js +91 -25
- package/dist/managers/MouseEventManager.js.map +1 -1
- package/dist/react/File.d.ts +2 -0
- package/dist/react/File.d.ts.map +1 -1
- package/dist/react/File.js +3 -1
- package/dist/react/File.js.map +1 -1
- package/dist/react/FileDiff.d.ts +2 -0
- package/dist/react/FileDiff.d.ts.map +1 -1
- package/dist/react/FileDiff.js +3 -1
- package/dist/react/FileDiff.js.map +1 -1
- package/dist/react/MultiFileDiff.d.ts +2 -0
- package/dist/react/MultiFileDiff.d.ts.map +1 -1
- package/dist/react/MultiFileDiff.js +3 -1
- package/dist/react/MultiFileDiff.js.map +1 -1
- package/dist/react/PatchDiff.d.ts +2 -0
- package/dist/react/PatchDiff.d.ts.map +1 -1
- package/dist/react/PatchDiff.js +3 -1
- package/dist/react/PatchDiff.js.map +1 -1
- package/dist/react/constants.d.ts +2 -2
- package/dist/react/constants.d.ts.map +1 -1
- package/dist/react/constants.js +2 -2
- package/dist/react/constants.js.map +1 -1
- package/dist/react/index.d.ts +3 -3
- package/dist/react/index.js +2 -2
- package/dist/react/types.d.ts +10 -0
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.d.ts +4 -0
- package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.js +17 -7
- package/dist/react/utils/renderDiffChildren.js.map +1 -1
- package/dist/react/utils/renderFileChildren.d.ts +4 -0
- package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
- package/dist/react/utils/renderFileChildren.js +13 -7
- package/dist/react/utils/renderFileChildren.js.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +3 -2
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/renderers/FileRenderer.js +1 -1
- package/dist/sprite.d.ts +2 -2
- package/dist/sprite.d.ts.map +1 -1
- package/dist/sprite.js +3 -0
- package/dist/sprite.js.map +1 -1
- package/dist/ssr/index.d.ts +2 -2
- package/dist/style.js +1 -1
- package/dist/style.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/createFileHeaderElement.js +5 -2
- package/dist/utils/createFileHeaderElement.js.map +1 -1
- package/dist/utils/createGutterUtilityContentNode.d.ts +5 -0
- package/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -0
- package/dist/utils/createGutterUtilityContentNode.js +15 -0
- package/dist/utils/createGutterUtilityContentNode.js.map +1 -0
- package/dist/utils/createGutterUtilityElement.d.ts +7 -0
- package/dist/utils/createGutterUtilityElement.d.ts.map +1 -0
- package/dist/utils/createGutterUtilityElement.js +20 -0
- package/dist/utils/createGutterUtilityElement.js.map +1 -0
- package/dist/utils/hast_utils.d.ts +1 -1
- package/dist/utils/hast_utils.d.ts.map +1 -1
- package/dist/utils/hast_utils.js.map +1 -1
- package/dist/worker/worker-portable.js +7 -0
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js.map +1 -1
- package/package.json +2 -1
- package/dist/themes/pierre-dark.js +0 -1328
- package/dist/themes/pierre-dark.js.map +0 -1
- package/dist/themes/pierre-light.js +0 -1328
- package/dist/themes/pierre-light.js.map +0 -1
- package/dist/utils/createHoverContentNode.d.ts +0 -5
- package/dist/utils/createHoverContentNode.d.ts.map +0 -1
- package/dist/utils/createHoverContentNode.js +0 -15
- package/dist/utils/createHoverContentNode.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedVirtualizedFileDiff.d.ts","names":["FileDiffMetadata","RenderRange","RenderWindow","VirtualFileMetrics","WorkerPoolManager","FileDiff","FileDiffOptions","RenderProps","HTMLElement","PositionProps","AdvancedVirtualizedFileDiff","LAnnotation","unifiedTop","splitTop","fileDiff","Partial","renderWindow","fileContainer"],"sources":["../../src/components/AdvancedVirtualizedFileDiff.d.ts"],"sourcesContent":["import type { FileDiffMetadata, RenderRange, RenderWindow, VirtualFileMetrics } from '../types';\nimport type { WorkerPoolManager } from '../worker';\nimport { FileDiff, type FileDiffOptions } from './FileDiff';\nexport type { FileDiffOptions };\ninterface RenderProps {\n fileContainer?: HTMLElement;\n renderWindow: RenderWindow;\n}\ninterface PositionProps {\n unifiedTop: number;\n splitTop: number;\n fileDiff: FileDiffMetadata;\n}\nexport declare class AdvancedVirtualizedFileDiff<LAnnotation = undefined> extends FileDiff<LAnnotation> {\n readonly __id: string;\n unifiedTop: number;\n splitTop: number;\n unifiedHeight: number;\n splitHeight: number;\n private metrics;\n fileDiff: FileDiffMetadata;\n renderedRange: RenderRange | undefined;\n constructor({ unifiedTop, splitTop, fileDiff }: PositionProps, options?: FileDiffOptions<LAnnotation>, metrics?: Partial<VirtualFileMetrics>, workerManager?: WorkerPoolManager | undefined);\n cleanUp(recycle?: boolean): void;\n private computeSize;\n virtualizedRender({ renderWindow, fileContainer }: RenderProps): void;\n private computeRenderRangeFromWindow;\n}\n//# sourceMappingURL=AdvancedVirtualizedFileDiff.d.ts.map"],"mappings":";;;;;;UAIUO,WAAAA;kBACUC;EADVD,YAAAA,EAEQL,
|
|
1
|
+
{"version":3,"file":"AdvancedVirtualizedFileDiff.d.ts","names":["FileDiffMetadata","RenderRange","RenderWindow","VirtualFileMetrics","WorkerPoolManager","FileDiff","FileDiffOptions","RenderProps","HTMLElement","PositionProps","AdvancedVirtualizedFileDiff","LAnnotation","unifiedTop","splitTop","fileDiff","Partial","renderWindow","fileContainer"],"sources":["../../src/components/AdvancedVirtualizedFileDiff.d.ts"],"sourcesContent":["import type { FileDiffMetadata, RenderRange, RenderWindow, VirtualFileMetrics } from '../types';\nimport type { WorkerPoolManager } from '../worker';\nimport { FileDiff, type FileDiffOptions } from './FileDiff';\nexport type { FileDiffOptions };\ninterface RenderProps {\n fileContainer?: HTMLElement;\n renderWindow: RenderWindow;\n}\ninterface PositionProps {\n unifiedTop: number;\n splitTop: number;\n fileDiff: FileDiffMetadata;\n}\nexport declare class AdvancedVirtualizedFileDiff<LAnnotation = undefined> extends FileDiff<LAnnotation> {\n readonly __id: string;\n unifiedTop: number;\n splitTop: number;\n unifiedHeight: number;\n splitHeight: number;\n private metrics;\n fileDiff: FileDiffMetadata;\n renderedRange: RenderRange | undefined;\n constructor({ unifiedTop, splitTop, fileDiff }: PositionProps, options?: FileDiffOptions<LAnnotation>, metrics?: Partial<VirtualFileMetrics>, workerManager?: WorkerPoolManager | undefined);\n cleanUp(recycle?: boolean): void;\n private computeSize;\n virtualizedRender({ renderWindow, fileContainer }: RenderProps): void;\n private computeRenderRangeFromWindow;\n}\n//# sourceMappingURL=AdvancedVirtualizedFileDiff.d.ts.map"],"mappings":";;;;;;UAIUO,WAAAA;kBACUC;EADVD,YAAAA,EAEQL,YAFG;AAES;AAO9B,UALUO,aAAAA,CAKWC;EAAsEC,UAAAA,EAAAA,MAAAA;EAO7EX,QAAAA,EAAAA,MAAAA;EACKC,QAAAA,EAVLD,gBAUKC;;AACWY,cATTH,2BASSG,CAAAA,cAAAA,SAAAA,CAAAA,SAToDR,QASpDQ,CAT6DF,WAS7DE,CAAAA,CAAAA;EAAUC,SAAAA,IAAAA,EAAAA,MAAAA;EAAYL,UAAAA,EAAAA,MAAAA;EAAyCE,QAAAA,EAAAA,MAAAA;EAAhBL,aAAAA,EAAAA,MAAAA;EAAgDH,WAAAA,EAAAA,MAAAA;EAARY,QAAAA,OAAAA;EAA6CX,QAAAA,EAFpJJ,gBAEoJI;EAG1IY,aAAAA,EAJLf,WAIKe,GAAAA,SAAAA;EAAcC,WAAAA,CAAAA;IAAAA,UAAAA;IAAAA,QAAAA;IAAAA;EAAAA,CAAAA,EAHcR,aAGdQ,EAAAA,OAAAA,CAAAA,EAHuCX,eAGvCW,CAHuDN,WAGvDM,CAAAA,EAAAA,OAAAA,CAAAA,EAH+EF,OAG/EE,CAHuFd,kBAGvFc,CAAAA,EAAAA,aAAAA,CAAAA,EAH4Hb,iBAG5Ha,GAAAA,SAAAA;EAAiBV,OAAAA,CAAAA,OAAAA,CAAAA,EAAAA,OAAAA,CAAAA,EAAAA,IAAAA;EAZ2BF,QAAAA,WAAAA;EAAQ,iBAAA,CAAA;IAAA,YAAA;IAAA;EAAA,CAAA,EAYnCE,WAZmC,CAAA,EAAA,IAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DEFAULT_THEMES } from "../constants.js";
|
|
1
|
+
import { DEFAULT_THEMES, EMPTY_RENDER_RANGE } from "../constants.js";
|
|
2
2
|
import { areRenderRangesEqual } from "../utils/areRenderRangesEqual.js";
|
|
3
3
|
import { FileDiff } from "./FileDiff.js";
|
|
4
4
|
import { resolveVirtualFileMetrics } from "../utils/resolveVirtualFileMetrics.js";
|
|
@@ -71,12 +71,7 @@ var AdvancedVirtualizedFileDiff = class extends FileDiff {
|
|
|
71
71
|
const { lineCount, fileTop, fileHeight } = getSpecs(this, diffStyle);
|
|
72
72
|
if (fileTop < top - fileHeight || fileTop > bottom) {
|
|
73
73
|
console.error("VirtulizedFileDiff.computeRenderRangeFromWindow: invalid render", this.fileDiff.name);
|
|
74
|
-
return
|
|
75
|
-
startingLine: 0,
|
|
76
|
-
totalLines: 0,
|
|
77
|
-
bufferBefore: 0,
|
|
78
|
-
bufferAfter: 0
|
|
79
|
-
};
|
|
74
|
+
return EMPTY_RENDER_RANGE;
|
|
80
75
|
}
|
|
81
76
|
if (lineCount <= hunkLineCount) return {
|
|
82
77
|
startingLine: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedVirtualizedFileDiff.js","names":["hunkOffsets: number[]","startingLine: number | undefined","hunkLineCount"],"sources":["../../src/components/AdvancedVirtualizedFileDiff.ts"],"sourcesContent":["import { DEFAULT_THEMES } from '../constants';\nimport type {\n FileDiffMetadata,\n RenderRange,\n RenderWindow,\n VirtualFileMetrics,\n} from '../types';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { resolveVirtualFileMetrics } from '../utils/resolveVirtualFileMetrics';\nimport type { WorkerPoolManager } from '../worker';\nimport { FileDiff, type FileDiffOptions } from './FileDiff';\n\nexport type { FileDiffOptions };\n\ninterface RenderProps {\n fileContainer?: HTMLElement;\n renderWindow: RenderWindow;\n}\n\ninterface PositionProps {\n unifiedTop: number;\n splitTop: number;\n fileDiff: FileDiffMetadata;\n}\n\nlet instanceId = -1;\n\nexport class AdvancedVirtualizedFileDiff<\n LAnnotation = undefined,\n> extends FileDiff<LAnnotation> {\n override readonly __id: string = `virtualized-file-diff:${++instanceId}`;\n\n public unifiedTop: number;\n public splitTop: number;\n public unifiedHeight: number = 0;\n public splitHeight: number = 0;\n private metrics: VirtualFileMetrics;\n\n override fileDiff: FileDiffMetadata;\n public renderedRange: RenderRange | undefined;\n\n constructor(\n { unifiedTop, splitTop, fileDiff }: PositionProps,\n options: FileDiffOptions<LAnnotation> = { theme: DEFAULT_THEMES },\n metrics?: Partial<VirtualFileMetrics>,\n workerManager?: WorkerPoolManager | undefined\n ) {\n super(options, workerManager, true);\n this.fileDiff = fileDiff;\n this.unifiedTop = unifiedTop;\n this.splitTop = splitTop;\n const { hunkSeparators = 'line-info' } = this.options;\n this.metrics = resolveVirtualFileMetrics(\n typeof hunkSeparators === 'function' ? 'custom' : hunkSeparators,\n metrics\n );\n this.computeSize();\n }\n\n override cleanUp(recycle = false): void {\n super.cleanUp(recycle);\n this.renderedRange = undefined;\n }\n\n private computeSize() {\n const {\n options: { disableFileHeader = false },\n fileDiff,\n metrics: { diffHeaderHeight, fileGap, hunkSeparatorHeight, lineHeight },\n } = this;\n\n // Add header height\n if (!disableFileHeader) {\n this.unifiedHeight += diffHeaderHeight;\n this.splitHeight += diffHeaderHeight;\n } else {\n this.unifiedHeight += fileGap;\n this.splitHeight += fileGap;\n }\n\n // NOTE(amadeus): I wonder if it's worth shortcutting this? It might help\n // to measure these values though and see if it's at all an issue on the\n // big bois\n for (const hunk of fileDiff.hunks) {\n this.unifiedHeight += hunk.unifiedLineCount * lineHeight;\n this.splitHeight += hunk.splitLineCount * lineHeight;\n }\n\n // Add hunk separators height\n const hunkCount = fileDiff.hunks.length;\n const [firstHunk] = fileDiff.hunks;\n if (firstHunk != null) {\n let hunkSize = (hunkSeparatorHeight + fileGap * 2) * (hunkCount - 1);\n if (firstHunk.additionStart > 1 || firstHunk.deletionStart > 1) {\n hunkSize += hunkSeparatorHeight + fileGap;\n }\n this.unifiedHeight += hunkSize;\n this.splitHeight += hunkSize;\n }\n\n // If there are hunks of code, then we gotta render some bottom padding\n if (hunkCount > 0) {\n this.unifiedHeight += fileGap;\n this.splitHeight += fileGap;\n }\n }\n\n virtualizedRender({ renderWindow, fileContainer }: RenderProps): void {\n const { fileDiff } = this;\n const renderRange = this.computeRenderRangeFromWindow(renderWindow);\n if (\n this.fileContainer != null &&\n areRenderRangesEqual(renderRange, this.renderedRange)\n ) {\n return;\n }\n this.renderedRange = renderRange;\n fileContainer = this.getOrCreateFileContainer(fileContainer);\n this.render({ fileDiff, fileContainer, renderRange });\n }\n\n private computeRenderRangeFromWindow({\n top,\n bottom,\n }: RenderWindow): RenderRange {\n const { diffStyle = 'split', disableFileHeader = false } = this.options;\n const {\n diffHeaderHeight,\n fileGap,\n hunkLineCount,\n hunkSeparatorHeight,\n lineHeight,\n } = this.metrics;\n const { lineCount, fileTop, fileHeight } = getSpecs(this, diffStyle);\n\n // We should never hit this theoretically, but if so, gtfo and yell loudly,\n // so we can fix\n if (fileTop < top - fileHeight || fileTop > bottom) {\n console.error(\n 'VirtulizedFileDiff.computeRenderRangeFromWindow: invalid render',\n this.fileDiff.name\n );\n return {\n startingLine: 0,\n totalLines: 0,\n bufferBefore: 0,\n bufferAfter: 0,\n };\n }\n\n // Whole file is under HUNK_LINE_COUNT, just render it all\n if (lineCount <= hunkLineCount) {\n return {\n startingLine: 0,\n totalLines: Infinity,\n bufferBefore: 0,\n bufferAfter: 0,\n };\n }\n\n const headerRegion = disableFileHeader ? fileGap : diffHeaderHeight;\n let absoluteLineTop = fileTop + headerRegion;\n let currentLine = 0;\n const hunkOffsets: number[] = [];\n let startingLine: number | undefined;\n let endingLine = 0;\n for (const hunk of this.fileDiff.hunks) {\n let hunkGap = 0;\n if (hunk.additionStart > 1 || hunk.deletionStart > 1) {\n hunkGap = hunkSeparatorHeight + fileGap;\n if (hunk !== this.fileDiff.hunks[0]) {\n hunkGap += fileGap;\n }\n absoluteLineTop += hunkGap;\n }\n const hunkLineCount =\n diffStyle === 'split' ? hunk.splitLineCount : hunk.unifiedLineCount;\n for (let l = 0; l < hunkLineCount; l++) {\n if (currentLine % hunkLineCount === 0) {\n hunkOffsets.push(\n absoluteLineTop - (fileTop + headerRegion + (l === 0 ? hunkGap : 0))\n );\n }\n if (\n startingLine == null &&\n absoluteLineTop > top - lineHeight &&\n absoluteLineTop < bottom\n ) {\n startingLine = currentLine;\n endingLine = startingLine + 1;\n } else if (startingLine != null && absoluteLineTop < bottom) {\n endingLine++;\n }\n currentLine++;\n absoluteLineTop += lineHeight;\n }\n }\n\n if (startingLine == null) {\n return {\n startingLine: 0,\n totalLines: 0,\n bufferBefore: fileHeight - headerRegion,\n bufferAfter: 0,\n };\n }\n\n startingLine = Math.floor(startingLine / hunkLineCount) * hunkLineCount;\n const totalLines =\n Math.ceil((endingLine - startingLine) / hunkLineCount) * hunkLineCount;\n\n const finalHunkBufferOffset = (startingLine + totalLines) / hunkLineCount;\n const bufferBefore = hunkOffsets[startingLine / hunkLineCount] ?? 0;\n const bufferAfter =\n finalHunkBufferOffset < hunkOffsets.length\n ? fileHeight -\n headerRegion -\n hunkOffsets[finalHunkBufferOffset] -\n fileGap // this is to account for bottom padding of the code container\n : 0;\n return { startingLine, totalLines, bufferBefore, bufferAfter };\n }\n}\n\nfunction getSpecs<LAnnotation>(\n instance: AdvancedVirtualizedFileDiff<LAnnotation>,\n type: 'split' | 'unified' = 'split'\n) {\n if (type === 'split') {\n return {\n lineCount: instance.fileDiff.splitLineCount,\n fileTop: instance.splitTop,\n fileHeight: instance.splitHeight,\n };\n }\n return {\n lineCount: instance.fileDiff.unifiedLineCount,\n fileTop: instance.unifiedTop,\n fileHeight: instance.unifiedHeight,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdvancedVirtualizedFileDiff.js","names":["hunkOffsets: number[]","startingLine: number | undefined","hunkLineCount"],"sources":["../../src/components/AdvancedVirtualizedFileDiff.ts"],"sourcesContent":["import { DEFAULT_THEMES, EMPTY_RENDER_RANGE } from '../constants';\nimport type {\n FileDiffMetadata,\n RenderRange,\n RenderWindow,\n VirtualFileMetrics,\n} from '../types';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { resolveVirtualFileMetrics } from '../utils/resolveVirtualFileMetrics';\nimport type { WorkerPoolManager } from '../worker';\nimport { FileDiff, type FileDiffOptions } from './FileDiff';\n\nexport type { FileDiffOptions };\n\ninterface RenderProps {\n fileContainer?: HTMLElement;\n renderWindow: RenderWindow;\n}\n\ninterface PositionProps {\n unifiedTop: number;\n splitTop: number;\n fileDiff: FileDiffMetadata;\n}\n\nlet instanceId = -1;\n\nexport class AdvancedVirtualizedFileDiff<\n LAnnotation = undefined,\n> extends FileDiff<LAnnotation> {\n override readonly __id: string = `virtualized-file-diff:${++instanceId}`;\n\n public unifiedTop: number;\n public splitTop: number;\n public unifiedHeight: number = 0;\n public splitHeight: number = 0;\n private metrics: VirtualFileMetrics;\n\n override fileDiff: FileDiffMetadata;\n public renderedRange: RenderRange | undefined;\n\n constructor(\n { unifiedTop, splitTop, fileDiff }: PositionProps,\n options: FileDiffOptions<LAnnotation> = { theme: DEFAULT_THEMES },\n metrics?: Partial<VirtualFileMetrics>,\n workerManager?: WorkerPoolManager | undefined\n ) {\n super(options, workerManager, true);\n this.fileDiff = fileDiff;\n this.unifiedTop = unifiedTop;\n this.splitTop = splitTop;\n const { hunkSeparators = 'line-info' } = this.options;\n this.metrics = resolveVirtualFileMetrics(\n typeof hunkSeparators === 'function' ? 'custom' : hunkSeparators,\n metrics\n );\n this.computeSize();\n }\n\n override cleanUp(recycle = false): void {\n super.cleanUp(recycle);\n this.renderedRange = undefined;\n }\n\n private computeSize() {\n const {\n options: { disableFileHeader = false },\n fileDiff,\n metrics: { diffHeaderHeight, fileGap, hunkSeparatorHeight, lineHeight },\n } = this;\n\n // Add header height\n if (!disableFileHeader) {\n this.unifiedHeight += diffHeaderHeight;\n this.splitHeight += diffHeaderHeight;\n } else {\n this.unifiedHeight += fileGap;\n this.splitHeight += fileGap;\n }\n\n // NOTE(amadeus): I wonder if it's worth shortcutting this? It might help\n // to measure these values though and see if it's at all an issue on the\n // big bois\n for (const hunk of fileDiff.hunks) {\n this.unifiedHeight += hunk.unifiedLineCount * lineHeight;\n this.splitHeight += hunk.splitLineCount * lineHeight;\n }\n\n // Add hunk separators height\n const hunkCount = fileDiff.hunks.length;\n const [firstHunk] = fileDiff.hunks;\n if (firstHunk != null) {\n let hunkSize = (hunkSeparatorHeight + fileGap * 2) * (hunkCount - 1);\n if (firstHunk.additionStart > 1 || firstHunk.deletionStart > 1) {\n hunkSize += hunkSeparatorHeight + fileGap;\n }\n this.unifiedHeight += hunkSize;\n this.splitHeight += hunkSize;\n }\n\n // If there are hunks of code, then we gotta render some bottom padding\n if (hunkCount > 0) {\n this.unifiedHeight += fileGap;\n this.splitHeight += fileGap;\n }\n }\n\n virtualizedRender({ renderWindow, fileContainer }: RenderProps): void {\n const { fileDiff } = this;\n const renderRange = this.computeRenderRangeFromWindow(renderWindow);\n if (\n this.fileContainer != null &&\n areRenderRangesEqual(renderRange, this.renderedRange)\n ) {\n return;\n }\n this.renderedRange = renderRange;\n fileContainer = this.getOrCreateFileContainer(fileContainer);\n this.render({ fileDiff, fileContainer, renderRange });\n }\n\n private computeRenderRangeFromWindow({\n top,\n bottom,\n }: RenderWindow): RenderRange {\n const { diffStyle = 'split', disableFileHeader = false } = this.options;\n const {\n diffHeaderHeight,\n fileGap,\n hunkLineCount,\n hunkSeparatorHeight,\n lineHeight,\n } = this.metrics;\n const { lineCount, fileTop, fileHeight } = getSpecs(this, diffStyle);\n\n // We should never hit this theoretically, but if so, gtfo and yell loudly,\n // so we can fix\n if (fileTop < top - fileHeight || fileTop > bottom) {\n console.error(\n 'VirtulizedFileDiff.computeRenderRangeFromWindow: invalid render',\n this.fileDiff.name\n );\n return EMPTY_RENDER_RANGE;\n }\n\n // Whole file is under HUNK_LINE_COUNT, just render it all\n if (lineCount <= hunkLineCount) {\n return {\n startingLine: 0,\n totalLines: Infinity,\n bufferBefore: 0,\n bufferAfter: 0,\n };\n }\n\n const headerRegion = disableFileHeader ? fileGap : diffHeaderHeight;\n let absoluteLineTop = fileTop + headerRegion;\n let currentLine = 0;\n const hunkOffsets: number[] = [];\n let startingLine: number | undefined;\n let endingLine = 0;\n for (const hunk of this.fileDiff.hunks) {\n let hunkGap = 0;\n if (hunk.additionStart > 1 || hunk.deletionStart > 1) {\n hunkGap = hunkSeparatorHeight + fileGap;\n if (hunk !== this.fileDiff.hunks[0]) {\n hunkGap += fileGap;\n }\n absoluteLineTop += hunkGap;\n }\n const hunkLineCount =\n diffStyle === 'split' ? hunk.splitLineCount : hunk.unifiedLineCount;\n for (let l = 0; l < hunkLineCount; l++) {\n if (currentLine % hunkLineCount === 0) {\n hunkOffsets.push(\n absoluteLineTop - (fileTop + headerRegion + (l === 0 ? hunkGap : 0))\n );\n }\n if (\n startingLine == null &&\n absoluteLineTop > top - lineHeight &&\n absoluteLineTop < bottom\n ) {\n startingLine = currentLine;\n endingLine = startingLine + 1;\n } else if (startingLine != null && absoluteLineTop < bottom) {\n endingLine++;\n }\n currentLine++;\n absoluteLineTop += lineHeight;\n }\n }\n\n if (startingLine == null) {\n return {\n startingLine: 0,\n totalLines: 0,\n bufferBefore: fileHeight - headerRegion,\n bufferAfter: 0,\n };\n }\n\n startingLine = Math.floor(startingLine / hunkLineCount) * hunkLineCount;\n const totalLines =\n Math.ceil((endingLine - startingLine) / hunkLineCount) * hunkLineCount;\n\n const finalHunkBufferOffset = (startingLine + totalLines) / hunkLineCount;\n const bufferBefore = hunkOffsets[startingLine / hunkLineCount] ?? 0;\n const bufferAfter =\n finalHunkBufferOffset < hunkOffsets.length\n ? fileHeight -\n headerRegion -\n hunkOffsets[finalHunkBufferOffset] -\n fileGap // this is to account for bottom padding of the code container\n : 0;\n return { startingLine, totalLines, bufferBefore, bufferAfter };\n }\n}\n\nfunction getSpecs<LAnnotation>(\n instance: AdvancedVirtualizedFileDiff<LAnnotation>,\n type: 'split' | 'unified' = 'split'\n) {\n if (type === 'split') {\n return {\n lineCount: instance.fileDiff.splitLineCount,\n fileTop: instance.splitTop,\n fileHeight: instance.splitHeight,\n };\n }\n return {\n lineCount: instance.fileDiff.unifiedLineCount,\n fileTop: instance.unifiedTop,\n fileHeight: instance.unifiedHeight,\n };\n}\n"],"mappings":"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"}
|
|
@@ -21,6 +21,11 @@ interface FileHyrdateProps<LAnnotation> extends Omit<FileRenderProps<LAnnotation
|
|
|
21
21
|
}
|
|
22
22
|
interface FileOptions<LAnnotation> extends BaseCodeOptions, MouseEventManagerBaseOptions<'file'>, LineSelectionOptions {
|
|
23
23
|
disableFileHeader?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* @deprecated Use `enableGutterUtility` instead.
|
|
26
|
+
*/
|
|
27
|
+
enableHoverUtility?: boolean;
|
|
28
|
+
renderHeaderPrefix?: RenderFileMetadata;
|
|
24
29
|
renderCustomMetadata?: RenderFileMetadata;
|
|
25
30
|
/**
|
|
26
31
|
* When true, errors during rendering are rethrown instead of being caught
|
|
@@ -29,6 +34,10 @@ interface FileOptions<LAnnotation> extends BaseCodeOptions, MouseEventManagerBas
|
|
|
29
34
|
*/
|
|
30
35
|
disableErrorHandling?: boolean;
|
|
31
36
|
renderAnnotation?(annotation: LineAnnotation<LAnnotation>): HTMLElement | undefined;
|
|
37
|
+
renderGutterUtility?(getHoveredRow: () => GetHoveredLineResult<'file'> | undefined): HTMLElement | null;
|
|
38
|
+
/**
|
|
39
|
+
* @deprecated Use `renderGutterUtility` instead.
|
|
40
|
+
*/
|
|
32
41
|
renderHoverUtility?(getHoveredRow: () => GetHoveredLineResult<'file'> | undefined): HTMLElement | null;
|
|
33
42
|
}
|
|
34
43
|
interface AnnotationElementCache<LAnnotation> {
|
|
@@ -48,13 +57,14 @@ declare class File<LAnnotation = undefined> {
|
|
|
48
57
|
protected bufferBefore: HTMLElement | undefined;
|
|
49
58
|
protected bufferAfter: HTMLElement | undefined;
|
|
50
59
|
protected unsafeCSSStyle: HTMLStyleElement | undefined;
|
|
51
|
-
protected
|
|
60
|
+
protected gutterUtilityContent: HTMLElement | undefined;
|
|
52
61
|
protected errorWrapper: HTMLElement | undefined;
|
|
53
62
|
protected placeHolder: HTMLElement | undefined;
|
|
54
63
|
protected lastRenderedHeaderHTML: string | undefined;
|
|
55
64
|
protected appliedPreAttributes: PrePropertiesConfig | undefined;
|
|
56
65
|
protected lastRowCount: number | undefined;
|
|
57
66
|
protected headerElement: HTMLElement | undefined;
|
|
67
|
+
protected headerPrefix: HTMLElement | undefined;
|
|
58
68
|
protected headerMetadata: HTMLElement | undefined;
|
|
59
69
|
protected fileRenderer: FileRenderer<LAnnotation>;
|
|
60
70
|
protected resizeManager: ResizeManager;
|
|
@@ -86,11 +96,13 @@ declare class File<LAnnotation = undefined> {
|
|
|
86
96
|
lineAnnotations,
|
|
87
97
|
renderRange
|
|
88
98
|
}: FileRenderProps<LAnnotation>): boolean;
|
|
99
|
+
private removeRenderedCode;
|
|
100
|
+
private clearAuxiliaryNodes;
|
|
89
101
|
private canPartiallyRender;
|
|
90
102
|
renderPlaceholder(height: number): boolean;
|
|
91
103
|
private cleanChildNodes;
|
|
92
104
|
private renderAnnotations;
|
|
93
|
-
private
|
|
105
|
+
private renderGutterUtility;
|
|
94
106
|
private injectUnsafeCSS;
|
|
95
107
|
private applyFullRender;
|
|
96
108
|
private applyPartialRender;
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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 /**\n * @deprecated Use `enableGutterUtility` instead.\n */\n enableHoverUtility?: boolean;\n renderHeaderPrefix?: RenderFileMetadata;\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 renderGutterUtility?(getHoveredRow: () => GetHoveredLineResult<'file'> | undefined): HTMLElement | null;\n /**\n * @deprecated Use `renderGutterUtility` instead.\n */\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 gutterUtilityContent: 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 headerPrefix: 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 removeRenderedCode;\n private clearAuxiliaryNodes;\n private canPartiallyRender;\n renderPlaceholder(height: number): boolean;\n private cleanChildNodes;\n private renderAnnotations;\n private renderGutterUtility;\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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DEFAULT_THEMES, DIFFS_TAG_NAME, HEADER_METADATA_SLOT_ID, UNSAFE_CSS_ATTRIBUTE } from "../constants.js";
|
|
1
|
+
import { DEFAULT_THEMES, DIFFS_TAG_NAME, EMPTY_RENDER_RANGE, HEADER_METADATA_SLOT_ID, HEADER_PREFIX_SLOT_ID, UNSAFE_CSS_ATTRIBUTE } from "../constants.js";
|
|
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";
|
|
@@ -10,7 +10,7 @@ import { areFilesEqual } from "../utils/areFilesEqual.js";
|
|
|
10
10
|
import { areLineAnnotationsEqual } from "../utils/areLineAnnotationsEqual.js";
|
|
11
11
|
import { arePrePropertiesEqual } from "../utils/arePrePropertiesEqual.js";
|
|
12
12
|
import { createAnnotationWrapperNode } from "../utils/createAnnotationWrapperNode.js";
|
|
13
|
-
import {
|
|
13
|
+
import { createGutterUtilityContentNode } from "../utils/createGutterUtilityContentNode.js";
|
|
14
14
|
import { createUnsafeCSSStyleNode } from "../utils/createUnsafeCSSStyleNode.js";
|
|
15
15
|
import { wrapUnsafeCSS } from "../utils/cssWrappers.js";
|
|
16
16
|
import { getOrCreateCodeNode } from "../utils/getOrCreateCodeNode.js";
|
|
@@ -32,13 +32,14 @@ var File = class {
|
|
|
32
32
|
bufferBefore;
|
|
33
33
|
bufferAfter;
|
|
34
34
|
unsafeCSSStyle;
|
|
35
|
-
|
|
35
|
+
gutterUtilityContent;
|
|
36
36
|
errorWrapper;
|
|
37
37
|
placeHolder;
|
|
38
38
|
lastRenderedHeaderHTML;
|
|
39
39
|
appliedPreAttributes;
|
|
40
40
|
lastRowCount;
|
|
41
41
|
headerElement;
|
|
42
|
+
headerPrefix;
|
|
42
43
|
headerMetadata;
|
|
43
44
|
fileRenderer;
|
|
44
45
|
resizeManager;
|
|
@@ -124,6 +125,8 @@ var File = class {
|
|
|
124
125
|
this.appliedPreAttributes = void 0;
|
|
125
126
|
this.lastRowCount = void 0;
|
|
126
127
|
this.headerElement = void 0;
|
|
128
|
+
this.headerPrefix = void 0;
|
|
129
|
+
this.headerMetadata = void 0;
|
|
127
130
|
this.lastRenderedHeaderHTML = void 0;
|
|
128
131
|
this.errorWrapper = void 0;
|
|
129
132
|
this.unsafeCSSStyle = void 0;
|
|
@@ -163,7 +166,7 @@ var File = class {
|
|
|
163
166
|
this.file = file;
|
|
164
167
|
this.fileRenderer.hydrate(file);
|
|
165
168
|
this.renderAnnotations();
|
|
166
|
-
this.
|
|
169
|
+
this.renderGutterUtility();
|
|
167
170
|
this.injectUnsafeCSS();
|
|
168
171
|
this.mouseEventManager.setup(this.pre);
|
|
169
172
|
this.lineSelectionManager.setup(this.pre);
|
|
@@ -174,11 +177,13 @@ var File = class {
|
|
|
174
177
|
return file != null ? this.fileRenderer.getOrCreateLineCache(file) : EMPTY_STRINGS;
|
|
175
178
|
}
|
|
176
179
|
render({ file, fileContainer, forceRender = false, containerWrapper, lineAnnotations, renderRange }) {
|
|
180
|
+
const { collapsed = false } = this.options;
|
|
181
|
+
const nextRenderRange = collapsed ? void 0 : renderRange;
|
|
177
182
|
const previousRenderRange = this.renderRange;
|
|
178
183
|
const annotationsChanged = lineAnnotations != null && (lineAnnotations.length > 0 || this.lineAnnotations.length > 0) ? lineAnnotations !== this.lineAnnotations : false;
|
|
179
184
|
const didFileChange = !areFilesEqual(this.file, file);
|
|
180
|
-
if (!forceRender && areRenderRangesEqual(
|
|
181
|
-
this.renderRange =
|
|
185
|
+
if (!collapsed && !forceRender && areRenderRangesEqual(nextRenderRange, this.renderRange) && !didFileChange && !annotationsChanged) return false;
|
|
186
|
+
this.renderRange = nextRenderRange;
|
|
182
187
|
this.file = file;
|
|
183
188
|
this.fileRenderer.setOptions(this.options);
|
|
184
189
|
if (lineAnnotations != null) this.setLineAnnotations(lineAnnotations);
|
|
@@ -190,12 +195,34 @@ var File = class {
|
|
|
190
195
|
this.headerElement = void 0;
|
|
191
196
|
this.lastRenderedHeaderHTML = void 0;
|
|
192
197
|
}
|
|
198
|
+
if (this.headerPrefix != null) {
|
|
199
|
+
this.headerPrefix.parentNode?.removeChild(this.headerPrefix);
|
|
200
|
+
this.headerPrefix = void 0;
|
|
201
|
+
}
|
|
202
|
+
if (this.headerMetadata != null) {
|
|
203
|
+
this.headerMetadata.parentNode?.removeChild(this.headerMetadata);
|
|
204
|
+
this.headerMetadata = void 0;
|
|
205
|
+
}
|
|
193
206
|
}
|
|
194
207
|
fileContainer = this.getOrCreateFileContainerNode(fileContainer, containerWrapper);
|
|
208
|
+
if (collapsed) {
|
|
209
|
+
this.removeRenderedCode();
|
|
210
|
+
this.clearAuxiliaryNodes();
|
|
211
|
+
try {
|
|
212
|
+
const fileResult = this.fileRenderer.renderFile(file, EMPTY_RENDER_RANGE);
|
|
213
|
+
if (fileResult?.headerAST != null) this.applyHeaderToDOM(fileResult.headerAST, fileContainer);
|
|
214
|
+
this.injectUnsafeCSS();
|
|
215
|
+
} catch (error) {
|
|
216
|
+
if (disableErrorHandling) throw error;
|
|
217
|
+
console.error(error);
|
|
218
|
+
if (error instanceof Error) this.applyErrorToDOM(error, fileContainer);
|
|
219
|
+
}
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
195
222
|
try {
|
|
196
223
|
const pre = this.getOrCreatePreNode(fileContainer);
|
|
197
|
-
if (!this.canPartiallyRender(forceRender, annotationsChanged, didFileChange) || !this.applyPartialRender(previousRenderRange,
|
|
198
|
-
const fileResult = this.fileRenderer.renderFile(file,
|
|
224
|
+
if (!this.canPartiallyRender(forceRender, annotationsChanged, didFileChange) || !this.applyPartialRender(previousRenderRange, nextRenderRange)) {
|
|
225
|
+
const fileResult = this.fileRenderer.renderFile(file, nextRenderRange);
|
|
199
226
|
if (fileResult == null) {
|
|
200
227
|
if (this.workerManager?.isInitialized() === false) this.workerManager.initialize().then(() => this.rerender());
|
|
201
228
|
return false;
|
|
@@ -203,13 +230,13 @@ var File = class {
|
|
|
203
230
|
if (fileResult.headerAST != null) this.applyHeaderToDOM(fileResult.headerAST, fileContainer);
|
|
204
231
|
this.applyFullRender(fileResult, pre);
|
|
205
232
|
}
|
|
206
|
-
this.applyBuffers(pre,
|
|
233
|
+
this.applyBuffers(pre, nextRenderRange);
|
|
207
234
|
this.injectUnsafeCSS();
|
|
208
235
|
this.mouseEventManager.setup(pre);
|
|
209
236
|
this.lineSelectionManager.setup(pre);
|
|
210
237
|
this.resizeManager.setup(pre, overflow === "wrap");
|
|
211
238
|
this.renderAnnotations();
|
|
212
|
-
this.
|
|
239
|
+
this.renderGutterUtility();
|
|
213
240
|
} catch (error) {
|
|
214
241
|
if (disableErrorHandling) throw error;
|
|
215
242
|
console.error(error);
|
|
@@ -217,6 +244,27 @@ var File = class {
|
|
|
217
244
|
}
|
|
218
245
|
return true;
|
|
219
246
|
}
|
|
247
|
+
removeRenderedCode() {
|
|
248
|
+
this.resizeManager.cleanUp();
|
|
249
|
+
this.mouseEventManager.cleanUp();
|
|
250
|
+
this.lineSelectionManager.cleanUp();
|
|
251
|
+
this.bufferBefore?.remove();
|
|
252
|
+
this.bufferBefore = void 0;
|
|
253
|
+
this.bufferAfter?.remove();
|
|
254
|
+
this.bufferAfter = void 0;
|
|
255
|
+
this.code?.remove();
|
|
256
|
+
this.code = void 0;
|
|
257
|
+
this.pre?.remove();
|
|
258
|
+
this.pre = void 0;
|
|
259
|
+
this.appliedPreAttributes = void 0;
|
|
260
|
+
this.lastRowCount = void 0;
|
|
261
|
+
}
|
|
262
|
+
clearAuxiliaryNodes() {
|
|
263
|
+
for (const { element } of this.annotationCache.values()) element.parentNode?.removeChild(element);
|
|
264
|
+
this.annotationCache.clear();
|
|
265
|
+
this.gutterUtilityContent?.remove();
|
|
266
|
+
this.gutterUtilityContent = void 0;
|
|
267
|
+
}
|
|
220
268
|
canPartiallyRender(forceRender, annotationsChanged, didContentChange) {
|
|
221
269
|
if (forceRender || annotationsChanged || didContentChange) return false;
|
|
222
270
|
return true;
|
|
@@ -242,7 +290,9 @@ var File = class {
|
|
|
242
290
|
this.code?.remove();
|
|
243
291
|
this.errorWrapper?.remove();
|
|
244
292
|
this.headerElement?.remove();
|
|
245
|
-
this.
|
|
293
|
+
this.gutterUtilityContent?.remove();
|
|
294
|
+
this.headerPrefix?.remove();
|
|
295
|
+
this.headerMetadata?.remove();
|
|
246
296
|
this.pre?.remove();
|
|
247
297
|
this.spriteSVG?.remove();
|
|
248
298
|
this.unsafeCSSStyle?.remove();
|
|
@@ -251,7 +301,9 @@ var File = class {
|
|
|
251
301
|
this.code = void 0;
|
|
252
302
|
this.errorWrapper = void 0;
|
|
253
303
|
this.headerElement = void 0;
|
|
254
|
-
this.
|
|
304
|
+
this.gutterUtilityContent = void 0;
|
|
305
|
+
this.headerPrefix = void 0;
|
|
306
|
+
this.headerMetadata = void 0;
|
|
255
307
|
this.pre = void 0;
|
|
256
308
|
this.spriteSVG = void 0;
|
|
257
309
|
this.unsafeCSSStyle = void 0;
|
|
@@ -288,19 +340,24 @@ var File = class {
|
|
|
288
340
|
element.parentNode?.removeChild(element);
|
|
289
341
|
}
|
|
290
342
|
}
|
|
291
|
-
|
|
292
|
-
const
|
|
293
|
-
if (this.fileContainer == null ||
|
|
294
|
-
|
|
295
|
-
|
|
343
|
+
renderGutterUtility() {
|
|
344
|
+
const renderGutterUtility = this.options.renderGutterUtility ?? this.options.renderHoverUtility;
|
|
345
|
+
if (this.fileContainer == null || renderGutterUtility == null) {
|
|
346
|
+
this.gutterUtilityContent?.remove();
|
|
347
|
+
this.gutterUtilityContent = void 0;
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const element = renderGutterUtility(this.mouseEventManager.getHoveredLine);
|
|
351
|
+
if (element != null && this.gutterUtilityContent != null) return;
|
|
296
352
|
else if (element == null) {
|
|
297
|
-
this.
|
|
298
|
-
this.
|
|
353
|
+
this.gutterUtilityContent?.parentNode?.removeChild(this.gutterUtilityContent);
|
|
354
|
+
this.gutterUtilityContent = void 0;
|
|
299
355
|
return;
|
|
300
356
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
this.fileContainer.appendChild(
|
|
357
|
+
const gutterUtilityContent = createGutterUtilityContentNode();
|
|
358
|
+
gutterUtilityContent.appendChild(element);
|
|
359
|
+
this.fileContainer.appendChild(gutterUtilityContent);
|
|
360
|
+
this.gutterUtilityContent = gutterUtilityContent;
|
|
304
361
|
}
|
|
305
362
|
injectUnsafeCSS() {
|
|
306
363
|
if (this.fileContainer?.shadowRoot == null) return;
|
|
@@ -474,9 +531,18 @@ var File = class {
|
|
|
474
531
|
this.lastRenderedHeaderHTML = headerHTML;
|
|
475
532
|
}
|
|
476
533
|
if (this.isContainerManaged) return;
|
|
477
|
-
const { renderCustomMetadata } = this.options;
|
|
534
|
+
const { renderHeaderPrefix, renderCustomMetadata } = this.options;
|
|
535
|
+
if (this.headerPrefix != null) this.headerPrefix.parentNode?.removeChild(this.headerPrefix);
|
|
478
536
|
if (this.headerMetadata != null) this.headerMetadata.parentNode?.removeChild(this.headerMetadata);
|
|
537
|
+
const prefix = renderHeaderPrefix?.(file) ?? void 0;
|
|
479
538
|
const content = renderCustomMetadata?.(file) ?? void 0;
|
|
539
|
+
if (prefix != null) {
|
|
540
|
+
this.headerPrefix = document.createElement("div");
|
|
541
|
+
this.headerPrefix.slot = HEADER_PREFIX_SLOT_ID;
|
|
542
|
+
if (prefix instanceof Element) this.headerPrefix.appendChild(prefix);
|
|
543
|
+
else this.headerPrefix.innerText = `${prefix}`;
|
|
544
|
+
container.appendChild(this.headerPrefix);
|
|
545
|
+
}
|
|
480
546
|
if (content != null) {
|
|
481
547
|
this.headerMetadata = document.createElement("div");
|
|
482
548
|
this.headerMetadata.slot = HEADER_METADATA_SLOT_ID;
|