import { Context } from "../context/context";
import { Object3D, Vector3 } from "three";
import { EventDispatcher } from "../utils";
interface OverlayOptions {
    autoUpdate: boolean;
    appendToBody: boolean;
    autoChangePlacement: boolean;
}
interface OverlayEventMap {
    "update-position": {
        x: number;
        y: number;
        width: number;
        height: number;
    };
}
type Placement = "top" | "bottom" | "left" | "right" | "leftTop" | "rightTop" | "leftBottom" | "rightBottom" | "center";
export declare class Overlay extends EventDispatcher<OverlayEventMap> {
    private context;
    div: HTMLDivElement;
    private element?;
    position: Vector3;
    clientPos: {
        x: number;
        y: number;
    };
    visible: boolean;
    options: OverlayOptions;
    placement: Placement;
    observer: MutationObserver | null;
    constructor(context: Context, options?: Partial<OverlayOptions>);
    initObserver(): void;
    getPlacementPosition(): Record<Placement, Vector3>;
    getPlacementScreenPosition(): Record<Placement, {
        x: number;
        y: number;
    }>;
    checkOverflow(max: {
        x: number;
        y: number;
    }, min: {
        x: number;
        y: number;
    }): boolean;
    getPlacement(): {
        type: Placement;
        position: {
            x: number;
            y: number;
        };
    };
    initDiv(): HTMLDivElement;
    usePlacement(): void;
    bindElement(element: Object3D): void;
    unBindElement(): void;
    setVisible(visible: boolean, display?: string): void;
    setOpacity(opacity: number): void;
    getPosition(): Vector3;
    get withinDisplayRange(): boolean;
    _updatePosition(x: number, y: number): void;
    updatePosition(force?: boolean): void;
    onUpdate: () => void;
    registryEvent(): void;
    unRegistryEvent(): void;
    dispose(): void;
}
export {};
