ace-diff
Version:
A diff/merging wrapper for Ace Editor built on google-diff-match-patch
164 lines (163 loc) • 4.43 kB
text/typescript
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