import { LayeredContainer } from '../widgets/LayeredContainer.js';
import { type Widget } from '../widgets/Widget.js';
/**
 * Controls the visibility of a tooltip container (such as
 * {@link TooltipContainer}). Used for implementing tooltips, such as in
 * {@link Tooltip}, or to implement tooltip-like functionality, such as
 * dropdowns or context menus.
 */
export declare abstract class BaseTooltipController<W extends Widget, C extends Widget, O = void> {
    readonly tooltipWrapper: W;
    readonly tooltipContainer: C;
    /** The top-most container in the current UI tree */
    protected topLayeredContainer: LayeredContainer | null;
    /** The currently created layer for the {@link Tooltip#tooltipWidget} */
    private layer;
    constructor(tooltipWrapper: W, tooltipContainer: C);
    /**
     * Find the top-most layered container that is an ascendant of the
     * {@link BaseTooltipController#tooltipWrapper}. You must call this when the
     * wrapper widget is attached to a parent.
     *
     * Removes the current layer if there is any, and if the top-most layered
     * container changed.
     */
    findTopLayeredContainer(): void;
    /**
     * Clear the top-most layered container. You must call this when the wrapper
     * widget is detached from a parent.
     *
     * Removes the current layer if there is any.
     */
    clearTopLayeredContainer(): void;
    /**
     * Add a layer for the {@link TooltipController#tooltipContainer}. If there
     * is a layer and adding another one would succeed, remove the old one.
     *
     * @returns True if the layer was addedd successfully, or false if there was no top layered container.
     */
    addLayer(_options: O): boolean;
    /**
     * Remove the layer of the {@link TooltipController#tooltipContainer} if
     * there is any.
     */
    removeLayer(): void;
    get hasLayer(): boolean;
    /**
     * Update the {@link TooltipContainer#tooltipRect} of the
     * {@link TooltipController#tooltipContainer}.
     */
    updateTooltipRect(): void;
    /**
     * Implementation for {@link BaseTooltipController#updateTooltipRect}. Must
     * be implemented by base class.
     * {@link BaseTooltipController#topLayeredContainer} is guaranteed to be set
     * when this method is called.
     */
    protected abstract doTooltipRectUpdate(): void;
}
