import * as TSU from "@panyam/tsutils";
import { Entity } from "./entity";
import { Cycle } from "./cycle";
import { Line } from "./core";
import { RoleDef, RawBlock, BlockItem, Block, SectionBlock, RepeatBlock, CycleBlock, BeatDurationBlock, BreaksBlock, RoleBlock, GroupBlock, isBlock, isLine, isRawBlock, findContainingBlock } from "./block";
export { RoleDef, RawBlock, BlockItem, Block, SectionBlock, RepeatBlock, CycleBlock, BeatDurationBlock, BreaksBlock, RoleBlock, GroupBlock, isBlock, isLine, isRawBlock, findContainingBlock, };
export type CmdParam = {
    key: TSU.Nullable<string>;
    value: any;
};
export declare abstract class Command extends Entity {
    autoGenerated: boolean;
    prevSibling: null | Command;
    nextSibling: null | Command;
    params: CmdParam[];
    index: number;
    constructor(params?: CmdParam[]);
    validateParams(): void;
    get name(): string;
    debugValue(): any;
    getParam(name: string): any;
    getParamAt(index: number): any;
    abstract applyToBlock(container: Block): void;
    applyToNotation(notation: Notation): void;
}
export declare class MetaData {
    readonly key: string;
    readonly value: string;
    readonly params?: any | undefined;
    constructor(key: string, value: string, params?: any | undefined);
}
export declare class Notation extends Block {
    readonly TYPE = "Notation";
    metadata: Map<string, MetaData>;
    onMissingRole: (name: string) => RoleDef | null;
    constructor();
    get blocks(): BlockItem[];
    get currentAPB(): number;
    set currentAPB(value: number);
    get currentCycle(): Cycle;
    set currentCycle(value: Cycle);
    get currentBreaks(): number[];
    set currentBreaks(value: number[]);
    get roles(): RoleDef[];
    setCurrRole(name: string): void;
    getRoleDef(name: string): TSU.Nullable<RoleDef>;
    newRoleDef(name: string, notesOnly?: boolean): RoleDef;
    addLine(line: Line): void;
    removeLine(line: Line): number;
    addRawBlock(raw: RawBlock): void;
    addMetaData(meta: MetaData, addBlock?: boolean): void;
    resetLine(): void;
    debugValue(): any;
    protected _currRoleDef: TSU.Nullable<RoleDef>;
    get currRoleDef(): RoleDef | null;
    protected _currentLine: Line | null;
    get currentLine(): Line;
    newLine(): Line;
}
