import { NotificationCardProps } from '../../modules/Notification';
import { AlertColor, SizeAlert, VariantAlert, AnimationAlert } from './alert';
import { IconType, AnyIconDefinition } from './types';
export type MessagePosition = 'top-left' | 'top-center' | 'top-right' | 'center-left' | 'center' | 'center-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
export type MessageType = 'toast' | 'notification';
export type MessageColor = AlertColor | 'brand';
export interface BaseMessageProps {
    id: number;
    message?: string;
    title?: string;
    description?: string;
    color: MessageColor;
    variant?: VariantAlert;
    size?: SizeAlert;
    position?: MessagePosition;
    duration?: number;
    showCloseButton?: boolean;
    isLeaving?: boolean;
    animation?: AnimationAlert;
    onClick?: () => void;
    onClose?: () => void;
    onPrimaryClick?: () => void;
    onSecondaryClick?: () => void;
    primaryButtonText?: string;
    secondaryButtonText?: string;
}
export interface BaseMessageOptions {
    title?: string;
    description?: string;
    position?: MessagePosition;
    duration?: number;
    showCloseButton?: boolean;
    variant?: VariantAlert;
    size?: SizeAlert;
    animation?: AnimationAlert;
    onClick?: () => void;
    onClose?: () => void;
    onPrimaryClick?: () => void;
    onSecondaryClick?: () => void;
    primaryButtonText?: string;
    secondaryButtonText?: string;
}
export interface BaseMessageConfig {
    maxMessages: number;
    position: MessagePosition;
    duration: number;
    animationDuration: number;
    variant: VariantAlert;
    primaryButtonText: string;
    secondaryButtonText: string;
    size: SizeAlert;
}
export type MessageListener<T extends BaseMessageProps = BaseMessageProps> = (message: T) => void;
export type MessagesByPosition<T extends BaseMessageProps = BaseMessageProps> = Partial<Record<MessagePosition, T[]>>;
export interface ToastProps extends BaseMessageProps {
    type?: 'toast';
}
export interface ToastOptions extends BaseMessageOptions {
    message?: string;
}
export interface ToastConfig extends BaseMessageConfig {
    progressBarColor?: boolean;
}
export type NotificationColor = 'brand' | 'neutral';
export type NotificationSize = 'sm' | 'md' | 'lg';
export interface NotificationAction {
    label: string;
    onClick: () => void;
    variant?: 'primary' | 'secondary' | 'ghost';
}
export interface NotificationProps extends Omit<BaseMessageProps, 'color'> {
    type?: 'notification';
    color: NotificationColor;
    avatar?: string;
    icon?: IconType | AnyIconDefinition;
    subtitle?: string;
    /** Total de notificaciones en el grupo (cola); la UI puede mostrarlo en la tarjeta frontal */
    count?: number;
    timerProgress?: number;
    showTimer?: boolean;
    /**
     * Overrides del componente **Notification** (Figma); los rellena `notify.message({ notification })`
     * y se fusionan al renderizar la tarjeta.
     */
    notificationCard?: Partial<Omit<NotificationCardProps, 'open'>>;
}
export interface NotificationOptions extends BaseMessageOptions {
    message?: string;
    avatar?: string;
    icon?: IconType | AnyIconDefinition;
    subtitle?: string;
}
/** Mazo de apilamiento público (`notify.message`); mapea a colas internas `brand` / `neutral`. */
export type NotifyMessageStackGroup = 'primary' | 'secondary';
export declare const NOTIFY_STACK_GROUP_TO_COLOR: Record<NotifyMessageStackGroup, NotificationColor>;
/** Clave de mazo por defecto cuando no se indica `stackGroup: 'primary' | 'secondary'` (todas las variantes Figma comparten cola). */
export declare const NOTIFY_DEFAULT_STACK_KEY: "auto";
/** Campos de la tarjeta **Notification** (Figma) admitidos en `notify.message` (raíz o anidados en `notification`). */
export type NotifyMessageCardFields = Partial<Omit<NotificationCardProps, 'open'>>;
/**
 * Entrada de `notify.message`: hereda opciones de toast/notify y admite la tarjeta **Notification** (Figma).
 *
 * - **`stackGroup` (opcional):** con `primary` | `secondary` fijas un **mazo explícito**. Si se omite
 *   (cualquier variante de cuerpo Figma o mensaje simple), todo va al mazo por defecto **`'auto'`**
 *   y se **apila junto** sin separar por intención ni tipo de cuerpo.
 * - **Tarjeta Figma:** puedes poner `content`, `leading`, `appearance`, `meta`, `events` y `footer` **en la raíz**
 *   del objeto, o dentro de **`notification`** (o combinar: se fusionan por bloque; en cada bloque gana lo que
 *   vaya en `notification` sobre el mismo campo en raíz).
 * - **`stackSummaryLegend` (opcional):** leyenda del pie de apilado cuando hay **más de una** notificación
 *   (sustituye «N notificaciones más»). Sin prop o cadena vacía, el pie usa el texto por defecto del DS.
 */
