import type { TranslateFn } from "../../i18n";
/**
 * Single source of truth for photo upload UX across the SDK. Handles:
 *   • drag / drop (with proper enter+over+leave+drop handlers — drop fails
 *     silently in Chromium without preventDefault on every event)
 *   • click-to-open file picker
 *   • optional Gemini age-check (when apiUrl + apiKey are supplied)
 *   • size + type validation
 *   • internal preview, processing spinner, rejection card
 *
 * Used by PhotoGuideView, SizeResultView's photo-guide overlay, and any
 * other place a customer is asked for a photo. Replaces the duplicated
 * handlePhotoSelect blocks in BodyProfileView / CreateProfileWizard /
 * AccessorySizeView (incrementally — those still have their own state).
 */
export type PhotoUploadZoneVariant = "block" | "inline";
export declare function PhotoUploadZone({ apiUrl, apiKey, previewUrl, requireAgeConfirm, ageConfirmed, disabled, hintLine, emptyTitle, variant, onPhotoAccepted, onClearPhoto, t, }: {
    /** When provided with apiKey, runs Gemini age-check before accepting. */
    apiUrl?: string;
    apiKey?: string;
    /** External preview URL (e.g. parent already has a previewUrl from an
     *  earlier flow). Pass null to render the empty drop state. */
    previewUrl?: string | null;
    /** When true, the zone refuses uploads until ageConfirmed is true. */
    requireAgeConfirm?: boolean;
    ageConfirmed?: boolean;
    /** Disables click + drop (e.g. while parent is processing). */
    disabled?: boolean;
    /** Optional copy under the empty-state title. */
    hintLine?: string;
    /** Custom empty-state title. Defaults to "Upload your photo". */
    emptyTitle?: string;
    /** "block" (default) — full upload card with title/hint/icon.
     *  "inline" — just the drop area sized to its parent (preview-only). */
    variant?: PhotoUploadZoneVariant;
    /** Called with the validated File once it passes age-check + size/type
     *  validation. Parent is responsible for compressing or sending it. */
    onPhotoAccepted: (file: File) => void;
    /** Called when the user removes the current photo (via the X on preview). */
    onClearPhoto?: () => void;
    t: TranslateFn;
}): import("react/jsx-runtime").JSX.Element;
