FileUpload
ImplementedDrag-and-drop file field — dashed drop zone with click AND keyboard paths (Enter/Space), controlled (value) or uncontrolled file list showing name + size + Remove, and accept/maxSize/maxFiles client-side validation surfaced via onError. The organism owns zero network calls — onChange hands the raw File[] to the caller. Built-in zone copy is EN/FR via locale (default en). Dormant organism (no consumer yet).
components/organisms/FileUpload/FileUpload.tsxChamp fichier glisser-déposer — zone pointillée avec chemins clic ET clavier (Entrée/Espace), liste contrôlée (value) ou non contrôlée affichant nom + taille + Retirer, validation accept/maxSize/maxFiles via onError. FR-CA : « Dépôt de fichiers · Glisser-déposer · Parcourir · Retirer ».
FileUpload
Organism — Forms family (Family 3)
Zone de dépôt role=button (Entrée/Espace ouvre le sélecteur; l'input natif reste sr-only), liste de fichiers nom + taille + bouton Retirer 44px, validation côté client remontée en chaînes via onError. Aucun appel réseau — onChange remet le File[] brut à l'appelant.
Drag & drop a file here, or click to browse
Accepted: image/png,image/jpeg,image/webp · Max 5.0 MB
PNG, JPG or WebP — max 5 MB.
This component supports light and dark mode.
Props
onChange*(files: File[]) => voidAppelé à l'ajout, au dépôt et au retrait de fichiers.
label*stringLibellé visible; nom accessible de la zone via aria-labelledby.
valueFile[]Liste contrôlée. Omettre pour un usage non contrôlé.
acceptstringMotif MIME accepté (virgules; type/* et .ext supportés).
multiplebooleanFichiers multiples (défaut false — le mono-fichier remplace la liste).
maxSizenumberTaille max par fichier (octets).
maxFilesnumberNombre max de fichiers.
disabledbooleanDésactive le contrôle (défaut false).
hintstringTexte d'aide sous le contrôle.
errorstringMessage d'erreur rendu avec role=alert (remplace l'aide).
onError(error: string) => voidCallback des erreurs de validation côté client.
locale"fr" | "en"Bascule la copie intégrée de la zone et les messages (défaut en).
classNamestringClasses additionnelles sur le wrapper racine.
idstringSurcharge le field id généré (câblage label/described-by).
Props
FileUpload
onChange(files: File[]) => void—Fired when the user picks, drops or removes files (also the uncontrolled mutation path).
labelstring—Visible field label; also the drop zone's accessible name via aria-labelledby.
valueFile[]—Controlled file list. Omit for uncontrolled usage.
acceptstring—MIME accept pattern (comma-separated; supports type/* globs and .ext suffixes).
multiplebooleanfalseAllow multiple files (single-file mode replaces the list).
maxSizenumber—Per-file size cap in bytes.
maxFilesnumber—Maximum number of files.
disabledbooleanfalseDisable the control.
hintstring—Help text below the control.
errorstring—Error message rendered with role="alert" (replaces the hint line).
onError(error: string) => void—Client-side validation error callback.
locale"fr" | "en"'en'Switches the built-in zone copy and validation messages (drop prompts, accepted summary, size/count hints, Remove, onError strings).
classNamestring—Additional CSS classes appended to the root wrapper div.
idstring—Overrides the generated field id (label/described-by wiring).
<FileUpload />Accessibility
Type
1 ruleARIA
1 ruleUsage
Import
import { FileUpload } from "@epasslive/design-system"Example 1
<FileUpload label="Event cover image" accept="image/png,image/jpeg,image/webp" maxSize={5242880} value={files} onChange={setFiles} onError={setUploadError} />Example 2
<FileUpload label="Press kit assets" multiple maxFiles={4} maxSize={2097152} hint="PDF, PNG or MP4 — up to 4 files." onChange={setFiles} />Anti-patterns
— Do not fetch or upload directly in the organism — onChange hands the File[] to the caller
— Do not pass onUpload/helperText — legacy Ventixe API that was never implemented here
— Do not expect preview thumbnails or per-file progress — the list shows name + size + Remove only