import { MessageBubbleMetadata } from './types'; import * as i0 from "@angular/core"; /** Acción disparada desde una burbuja. Un solo output tipado en vez de 4. */ export interface MessageBubbleAction { type: 'reply' | 'edit' | 'delete' | 'react'; msgId: string; /** Token del emoji, solo para type 'react'. */ token?: string; } /** * val-message-bubble — burbuja de mensaje presentacional (signal inputs). * * Sin lógica de negocio: el contenedor (`val-chat-window`) decide agrupación y * pasa flags (showAvatar/showName/tail). Las acciones (responder/editar/borrar/ * reaccionar) NO están siempre visibles: se revelan en hover (desktop) o al tocar * la burbuja (móvil), y se emiten por un único `(action)` tipado. * * Read receipts estilo WhatsApp: sending → reloj, sent → ✓, delivered/read → ✓✓ * (read en color), failed → alerta. */ export declare class MessageBubbleComponent { private i18n; private modal; readonly msg: import("@angular/core").InputSignal; readonly showAvatar: import("@angular/core").InputSignal; readonly showName: import("@angular/core").InputSignal; readonly tail: import("@angular/core").InputSignal; readonly locale: import("@angular/core").InputSignal; readonly action: import("@angular/core").OutputEmitterRef; protected readonly actionsOpen: import("@angular/core").WritableSignal; constructor(); protected readonly time: import("@angular/core").Signal; protected readonly initials: import("@angular/core").Signal; protected readonly imageAttachments: import("@angular/core").Signal; protected readonly audioAttachments: import("@angular/core").Signal; protected readonly fileAttachments: import("@angular/core").Signal; protected readonly statusIcon: import("@angular/core").Signal<"time-outline" | "alert-circle" | "checkmark-done" | "checkmark">; protected toggleActions(): void; protected emit(type: MessageBubbleAction['type'], token?: string): void; /** Abre la imagen adjunta en el visor de medios a pantalla completa. */ protected viewAttachment(att: { url: string; name?: string; mimeType?: string; }): void; /** Diagnóstico: el navegador no pudo reproducir el audio recibido. */ protected onAudioError(att: { url: string; mimeType?: string; }, event: Event): void; t(key: string): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }