feat(auth): useAuth + ProtectedRoute + signUp dans auth-client (Sprint 1 étape 2)

This commit is contained in:
Hermann_Kitio 2026-04-18 02:09:46 +03:00
parent 107a37d197
commit 38777796aa
19 changed files with 2620 additions and 191 deletions

View file

@ -1,6 +1,6 @@
# ADR 006 — Stack frontend : versions 2026 (React 19, Vite 8, TypeScript 6, Tailwind 4, RR7)
**Statut :** Accepté
**Statut :** Accepté — mis à jour Sprint 0.5
**Date :** 2026-04-17
**Décideur :** Hermann
**Contexte :** Révélé par l'état des lieux Claude Code au démarrage du Sprint 0 frontend
@ -105,18 +105,110 @@ Garder React 19, Vite 8, TypeScript 6 mais downgrader Tailwind 4 → 3 pour "com
### Configuration Tailwind 4
Pas de `tailwind.config.ts`. La configuration se fait exclusivement dans `src/index.css` via les directives :
Pas de `tailwind.config.ts`. La configuration se fait exclusivement dans `src/index.css`.
#### Dark mode
Dark mode class-based (`.dark` sur `<html>`) — toggle manuel via ThemeProvider React (Sprint 0.5 étape 2). Configuré via :
```css
@import "tailwindcss";
@variant dark (&:where(.dark, .dark *));
```
Si cette syntaxe est rejetée par une future version de Tailwind 4, le fallback est `@custom-variant dark (...)`.
#### Tokens @theme (palette Direction H — validée Sprint 0.5)
```css
@import 'tailwindcss';
@variant dark (&:where(.dark, .dark *));
@theme {
--color-primary: #1B4FD8; /* Couleur brand Expria */
--font-sans: "Plus Jakarta Sans", system-ui, sans-serif;
/* Autres variables de thème */
/* Typographie */
--font-sans: "Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI",
system-ui, sans-serif;
/* Fonds — bg-canvas = page, bg-surface = cards */
--color-canvas: #EEF2F8;
--color-canvas-2: #E6EBF4;
--color-surface: #FFFFFF;
--color-surface-hover: #F8FAFD;
/* Hairlines */
--color-line: #DDE3ED;
--color-line-strong: #C7D0E0;
/* Encres */
--color-ink-1: #0F172A; /* titres */
--color-ink-2: #1E293B; /* corps */
--color-ink-3: #475569;
--color-ink-4: #64748B;
--color-ink-5: #94A3B8; /* désactivé, hints */
/* Brand */
--color-expria: #1B4FD8;
--color-expria-hover: #1741B8;
--color-expria-50: #EEF3FF;
--color-expria-100: #DCE6FF;
--color-expria-200: #B8CDFF;
--color-deep: #0B1F5C;
--color-deep-2: #142B6E;
/* Sémantiques */
--color-success: #0E9F6E; --color-success-bg: #E6F6F0;
--color-warning: #C77A00; --color-warning-bg: #FEF3E2;
--color-danger: #C53030; --color-danger-bg: #FDECEC;
/* Rayons */
--radius-sm: 6px; --radius-md: 10px;
--radius-lg: 14px; --radius-xl: 18px; --radius-full: 999px;
/* Ombres */
--shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.04);
--shadow-md: 0 4px 12px rgba(15, 23, 42, 0.06), 0 1px 3px rgba(15, 23, 42, 0.04);
--shadow-lg: 0 12px 28px rgba(15, 23, 42, 0.08), 0 2px 6px rgba(15, 23, 42, 0.04);
}
/* Dark mode overrides */
.dark {
--color-canvas: #0D1220; --color-canvas-2: #121A2D;
--color-surface: #182238; --color-surface-hover: #1E2A42;
--color-line: #27324B; --color-line-strong: #364363;
--color-ink-1: #F1F4FA; --color-ink-2: #DDE3EF;
--color-ink-3: #A8B2C7; --color-ink-4: #7A8499; --color-ink-5: #525C73;
--color-expria: #5B7FFF; --color-expria-hover: #6F8EFF;
--color-expria-50: rgba(91, 127, 255, 0.12);
--color-deep: #060B1A;
--color-success: #3DD68C; --color-success-bg: rgba(61, 214, 140, 0.12);
--color-warning: #F5B849; --color-warning-bg: rgba(245, 184, 73, 0.12);
--color-danger: #F06B6B; --color-danger-bg: rgba(240, 107, 107, 0.12);
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
--shadow-md: 0 4px 16px rgba(0, 0, 0, 0.4);
--shadow-lg: 0 12px 32px rgba(0, 0, 0, 0.5);
}
```
#### Classes Tailwind générées
Les tokens `@theme` créent des classes utilitaires directement utilisables :
| Token | Classes Tailwind |
|---|---|
| `--color-canvas` | `bg-canvas`, `text-canvas`, `border-canvas` |
| `--color-surface` | `bg-surface`, `text-surface`, `border-surface` |
| `--color-ink-1` | `text-ink-1`, `bg-ink-1` |
| `--color-expria` | `bg-expria`, `text-expria`, `border-expria` |
| `--color-success` | `text-success`, `bg-success` |
| `--radius-md` | `rounded-md` (override : 10px au lieu de 6px Tailwind) |
| `--shadow-sm` | `shadow-sm` (override valeurs Tailwind) |
**Convention critique** : `bg-surface` = cards / modals / panels. `bg-canvas` = fond de page. Ne jamais inverser.
#### Typographie
Plus Jakarta Sans chargée via Google Fonts dans `index.html` (preconnect + stylesheet, weights 400/500/600/700). Migration vers auto-hébergement (`@fontsource/plus-jakarta-sans`) après MVP si les performances réseau deviennent un enjeu.
### shadcn/ui avec Tailwind 4
La CLI shadcn/ui supporte Tailwind 4 depuis début 2025 :