import type { ExtractPropTypes, InjectionKey, PropType, SetupContext, Ref } from 'vue';
import type { DiffFile } from 'diff2html/lib/types';
export type DiffType = 'modify' | 'add' | 'delete' | 'rename';
export type OutputFormat = 'line-by-line' | 'side-by-side';
export type ExpandDirection = 'up' | 'down' | 'updown' | 'all';
export type LineSide = 'left' | 'right';
export type IncrementCodeInsertDirection = 'up' | 'down';
export interface CommentPosition {
    left: number;
    right: number;
}
export type ILineNumberTdMap = Record<number, HTMLElement[]>;
export interface IExpandLineNumberInfo {
    nextL: string;
    nextR: string;
    prevL: string;
    prevR: string;
}
export interface ICheckedLineDetails {
    lefts: number[];
    rights: number[];
    codes: Record<string, string[]> | string[];
}
export interface CodeReviewMethods {
    toggleFold: (status?: boolean) => void;
    insertComment: (lineNumber: number, lineSide: LineSide, commentDom: HTMLElement) => void;
    removeComment: (lineNumber: number, lineSide: LineSide) => void;
}
export declare const codeReviewProps: {
    diff: {
        type: StringConstructor;
        required: boolean;
        default: string;
    };
    fold: {
        type: BooleanConstructor;
        default: boolean;
    };
    allowComment: {
        type: BooleanConstructor;
        default: boolean;
    };
    allowChecked: {
        type: BooleanConstructor;
        default: boolean;
    };
    allowExpand: {
        type: BooleanConstructor;
        default: boolean;
    };
    showBlob: {
        type: BooleanConstructor;
        default: boolean;
    };
    diffType: {
        type: PropType<DiffType>;
        default: string;
    };
    outputFormat: {
        type: PropType<OutputFormat>;
        default: string;
    };
    expandThreshold: {
        type: NumberConstructor;
        default: number;
    };
    expandLoader: {
        type: PropType<(interval: Array<number | undefined>, update: (code: string) => void) => void>;
    };
    options: {
        type: PropType<Record<string, any>>;
        default: () => {};
    };
};
export type CodeReviewProps = ExtractPropTypes<typeof codeReviewProps>;
export interface CodeReviewContext {
    diffType: Ref<DiffType>;
    reviewContentRef: Ref<HTMLElement>;
    diffInfo: DiffFile;
    isFold: Ref<boolean>;
    rootCtx: SetupContext;
}
export declare const CodeReviewInjectionKey: InjectionKey<CodeReviewContext>;
