import PopperJs, { Behavior, ModifierFn, Placement, Position } from 'popper.js';
import { Component, CSSProperties, PropsWithChildren, ReactElement, RefObject } from 'react';
export interface PopperState {
    popperStyle: CSSStyleDeclaration | null;
    arrowStyle: CSSStyleDeclaration | null;
    actualPlacement: Placement | undefined;
}
export declare type PopperProps = PropsWithChildren<{
    /**
     * Target for popper.
     */
    target: ReactElement;
    /**
     * A React reference to the DOM element that needs for calculating the position of the popup.
     */
    targetRef?: RefObject<HTMLElement | undefined>;
    /**
     * Arrow element of popper
     */
    arrow?: ReactElement;
    /**
     *  Whether show popper content.
     */
    show?: boolean;
    /**
     * Boundaries element for preventOverflow property.
     */
    boundariesElement?: 'scrollParent' | 'window' | 'viewport' | HTMLElement;
    /**
     * The behavior used to change the popper's placement.
     */
    behavior?: Behavior | Position[];
    /**
     * Placement for popper.
     */
    placement?: Placement;
    /**
     * zIndex value.
     */
    zIndex?: number;
    /**
     * Shift your popper on both axis.
     */
    offset?: number | string;
    /**
     * Update callback function
     */
    onUpdate?: (state: PopperState) => void;
    /**
     * @ignore
     */
    style?: CSSProperties;
    /**
     * @ignore
     */
    className?: string;
    /**
     * @ignore
     */
    baseClassName?: string;
}>;
/**
 * `Popper` component.
 */
declare class Popper extends Component<PopperProps, PopperState> {
    static defaultProps: {
        show: boolean;
        children: null;
        arrow: null;
        placement: string;
        behavior: string;
        offset: string;
        onUpdate: null;
        className: null;
        baseClassName: string;
        zIndex: null;
        boundariesElement: string;
        style: undefined;
        targetRef: undefined;
    };
    state: {
        popperStyle: null;
        arrowStyle: null;
        actualPlacement: PopperJs.Placement | undefined;
    };
    componentDidMount(): void;
    componentDidUpdate(prevProps: PopperProps): void;
    componentWillUnmount(): void;
    popper: PopperJs | null;
    contentRef: RefObject<HTMLDivElement>;
    arrowRef: Element | null;
    updatePopper({ show, boundariesElement, placement, offset, behavior, arrow, targetRef, }: PopperProps): void;
    extractStyles: ModifierFn;
    render(): JSX.Element;
}
export default Popper;
