import * as React from "react";
export interface ImageUploaderProps {
    /** Current image URL (remote, blob, or data URL). When set, the preview state is shown. */
    value?: string;
    /** Fired when the user picks or drops a new image. The consumer is responsible for uploading. */
    onChange: (file: File) => void;
    /** Fired when the user clicks the trash icon. Omit to hide the remove button. */
    onRemove?: () => void;
    /** Accepted MIME types or extensions. Default: "image/*" */
    accept?: string;
    /** Maximum file size in bytes. Default: 25MB */
    maxSize?: number;
    /** Empty-state primary label. */
    label?: string;
    /** Empty-state secondary description. */
    description?: string;
    /** Empty-state hint line. Pass `null` to hide it. Default: derived from `maxSize`. */
    hint?: React.ReactNode | null;
    /** Field label rendered above the component (via FieldWrapper). */
    fieldLabel?: string;
    /** Disables interaction. */
    disabled?: boolean;
    /** Show loading state — disables interaction and renders a spinner overlay. */
    loading?: boolean;
    /** External error message. Internal validation errors take precedence when present. */
    error?: string;
    /** CSS aspect-ratio for the dropzone, e.g. "16 / 9", "1 / 1". When set, overrides the default fixed height. */
    aspectRatio?: string;
    /** object-fit for the preview image. Default: "cover" */
    objectFit?: "cover" | "contain" | "fill" | "none" | "scale-down";
    /** Alt text for the preview image. */
    alt?: string;
    /** Extra className on the FieldWrapper root. */
    className?: string;
}
export declare function ImageUploader({ value, onChange, onRemove, accept, maxSize, label, description, hint, fieldLabel, disabled, loading, error, aspectRatio, objectFit, alt, className, }: ImageUploaderProps): React.JSX.Element;
//# sourceMappingURL=image-uploader.d.ts.map