import { BaseDiffOptions, DiffLineAnnotation, ExpansionDirections, FileContents, FileDiffMetadata, HunkData, HunkSeparators, RenderHeaderMetadataCallback, ThemeTypes } from "./types.js";
import { WorkerPoolManager } from "./worker/WorkerPoolManager.js";
import "./worker/index.js";
import { LineSelectionOptions, SelectedLineRange } from "./LineSelectionManager.js";
import { GetHoveredLineResult, MouseEventManagerBaseOptions } from "./MouseEventManager.js";

//#region src/FileDiff.d.ts
interface FileDiffRenderProps<LAnnotation> {
  fileDiff?: FileDiffMetadata;
  oldFile?: FileContents;
  newFile?: FileContents;
  forceRender?: boolean;
  fileContainer?: HTMLElement;
  containerWrapper?: HTMLElement;
  lineAnnotations?: DiffLineAnnotation<LAnnotation>[];
}
interface FileDiffHydrationProps<LAnnotation> extends Omit<FileDiffRenderProps<LAnnotation>, "fileContainer"> {
  fileContainer: HTMLElement;
  prerenderedHTML?: string;
}
interface FileDiffOptions<LAnnotation> extends Omit<BaseDiffOptions, "hunkSeparators">, MouseEventManagerBaseOptions<"diff">, LineSelectionOptions {
  hunkSeparators?: Exclude<HunkSeparators, "custom"> | ((hunk: HunkData, instance: FileDiff<LAnnotation>) => HTMLElement | DocumentFragment);
  disableFileHeader?: boolean;
  renderHeaderMetadata?: RenderHeaderMetadataCallback;
  renderAnnotation?(annotation: DiffLineAnnotation<LAnnotation>): HTMLElement | undefined;
  renderHoverUtility?(getHoveredRow: () => GetHoveredLineResult<"diff"> | undefined): HTMLElement | null;
}
declare class FileDiff<LAnnotation = undefined> {
  options: FileDiffOptions<LAnnotation>;
  private workerManager?;
  private isContainerManaged;
  static LoadedCustomComponent: boolean;
  readonly __id: number;
  private fileContainer;
  private spriteSVG;
  private pre;
  private unsafeCSSStyle;
  private hoverContent;
  private headerElement;
  private headerMetadata;
  private customHunkElements;
  private errorWrapper;
  private hunksRenderer;
  private resizeManager;
  private scrollSyncManager;
  private mouseEventManager;
  private lineSelectionManager;
  private annotationElements;
  private lineAnnotations;
  private oldFile;
  private newFile;
  private fileDiff;
  constructor(options?: FileDiffOptions<LAnnotation>, workerManager?: WorkerPoolManager | undefined, isContainerManaged?: boolean);
  private handleHighlightRender;
  setOptions(options: FileDiffOptions<LAnnotation> | undefined): void;
  private mergeOptions;
  setThemeType(themeType: ThemeTypes): void;
  getHoveredLine: () => GetHoveredLineResult<"diff"> | undefined;
  setLineAnnotations(lineAnnotations: DiffLineAnnotation<LAnnotation>[]): void;
  setSelectedLines(range: SelectedLineRange | null): void;
  cleanUp(): void;
  hydrate(props: FileDiffHydrationProps<LAnnotation>): void;
  rerender(): void;
  handleExpandHunk: (hunkIndex: number, direction: ExpansionDirections) => void;
  expandHunk(hunkIndex: number, direction: ExpansionDirections): void;
  render({
    oldFile,
    newFile,
    fileDiff,
    forceRender,
    lineAnnotations,
    fileContainer,
    containerWrapper
  }: FileDiffRenderProps<LAnnotation>): void;
  private renderSeparators;
  private renderAnnotations;
  private renderHoverUtility;
  private getOrCreateFileContainer;
  getFileContainer(): HTMLElement | undefined;
  private getOrCreatePreNode;
  private applyHeaderToDOM;
  private injectUnsafeCSS;
  private applyHunksToDOM;
  private applyPreNodeAttributes;
  private applyErrorToDOM;
  private cleanupErrorWrapper;
}
//#endregion
export { FileDiff, FileDiffHydrationProps, FileDiffOptions, FileDiffRenderProps };
//# sourceMappingURL=FileDiff.d.ts.map