export function formatBytes(n: number | null | undefined): string { if (n === null || n === undefined || Number.isNaN(n)) return "—"; if (n < 1024) return `${n} B`; if (n < 1024 * 1024) return `${(n / 1024).toFixed(n < 10 * 1024 ? 1 : 0)} KB`; return `${(n / (1024 * 1024)).toFixed(1)} MB`; } export const FILE_KIND_LABEL: Record = { image: "Image", pdf: "PDF", text: "Text", code: "Code", csv: "CSV", json: "JSON", document: "Document" }; export function kindLabel(kind: string): string { return FILE_KIND_LABEL[kind] ?? kind; } /** MIME/extension accept list shared by the upload inputs (mirrors /api/attachments + library `kindOf`). */ export const LIBRARY_ACCEPT = "image/png,image/jpeg,image/webp,image/gif,application/pdf,text/*,application/json,.md,.txt,.csv,.json,.js,.ts,.tsx,.jsx,.py,.rb,.go,.rs,.java,.kt,.swift,.c,.cc,.cpp,.h,.hpp,.cs,.php,.sh,.yaml,.yml,.toml,.xml,.html,.css,.sql";