import type { ChatAttachment } from '../utils/chat-attachment-markdown';
type Status = 'sniffing' | 'uploading' | 'ready' | 'error';
/** Internal staged-attachment shape (more fields than the wire
 *  `ChatAttachment` — carries state-machine metadata). */
export interface StagedAttachment {
    /** Stable client-side id; survives across re-renders. */
    id: string;
    file: File;
    status: Status;
    /** Set when `status === 'ready'`. Server-issued. */
    storagePath?: string;
    /** Set when `status === 'ready'`. Server-issued HMAC view token. */
    viewToken?: string;
    /** 0-100 during 'uploading'. */
    progress: number;
    /** Set when `status === 'error'`. */
    errorMessage?: string;
}
interface UseChatAttachmentsApi {
    attachments: StagedAttachment[];
    /** All staged files in 'ready' state, projected to the wire
     *  `ChatAttachment` shape — pass to `sendMessage`'s `pendingAttachments`. */
    readyAttachments: ChatAttachment[];
    /** True iff any attachment is mid-upload — Send button reads this
     *  to disable itself. */
    hasInflightUploads: boolean;
    addFiles: (files: FileList | File[]) => void;
    removeAttachment: (id: string) => void;
    clear: () => void;
}
export declare function useChatAttachments(): UseChatAttachmentsApi;
export {};
//# sourceMappingURL=use-chat-attachments.d.ts.map