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