import React$1, { ReactNode } from 'react';

type ToastType = 'success' | 'error' | 'info' | 'custom' | 'promise' | 'warning' | 'envelope' | 'drawer';
type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
type Aria = {
    role: string;
    label: string;
};
interface ToastProps {
    id: string;
    message: ReactNode | any;
    type: ToastType;
    position?: ToastPosition;
    duration?: number;
    icon?: ReactNode;
    className?: string;
    style?: React.CSSProperties;
    iconStyle?: React.CSSProperties;
    expandable?: boolean;
    expandedContent?: ReactNode;
    onExpand?: any;
    isClosing?: any;
    isCloseBtn?: any;
    expandedClassName?: string;
    closeBtnStyle?: React.CSSProperties;
    toastTypeTheming?: any;
    spacingToast?: React.CSSProperties;
    isPausedOnHover?: boolean;
    direction?: string;
    aria?: Aria;
}

type ToastTypeTheming = {
    success: {
        style: React$1.CSSProperties;
        className: string;
    };
    error: {
        style: React$1.CSSProperties;
        className: string;
    };
    info: {
        style: React$1.CSSProperties;
        className: string;
    };
    custom: {
        style: React$1.CSSProperties;
        className: string;
    };
};
interface ToastContainerProps {
    toastTypeTheming?: ToastTypeTheming;
    spacing?: number;
    position?: ToastPosition;
    duration?: number;
    direction?: string;
    isPausedOnHover?: boolean;
    aria?: Aria;
}
declare const ToastContainer: React$1.FC<ToastContainerProps>;

interface Toast {
    id: string;
    message: React.ReactNode;
    type: ToastType;
    duration?: number;
    position?: ToastPosition;
    isClosing?: boolean;
    isVisible?: boolean;
    expandedContent?: React.ReactNode;
    isExpanded?: boolean;
    icon?: React.ReactNode;
    promise?: Promise<any>;
    status?: 'pending' | 'resolved' | 'rejected';
    timerId?: NodeJS.Timeout;
    startTime?: number;
    remainingTime?: number;
    isPaused?: boolean;
    isPausedOnHover?: boolean;
    onDismiss?: (id: string, message: React.ReactNode) => void;
    onExpandContent?: (id: string, message: React.ReactNode) => void;
    aria?: Aria;
}

declare const toast: ((message: React.ReactNode, options?: Partial<Omit<ToastProps, "message">>) => string) & {
    success: (message: React.ReactNode, options?: Partial<Omit<ToastProps, "message" | "type">>) => string;
    error: (message: React.ReactNode, options?: Partial<Omit<ToastProps, "message" | "type">>) => string;
    info: (message: React.ReactNode, options?: Partial<Omit<ToastProps, "message" | "type">>) => string;
    envelope: (message: React.ReactNode, options?: Partial<Omit<ToastProps, "message" | "type">>) => string;
    drawer: (message: React.ReactNode, options?: Partial<Omit<ToastProps, "message" | "type">>) => string;
    warning: (message: React.ReactNode, options?: Partial<Omit<ToastProps, "message" | "type">>) => string;
    custom: (message: React.ReactNode, options?: Partial<Omit<ToastProps, "message" | "type">>) => string;
    remove: (id: string) => void;
    removeAll: () => void;
    update: (id: string, updates: Partial<Toast>) => void;
    pause: (id: string) => void;
    remainingTime: (id: string) => number | null;
    resume: (id: string) => void;
    promise: <T = void>(promise: Promise<T>, { loading, success, error, position, toastOptions, }: {
        loading: string;
        success: string;
        error: string;
        duration?: number;
        position?: any;
        toastOptions?: Partial<ToastProps>;
    }) => Promise<T>;
};

export { ToastContainer, type ToastPosition, toast };
