import * as TSU from "@panyam/tsutils";
import { LineView } from "./LineView";
import { Notation, RawBlock, Block, BlockItem } from "../notation";
import { GlobalBeatLayout } from "../beats";
import { GridCell, GridCellView, GridLayoutGroup } from "../grids";
import { Line } from "../core";
import { BeatView, MarkerView } from "./beatviews";
export interface NotationViewConfig {
    sharedGridLayoutGroup?: GridLayoutGroup;
    markdownParser?: (contents: string) => string;
}
export declare class NotationView {
    readonly rootElement: HTMLElement;
    readonly config?: NotationViewConfig | undefined;
    headerElement: HTMLDivElement;
    notation: Notation;
    lineViews: LineView[];
    currentSVGElement: SVGSVGElement | null;
    tableElement: HTMLTableElement;
    markdownParser: (contents: string) => string;
    _beatLayout: GlobalBeatLayout;
    private layoutChangeUnsubscribe;
    constructor(rootElement: HTMLElement, config?: NotationViewConfig | undefined);
    get beatLayout(): GlobalBeatLayout;
    set beatLayout(beatLayout: GlobalBeatLayout);
    loadChildViews(): void;
    renderNotation(notation: Notation, beatLayout: GlobalBeatLayout): void;
    addNewRow(id: string, prefix: string, withAnnotation?: boolean): [HTMLElement, HTMLElement];
    newLineRoot(parent: Element, line: Line): SVGSVGElement;
    ensureLineView(line: Line): LineView;
    getLineView(line: Line): TSU.Nullable<LineView>;
    get currentLineView(): LineView;
    clear(): void;
    refreshLayout(): void;
    protected processBlock(block: Block, lineViews: LineView[]): void;
    protected processBlockItem(item: BlockItem, lineViews: LineView[]): void;
    renderBlock(raw: RawBlock): void;
    beatViews: Map<number, BeatView>;
    markerViews: Map<string, MarkerView>;
    viewForBeat(cell: GridCell): GridCellView;
}
