import React, { Component } from "react";
import type { RefObject } from "react";
import Tether from "tether";
type TetherEvent = "repositioned" | "update";
type TetherEventHandler = (event?: {
    top: string;
    left: "string";
}) => void;
interface ReactTetherProps extends Tether.ITetherOptions {
    renderElementTag?: string;
    renderElementTo?: string | HTMLElement;
    renderTarget: (ref: React.RefObject<any>) => void;
    renderElement?: (ref: React.RefObject<any>) => void;
    id?: string;
    className?: string;
    style?: Partial<CSSStyleDeclaration>;
    onUpdate?: TetherEventHandler;
    onRepositioned?: TetherEventHandler;
}
export default class ReactTether extends Component<ReactTetherProps> {
    _targetNode: RefObject<HTMLElement>;
    _elementNode: RefObject<HTMLElement>;
    _elementParentNode: HTMLElement | null;
    _tetherInstance: Tether | null;
    componentDidMount(): void;
    componentDidUpdate(previousProps: ReactTetherProps): void;
    componentWillUnmount(): void;
    getTetherInstance(): Tether | null;
    disable(): void;
    enable(): void;
    on(event: TetherEvent, handler: TetherEventHandler, ctx?: unknown): void;
    once(event: TetherEvent, handler: TetherEventHandler, ctx?: unknown): void;
    off(event: TetherEvent, handler: TetherEventHandler): void;
    position(): void;
    _runRenders(): {
        targetComponent: (void & React.ReactElement<unknown, string | React.JSXElementConstructor<any>>) | null;
        elementComponent: (void & React.ReactElement<unknown, string | React.JSXElementConstructor<any>>) | null;
    };
    _createTetherInstance(tetherOptions: Tether.ITetherOptions): void;
    _destroyTetherInstance(): void;
    _registerEventListeners(): void;
    get _renderNode(): Element | null;
    _destroy(): void;
    _createContainer(): void;
    _addContainerToDOM(): void;
    _removeContainer(): void;
    _update(): void;
    _updateTether(): void;
    render(): React.JSX.Element | null;
}
export {};
