import { Ace } from "ace-builds";

//#region src/types/diff.d.ts
interface CharRange {
  start: number;
  end: number;
  lineStart: number;
  lineEnd: number;
}
interface DiffInfo {
  leftStartLine: number;
  leftEndLine: number;
  rightStartLine: number;
  rightEndLine: number;
  leftStartOffset: number;
  leftEndOffset: number;
  rightStartOffset: number;
  rightEndOffset: number;
  leftStartChar?: number;
  leftEndChar?: number;
  rightStartChar?: number;
  rightEndChar?: number;
  leftChars: CharRange[];
  rightChars: CharRange[];
}
//#endregion
//#region src/types/options.d.ts
interface EditorOptions {
  /** Element ID or null to auto-generate */
  id: string | null;
  /** Initial content */
  content: string | null;
  /** Ace editor mode (e.g., 'ace/mode/javascript') */
  mode: string | null;
  /** Ace editor theme (e.g., 'ace/theme/monokai') */
  theme: string | null;
  /** Whether the editor is editable */
  editable: boolean;
  /** Whether to show copy arrows */
  copyLinkEnabled: boolean;
}
/** Ace namespace with edit function */
interface AceStatic {
  edit: (element: string | HTMLElement) => Ace.Editor;
  Range?: new (startRow: number, startColumn: number, endRow: number, endColumn: number) => Ace.Range;
  acequire?: (module: string) => unknown;
  require?: (module: string) => unknown;
}
interface ClassOptions {
  gutterID: string;
  diff: string;
  diffChar: string;
  diffGutter: string;
  connector: string;
  newCodeConnectorLink: string;
  newCodeConnectorLinkContent: string;
  deletedCodeConnectorLink: string;
  deletedCodeConnectorLinkContent: string;
  copyRightContainer: string;
  copyLeftContainer: string;
}
interface AceDiffOptions {
  /** Ace editor instance or factory */
  ace?: AceStatic | undefined;
  /** Global editor mode */
  mode: string | null;
  /** Global editor theme */
  theme: string | null;
  /** Container element or selector */
  element: HTMLElement | string | null;
  /** Diff granularity: 'specific' or 'broad' */
  diffGranularity: 'specific' | 'broad';
  /** Lock scroll between editors */
  lockScrolling: boolean;
  /** Show diff highlighting */
  showDiffs: boolean;
  /** Show SVG connectors */
  showConnectors: boolean;
  /** Enable character-level diffs */
  charDiffs: boolean;
  /** Maximum diffs before silent failure */
  maxDiffs: number;
  /** Left editor options */
  left: Partial<EditorOptions>;
  /** Right editor options */
  right: Partial<EditorOptions>;
  /** CSS class overrides */
  classes: Partial<ClassOptions>;
  /** Y offset for connectors */
  connectorYOffset: number;
  /** Callback when diff calculation completes */
  onDiffReady: ((diffs: DiffInfo[]) => void) | null;
}
//#endregion
//#region src/types/ace.d.ts
/**
 * Internal editor instance state
 */
interface EditorInstance {
  ace: Ace.Editor;
  markers: number[];
  lineLengths: number[];
  diffGutters: Array<{
    line: number;
    className: string;
  }>;
}
/**
 * Internal editor state containing both editors
 */
interface EditorState {
  left: EditorInstance;
  right: EditorInstance;
  editorHeight: number | null;
}
//#endregion
//#region src/AceDiff.d.ts
declare class AceDiff {
  options: AceDiffOptions;
  el: HTMLElement;
  editors: EditorState;
  diffs: DiffInfo[];
  lineHeight: number;
  gutterSVG: SVGSVGElement | null;
  gutterWidth: number;
  gutterHeight: number;
  copyLeftContainer: HTMLDivElement | null;
  copyRightContainer: HTMLDivElement | null;
  connectorYOffset: number;
  private removeEventHandlers;
  constructor(options?: Partial<AceDiffOptions>);
  setOptions(options: Partial<AceDiffOptions>): void;
  getNumDiffs(): number;
  getEditors(): {
    left: Ace.Editor;
    right: Ace.Editor;
  };
  diff(): void;
  clear(): void;
  destroy(): void;
  private addEventHandlers;
  private copy;
  private getLineLengths;
  private showDiff;
  private updateGap;
  private clearDiffs;
  private addConnector;
  private addCopyArrows;
  private positionCopyContainers;
  private computeDiff;
  private getSingleDiffInfo;
  private getCharsOnLine;
  private getLineForCharPosition;
  private createGutter;
  private getTotalHeight;
  private createCopyContainers;
  private clearGutter;
  private clearArrows;
  private simplifyDiffs;
  private decorate;
}
//#endregion
export { AceDiff, AceDiff as default, type AceDiffOptions, type CharRange, type ClassOptions, type DiffInfo, type EditorOptions };
//# sourceMappingURL=index.d.mts.map