import React, { ReactNode, CSSProperties } from 'react';

type ToastPosition = 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center' | 'center';
type ToastType = 'success' | 'error' | 'info' | 'warning' | 'loading' | 'custom';
type ToastTheme = 'light' | 'dark' | 'auto';
type ToastPriority = 'low' | 'normal' | 'high' | 'urgent';
interface ToastAction {
    label: string;
    onClick: (id: string) => void;
    style?: 'primary' | 'secondary' | 'danger';
    loading?: boolean;
}
interface SwipeConfig {
    enabled: boolean;
    threshold: number;
    velocity: number;
}
interface ToastConfig {
    position?: ToastPosition;
    duration?: number;
    priority?: ToastPriority;
    dismissible?: boolean;
    pauseOnHover?: boolean;
    pauseOnFocusLoss?: boolean;
    swipe?: SwipeConfig;
    icon?: ReactNode | boolean;
    sound?: boolean;
    vibrate?: boolean;
    actions?: ToastAction[];
    onClose?: () => void;
    onUndo?: (() => void) | null;
    onRetry?: (() => void) | null;
    className?: string;
    style?: CSSProperties;
    groupId?: string;
    stackable?: boolean;
}
interface RequiredToastConfig extends Omit<Required<ToastConfig>, 'onUndo' | 'onRetry'> {
    onUndo: (() => void) | null;
    onRetry: (() => void) | null;
}
interface Toast {
    id: string;
    content: ReactNode;
    type: ToastType;
    config: RequiredToastConfig;
    timestamp: number;
    isExiting: boolean;
    isPaused: boolean;
    remainingTime: number;
    swipeProgress: number;
    retryCount: number;
}
interface ToastQueue {
    maxToasts: number;
    strategy: 'fifo' | 'lifo' | 'priority';
    grouping: boolean;
    maxPerGroup: number;
}
interface ToasterContextValue {
    toasts: Toast[];
    theme: ToastTheme;
    queue: ToastQueue;
    success: (content: ReactNode, config?: ToastConfig) => string;
    error: (content: ReactNode, config?: ToastConfig) => string;
    info: (content: ReactNode, config?: ToastConfig) => string;
    warning: (content: ReactNode, config?: ToastConfig) => string;
    loading: (content: ReactNode, config?: ToastConfig) => string;
    custom: (content: ReactNode, config?: ToastConfig) => string;
    update: (id: string, content: ReactNode, config?: Partial<ToastConfig>) => void;
    dismiss: (id: string) => void;
    dismissAll: () => void;
    dismissGroup: (groupId: string) => void;
    pause: (id: string) => void;
    resume: (id: string) => void;
    retry: (id: string) => void;
    undo: (id: string) => void;
    setTheme: (theme: ToastTheme) => void;
    setQueue: (queue: Partial<ToastQueue>) => void;
}
interface ToasterOptions {
    position?: ToastPosition;
    theme?: ToastTheme;
    duration?: number;
    richColors?: boolean;
    closeButton?: boolean;
    className?: string;
    style?: CSSProperties;
    onClose?: () => void;
}

declare const ToasterProvider: React.FC<{
    children: ReactNode;
}>;

declare const useToaster: () => ToasterContextValue;

export { Toast, ToastPosition, ToastType, ToasterOptions, ToasterProvider, useToaster };
