import { NotificationGroup, NotificationConfig, NotifyMessageOptions, NotifyMessageStackGroup } from '../../../shared/types/message';
type NotificationGroupListener = (groups: Record<string, NotificationGroup>) => void;
/**
 * Servicio de notificaciones agrupadas por `stackKey` (`primary` / `secondary` / `auto`), cola antigua → reciente
 * y `stackMax`. El temporizador y la barra de progreso aplican solo a la **más reciente**; al expirar se vacía
 * el mazo entero (`dismissStack`). `dismiss(id)` sobre la más reciente equivale a vaciar el mazo; sobre otra
 * entrada solo retira esa. `dismissGroup` / `dismissStack` vacían mazos con animación.
 */
declare class NotificationService {
    private listeners;
    private idCounter;
    private groups;
    private timers;
    private progressIntervals;
    private removeTimers;
    /**
     * Encola una notificación agrupada (API unificada `notify.message`).
     */
    message(options: NotifyMessageOptions): number;
    private enqueueFromOptions;
    /**
     * Si la cola supera `stackMax`, elimina la más antigua hasta cumplir el límite.
     */
    private evictOldestWhileOverCap;
    /**
     * Actualiza la leyenda del pie de apilado según la última llamada a `notify.message` para ese mazo.
     */
    private applyStackSummaryLegend;
    /**
     * Cancela solo el timeout que borra el mazo tras `dismissStack` (no toca timers de progreso).
     */
    private cancelStackRemovalTimer;
    /**
     * Agrega una notificación al grupo correspondiente
     */
    private addToGroup;
    /**
     * Inicia el timer del grupo solo para la notificación **más reciente** (`queue[queue.length - 1]`).
     * Al expirar se vacía el mazo con `dismissStack` (las demás no tienen timer propio).
     */
    private startTimer;
    /**
     * Reinicia el timer para un grupo
     */
    private resetTimer;
    /**
     * Limpia el timer de un grupo
     */
    private clearTimer;
    /**
     * Cierra todas las notificaciones de un mazo explícito (`primary` | `secondary`).
     */
    dismissGroup(stackGroup: NotifyMessageStackGroup): void;
    /**
     * Cierra todas las notificaciones del mazo identificado por `stackKey` (`primary`, `secondary`, `auto`, …).
     */
    dismissStack(stackKey: string): void;
    /**
     * Elimina una notificación concreta de su grupo por `id`.
     * Si `id` es la más reciente del mazo, equivale a `dismissStack` (cierra todo el grupo).
     * Si no, retira solo esa entrada y reinicia el timer para la nueva más reciente.
     */
    dismiss(id: number): void;
    /**
     * Configura las opciones del servicio
     */
    configure(options: Partial<NotificationConfig>): void;
    /**
     * Obtiene los grupos actuales (solo mazos con cola activa).
     */
    getGroups(): Record<string, NotificationGroup>;
    /**
     * Suscribirse a cambios
     */
    subscribe(listener: NotificationGroupListener): () => void;
    /**
     * Notifica a todos los listeners
     */
    private notifyListeners;
    /**
     * Obtiene la configuración actual
     */
    getConfig(): NotificationConfig;
}
/**
 * Instancia singleton del servicio de notificaciones agrupadas; la usan `notification`, `notify` y `useNotification`.
 */
export declare const notificationService: NotificationService;
/**
 * Expone el mismo singleton que `notificationService` (acceso directo al servicio desde componentes o pruebas).
 *
 * @returns Instancia de `NotificationService` compartida en toda la app.
 */
export declare const useNotificationService: () => NotificationService;
export {};
//# sourceMappingURL=NotificationService.d.ts.map