import type { ExtractPropTypes, InjectionKey, PropType, Ref, VNode } from "vue";
import type { UploadOptions, FileStatus, FileItem, BeforeUpload, ValidResultType, IValidResult } from "@matechat/common/Attachment/common/attachment-types.ts";
export { UploadOptions, FileStatus, FileItem, BeforeUpload, ValidResultType, IValidResult, };
export declare const AttachmentProps: {
    readonly uploadOptions: {
        readonly type: PropType<UploadOptions>;
        readonly default: () => {};
    };
    readonly disabled: {
        readonly type: BooleanConstructor;
        readonly default: false;
    };
    readonly accept: {
        readonly type: StringConstructor;
        readonly default: "";
    };
    readonly dropPlaceholder: {
        readonly type: StringConstructor;
    };
    readonly maxCount: {
        readonly type: NumberConstructor;
        readonly default: number;
    };
    readonly maxSize: {
        readonly type: NumberConstructor;
        readonly default: number;
    };
    readonly multiple: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
    readonly draggable: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
    readonly beforeUpload: {
        readonly type: PropType<BeforeUpload>;
        readonly default: null;
    };
    readonly getDropContainer: {
        readonly type: PropType<() => HTMLElement>;
    };
};
export type AttachmentProps = ExtractPropTypes<typeof AttachmentProps>;
export declare const AttachmentEmits: {
    change: (file: File, fileList: FileItem[]) => boolean;
    success: (file: File, response: FileItem["response"], fileList: FileItem[]) => boolean;
    error: (file: File, error: FileItem["error"], fileList: FileItem[]) => boolean;
    progress: (file: File, fileList: FileItem[]) => boolean;
    drop: (files: File[]) => boolean;
    validChange: (e: IValidResult[]) => boolean;
};
export type AttachmentEmits = {
    (e: "change", file: File, fileList: FileItem[]): void;
    (e: "success", file: File, response: FileItem["response"], fileList: FileItem[]): void;
    (e: "error", file: File, error: FileItem["error"], fileList: FileItem[]): void;
    (e: "progress", file: File, fileList: FileItem[]): void;
    (e: "drop", files: File[]): void;
    (e: "validChange", validResult: IValidResult[]): void;
};
export interface AttachmentSlots {
    default(): VNode;
    dropPlaceholder(): VNode;
}
export interface IAttachmentCtx {
    rootProps: AttachmentProps;
    rootEmits: AttachmentEmits;
    isDisabled: Ref<boolean>;
    uploadFiles: (files: File[]) => Promise<void>;
}
export declare const AttachmentInjectKey: InjectionKey<IAttachmentCtx>;
