@pierre/diffs 1.3.0-beta.6 → 1.3.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/CodeView.d.ts +90 -5
- package/dist/components/CodeView.d.ts.map +1 -1
- package/dist/components/CodeView.js +291 -38
- package/dist/components/CodeView.js.map +1 -1
- package/dist/components/File.d.ts +1 -0
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +20 -6
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts +38 -23
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +144 -61
- package/dist/components/FileDiff.js.map +1 -1
- package/dist/components/UnresolvedFile.d.ts +3 -2
- package/dist/components/UnresolvedFile.d.ts.map +1 -1
- package/dist/components/UnresolvedFile.js +4 -2
- package/dist/components/UnresolvedFile.js.map +1 -1
- package/dist/components/VirtualizedFile.d.ts.map +1 -1
- package/dist/components/VirtualizedFile.js +6 -8
- package/dist/components/VirtualizedFile.js.map +1 -1
- package/dist/components/VirtualizedFileDiff.d.ts +13 -5
- package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
- package/dist/components/VirtualizedFileDiff.js +192 -55
- package/dist/components/VirtualizedFileDiff.js.map +1 -1
- package/dist/components/Virtualizer.d.ts +2 -0
- package/dist/components/Virtualizer.d.ts.map +1 -1
- package/dist/components/Virtualizer.js +16 -3
- 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 +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/editor/command.d.ts +1 -1
- package/dist/editor/command.d.ts.map +1 -1
- package/dist/editor/command.js +8 -0
- package/dist/editor/command.js.map +1 -1
- package/dist/editor/editor.d.ts +10 -3
- package/dist/editor/editor.d.ts.map +1 -1
- package/dist/editor/editor.js +325 -135
- package/dist/editor/editor.js.map +1 -1
- package/dist/editor/editor2.js +1 -1
- package/dist/editor/lineAnnotations.d.ts.map +1 -1
- package/dist/editor/lineAnnotations.js +84 -12
- package/dist/editor/lineAnnotations.js.map +1 -1
- package/dist/editor/marker.d.ts +5 -3
- package/dist/editor/marker.d.ts.map +1 -1
- package/dist/editor/marker.js +35 -12
- package/dist/editor/marker.js.map +1 -1
- package/dist/editor/matchBrackets.d.ts +8 -0
- package/dist/editor/matchBrackets.d.ts.map +1 -0
- package/dist/editor/matchBrackets.js +146 -0
- package/dist/editor/matchBrackets.js.map +1 -0
- package/dist/editor/popover.d.ts +45 -0
- package/dist/editor/popover.d.ts.map +1 -0
- package/dist/editor/popover.js +145 -0
- package/dist/editor/popover.js.map +1 -0
- package/dist/editor/selection.d.ts +14 -2
- package/dist/editor/selection.d.ts.map +1 -1
- package/dist/editor/selection.js +142 -41
- package/dist/editor/selection.js.map +1 -1
- package/dist/editor/selectionAction.d.ts +20 -3
- package/dist/editor/selectionAction.d.ts.map +1 -1
- package/dist/editor/selectionAction.js +41 -10
- package/dist/editor/selectionAction.js.map +1 -1
- package/dist/editor/textDocument.d.ts +2 -0
- package/dist/editor/textDocument.d.ts.map +1 -1
- package/dist/editor/textDocument.js +22 -6
- package/dist/editor/textDocument.js.map +1 -1
- package/dist/editor/textMeasure.d.ts.map +1 -1
- package/dist/editor/textMeasure.js +25 -7
- package/dist/editor/textMeasure.js.map +1 -1
- package/dist/editor/tokenzier.d.ts +6 -7
- package/dist/editor/tokenzier.d.ts.map +1 -1
- package/dist/editor/tokenzier.js +83 -34
- package/dist/editor/tokenzier.js.map +1 -1
- package/dist/editor/utils.d.ts +3 -1
- package/dist/editor/utils.d.ts.map +1 -1
- package/dist/editor/utils.js +14 -1
- package/dist/editor/utils.js.map +1 -1
- package/dist/index.d.ts +9 -7
- package/dist/index.js +6 -4
- package/dist/managers/InteractionManager.d.ts.map +1 -1
- package/dist/managers/InteractionManager.js +0 -1
- package/dist/managers/InteractionManager.js.map +1 -1
- package/dist/managers/ResizeManager.d.ts +10 -2
- package/dist/managers/ResizeManager.d.ts.map +1 -1
- package/dist/managers/ResizeManager.js +33 -13
- package/dist/managers/ResizeManager.js.map +1 -1
- package/dist/react/CodeView.d.ts +25 -1
- package/dist/react/CodeView.d.ts.map +1 -1
- package/dist/react/CodeView.js +76 -17
- package/dist/react/CodeView.js.map +1 -1
- package/dist/react/EditorContext.d.ts +2 -2
- package/dist/react/EditorContext.d.ts.map +1 -1
- package/dist/react/EditorContext.js.map +1 -1
- package/dist/react/MultiFileDiff.d.ts +3 -4
- package/dist/react/MultiFileDiff.d.ts.map +1 -1
- package/dist/react/MultiFileDiff.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/utils/useFileDiffInstance.js +14 -15
- package/dist/react/utils/useFileDiffInstance.js.map +1 -1
- package/dist/renderers/DiffHunksRenderer.d.ts +2 -2
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +45 -23
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/renderers/FileRenderer.d.ts +2 -1
- package/dist/renderers/FileRenderer.d.ts.map +1 -1
- package/dist/renderers/FileRenderer.js +58 -38
- package/dist/renderers/FileRenderer.js.map +1 -1
- package/dist/ssr/index.d.ts +2 -2
- package/dist/ssr/preloadDiffs.d.ts +11 -10
- package/dist/ssr/preloadDiffs.d.ts.map +1 -1
- package/dist/ssr/preloadDiffs.js +14 -6
- package/dist/ssr/preloadDiffs.js.map +1 -1
- package/dist/types.d.ts +100 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/applyLineTextWithNewline.d.ts +5 -0
- package/dist/utils/applyLineTextWithNewline.d.ts.map +1 -0
- package/dist/utils/applyLineTextWithNewline.js +11 -0
- package/dist/utils/applyLineTextWithNewline.js.map +1 -0
- package/dist/utils/areHunkDataEqual.js +1 -1
- package/dist/utils/areHunkDataEqual.js.map +1 -1
- package/dist/utils/areManagedSnapshotsEqual.d.ts +2 -2
- package/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
- package/dist/utils/areManagedSnapshotsEqual.js +5 -0
- package/dist/utils/areManagedSnapshotsEqual.js.map +1 -1
- package/dist/utils/awaitWithTimeout.d.ts +5 -0
- package/dist/utils/awaitWithTimeout.d.ts.map +1 -0
- package/dist/utils/awaitWithTimeout.js +15 -0
- package/dist/utils/awaitWithTimeout.js.map +1 -0
- package/dist/utils/cloneFileDiffMetadata.d.ts +7 -0
- package/dist/utils/cloneFileDiffMetadata.d.ts.map +1 -0
- package/dist/utils/cloneFileDiffMetadata.js +16 -0
- package/dist/utils/cloneFileDiffMetadata.js.map +1 -0
- package/dist/utils/computeEstimatedDiffHeights.d.ts +3 -1
- package/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
- package/dist/utils/computeEstimatedDiffHeights.js +8 -1
- package/dist/utils/computeEstimatedDiffHeights.js.map +1 -1
- package/dist/utils/createCodeViewHeaderFooterHostElement.d.ts +5 -0
- package/dist/utils/createCodeViewHeaderFooterHostElement.d.ts.map +1 -0
- package/dist/utils/createCodeViewHeaderFooterHostElement.js +19 -0
- package/dist/utils/createCodeViewHeaderFooterHostElement.js.map +1 -0
- package/dist/utils/createPreElement.js +0 -1
- package/dist/utils/createPreElement.js.map +1 -1
- package/dist/utils/getDiffFileInput.d.ts +14 -0
- package/dist/utils/getDiffFileInput.d.ts.map +1 -0
- package/dist/utils/getDiffFileInput.js +24 -0
- package/dist/utils/getDiffFileInput.js.map +1 -0
- package/dist/utils/getDiffHunksRendererOptions.js +1 -0
- package/dist/utils/getDiffHunksRendererOptions.js.map +1 -1
- package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
- package/dist/utils/getFiletypeFromFileName.js +2 -0
- package/dist/utils/getFiletypeFromFileName.js.map +1 -1
- package/dist/utils/hydratePartialDiff.d.ts +10 -0
- package/dist/utils/hydratePartialDiff.d.ts.map +1 -0
- package/dist/utils/hydratePartialDiff.js +140 -0
- package/dist/utils/hydratePartialDiff.js.map +1 -0
- package/dist/utils/iterateOverDiff.js +3 -3
- package/dist/utils/iterateOverDiff.js.map +1 -1
- package/dist/utils/parseDiffFromFile.d.ts +1 -1
- package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
- package/dist/utils/parseDiffFromFile.js +26 -5
- package/dist/utils/parseDiffFromFile.js.map +1 -1
- package/dist/utils/setWrapperNodeProps.js +0 -1
- package/dist/utils/setWrapperNodeProps.js.map +1 -1
- package/dist/utils/updateDiffHunks.d.ts +5 -1
- package/dist/utils/updateDiffHunks.d.ts.map +1 -1
- package/dist/utils/updateDiffHunks.js +48 -4
- package/dist/utils/updateDiffHunks.js.map +1 -1
- package/dist/worker/WorkerPoolManager.d.ts +7 -2
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/dist/worker/WorkerPoolManager.js +78 -15
- package/dist/worker/WorkerPoolManager.js.map +1 -1
- package/dist/worker/index.d.ts +2 -2
- package/dist/worker/types.d.ts +7 -1
- package/dist/worker/types.d.ts.map +1 -1
- package/dist/worker/worker-portable.js +5 -3
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js +5 -3
- package/dist/worker/worker.js.map +1 -1
- package/package.json +1 -1
|
@@ -98,6 +98,7 @@ declare class File<LAnnotation = undefined> implements DiffsEditableComponent<LA
|
|
|
98
98
|
setLineAnnotations(lineAnnotations: LineAnnotation<LAnnotation>[]): void;
|
|
99
99
|
setSelectedLines(range: SelectedLineRange | null, options?: SelectionWriteOptions): void;
|
|
100
100
|
flushManagers(): void;
|
|
101
|
+
protected shouldApplyColumnVariables(overflow: 'scroll' | 'wrap'): boolean;
|
|
101
102
|
cleanUp(recycle?: boolean): void;
|
|
102
103
|
virtualizedSetup(): void;
|
|
103
104
|
hydrate(props: FileHydrateProps<LAnnotation>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"File.d.ts","names":[],"sources":["../../src/components/File.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"File.d.ts","names":[],"sources":["../../src/components/File.ts"],"mappings":"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"}
|
package/dist/components/File.js
CHANGED
|
@@ -137,9 +137,15 @@ var File = class {
|
|
|
137
137
|
}
|
|
138
138
|
const { overflow = "scroll" } = this.options;
|
|
139
139
|
this.interactionManager.setup(this.pre);
|
|
140
|
-
this.resizeManager.setup(this.pre,
|
|
140
|
+
this.resizeManager.setup(this.pre, {
|
|
141
|
+
disableAnnotations: overflow === "wrap",
|
|
142
|
+
columnVariables: this.shouldApplyColumnVariables(overflow) ? "apply" : "measure"
|
|
143
|
+
});
|
|
141
144
|
this.managersDirty = false;
|
|
142
145
|
}
|
|
146
|
+
shouldApplyColumnVariables(overflow) {
|
|
147
|
+
return overflow === "scroll" && this.lineAnnotations.length > 0;
|
|
148
|
+
}
|
|
143
149
|
cleanUp(recycle = false) {
|
|
144
150
|
this.emitPostRender(true);
|
|
145
151
|
this.resizeManager.cleanUp();
|
|
@@ -151,7 +157,7 @@ var File = class {
|
|
|
151
157
|
this.fileContainer = void 0;
|
|
152
158
|
this.mounted = false;
|
|
153
159
|
if (!recycle) this.lineAnnotations = [];
|
|
154
|
-
this.
|
|
160
|
+
this.clearAuxiliaryNodes();
|
|
155
161
|
this.pre = void 0;
|
|
156
162
|
this.bufferBefore?.remove();
|
|
157
163
|
this.bufferBefore = void 0;
|
|
@@ -166,12 +172,14 @@ var File = class {
|
|
|
166
172
|
this.headerCustom = void 0;
|
|
167
173
|
this.lastRenderedHeaderHTML = void 0;
|
|
168
174
|
if (!recycle) this.cachedHeaderHTML = void 0;
|
|
175
|
+
this.errorWrapper?.remove();
|
|
169
176
|
this.errorWrapper = void 0;
|
|
170
177
|
this.themeCSSStyle = void 0;
|
|
171
178
|
this.appliedThemeCSS = void 0;
|
|
172
179
|
this.hasAdoptedThemeCSS = false;
|
|
173
180
|
this.unsafeCSSStyle = void 0;
|
|
174
181
|
this.appliedUnsafeCSS = void 0;
|
|
182
|
+
this.placeHolder?.remove();
|
|
175
183
|
this.placeHolder = void 0;
|
|
176
184
|
this.unsafeCSSStyle = void 0;
|
|
177
185
|
if (recycle) this.fileRenderer.recycle();
|
|
@@ -181,7 +189,7 @@ var File = class {
|
|
|
181
189
|
this.file = void 0;
|
|
182
190
|
}
|
|
183
191
|
this.enabled = false;
|
|
184
|
-
this.editor?.cleanUp();
|
|
192
|
+
this.editor?.cleanUp(recycle);
|
|
185
193
|
this.editor = void 0;
|
|
186
194
|
}
|
|
187
195
|
virtualizedSetup() {
|
|
@@ -190,6 +198,8 @@ var File = class {
|
|
|
190
198
|
}
|
|
191
199
|
hydrate(props) {
|
|
192
200
|
const { fileContainer, prerenderedHTML, preventEmit = false, file, lineAnnotations } = props;
|
|
201
|
+
if (!this.enabled) throw new Error("File.hydrate: attempting to call hydrate after cleaned up");
|
|
202
|
+
if (this.fileContainer != null) throw new Error("File.hydrate: hydrate can only be called before the instance has rendered or hydrated");
|
|
193
203
|
this.hydrateElements(fileContainer, prerenderedHTML);
|
|
194
204
|
if (shouldRenderCode(this.pre, file, this.options.collapsed) || shouldRenderHeader(this.headerElement, file, this.options.disableFileHeader)) this.render({
|
|
195
205
|
...props,
|
|
@@ -260,8 +270,11 @@ var File = class {
|
|
|
260
270
|
const editor = this.editor;
|
|
261
271
|
const fileContainer = this.fileContainer;
|
|
262
272
|
const file = this.file;
|
|
273
|
+
const lineAnnotations = this.lineAnnotations;
|
|
274
|
+
const renderRange = this.renderRange;
|
|
263
275
|
if (editor != null && fileContainer != null && file != null) this.fileRenderer.initializeHighlighter().then((highlighter) => {
|
|
264
|
-
editor.
|
|
276
|
+
if (!this.enabled || this.editor !== editor || this.fileContainer !== fileContainer || this.file !== file) return;
|
|
277
|
+
editor.__syncRenderView(highlighter, fileContainer, file, lineAnnotations, renderRange);
|
|
265
278
|
});
|
|
266
279
|
}
|
|
267
280
|
attachEditor(editor) {
|
|
@@ -287,7 +300,8 @@ var File = class {
|
|
|
287
300
|
}
|
|
288
301
|
render({ file, fileContainer, forceRender = false, preventEmit = false, containerWrapper, deferManagers = false, lineAnnotations, renderRange }) {
|
|
289
302
|
if (!this.enabled) throw new Error("File.render: attempting to call render after cleaned up");
|
|
290
|
-
|
|
303
|
+
if (file.cacheKey === void 0) file.cacheKey = file.name;
|
|
304
|
+
this.editor?.__postponeBgTokenizeToNextFrame();
|
|
291
305
|
const { collapsed = false, themeType = "system" } = this.options;
|
|
292
306
|
const nextRenderRange = collapsed ? void 0 : renderRange;
|
|
293
307
|
const previousRenderRange = this.renderRange;
|
|
@@ -411,7 +425,7 @@ var File = class {
|
|
|
411
425
|
const { file, workerManager } = this;
|
|
412
426
|
if (file == null || file.cacheKey == null || workerManager == null || isFilePlainText(file)) return;
|
|
413
427
|
if (this.fileRenderer.getOrCreateLineCache(file).length > (this.options.tokenizeMaxLength ?? 1e5)) return;
|
|
414
|
-
workerManager.primeFileHighlightCache(file);
|
|
428
|
+
workerManager.primeFileHighlightCache(file).catch(() => void 0);
|
|
415
429
|
}
|
|
416
430
|
cleanChildNodes() {
|
|
417
431
|
this.resizeManager.cleanUp();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"File.js","names":[],"sources":["../../src/components/File.ts"],"sourcesContent":["import type { Element as HASTElement } from 'hast';\nimport { toHtml } from 'hast-util-to-html';\n\nimport {\n CUSTOM_HEADER_SLOT_ID,\n DEFAULT_THEMES,\n DEFAULT_TOKENIZE_MAX_LENGTH,\n DIFFS_TAG_NAME,\n EMPTY_RENDER_RANGE,\n HEADER_FILENAME_SUFFIX_SLOT_ID,\n HEADER_METADATA_SLOT_ID,\n HEADER_PREFIX_SLOT_ID,\n THEME_CSS_ATTRIBUTE,\n UNSAFE_CSS_ATTRIBUTE,\n} from '../constants';\nimport {\n type GetHoveredLineResult,\n InteractionManager,\n type InteractionManagerBaseOptions,\n pluckInteractionOptions,\n type SelectionWriteOptions,\n} from '../managers/InteractionManager';\nimport { ResizeManager } from '../managers/ResizeManager';\nimport { FileRenderer, type FileRenderResult } from '../renderers/FileRenderer';\nimport { SVGSpriteSheet } from '../sprite';\nimport type {\n AppliedThemeStyleCache,\n BaseCodeOptions,\n DiffsEditableComponent,\n DiffsEditor,\n DiffsTextDocument,\n FileContents,\n HighlightedToken,\n LineAnnotation,\n PostRenderPhase,\n PrePropertiesConfig,\n RenderFileMetadata,\n RenderRange,\n SelectedLineRange,\n ThemeTypes,\n} from '../types';\nimport { areFilesEqual } from '../utils/areFilesEqual';\nimport { areLineAnnotationsEqual } from '../utils/areLineAnnotationsEqual';\nimport { arePrePropertiesEqual } from '../utils/arePrePropertiesEqual';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { areThemesEqual } from '../utils/areThemesEqual';\nimport { createAnnotationWrapperNode } from '../utils/createAnnotationWrapperNode';\nimport { createGutterUtilityContentNode } from '../utils/createGutterUtilityContentNode';\nimport { createUnsafeCSSStyleNode } from '../utils/createUnsafeCSSStyleNode';\nimport {\n patchScrollbarGutterSize,\n wrapThemeCSS,\n wrapUnsafeCSS,\n} from '../utils/cssWrappers';\nimport { getFileRendererOptions } from '../utils/getFileRendererOptions';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\nimport { getOrCreateCodeNode } from '../utils/getOrCreateCodeNode';\nimport { upsertHostThemeStyle } from '../utils/hostTheme';\nimport { isFilePlainText } from '../utils/isFilePlainText';\nimport { isStyleNode } from '../utils/isStyleNode';\nimport { prerenderHTMLIfNecessary } from '../utils/prerenderHTMLIfNecessary';\nimport { getMeasuredScrollbarGutter } from '../utils/scrollbarGutter';\nimport { setPreNodeProperties } from '../utils/setWrapperNodeProps';\nimport type { WorkerPoolManager } from '../worker';\nimport { DiffsContainerLoaded } from './web-components';\n\nconst EMPTY_STRINGS: string[] = [''];\n\nexport interface FileRenderProps<LAnnotation> {\n file: FileContents;\n fileContainer?: HTMLElement;\n containerWrapper?: HTMLElement;\n deferManagers?: boolean;\n forceRender?: boolean;\n preventEmit?: boolean;\n lineAnnotations?: LineAnnotation<LAnnotation>[];\n renderRange?: RenderRange;\n}\n\nexport interface FileHydrateProps<LAnnotation> extends Omit<\n FileRenderProps<LAnnotation>,\n 'fileContainer'\n> {\n fileContainer: HTMLElement;\n prerenderedHTML?: string;\n}\n\nexport interface FileOptions<LAnnotation>\n extends BaseCodeOptions, InteractionManagerBaseOptions<'file'> {\n disableFileHeader?: boolean;\n renderHeaderPrefix?: RenderFileMetadata;\n renderHeaderFilenameSuffix?: RenderFileMetadata;\n renderHeaderMetadata?: RenderFileMetadata;\n renderCustomHeader?: 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?(\n annotation: LineAnnotation<LAnnotation>\n ): HTMLElement | undefined;\n renderGutterUtility?(\n getHoveredRow: () => GetHoveredLineResult<'file'> | undefined\n ): HTMLElement | null | undefined;\n\n onPostRender?(\n node: HTMLElement,\n instance: File<LAnnotation>,\n phase: PostRenderPhase\n ): unknown;\n}\n\ninterface AnnotationElementCache<LAnnotation> {\n element: HTMLElement;\n annotation: LineAnnotation<LAnnotation>;\n}\n\ninterface ColumnElements {\n gutter: HTMLElement;\n content: HTMLElement;\n}\n\ninterface HydrationSetup<LAnnotation> {\n file: FileContents;\n lineAnnotations: LineAnnotation<LAnnotation>[] | undefined;\n}\n\nlet instanceId = -1;\n\nexport class File<\n LAnnotation = undefined,\n> implements DiffsEditableComponent<LAnnotation> {\n static LoadedCustomComponent: boolean = DiffsContainerLoaded;\n\n readonly __id: string = `file:${++instanceId}`;\n readonly type = 'file';\n\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 themeCSSStyle: HTMLStyleElement | undefined;\n protected appliedThemeCSS: AppliedThemeStyleCache | undefined;\n protected hasAdoptedThemeCSS = false;\n protected unsafeCSSStyle: HTMLStyleElement | undefined;\n protected appliedUnsafeCSS: string | undefined;\n protected gutterUtilityContent: HTMLElement | undefined;\n protected errorWrapper: HTMLElement | undefined;\n protected placeHolder: HTMLElement | undefined;\n protected lastRenderedHeaderHTML: string | undefined;\n protected cachedHeaderHTML: string | undefined;\n protected appliedPreAttributes: PrePropertiesConfig | undefined;\n protected lastRowCount: number | undefined;\n private mounted = false;\n\n protected headerElement: HTMLElement | undefined;\n protected headerCustom: HTMLElement | undefined;\n protected headerPrefix: HTMLElement | undefined;\n protected headerFilenameSuffix: HTMLElement | undefined;\n protected headerMetadata: HTMLElement | undefined;\n\n protected fileRenderer: FileRenderer<LAnnotation>;\n protected resizeManager: ResizeManager;\n protected interactionManager: InteractionManager<'file'>;\n\n protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>> =\n new Map();\n protected lineAnnotations: LineAnnotation<LAnnotation>[] = [];\n protected managersDirty = false;\n\n public file: FileContents | undefined;\n protected renderRange: RenderRange | undefined;\n protected enabled = true;\n\n protected editor: DiffsEditor<LAnnotation> | undefined;\n\n constructor(\n public options: FileOptions<LAnnotation> = { theme: DEFAULT_THEMES },\n private workerManager?: WorkerPoolManager | undefined,\n private isContainerManaged = false\n ) {\n this.fileRenderer = new FileRenderer<LAnnotation>(\n options,\n this.handleHighlightRender,\n this.workerManager\n );\n this.resizeManager = new ResizeManager();\n this.interactionManager = new InteractionManager(\n 'file',\n pluckInteractionOptions(options)\n );\n this.workerManager?.subscribeToThemeChanges(this);\n }\n\n private handleHighlightRender = (): void => {\n this.rerender();\n };\n\n public rerender(): void {\n if (!this.enabled || this.file == null) return;\n this.render({\n file: this.file,\n forceRender: true,\n renderRange: this.renderRange,\n });\n }\n\n public onThemeChange(): void {\n this.fileRenderer.clearRenderCache();\n this.rerender();\n }\n\n public setOptions(options: FileOptions<LAnnotation> | undefined): void {\n if (options == null) return;\n this.options = options;\n this.cachedHeaderHTML = undefined;\n this.syncInteractionOptions();\n }\n\n protected syncInteractionOptions(): void {\n this.interactionManager.setOptions(pluckInteractionOptions(this.options));\n }\n\n private mergeOptions(options: Partial<FileOptions<LAnnotation>>): void {\n this.options = { ...this.options, ...options };\n }\n\n public setThemeType(themeType: ThemeTypes): void {\n if ((this.options.themeType ?? 'system') === themeType) {\n return;\n }\n this.mergeOptions({ themeType });\n this.applyCachedThemeState(themeType);\n }\n\n private applyCachedThemeState(themeType: ThemeTypes): boolean {\n if (\n typeof this.options.theme === 'string' ||\n this.fileContainer == null ||\n this.appliedThemeCSS == null\n ) {\n return false;\n }\n const effectiveThemeType = this.appliedThemeCSS.baseThemeType ?? themeType;\n if (this.appliedThemeCSS.themeType === effectiveThemeType) {\n return false;\n }\n this.applyThemeState(\n this.fileContainer,\n this.appliedThemeCSS.themeStyles,\n themeType,\n this.appliedThemeCSS.baseThemeType\n );\n return true;\n }\n\n private hasThemeChanged(): boolean {\n return (\n this.appliedThemeCSS != null &&\n !areThemesEqual(\n this.appliedThemeCSS.theme,\n this.options.theme ?? DEFAULT_THEMES\n )\n );\n }\n\n public getHoveredLine = (): GetHoveredLineResult<'file'> | undefined => {\n return this.interactionManager.getHoveredLine();\n };\n\n public setLineAnnotations(\n lineAnnotations: LineAnnotation<LAnnotation>[]\n ): void {\n this.lineAnnotations = lineAnnotations;\n }\n\n public setSelectedLines(\n range: SelectedLineRange | null,\n options?: SelectionWriteOptions\n ): void {\n this.interactionManager.setSelection(range, options);\n }\n\n public flushManagers(): void {\n if (!this.managersDirty || this.pre == null) {\n this.managersDirty = false;\n return;\n }\n\n const { overflow = 'scroll' } = this.options;\n this.interactionManager.setup(this.pre);\n this.resizeManager.setup(this.pre, overflow === 'wrap');\n this.managersDirty = false;\n }\n\n public cleanUp(recycle = false): void {\n this.emitPostRender(true);\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n this.managersDirty = false;\n this.workerManager?.unsubscribeToThemeChanges(this);\n this.renderRange = undefined;\n\n // Clean up the elements\n if (!this.isContainerManaged) {\n this.fileContainer?.remove();\n }\n this.fileContainer = undefined;\n this.mounted = false;\n if (!recycle) {\n this.lineAnnotations = [];\n }\n this.annotationCache.clear();\n this.pre = undefined;\n this.bufferBefore?.remove();\n this.bufferBefore = undefined;\n this.bufferAfter?.remove();\n this.bufferAfter = undefined;\n this.appliedPreAttributes = undefined;\n this.lastRowCount = undefined;\n this.headerElement = undefined;\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.lastRenderedHeaderHTML = undefined;\n if (!recycle) {\n this.cachedHeaderHTML = undefined;\n }\n this.errorWrapper = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n this.placeHolder = undefined;\n this.unsafeCSSStyle = undefined;\n\n if (recycle) {\n this.fileRenderer.recycle();\n } else {\n this.fileRenderer.cleanUp();\n this.workerManager = undefined;\n this.file = undefined;\n }\n\n this.enabled = false;\n\n // Clean up the editor\n this.editor?.cleanUp();\n this.editor = undefined;\n }\n\n public virtualizedSetup(): void {\n this.enabled = true;\n this.workerManager?.subscribeToThemeChanges(this);\n }\n\n public hydrate(props: FileHydrateProps<LAnnotation>): void {\n const {\n fileContainer,\n prerenderedHTML,\n preventEmit = false,\n file,\n lineAnnotations,\n } = props;\n this.hydrateElements(fileContainer, prerenderedHTML);\n if (\n shouldRenderCode(this.pre, file, this.options.collapsed) ||\n shouldRenderHeader(\n this.headerElement,\n file,\n this.options.disableFileHeader\n )\n ) {\n this.render({ ...props, preventEmit: true });\n }\n // Otherwise orchestrate our setup.\n else {\n this.hydrationSetup({ file, lineAnnotations });\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n }\n\n protected hydrateElements(\n fileContainer: HTMLElement,\n prerenderedHTML: string | undefined\n ): void {\n if (this.fileContainer !== fileContainer) {\n this.emitPostRender(true);\n }\n prerenderHTMLIfNecessary(fileContainer, prerenderedHTML);\n for (const element of Array.from(\n fileContainer.shadowRoot?.children ?? []\n )) {\n if (element instanceof SVGElement) {\n this.spriteSVG = element;\n continue;\n }\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element instanceof HTMLPreElement) {\n this.pre = element;\n this.appliedPreAttributes = undefined;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle = element;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle = element;\n this.appliedUnsafeCSS = element.textContent;\n continue;\n }\n if ('diffsHeader' in element.dataset) {\n this.headerElement = element;\n this.lastRenderedHeaderHTML = undefined;\n continue;\n }\n }\n if (this.pre != null) {\n this.syncCodeNodeFromPre(this.pre);\n this.pre.removeAttribute('data-dehydrated');\n }\n this.fileContainer = fileContainer;\n this.hydrateMeasuredScrollbar();\n }\n\n protected hydrationSetup({\n file,\n lineAnnotations,\n }: HydrationSetup<LAnnotation>): void {\n this.lineAnnotations = lineAnnotations ?? this.lineAnnotations;\n this.file = file;\n this.fileRenderer.setOptions(getFileRendererOptions(this.options));\n this.syncInteractionOptions();\n if (this.pre == null) {\n return;\n }\n this.fileRenderer.hydrate(file);\n this.renderAnnotations();\n this.renderGutterUtility();\n this.injectUnsafeCSS();\n this.managersDirty = true;\n this.flushManagers();\n }\n\n public getOrCreateLineCache(\n file: FileContents | undefined = this.file\n ): string[] {\n return file != null\n ? this.fileRenderer.getOrCreateLineCache(file)\n : EMPTY_STRINGS;\n }\n\n protected updateBuffers(renderRange: RenderRange): void {\n if (this.pre != null) {\n this.applyBuffers(this.pre, renderRange);\n }\n }\n\n private syncRenderViewToEditor(): void {\n const editor = this.editor;\n const fileContainer = this.fileContainer;\n const file = this.file;\n if (editor != null && fileContainer != null && file != null) {\n void this.fileRenderer.initializeHighlighter().then((highlighter) => {\n editor.__syncRenderView(\n highlighter,\n fileContainer,\n file,\n this.lineAnnotations,\n this.renderRange\n );\n });\n }\n }\n\n public attachEditor(editor: DiffsEditor<LAnnotation>): () => void {\n this.editor?.cleanUp();\n this.editor = editor;\n this.interactionManager.setEditorAttached(true);\n this.syncRenderViewToEditor();\n return () => {\n this.editor = undefined;\n this.interactionManager.setEditorAttached(false);\n };\n }\n\n // normally triggered by the editor when the document line count changes\n public applyDocumentChange(\n textDocument: DiffsTextDocument,\n newLineAnnotations?: LineAnnotation<LAnnotation>[]\n ): void {\n this.fileRenderer.applyDocumentChange(textDocument);\n if (\n newLineAnnotations != null &&\n newLineAnnotations !== this.lineAnnotations &&\n this.file != null\n ) {\n this.setLineAnnotations(newLineAnnotations);\n this.fileRenderer.setLineAnnotations(this.lineAnnotations);\n this.renderAnnotations();\n }\n }\n\n public updateRenderCache(\n dirtyLines: Map<number, Array<HighlightedToken>>,\n themeType: 'dark' | 'light'\n ): void {\n this.fileRenderer.updateRenderCache(dirtyLines, themeType);\n }\n\n public render({\n file,\n fileContainer,\n forceRender = false,\n preventEmit = false,\n containerWrapper,\n deferManagers = false,\n lineAnnotations,\n renderRange,\n }: FileRenderProps<LAnnotation>): boolean {\n if (!this.enabled) {\n throw new Error(\n 'File.render: attempting to call render after cleaned up'\n );\n }\n\n // postpone background tokenizing to next frame for avoiding UI freeze\n // during render\n this.editor?.__postponeBackgroundTokenizeToNextFrame();\n\n const { collapsed = false, themeType = 'system' } = this.options;\n const nextRenderRange = collapsed ? undefined : renderRange;\n const previousRenderRange = this.renderRange;\n const themeChanged = this.hasThemeChanged();\n const annotationsChanged =\n lineAnnotations != null &&\n (lineAnnotations.length > 0 || this.lineAnnotations.length > 0)\n ? lineAnnotations !== this.lineAnnotations\n : false;\n const didFileChange = !areFilesEqual(this.file, file);\n if (\n !collapsed &&\n !forceRender &&\n areRenderRangesEqual(nextRenderRange, this.renderRange) &&\n !didFileChange &&\n !annotationsChanged &&\n !themeChanged\n ) {\n return this.applyCachedThemeState(themeType);\n }\n\n this.renderRange = nextRenderRange;\n if (didFileChange) {\n this.cachedHeaderHTML = undefined;\n }\n this.file = file;\n this.fileRenderer.setOptions(getFileRendererOptions(this.options));\n this.syncInteractionOptions();\n if (lineAnnotations != null) {\n this.setLineAnnotations(lineAnnotations);\n }\n this.fileRenderer.setLineAnnotations(this.lineAnnotations);\n\n const { disableErrorHandling = false, disableFileHeader = false } =\n this.options;\n if (disableFileHeader) {\n // Remove existing header from DOM\n if (this.headerElement != null) {\n this.headerElement.remove();\n this.headerElement = undefined;\n this.lastRenderedHeaderHTML = undefined;\n }\n this.clearHeaderSlots();\n }\n\n fileContainer = this.getOrCreateFileContainerNode(\n fileContainer,\n containerWrapper\n );\n this.applyCachedThemeState(themeType);\n\n if (collapsed) {\n this.removeRenderedCode();\n this.clearAuxiliaryNodes();\n\n try {\n const fileResult = this.fileRenderer.renderFile(\n file,\n EMPTY_RENDER_RANGE\n );\n if (fileResult != null) {\n this.applyThemeState(\n fileContainer,\n fileResult.themeStyles,\n themeType,\n fileResult.baseThemeType\n );\n }\n if (fileResult?.headerAST != null) {\n this.applyHeaderToDOM(fileResult.headerAST, fileContainer);\n }\n this.injectUnsafeCSS();\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n try {\n const pre = this.getOrCreatePreNode(fileContainer);\n if (\n !this.canPartiallyRender(\n forceRender,\n annotationsChanged,\n didFileChange || themeChanged\n ) ||\n !this.applyPartialRender(previousRenderRange, nextRenderRange)\n ) {\n const fileResult = this.fileRenderer.renderFile(file, nextRenderRange);\n if (fileResult == null) {\n if (this.workerManager?.isInitialized() === false) {\n void this.workerManager.initialize().then(() => this.rerender());\n }\n return false;\n }\n this.applyThemeState(\n fileContainer,\n fileResult.themeStyles,\n themeType,\n fileResult.baseThemeType\n );\n if (fileResult.headerAST != null) {\n this.applyHeaderToDOM(fileResult.headerAST, fileContainer);\n }\n this.applyFullRender(fileResult, pre);\n }\n\n this.applyBuffers(pre, nextRenderRange);\n this.injectUnsafeCSS();\n this.managersDirty = true;\n if (!deferManagers) {\n this.flushManagers();\n }\n this.renderAnnotations();\n this.renderGutterUtility();\n if (this.editor != null) {\n this.syncRenderViewToEditor();\n }\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n private emitPostRender(unmount = false) {\n const {\n fileContainer,\n options: { onPostRender },\n } = this;\n\n if (unmount) {\n if (!this.mounted) {\n return;\n }\n this.mounted = false;\n if (fileContainer == null) {\n return;\n }\n onPostRender?.(fileContainer, this, 'unmount');\n return;\n }\n\n if (fileContainer == null) {\n return;\n }\n\n const phase: PostRenderPhase = this.mounted ? 'update' : 'mount';\n this.mounted = true;\n onPostRender?.(fileContainer, this, phase);\n }\n\n private removeRenderedCode(): void {\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n\n this.bufferBefore?.remove();\n this.bufferBefore = undefined;\n this.bufferAfter?.remove();\n this.bufferAfter = undefined;\n\n this.code?.remove();\n this.code = undefined;\n\n this.pre?.remove();\n this.pre = undefined;\n\n this.appliedPreAttributes = undefined;\n this.lastRowCount = undefined;\n }\n\n private clearAuxiliaryNodes(): void {\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n }\n\n private canPartiallyRender(\n forceRender: boolean,\n annotationsChanged: boolean,\n didContentChange: boolean\n ): boolean {\n if (forceRender || annotationsChanged || didContentChange) {\n return false;\n }\n return true;\n }\n\n public renderPlaceholder(height: number): boolean {\n if (this.fileContainer == null) {\n return false;\n }\n this.emitPostRender(true);\n this.cleanChildNodes();\n\n if (this.placeHolder == null) {\n const shadowRoot =\n this.fileContainer.shadowRoot ??\n this.fileContainer.attachShadow({ mode: 'open' });\n this.placeHolder = document.createElement('div');\n this.placeHolder.dataset.placeholder = '';\n shadowRoot.appendChild(this.placeHolder);\n }\n this.placeHolder.style.setProperty('height', `${height}px`);\n return true;\n }\n\n public primeHighlightCache(): void {\n const { file, workerManager } = this;\n if (\n file == null ||\n file.cacheKey == null ||\n workerManager == null ||\n isFilePlainText(file)\n ) {\n return;\n }\n const lines = this.fileRenderer.getOrCreateLineCache(file);\n if (\n lines.length >\n (this.options.tokenizeMaxLength ?? DEFAULT_TOKENIZE_MAX_LENGTH)\n ) {\n return;\n }\n workerManager.primeFileHighlightCache(file);\n }\n\n private cleanChildNodes() {\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n\n this.bufferAfter?.remove();\n this.bufferBefore?.remove();\n this.code?.remove();\n this.errorWrapper?.remove();\n this.headerElement?.remove();\n this.gutterUtilityContent?.remove();\n this.headerPrefix?.remove();\n this.headerFilenameSuffix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.pre?.remove();\n this.spriteSVG?.remove();\n this.themeCSSStyle?.remove();\n this.unsafeCSSStyle?.remove();\n\n this.bufferAfter = undefined;\n this.bufferBefore = undefined;\n this.code = undefined;\n this.errorWrapper = undefined;\n this.headerElement = undefined;\n this.gutterUtilityContent = undefined;\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.pre = undefined;\n this.spriteSVG = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n\n this.lastRenderedHeaderHTML = undefined;\n this.lastRowCount = undefined;\n\n this.mounted = false;\n }\n\n private renderAnnotations(): void {\n if (this.isContainerManaged || this.fileContainer == null) {\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n return;\n }\n const staleAnnotations = new Map(this.annotationCache);\n const { renderAnnotation } = this.options;\n if (renderAnnotation != null && this.lineAnnotations.length > 0) {\n for (const [index, annotation] of this.lineAnnotations.entries()) {\n const id = `${index}-${getLineAnnotationName(annotation)}`;\n let cache = this.annotationCache.get(id);\n if (\n cache == null ||\n !areLineAnnotationsEqual(annotation, cache.annotation)\n ) {\n cache?.element.remove();\n const content = renderAnnotation(annotation);\n // If we can't render anything, then we should not render anything\n // and clear the annotation cache if necessary.\n if (content == null) {\n continue;\n }\n cache = {\n element: createAnnotationWrapperNode(\n getLineAnnotationName(annotation)\n ),\n annotation,\n };\n cache.element.appendChild(content);\n this.fileContainer.appendChild(cache.element);\n this.annotationCache.set(id, cache);\n }\n staleAnnotations.delete(id);\n }\n }\n for (const [id, { element }] of staleAnnotations.entries()) {\n this.annotationCache.delete(id);\n element.remove();\n }\n }\n\n private renderGutterUtility() {\n const { renderGutterUtility } = this.options;\n if (this.fileContainer == null || renderGutterUtility == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const element = renderGutterUtility(this.interactionManager.getHoveredLine);\n if (element != null && this.gutterUtilityContent != null) {\n return;\n } else if (element == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const gutterUtilityContent = createGutterUtilityContentNode();\n gutterUtilityContent.appendChild(element);\n this.fileContainer.appendChild(gutterUtilityContent);\n this.gutterUtilityContent = gutterUtilityContent;\n }\n\n private injectUnsafeCSS(): void {\n const { unsafeCSS } = this.options;\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null) {\n return;\n }\n\n if (unsafeCSS == null || unsafeCSS === '') {\n if (this.unsafeCSSStyle != null) {\n this.unsafeCSSStyle.remove();\n this.unsafeCSSStyle = undefined;\n }\n this.appliedUnsafeCSS = undefined;\n return;\n }\n\n if (\n this.unsafeCSSStyle?.parentNode === shadowRoot &&\n this.appliedUnsafeCSS === unsafeCSS\n ) {\n return;\n }\n\n // Create or update the style element\n this.unsafeCSSStyle ??= createUnsafeCSSStyleNode();\n if (this.unsafeCSSStyle.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.unsafeCSSStyle);\n }\n // Wrap in @layer unsafe to match SSR behavior\n this.unsafeCSSStyle.textContent = wrapUnsafeCSS(unsafeCSS);\n this.appliedUnsafeCSS = unsafeCSS;\n }\n\n private applyThemeState(\n container: HTMLElement,\n themeStyles: string,\n themeType: ThemeTypes,\n baseThemeType?: 'light' | 'dark'\n ): void {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n const effectiveThemeType = baseThemeType ?? themeType;\n const currentTheme = this.options.theme ?? DEFAULT_THEMES;\n const theme =\n typeof currentTheme === 'string' ? currentTheme : { ...currentTheme };\n const scrollbarGutter = getMeasuredScrollbarGutter(shadowRoot);\n if (\n this.themeCSSStyle?.parentNode === shadowRoot &&\n this.appliedThemeCSS?.themeStyles === themeStyles &&\n this.appliedThemeCSS.themeType === effectiveThemeType &&\n this.appliedThemeCSS.scrollbarGutter === scrollbarGutter\n ) {\n this.appliedThemeCSS.theme = theme;\n return;\n }\n if (\n this.hasAdoptedThemeCSS &&\n this.themeCSSStyle?.parentNode === shadowRoot\n ) {\n this.hasAdoptedThemeCSS = false;\n this.appliedThemeCSS = {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n };\n return;\n }\n this.themeCSSStyle = upsertHostThemeStyle({\n shadowRoot,\n currentNode: this.themeCSSStyle,\n themeCSS: wrapThemeCSS(themeStyles, effectiveThemeType, scrollbarGutter),\n });\n this.appliedThemeCSS =\n this.themeCSSStyle != null\n ? {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n }\n : undefined;\n }\n\n private hydrateMeasuredScrollbar(): void {\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null || this.themeCSSStyle == null) {\n return;\n }\n this.themeCSSStyle.textContent = patchScrollbarGutterSize(\n this.themeCSSStyle.textContent ?? '',\n getMeasuredScrollbarGutter(shadowRoot)\n );\n }\n\n private applyFullRender(result: FileRenderResult, pre: HTMLPreElement): void {\n this.cleanupErrorWrapper();\n this.applyPreNodeAttributes(pre, result);\n this.code = getOrCreateCodeNode({ code: this.code });\n const codeAst = this.fileRenderer.renderCodeAST(result);\n if (this.code.childElementCount >= 2) {\n for (let i = 0; i < 2; i++) {\n const domEl = this.code.children[i] as HTMLElement;\n const astEl = codeAst[i] as HASTElement;\n domEl.innerHTML = toHtml(astEl.children);\n domEl.style.cssText = astEl.properties.style as string;\n }\n } else {\n this.code.innerHTML = toHtml(codeAst);\n }\n if (!pre.contains(this.code)) {\n pre.replaceChildren(this.code);\n }\n this.lastRowCount = result.rowCount;\n }\n\n private applyPartialRender(\n previousRenderRange: RenderRange | undefined,\n renderRange: RenderRange | undefined\n ): boolean {\n if (previousRenderRange == null || renderRange == null) {\n return false;\n }\n const { file, code } = this;\n const columns = code != null ? this.getColumns(code) : undefined;\n if (file == null || code == null || columns == null) {\n return false;\n }\n\n const previousStart = previousRenderRange.startingLine;\n const nextStart = renderRange.startingLine;\n const previousEnd =\n previousRenderRange.totalLines === Infinity\n ? Number.POSITIVE_INFINITY\n : previousStart + previousRenderRange.totalLines;\n const nextEnd =\n renderRange.totalLines === Infinity\n ? Number.POSITIVE_INFINITY\n : nextStart + renderRange.totalLines;\n\n const overlapStart = Math.max(previousStart, nextStart);\n const overlapEnd = Math.min(previousEnd, nextEnd);\n if (overlapEnd <= overlapStart) {\n return false;\n }\n\n if (\n !this.trimDOMToOverlap(columns.gutter, overlapStart, overlapEnd) ||\n !this.trimDOMToOverlap(columns.content, overlapStart, overlapEnd)\n ) {\n return false;\n }\n\n let { length: rowCount } = columns.content.children;\n\n const renderChunk = (\n startingLine: number,\n totalLines: number\n ): FileRenderResult | undefined => {\n if (totalLines <= 0) {\n return undefined;\n }\n return this.fileRenderer.renderFile(file, {\n startingLine,\n totalLines,\n bufferBefore: 0,\n bufferAfter: 0,\n });\n };\n\n const prependResult =\n nextStart < overlapStart\n ? renderChunk(nextStart, overlapStart - nextStart)\n : undefined;\n if (prependResult === undefined && nextStart < overlapStart) {\n return false;\n }\n\n const appendTotalLines =\n nextEnd === Number.POSITIVE_INFINITY\n ? Number.POSITIVE_INFINITY\n : Math.max(0, nextEnd - overlapEnd);\n const appendResult =\n nextEnd > overlapEnd\n ? renderChunk(overlapEnd, appendTotalLines)\n : undefined;\n if (appendResult === undefined && nextEnd > overlapEnd) {\n return false;\n }\n\n this.cleanupErrorWrapper();\n if (prependResult != null) {\n columns.gutter.insertAdjacentHTML(\n 'afterbegin',\n this.fileRenderer.renderPartialHTML(prependResult.gutterAST)\n );\n columns.content.insertAdjacentHTML(\n 'afterbegin',\n this.fileRenderer.renderPartialHTML(prependResult.contentAST)\n );\n rowCount += prependResult.rowCount;\n }\n\n if (appendResult != null) {\n columns.gutter.insertAdjacentHTML(\n 'beforeend',\n this.fileRenderer.renderPartialHTML(appendResult.gutterAST)\n );\n columns.content.insertAdjacentHTML(\n 'beforeend',\n this.fileRenderer.renderPartialHTML(appendResult.contentAST)\n );\n rowCount += appendResult.rowCount;\n }\n\n if (this.lastRowCount !== rowCount) {\n columns.gutter.style.setProperty('grid-row', `span ${rowCount}`);\n columns.content.style.setProperty('grid-row', `span ${rowCount}`);\n this.lastRowCount = rowCount;\n }\n\n return true;\n }\n\n private getColumns(code: HTMLElement): ColumnElements | undefined {\n const gutter = code.children[0];\n const content = code.children[1];\n if (\n !(gutter instanceof HTMLElement) ||\n !(content instanceof HTMLElement) ||\n gutter.dataset.gutter == null ||\n content.dataset.content == null\n ) {\n return undefined;\n }\n return { gutter, content };\n }\n\n private trimDOMToOverlap(\n container: HTMLElement,\n overlapStart: number,\n overlapEnd: number\n ): boolean {\n const boundaryIndices = this.getDOMBoundaryIndices(container, [\n overlapStart,\n overlapEnd,\n ]);\n const startIndex =\n boundaryIndices.get(overlapStart) ?? container.children.length;\n const endIndex =\n boundaryIndices.get(overlapEnd) ?? container.children.length;\n\n if (startIndex > endIndex) {\n return false;\n }\n\n for (let i = container.children.length - 1; i >= endIndex; i -= 1) {\n container.children[i]?.remove();\n }\n for (let i = startIndex - 1; i >= 0; i -= 1) {\n container.children[i]?.remove();\n }\n return true;\n }\n\n private getDOMBoundaryIndices(\n container: HTMLElement,\n boundaries: number[]\n ): Map<number, number> {\n const sortedBoundaries = [...new Set(boundaries)].sort((a, b) => a - b);\n const boundaryIndices = new Map<number, number>();\n if (sortedBoundaries.length === 0) {\n return boundaryIndices;\n }\n let boundaryIndex = 0;\n let nextBoundary = sortedBoundaries[boundaryIndex];\n const { children } = container;\n\n if (nextBoundary === 0) {\n boundaryIndices.set(0, 0);\n boundaryIndex += 1;\n nextBoundary = sortedBoundaries[boundaryIndex];\n }\n\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i];\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n const lineIndex = this.getLineIndexFromDOMNode(child);\n if (lineIndex == null) {\n continue;\n }\n while (nextBoundary != null && lineIndex >= nextBoundary) {\n boundaryIndices.set(nextBoundary, i);\n boundaryIndex += 1;\n nextBoundary = sortedBoundaries[boundaryIndex];\n }\n if (boundaryIndex >= sortedBoundaries.length) {\n break;\n }\n }\n\n for (const boundary of sortedBoundaries) {\n if (!boundaryIndices.has(boundary)) {\n boundaryIndices.set(boundary, children.length);\n }\n }\n return boundaryIndices;\n }\n\n private getLineIndexFromDOMNode(node: HTMLElement): number | undefined {\n const lineIndexAttr = node.dataset.lineIndex;\n if (lineIndexAttr == null) {\n return undefined;\n }\n const parsed = Number(lineIndexAttr);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n private applyBuffers(\n pre: HTMLPreElement,\n renderRange: RenderRange | undefined\n ) {\n if (renderRange == null || this.shouldDisableVirtualizationBuffers()) {\n if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n return;\n }\n\n if (renderRange.bufferBefore > 0) {\n if (this.bufferBefore == null) {\n this.bufferBefore = document.createElement('div');\n this.bufferBefore.dataset.virtualizerBuffer = 'before';\n pre.before(this.bufferBefore);\n }\n this.bufferBefore.style.setProperty(\n 'height',\n `${renderRange.bufferBefore}px`\n );\n this.bufferBefore.style.setProperty('contain', 'strict');\n } else if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n\n if (renderRange.bufferAfter > 0) {\n if (this.bufferAfter == null) {\n this.bufferAfter = document.createElement('div');\n this.bufferAfter.dataset.virtualizerBuffer = 'after';\n pre.after(this.bufferAfter);\n }\n this.bufferAfter.style.setProperty(\n 'height',\n `${renderRange.bufferAfter}px`\n );\n this.bufferAfter.style.setProperty('contain', 'strict');\n } else if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n }\n\n protected shouldDisableVirtualizationBuffers(): boolean {\n return this.options.disableVirtualizationBuffers ?? false;\n }\n\n private applyHeaderToDOM(\n headerAST: HASTElement,\n container: HTMLElement\n ): void {\n const { file } = this;\n if (file == null) return;\n this.cleanupErrorWrapper();\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n const headerHTML = this.cachedHeaderHTML ?? toHtml(headerAST);\n this.cachedHeaderHTML = headerHTML;\n if (headerHTML !== this.lastRenderedHeaderHTML) {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = headerHTML;\n const newHeader = tempDiv.firstElementChild;\n if (!(newHeader instanceof HTMLElement)) {\n return;\n }\n if (this.headerElement != null) {\n container.shadowRoot?.replaceChild(newHeader, this.headerElement);\n } else {\n container.shadowRoot?.prepend(newHeader);\n }\n this.headerElement = newHeader;\n this.lastRenderedHeaderHTML = headerHTML;\n }\n\n if (this.isContainerManaged) return;\n\n const {\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderCustomHeader,\n renderHeaderMetadata,\n } = this.options;\n\n if (renderCustomHeader != null) {\n const content = renderCustomHeader(file) ?? undefined;\n this.headerCustom = this.upsertHeaderSlotElement(\n container,\n this.headerCustom,\n CUSTOM_HEADER_SLOT_ID,\n content\n );\n this.headerPrefix?.remove();\n this.headerFilenameSuffix?.remove();\n this.headerMetadata?.remove();\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n } else {\n const prefix = renderHeaderPrefix?.(file) ?? undefined;\n const suffix = renderHeaderFilenameSuffix?.(file) ?? undefined;\n const content = renderHeaderMetadata?.(file) ?? undefined;\n this.headerPrefix = this.upsertHeaderSlotElement(\n container,\n this.headerPrefix,\n HEADER_PREFIX_SLOT_ID,\n prefix\n );\n this.headerFilenameSuffix = this.upsertHeaderSlotElement(\n container,\n this.headerFilenameSuffix,\n HEADER_FILENAME_SUFFIX_SLOT_ID,\n suffix\n );\n this.headerMetadata = this.upsertHeaderSlotElement(\n container,\n this.headerMetadata,\n HEADER_METADATA_SLOT_ID,\n content\n );\n this.headerCustom?.remove();\n this.headerCustom = undefined;\n }\n }\n\n private clearHeaderSlots(): void {\n this.headerPrefix?.remove();\n this.headerFilenameSuffix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n }\n\n // Header slot callbacks are presence-based render hooks, not reactive views.\n private upsertHeaderSlotElement(\n container: HTMLElement,\n current: HTMLElement | undefined,\n slot: string,\n content: Element | string | number | undefined\n ): HTMLElement | undefined {\n if (content == null) {\n current?.remove();\n return undefined;\n }\n const element = current ?? this.createHeaderSlotElement(slot);\n if (current == null) {\n container.appendChild(element);\n }\n this.replaceHeaderSlotContent(element, content);\n return element;\n }\n\n private replaceHeaderSlotContent(\n element: HTMLElement,\n content: Element | string | number\n ): void {\n element.replaceChildren();\n if (content instanceof Element) {\n element.appendChild(content);\n } else {\n element.innerText = `${content}`;\n }\n }\n\n private createHeaderSlotElement(slot: string): HTMLElement {\n const element = document.createElement('div');\n element.slot = slot;\n return element;\n }\n\n protected getOrCreateFileContainerNode(\n fileContainer?: HTMLElement,\n parentNode?: HTMLElement\n ): HTMLElement {\n const { fileContainer: previousContainer } = this;\n const nextContainer =\n fileContainer ??\n previousContainer ??\n document.createElement(DIFFS_TAG_NAME);\n const containerChanged = previousContainer !== nextContainer;\n if (containerChanged) {\n this.emitPostRender(true);\n }\n this.fileContainer = nextContainer;\n if (previousContainer != null && containerChanged) {\n this.lastRenderedHeaderHTML = undefined;\n this.headerElement = undefined;\n }\n if (parentNode != null && this.fileContainer.parentNode !== parentNode) {\n parentNode.appendChild(this.fileContainer);\n }\n if (containerChanged) {\n this.adoptReusableShellElements(this.fileContainer);\n }\n this.ensureSpriteSVG(this.fileContainer);\n return this.fileContainer;\n }\n\n // NOTE(amadeus): Technically this method is not safe for use outside of\n // the CodeView component, however I don't think in practice it really\n // should matter, but maybe there's some system we need in place to prevent\n // this from running outside of that environment?\n //\n // It's making very specific assumptions that all the elements will have the\n // correct content based on CodeView global options\n private adoptReusableShellElements(fileContainer: HTMLElement): void {\n const { shadowRoot } = fileContainer;\n if (shadowRoot == null) {\n return;\n }\n\n for (const element of shadowRoot.children) {\n if (element instanceof SVGElement) {\n this.spriteSVG ??= element;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle ??= element;\n this.hasAdoptedThemeCSS = true;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle ??= element;\n this.appliedUnsafeCSS ??= this.options.unsafeCSS ?? undefined;\n }\n }\n }\n\n private ensureSpriteSVG(fileContainer: HTMLElement): void {\n const shadowRoot =\n fileContainer.shadowRoot ?? fileContainer.attachShadow({ mode: 'open' });\n if (this.spriteSVG == null) {\n const fragment = document.createElement('div');\n fragment.innerHTML = SVGSpriteSheet;\n const firstChild = fragment.firstChild;\n if (firstChild instanceof SVGElement) {\n this.spriteSVG = firstChild;\n }\n }\n if (this.spriteSVG != null && this.spriteSVG.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.spriteSVG);\n }\n }\n\n private getOrCreatePreNode(container: HTMLElement): HTMLPreElement {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n // If we haven't created a pre element yet, lets go ahead and do that\n if (this.pre == null) {\n this.pre = document.createElement('pre');\n this.appliedPreAttributes = undefined;\n this.code = undefined;\n shadowRoot.appendChild(this.pre);\n }\n // If we have a new parent container for the pre element, lets go ahead and\n // move it into the new container\n else if (this.pre.parentNode !== shadowRoot) {\n container.shadowRoot?.appendChild(this.pre);\n this.appliedPreAttributes = undefined;\n }\n\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n\n return this.pre;\n }\n\n private syncCodeNodeFromPre(pre: HTMLPreElement): void {\n this.code = undefined;\n for (const child of Array.from(pre.children)) {\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n if (child.hasAttribute('data-code')) {\n this.code = child;\n return;\n }\n }\n }\n\n private applyPreNodeAttributes(\n pre: HTMLPreElement,\n { totalLines }: FileRenderResult\n ): void {\n const { overflow = 'scroll', disableLineNumbers = false } = this.options;\n const preProperties: PrePropertiesConfig = {\n type: 'file',\n split: false,\n overflow,\n disableLineNumbers,\n diffIndicators: 'none',\n disableBackground: true,\n totalLines,\n };\n if (arePrePropertiesEqual(preProperties, this.appliedPreAttributes)) {\n return;\n }\n setPreNodeProperties(pre, preProperties);\n this.appliedPreAttributes = preProperties;\n }\n\n private applyErrorToDOM(error: Error, container: HTMLElement) {\n this.cleanupErrorWrapper();\n this.pre?.remove();\n this.pre = undefined;\n this.appliedPreAttributes = undefined;\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n this.errorWrapper ??= document.createElement('div');\n this.errorWrapper.dataset.errorWrapper = '';\n this.errorWrapper.textContent = '';\n shadowRoot.appendChild(this.errorWrapper);\n const errorMessage = document.createElement('div');\n errorMessage.dataset.errorMessage = '';\n errorMessage.innerText = error.message;\n this.errorWrapper.appendChild(errorMessage);\n const errorStack = document.createElement('pre');\n errorStack.dataset.errorStack = '';\n errorStack.innerText = error.stack ?? 'No Error Stack';\n this.errorWrapper.appendChild(errorStack);\n }\n\n private cleanupErrorWrapper() {\n this.errorWrapper?.remove();\n this.errorWrapper = undefined;\n }\n}\n\nfunction shouldRenderCode(\n pre: HTMLPreElement | undefined,\n file: FileContents | undefined,\n collapsed = false\n): boolean {\n return !collapsed && pre == null && file != null;\n}\n\nfunction shouldRenderHeader(\n headerElement: HTMLElement | undefined,\n file: FileContents | undefined,\n disableFileHeader: boolean = false\n): boolean {\n return headerElement == null && file != null && !disableFileHeader;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAkEA,MAAM,gBAA0B,CAAC,EAAE;AA+DnC,IAAI,aAAa;AAEjB,IAAa,OAAb,MAEiD;CAgDtC;CACC;CACA;CAjDV,OAAO,wBAAA;CAEP,OAAwB,QAAQ,EAAE;CAClC,OAAgB;CAEhB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,qBAA+B;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAkB;CAElB;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CAEA,kCACE,IAAI,IAAI;CACV,kBAA2D,CAAC;CAC5D,gBAA0B;CAE1B;CACA;CACA,UAAoB;CAEpB;CAEA,YACE,UAA2C,EAAE,OAAO,eAAe,GACnE,eACA,qBAA6B,OAC7B;EAHO,KAAA,UAAA;EACC,KAAA,gBAAA;EACA,KAAA,qBAAA;EAER,KAAK,eAAe,IAAI,aACtB,SACA,KAAK,uBACL,KAAK,aACP;EACA,KAAK,gBAAgB,IAAI,cAAc;EACvC,KAAK,qBAAqB,IAAI,mBAC5B,QACA,wBAAwB,OAAO,CACjC;EACA,KAAK,eAAe,wBAAwB,IAAI;CAClD;CAEA,8BAA4C;EAC1C,KAAK,SAAS;CAChB;CAEA,WAAwB;EACtB,IAAI,CAAC,KAAK,WAAW,KAAK,QAAQ,MAAM;EACxC,KAAK,OAAO;GACV,MAAM,KAAK;GACX,aAAa;GACb,aAAa,KAAK;EACpB,CAAC;CACH;CAEA,gBAA6B;EAC3B,KAAK,aAAa,iBAAiB;EACnC,KAAK,SAAS;CAChB;CAEA,WAAkB,SAAqD;EACrE,IAAI,WAAW,MAAM;EACrB,KAAK,UAAU;EACf,KAAK,mBAAmB,KAAA;EACxB,KAAK,uBAAuB;CAC9B;CAEA,yBAAyC;EACvC,KAAK,mBAAmB,WAAW,wBAAwB,KAAK,OAAO,CAAC;CAC1E;CAEA,aAAqB,SAAkD;EACrE,KAAK,UAAU;GAAE,GAAG,KAAK;GAAS,GAAG;EAAQ;CAC/C;CAEA,aAAoB,WAA6B;EAC/C,KAAK,KAAK,QAAQ,aAAa,cAAc,WAC3C;EAEF,KAAK,aAAa,EAAE,UAAU,CAAC;EAC/B,KAAK,sBAAsB,SAAS;CACtC;CAEA,sBAA8B,WAAgC;EAC5D,IACE,OAAO,KAAK,QAAQ,UAAU,YAC9B,KAAK,iBAAiB,QACtB,KAAK,mBAAmB,MAExB,OAAO;EAET,MAAM,qBAAqB,KAAK,gBAAgB,iBAAiB;EACjE,IAAI,KAAK,gBAAgB,cAAc,oBACrC,OAAO;EAET,KAAK,gBACH,KAAK,eACL,KAAK,gBAAgB,aACrB,WACA,KAAK,gBAAgB,aACvB;EACA,OAAO;CACT;CAEA,kBAAmC;EACjC,OACE,KAAK,mBAAmB,QACxB,CAAC,eACC,KAAK,gBAAgB,OACrB,KAAK,QAAQ,SAAS,cACxB;CAEJ;CAEA,uBAAwE;EACtE,OAAO,KAAK,mBAAmB,eAAe;CAChD;CAEA,mBACE,iBACM;EACN,KAAK,kBAAkB;CACzB;CAEA,iBACE,OACA,SACM;EACN,KAAK,mBAAmB,aAAa,OAAO,OAAO;CACrD;CAEA,gBAA6B;EAC3B,IAAI,CAAC,KAAK,iBAAiB,KAAK,OAAO,MAAM;GAC3C,KAAK,gBAAgB;GACrB;EACF;EAEA,MAAM,EAAE,WAAW,aAAa,KAAK;EACrC,KAAK,mBAAmB,MAAM,KAAK,GAAG;EACtC,KAAK,cAAc,MAAM,KAAK,KAAK,aAAa,MAAM;EACtD,KAAK,gBAAgB;CACvB;CAEA,QAAe,UAAU,OAAa;EACpC,KAAK,eAAe,IAAI;EACxB,KAAK,cAAc,QAAQ;EAC3B,KAAK,mBAAmB,QAAQ;EAChC,KAAK,gBAAgB;EACrB,KAAK,eAAe,0BAA0B,IAAI;EAClD,KAAK,cAAc,KAAA;EAGnB,IAAI,CAAC,KAAK,oBACR,KAAK,eAAe,OAAO;EAE7B,KAAK,gBAAgB,KAAA;EACrB,KAAK,UAAU;EACf,IAAI,CAAC,SACH,KAAK,kBAAkB,CAAC;EAE1B,KAAK,gBAAgB,MAAM;EAC3B,KAAK,MAAM,KAAA;EACX,KAAK,cAAc,OAAO;EAC1B,KAAK,eAAe,KAAA;EACpB,KAAK,aAAa,OAAO;EACzB,KAAK,cAAc,KAAA;EACnB,KAAK,uBAAuB,KAAA;EAC5B,KAAK,eAAe,KAAA;EACpB,KAAK,gBAAgB,KAAA;EACrB,KAAK,eAAe,KAAA;EACpB,KAAK,uBAAuB,KAAA;EAC5B,KAAK,iBAAiB,KAAA;EACtB,KAAK,eAAe,KAAA;EACpB,KAAK,yBAAyB,KAAA;EAC9B,IAAI,CAAC,SACH,KAAK,mBAAmB,KAAA;EAE1B,KAAK,eAAe,KAAA;EACpB,KAAK,gBAAgB,KAAA;EACrB,KAAK,kBAAkB,KAAA;EACvB,KAAK,qBAAqB;EAC1B,KAAK,iBAAiB,KAAA;EACtB,KAAK,mBAAmB,KAAA;EACxB,KAAK,cAAc,KAAA;EACnB,KAAK,iBAAiB,KAAA;EAEtB,IAAI,SACF,KAAK,aAAa,QAAQ;OACrB;GACL,KAAK,aAAa,QAAQ;GAC1B,KAAK,gBAAgB,KAAA;GACrB,KAAK,OAAO,KAAA;EACd;EAEA,KAAK,UAAU;EAGf,KAAK,QAAQ,QAAQ;EACrB,KAAK,SAAS,KAAA;CAChB;CAEA,mBAAgC;EAC9B,KAAK,UAAU;EACf,KAAK,eAAe,wBAAwB,IAAI;CAClD;CAEA,QAAe,OAA4C;EACzD,MAAM,EACJ,eACA,iBACA,cAAc,OACd,MACA,oBACE;EACJ,KAAK,gBAAgB,eAAe,eAAe;EACnD,IACE,iBAAiB,KAAK,KAAK,MAAM,KAAK,QAAQ,SAAS,KACvD,mBACE,KAAK,eACL,MACA,KAAK,QAAQ,iBACf,GAEA,KAAK,OAAO;GAAE,GAAG;GAAO,aAAa;EAAK,CAAC;OAI3C,KAAK,eAAe;GAAE;GAAM;EAAgB,CAAC;EAE/C,IAAI,CAAC,aACH,KAAK,eAAe;CAExB;CAEA,gBACE,eACA,iBACM;EACN,IAAI,KAAK,kBAAkB,eACzB,KAAK,eAAe,IAAI;EAE1B,yBAAyB,eAAe,eAAe;EACvD,KAAK,MAAM,WAAW,MAAM,KAC1B,cAAc,YAAY,YAAY,CAAC,CACzC,GAAG;GACD,IAAI,mBAAmB,YAAY;IACjC,KAAK,YAAY;IACjB;GACF;GACA,IAAI,EAAE,mBAAmB,cACvB;GAEF,IAAI,mBAAmB,gBAAgB;IACrC,KAAK,MAAM;IACX,KAAK,uBAAuB,KAAA;IAC5B;GACF;GACA,IACE,mBAAmB,oBACnB,QAAQ,aAAA,gBAAgC,GACxC;IACA,KAAK,gBAAgB;IACrB;GACF;GACA,IACE,mBAAmB,oBACnB,QAAQ,aAAA,iBAAiC,GACzC;IACA,KAAK,iBAAiB;IACtB,KAAK,mBAAmB,QAAQ;IAChC;GACF;GACA,IAAI,iBAAiB,QAAQ,SAAS;IACpC,KAAK,gBAAgB;IACrB,KAAK,yBAAyB,KAAA;IAC9B;GACF;EACF;EACA,IAAI,KAAK,OAAO,MAAM;GACpB,KAAK,oBAAoB,KAAK,GAAG;GACjC,KAAK,IAAI,gBAAgB,iBAAiB;EAC5C;EACA,KAAK,gBAAgB;EACrB,KAAK,yBAAyB;CAChC;CAEA,eAAyB,EACvB,MACA,mBACoC;EACpC,KAAK,kBAAkB,mBAAmB,KAAK;EAC/C,KAAK,OAAO;EACZ,KAAK,aAAa,WAAW,uBAAuB,KAAK,OAAO,CAAC;EACjE,KAAK,uBAAuB;EAC5B,IAAI,KAAK,OAAO,MACd;EAEF,KAAK,aAAa,QAAQ,IAAI;EAC9B,KAAK,kBAAkB;EACvB,KAAK,oBAAoB;EACzB,KAAK,gBAAgB;EACrB,KAAK,gBAAgB;EACrB,KAAK,cAAc;CACrB;CAEA,qBACE,OAAiC,KAAK,MAC5B;EACV,OAAO,QAAQ,OACX,KAAK,aAAa,qBAAqB,IAAI,IAC3C;CACN;CAEA,cAAwB,aAAgC;EACtD,IAAI,KAAK,OAAO,MACd,KAAK,aAAa,KAAK,KAAK,WAAW;CAE3C;CAEA,yBAAuC;EACrC,MAAM,SAAS,KAAK;EACpB,MAAM,gBAAgB,KAAK;EAC3B,MAAM,OAAO,KAAK;EAClB,IAAI,UAAU,QAAQ,iBAAiB,QAAQ,QAAQ,MACrD,KAAU,aAAa,sBAAsB,CAAC,CAAC,MAAM,gBAAgB;GACnE,OAAO,iBACL,aACA,eACA,MACA,KAAK,iBACL,KAAK,WACP;EACF,CAAC;CAEL;CAEA,aAAoB,QAA8C;EAChE,KAAK,QAAQ,QAAQ;EACrB,KAAK,SAAS;EACd,KAAK,mBAAmB,kBAAkB,IAAI;EAC9C,KAAK,uBAAuB;EAC5B,aAAa;GACX,KAAK,SAAS,KAAA;GACd,KAAK,mBAAmB,kBAAkB,KAAK;EACjD;CACF;CAGA,oBACE,cACA,oBACM;EACN,KAAK,aAAa,oBAAoB,YAAY;EAClD,IACE,sBAAsB,QACtB,uBAAuB,KAAK,mBAC5B,KAAK,QAAQ,MACb;GACA,KAAK,mBAAmB,kBAAkB;GAC1C,KAAK,aAAa,mBAAmB,KAAK,eAAe;GACzD,KAAK,kBAAkB;EACzB;CACF;CAEA,kBACE,YACA,WACM;EACN,KAAK,aAAa,kBAAkB,YAAY,SAAS;CAC3D;CAEA,OAAc,EACZ,MACA,eACA,cAAc,OACd,cAAc,OACd,kBACA,gBAAgB,OAChB,iBACA,eACwC;EACxC,IAAI,CAAC,KAAK,SACR,MAAM,IAAI,MACR,yDACF;EAKF,KAAK,QAAQ,wCAAwC;EAErD,MAAM,EAAE,YAAY,OAAO,YAAY,aAAa,KAAK;EACzD,MAAM,kBAAkB,YAAY,KAAA,IAAY;EAChD,MAAM,sBAAsB,KAAK;EACjC,MAAM,eAAe,KAAK,gBAAgB;EAC1C,MAAM,qBACJ,mBAAmB,SAClB,gBAAgB,SAAS,KAAK,KAAK,gBAAgB,SAAS,KACzD,oBAAoB,KAAK,kBACzB;EACN,MAAM,gBAAgB,CAAC,cAAc,KAAK,MAAM,IAAI;EACpD,IACE,CAAC,aACD,CAAC,eACD,qBAAqB,iBAAiB,KAAK,WAAW,KACtD,CAAC,iBACD,CAAC,sBACD,CAAC,cAED,OAAO,KAAK,sBAAsB,SAAS;EAG7C,KAAK,cAAc;EACnB,IAAI,eACF,KAAK,mBAAmB,KAAA;EAE1B,KAAK,OAAO;EACZ,KAAK,aAAa,WAAW,uBAAuB,KAAK,OAAO,CAAC;EACjE,KAAK,uBAAuB;EAC5B,IAAI,mBAAmB,MACrB,KAAK,mBAAmB,eAAe;EAEzC,KAAK,aAAa,mBAAmB,KAAK,eAAe;EAEzD,MAAM,EAAE,uBAAuB,OAAO,oBAAoB,UACxD,KAAK;EACP,IAAI,mBAAmB;GAErB,IAAI,KAAK,iBAAiB,MAAM;IAC9B,KAAK,cAAc,OAAO;IAC1B,KAAK,gBAAgB,KAAA;IACrB,KAAK,yBAAyB,KAAA;GAChC;GACA,KAAK,iBAAiB;EACxB;EAEA,gBAAgB,KAAK,6BACnB,eACA,gBACF;EACA,KAAK,sBAAsB,SAAS;EAEpC,IAAI,WAAW;GACb,KAAK,mBAAmB;GACxB,KAAK,oBAAoB;GAEzB,IAAI;IACF,MAAM,aAAa,KAAK,aAAa,WACnC,MACA,kBACF;IACA,IAAI,cAAc,MAChB,KAAK,gBACH,eACA,WAAW,aACX,WACA,WAAW,aACb;IAEF,IAAI,YAAY,aAAa,MAC3B,KAAK,iBAAiB,WAAW,WAAW,aAAa;IAE3D,KAAK,gBAAgB;GACvB,SAAS,OAAgB;IACvB,IAAI,sBACF,MAAM;IAER,QAAQ,MAAM,KAAK;IACnB,IAAI,iBAAiB,OACnB,KAAK,gBAAgB,OAAO,aAAa;GAE7C;GACA,IAAI,CAAC,aACH,KAAK,eAAe;GAEtB,OAAO;EACT;EAEA,IAAI;GACF,MAAM,MAAM,KAAK,mBAAmB,aAAa;GACjD,IACE,CAAC,KAAK,mBACJ,aACA,oBACA,iBAAiB,YACnB,KACA,CAAC,KAAK,mBAAmB,qBAAqB,eAAe,GAC7D;IACA,MAAM,aAAa,KAAK,aAAa,WAAW,MAAM,eAAe;IACrE,IAAI,cAAc,MAAM;KACtB,IAAI,KAAK,eAAe,cAAc,MAAM,OAC1C,KAAU,cAAc,WAAW,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC;KAEjE,OAAO;IACT;IACA,KAAK,gBACH,eACA,WAAW,aACX,WACA,WAAW,aACb;IACA,IAAI,WAAW,aAAa,MAC1B,KAAK,iBAAiB,WAAW,WAAW,aAAa;IAE3D,KAAK,gBAAgB,YAAY,GAAG;GACtC;GAEA,KAAK,aAAa,KAAK,eAAe;GACtC,KAAK,gBAAgB;GACrB,KAAK,gBAAgB;GACrB,IAAI,CAAC,eACH,KAAK,cAAc;GAErB,KAAK,kBAAkB;GACvB,KAAK,oBAAoB;GACzB,IAAI,KAAK,UAAU,MACjB,KAAK,uBAAuB;EAEhC,SAAS,OAAgB;GACvB,IAAI,sBACF,MAAM;GAER,QAAQ,MAAM,KAAK;GACnB,IAAI,iBAAiB,OACnB,KAAK,gBAAgB,OAAO,aAAa;EAE7C;EACA,IAAI,CAAC,aACH,KAAK,eAAe;EAEtB,OAAO;CACT;CAEA,eAAuB,UAAU,OAAO;EACtC,MAAM,EACJ,eACA,SAAS,EAAE,mBACT;EAEJ,IAAI,SAAS;GACX,IAAI,CAAC,KAAK,SACR;GAEF,KAAK,UAAU;GACf,IAAI,iBAAiB,MACnB;GAEF,eAAe,eAAe,MAAM,SAAS;GAC7C;EACF;EAEA,IAAI,iBAAiB,MACnB;EAGF,MAAM,QAAyB,KAAK,UAAU,WAAW;EACzD,KAAK,UAAU;EACf,eAAe,eAAe,MAAM,KAAK;CAC3C;CAEA,qBAAmC;EACjC,KAAK,cAAc,QAAQ;EAC3B,KAAK,mBAAmB,QAAQ;EAEhC,KAAK,cAAc,OAAO;EAC1B,KAAK,eAAe,KAAA;EACpB,KAAK,aAAa,OAAO;EACzB,KAAK,cAAc,KAAA;EAEnB,KAAK,MAAM,OAAO;EAClB,KAAK,OAAO,KAAA;EAEZ,KAAK,KAAK,OAAO;EACjB,KAAK,MAAM,KAAA;EAEX,KAAK,uBAAuB,KAAA;EAC5B,KAAK,eAAe,KAAA;CACtB;CAEA,sBAAoC;EAClC,KAAK,MAAM,EAAE,aAAa,KAAK,gBAAgB,OAAO,GACpD,QAAQ,OAAO;EAEjB,KAAK,gBAAgB,MAAM;EAE3B,KAAK,sBAAsB,OAAO;EAClC,KAAK,uBAAuB,KAAA;CAC9B;CAEA,mBACE,aACA,oBACA,kBACS;EACT,IAAI,eAAe,sBAAsB,kBACvC,OAAO;EAET,OAAO;CACT;CAEA,kBAAyB,QAAyB;EAChD,IAAI,KAAK,iBAAiB,MACxB,OAAO;EAET,KAAK,eAAe,IAAI;EACxB,KAAK,gBAAgB;EAErB,IAAI,KAAK,eAAe,MAAM;GAC5B,MAAM,aACJ,KAAK,cAAc,cACnB,KAAK,cAAc,aAAa,EAAE,MAAM,OAAO,CAAC;GAClD,KAAK,cAAc,SAAS,cAAc,KAAK;GAC/C,KAAK,YAAY,QAAQ,cAAc;GACvC,WAAW,YAAY,KAAK,WAAW;EACzC;EACA,KAAK,YAAY,MAAM,YAAY,UAAU,GAAG,OAAO,GAAG;EAC1D,OAAO;CACT;CAEA,sBAAmC;EACjC,MAAM,EAAE,MAAM,kBAAkB;EAChC,IACE,QAAQ,QACR,KAAK,YAAY,QACjB,iBAAiB,QACjB,gBAAgB,IAAI,GAEpB;EAGF,IADc,KAAK,aAAa,qBAAqB,IAE/C,CAAC,CAAC,UACL,KAAK,QAAQ,qBAAA,MAEd;EAEF,cAAc,wBAAwB,IAAI;CAC5C;CAEA,kBAA0B;EACxB,KAAK,cAAc,QAAQ;EAC3B,KAAK,mBAAmB,QAAQ;EAEhC,KAAK,aAAa,OAAO;EACzB,KAAK,cAAc,OAAO;EAC1B,KAAK,MAAM,OAAO;EAClB,KAAK,cAAc,OAAO;EAC1B,KAAK,eAAe,OAAO;EAC3B,KAAK,sBAAsB,OAAO;EAClC,KAAK,cAAc,OAAO;EAC1B,KAAK,sBAAsB,OAAO;EAClC,KAAK,gBAAgB,OAAO;EAC5B,KAAK,cAAc,OAAO;EAC1B,KAAK,KAAK,OAAO;EACjB,KAAK,WAAW,OAAO;EACvB,KAAK,eAAe,OAAO;EAC3B,KAAK,gBAAgB,OAAO;EAE5B,KAAK,cAAc,KAAA;EACnB,KAAK,eAAe,KAAA;EACpB,KAAK,OAAO,KAAA;EACZ,KAAK,eAAe,KAAA;EACpB,KAAK,gBAAgB,KAAA;EACrB,KAAK,uBAAuB,KAAA;EAC5B,KAAK,eAAe,KAAA;EACpB,KAAK,uBAAuB,KAAA;EAC5B,KAAK,iBAAiB,KAAA;EACtB,KAAK,eAAe,KAAA;EACpB,KAAK,MAAM,KAAA;EACX,KAAK,YAAY,KAAA;EACjB,KAAK,gBAAgB,KAAA;EACrB,KAAK,kBAAkB,KAAA;EACvB,KAAK,qBAAqB;EAC1B,KAAK,iBAAiB,KAAA;EACtB,KAAK,mBAAmB,KAAA;EAExB,KAAK,yBAAyB,KAAA;EAC9B,KAAK,eAAe,KAAA;EAEpB,KAAK,UAAU;CACjB;CAEA,oBAAkC;EAChC,IAAI,KAAK,sBAAsB,KAAK,iBAAiB,MAAM;GACzD,KAAK,MAAM,EAAE,aAAa,KAAK,gBAAgB,OAAO,GACpD,QAAQ,OAAO;GAEjB,KAAK,gBAAgB,MAAM;GAC3B;EACF;EACA,MAAM,mBAAmB,IAAI,IAAI,KAAK,eAAe;EACrD,MAAM,EAAE,qBAAqB,KAAK;EAClC,IAAI,oBAAoB,QAAQ,KAAK,gBAAgB,SAAS,GAC5D,KAAK,MAAM,CAAC,OAAO,eAAe,KAAK,gBAAgB,QAAQ,GAAG;GAChE,MAAM,KAAK,GAAG,MAAM,GAAG,sBAAsB,UAAU;GACvD,IAAI,QAAQ,KAAK,gBAAgB,IAAI,EAAE;GACvC,IACE,SAAS,QACT,CAAC,wBAAwB,YAAY,MAAM,UAAU,GACrD;IACA,OAAO,QAAQ,OAAO;IACtB,MAAM,UAAU,iBAAiB,UAAU;IAG3C,IAAI,WAAW,MACb;IAEF,QAAQ;KACN,SAAS,4BACP,sBAAsB,UAAU,CAClC;KACA;IACF;IACA,MAAM,QAAQ,YAAY,OAAO;IACjC,KAAK,cAAc,YAAY,MAAM,OAAO;IAC5C,KAAK,gBAAgB,IAAI,IAAI,KAAK;GACpC;GACA,iBAAiB,OAAO,EAAE;EAC5B;EAEF,KAAK,MAAM,CAAC,IAAI,EAAE,cAAc,iBAAiB,QAAQ,GAAG;GAC1D,KAAK,gBAAgB,OAAO,EAAE;GAC9B,QAAQ,OAAO;EACjB;CACF;CAEA,sBAA8B;EAC5B,MAAM,EAAE,wBAAwB,KAAK;EACrC,IAAI,KAAK,iBAAiB,QAAQ,uBAAuB,MAAM;GAC7D,KAAK,sBAAsB,OAAO;GAClC,KAAK,uBAAuB,KAAA;GAC5B;EACF;EACA,MAAM,UAAU,oBAAoB,KAAK,mBAAmB,cAAc;EAC1E,IAAI,WAAW,QAAQ,KAAK,wBAAwB,MAClD;OACK,IAAI,WAAW,MAAM;GAC1B,KAAK,sBAAsB,OAAO;GAClC,KAAK,uBAAuB,KAAA;GAC5B;EACF;EACA,MAAM,uBAAuB,+BAA+B;EAC5D,qBAAqB,YAAY,OAAO;EACxC,KAAK,cAAc,YAAY,oBAAoB;EACnD,KAAK,uBAAuB;CAC9B;CAEA,kBAAgC;EAC9B,MAAM,EAAE,cAAc,KAAK;EAC3B,MAAM,aAAa,KAAK,eAAe;EACvC,IAAI,cAAc,MAChB;EAGF,IAAI,aAAa,QAAQ,cAAc,IAAI;GACzC,IAAI,KAAK,kBAAkB,MAAM;IAC/B,KAAK,eAAe,OAAO;IAC3B,KAAK,iBAAiB,KAAA;GACxB;GACA,KAAK,mBAAmB,KAAA;GACxB;EACF;EAEA,IACE,KAAK,gBAAgB,eAAe,cACpC,KAAK,qBAAqB,WAE1B;EAIF,KAAK,mBAAmB,yBAAyB;EACjD,IAAI,KAAK,eAAe,eAAe,YACrC,WAAW,YAAY,KAAK,cAAc;EAG5C,KAAK,eAAe,cAAc,cAAc,SAAS;EACzD,KAAK,mBAAmB;CAC1B;CAEA,gBACE,WACA,aACA,WACA,eACM;EACN,MAAM,aACJ,UAAU,cAAc,UAAU,aAAa,EAAE,MAAM,OAAO,CAAC;EACjE,MAAM,qBAAqB,iBAAiB;EAC5C,MAAM,eAAe,KAAK,QAAQ,SAAS;EAC3C,MAAM,QACJ,OAAO,iBAAiB,WAAW,eAAe,EAAE,GAAG,aAAa;EACtE,MAAM,kBAAkB,2BAA2B,UAAU;EAC7D,IACE,KAAK,eAAe,eAAe,cACnC,KAAK,iBAAiB,gBAAgB,eACtC,KAAK,gBAAgB,cAAc,sBACnC,KAAK,gBAAgB,oBAAoB,iBACzC;GACA,KAAK,gBAAgB,QAAQ;GAC7B;EACF;EACA,IACE,KAAK,sBACL,KAAK,eAAe,eAAe,YACnC;GACA,KAAK,qBAAqB;GAC1B,KAAK,kBAAkB;IACrB;IACA;IACA,WAAW;IACX;IACA;GACF;GACA;EACF;EACA,KAAK,gBAAgB,qBAAqB;GACxC;GACA,aAAa,KAAK;GAClB,UAAU,aAAa,aAAa,oBAAoB,eAAe;EACzE,CAAC;EACD,KAAK,kBACH,KAAK,iBAAiB,OAClB;GACE;GACA;GACA,WAAW;GACX;GACA;EACF,IACA,KAAA;CACR;CAEA,2BAAyC;EACvC,MAAM,aAAa,KAAK,eAAe;EACvC,IAAI,cAAc,QAAQ,KAAK,iBAAiB,MAC9C;EAEF,KAAK,cAAc,cAAc,yBAC/B,KAAK,cAAc,eAAe,IAClC,2BAA2B,UAAU,CACvC;CACF;CAEA,gBAAwB,QAA0B,KAA2B;EAC3E,KAAK,oBAAoB;EACzB,KAAK,uBAAuB,KAAK,MAAM;EACvC,KAAK,OAAO,oBAAoB,EAAE,MAAM,KAAK,KAAK,CAAC;EACnD,MAAM,UAAU,KAAK,aAAa,cAAc,MAAM;EACtD,IAAI,KAAK,KAAK,qBAAqB,GACjC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;GAC1B,MAAM,QAAQ,KAAK,KAAK,SAAS;GACjC,MAAM,QAAQ,QAAQ;GACtB,MAAM,YAAY,OAAO,MAAM,QAAQ;GACvC,MAAM,MAAM,UAAU,MAAM,WAAW;EACzC;OAEA,KAAK,KAAK,YAAY,OAAO,OAAO;EAEtC,IAAI,CAAC,IAAI,SAAS,KAAK,IAAI,GACzB,IAAI,gBAAgB,KAAK,IAAI;EAE/B,KAAK,eAAe,OAAO;CAC7B;CAEA,mBACE,qBACA,aACS;EACT,IAAI,uBAAuB,QAAQ,eAAe,MAChD,OAAO;EAET,MAAM,EAAE,MAAM,SAAS;EACvB,MAAM,UAAU,QAAQ,OAAO,KAAK,WAAW,IAAI,IAAI,KAAA;EACvD,IAAI,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,MAC7C,OAAO;EAGT,MAAM,gBAAgB,oBAAoB;EAC1C,MAAM,YAAY,YAAY;EAC9B,MAAM,cACJ,oBAAoB,eAAe,WAC/B,OAAO,oBACP,gBAAgB,oBAAoB;EAC1C,MAAM,UACJ,YAAY,eAAe,WACvB,OAAO,oBACP,YAAY,YAAY;EAE9B,MAAM,eAAe,KAAK,IAAI,eAAe,SAAS;EACtD,MAAM,aAAa,KAAK,IAAI,aAAa,OAAO;EAChD,IAAI,cAAc,cAChB,OAAO;EAGT,IACE,CAAC,KAAK,iBAAiB,QAAQ,QAAQ,cAAc,UAAU,KAC/D,CAAC,KAAK,iBAAiB,QAAQ,SAAS,cAAc,UAAU,GAEhE,OAAO;EAGT,IAAI,EAAE,QAAQ,aAAa,QAAQ,QAAQ;EAE3C,MAAM,eACJ,cACA,eACiC;GACjC,IAAI,cAAc,GAChB;GAEF,OAAO,KAAK,aAAa,WAAW,MAAM;IACxC;IACA;IACA,cAAc;IACd,aAAa;GACf,CAAC;EACH;EAEA,MAAM,gBACJ,YAAY,eACR,YAAY,WAAW,eAAe,SAAS,IAC/C,KAAA;EACN,IAAI,kBAAkB,KAAA,KAAa,YAAY,cAC7C,OAAO;EAGT,MAAM,mBACJ,YAAY,OAAO,oBACf,OAAO,oBACP,KAAK,IAAI,GAAG,UAAU,UAAU;EACtC,MAAM,eACJ,UAAU,aACN,YAAY,YAAY,gBAAgB,IACxC,KAAA;EACN,IAAI,iBAAiB,KAAA,KAAa,UAAU,YAC1C,OAAO;EAGT,KAAK,oBAAoB;EACzB,IAAI,iBAAiB,MAAM;GACzB,QAAQ,OAAO,mBACb,cACA,KAAK,aAAa,kBAAkB,cAAc,SAAS,CAC7D;GACA,QAAQ,QAAQ,mBACd,cACA,KAAK,aAAa,kBAAkB,cAAc,UAAU,CAC9D;GACA,YAAY,cAAc;EAC5B;EAEA,IAAI,gBAAgB,MAAM;GACxB,QAAQ,OAAO,mBACb,aACA,KAAK,aAAa,kBAAkB,aAAa,SAAS,CAC5D;GACA,QAAQ,QAAQ,mBACd,aACA,KAAK,aAAa,kBAAkB,aAAa,UAAU,CAC7D;GACA,YAAY,aAAa;EAC3B;EAEA,IAAI,KAAK,iBAAiB,UAAU;GAClC,QAAQ,OAAO,MAAM,YAAY,YAAY,QAAQ,UAAU;GAC/D,QAAQ,QAAQ,MAAM,YAAY,YAAY,QAAQ,UAAU;GAChE,KAAK,eAAe;EACtB;EAEA,OAAO;CACT;CAEA,WAAmB,MAA+C;EAChE,MAAM,SAAS,KAAK,SAAS;EAC7B,MAAM,UAAU,KAAK,SAAS;EAC9B,IACE,EAAE,kBAAkB,gBACpB,EAAE,mBAAmB,gBACrB,OAAO,QAAQ,UAAU,QACzB,QAAQ,QAAQ,WAAW,MAE3B;EAEF,OAAO;GAAE;GAAQ;EAAQ;CAC3B;CAEA,iBACE,WACA,cACA,YACS;EACT,MAAM,kBAAkB,KAAK,sBAAsB,WAAW,CAC5D,cACA,UACF,CAAC;EACD,MAAM,aACJ,gBAAgB,IAAI,YAAY,KAAK,UAAU,SAAS;EAC1D,MAAM,WACJ,gBAAgB,IAAI,UAAU,KAAK,UAAU,SAAS;EAExD,IAAI,aAAa,UACf,OAAO;EAGT,KAAK,IAAI,IAAI,UAAU,SAAS,SAAS,GAAG,KAAK,UAAU,KAAK,GAC9D,UAAU,SAAS,EAAE,EAAE,OAAO;EAEhC,KAAK,IAAI,IAAI,aAAa,GAAG,KAAK,GAAG,KAAK,GACxC,UAAU,SAAS,EAAE,EAAE,OAAO;EAEhC,OAAO;CACT;CAEA,sBACE,WACA,YACqB;EACrB,MAAM,mBAAmB,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC;EACtE,MAAM,kCAAkB,IAAI,IAAoB;EAChD,IAAI,iBAAiB,WAAW,GAC9B,OAAO;EAET,IAAI,gBAAgB;EACpB,IAAI,eAAe,iBAAiB;EACpC,MAAM,EAAE,aAAa;EAErB,IAAI,iBAAiB,GAAG;GACtB,gBAAgB,IAAI,GAAG,CAAC;GACxB,iBAAiB;GACjB,eAAe,iBAAiB;EAClC;EAEA,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG;GAC3C,MAAM,QAAQ,SAAS;GACvB,IAAI,EAAE,iBAAiB,cACrB;GAEF,MAAM,YAAY,KAAK,wBAAwB,KAAK;GACpD,IAAI,aAAa,MACf;GAEF,OAAO,gBAAgB,QAAQ,aAAa,cAAc;IACxD,gBAAgB,IAAI,cAAc,CAAC;IACnC,iBAAiB;IACjB,eAAe,iBAAiB;GAClC;GACA,IAAI,iBAAiB,iBAAiB,QACpC;EAEJ;EAEA,KAAK,MAAM,YAAY,kBACrB,IAAI,CAAC,gBAAgB,IAAI,QAAQ,GAC/B,gBAAgB,IAAI,UAAU,SAAS,MAAM;EAGjD,OAAO;CACT;CAEA,wBAAgC,MAAuC;EACrE,MAAM,gBAAgB,KAAK,QAAQ;EACnC,IAAI,iBAAiB,MACnB;EAEF,MAAM,SAAS,OAAO,aAAa;EACnC,OAAO,OAAO,MAAM,MAAM,IAAI,KAAA,IAAY;CAC5C;CAEA,aACE,KACA,aACA;EACA,IAAI,eAAe,QAAQ,KAAK,mCAAmC,GAAG;GACpE,IAAI,KAAK,gBAAgB,MAAM;IAC7B,KAAK,aAAa,OAAO;IACzB,KAAK,eAAe,KAAA;GACtB;GACA,IAAI,KAAK,eAAe,MAAM;IAC5B,KAAK,YAAY,OAAO;IACxB,KAAK,cAAc,KAAA;GACrB;GACA;EACF;EAEA,IAAI,YAAY,eAAe,GAAG;GAChC,IAAI,KAAK,gBAAgB,MAAM;IAC7B,KAAK,eAAe,SAAS,cAAc,KAAK;IAChD,KAAK,aAAa,QAAQ,oBAAoB;IAC9C,IAAI,OAAO,KAAK,YAAY;GAC9B;GACA,KAAK,aAAa,MAAM,YACtB,UACA,GAAG,YAAY,aAAa,GAC9B;GACA,KAAK,aAAa,MAAM,YAAY,WAAW,QAAQ;EACzD,OAAO,IAAI,KAAK,gBAAgB,MAAM;GACpC,KAAK,aAAa,OAAO;GACzB,KAAK,eAAe,KAAA;EACtB;EAEA,IAAI,YAAY,cAAc,GAAG;GAC/B,IAAI,KAAK,eAAe,MAAM;IAC5B,KAAK,cAAc,SAAS,cAAc,KAAK;IAC/C,KAAK,YAAY,QAAQ,oBAAoB;IAC7C,IAAI,MAAM,KAAK,WAAW;GAC5B;GACA,KAAK,YAAY,MAAM,YACrB,UACA,GAAG,YAAY,YAAY,GAC7B;GACA,KAAK,YAAY,MAAM,YAAY,WAAW,QAAQ;EACxD,OAAO,IAAI,KAAK,eAAe,MAAM;GACnC,KAAK,YAAY,OAAO;GACxB,KAAK,cAAc,KAAA;EACrB;CACF;CAEA,qCAAwD;EACtD,OAAO,KAAK,QAAQ,gCAAgC;CACtD;CAEA,iBACE,WACA,WACM;EACN,MAAM,EAAE,SAAS;EACjB,IAAI,QAAQ,MAAM;EAClB,KAAK,oBAAoB;EACzB,KAAK,aAAa,OAAO;EACzB,KAAK,cAAc,KAAA;EACnB,MAAM,aAAa,KAAK,oBAAoB,OAAO,SAAS;EAC5D,KAAK,mBAAmB;EACxB,IAAI,eAAe,KAAK,wBAAwB;GAC9C,MAAM,UAAU,SAAS,cAAc,KAAK;GAC5C,QAAQ,YAAY;GACpB,MAAM,YAAY,QAAQ;GAC1B,IAAI,EAAE,qBAAqB,cACzB;GAEF,IAAI,KAAK,iBAAiB,MACxB,UAAU,YAAY,aAAa,WAAW,KAAK,aAAa;QAEhE,UAAU,YAAY,QAAQ,SAAS;GAEzC,KAAK,gBAAgB;GACrB,KAAK,yBAAyB;EAChC;EAEA,IAAI,KAAK,oBAAoB;EAE7B,MAAM,EACJ,oBACA,4BACA,oBACA,yBACE,KAAK;EAET,IAAI,sBAAsB,MAAM;GAC9B,MAAM,UAAU,mBAAmB,IAAI,KAAK,KAAA;GAC5C,KAAK,eAAe,KAAK,wBACvB,WACA,KAAK,cACL,uBACA,OACF;GACA,KAAK,cAAc,OAAO;GAC1B,KAAK,sBAAsB,OAAO;GAClC,KAAK,gBAAgB,OAAO;GAC5B,KAAK,eAAe,KAAA;GACpB,KAAK,uBAAuB,KAAA;GAC5B,KAAK,iBAAiB,KAAA;EACxB,OAAO;GACL,MAAM,SAAS,qBAAqB,IAAI,KAAK,KAAA;GAC7C,MAAM,SAAS,6BAA6B,IAAI,KAAK,KAAA;GACrD,MAAM,UAAU,uBAAuB,IAAI,KAAK,KAAA;GAChD,KAAK,eAAe,KAAK,wBACvB,WACA,KAAK,cACL,uBACA,MACF;GACA,KAAK,uBAAuB,KAAK,wBAC/B,WACA,KAAK,sBACL,gCACA,MACF;GACA,KAAK,iBAAiB,KAAK,wBACzB,WACA,KAAK,gBACL,yBACA,OACF;GACA,KAAK,cAAc,OAAO;GAC1B,KAAK,eAAe,KAAA;EACtB;CACF;CAEA,mBAAiC;EAC/B,KAAK,cAAc,OAAO;EAC1B,KAAK,sBAAsB,OAAO;EAClC,KAAK,gBAAgB,OAAO;EAC5B,KAAK,cAAc,OAAO;EAC1B,KAAK,eAAe,KAAA;EACpB,KAAK,uBAAuB,KAAA;EAC5B,KAAK,iBAAiB,KAAA;EACtB,KAAK,eAAe,KAAA;CACtB;CAGA,wBACE,WACA,SACA,MACA,SACyB;EACzB,IAAI,WAAW,MAAM;GACnB,SAAS,OAAO;GAChB;EACF;EACA,MAAM,UAAU,WAAW,KAAK,wBAAwB,IAAI;EAC5D,IAAI,WAAW,MACb,UAAU,YAAY,OAAO;EAE/B,KAAK,yBAAyB,SAAS,OAAO;EAC9C,OAAO;CACT;CAEA,yBACE,SACA,SACM;EACN,QAAQ,gBAAgB;EACxB,IAAI,mBAAmB,SACrB,QAAQ,YAAY,OAAO;OAE3B,QAAQ,YAAY,GAAG;CAE3B;CAEA,wBAAgC,MAA2B;EACzD,MAAM,UAAU,SAAS,cAAc,KAAK;EAC5C,QAAQ,OAAO;EACf,OAAO;CACT;CAEA,6BACE,eACA,YACa;EACb,MAAM,EAAE,eAAe,sBAAsB;EAC7C,MAAM,gBACJ,iBACA,qBACA,SAAS,cAAA,iBAA4B;EACvC,MAAM,mBAAmB,sBAAsB;EAC/C,IAAI,kBACF,KAAK,eAAe,IAAI;EAE1B,KAAK,gBAAgB;EACrB,IAAI,qBAAqB,QAAQ,kBAAkB;GACjD,KAAK,yBAAyB,KAAA;GAC9B,KAAK,gBAAgB,KAAA;EACvB;EACA,IAAI,cAAc,QAAQ,KAAK,cAAc,eAAe,YAC1D,WAAW,YAAY,KAAK,aAAa;EAE3C,IAAI,kBACF,KAAK,2BAA2B,KAAK,aAAa;EAEpD,KAAK,gBAAgB,KAAK,aAAa;EACvC,OAAO,KAAK;CACd;CASA,2BAAmC,eAAkC;EACnE,MAAM,EAAE,eAAe;EACvB,IAAI,cAAc,MAChB;EAGF,KAAK,MAAM,WAAW,WAAW,UAC/B,IAAI,mBAAmB,YACrB,KAAK,cAAc;OACd,IACL,YAAY,OAAO,KACnB,QAAQ,aAAA,gBAAgC,GACxC;GACA,KAAK,kBAAkB;GACvB,KAAK,qBAAqB;EAC5B,OAAO,IACL,YAAY,OAAO,KACnB,QAAQ,aAAA,iBAAiC,GACzC;GACA,KAAK,mBAAmB;GACxB,KAAK,qBAAqB,KAAK,QAAQ,aAAa,KAAA;EACtD;CAEJ;CAEA,gBAAwB,eAAkC;EACxD,MAAM,aACJ,cAAc,cAAc,cAAc,aAAa,EAAE,MAAM,OAAO,CAAC;EACzE,IAAI,KAAK,aAAa,MAAM;GAC1B,MAAM,WAAW,SAAS,cAAc,KAAK;GAC7C,SAAS,YAAY;GACrB,MAAM,aAAa,SAAS;GAC5B,IAAI,sBAAsB,YACxB,KAAK,YAAY;EAErB;EACA,IAAI,KAAK,aAAa,QAAQ,KAAK,UAAU,eAAe,YAC1D,WAAW,YAAY,KAAK,SAAS;CAEzC;CAEA,mBAA2B,WAAwC;EACjE,MAAM,aACJ,UAAU,cAAc,UAAU,aAAa,EAAE,MAAM,OAAO,CAAC;EAEjE,IAAI,KAAK,OAAO,MAAM;GACpB,KAAK,MAAM,SAAS,cAAc,KAAK;GACvC,KAAK,uBAAuB,KAAA;GAC5B,KAAK,OAAO,KAAA;GACZ,WAAW,YAAY,KAAK,GAAG;EACjC,OAGK,IAAI,KAAK,IAAI,eAAe,YAAY;GAC3C,UAAU,YAAY,YAAY,KAAK,GAAG;GAC1C,KAAK,uBAAuB,KAAA;EAC9B;EAEA,KAAK,aAAa,OAAO;EACzB,KAAK,cAAc,KAAA;EAEnB,OAAO,KAAK;CACd;CAEA,oBAA4B,KAA2B;EACrD,KAAK,OAAO,KAAA;EACZ,KAAK,MAAM,SAAS,MAAM,KAAK,IAAI,QAAQ,GAAG;GAC5C,IAAI,EAAE,iBAAiB,cACrB;GAEF,IAAI,MAAM,aAAa,WAAW,GAAG;IACnC,KAAK,OAAO;IACZ;GACF;EACF;CACF;CAEA,uBACE,KACA,EAAE,cACI;EACN,MAAM,EAAE,WAAW,UAAU,qBAAqB,UAAU,KAAK;EACjE,MAAM,gBAAqC;GACzC,MAAM;GACN,OAAO;GACP;GACA;GACA,gBAAgB;GAChB,mBAAmB;GACnB;EACF;EACA,IAAI,sBAAsB,eAAe,KAAK,oBAAoB,GAChE;EAEF,qBAAqB,KAAK,aAAa;EACvC,KAAK,uBAAuB;CAC9B;CAEA,gBAAwB,OAAc,WAAwB;EAC5D,KAAK,oBAAoB;EACzB,KAAK,KAAK,OAAO;EACjB,KAAK,MAAM,KAAA;EACX,KAAK,uBAAuB,KAAA;EAC5B,MAAM,aACJ,UAAU,cAAc,UAAU,aAAa,EAAE,MAAM,OAAO,CAAC;EACjE,KAAK,iBAAiB,SAAS,cAAc,KAAK;EAClD,KAAK,aAAa,QAAQ,eAAe;EACzC,KAAK,aAAa,cAAc;EAChC,WAAW,YAAY,KAAK,YAAY;EACxC,MAAM,eAAe,SAAS,cAAc,KAAK;EACjD,aAAa,QAAQ,eAAe;EACpC,aAAa,YAAY,MAAM;EAC/B,KAAK,aAAa,YAAY,YAAY;EAC1C,MAAM,aAAa,SAAS,cAAc,KAAK;EAC/C,WAAW,QAAQ,aAAa;EAChC,WAAW,YAAY,MAAM,SAAS;EACtC,KAAK,aAAa,YAAY,UAAU;CAC1C;CAEA,sBAA8B;EAC5B,KAAK,cAAc,OAAO;EAC1B,KAAK,eAAe,KAAA;CACtB;AACF;AAEA,SAAS,iBACP,KACA,MACA,YAAY,OACH;CACT,OAAO,CAAC,aAAa,OAAO,QAAQ,QAAQ;AAC9C;AAEA,SAAS,mBACP,eACA,MACA,oBAA6B,OACpB;CACT,OAAO,iBAAiB,QAAQ,QAAQ,QAAQ,CAAC;AACnD"}
|
|
1
|
+
{"version":3,"file":"File.js","names":[],"sources":["../../src/components/File.ts"],"sourcesContent":["import type { Element as HASTElement } from 'hast';\nimport { toHtml } from 'hast-util-to-html';\n\nimport {\n CUSTOM_HEADER_SLOT_ID,\n DEFAULT_THEMES,\n DEFAULT_TOKENIZE_MAX_LENGTH,\n DIFFS_TAG_NAME,\n EMPTY_RENDER_RANGE,\n HEADER_FILENAME_SUFFIX_SLOT_ID,\n HEADER_METADATA_SLOT_ID,\n HEADER_PREFIX_SLOT_ID,\n THEME_CSS_ATTRIBUTE,\n UNSAFE_CSS_ATTRIBUTE,\n} from '../constants';\nimport {\n type GetHoveredLineResult,\n InteractionManager,\n type InteractionManagerBaseOptions,\n pluckInteractionOptions,\n type SelectionWriteOptions,\n} from '../managers/InteractionManager';\nimport { ResizeManager } from '../managers/ResizeManager';\nimport { FileRenderer, type FileRenderResult } from '../renderers/FileRenderer';\nimport { SVGSpriteSheet } from '../sprite';\nimport type {\n AppliedThemeStyleCache,\n BaseCodeOptions,\n DiffsEditableComponent,\n DiffsEditor,\n DiffsTextDocument,\n FileContents,\n HighlightedToken,\n LineAnnotation,\n PostRenderPhase,\n PrePropertiesConfig,\n RenderFileMetadata,\n RenderRange,\n SelectedLineRange,\n ThemeTypes,\n} from '../types';\nimport { areFilesEqual } from '../utils/areFilesEqual';\nimport { areLineAnnotationsEqual } from '../utils/areLineAnnotationsEqual';\nimport { arePrePropertiesEqual } from '../utils/arePrePropertiesEqual';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { areThemesEqual } from '../utils/areThemesEqual';\nimport { createAnnotationWrapperNode } from '../utils/createAnnotationWrapperNode';\nimport { createGutterUtilityContentNode } from '../utils/createGutterUtilityContentNode';\nimport { createUnsafeCSSStyleNode } from '../utils/createUnsafeCSSStyleNode';\nimport {\n patchScrollbarGutterSize,\n wrapThemeCSS,\n wrapUnsafeCSS,\n} from '../utils/cssWrappers';\nimport { getFileRendererOptions } from '../utils/getFileRendererOptions';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\nimport { getOrCreateCodeNode } from '../utils/getOrCreateCodeNode';\nimport { upsertHostThemeStyle } from '../utils/hostTheme';\nimport { isFilePlainText } from '../utils/isFilePlainText';\nimport { isStyleNode } from '../utils/isStyleNode';\nimport { prerenderHTMLIfNecessary } from '../utils/prerenderHTMLIfNecessary';\nimport { getMeasuredScrollbarGutter } from '../utils/scrollbarGutter';\nimport { setPreNodeProperties } from '../utils/setWrapperNodeProps';\nimport type { WorkerPoolManager } from '../worker';\nimport { DiffsContainerLoaded } from './web-components';\n\nconst EMPTY_STRINGS: string[] = [''];\n\nexport interface FileRenderProps<LAnnotation> {\n file: FileContents;\n fileContainer?: HTMLElement;\n containerWrapper?: HTMLElement;\n deferManagers?: boolean;\n forceRender?: boolean;\n preventEmit?: boolean;\n lineAnnotations?: LineAnnotation<LAnnotation>[];\n renderRange?: RenderRange;\n}\n\nexport interface FileHydrateProps<LAnnotation> extends Omit<\n FileRenderProps<LAnnotation>,\n 'fileContainer'\n> {\n fileContainer: HTMLElement;\n prerenderedHTML?: string;\n}\n\nexport interface FileOptions<LAnnotation>\n extends BaseCodeOptions, InteractionManagerBaseOptions<'file'> {\n disableFileHeader?: boolean;\n renderHeaderPrefix?: RenderFileMetadata;\n renderHeaderFilenameSuffix?: RenderFileMetadata;\n renderHeaderMetadata?: RenderFileMetadata;\n renderCustomHeader?: 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?(\n annotation: LineAnnotation<LAnnotation>\n ): HTMLElement | undefined;\n renderGutterUtility?(\n getHoveredRow: () => GetHoveredLineResult<'file'> | undefined\n ): HTMLElement | null | undefined;\n\n onPostRender?(\n node: HTMLElement,\n instance: File<LAnnotation>,\n phase: PostRenderPhase\n ): unknown;\n}\n\ninterface AnnotationElementCache<LAnnotation> {\n element: HTMLElement;\n annotation: LineAnnotation<LAnnotation>;\n}\n\ninterface ColumnElements {\n gutter: HTMLElement;\n content: HTMLElement;\n}\n\ninterface HydrationSetup<LAnnotation> {\n file: FileContents;\n lineAnnotations: LineAnnotation<LAnnotation>[] | undefined;\n}\n\nlet instanceId = -1;\n\nexport class File<\n LAnnotation = undefined,\n> implements DiffsEditableComponent<LAnnotation> {\n static LoadedCustomComponent: boolean = DiffsContainerLoaded;\n\n readonly __id: string = `file:${++instanceId}`;\n readonly type = 'file';\n\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 themeCSSStyle: HTMLStyleElement | undefined;\n protected appliedThemeCSS: AppliedThemeStyleCache | undefined;\n protected hasAdoptedThemeCSS = false;\n protected unsafeCSSStyle: HTMLStyleElement | undefined;\n protected appliedUnsafeCSS: string | undefined;\n protected gutterUtilityContent: HTMLElement | undefined;\n protected errorWrapper: HTMLElement | undefined;\n protected placeHolder: HTMLElement | undefined;\n protected lastRenderedHeaderHTML: string | undefined;\n protected cachedHeaderHTML: string | undefined;\n protected appliedPreAttributes: PrePropertiesConfig | undefined;\n protected lastRowCount: number | undefined;\n private mounted = false;\n\n protected headerElement: HTMLElement | undefined;\n protected headerCustom: HTMLElement | undefined;\n protected headerPrefix: HTMLElement | undefined;\n protected headerFilenameSuffix: HTMLElement | undefined;\n protected headerMetadata: HTMLElement | undefined;\n\n protected fileRenderer: FileRenderer<LAnnotation>;\n protected resizeManager: ResizeManager;\n protected interactionManager: InteractionManager<'file'>;\n\n protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>> =\n new Map();\n protected lineAnnotations: LineAnnotation<LAnnotation>[] = [];\n protected managersDirty = false;\n\n public file: FileContents | undefined;\n protected renderRange: RenderRange | undefined;\n protected enabled = true;\n\n protected editor: DiffsEditor<LAnnotation> | undefined;\n\n constructor(\n public options: FileOptions<LAnnotation> = { theme: DEFAULT_THEMES },\n private workerManager?: WorkerPoolManager | undefined,\n private isContainerManaged = false\n ) {\n this.fileRenderer = new FileRenderer<LAnnotation>(\n options,\n this.handleHighlightRender,\n this.workerManager\n );\n this.resizeManager = new ResizeManager();\n this.interactionManager = new InteractionManager(\n 'file',\n pluckInteractionOptions(options)\n );\n this.workerManager?.subscribeToThemeChanges(this);\n }\n\n private handleHighlightRender = (): void => {\n this.rerender();\n };\n\n public rerender(): void {\n if (!this.enabled || this.file == null) return;\n this.render({\n file: this.file,\n forceRender: true,\n renderRange: this.renderRange,\n });\n }\n\n public onThemeChange(): void {\n this.fileRenderer.clearRenderCache();\n this.rerender();\n }\n\n public setOptions(options: FileOptions<LAnnotation> | undefined): void {\n if (options == null) return;\n this.options = options;\n this.cachedHeaderHTML = undefined;\n this.syncInteractionOptions();\n }\n\n protected syncInteractionOptions(): void {\n this.interactionManager.setOptions(pluckInteractionOptions(this.options));\n }\n\n private mergeOptions(options: Partial<FileOptions<LAnnotation>>): void {\n this.options = { ...this.options, ...options };\n }\n\n public setThemeType(themeType: ThemeTypes): void {\n if ((this.options.themeType ?? 'system') === themeType) {\n return;\n }\n this.mergeOptions({ themeType });\n this.applyCachedThemeState(themeType);\n }\n\n private applyCachedThemeState(themeType: ThemeTypes): boolean {\n if (\n typeof this.options.theme === 'string' ||\n this.fileContainer == null ||\n this.appliedThemeCSS == null\n ) {\n return false;\n }\n const effectiveThemeType = this.appliedThemeCSS.baseThemeType ?? themeType;\n if (this.appliedThemeCSS.themeType === effectiveThemeType) {\n return false;\n }\n this.applyThemeState(\n this.fileContainer,\n this.appliedThemeCSS.themeStyles,\n themeType,\n this.appliedThemeCSS.baseThemeType\n );\n return true;\n }\n\n private hasThemeChanged(): boolean {\n return (\n this.appliedThemeCSS != null &&\n !areThemesEqual(\n this.appliedThemeCSS.theme,\n this.options.theme ?? DEFAULT_THEMES\n )\n );\n }\n\n public getHoveredLine = (): GetHoveredLineResult<'file'> | undefined => {\n return this.interactionManager.getHoveredLine();\n };\n\n public setLineAnnotations(\n lineAnnotations: LineAnnotation<LAnnotation>[]\n ): void {\n this.lineAnnotations = lineAnnotations;\n }\n\n public setSelectedLines(\n range: SelectedLineRange | null,\n options?: SelectionWriteOptions\n ): void {\n this.interactionManager.setSelection(range, options);\n }\n\n public flushManagers(): void {\n if (!this.managersDirty || this.pre == null) {\n this.managersDirty = false;\n return;\n }\n\n const { overflow = 'scroll' } = this.options;\n this.interactionManager.setup(this.pre);\n this.resizeManager.setup(this.pre, {\n disableAnnotations: overflow === 'wrap',\n columnVariables: this.shouldApplyColumnVariables(overflow)\n ? 'apply'\n : 'measure',\n });\n this.managersDirty = false;\n }\n\n protected shouldApplyColumnVariables(overflow: 'scroll' | 'wrap'): boolean {\n return overflow === 'scroll' && this.lineAnnotations.length > 0;\n }\n\n public cleanUp(recycle = false): void {\n this.emitPostRender(true);\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n this.managersDirty = false;\n this.workerManager?.unsubscribeToThemeChanges(this);\n this.renderRange = undefined;\n\n // Clean up the elements\n if (!this.isContainerManaged) {\n this.fileContainer?.remove();\n }\n this.fileContainer = undefined;\n this.mounted = false;\n if (!recycle) {\n this.lineAnnotations = [];\n }\n this.clearAuxiliaryNodes();\n this.pre = undefined;\n this.bufferBefore?.remove();\n this.bufferBefore = undefined;\n this.bufferAfter?.remove();\n this.bufferAfter = undefined;\n this.appliedPreAttributes = undefined;\n this.lastRowCount = undefined;\n this.headerElement = undefined;\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.lastRenderedHeaderHTML = undefined;\n if (!recycle) {\n this.cachedHeaderHTML = undefined;\n }\n this.errorWrapper?.remove();\n this.errorWrapper = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n this.unsafeCSSStyle = undefined;\n\n if (recycle) {\n this.fileRenderer.recycle();\n } else {\n this.fileRenderer.cleanUp();\n this.workerManager = undefined;\n this.file = undefined;\n }\n\n this.enabled = false;\n\n this.editor?.cleanUp(recycle);\n this.editor = undefined;\n }\n\n public virtualizedSetup(): void {\n this.enabled = true;\n this.workerManager?.subscribeToThemeChanges(this);\n }\n\n public hydrate(props: FileHydrateProps<LAnnotation>): void {\n const {\n fileContainer,\n prerenderedHTML,\n preventEmit = false,\n file,\n lineAnnotations,\n } = props;\n if (!this.enabled) {\n throw new Error(\n 'File.hydrate: attempting to call hydrate after cleaned up'\n );\n }\n if (this.fileContainer != null) {\n throw new Error(\n 'File.hydrate: hydrate can only be called before the instance has rendered or hydrated'\n );\n }\n this.hydrateElements(fileContainer, prerenderedHTML);\n if (\n shouldRenderCode(this.pre, file, this.options.collapsed) ||\n shouldRenderHeader(\n this.headerElement,\n file,\n this.options.disableFileHeader\n )\n ) {\n this.render({ ...props, preventEmit: true });\n }\n // Otherwise orchestrate our setup.\n else {\n this.hydrationSetup({ file, lineAnnotations });\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n }\n\n protected hydrateElements(\n fileContainer: HTMLElement,\n prerenderedHTML: string | undefined\n ): void {\n if (this.fileContainer !== fileContainer) {\n this.emitPostRender(true);\n }\n prerenderHTMLIfNecessary(fileContainer, prerenderedHTML);\n for (const element of Array.from(\n fileContainer.shadowRoot?.children ?? []\n )) {\n if (element instanceof SVGElement) {\n this.spriteSVG = element;\n continue;\n }\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element instanceof HTMLPreElement) {\n this.pre = element;\n this.appliedPreAttributes = undefined;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle = element;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle = element;\n this.appliedUnsafeCSS = element.textContent;\n continue;\n }\n if ('diffsHeader' in element.dataset) {\n this.headerElement = element;\n this.lastRenderedHeaderHTML = undefined;\n continue;\n }\n }\n if (this.pre != null) {\n this.syncCodeNodeFromPre(this.pre);\n this.pre.removeAttribute('data-dehydrated');\n }\n this.fileContainer = fileContainer;\n this.hydrateMeasuredScrollbar();\n }\n\n protected hydrationSetup({\n file,\n lineAnnotations,\n }: HydrationSetup<LAnnotation>): void {\n this.lineAnnotations = lineAnnotations ?? this.lineAnnotations;\n this.file = file;\n this.fileRenderer.setOptions(getFileRendererOptions(this.options));\n this.syncInteractionOptions();\n if (this.pre == null) {\n return;\n }\n this.fileRenderer.hydrate(file);\n this.renderAnnotations();\n this.renderGutterUtility();\n this.injectUnsafeCSS();\n this.managersDirty = true;\n this.flushManagers();\n }\n\n public getOrCreateLineCache(\n file: FileContents | undefined = this.file\n ): string[] {\n return file != null\n ? this.fileRenderer.getOrCreateLineCache(file)\n : EMPTY_STRINGS;\n }\n\n protected updateBuffers(renderRange: RenderRange): void {\n if (this.pre != null) {\n this.applyBuffers(this.pre, renderRange);\n }\n }\n\n private syncRenderViewToEditor(): void {\n const editor = this.editor;\n const fileContainer = this.fileContainer;\n const file = this.file;\n const lineAnnotations = this.lineAnnotations;\n const renderRange = this.renderRange;\n if (editor != null && fileContainer != null && file != null) {\n void this.fileRenderer.initializeHighlighter().then((highlighter) => {\n if (\n !this.enabled ||\n this.editor !== editor ||\n this.fileContainer !== fileContainer ||\n this.file !== file\n ) {\n return;\n }\n editor.__syncRenderView(\n highlighter,\n fileContainer,\n file,\n lineAnnotations,\n renderRange\n );\n });\n }\n }\n\n public attachEditor(editor: DiffsEditor<LAnnotation>): () => void {\n this.editor?.cleanUp();\n this.editor = editor;\n this.interactionManager.setEditorAttached(true);\n this.syncRenderViewToEditor();\n return () => {\n this.editor = undefined;\n this.interactionManager.setEditorAttached(false);\n };\n }\n\n // normally triggered by the host when the document line count changes\n public applyDocumentChange(\n textDocument: DiffsTextDocument,\n newLineAnnotations?: LineAnnotation<LAnnotation>[]\n ): void {\n this.fileRenderer.applyDocumentChange(textDocument);\n if (\n newLineAnnotations != null &&\n newLineAnnotations !== this.lineAnnotations &&\n this.file != null\n ) {\n this.setLineAnnotations(newLineAnnotations);\n this.fileRenderer.setLineAnnotations(this.lineAnnotations);\n this.renderAnnotations();\n }\n }\n\n public updateRenderCache(\n dirtyLines: Map<number, Array<HighlightedToken>>,\n themeType: 'dark' | 'light'\n ): void {\n this.fileRenderer.updateRenderCache(dirtyLines, themeType);\n }\n\n public render({\n file,\n fileContainer,\n forceRender = false,\n preventEmit = false,\n containerWrapper,\n deferManagers = false,\n lineAnnotations,\n renderRange,\n }: FileRenderProps<LAnnotation>): boolean {\n if (!this.enabled) {\n throw new Error(\n 'File.render: attempting to call render after cleaned up'\n );\n }\n\n // use the file name as the cache key if it is not set\n if (file.cacheKey === undefined) {\n file.cacheKey = file.name;\n }\n\n // postpone background tokenizing to next frame for avoiding UI freeze\n // during render\n this.editor?.__postponeBgTokenizeToNextFrame();\n\n const { collapsed = false, themeType = 'system' } = this.options;\n const nextRenderRange = collapsed ? undefined : renderRange;\n const previousRenderRange = this.renderRange;\n const themeChanged = this.hasThemeChanged();\n const annotationsChanged =\n lineAnnotations != null &&\n (lineAnnotations.length > 0 || this.lineAnnotations.length > 0)\n ? lineAnnotations !== this.lineAnnotations\n : false;\n const didFileChange = !areFilesEqual(this.file, file);\n if (\n !collapsed &&\n !forceRender &&\n areRenderRangesEqual(nextRenderRange, this.renderRange) &&\n !didFileChange &&\n !annotationsChanged &&\n !themeChanged\n ) {\n return this.applyCachedThemeState(themeType);\n }\n\n this.renderRange = nextRenderRange;\n if (didFileChange) {\n this.cachedHeaderHTML = undefined;\n }\n this.file = file;\n this.fileRenderer.setOptions(getFileRendererOptions(this.options));\n this.syncInteractionOptions();\n if (lineAnnotations != null) {\n this.setLineAnnotations(lineAnnotations);\n }\n this.fileRenderer.setLineAnnotations(this.lineAnnotations);\n\n const { disableErrorHandling = false, disableFileHeader = false } =\n this.options;\n if (disableFileHeader) {\n // Remove existing header from DOM\n if (this.headerElement != null) {\n this.headerElement.remove();\n this.headerElement = undefined;\n this.lastRenderedHeaderHTML = undefined;\n }\n this.clearHeaderSlots();\n }\n\n fileContainer = this.getOrCreateFileContainerNode(\n fileContainer,\n containerWrapper\n );\n this.applyCachedThemeState(themeType);\n\n if (collapsed) {\n this.removeRenderedCode();\n this.clearAuxiliaryNodes();\n\n try {\n const fileResult = this.fileRenderer.renderFile(\n file,\n EMPTY_RENDER_RANGE\n );\n if (fileResult != null) {\n this.applyThemeState(\n fileContainer,\n fileResult.themeStyles,\n themeType,\n fileResult.baseThemeType\n );\n }\n if (fileResult?.headerAST != null) {\n this.applyHeaderToDOM(fileResult.headerAST, fileContainer);\n }\n this.injectUnsafeCSS();\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n try {\n const pre = this.getOrCreatePreNode(fileContainer);\n if (\n !this.canPartiallyRender(\n forceRender,\n annotationsChanged,\n didFileChange || themeChanged\n ) ||\n !this.applyPartialRender(previousRenderRange, nextRenderRange)\n ) {\n const fileResult = this.fileRenderer.renderFile(file, nextRenderRange);\n if (fileResult == null) {\n if (this.workerManager?.isInitialized() === false) {\n void this.workerManager.initialize().then(() => this.rerender());\n }\n return false;\n }\n this.applyThemeState(\n fileContainer,\n fileResult.themeStyles,\n themeType,\n fileResult.baseThemeType\n );\n if (fileResult.headerAST != null) {\n this.applyHeaderToDOM(fileResult.headerAST, fileContainer);\n }\n this.applyFullRender(fileResult, pre);\n }\n\n this.applyBuffers(pre, nextRenderRange);\n this.injectUnsafeCSS();\n this.managersDirty = true;\n if (!deferManagers) {\n this.flushManagers();\n }\n this.renderAnnotations();\n this.renderGutterUtility();\n if (this.editor != null) {\n this.syncRenderViewToEditor();\n }\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n private emitPostRender(unmount = false) {\n const {\n fileContainer,\n options: { onPostRender },\n } = this;\n\n if (unmount) {\n if (!this.mounted) {\n return;\n }\n this.mounted = false;\n if (fileContainer == null) {\n return;\n }\n onPostRender?.(fileContainer, this, 'unmount');\n return;\n }\n\n if (fileContainer == null) {\n return;\n }\n\n const phase: PostRenderPhase = this.mounted ? 'update' : 'mount';\n this.mounted = true;\n onPostRender?.(fileContainer, this, phase);\n }\n\n private removeRenderedCode(): void {\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n\n this.bufferBefore?.remove();\n this.bufferBefore = undefined;\n this.bufferAfter?.remove();\n this.bufferAfter = undefined;\n\n this.code?.remove();\n this.code = undefined;\n\n this.pre?.remove();\n this.pre = undefined;\n\n this.appliedPreAttributes = undefined;\n this.lastRowCount = undefined;\n }\n\n private clearAuxiliaryNodes(): void {\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n }\n\n private canPartiallyRender(\n forceRender: boolean,\n annotationsChanged: boolean,\n didContentChange: boolean\n ): boolean {\n if (forceRender || annotationsChanged || didContentChange) {\n return false;\n }\n return true;\n }\n\n public renderPlaceholder(height: number): boolean {\n if (this.fileContainer == null) {\n return false;\n }\n this.emitPostRender(true);\n this.cleanChildNodes();\n\n if (this.placeHolder == null) {\n const shadowRoot =\n this.fileContainer.shadowRoot ??\n this.fileContainer.attachShadow({ mode: 'open' });\n this.placeHolder = document.createElement('div');\n this.placeHolder.dataset.placeholder = '';\n shadowRoot.appendChild(this.placeHolder);\n }\n this.placeHolder.style.setProperty('height', `${height}px`);\n return true;\n }\n\n public primeHighlightCache(): void {\n const { file, workerManager } = this;\n if (\n file == null ||\n file.cacheKey == null ||\n workerManager == null ||\n isFilePlainText(file)\n ) {\n return;\n }\n const lines = this.fileRenderer.getOrCreateLineCache(file);\n if (\n lines.length >\n (this.options.tokenizeMaxLength ?? DEFAULT_TOKENIZE_MAX_LENGTH)\n ) {\n return;\n }\n void workerManager.primeFileHighlightCache(file).catch(() => undefined);\n }\n\n private cleanChildNodes() {\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n\n this.bufferAfter?.remove();\n this.bufferBefore?.remove();\n this.code?.remove();\n this.errorWrapper?.remove();\n this.headerElement?.remove();\n this.gutterUtilityContent?.remove();\n this.headerPrefix?.remove();\n this.headerFilenameSuffix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.pre?.remove();\n this.spriteSVG?.remove();\n this.themeCSSStyle?.remove();\n this.unsafeCSSStyle?.remove();\n\n this.bufferAfter = undefined;\n this.bufferBefore = undefined;\n this.code = undefined;\n this.errorWrapper = undefined;\n this.headerElement = undefined;\n this.gutterUtilityContent = undefined;\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.pre = undefined;\n this.spriteSVG = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n\n this.lastRenderedHeaderHTML = undefined;\n this.lastRowCount = undefined;\n\n this.mounted = false;\n }\n\n private renderAnnotations(): void {\n if (this.isContainerManaged || this.fileContainer == null) {\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n return;\n }\n const staleAnnotations = new Map(this.annotationCache);\n const { renderAnnotation } = this.options;\n if (renderAnnotation != null && this.lineAnnotations.length > 0) {\n for (const [index, annotation] of this.lineAnnotations.entries()) {\n const id = `${index}-${getLineAnnotationName(annotation)}`;\n let cache = this.annotationCache.get(id);\n if (\n cache == null ||\n !areLineAnnotationsEqual(annotation, cache.annotation)\n ) {\n cache?.element.remove();\n const content = renderAnnotation(annotation);\n // If we can't render anything, then we should not render anything\n // and clear the annotation cache if necessary.\n if (content == null) {\n continue;\n }\n cache = {\n element: createAnnotationWrapperNode(\n getLineAnnotationName(annotation)\n ),\n annotation,\n };\n cache.element.appendChild(content);\n this.fileContainer.appendChild(cache.element);\n this.annotationCache.set(id, cache);\n }\n staleAnnotations.delete(id);\n }\n }\n for (const [id, { element }] of staleAnnotations.entries()) {\n this.annotationCache.delete(id);\n element.remove();\n }\n }\n\n private renderGutterUtility() {\n const { renderGutterUtility } = this.options;\n if (this.fileContainer == null || renderGutterUtility == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const element = renderGutterUtility(this.interactionManager.getHoveredLine);\n if (element != null && this.gutterUtilityContent != null) {\n return;\n } else if (element == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const gutterUtilityContent = createGutterUtilityContentNode();\n gutterUtilityContent.appendChild(element);\n this.fileContainer.appendChild(gutterUtilityContent);\n this.gutterUtilityContent = gutterUtilityContent;\n }\n\n private injectUnsafeCSS(): void {\n const { unsafeCSS } = this.options;\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null) {\n return;\n }\n\n if (unsafeCSS == null || unsafeCSS === '') {\n if (this.unsafeCSSStyle != null) {\n this.unsafeCSSStyle.remove();\n this.unsafeCSSStyle = undefined;\n }\n this.appliedUnsafeCSS = undefined;\n return;\n }\n\n if (\n this.unsafeCSSStyle?.parentNode === shadowRoot &&\n this.appliedUnsafeCSS === unsafeCSS\n ) {\n return;\n }\n\n // Create or update the style element\n this.unsafeCSSStyle ??= createUnsafeCSSStyleNode();\n if (this.unsafeCSSStyle.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.unsafeCSSStyle);\n }\n // Wrap in @layer unsafe to match SSR behavior\n this.unsafeCSSStyle.textContent = wrapUnsafeCSS(unsafeCSS);\n this.appliedUnsafeCSS = unsafeCSS;\n }\n\n private applyThemeState(\n container: HTMLElement,\n themeStyles: string,\n themeType: ThemeTypes,\n baseThemeType?: 'light' | 'dark'\n ): void {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n const effectiveThemeType = baseThemeType ?? themeType;\n const currentTheme = this.options.theme ?? DEFAULT_THEMES;\n const theme =\n typeof currentTheme === 'string' ? currentTheme : { ...currentTheme };\n const scrollbarGutter = getMeasuredScrollbarGutter(shadowRoot);\n if (\n this.themeCSSStyle?.parentNode === shadowRoot &&\n this.appliedThemeCSS?.themeStyles === themeStyles &&\n this.appliedThemeCSS.themeType === effectiveThemeType &&\n this.appliedThemeCSS.scrollbarGutter === scrollbarGutter\n ) {\n this.appliedThemeCSS.theme = theme;\n return;\n }\n if (\n this.hasAdoptedThemeCSS &&\n this.themeCSSStyle?.parentNode === shadowRoot\n ) {\n this.hasAdoptedThemeCSS = false;\n this.appliedThemeCSS = {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n };\n return;\n }\n this.themeCSSStyle = upsertHostThemeStyle({\n shadowRoot,\n currentNode: this.themeCSSStyle,\n themeCSS: wrapThemeCSS(themeStyles, effectiveThemeType, scrollbarGutter),\n });\n this.appliedThemeCSS =\n this.themeCSSStyle != null\n ? {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n }\n : undefined;\n }\n\n private hydrateMeasuredScrollbar(): void {\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null || this.themeCSSStyle == null) {\n return;\n }\n this.themeCSSStyle.textContent = patchScrollbarGutterSize(\n this.themeCSSStyle.textContent ?? '',\n getMeasuredScrollbarGutter(shadowRoot)\n );\n }\n\n private applyFullRender(result: FileRenderResult, pre: HTMLPreElement): void {\n this.cleanupErrorWrapper();\n this.applyPreNodeAttributes(pre, result);\n this.code = getOrCreateCodeNode({ code: this.code });\n const codeAst = this.fileRenderer.renderCodeAST(result);\n if (this.code.childElementCount >= 2) {\n for (let i = 0; i < 2; i++) {\n const domEl = this.code.children[i] as HTMLElement;\n const astEl = codeAst[i] as HASTElement;\n domEl.innerHTML = toHtml(astEl.children);\n domEl.style.cssText = astEl.properties.style as string;\n }\n } else {\n this.code.innerHTML = toHtml(codeAst);\n }\n if (!pre.contains(this.code)) {\n pre.replaceChildren(this.code);\n }\n this.lastRowCount = result.rowCount;\n }\n\n private applyPartialRender(\n previousRenderRange: RenderRange | undefined,\n renderRange: RenderRange | undefined\n ): boolean {\n if (previousRenderRange == null || renderRange == null) {\n return false;\n }\n const { file, code } = this;\n const columns = code != null ? this.getColumns(code) : undefined;\n if (file == null || code == null || columns == null) {\n return false;\n }\n\n const previousStart = previousRenderRange.startingLine;\n const nextStart = renderRange.startingLine;\n const previousEnd =\n previousRenderRange.totalLines === Infinity\n ? Number.POSITIVE_INFINITY\n : previousStart + previousRenderRange.totalLines;\n const nextEnd =\n renderRange.totalLines === Infinity\n ? Number.POSITIVE_INFINITY\n : nextStart + renderRange.totalLines;\n\n const overlapStart = Math.max(previousStart, nextStart);\n const overlapEnd = Math.min(previousEnd, nextEnd);\n if (overlapEnd <= overlapStart) {\n return false;\n }\n\n if (\n !this.trimDOMToOverlap(columns.gutter, overlapStart, overlapEnd) ||\n !this.trimDOMToOverlap(columns.content, overlapStart, overlapEnd)\n ) {\n return false;\n }\n\n let { length: rowCount } = columns.content.children;\n\n const renderChunk = (\n startingLine: number,\n totalLines: number\n ): FileRenderResult | undefined => {\n if (totalLines <= 0) {\n return undefined;\n }\n return this.fileRenderer.renderFile(file, {\n startingLine,\n totalLines,\n bufferBefore: 0,\n bufferAfter: 0,\n });\n };\n\n const prependResult =\n nextStart < overlapStart\n ? renderChunk(nextStart, overlapStart - nextStart)\n : undefined;\n if (prependResult === undefined && nextStart < overlapStart) {\n return false;\n }\n\n const appendTotalLines =\n nextEnd === Number.POSITIVE_INFINITY\n ? Number.POSITIVE_INFINITY\n : Math.max(0, nextEnd - overlapEnd);\n const appendResult =\n nextEnd > overlapEnd\n ? renderChunk(overlapEnd, appendTotalLines)\n : undefined;\n if (appendResult === undefined && nextEnd > overlapEnd) {\n return false;\n }\n\n this.cleanupErrorWrapper();\n if (prependResult != null) {\n columns.gutter.insertAdjacentHTML(\n 'afterbegin',\n this.fileRenderer.renderPartialHTML(prependResult.gutterAST)\n );\n columns.content.insertAdjacentHTML(\n 'afterbegin',\n this.fileRenderer.renderPartialHTML(prependResult.contentAST)\n );\n rowCount += prependResult.rowCount;\n }\n\n if (appendResult != null) {\n columns.gutter.insertAdjacentHTML(\n 'beforeend',\n this.fileRenderer.renderPartialHTML(appendResult.gutterAST)\n );\n columns.content.insertAdjacentHTML(\n 'beforeend',\n this.fileRenderer.renderPartialHTML(appendResult.contentAST)\n );\n rowCount += appendResult.rowCount;\n }\n\n if (this.lastRowCount !== rowCount) {\n columns.gutter.style.setProperty('grid-row', `span ${rowCount}`);\n columns.content.style.setProperty('grid-row', `span ${rowCount}`);\n this.lastRowCount = rowCount;\n }\n\n return true;\n }\n\n private getColumns(code: HTMLElement): ColumnElements | undefined {\n const gutter = code.children[0];\n const content = code.children[1];\n if (\n !(gutter instanceof HTMLElement) ||\n !(content instanceof HTMLElement) ||\n gutter.dataset.gutter == null ||\n content.dataset.content == null\n ) {\n return undefined;\n }\n return { gutter, content };\n }\n\n private trimDOMToOverlap(\n container: HTMLElement,\n overlapStart: number,\n overlapEnd: number\n ): boolean {\n const boundaryIndices = this.getDOMBoundaryIndices(container, [\n overlapStart,\n overlapEnd,\n ]);\n const startIndex =\n boundaryIndices.get(overlapStart) ?? container.children.length;\n const endIndex =\n boundaryIndices.get(overlapEnd) ?? container.children.length;\n\n if (startIndex > endIndex) {\n return false;\n }\n\n for (let i = container.children.length - 1; i >= endIndex; i -= 1) {\n container.children[i]?.remove();\n }\n for (let i = startIndex - 1; i >= 0; i -= 1) {\n container.children[i]?.remove();\n }\n return true;\n }\n\n private getDOMBoundaryIndices(\n container: HTMLElement,\n boundaries: number[]\n ): Map<number, number> {\n const sortedBoundaries = [...new Set(boundaries)].sort((a, b) => a - b);\n const boundaryIndices = new Map<number, number>();\n if (sortedBoundaries.length === 0) {\n return boundaryIndices;\n }\n let boundaryIndex = 0;\n let nextBoundary = sortedBoundaries[boundaryIndex];\n const { children } = container;\n\n if (nextBoundary === 0) {\n boundaryIndices.set(0, 0);\n boundaryIndex += 1;\n nextBoundary = sortedBoundaries[boundaryIndex];\n }\n\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i];\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n const lineIndex = this.getLineIndexFromDOMNode(child);\n if (lineIndex == null) {\n continue;\n }\n while (nextBoundary != null && lineIndex >= nextBoundary) {\n boundaryIndices.set(nextBoundary, i);\n boundaryIndex += 1;\n nextBoundary = sortedBoundaries[boundaryIndex];\n }\n if (boundaryIndex >= sortedBoundaries.length) {\n break;\n }\n }\n\n for (const boundary of sortedBoundaries) {\n if (!boundaryIndices.has(boundary)) {\n boundaryIndices.set(boundary, children.length);\n }\n }\n return boundaryIndices;\n }\n\n private getLineIndexFromDOMNode(node: HTMLElement): number | undefined {\n const lineIndexAttr = node.dataset.lineIndex;\n if (lineIndexAttr == null) {\n return undefined;\n }\n const parsed = Number(lineIndexAttr);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n private applyBuffers(\n pre: HTMLPreElement,\n renderRange: RenderRange | undefined\n ) {\n if (renderRange == null || this.shouldDisableVirtualizationBuffers()) {\n if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n return;\n }\n\n if (renderRange.bufferBefore > 0) {\n if (this.bufferBefore == null) {\n this.bufferBefore = document.createElement('div');\n this.bufferBefore.dataset.virtualizerBuffer = 'before';\n pre.before(this.bufferBefore);\n }\n this.bufferBefore.style.setProperty(\n 'height',\n `${renderRange.bufferBefore}px`\n );\n this.bufferBefore.style.setProperty('contain', 'strict');\n } else if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n\n if (renderRange.bufferAfter > 0) {\n if (this.bufferAfter == null) {\n this.bufferAfter = document.createElement('div');\n this.bufferAfter.dataset.virtualizerBuffer = 'after';\n pre.after(this.bufferAfter);\n }\n this.bufferAfter.style.setProperty(\n 'height',\n `${renderRange.bufferAfter}px`\n );\n this.bufferAfter.style.setProperty('contain', 'strict');\n } else if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n }\n\n protected shouldDisableVirtualizationBuffers(): boolean {\n return this.options.disableVirtualizationBuffers ?? false;\n }\n\n private applyHeaderToDOM(\n headerAST: HASTElement,\n container: HTMLElement\n ): void {\n const { file } = this;\n if (file == null) return;\n this.cleanupErrorWrapper();\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n const headerHTML = this.cachedHeaderHTML ?? toHtml(headerAST);\n this.cachedHeaderHTML = headerHTML;\n if (headerHTML !== this.lastRenderedHeaderHTML) {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = headerHTML;\n const newHeader = tempDiv.firstElementChild;\n if (!(newHeader instanceof HTMLElement)) {\n return;\n }\n if (this.headerElement != null) {\n container.shadowRoot?.replaceChild(newHeader, this.headerElement);\n } else {\n container.shadowRoot?.prepend(newHeader);\n }\n this.headerElement = newHeader;\n this.lastRenderedHeaderHTML = headerHTML;\n }\n\n if (this.isContainerManaged) return;\n\n const {\n renderHeaderPrefix,\n renderHeaderFilenameSuffix,\n renderCustomHeader,\n renderHeaderMetadata,\n } = this.options;\n\n if (renderCustomHeader != null) {\n const content = renderCustomHeader(file) ?? undefined;\n this.headerCustom = this.upsertHeaderSlotElement(\n container,\n this.headerCustom,\n CUSTOM_HEADER_SLOT_ID,\n content\n );\n this.headerPrefix?.remove();\n this.headerFilenameSuffix?.remove();\n this.headerMetadata?.remove();\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n } else {\n const prefix = renderHeaderPrefix?.(file) ?? undefined;\n const suffix = renderHeaderFilenameSuffix?.(file) ?? undefined;\n const content = renderHeaderMetadata?.(file) ?? undefined;\n this.headerPrefix = this.upsertHeaderSlotElement(\n container,\n this.headerPrefix,\n HEADER_PREFIX_SLOT_ID,\n prefix\n );\n this.headerFilenameSuffix = this.upsertHeaderSlotElement(\n container,\n this.headerFilenameSuffix,\n HEADER_FILENAME_SUFFIX_SLOT_ID,\n suffix\n );\n this.headerMetadata = this.upsertHeaderSlotElement(\n container,\n this.headerMetadata,\n HEADER_METADATA_SLOT_ID,\n content\n );\n this.headerCustom?.remove();\n this.headerCustom = undefined;\n }\n }\n\n private clearHeaderSlots(): void {\n this.headerPrefix?.remove();\n this.headerFilenameSuffix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.headerPrefix = undefined;\n this.headerFilenameSuffix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n }\n\n // Header slot callbacks are presence-based render hooks, not reactive views.\n private upsertHeaderSlotElement(\n container: HTMLElement,\n current: HTMLElement | undefined,\n slot: string,\n content: Element | string | number | undefined\n ): HTMLElement | undefined {\n if (content == null) {\n current?.remove();\n return undefined;\n }\n const element = current ?? this.createHeaderSlotElement(slot);\n if (current == null) {\n container.appendChild(element);\n }\n this.replaceHeaderSlotContent(element, content);\n return element;\n }\n\n private replaceHeaderSlotContent(\n element: HTMLElement,\n content: Element | string | number\n ): void {\n element.replaceChildren();\n if (content instanceof Element) {\n element.appendChild(content);\n } else {\n element.innerText = `${content}`;\n }\n }\n\n private createHeaderSlotElement(slot: string): HTMLElement {\n const element = document.createElement('div');\n element.slot = slot;\n return element;\n }\n\n protected getOrCreateFileContainerNode(\n fileContainer?: HTMLElement,\n parentNode?: HTMLElement\n ): HTMLElement {\n const { fileContainer: previousContainer } = this;\n const nextContainer =\n fileContainer ??\n previousContainer ??\n document.createElement(DIFFS_TAG_NAME);\n const containerChanged = previousContainer !== nextContainer;\n if (containerChanged) {\n this.emitPostRender(true);\n }\n this.fileContainer = nextContainer;\n if (previousContainer != null && containerChanged) {\n this.lastRenderedHeaderHTML = undefined;\n this.headerElement = undefined;\n }\n if (parentNode != null && this.fileContainer.parentNode !== parentNode) {\n parentNode.appendChild(this.fileContainer);\n }\n if (containerChanged) {\n this.adoptReusableShellElements(this.fileContainer);\n }\n this.ensureSpriteSVG(this.fileContainer);\n return this.fileContainer;\n }\n\n // NOTE(amadeus): Technically this method is not safe for use outside of\n // the CodeView component, however I don't think in practice it really\n // should matter, but maybe there's some system we need in place to prevent\n // this from running outside of that environment?\n //\n // It's making very specific assumptions that all the elements will have the\n // correct content based on CodeView global options\n private adoptReusableShellElements(fileContainer: HTMLElement): void {\n const { shadowRoot } = fileContainer;\n if (shadowRoot == null) {\n return;\n }\n\n for (const element of shadowRoot.children) {\n if (element instanceof SVGElement) {\n this.spriteSVG ??= element;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle ??= element;\n this.hasAdoptedThemeCSS = true;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle ??= element;\n this.appliedUnsafeCSS ??= this.options.unsafeCSS ?? undefined;\n }\n }\n }\n\n private ensureSpriteSVG(fileContainer: HTMLElement): void {\n const shadowRoot =\n fileContainer.shadowRoot ?? fileContainer.attachShadow({ mode: 'open' });\n if (this.spriteSVG == null) {\n const fragment = document.createElement('div');\n fragment.innerHTML = SVGSpriteSheet;\n const firstChild = fragment.firstChild;\n if (firstChild instanceof SVGElement) {\n this.spriteSVG = firstChild;\n }\n }\n if (this.spriteSVG != null && this.spriteSVG.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.spriteSVG);\n }\n }\n\n private getOrCreatePreNode(container: HTMLElement): HTMLPreElement {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n // If we haven't created a pre element yet, lets go ahead and do that\n if (this.pre == null) {\n this.pre = document.createElement('pre');\n this.appliedPreAttributes = undefined;\n this.code = undefined;\n shadowRoot.appendChild(this.pre);\n }\n // If we have a new parent container for the pre element, lets go ahead and\n // move it into the new container\n else if (this.pre.parentNode !== shadowRoot) {\n container.shadowRoot?.appendChild(this.pre);\n this.appliedPreAttributes = undefined;\n }\n\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n\n return this.pre;\n }\n\n private syncCodeNodeFromPre(pre: HTMLPreElement): void {\n this.code = undefined;\n for (const child of Array.from(pre.children)) {\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n if (child.hasAttribute('data-code')) {\n this.code = child;\n return;\n }\n }\n }\n\n private applyPreNodeAttributes(\n pre: HTMLPreElement,\n { totalLines }: FileRenderResult\n ): void {\n const { overflow = 'scroll', disableLineNumbers = false } = this.options;\n const preProperties: PrePropertiesConfig = {\n type: 'file',\n split: false,\n overflow,\n disableLineNumbers,\n diffIndicators: 'none',\n disableBackground: true,\n totalLines,\n };\n if (arePrePropertiesEqual(preProperties, this.appliedPreAttributes)) {\n return;\n }\n setPreNodeProperties(pre, preProperties);\n this.appliedPreAttributes = preProperties;\n }\n\n private applyErrorToDOM(error: Error, container: HTMLElement) {\n this.cleanupErrorWrapper();\n this.pre?.remove();\n this.pre = undefined;\n this.appliedPreAttributes = undefined;\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n this.errorWrapper ??= document.createElement('div');\n this.errorWrapper.dataset.errorWrapper = '';\n this.errorWrapper.textContent = '';\n shadowRoot.appendChild(this.errorWrapper);\n const errorMessage = document.createElement('div');\n errorMessage.dataset.errorMessage = '';\n errorMessage.innerText = error.message;\n this.errorWrapper.appendChild(errorMessage);\n const errorStack = document.createElement('pre');\n errorStack.dataset.errorStack = '';\n errorStack.innerText = error.stack ?? 'No Error Stack';\n this.errorWrapper.appendChild(errorStack);\n }\n\n private cleanupErrorWrapper() {\n this.errorWrapper?.remove();\n this.errorWrapper = undefined;\n }\n}\n\nfunction shouldRenderCode(\n pre: HTMLPreElement | undefined,\n file: FileContents | undefined,\n collapsed = false\n): boolean {\n return !collapsed && pre == null && file != null;\n}\n\nfunction shouldRenderHeader(\n headerElement: HTMLElement | undefined,\n file: FileContents | undefined,\n disableFileHeader: boolean = false\n): boolean {\n return headerElement == null && file != null && !disableFileHeader;\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AppliedThemeStyleCache, BaseDiffOptions, CustomPreProperties, DiffLineAnnotation, DiffsEditableComponent, DiffsEditor, DiffsTextDocument, ExpansionDirections, FileContents, FileDiffMetadata, HighlightedToken, HunkData, HunkSeparators, PostRenderPhase, PrePropertiesConfig, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, SelectedLineRange, ThemeTypes } from "../types.js";
|
|
1
|
+
import { AppliedThemeStyleCache, BaseDiffOptions, CustomPreProperties, DiffLineAnnotation, DiffsEditableComponent, DiffsEditor, DiffsTextDocument, ExpansionDirections, FileContents, FileDiffMetadata, HighlightedToken, HunkData, HunkSeparators, MaybeDiffFileInput, PostRenderPhase, PrePropertiesConfig, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, SelectedLineRange, ThemeTypes } from "../types.js";
|
|
2
2
|
import { GetHoveredLineResult, GetLineIndexUtility, InteractionManager, InteractionManagerBaseOptions, SelectionWriteOptions } from "../managers/InteractionManager.js";
|
|
3
3
|
import { WorkerPoolManager } from "../worker/WorkerPoolManager.js";
|
|
4
4
|
import { ResizeManager } from "../managers/ResizeManager.js";
|
|
@@ -6,10 +6,9 @@ import { ScrollSyncManager } from "../managers/ScrollSyncManager.js";
|
|
|
6
6
|
import { DiffHunksRenderer, DiffHunksRendererOptions, HunksRenderResult } from "../renderers/DiffHunksRenderer.js";
|
|
7
7
|
|
|
8
8
|
//#region src/components/FileDiff.d.ts
|
|
9
|
-
|
|
9
|
+
type LoadedPartialDiffContents = Awaited<ReturnType<NonNullable<BaseDiffOptions['loadDiffFiles']>>>;
|
|
10
|
+
interface FileDiffRenderBaseProps<LAnnotation> {
|
|
10
11
|
fileDiff?: FileDiffMetadata;
|
|
11
|
-
oldFile?: FileContents;
|
|
12
|
-
newFile?: FileContents;
|
|
13
12
|
deferManagers?: boolean;
|
|
14
13
|
didEdit?: boolean;
|
|
15
14
|
forceRender?: boolean;
|
|
@@ -19,10 +18,11 @@ interface FileDiffRenderProps<LAnnotation> {
|
|
|
19
18
|
lineAnnotations?: DiffLineAnnotation<LAnnotation>[];
|
|
20
19
|
renderRange?: RenderRange;
|
|
21
20
|
}
|
|
22
|
-
|
|
21
|
+
type FileDiffRenderProps<LAnnotation> = FileDiffRenderBaseProps<LAnnotation> & MaybeDiffFileInput;
|
|
22
|
+
type FileDiffHydrationProps<LAnnotation> = Omit<FileDiffRenderBaseProps<LAnnotation>, 'fileContainer'> & MaybeDiffFileInput & {
|
|
23
23
|
fileContainer: HTMLElement;
|
|
24
24
|
prerenderedHTML?: string;
|
|
25
|
-
}
|
|
25
|
+
};
|
|
26
26
|
type FileDiffType = 'file-diff' | 'unresolved-file';
|
|
27
27
|
interface FileDiffOptions<LAnnotation> extends Omit<BaseDiffOptions, 'hunkSeparators'>, InteractionManagerBaseOptions<'diff'> {
|
|
28
28
|
hunkSeparators?: Exclude<HunkSeparators, 'custom'>
|
|
@@ -54,12 +54,14 @@ interface CustomHunkElementCache {
|
|
|
54
54
|
element: HTMLElement;
|
|
55
55
|
hunkData: HunkData;
|
|
56
56
|
}
|
|
57
|
-
interface
|
|
57
|
+
interface PendingFileLoad {
|
|
58
|
+
fileDiff: FileDiffMetadata;
|
|
59
|
+
promise: Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
type HydrationSetup<LAnnotation> = {
|
|
58
62
|
fileDiff: FileDiffMetadata | undefined;
|
|
59
63
|
lineAnnotations: DiffLineAnnotation<LAnnotation>[] | undefined;
|
|
60
|
-
|
|
61
|
-
newFile?: FileContents;
|
|
62
|
-
}
|
|
64
|
+
} & MaybeDiffFileInput;
|
|
63
65
|
declare class FileDiff<LAnnotation = undefined> implements DiffsEditableComponent<LAnnotation> {
|
|
64
66
|
options: FileDiffOptions<LAnnotation>;
|
|
65
67
|
protected workerManager?: WorkerPoolManager | undefined;
|
|
@@ -96,10 +98,11 @@ declare class FileDiff<LAnnotation = undefined> implements DiffsEditableComponen
|
|
|
96
98
|
protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>>;
|
|
97
99
|
protected lineAnnotations: DiffLineAnnotation<LAnnotation>[];
|
|
98
100
|
protected managersDirty: boolean;
|
|
99
|
-
protected deletionFile
|
|
100
|
-
protected additionFile
|
|
101
|
+
protected deletionFile?: FileContents | null;
|
|
102
|
+
protected additionFile?: FileContents | null;
|
|
101
103
|
fileDiff: FileDiffMetadata | undefined;
|
|
102
104
|
protected renderRange: RenderRange | undefined;
|
|
105
|
+
protected pendingFiles: PendingFileLoad | undefined;
|
|
103
106
|
protected appliedPreAttributes: PrePropertiesConfig | undefined;
|
|
104
107
|
protected lastRenderedHeaderHTML: string | undefined;
|
|
105
108
|
protected cachedHeaderHTML: string | undefined;
|
|
@@ -107,7 +110,8 @@ declare class FileDiff<LAnnotation = undefined> implements DiffsEditableComponen
|
|
|
107
110
|
private mounted;
|
|
108
111
|
protected enabled: boolean;
|
|
109
112
|
protected editor: DiffsEditor<LAnnotation> | undefined;
|
|
110
|
-
protected
|
|
113
|
+
protected refreshViewTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
114
|
+
protected deferSetSelection: [SelectedLineRange | null, SelectionWriteOptions | undefined] | undefined;
|
|
111
115
|
constructor(options?: FileDiffOptions<LAnnotation>, workerManager?: WorkerPoolManager | undefined, isContainerManaged?: boolean);
|
|
112
116
|
protected handleHighlightRender: () => void;
|
|
113
117
|
protected getHunksRendererOptions(options: FileDiffOptions<LAnnotation>): DiffHunksRendererOptions;
|
|
@@ -124,9 +128,17 @@ declare class FileDiff<LAnnotation = undefined> implements DiffsEditableComponen
|
|
|
124
128
|
private canPartiallyRender;
|
|
125
129
|
setSelectedLines(range: SelectedLineRange | null, options?: SelectionWriteOptions): void;
|
|
126
130
|
flushManagers(): void;
|
|
131
|
+
protected shouldApplyColumnVariables(overflow: 'scroll' | 'wrap'): boolean;
|
|
127
132
|
cleanUp(recycle?: boolean): void;
|
|
128
133
|
virtualizedSetup(): void;
|
|
129
|
-
hydrate(
|
|
134
|
+
hydrate({
|
|
135
|
+
fileContainer,
|
|
136
|
+
prerenderedHTML,
|
|
137
|
+
preventEmit,
|
|
138
|
+
lineAnnotations,
|
|
139
|
+
fileDiff,
|
|
140
|
+
...fileInputProps
|
|
141
|
+
}: FileDiffHydrationProps<LAnnotation>): void;
|
|
130
142
|
protected hydrateElements(fileContainer: HTMLElement, prerenderedHTML: string | undefined): void;
|
|
131
143
|
protected hydrationSetup({
|
|
132
144
|
fileDiff,
|
|
@@ -138,9 +150,11 @@ declare class FileDiff<LAnnotation = undefined> implements DiffsEditableComponen
|
|
|
138
150
|
onThemeChange(): void;
|
|
139
151
|
handleExpandHunk: (hunkIndex: number, direction: ExpansionDirections, expansionLineCountOverride?: number) => void;
|
|
140
152
|
expandHunk: (hunkIndex: number, direction: ExpansionDirections, expansionLineCountOverride?: number) => void;
|
|
153
|
+
protected loadFilesIfNecessary(): void;
|
|
154
|
+
private loadFilesForDiff;
|
|
155
|
+
protected handleFilesLoaded(expectedDiff: FileDiffMetadata, files: LoadedPartialDiffContents): Promise<void>;
|
|
156
|
+
protected setHydratedState(files: LoadedPartialDiffContents): void;
|
|
141
157
|
render({
|
|
142
|
-
oldFile,
|
|
143
|
-
newFile,
|
|
144
158
|
fileDiff,
|
|
145
159
|
deferManagers,
|
|
146
160
|
forceRender,
|
|
@@ -148,18 +162,19 @@ declare class FileDiff<LAnnotation = undefined> implements DiffsEditableComponen
|
|
|
148
162
|
lineAnnotations,
|
|
149
163
|
fileContainer,
|
|
150
164
|
containerWrapper,
|
|
151
|
-
renderRange
|
|
165
|
+
renderRange,
|
|
166
|
+
...fileInputProps
|
|
152
167
|
}: FileDiffRenderProps<LAnnotation>): boolean;
|
|
153
168
|
protected emitPostRender(unmount?: boolean): void;
|
|
169
|
+
private get fileDiffCache();
|
|
154
170
|
private syncRenderViewToEditor;
|
|
155
171
|
attachEditor(editor: DiffsEditor<LAnnotation>): () => void;
|
|
156
172
|
applyDocumentChange(textDocument: DiffsTextDocument, newLineAnnotations?: DiffLineAnnotation<LAnnotation>[]): void;
|
|
157
|
-
|
|
158
|
-
updateRenderCache(dirtyLines: Map<number, Array<HighlightedToken>>, themeType: 'dark' | 'light', shouldRefreshView?: boolean, skipDiffRecompute?: boolean): void;
|
|
173
|
+
updateRenderCache(dirtyLines: Map<number, Array<HighlightedToken>>, themeType: 'dark' | 'light', shouldRefreshView: boolean): void;
|
|
159
174
|
private removeRenderedCode;
|
|
160
175
|
private clearAuxiliaryNodes;
|
|
161
176
|
renderPlaceholder(height: number): boolean;
|
|
162
|
-
primeHighlightCache(): void
|
|
177
|
+
primeHighlightCache(fileDiff?: FileDiffMetadata | undefined): Promise<void>;
|
|
163
178
|
private cleanChildNodes;
|
|
164
179
|
private renderSeparators;
|
|
165
180
|
protected renderAnnotations(): void;
|
|
@@ -180,8 +195,8 @@ declare class FileDiff<LAnnotation = undefined> implements DiffsEditableComponen
|
|
|
180
195
|
private applyHunksToDOM;
|
|
181
196
|
private applyPartialRender;
|
|
182
197
|
private insertPartialHTML;
|
|
183
|
-
private
|
|
184
|
-
private
|
|
198
|
+
private refreshSplitDiffView;
|
|
199
|
+
private refreshUnifiedDiffView;
|
|
185
200
|
private renderPartialColumn;
|
|
186
201
|
private mergeBuffersIfNecessary;
|
|
187
202
|
private applyRowSpan;
|
|
@@ -202,5 +217,5 @@ declare class FileDiff<LAnnotation = undefined> implements DiffsEditableComponen
|
|
|
202
217
|
private cleanupErrorWrapper;
|
|
203
218
|
}
|
|
204
219
|
//#endregion
|
|
205
|
-
export { FileDiff, FileDiffHydrationProps, FileDiffOptions, FileDiffRenderProps, FileDiffType };
|
|
220
|
+
export { FileDiff, FileDiffHydrationProps, FileDiffOptions, FileDiffRenderBaseProps, FileDiffRenderProps, FileDiffType };
|
|
206
221
|
//# sourceMappingURL=FileDiff.d.ts.map
|