import type { EventTypeWithTarget } from 'jb-core';
import type { JBImageInputWebComponent } from './jb-image-input';
export type JBImagesImageInputElements = {
    webComponent: HTMLDivElement;
    placeHolderWrapper: HTMLDivElement;
    placeHolderTitle: HTMLDivElement;
    placeHolderMessageBox: HTMLDivElement;
    image: HTMLImageElement;
    overlay: {
        container: HTMLDivElement;
        deleteButton: HTMLDivElement;
        downloadButton: HTMLDivElement;
    };
    errorOverlay: {
        container: HTMLDivElement;
        message: HTMLDivElement;
    };
};
export type ViewStatus = "downloaded" | "empty" | "uploading" | "uploaded";
export type JBImageInputBridge<TValue> = {
    downloader: (downloaderInput: TValue, config: JBImageInputConfig) => Promise<string>;
    uploader: (file: File, config: JBImageInputConfig, onProgressCallback?: (percent: number) => void) => Promise<TValue>;
};
export type JBImageInputConfig = {
    uploadUrl?: string;
    downloadUrl?: string;
    [key: string]: any;
};
export type ValidationValue<TValue> = {
    file: File;
    value: TValue;
};
export type JBImageInputEventType<TEvent, TValue> = EventTypeWithTarget<TEvent, JBImageInputWebComponent<TValue>>;
