import { ReactNode, CSSProperties } from 'react';
import { BaseFileItem } from '@douyinfe/semi-foundation/lib/es/upload/foundation';
import { strings } from '@douyinfe/semi-foundation/lib/es/upload/constants';
import { ArrayElement } from '../_base/base';
export type PromptPositionType = ArrayElement<typeof strings.PROMPT_POSITION>;
export type UploadListType = ArrayElement<typeof strings.LIST_TYPE>;
export interface BeforeUploadProps {
    file: FileItem;
    fileList: Array<FileItem>;
}
export interface AfterUploadProps {
    file: FileItem;
    fileList: Array<FileItem>;
    response: any;
}
export interface OnChangeProps {
    fileList: Array<FileItem>;
    currentFile: FileItem;
}
export interface customRequestArgs {
    fileName: string;
    data: Record<string, any>;
    file: FileItem;
    fileInstance: File;
    onProgress: (e?: {
        total: number;
        loaded: number;
    }) => any;
    onError: (userXhr: {
        status?: number;
    }, e?: Event) => any;
    onSuccess: (response: any, e?: Event) => any;
    withCredentials: boolean;
    action: string;
}
export interface CustomError extends Error {
    status: number;
    method: string;
    url: string;
}
export interface FileItem extends BaseFileItem {
    validateMessage?: ReactNode;
}
export interface RenderFileItemProps extends FileItem {
    index?: number;
    previewFile?: (fileItem: RenderFileItemProps) => ReactNode;
    listType: UploadListType;
    onRemove: () => void;
    onRetry: () => void;
    onReplace: () => void;
    key: string;
    showPicInfo?: boolean;
    renderPicInfo?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
    renderPicPreviewIcon?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
    renderFileOperation?: (fileItem: RenderFileItemProps) => ReactNode;
    showRetry?: boolean;
    showReplace?: boolean;
    style?: CSSProperties;
    disabled: boolean;
    onPreviewClick: () => void;
}
