import * as _heroui_aria_utils from '@heroui/aria-utils';
import { OverlayOptions } from '@heroui/aria-utils';
import * as react from 'react';
import { ReactNode } from 'react';
import * as _heroui_system from '@heroui/system';
import { HTMLHeroUIProps, PropGetter } from '@heroui/system';
import { SlotsToClasses, PopoverVariantProps } from '@heroui/theme';
import { AriaTooltipProps } from '@react-types/tooltip';
import { OverlayTriggerProps } from '@react-types/overlays';
import { AriaOverlayProps } from '@react-aria/overlays';
import { HTMLMotionProps } from 'framer-motion';
import { ReactRef } from '@heroui/react-utils';

interface Props extends Omit<HTMLHeroUIProps, "content"> {
    /**
     * Ref to the DOM node.
     */
    ref?: ReactRef<HTMLElement | null>;
    /**
     * The children to render. Usually a trigger element.
     */
    children?: ReactNode;
    /**
     * The content of the tooltip.
     */
    content?: string | React.ReactNode;
    /**
     * Whether the tooltip should be disabled, independent from the trigger.
     */
    isDisabled?: boolean;
    /**
     * The delay time in ms for the tooltip to show up.
     * @default 0
     */
    delay?: number;
    /**
     * The delay time in ms for the tooltip to hide.
     * @default 500
     */
    closeDelay?: number;
    /**
     * By default, opens for both focus and hover. Can be made to open only for focus.
     */
    trigger?: "focus";
    /**
     * The props to modify the framer motion animation. Use the `variants` API to create your own animation.
     */
    motionProps?: Omit<HTMLMotionProps<"div">, "ref">;
    /**
     * The container element in which the overlay portal will be placed.
     * @default document.body
     */
    portalContainer?: Element;
    /**
     * List of dependencies to update the position of the tooltip.
     * @default []
     */
    updatePositionDeps?: any[];
    /**
     * Classname or List of classes to change the classNames of the element.
     * if `className` is passed, it will be added to the base slot.
     *
     * @example
     * ```ts
     * <Tooltip classNames={{
     *    base:"base-classes",
     *    content: "content-classes",
     *    arrow: "arrow-classes",
     * }} />
     * ```
     */
    classNames?: SlotsToClasses<"base" | "arrow" | "content">;
}
type UseTooltipProps = Props & AriaTooltipProps & AriaOverlayProps & OverlayTriggerProps & OverlayOptions & PopoverVariantProps;
declare function useTooltip(originalProps: UseTooltipProps): {
    Component: _heroui_system.As<any>;
    content: ReactNode;
    children: ReactNode;
    isOpen: boolean;
    triggerRef: react.RefObject<HTMLElement>;
    showArrow: boolean;
    portalContainer: Element | undefined;
    placement: _heroui_aria_utils.OverlayPlacement;
    disableAnimation: boolean;
    isDisabled: boolean | undefined;
    motionProps: Omit<HTMLMotionProps<"div">, "ref"> | undefined;
    getTooltipContentProps: PropGetter;
    getTriggerProps: PropGetter;
    getTooltipProps: PropGetter;
};
type UseTooltipReturn = ReturnType<typeof useTooltip>;

export { type UseTooltipProps, type UseTooltipReturn, useTooltip };
