import React, { ReactNode } from 'react';
import { Placement, Rect } from '@popperjs/core';
type MaybeNumber = number | undefined | null;
export type Offset = ((o: {
    placement: Placement;
    popper: Rect;
    reference: Rect;
}) => [MaybeNumber, MaybeNumber]) | [MaybeNumber, MaybeNumber];
export type PopupProps = {
    attributes?: Record<string, string>;
    /**
     * @description content to be displayed inside a popup
     * @type {ReactNode}
     */
    children: ((triggerComputedStyles: CSSStyleDeclaration) => ReactNode) | ReactNode;
    exceptSelectors?: string[];
    /**
     * change the placement of a popper when it's scheduled to overflow a given boundary.
     */
    flip?: boolean;
    hasNoContent?: boolean;
    /**
     * hoverable class name
     */
    hoverableClassName?: string;
    /**
     * @description popup has arrow
     * @type {boolean}
     */
    isArrow?: boolean;
    /**
     * @description should close on outside click
     * @type {boolean}
     * @default true
     */
    isCloseOnOutsideClick?: boolean;
    /**
     * @description makes popup force open or close
     * @type {boolean}
     */
    isOpen?: boolean;
    modifiers?: Array<Record<string, any>>;
    /**
     * @description vertical and horizontal offsets
     * @type {Offset}
     */
    offset?: Offset;
    /**
     * @description event to listen for opening a popup
     * @type {('hover' | 'click')}
     * @default 'click'
     */
    on?: 'hover' | 'click';
    /**
     * @description triggers when placement is updated
     * @param {Placement} placement
     */
    onPlacementChange?(placement: Placement): void;
    /**
     * @description called when `clicked` or `hovered` on `trigger`
     * @param {boolean} [nextOpenedState]
     */
    onToggle?(nextOpenedState: boolean, options: {
        isClickedOutside?: boolean;
    }): void;
    /**
     * @description placement of popup
     * @type {Placement}
     * @default 'bottom'
     */
    placement?: Placement;
    /**
     * element to be rendered in
     */
    portalElement?: HTMLElement;
    /**
     * @description element which will open a popup after some interaction.
     *  `{ cursor: 'pointer', userSelect: 'none'}` will be added to styles
     *   by default so if you dont need that behavior change that inside `style` prop
     * @type {JSX.Element}
     */
    trigger: JSX.Element | HTMLElement | React.ReactNode;
    zIndex?: number;
};
export declare const Popup: React.MemoExoticComponent<({ children, offset, on, placement, trigger, hasNoContent, isCloseOnOutsideClick, isOpen, isArrow, hoverableClassName, onPlacementChange, onToggle, exceptSelectors, portalElement, attributes: outerAttributes, zIndex, modifiers: customModifiers, }: PopupProps) => JSX.Element>;
export {};
