import { CSSProperties, PureComponent, ReactElement } from "react";
import { Modifier } from "react-popper";
import { AnimationType, BASE_SIZES_WITH_NONE, HideShowEvent, JustifyType } from "../../constants";
import { DialogPosition } from "../../constants/positions";
import L3ComponentProps from "../../types/L3ComponentProps";
import { TooltipArrowPosition, TooltipSize, TooltipTheme } from "./TooltipConstants";
import { ElementContent } from "../../types/ElementContent";
import { MoveBy } from "../../types/MoveBy";
import "./Tooltip.scss";
export interface TooltipProps extends L3ComponentProps {
    children: ReactElement | Array<ReactElement>;
    content: ElementContent;
    style?: CSSProperties;
    arrowPosition?: TooltipArrowPosition;
    paddingSize?: keyof typeof BASE_SIZES_WITH_NONE;
    /**
     * How much to move the dialog in relative to children
     * main is the axis in which the position is aligned to
     * secondary is the vertical axes to the position
     */
    moveBy?: MoveBy;
    theme?: TooltipTheme;
    justify?: JustifyType;
    getContainer?: () => HTMLElement;
    /**
     * how much delay should the Dialog wait until it should trigger the hide in MS
     */
    hideDelay?: number;
    /**
     * how much delay should the Dialog wait until it should trigger the show in MS
     */
    showDelay?: number;
    disableDialogSlide?: boolean;
    animationType?: AnimationType;
    withoutDialog?: boolean;
    /**
     * the container selector in which to append the dialog
     * for examples: "body" , ".my-class", "#my-id"
     */
    containerSelector?: string;
    /**
     * With which delay tooltip is going to be shown
     */
    immediateShowDelay?: number;
    /**
     * when false, the arrow of the tooltip is hidden
     */
    tip?: boolean;
    /**
     * Show the Dialog when the children is mounting
     */
    shouldShowOnMount?: boolean;
    hideWhenReferenceHidden?: boolean;
    onTooltipHide?: () => void;
    onTooltipShow?: () => void;
    /**
     * PopperJS Modifiers type
     * https://popper.js.org/docs/v2/modifiers/
     */
    modifiers?: Array<Modifier<any>>;
    /**
     * Where the tooltip should be in reference to the children: Top, Left, Right, Bottom ...
     */
    position?: DialogPosition;
    /**
     * an array of hide/show trigger -
     * Dialog.hideShowTriggers
     */
    showTrigger?: HideShowEvent | Array<HideShowEvent>;
    /**
     * an array of hide/show trigger -
     * Dialog.hideShowTriggers
     */
    hideTrigger?: HideShowEvent | Array<HideShowEvent>;
    showOnDialogEnter?: boolean;
    /**
     * A Classname to be added to <spam> element which wraps the children
     */
    referenceWrapperClassName?: string;
    tooltipSize?: TooltipSize;
}
export default class Tooltip extends PureComponent<TooltipProps> {
    wasShown: boolean;
    static positions: typeof DialogPosition;
    static themes: typeof TooltipTheme;
    static animationTypes: typeof AnimationType;
    static justifyTypes: typeof JustifyType;
    static arrowPositions: typeof TooltipArrowPosition;
    static tooltipSize: typeof TooltipSize;
    static defaultProps: {
        arrowPosition: TooltipArrowPosition;
        moveBy: {
            main: number;
            secondary: number;
        };
        theme: TooltipTheme;
        position: DialogPosition;
        justify: JustifyType;
        hideDelay: number;
        showDelay: number;
        disableDialogSlide: boolean;
        animationType: AnimationType;
        withoutDialog: boolean;
        containerSelector: string;
        tip: boolean;
        hideWhenReferenceHidden: boolean;
        modifiers: (import("react-popper").StrictModifier<any> | Partial<import("@popperjs/core").Modifier<any, object>>)[];
        showTrigger: HideShowEvent;
        hideTrigger: HideShowEvent;
        showOnDialogEnter: boolean;
        referenceWrapperClassName: string;
        tooltipSize: TooltipSize;
    };
    constructor(props: TooltipProps);
    getContainer(): HTMLElement;
    renderTooltipContent(): JSX.Element;
    onTooltipShow(): void;
    onTooltipHide(): void;
    getTimeSinceLastTooltip(): number;
    getShowDelay(): {
        showDelay: number;
        preventAnimation: boolean;
    };
    render(): JSX.Element;
}
