import { NotificationCardProps } from '../../modules/Notification'; import { NotificationEventsProps } from '../../modules/Notification/types/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; /** * Clic en la superficie de la notificación (no en cerrar ni en botones de acción). * @deprecated Usa `events.onClick` en `notify.message` o el bloque `events` de la tarjeta. */ onClick?: () => void; /** @deprecated Usa `events.onClose` en `notify.message`. */ onClose?: () => void; /** @deprecated Usa `cta.primaryButton.onClick` en `notify.message` con `content.kind: 'cta'`. */ onPrimaryClick?: () => void; /** @deprecated Usa `cta.secondaryButton.onClick` en `notify.message` con `content.kind: 'cta'`. */ onSecondaryClick?: () => void; /** @deprecated Usa `cta.primaryButton.label` o etiquetas en `content.cta`. */ primaryButtonText?: string; /** @deprecated Usa `cta.secondaryButton.label` o etiquetas en `content.cta`. */ secondaryButtonText?: string; } export interface BaseMessageOptions { title?: string; description?: string; position?: MessagePosition; duration?: number; showCloseButton?: boolean; variant?: VariantAlert; size?: SizeAlert; animation?: AnimationAlert; /** * Clic en la superficie de la notificación (no en cerrar ni en botones de acción). * @deprecated Usa `events.onClick` en `notify.message`. */ onClick?: () => void; /** @deprecated Usa `events.onClose` en `notify.message`. */ onClose?: () => void; /** @deprecated Usa `cta` con `primaryButton.onClick` en `notify.message`. */ onPrimaryClick?: () => void; /** @deprecated Usa `cta` con `secondaryButton.onClick` en `notify.message`. */ onSecondaryClick?: () => void; /** @deprecated Usa `cta.primaryButton.label` o `content.cta`. */ primaryButtonText?: string; /** @deprecated Usa `cta.secondaryButton.label` o `content.cta`. */ secondaryButtonText?: string; } export interface BaseMessageConfig { maxMessages: number; position: MessagePosition; duration: number; animationDuration: number; variant: VariantAlert; primaryButtonText: string; secondaryButtonText: string; size: SizeAlert; } export type MessageListener = (message: T) => void; export type MessagesByPosition = Partial>; 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'; } /** * Botón de acción en `notify.message` (cabecera del Alert o cuerpo CTA). * Agrupa etiqueta y callback en un solo objeto. */ export interface NotifyMessageButtonAction { /** Texto visible del botón. */ label: string; /** Handler al pulsar el botón (no propaga clic de tarjeta). */ onClick: () => void; } /** * Eventos de superficie de la notificación en `notify.message`. * Subconjunto de {@link NotificationEventsProps} sin argumentos en `onClose` (cola plana). */ export type NotifyMessageEventsGroup = Pick & { /** Cierre vía botón «X» (sin argumento; la tarjeta Figma admite el evento de botón). */ onClose?: () => void; }; /** * Botones del cuerpo CTA (`content.kind === 'cta'`). * Se fusionan en `content.cta` y en los callbacks de `events` de la tarjeta. */ export interface NotifyMessageCtaActions { /** Botón primario del bloque CTA en el cuerpo. */ primaryButton?: NotifyMessageButtonAction; /** Botón secundario del bloque CTA en el cuerpo. */ secondaryButton?: NotifyMessageButtonAction; } export interface NotificationProps extends Omit { 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>; } 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; /** 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>; /** * 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). * - **Acciones agrupadas:** `events` (clic en tarjeta / cerrar) y `cta` (botones del cuerpo con * `content.kind: 'cta'`). Las props planas en raíz siguen admitidas con `@deprecated` hasta un major. * Botones de cabecera del Alert solo vía el componente **Notification** directo, no en `notify.message`. * - **`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; /** * Eventos de superficie: clic en tarjeta y cierre. Prevalece sobre `onClick` / `onClose` en raíz. */ /** Eventos de tarjeta y superficie; admite también botones planos deprecados en el mismo bloque. */ events?: Partial; /** * Botones del cuerpo cuando `content.kind === 'cta'`. Prevalece sobre etiquetas sueltas en `content.cta` * y sobre `onPrimaryClick` / `onSecondaryClick` en raíz para ese caso. */ cta?: NotifyMessageCtaActions; /** * 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): 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>>; 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; export type ToastListener = MessageListener; //# sourceMappingURL=message.d.ts.map