import { default as React } from 'react';
import { PopoverVariant, PopoverSize, PopoverPosition, PopoverTransition, PopoverTrigger, PopoverTone, PopoverEventHandlers, RenderContentFunction, RenderTriggerFunction } from './types';

export interface PopoverProps extends PopoverEventHandlers {
    children?: React.ReactNode;
    open?: boolean;
    defaultOpen?: boolean;
    onOpenChange?: (open: boolean) => void;
    position?: PopoverPosition;
    trigger?: PopoverTrigger;
    closeOnBlur?: boolean;
    closeOnEscape?: boolean;
    closeOnOutsideClick?: boolean;
    variant?: PopoverVariant;
    size?: PopoverSize;
    tone?: PopoverTone;
    hasArrow?: boolean;
    transition?: PopoverTransition;
    enterDuration?: number;
    exitDuration?: number;
    easing?: string;
    portalContainer?: Element | null;
    initialFocus?: React.RefObject<HTMLElement>;
    returnFocus?: boolean;
    renderContent?: RenderContentFunction;
    renderTrigger?: RenderTriggerFunction;
    borderWidth?: string;
    borderColor?: string;
    borderStyle?: string;
    borderRadius?: string;
    fontSize?: string;
    fontWeight?: string;
    fontFamily?: string;
    headingColor?: string;
    descriptionColor?: string;
    backgroundColor?: string;
    textColor?: string;
    shadowColor?: string;
    arrowColor?: string;
    focusBorderColor?: string;
    focusRingColor?: string;
    focusRingOffset?: string;
    boxShadow?: string;
    hoverShadow?: string;
    focusBoxShadow?: string;
    padding?: string;
    margin?: string;
    gap?: string;
    offset?: string;
    arrowSize?: string;
    offsetTop?: number;
    offsetBottom?: number;
    offsetLeft?: number;
    offsetRight?: number;
    'aria-label'?: string;
    'aria-describedby'?: string;
    role?: string;
}
export interface PopoverTriggerProps extends React.HTMLAttributes<HTMLElement> {
    children: React.ReactNode;
    asChild?: boolean;
}
declare const PopoverTrigger: React.ForwardRefExoticComponent<PopoverTriggerProps & React.RefAttributes<HTMLElement>>;
export interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {
    children?: React.ReactNode;
    portalContainer?: Element | null;
}
declare const PopoverContent: React.ForwardRefExoticComponent<PopoverContentProps & React.RefAttributes<HTMLDivElement>>;
export interface PopoverArrowProps extends React.HTMLAttributes<HTMLDivElement> {
    /** Additional className for styling the arrow */
    className?: string;
}
declare const PopoverArrow: React.ForwardRefExoticComponent<PopoverArrowProps & React.RefAttributes<HTMLDivElement>>;
export interface PopoverTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {
    children: React.ReactNode;
    level?: 1 | 2 | 3 | 4 | 5 | 6;
}
declare const PopoverTitle: React.ForwardRefExoticComponent<PopoverTitleProps & React.RefAttributes<HTMLHeadingElement>>;
export interface PopoverDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {
    children: React.ReactNode;
}
declare const PopoverDescription: React.ForwardRefExoticComponent<PopoverDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
export interface PopoverCloseProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
    children?: React.ReactNode;
    asChild?: boolean;
}
declare const PopoverClose: React.ForwardRefExoticComponent<PopoverCloseProps & React.RefAttributes<HTMLButtonElement>>;
export { PopoverTrigger, PopoverContent, PopoverArrow, PopoverTitle, PopoverDescription, PopoverClose, };
interface PopoverComponent extends React.ForwardRefExoticComponent<PopoverProps & React.RefAttributes<HTMLDivElement>> {
    Trigger: typeof PopoverTrigger;
    Content: typeof PopoverContent;
    Arrow: typeof PopoverArrow;
    Title: typeof PopoverTitle;
    Description: typeof PopoverDescription;
    Close: typeof PopoverClose;
}
declare const PopoverCompound: PopoverComponent;
export default PopoverCompound;
export { PopoverCompound as Popover };
