veza/apps/web/docs/EMPTY_ERROR_PATTERNS.md
senke e82560c547 docs: add UI/UX audit reports and design system documentation
- AUDIT_UI_UX_VISUEL_COMPLET.md: comprehensive visual audit with
  structured analysis (shell, rhythm, typography, colors, components,
  motion) and Top 10 improvement roadmap
- UI_UX_AUDIT_DISCORD_SPOTIFY_QUALITY.md: detailed gap analysis vs
  Discord/Spotify with phased action plan
- A11Y_AUDIT.md: accessibility audit baseline
- EMPTY_ERROR_PATTERNS.md: unified empty/error state pattern guide
- codemod-typography-arbitrary.mjs: migration script for text-[10px]

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 22:49:40 +01:00

3.6 KiB
Raw Blame History

Patterns Empty et Error — Guide dusage

Ce document décrit quand et comment utiliser les composants détat vide et derreur pour une expérience homogène type Discord/Spotify.

Erreurs (Error)

Référence détaillée : ERROR_DISPLAY_STRATEGY.md et ERROR_DISPLAY_COMPONENT_API.md.

Règle courte

  • Erreur persistante (requête, chargement de page/liste)ErrorDisplay avec variante card ou inline et onRetry si pertinent.
  • Erreur après une action (mutation)ErrorDisplay en variante banner (dismissible) ou toast selon la gravité.
  • Feedback rapide (copier, toggle)toast.error().
  • Validation de formulaire → message inline au niveau du champ (ex. text-destructive).

Composant

  • ErrorDisplay (@/components/ui/ErrorDisplay) : props error, variant (card | inline | banner), severity, onRetry, context. Utiliser partout où lutilisateur doit voir lerreur et éventuellement réessayer.

Pages à aligner

Sassurer que les vues suivantes utilisent ErrorDisplay (et non uniquement un toast) pour les erreurs de chargement : Library, Playlists, Track detail, Playlist detail, Settings, Profile, Chat, Search, Notifications. Déjà en place dans beaucoup de pages (voir usages de ErrorDisplay dans le code).


États vides (Empty)

Structure recommandée (type Spotify/Discord)

  • Titre : court, explicite (ex. « Aucune piste », « Aucun résultat »).
  • Description : une phrase optionnelle pour guider (ex. « Ajoutez des pistes ou parcourez le marketplace »).
  • CTA : un bouton principal si une action est possible (ex. « Créer une playlist », « Explorer »).

Style : même espacement (padding généreux), même hiérarchie (titre en text-xl ou text-2xl, description en text-sm text-muted-foreground), couleurs sémantiques (primary pour le CTA).

Composants disponibles

Composant Usage typique Fichier
EmptyState Liste générique (titre, description, action optionnelle) @/components/ui/empty-state
KodoEmptyState Page ou bloc vide style Kodo (icône, titre, description, bouton) @/components/ui/KodoEmptyState
TrackListEmpty Liste de pistes vide (no-tracks, no-results, error) @/features/tracks/components/TrackListEmpty
PlaylistListEmpty Liste de playlists (no_playlists, no_search_results) @/features/playlists/components/playlist-list/PlaylistListEmpty
PlaylistTrackListEmpty Pistes dune playlist vide @/features/playlists/components/playlist-track-list/PlaylistTrackListEmpty
DataListEmpty Liste data générique (message) @/components/ui/data-list/DataListEmpty
ChatSidebarEmpty / états vides chat Chat sans conversations (voir features/chat)

Quand utiliser lequel

  • Page ou section entière vide (ex. Library vide, aucun résultat recherche) → KodoEmptyState ou EmptyState avec titre + description + CTA.
  • Liste de pistesTrackListEmpty (gère no-tracks, no-results, error avec retry).
  • Liste de playlistsPlaylistListEmpty avec la variante adaptée.
  • Pistes dune playlistPlaylistTrackListEmpty.
  • Liste générique (data)DataListEmpty ou EmptyState.

Pages à vérifier

Library, Playlists, Queue, Chat (sidebar), Search (résultats vides), Notifications : chaque liste ou vue vide doit utiliser un de ces composants et non un simple paragraphe ou div vide, pour garder la même structure (titre, description, CTA) et le même style.