import React, { Component, ReactNode, MutableRefObject } from 'react';
import { State } from '@popperjs/core';
import { ReactPopperContext } from './react-popper-context';
import { ValueOf } from '../types';
export declare const POPPER_PLACEMENTS_TYPES: {
    readonly BOTTOM_END: "bottom-end";
    readonly BOTTOM_START: "bottom-start";
    readonly BOTTOM: "bottom";
    readonly LEFT_END: "left-end";
    readonly LEFT_START: "left-start";
    readonly LEFT: "left";
    readonly RIGHT_END: "right-end";
    readonly RIGHT_START: "right-start";
    readonly RIGHT: "right";
    readonly TOP_END: "top-end";
    readonly TOP_START: "top-start";
    readonly TOP: "top";
    readonly AUTO: "auto";
    readonly AUTO_START: "auto-start";
    readonly AUTO_END: "auto-end";
};
export declare const PopperPlacements: ("left" | "right" | "top" | "bottom" | "bottom-end" | "bottom-start" | "left-end" | "left-start" | "right-end" | "right-start" | "top-end" | "top-start" | "auto" | "auto-start" | "auto-end")[];
export type PopperPlacementsType = ValueOf<typeof POPPER_PLACEMENTS_TYPES>;
export declare const POPPER_STRATEGY_OPTIONS: {
    readonly ABSOLUTE: "absolute";
    readonly FIXED: "fixed";
};
export type PopperStrategyOption = ValueOf<typeof POPPER_STRATEGY_OPTIONS>;
export declare const OFFSET_MODIFIER: {
    name: string;
    options: {
        offset: number[];
    };
};
export declare const FLIP_MODIFIER: {
    name: string;
    options: {
        fallbackPlacements: string[];
    };
};
export declare const PREVENT_PARENT_OVERFLOW: {
    name: string;
    options: {
        altAxis: boolean;
        altBoundary: boolean;
    };
};
export type AnchorEl = HTMLElement | Element | MutableRefObject<HTMLElement> | (() => HTMLElement) | null;
type PopperProps = {
    open: boolean;
    placement?: PopperPlacementsType;
    transition?: boolean;
    anchorEl?: AnchorEl;
    container?: Element;
    rootEl: any;
    popperModifiers?: Array<object>;
    forceUpdateAfterOpen?: boolean;
    strategy?: PopperStrategyOption;
    keepMounted?: boolean;
    children: (childProps: any) => ReactNode;
};
type PopperState = {
    exited: boolean;
    placement?: PopperPlacementsType;
};
export declare class Popper extends Component<PopperProps, PopperState> {
    static contextType: React.Context<{
        hasParentPopper: boolean;
        notifyParentPopper(): void;
    }>;
    context: React.ContextType<typeof ReactPopperContext>;
    private popper;
    private hasChildPopper;
    constructor(props: PopperProps);
    static defaultProps: {
        placement: string;
        transition: boolean;
        strategy: "absolute";
        forceUpdateAfterOpen: boolean;
    };
    componentDidMount(): void;
    componentDidUpdate(prevProps: PopperProps): void;
    componentWillUnmount(): void;
    static getDerivedStateFromProps(nextProps: PopperProps): {
        exited: boolean;
    } | null;
    handleOpen: () => void;
    setHasChild: () => void;
    handlePopperUpdate: (data: Partial<State>) => void;
    handleExited: () => void;
    handleClose: () => void;
    render(): import("react/jsx-runtime").JSX.Element | null;
}
export {};
