import { HTMLAttributes, ReactNode } from "react";
/**
 * Toast visual variant
 */
export type ToastVariant = "default" | "glass";
/**
 * Toast state (e.g., loading indicator)
 */
export type ToastState = "default" | "loading";
export type ToastPosition = "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right";
export interface ToastAction {
    label: string;
    onClick: () => void;
}
export interface ToastTheme {
    baseStyle: string;
    variants: Record<ToastVariant, string>;
    iconStyle: string;
    titleStyle: string;
    subtitleStyle: string;
    closeButtonStyle: string;
    containerStyle: string;
}
export interface ToastData {
    id: string;
    variant?: ToastVariant;
    state?: ToastState;
    title?: ReactNode;
    subtitle?: ReactNode;
    icon?: ReactNode;
    action?: ToastAction | ReactNode;
    children?: ReactNode;
    duration?: number;
    dismissible?: boolean;
    onDismiss?: () => void;
}
export interface ToastProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
    /** Toast data */
    toast: ToastData;
    /** Custom class name */
    className?: string;
    /** Callback when toast is dismissed */
    onDismiss?: (id: string) => void;
    /** Index of toast in the stack */
    index?: number;
    /** Whether the toast stack is expanded */
    isExpanded?: boolean;
    /** Total number of toasts in the stack */
    totalToasts?: number;
    /** Mouse enter handler for hover management */
    onMouseEnter?: () => void;
    /** Mouse leave handler for hover management */
    onMouseLeave?: () => void;
    /** Callback when toast height is measured */
    onHeightChange?: (id: string, height: number) => void;
    /** Pre-calculated y-offset for expanded state */
    expandedOffset?: number;
    /**
     * Enable dark mode styling. When true, applies the `dark` class so components
     * use light colors for visibility.
     * @default false
     */
    darkMode?: boolean;
}
export interface ToastProviderProps {
    children: ReactNode;
    position?: ToastPosition;
    maxToasts?: number;
    defaultDuration?: number;
    /**
     * Enable dark mode styling for all toasts.
     * @default false
     */
    darkMode?: boolean;
}
export interface ToastContextValue {
    toasts: ToastData[];
    addToast: (toast: Omit<ToastData, "id">) => string;
    removeToast: (id: string) => void;
    removeAllToasts: () => void;
}
export interface UseToastOptions {
    variant?: ToastVariant;
    state?: ToastState;
    duration?: number;
    dismissible?: boolean;
    action?: ToastAction | ReactNode;
    children?: ReactNode;
    icon?: ReactNode;
}
export interface UseToastReturn {
    toast: (title: string, options?: UseToastOptions & {
        subtitle?: string;
    }) => string;
    success: (title: string, options?: UseToastOptions & {
        subtitle?: string;
    }) => string;
    error: (title: string, options?: UseToastOptions & {
        subtitle?: string;
    }) => string;
    warning: (title: string, options?: UseToastOptions & {
        subtitle?: string;
    }) => string;
    info: (title: string, options?: UseToastOptions & {
        subtitle?: string;
    }) => string;
    loading: (title: string, options?: Omit<UseToastOptions, "state"> & {
        subtitle?: string;
    }) => string;
    dismiss: (id: string) => void;
    dismissAll: () => void;
}
