Aller au contenu

Composant · Formulaire

FileUploader

Stable

Zone de dépôt et liste de fichiers avec statuts idle/uploading/complete/error, propulsée par les icônes Lucide `Upload`, `File`, `LoaderCircle`, `CircleCheck`, `CircleAlert` et `X`.

Exemples

Zone de dépôt vide

PDF, DOCX, PNG jusqu’à 5 MB.
Voir le code (Svelte)
<FileUploader
  label="Pièces jointes"
  helperText="PDF, DOCX, PNG jusqu’à 5 MB."
  multiple
  triggerLabel="Choisir des fichiers"
  dropzoneLabel="ou glissez-déposez vos fichiers ici"
/>

La sélection de fichiers (clic, glisser-déposer) est interactive sur la page réelle ; la démo est figée à vide.

Liste de fichiers avec statuts

Suivi statique des statuts idle, uploading, complete et error.
  • brief.pdf 5 B
  • rapport-q1.docx 3 B
  • logo.svg 2 B
  • video.mov 4 B Format non supporté
Voir le code (Svelte)
<FileUploader
  label="Documents en cours"
  helperText="Suivi statique des statuts idle, uploading, complete et error."
  multiple
  triggerLabel="Ajouter des fichiers"
  dropzoneLabel="ou glissez-déposez ici"
  items={[{"file":{},"status":"idle"},{"file":{},"status":"uploading","progress":0.42},{"file":{},"status":"complete"},{"file":{},"status":"error","error":"Format non supporté"}]}
/>

Statuts visibles : idle, uploading, complete, error

Mode fichier unique

Un seul fichier image, max 1 MB.
Voir le code (Svelte)
<FileUploader
  label="Avatar"
  helperText="Un seul fichier image, max 1 MB."
  accept="image/*"
  maxSizeBytes={1048576}
  triggerLabel="Choisir un fichier"
  dropzoneLabel="ou glissez-déposez une image"
/>

Mode fichier unique : `multiple` est faux et toute nouvelle sélection remplace la précédente.

État désactivé

Le composant reste rendu mais n’accepte plus d’entrée.
Voir le code (Svelte)
<FileUploader
  label="Lecture seule"
  helperText="Le composant reste rendu mais n’accepte plus d’entrée."
  disabled
  triggerLabel="Choisir un fichier"
  dropzoneLabel="Champ verrouillé"
/>

`disabled` propage l’état au bouton, au champ caché et désactive le drag-and-drop.

API

PropTypeDefault
labelstringoptionnel
helperTextstringoptionnel
errorTextstringoptionnel
invalidbooleanfalse
acceptstringoptionnel
multiplebooleanfalse
maxSizeBytesnumberoptionnel
disabledbooleanfalse
filesFile[] ($bindable)[]
itemsFileUploadItem[]optionnel
onfiles(files: File[]) => voidoptionnel
triggerLabelstring"Choose file" / "Choose files"
dropzoneLabelstring"Drag and drop files here"
removeLabel(filename: string) => string`Remove ${filename}`
maxSizeErrorLabel(filename: string, maxSizeBytes: number) => stringformat par défaut
idstringauto-généré
classstringoptionnel

Le composant rend un <div class="st-field st-fileUploader-field"> contenant une zone dropzone avec un bouton, un libellé, un champ <input type="file"> visuellement masqué et une icône Lucide Upload (size=18, strokeWidth=2). Quand items est fourni, le composant affiche la liste contrôlée avec une icône par statut : File pour idle, LoaderCircle animé pour uploading (prefers-reduced-motion respecté), CircleCheck pour complete et CircleAlert pour error. Sinon le composant rend la liste interne issue de la liaison files, avec File pour chaque entrée et CircleAlert lorsqu’un fichier dépasse maxSizeBytes. Le bouton de retrait par fichier utilise l’icône Lucide X (size=16) et alimente son aria-label via removeLabel. Les autres attributs HTML <div> sont transmis via spread.

Tokens utilisés

  • --st-component-control-hoverBorder
  • --st-component-control-hoverBackground