import { type ComponentPropsWithoutRef, type ReactNode } from "react";
export type ChatBubbleVariant = "user" | "bot" | "system";
export type ChatBubbleSize = "sm" | "md" | "lg";
export type ChatBubbleStatus = "sent" | "delivered" | "read" | "failed";
export interface ChatBubbleProps extends Omit<ComponentPropsWithoutRef<"div">, "color" | "title"> {
    variant?: ChatBubbleVariant;
    size?: ChatBubbleSize;
    /** Display name shown in the meta row. */
    author?: ReactNode;
    /** Wall-clock timestamp (or ReactNode for relative formatters). */
    timestamp?: ReactNode;
    /** Avatar slot. Falls back to a string-initial Avatar when omitted. */
    avatar?: ReactNode;
    /** Override the auto-derived initial (first char of `author`). */
    initial?: string;
    /** Hide the avatar entirely — useful for "consecutive messages from the
     * same author" patterns. */
    hideAvatar?: boolean;
    /** Show a typing indicator instead of children (three pulsing dots). */
    isTyping?: boolean;
    /** Delivery state badge in the meta row. `failed` adds an error tint to
     * the bubble. */
    status?: ChatBubbleStatus;
    /** Optional action slot rendered under the bubble (e.g. "Retry", reaction
     * buttons, copy-to-clipboard). */
    actions?: ReactNode;
    /** Optional attachments slot rendered below the body (file chips, image
     * previews, code blocks). */
    attachments?: ReactNode;
    /** Render ChatBubble's chrome onto a custom child element via Slot.
     * Internal slots (avatar, body, meta, actions) are NOT rendered when
     * `asChild` is true — useful for wrapping a router-link as a clickable
     * message bubble. */
    asChild?: boolean;
    children?: ReactNode;
}
export declare const ChatBubble: import("react").ForwardRefExoticComponent<ChatBubbleProps & import("react").RefAttributes<HTMLDivElement>>;
//# sourceMappingURL=ChatBubble.d.ts.map