import type { CSSProperties, Ref, VNodeChild } from 'vue'; import type { MergedTheme } from '../../_mixins'; import type { ImageGroupProps } from '../../image'; import type { UploadTheme } from '../styles'; export interface FileInfo { id: string; name: string; batchId?: string | null; percentage?: number | null; status: 'pending' | 'uploading' | 'finished' | 'removed' | 'error'; url?: string | null; file?: File | null; thumbnailUrl?: string | null; type?: string | null; fullPath?: string | null; } export type SettledFileInfo = Required; export type ShouldUseThumbnailUrl = (file: SettledFileInfo) => boolean; export type FuncOrRecordOrUndef = Record | (({ file }: { file: SettledFileInfo; }) => Record) | undefined; export interface OnChangePayload { file: SettledFileInfo; fileList: SettledFileInfo[]; event: ProgressEvent | Event | undefined; } export type OnChange = (data: OnChangePayload) => void; export type OnFinish = ({ file, event }: { file: SettledFileInfo; event?: ProgressEvent; }) => FileInfo | undefined | void; export type OnRemove = (data: { file: SettledFileInfo; fileList: SettledFileInfo[]; }) => Promise | boolean | any; export type OnDownload = (file: SettledFileInfo) => Promise | boolean | any; export type OnRetry = ({ file }: { file: SettledFileInfo; }) => Promise | boolean | void; export interface UploadInternalInst { doChange: DoChange; xhrMap: Map; isErrorState: ((xhr: XMLHttpRequest) => boolean) | undefined; onError: OnError | undefined; onFinish: OnFinish | undefined; } export type DoChange = (fileAfterChange: SettledFileInfo, event?: ProgressEvent | Event, options?: { append?: boolean; remove?: boolean; }) => void; export type OnUpdateFileList = (fileList: SettledFileInfo[]) => void; export type RenderIcon = (file: SettledFileInfo) => VNodeChild; export interface UploadInjection { mergedClsPrefixRef: Ref; mergedThemeRef: Ref>; showCancelButtonRef: Ref; showRemoveButtonRef: Ref; showDownloadButtonRef: Ref; showRetryButtonRef: Ref; showTriggerRef: Ref; mergedFileListRef: Ref; onRemoveRef: Ref; onDownloadRef: Ref; customDownloadRef: Ref; xhrMap: Map; showPreviewButtonRef: Ref; onPreviewRef: Ref; listTypeRef: Ref; dragOverRef: Ref; draggerInsideRef: { value: boolean; }; fileListClassRef: Ref; fileListStyleRef: Ref; mergedDisabledRef: Ref; maxReachedRef: Ref; abstractRef: Ref; iconRef: Ref; noIconRef: Ref; titleRef: Ref; subtitleRef: Ref; verticalRef: Ref; localeRef: Ref<{ title: string; subtitle: string; uploading: string; }>; imageGroupPropsRef: Ref; cssVarsRef: undefined | Ref; themeClassRef: undefined | Ref; mergedDirectoryDndRef: Ref; acceptRef: Ref; triggerClassRef: Ref; triggerStyleRef: Ref; doChange: DoChange; onRender: undefined | (() => void); submit: (options?: { fileId?: string; retry?: boolean; } | string) => void; onRetryRef: Ref; shouldUseThumbnailUrlRef: Ref; getFileThumbnailUrlResolver: (file: SettledFileInfo) => Promise | string; renderIconRef: Ref; handleFileAddition: (files: FileAndEntry[] | null, e?: Event) => void; openFileDialog: () => void; } export declare const uploadInjectionKey: import("vue").InjectionKey; export interface XhrHandlers { handleXHRLoad: (e: ProgressEvent) => void; handleXHRAbort: (e: ProgressEvent) => void; handleXHRProgress: (e: ProgressEvent) => void; handleXHRError: (e: ProgressEvent) => void; } export interface UploadInst { openFileDialog: () => void; submit: () => void; clear: () => void; } export type OnBeforeUpload = (data: { file: SettledFileInfo; fileList: SettledFileInfo[]; }) => Promise | boolean | void; export type ListType = 'text' | 'image' | 'image-card'; export type OnPreview = (file: SettledFileInfo) => void; export type CreateThumbnailUrl = (file: File | null, fileInfo: SettledFileInfo) => Promise | string | undefined; export interface CustomRequestOptions { file: SettledFileInfo; action?: string; withCredentials?: boolean; data?: FuncOrRecordOrUndef; headers?: FuncOrRecordOrUndef; onProgress: (e: { percent: number; }) => void; onFinish: () => void; onError: () => void; } export type CustomRequest = (options: CustomRequestOptions) => void; export type OnError = ({ file, event }: { file: SettledFileInfo; event?: ProgressEvent; }) => FileInfo | undefined | void; export interface FileAndEntry { file: File; entry: FileSystemFileEntry | null; source: 'dnd' | 'input'; } export interface UploadTriggerDefaultSlotOptions { handleClick: () => void; handleDragOver: (e: DragEvent) => void; handleDragEnter: (e: DragEvent) => void; handleDragLeave: (e: DragEvent) => void; handleDrop: (e: DragEvent) => void; } type CreateXhrHandlersType = (inst: UploadInternalInst, file: SettledFileInfo, xhr: XMLHttpRequest) => XhrHandlers; type CustomSubmitImplType = (options: { inst: Omit; data?: FuncOrRecordOrUndef; headers?: FuncOrRecordOrUndef; action?: string; withCredentials?: boolean; file: SettledFileInfo; customRequest: CustomRequest; }) => void; type RegisterHandlerType = (inst: UploadInternalInst, file: SettledFileInfo, request: XMLHttpRequest) => void; type UnwrapFunctionValueType = (data: FuncOrRecordOrUndef, file: SettledFileInfo) => Record; type SetHeadersType = (request: XMLHttpRequest, headers: FuncOrRecordOrUndef, file: SettledFileInfo) => void; type AppendDataType = (formData: FormData, data: FuncOrRecordOrUndef, file: SettledFileInfo) => void; type SubmitImplType = (inst: UploadInternalInst, fieldName: string, file: SettledFileInfo, options: { method: string; action?: string; withCredentials: boolean; responseType: XMLHttpRequestResponseType; headers: FuncOrRecordOrUndef; data: FuncOrRecordOrUndef; }) => void; export interface UseUploadReturn { createXhrHandlers: CreateXhrHandlersType; customSubmitImpl: CustomSubmitImplType; registerHandler: RegisterHandlerType; unwrapFunctionValue: UnwrapFunctionValueType; setHeaders: SetHeadersType; appendData: AppendDataType; submitImpl: SubmitImplType; } export {};