export type FikaMediaKind = 'image' | 'video' | 'audio'; export interface FikaMediaUploadProgress { loaded: number; total: number; } export interface FikaMediaUploadRequest { file: File; kind: FikaMediaKind; signal: AbortSignal; onProgress: (progress: FikaMediaUploadProgress) => void; } export interface FikaMediaUploadResult { /** URL stored on the slide element (https, data, or blob). */ src: string; /** Optional extension for video/audio export (e.g. `mp4`). */ ext?: string; } export type FikaMediaUploader = (request: FikaMediaUploadRequest) => Promise; export type FikaMediaSizeLimit = number | Partial>; export interface FikaMediaConstraints { /** Maximum files accepted in one picker session. Default: 12. */ maxFiles?: number; /** * Maximum size per file in bytes. Pass a number for a global cap, or a * per-kind map. Unspecified kinds fall back to the global/`image` value. */ maxFileSize?: FikaMediaSizeLimit; /** Restrict which media kinds the picker accepts. Default: all three. */ kinds?: FikaMediaKind[]; /** Extra MIME allowlist (exact types, e.g. `image/png`). */ mimeTypes?: string[]; /** Extra extension allowlist without dots (`png`, `mp4`). */ extensions?: string[]; /** * `accept` attribute for the file input. When omitted, it is derived from * `kinds` / `mimeTypes` / `extensions`. */ accept?: string; } export interface FikaMediaConfig { constraints?: FikaMediaConstraints; /** * Optional host upload. When omitted, images become data URLs and * audio/video become blob URLs (fine for demos, not for persistence). */ upload?: FikaMediaUploader; /** Parallel uploads when `upload` is set. Default: 3. */ concurrency?: number; } export interface FikaXhrMediaUploaderOptions { url: string; method?: 'POST' | 'PUT'; fieldName?: string; headers?: Record | (() => Record | Promise>); formData?: Record | ((file: File, kind: FikaMediaKind) => Record); withCredentials?: boolean; timeoutMs?: number; parseResponse?: (response: unknown, file: File, kind: FikaMediaKind) => FikaMediaUploadResult | string; } export declare const DEFAULT_MEDIA_CONSTRAINTS: Required> & Pick; export declare function setFikaMediaConfig(config?: FikaMediaConfig | null): void; export declare function getFikaMediaConfig(): FikaMediaConfig; export declare function getMediaConstraints(): FikaMediaConstraints; export declare function getMediaUploader(): FikaMediaUploader | undefined; export declare function getMediaConcurrency(): number; /** * Build a progress-aware `upload` callback for typical FormData endpoints. * Hosts that need signed URLs or multipart policies can still pass a custom * `FikaMediaUploader` instead. */ export declare function createFikaMediaUploader(options: FikaXhrMediaUploaderOptions): FikaMediaUploader;