Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# Migration vers Material-UI (MUI)
## Changements Effectués
### 1. Installation des Dépendances
```bash
npm install @mui/material @mui/icons-material @emotion/react @emotion/styled
```
Packages installés:
- `@mui/material` - Composants Material-UI
- `@mui/icons-material` - Icônes Material Design
- `@emotion/react` - Styling engine requis
- `@emotion/styled` - Styled components
### 2. Configuration du Thème
**Fichier**: `apps/web/src/theme.ts`
Thème personnalisé créé avec:
- Palette de couleurs (primary: bleu, secondary: violet)
- Typography (Roboto font family)
- Components overrides (buttons, cards, paper)
- Border radius: 8px
### 3. Point d'Entrée Principal
**Fichier**: `apps/web/src/main.tsx`
Ajout du ThemeProvider et CssBaseline:
```typescript
import { ThemeProvider } from '@mui/material/styles'
import CssBaseline from '@mui/material/CssBaseline'
import { theme } from './theme'
<ThemeProvider theme={theme}>
<CssBaseline />
<App />
</ThemeProvider>
```
### 4. Dashboard Refactorisé
**Fichier**: `apps/web/src/components/Dashboard.tsx`
Remplacement complet avec MUI:
- **AppBar** + **Toolbar** au lieu du header Tailwind
- **Container** pour le layout responsive
- **Paper** pour les cartes (remplace les divs avec shadow)
- **Typography** pour tout le texte
- **Alert** pour les notifications d'erreur
- **Stack** pour l'espacement vertical
- **Box** avec flexbox pour le layout
Composants MUI utilisés:
- `AppBar` - Barre de navigation en haut
- `Toolbar` - Contenu de l'AppBar
- `Container` - Conteneur responsive (maxWidth="xl")
- `Paper` - Cartes avec elevation (ombres)
- `Typography` - Tous les textes (variant: h6, caption, body2)
- `Alert` - Notifications d'erreur
- `IconButton` - Boutons avec icônes
- `Divider` - Séparateurs horizontaux
- `Stack` - Layout vertical avec spacing
- `Box` - Conteneur flex personnalisé
Icons utilisés:
- `ScienceIcon` - Icône science dans l'AppBar
- `CloseIcon` - Fermer les alertes
## État Actuel
### ✅ Migré vers MUI:
1. Dashboard (layout principal)
2. Thème configuré
3. Point d'entrée avec ThemeProvider
### ⏳ Encore en Tailwind CSS:
Les composants suivants utilisent encore Tailwind et doivent être convertis:
1. **ScenarioSelector** (`apps/web/src/components/simulation/ScenarioSelector.tsx`)
- À convertir: `<select>` → MUI `<Select>` + `<MenuItem>`
- Classes Tailwind → sx props
2. **ParameterPanel** (`apps/web/src/components/simulation/ParameterPanel.tsx`)
- À convertir: `<input>` → MUI `<TextField>`
- Boutons → MUI `<Button>`
3. **SimulationControl** (`apps/web/src/components/simulation/SimulationControl.tsx`)
- À convertir: boutons → MUI `<Button>` avec variant et color
- Status indicator → MUI `<Chip>` ou `<CircularProgress>`
4. **ResultsDisplay** (`apps/web/src/components/results/ResultsDisplay.tsx`)
- À convertir: tabs → MUI `<Tabs>` + `<Tab>`
- Alert stability → MUI `<Alert>` avec severity
5. **MetricsCard** (`apps/web/src/components/results/MetricsCard.tsx`)
- À convertir: divs → MUI `<Card>` + `<CardContent>`
6. **ComparisonTable** (`apps/web/src/components/results/ComparisonTable.tsx`)
- À convertir: `<table>` → MUI `<Table>` + composants associés
7. **ExportButton** (`apps/web/src/components/results/ExportButton.tsx`)
- À convertir: boutons → MUI `<Button>` avec startIcon
## Avantages de MUI
### Design Professionnel
- ✅ Cohérence visuelle Material Design
- ✅ Composants accessibles (ARIA)
- ✅ Animations et transitions fluides
- ✅ Thème personnalisable
- ✅ Dark mode support (facilement activable)
### Composants Riches
- ✅ Plus de 50+ composants prêts à l'emploi
- ✅ Formulaires validés
- ✅ Tables avancées avec tri/filtre
- ✅ Dialogs, Snackbars, Tooltips
- ✅ Responsive par défaut
### Maintenance
- ✅ Documentation excellente
- ✅ Large communauté
- ✅ Updates régulières
- ✅ TypeScript first-class support
## Guide de Conversion Rapide
### Tailwind → MUI Mapping
| Tailwind Class | MUI Equivalent |
|---------------|---------------|
| `bg-white` | `<Paper>` ou `sx={{ bgcolor: 'background.paper' }}` |
| `shadow` | `<Paper elevation={3}>` |
| `rounded` | `sx={{ borderRadius: 1 }}` (ou theme.shape.borderRadius) |
| `p-4` | `sx={{ p: 3 }}` (1 unit = 8px) |
| `mb-4` | `sx={{ mb: 3 }}` |
| `text-gray-900` | `color="text.primary"` ou `variant="h6"` |
| `text-sm` | `variant="body2"` |
| `font-semibold` | `fontWeight={600}` ou `variant="h6"` |
| `flex items-center` | `sx={{ display: 'flex', alignItems: 'center' }}` |
| `gap-4` | `<Stack spacing={3}>` |
### Composants Communs
**Bouton:**
```tsx
// Tailwind
<button className="bg-blue-600 text-white px-4 py-2 rounded">Text</button>
// MUI
<Button variant="contained" color="primary">Text</Button>
```
**Champ de texte:**
```tsx
// Tailwind
<input type="number" className="border rounded px-3 py-2" />
// MUI
<TextField type="number" variant="outlined" fullWidth />
```
**Sélecteur:**
```tsx
// Tailwind
<select className="border rounded px-3 py-2">...</select>
// MUI
<Select variant="outlined" fullWidth>
<MenuItem value="1">Option 1</MenuItem>
</Select>
```
## Prochaines Étapes
Pour compléter la migration:
1. Convertir les composants de simulation (ScenarioSelector, ParameterPanel, SimulationControl)
2. Convertir les composants de résultats (ResultsDisplay, MetricsCard, ComparisonTable)
3. Convertir ExportButton
4. Supprimer Tailwind CSS:
- Désinstaller: `npm uninstall tailwindcss postcss autoprefixer`
- Supprimer `tailwind.config.js`
- Supprimer `postcss.config.js`
- Supprimer `src/index.css` (ou garder seulement reset CSS minimal)
## Build Status
✅ **Build réussi** avec MUI
- Bundle size: 600KB (gzip: 198KB)
- TypeScript: OK
- Vite: OK
## Notes
- Le Dashboard est maintenant 100% MUI
- L'application fonctionne et s'affiche correctement
- Les autres composants continuent à fonctionner avec Tailwind (rétrocompatibilité)
- Migration progressive possible (pas besoin de tout convertir en une fois)