export interface NotifyMessageOptions extends NotificationOptions, NotifyMessageCardFields {
    title?: string;
    /**
     * Leyenda opcional del pie de apilado cuando hay **más de una** notificación en el mazo (sustituye
     * «1 notificación más» / «N notificaciones más»). El consumidor puede actualizarla en cada
     * `notify.message`. Si **no** se define o es cadena vacía, se usa el texto por defecto del DS.
     */
    stackSummaryLegend?: string;
    /**
     * Mazo explícito (`primary` ≙ cola *brand*, `secondary` ≙ *neutral*): todas las entradas con el mismo
     * valor comparten cola y comportamiento de apilado.
     *
     * Si **no** se define, se usa el mazo por defecto **`'auto'`** ({@link NOTIFY_DEFAULT_STACK_KEY}): todas las
     * notificaciones (informativa, preventiva, CTA, simples, etc.) **comparten** la misma cola.
     */
    stackGroup?: NotifyMessageStackGroup;
    /**
     * Misma forma que los campos de tarjeta en raíz; se fusiona después de la raíz (tiene prioridad por bloque).
     */
    notification?: NotifyMessageCardFields;
}
/**
 * Resuelve la clave interna de mazo para `notify.message`.
 * - `stackGroup: 'primary' | 'secondary'` → esa clave.
 * - En cualquier otro caso (omitido, etc.) → {@link NOTIFY_DEFAULT_STACK_KEY} (`'auto'`).
 */
export declare function resolveNotifyMessageStackKey(options: Pick<NotifyMessageOptions, 'stackGroup' | 'notification'>): string;
export interface NotificationGroup {
    /** Clave del mazo (`primary` | `secondary` | `auto` por defecto). */
    stackKey: string;
    color: NotificationColor;
    /** Notificación más reciente (referencia para duración del timer y compatibilidad) */
    notification: NotificationProps;
    /** Cola ordenada de la más antigua [0] a la más reciente [length-1] */
    queue: NotificationProps[];
    /** Igual a `queue.length`: notificaciones abiertas en el grupo */
    count: number;
    /**
     * Texto del pie de apilado cuando `count > 1` (p. ej. desde `notify.message({ stackSummaryLegend })`).
     * Sin valor, la UI usa la leyenda por defecto del design system.
     */
    stackSummaryLegend?: string;
    timerId?: NodeJS.Timeout;
    timerProgress: number;
    isLeaving: boolean;
}
export type NotificationGroupsByPosition = Partial<Record<MessagePosition, Record<string, NotificationGroup>>>;
export interface NotificationConfig {
    position: MessagePosition;
    duration: number;
    animationDuration: number;
    size: NotificationSize;
    showTimer: boolean;
    /**
     * Máximo de notificaciones simultáneas por grupo (por color).
     * Las más recientes quedan visibles al frente; al superar este límite se expulsa la más antigua.
     */
    stackMax: number;
}
export type MessageInput = string | (BaseMessageOptions & {
    message?: string;
});
export type ToastPosition = MessagePosition;
export type ToastsByPosition = MessagesByPosition<ToastProps>;
export type ToastListener = MessageListener<ToastProps>;
//# sourceMappingURL=message.d.ts.map