export interface UploadFileOptions { formFile: File; fileName: string; contentType: string; extension: string; storageProvider: string; folderPath: string; module?: string; fromModule?: number; } export interface UploadUrlOptions { fileUrl: string; fileName: string; extension: string; storageProvider: string; contentType: string; folderPath: string; module?: string; fromModule?: number; } export interface UploadResult { fileUrl: string; url?: string; isMacro?: boolean; [key: string]: any; } export interface AssetEntry { id: string; type: "folder" | "file"; name: string; thumbnailUrl?: string; contentType?: string; size?: string; folderPath?: string; storageProvider?: string; } export interface FolderNode { id: string; name: string; parentFolderID?: string | null; path: string; storageProvider: string; storageUrl?: string; children?: FolderNode[]; } export interface FolderTreeNode { key: string; label: string; data: { path: string; breadcrumb: string[]; folderId: string; id: string; name: string; storageProvider: string; }; children: FolderTreeNode[]; } export interface UploadMediaAPI { uploadFile: (options: UploadFileOptions) => Promise; uploadMultiFiles: (options: UploadFileOptions[]) => Promise; uploadFromUrl: (options: UploadUrlOptions) => Promise; fetchFolders: () => Promise; fetchFolderFiles: (folderPath: string, storageProvider: string) => Promise; } export interface FieldSettings { imageExtensionTypes?: string[]; fileExtensionTypes?: string[]; maxFileSizeAllowed?: number; maxImageSizeAllowed?: number; minResolution?: number; maxResolution?: number; multiImageLimit?: number; docLimit?: number; } export interface UploadMediaLabels { title: string; fromDeviceTab: string; fromUrlTab: string; myAssetsTab: string; uploadBtn: string; selectBtn: string; cancelBtn: string; dragDropText: string; clickToUploadText: string; clickToReplaceText: string; urlPlaceholder: string; searchPlaceholder: string; invalidUrlError: string; noAssetsFound: string; fileSizeExceedError: string; invalidFileTypeError: string; maxFilesError: string; imagePreviewHere: string; macroSelectedLabel: string; noImageUrlProvided: string; rootTitle: string; minResolutionError: string; maxResolutionError: string; resolutionRangeError: string; } export type UploadMediaType = "images" | "image" | "video" | "doc" | "all"; export interface UploadMediaProps { api: UploadMediaAPI; onUploadComplete: (images: UploadResult[]) => void; onError?: (message: string) => void; onCancel?: () => void; type?: UploadMediaType; isMultiUpload?: boolean; folderPath?: string; allowMacros?: boolean; currentImageSrc?: string | null; module?: string; fromModule?: number; mediaBaseUrl?: string; fieldSettings?: FieldSettings; showMyAssetsTab?: boolean; sanitizeForEmail?: boolean; labels?: Partial; } export interface FromDeviceProps { type: UploadMediaType; isMultiUpload?: boolean; folderPath?: string; currentImagePreview?: string; sanitizeForEmail?: boolean; module?: string; fromModule?: number; fieldSettings?: FieldSettings; labels?: Partial; acceptedImageExtensions: string[]; acceptedFileExtensions: string[]; onFilesReady: (files: UploadFileInfo[]) => void; onUploadStateChange: (isUploading: boolean) => void; onError?: (message: string) => void; } export interface FromUrlProps { type: UploadMediaType; allowMacros?: boolean; currentImageSrc?: string | null; visible?: boolean; mediaBaseUrl?: string; labels?: Partial; macroSuggestions?: MacroSuggestion[]; onUrlReady: (url: string, isMacro: boolean) => void; onUploadStateChange: (isUploading: boolean) => void; } export interface MyAssetsProps { multiSelect?: boolean; type: UploadMediaType; labels?: Partial; api: Pick; mediaBaseUrl?: string; onSelectionChange: (images: SelectedAsset[]) => void; onUploadStateChange: (isUploading: boolean) => void; } export interface UploadFileInfo { file: File; fileName: string; extension: string; previewUrl: string; fileSize: number; fileSizeKB: number; fileSizeMB: number; imageDimensions: { width: number; height: number; } | null; thumbnailUrl?: string; } export interface SelectedAsset { id: string; fileUrl: string; } export interface MacroSuggestion { displayName: string; dataTypeId?: number; value?: string; }