import { NotationView } from "../../carnatic";
import { GridLayoutGroup } from "../../grids";
import { Notation } from "../../notation";
import { GlobalBeatLayout } from "../../beats";
export interface SideBySideEditorConfig {
    initialSource?: string;
    debounceDelay?: number;
    syncScroll?: boolean;
    onSourceChange?: (source: string) => void;
    onNotationParsed?: (notation: Notation, beatLayout: GlobalBeatLayout) => void;
    onParseError?: (errors: any[]) => void;
    sharedGridLayoutGroup?: GridLayoutGroup;
    markdownParser?: (content: string) => string;
    editorClass?: string;
    outputClass?: string;
}
export default class SideBySideEditor {
    readonly editorElement: HTMLTextAreaElement;
    readonly outputElement: HTMLDivElement;
    readonly notationView: NotationView;
    readonly config: SideBySideEditorConfig;
    private notation;
    private beatLayout;
    private debounceTimer;
    private isScrollSyncing;
    constructor(config?: SideBySideEditorConfig);
    get source(): string;
    set source(value: string);
    getNotation(): Notation | null;
    getBeatLayout(): GlobalBeatLayout | null;
    render(): boolean;
    private setupEventListeners;
    private syncScrollToOutput;
    private syncScrollToEditor;
    scrollToTop(): void;
    scrollToBottom(): void;
    scrollToLine(lineNumber: number): void;
    focus(): void;
    insertAtCursor(text: string): void;
    getSelection(): {
        start: number;
        end: number;
        text: string;
    };
    setSelection(start: number, end: number): void;
    destroy(): void;
}
