export interface ImageVariant { path: string; publicPath: string; width: number; height: number; size: number; format: string; } export interface Image { fileId: string; imageId: string; status: "completed" | "failed"; original: ImageVariant; variants: Record; metadata: { originalFormat: string; originalSize: number; exifStripped: boolean; processingTime: number; }; createdAt: string; } interface BaseImageOptions { quality?: number; format?: "webp" | "jpeg" | "png" | "original"; stripExif?: boolean; pathParts?: string[]; entityId?: string; commentId?: string; spaceId?: string; eventId?: string; onProgress?: (progress: number) => void; } export interface ExactDimensionsMode extends BaseImageOptions { mode: "exact-dimensions"; dimensions: Record; fit?: "cover" | "contain" | "inside" | "outside"; } export interface AspectRatioWidthMode extends BaseImageOptions { mode: "aspect-ratio-width-based"; aspectRatio: { width: number; height: number; }; widths: Record; fit?: "cover" | "contain" | "inside" | "outside"; } export interface AspectRatioHeightMode extends BaseImageOptions { mode: "aspect-ratio-height-based"; aspectRatio: { width: number; height: number; }; heights: Record; fit?: "cover" | "contain" | "inside" | "outside"; } export interface OriginalAspectMode extends BaseImageOptions { mode: "original-aspect"; sizes: Record; fit?: "inside" | "outside"; } export interface MultiAspectRatioMode extends BaseImageOptions { mode: "multi-aspect-ratio"; aspectRatios: Array<{ width: number; height: number; }>; sizes: Record; fit?: "cover" | "contain" | "inside" | "outside"; } export type UploadImageOptions = ExactDimensionsMode | AspectRatioWidthMode | AspectRatioHeightMode | OriginalAspectMode | MultiAspectRatioMode; export {};