import { ReactNode } from 'react';
import { ToastContentProps, ToastContainerProps as ToastContainerReactToastifyProps, ToastOptions } from 'react-toastify';
import { OverridesStyleRules } from '@mui/material/styles/overrides';
import { Theme } from '@mui/material/styles';
import { ToasterFunctionProps } from '@m4l/core';
import { Sizes } from '@m4l/styles';
import { ToastContainerSlots } from './slots';
import { TOAST_KEY_COMPONENT } from './constants';
import { IconColorDeep } from '@m4l/base';
export type ToastTypes = 'info' | 'success' | 'warning' | 'error' | 'default';
/**
 * Props for ToastMessage component.
 */
export interface ToastMessageProps extends Partial<ToastContentProps>, ToasterFunctionProps {
    /** Type of the toast message. */
    type?: ToastTypes;
    /** Unique ID for the toast message. */
    toastId?: ToastOptions['toastId'];
    /** ID of the container where the toast will be displayed. */
    containerId?: ToastOptions['containerId'];
    /** Auto close duration for the toast message. */
    autoClose?: ToastOptions['autoClose'];
    /** Size of the toast message. */
    size?: Extract<Sizes, 'small' | 'medium'>;
    /** Color of the icon in the toast message. */
    color?: IconColorDeep;
}
/**
 * Props for ToastContainer component.
 */
export interface ToastContainerProps extends Omit<ToastContainerReactToastifyProps, 'containerId'> {
    /** Unique ID for the ToastContainer. */
    containerId: Required<ToastOptions['containerId']>;
    /** Whether the toast is fixed or sticky. */
    fixed?: boolean;
    /** Unique key for testing the component. */
    dataTestId?: string;
    /** Children elements to be rendered inside the container. */
    children?: ReactNode;
    /** Color of the icon in the toast container. */
    color?: IconColorDeep;
    /** Size of the toast container. */
    size?: Extract<Sizes, 'small' | 'medium'>;
}
/**
 * Props for triggering a toast.
 */
export interface TriggerToast {
    /** Properties for the toaster function. */
    props: ToasterFunctionProps;
    /** Options for the toast. */
    toastOptions: ToastOptions;
    /** ID of the container where the toast will be displayed. */
    containerId: ToastOptions['containerId'];
    /** Type of the toast message. */
    type?: ToastOptions['type'];
    /** Size of the toast message. */
    size?: Extract<Sizes, 'small' | 'medium'>;
}
/**
 * Owner state for the toast container.
 */
export interface OwnerState {
    /** Color of the icon in the toast container. */
    color?: IconColorDeep;
    /** Whether the toast has a description. */
    hasDescription?: boolean;
}
export type ToastContainerOwnerState = OwnerState & ToastContainerProps;
export type ToastContainerSlotsType = keyof typeof ToastContainerSlots;
export type ToastContainerStyles = OverridesStyleRules<ToastContainerSlotsType, typeof TOAST_KEY_COMPONENT, Theme>;
//# sourceMappingURL=types.d.ts.map