@pierre/diffs
Version:
196 lines (195 loc) • 8.95 kB
TypeScript
import { AnnotationSide, AppliedThemeStyleCache, BaseDiffOptions, CustomPreProperties, DiffLineAnnotation, ExpansionDirections, FileContents, FileDiffMetadata, HunkData, HunkSeparators, PostRenderPhase, PrePropertiesConfig, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, SelectedLineRange, ThemeTypes } from "../types.js";
import { GetHoveredLineResult, GetLineIndexUtility, InteractionManager, InteractionManagerBaseOptions, SelectionWriteOptions } from "../managers/InteractionManager.js";
import { WorkerPoolManager } from "../worker/WorkerPoolManager.js";
import "../worker/index.js";
import { ResizeManager } from "../managers/ResizeManager.js";
import { DiffHunksRenderer, DiffHunksRendererOptions, HunksRenderResult } from "../renderers/DiffHunksRenderer.js";
import { ScrollSyncManager } from "../managers/ScrollSyncManager.js";
import "../index.js";
//#region src/components/FileDiff.d.ts
interface FileDiffRenderProps<LAnnotation> {
fileDiff?: FileDiffMetadata;
oldFile?: FileContents;
newFile?: FileContents;
deferManagers?: boolean;
forceRender?: boolean;
preventEmit?: boolean;
fileContainer?: HTMLElement;
containerWrapper?: HTMLElement;
lineAnnotations?: DiffLineAnnotation<LAnnotation>[];
renderRange?: RenderRange;
}
interface FileDiffHydrationProps<LAnnotation> extends Omit<FileDiffRenderProps<LAnnotation>, 'fileContainer'> {
fileContainer: HTMLElement;
prerenderedHTML?: string;
}
type FileDiffType = 'file-diff' | 'unresolved-file';
interface FileDiffOptions<LAnnotation> extends Omit<BaseDiffOptions, 'hunkSeparators'>, InteractionManagerBaseOptions<'diff'> {
hunkSeparators?: Exclude<HunkSeparators, 'custom'> /**
* @deprecated Custom hunk separator functions are deprecated and will be
* removed in a future version.
*/ | ((hunk: HunkData, instance: FileDiff<LAnnotation>) => HTMLElement | DocumentFragment | null | undefined);
disableFileHeader?: boolean;
renderHeaderPrefix?: RenderHeaderPrefixCallback;
renderHeaderMetadata?: RenderHeaderMetadataCallback;
renderCustomHeader?: RenderHeaderMetadataCallback;
/**
* When true, errors during rendering are rethrown instead of being caught
* and displayed in the DOM. Useful for testing or when you want to handle
* errors yourself.
*/
disableErrorHandling?: boolean;
renderAnnotation?(annotation: DiffLineAnnotation<LAnnotation>): HTMLElement | undefined;
renderGutterUtility?(getHoveredRow: () => GetHoveredLineResult<'diff'> | undefined): HTMLElement | null | undefined;
onPostRender?(node: HTMLElement, instance: FileDiff<LAnnotation>, phase: PostRenderPhase): unknown;
}
interface AnnotationElementCache<LAnnotation> {
element: HTMLElement;
annotation: DiffLineAnnotation<LAnnotation>;
}
interface CustomHunkElementCache {
element: HTMLElement;
hunkData: HunkData;
}
interface HydrationSetup<LAnnotation> {
fileDiff: FileDiffMetadata | undefined;
lineAnnotations: DiffLineAnnotation<LAnnotation>[] | undefined;
oldFile?: FileContents;
newFile?: FileContents;
}
declare class FileDiff<LAnnotation = undefined> {
options: FileDiffOptions<LAnnotation>;
protected workerManager?: WorkerPoolManager | undefined;
protected isContainerManaged: boolean;
static LoadedCustomComponent: boolean;
readonly __id: string;
readonly type: FileDiffType;
protected fileContainer: HTMLElement | undefined;
protected spriteSVG: SVGElement | undefined;
protected pre: HTMLPreElement | undefined;
protected codeUnified: HTMLElement | undefined;
protected codeDeletions: HTMLElement | undefined;
protected codeAdditions: HTMLElement | undefined;
protected bufferBefore: HTMLElement | undefined;
protected bufferAfter: HTMLElement | undefined;
protected themeCSSStyle: HTMLStyleElement | undefined;
protected appliedThemeCSS: AppliedThemeStyleCache | undefined;
protected hasAdoptedThemeCSS: boolean;
protected unsafeCSSStyle: HTMLStyleElement | undefined;
protected appliedUnsafeCSS: string | undefined;
protected gutterUtilityContent: HTMLElement | undefined;
protected headerElement: HTMLElement | undefined;
protected headerPrefix: HTMLElement | undefined;
protected headerMetadata: HTMLElement | undefined;
protected headerCustom: HTMLElement | undefined;
protected separatorCache: Map<string, CustomHunkElementCache>;
protected errorWrapper: HTMLElement | undefined;
protected placeHolder: HTMLElement | undefined;
protected hunksRenderer: DiffHunksRenderer<LAnnotation>;
protected resizeManager: ResizeManager;
protected scrollSyncManager: ScrollSyncManager;
protected interactionManager: InteractionManager<'diff'>;
protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>>;
protected lineAnnotations: DiffLineAnnotation<LAnnotation>[];
protected managersDirty: boolean;
protected deletionFile: FileContents | undefined;
protected additionFile: FileContents | undefined;
fileDiff: FileDiffMetadata | undefined;
protected renderRange: RenderRange | undefined;
protected appliedPreAttributes: PrePropertiesConfig | undefined;
protected lastRenderedHeaderHTML: string | undefined;
protected cachedHeaderHTML: string | undefined;
protected lastRowCount: number | undefined;
private mounted;
protected enabled: boolean;
constructor(options?: FileDiffOptions<LAnnotation>, workerManager?: WorkerPoolManager | undefined, isContainerManaged?: boolean);
protected handleHighlightRender: () => void;
protected getHunksRendererOptions(options: FileDiffOptions<LAnnotation>): DiffHunksRendererOptions;
protected createHunksRenderer(options: FileDiffOptions<LAnnotation>): DiffHunksRenderer<LAnnotation>;
getLineIndex: GetLineIndexUtility;
setOptions(options: FileDiffOptions<LAnnotation> | undefined): void;
protected syncInteractionOptions(): void;
private mergeOptions;
setThemeType(themeType: ThemeTypes): void;
private applyCachedThemeState;
private hasThemeChanged;
getHoveredLine: () => {
lineNumber: number;
side: AnnotationSide;
} | undefined;
setLineAnnotations(lineAnnotations: DiffLineAnnotation<LAnnotation>[]): void;
private canPartiallyRender;
setSelectedLines(range: SelectedLineRange | null, options?: SelectionWriteOptions): void;
flushManagers(): void;
cleanUp(recycle?: boolean): void;
virtualizedSetup(): void;
hydrate(props: FileDiffHydrationProps<LAnnotation>): void;
protected hydrateElements(fileContainer: HTMLElement, prerenderedHTML: string | undefined): void;
protected hydrationSetup({
fileDiff,
oldFile,
newFile,
lineAnnotations
}: HydrationSetup<LAnnotation>): void;
rerender(): void;
onThemeChange(): void;
handleExpandHunk: (hunkIndex: number, direction: ExpansionDirections, expansionLineCountOverride?: number | undefined) => void;
expandHunk: (hunkIndex: number, direction: ExpansionDirections, expansionLineCountOverride?: number | undefined) => void;
render({
oldFile,
newFile,
fileDiff,
deferManagers,
forceRender,
preventEmit,
lineAnnotations,
fileContainer,
containerWrapper,
renderRange
}: FileDiffRenderProps<LAnnotation>): boolean;
protected emitPostRender(unmount?: boolean): void;
private removeRenderedCode;
private clearAuxiliaryNodes;
renderPlaceholder(height: number): boolean;
primeHighlightCache(): void;
private cleanChildNodes;
private renderSeparators;
protected renderAnnotations(): void;
protected renderGutterUtility(): void;
protected getOrCreateFileContainer(fileContainer?: HTMLElement, parentNode?: HTMLElement): HTMLElement;
private adoptReusableShellElements;
private ensureSpriteSVG;
private getOrCreatePreNode;
protected syncCodeNodesFromPre(pre: HTMLPreElement): void;
private applyHeaderToDOM;
private clearHeaderSlots;
private upsertHeaderSlotElement;
private replaceHeaderSlotContent;
private createHeaderSlotElement;
protected injectUnsafeCSS(): void;
private applyThemeState;
private hydrateMeasuredScrollbar;
private applyHunksToDOM;
private applyPartialRender;
private insertPartialHTML;
private renderPartialColumn;
private mergeBuffersIfNecessary;
private applyRowSpan;
private trimColumnRows;
private trimColumns;
private getBufferSize;
private updateBufferSize;
private getCodeColumns;
private applyBuffers;
protected shouldDisableVirtualizationBuffers(): boolean;
protected applyPreNodeAttributes(pre: HTMLPreElement, {
additionsContentAST,
deletionsContentAST,
totalLines
}: HunksRenderResult, customProperties?: CustomPreProperties): void;
private applyErrorToDOM;
private cleanupErrorWrapper;
}
//#endregion
export { FileDiff, FileDiffHydrationProps, FileDiffOptions, FileDiffRenderProps, FileDiffType };
//# sourceMappingURL=FileDiff.d.ts.map