/**
 * ComposableMessage - Data structure for building messages from multiple parts
 *
 * Handles multi-line pastes by storing them as editable blocks that can be:
 * - Displayed as summaries
 * - Edited individually
 * - Assembled into a final message when sent
 *
 * Architecture:
 * - MessagePart: Union type for text or paste blocks
 * - ComposableMessageBuilder: Manages parts and provides editing/assembly
 * - UI helpers: Format blocks for display with summaries
 */
export type MessagePartType = 'text' | 'paste';
export interface TextPart {
    type: 'text';
    id: string;
    content: string;
    timestamp: number;
}
export interface PastePart {
    type: 'paste';
    id: string;
    content: string;
    lineCount: number;
    timestamp: number;
    summary: string;
    edited: boolean;
}
export type MessagePart = TextPart | PastePart;
export interface ComposableMessageState {
    parts: MessagePart[];
    currentDraft: string;
}
/**
 * Paste size warning thresholds
 */
export declare const PASTE_LIMITS: {
    readonly WARN_CHARS: 10000;
    readonly WARN_LINES: 100;
    readonly MAX_CHARS: 500000;
    readonly MAX_LINES: 5000;
};
/**
 * Paste size check result
 */
export interface PasteSizeCheck {
    ok: boolean;
    warning?: string;
    error?: string;
    chars: number;
    lines: number;
}
/**
 * Builds messages from composable parts (text + paste blocks)
 * Allows editing blocks before final assembly
 *
 * Features:
 * - Undo/redo support for paste operations
 * - Size warnings for large pastes
 * - Inline editing of paste blocks
 */
export declare class ComposableMessageBuilder {
    private parts;
    private currentDraft;
    private idCounter;
    private history;
    private historyIndex;
    private maxHistorySize;
    constructor();
    /**
     * Save current state to history
     */
    private saveHistory;
    /**
     * Undo last operation
     */
    undo(): boolean;
    /**
     * Redo last undone operation
     */
    redo(): boolean;
    /**
     * Check if undo is available
     */
    canUndo(): boolean;
    /**
     * Check if redo is available
     */
    canRedo(): boolean;
    /**
     * Check paste size and return warnings/errors
     */
    static checkPasteSize(content: string): PasteSizeCheck;
    /**
     * Get current state
     */
    getState(): ComposableMessageState;
    /**
     * Check if message is empty
     */
    isEmpty(): boolean;
    /**
     * Check if message has content
     */
    hasContent(): boolean;
    /**
     * Get number of parts
     */
    getPartCount(): number;
    /**
     * Set current draft text
     */
    setDraft(text: string): void;
    /**
     * Get current draft
     */
    getDraft(): string;
    /**
     * Add a text part from current draft
     */
    commitDraft(): void;
    /**
     * Add a paste block
     * @returns Paste ID, or null if paste was rejected due to size limits
     */
    addPaste(content: string): string | null;
    /**
     * Add a paste block without size check (for internal use)
     */
    addPasteUnchecked(content: string): string;
    /**
     * Edit a paste block by ID
     */
    editPaste(id: string, newContent: string): boolean;
    /**
     * Remove a part by ID
     */
    removePart(id: string): boolean;
    /**
     * Get a part by ID
     */
    getPart(id: string): MessagePart | null;
    /**
     * Assemble final message from all parts
     */
    assemble(): string;
    /**
     * Clear all parts and draft
     */
    clear(): void;
    /**
     * Format for display in chat
     */
    formatForDisplay(): string;
    /**
     * Format summary for status display
     */
    formatSummary(): string;
    /**
     * Format paste blocks as inline chips for prompt display.
     * Returns a string like: "[📝 Code: 15L/2.3kc] [📋 Text: 50L/5kc]"
     * Returns empty string if no paste blocks exist.
     */
    formatPasteChips(): string;
    /**
     * Format a single paste chip with type detection
     */
    private formatPasteChip;
    /**
     * Get count of paste blocks only
     */
    getPasteBlockCount(): number;
    /**
     * Generate a summary for a paste block
     */
    private generateSummary;
    /**
     * Generate unique ID for parts
     */
    private generateId;
}
//# sourceMappingURL=composableMessage.d.ts.map