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;