import { PassthroughWidget } from './PassthroughWidget.js';
import { TooltipContainer } from './TooltipContainer.js';
import { WidgetEvent } from '../events/WidgetEvent.js';
import type { Widget, WidgetProperties } from './Widget.js';
import type { WidgetAutoXML } from '../xml/WidgetAutoXML.js';
/**
 * Wraps a widget and provides a tooltip. Automatically manages a given
 * {@link TooltipContainer}, which will be used as the actual visual tooltip.
 *
 * Whenever this widget is hovered for a small amount of time without moving
 * the pointer too much, a new layer will be created with the passed
 * {@link TooltipContainer}, in the top-most {@link LayeredContainer}.
 * Unhovering this wrapper will remove the layer.
 *
 * Has a tolerance for small movements, so that shaky pointers can still be used
 * to detect hovering.
 *
 * @category Widget
 */
export declare class Tooltip<W extends Widget = Widget, T extends TooltipContainer = TooltipContainer> extends PassthroughWidget<W> {
    static autoXML: WidgetAutoXML;
    /**
     * The timestamp for when the hovering started. 0 if not hovering. For
     * internal use only.
     */
    private _hoverStart;
    /**
     * The pointer position for when the hovering started. For internal use
     * only.
     */
    private _hoverStartPos;
    /** The actual tooltip that will be shown when this wrapper is hovered. */
    readonly tooltipWidget: T;
    /** The tooltip controller used for managing tooltip visibility. */
    private readonly controller;
    constructor(child: W, tooltipWidget: T, properties?: Readonly<WidgetProperties>);
    protected handleAttachment(): void;
    protected handleDetachment(): void;
    protected handlePreLayoutUpdate(): void;
    protected handleEvent(event: WidgetEvent): Widget | null;
    resolvePosition(x: number, y: number): void;
    finalizeBounds(): void;
}
