import { Emitter } from "../utils/Emitter";
import { Layer } from "./Layer";
export declare class Layers extends Emitter {
    $root?: HTMLDivElement;
    private attached;
    private rootSize;
    protected layers: Set<Layer>;
    constructor($root?: HTMLDivElement);
    createLayer<T extends Constructor<Layer> = Constructor<Layer>>(layerCtor: T, props: T extends Constructor<Layer<infer Props>> ? Omit<Props, "root"> & {
        root?: Props["root"];
    } : never): InstanceType<T>;
    detachLayer(layer: Layer): void;
    getRootSize(): {
        width: number;
        height: number;
    };
    getLayers(): Layer[];
    attach(root?: HTMLDivElement): void;
    start(root?: HTMLDivElement): void;
    detach(full?: boolean): void;
    unmount(): void;
    protected resizeObserver: ResizeObserver;
    protected handleRootResize: import("lodash").DebouncedFunc<() => void>;
    destroy(): void;
    protected destroyLayers(): void;
    updateSize: () => void;
    private updateRootSize;
}
