import { Emitter } from "../utils/Emitter";
import { Layer } from "./Layer";
export declare class Layers extends Emitter {
    $root?: HTMLDivElement;
    private attached;
    readonly rootSize: import("@preact/signals-core").Signal<{
        width: number;
        height: number;
        dpr: number;
    }>;
    protected layers: Set<Layer>;
    private unwatchDPR?;
    constructor($root?: HTMLDivElement);
    getDPR(): number;
    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;
        dpr: number;
    };
    getLayers(): Layer[];
    attach(root?: HTMLDivElement): void;
    start(root?: HTMLDivElement): void;
    detach(full?: boolean): void;
    unmount(): void;
    protected resizeObserver: ResizeObserver;
    protected handleRootResize: (() => void) & {
        cancel: () => void;
        flush: () => void;
    };
    destroy(): void;
    protected destroyLayers(): void;
    updateSize: () => void;
}
