import type { UIMessage } from "ai"; /** A picked File → an ai-SDK FileUIPart (data URL) so it can ride the turn. The optional `onProgress` (0..1) feeds the chip's read ring: attachments are now read eagerly at attach time (progress visible, failures surfaced per-chip with retry) instead of silently at send time. */ export declare function fileToPart(file: File, onProgress?: (fraction: number) => void): Promise<{ type: "file"; mediaType: string; filename: string; url: string; }>; /** The `.fl-att-ext` badge text — the filename's extension, bounded so a long or missing one still reads as a badge. */ export declare function fileExt(name: string | undefined): string; export declare function formatBytes(size: number): string; export type FilePart = Extract; /** A part that names a file the SERVER holds rather than carrying it: the conversation's own files, a drop still in staging, or the keep-shelf. All three live under §3.1's frozen `/user` mount, and nothing that carries its own bytes ever does — a data:, blob: or https: url cannot start with a slash. */ export declare const isSavedFile: (url: string) => boolean; /** A sent attachment in the transcript: images render as the designed `.fl-msg-img` thumbnail, anything else as a `.fl-msg-file` pill. A SAVED file is a reference, not bytes in the transcript — it lives in the user's own files — so its pill names it and has nothing to download. Only a part still carrying its own data keeps the download link. */ export declare function SentAttachment({ part }: { part: FilePart; }): import("react").JSX.Element;