import { EditorView } from '@codemirror/view';
import { DiffType } from 'api-smart-diff';
import { DiffBlockData } from '../../diff-builder/common';
import { DiffData, NavigationAPI, NavigationOptions, ChangeSummary } from '../types';
/** Implementation of the Navigation API */
export declare class NavigationAPIImpl implements NavigationAPI {
    private beforeView;
    private afterView;
    private diffData;
    private currentBlockIndex;
    private blockChangeListeners;
    private visibleBlocksListeners;
    constructor(beforeView: EditorView | null, afterView: EditorView | null, diffData: DiffData);
    /** Update views and data */
    update(beforeView: EditorView | null, afterView: EditorView | null, diffData: DiffData): void;
    /** Navigate to a specific block */
    goToBlock(blockId: string, options?: NavigationOptions): void;
    /** Navigate to next change */
    goToNextChange(filter?: DiffType[]): DiffBlockData | null;
    /** Navigate to previous change */
    goToPrevChange(filter?: DiffType[]): DiffBlockData | null;
    /** Navigate to next breaking change */
    goToNextBreaking(): DiffBlockData | null;
    /** Navigate to previous breaking change */
    goToPrevBreaking(): DiffBlockData | null;
    /** Navigate to specific line */
    goToLine(line: number, side?: 'before' | 'after'): void;
    /** Get all blocks */
    getBlocks(): DiffBlockData[];
    /** Get blocks with changes (have diff metadata) */
    getChangedBlocks(): DiffBlockData[];
    /** Get blocks by diff type */
    getBlocksByType(types: DiffType[]): DiffBlockData[];
    /** Get currently visible blocks */
    getVisibleBlocks(): DiffBlockData[];
    /** Get currently selected block */
    getCurrentBlock(): DiffBlockData | null;
    /** Find a block by ID */
    findBlock(blockId: string): DiffBlockData | null;
    /** Get summary of changes */
    getChangeSummary(): ChangeSummary;
    /** Subscribe to block changes */
    onBlockChange(callback: (block: DiffBlockData | null) => void): () => void;
    /** Subscribe to visible blocks changes */
    onVisibleBlocksChange(callback: (blocks: DiffBlockData[]) => void): () => void;
    /** Internal: scroll to line in both editors */
    private scrollToLine;
    /** Internal: select a block in both editors */
    private selectBlock;
    /** Internal: notify block change listeners */
    private notifyBlockChange;
}
/** Create navigation API instance */
export declare function createNavigationAPI(beforeView: EditorView | null, afterView: EditorView | null, diffData: DiffData): NavigationAPI;
