import Patch from './Patch';
import IMark from './IMark';
import { TypeSpanData } from './SpanData';
interface ILayer {
    typeSpanData: TypeSpanData;
    marks: IMark[];
}
export declare class Layers {
    private layerNames;
    private layers;
    private layerPatches;
    private layerPriorities;
    constructor(layers: Iterable<[string, TypeSpanData, IMark[]]>);
    addLayer(name: string, typeSpanData: TypeSpanData, ...marks: IMark[]): void;
    rmLayer(name: string): void;
    resetPatches(): void;
    get length(): number;
    layerByName(name: string): ILayer;
    getLayers(): Record<string, ILayer>;
    patchByName(name: string): Patch<IMark>;
    getPatches(): Record<string, Patch<IMark>>;
    allPatches(): Patch<IMark>[];
    get priorities(): string[];
    layerByPriority(priority: number): ILayer;
    layersByPriority(): ILayer[];
    permutePriority(permutation: number[]): void;
    layerToFront(layerName: string): void;
    layerToBack(layerName: string): void;
    changeLayer(name: string, newMarks: IMark[]): void;
    addToLayer(name: string, ...addMarks: IMark[]): void;
    rmFromLayer(name: string, ...rmMarks: IMark[]): void;
    private mergePatch;
    private patchFromDiff;
    private patchFromAdd;
    private patchFromRm;
}
export {};
