234 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 🎨 État du Système de Théming - ObsiViewer
 | ||
| 
 | ||
| **Date** : 20 octobre 2025  
 | ||
| **Statut** : 🟢 Infrastructure complète - Refactoring en cours
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| ## ✅ Complété
 | ||
| 
 | ||
| ### 1. Architecture de base (100%)
 | ||
| 
 | ||
| - ✅ **themes.css** : 14 variantes (7 thèmes × 2 modes) avec tokens CSS complets
 | ||
|   - Light, Dark, Obsidian, Nord, Notion, GitHub, Discord, Monokai
 | ||
|   - Chaque thème a une version light ET dark
 | ||
|   - Tokens : backgrounds, text, borders, brand, status, UI, editor, shadows
 | ||
| 
 | ||
| - ✅ **tailwind.config.js** : Configuration complète
 | ||
|   - Mapping de tous les tokens CSS vers classes Tailwind
 | ||
|   - 40+ tokens mappés (bg, fg, surface1/2, primary, accent, etc.)
 | ||
|   - Support des variantes (hover, focus, dark)
 | ||
| 
 | ||
| - ✅ **ThemeService** : Service Angular fonctionnel
 | ||
|   - Gestion mode (system/light/dark) + thème
 | ||
|   - Persistance localStorage
 | ||
|   - Observable pour réactivité
 | ||
|   - Application sur `<html>` (classe `.dark` + `data-theme`)
 | ||
| 
 | ||
| - ✅ **codemirror-themes.ts** : 14 variantes CodeMirror 6
 | ||
|   - Fonction `cm6ThemeFor(themeId, mode)` complète
 | ||
|   - Chaque thème a sa palette de coloration syntaxique
 | ||
|   - Cohérence avec les tokens CSS
 | ||
| 
 | ||
| - ✅ **Anti-FOUC** : Script inline dans `index.html`
 | ||
|   - Lecture des préférences avant Angular
 | ||
|   - Application immédiate du thème
 | ||
|   - Pas de flash de contenu non stylé
 | ||
| 
 | ||
| ### 2. Refactoring automatisé (68%)
 | ||
| 
 | ||
| - ✅ **Script `refactor-colors.mjs`** créé
 | ||
| - ✅ **66 fichiers** mis à jour automatiquement
 | ||
| - ✅ **232 occurrences** de couleurs hardcodées remplacées
 | ||
|   - `bg-slate-*` → `bg-surface1/2`
 | ||
|   - `text-gray-*` → `text-main/muted`
 | ||
|   - `border-slate-*` → `border-border`
 | ||
|   - Variantes dark:, hover:, focus: gérées
 | ||
| 
 | ||
| ### 3. Documentation
 | ||
| 
 | ||
| - ✅ **THEMING_IMPLEMENTATION.md** : Documentation technique complète
 | ||
| - ✅ **THEMING_STATUS.md** : Ce fichier (état du projet)
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| ## 🔄 En cours
 | ||
| 
 | ||
| ### Refactoring manuel (109 occurrences restantes)
 | ||
| 
 | ||
| **Fichiers prioritaires** (14+ matches) :
 | ||
| 1. `app-sidebar-drawer.component.ts` (14 matches)
 | ||
| 2. `graph-options-panel.component.ts` (11 matches)
 | ||
| 3. `app-shell-nimbus.component.ts` (9 matches)
 | ||
| 
 | ||
| **Fichiers moyens** (4-8 matches) :
 | ||
| - `quick-links.component.ts` (8)
 | ||
| - `nimbus-sidebar.component.ts` (8)
 | ||
| - `markdown-playground.component.ts` (6)
 | ||
| - `add-bookmark-modal.component.html` (6)
 | ||
| - `search-query-assistant.component.ts` (5)
 | ||
| - `filters-section.component.ts` (4)
 | ||
| 
 | ||
| **Fichiers mineurs** (1-3 matches) :
 | ||
| - 23 fichiers avec 1-3 occurrences chacun
 | ||
| 
 | ||
| **Types de cas restants** :
 | ||
| - Styles conditionnels complexes
 | ||
| - Classes dynamiques avec logique métier
 | ||
| - Variantes rares (active:, disabled:, group-hover:)
 | ||
| - Couleurs dans des contextes spécifiques (graphes, visualisations)
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| ## ⏳ À faire
 | ||
| 
 | ||
| ### 1. Refactoring manuel (Priorité : Haute)
 | ||
| 
 | ||
| **Approche recommandée** :
 | ||
| 1. Traiter les 3 fichiers prioritaires (34 matches)
 | ||
| 2. Traiter les 7 fichiers moyens (47 matches)
 | ||
| 3. Traiter les 23 fichiers mineurs (28 matches)
 | ||
| 
 | ||
| **Commande pour identifier** :
 | ||
| ```bash
 | ||
| grep -rn "bg-slate-\|bg-gray-\|text-slate-\|text-gray-" src/ | wc -l
 | ||
| ```
 | ||
| 
 | ||
| ### 2. Tests de la matrice complète (Priorité : Haute)
 | ||
| 
 | ||
| **14 combinaisons à tester** :
 | ||
| 
 | ||
| | Thème     | Light | Dark |
 | ||
| |-----------|-------|------|
 | ||
| | Light     | ✅    | N/A  |
 | ||
| | Dark      | N/A   | ✅   |
 | ||
| | Obsidian  | ⏳    | ⏳   |
 | ||
| | Nord      | ⏳    | ⏳   |
 | ||
| | Notion    | ⏳    | ⏳   |
 | ||
| | GitHub    | ⏳    | ⏳   |
 | ||
| | Discord   | ⏳    | ⏳   |
 | ||
| | Monokai   | ⏳    | ⏳   |
 | ||
| 
 | ||
| **Checklist par combinaison** :
 | ||
| - [ ] Sidebar (fond, hover, actif, badges)
 | ||
| - [ ] Topbar + search (input, focus, placeholder)
 | ||
| - [ ] Liste notes (items, hover, selected)
 | ||
| - [ ] Page détail (titres, liens, code, tables)
 | ||
| - [ ] Mode édition (inputs, buttons, CodeMirror)
 | ||
| - [ ] Panneaux (TOC, propriétés, tags)
 | ||
| - [ ] Modales (fond, overlay, bordure)
 | ||
| - [ ] Menus contextuels
 | ||
| - [ ] Toasts
 | ||
| - [ ] Tables (headers, zebra, hover)
 | ||
| - [ ] Chips/Tags (fond, hover, selected)
 | ||
| - [ ] Scrollbars
 | ||
| - [ ] Page Parameters
 | ||
| - [ ] Mobile (bottom nav, drawers)
 | ||
| 
 | ||
| ### 3. Validation contrastes (Priorité : Moyenne)
 | ||
| 
 | ||
| **Outils** :
 | ||
| - [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/)
 | ||
| - Chrome DevTools (Lighthouse)
 | ||
| 
 | ||
| **Critères WCAG AA** :
 | ||
| - Texte normal : ratio ≥ 4.5:1
 | ||
| - Texte large : ratio ≥ 3:1
 | ||
| - Éléments UI : ratio ≥ 3:1
 | ||
| 
 | ||
| **À vérifier pour chaque thème** :
 | ||
| - [ ] Texte principal / fond
 | ||
| - [ ] Texte muted / fond
 | ||
| - [ ] Liens / fond
 | ||
| - [ ] Boutons / fond
 | ||
| - [ ] Bordures / fond
 | ||
| 
 | ||
| ### 4. Vérification finale (Priorité : Basse)
 | ||
| 
 | ||
| - [ ] Aucune couleur hardcodée restante (grep complet)
 | ||
| - [ ] Tous les composants utilisent les tokens
 | ||
| - [ ] Documentation à jour
 | ||
| - [ ] Screenshots comparatifs (avant/après)
 | ||
| - [ ] Guide utilisateur pour la page Parameters
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| ## 📊 Métriques
 | ||
| 
 | ||
| ### Progression globale
 | ||
| 
 | ||
| ```
 | ||
| Infrastructure :    ████████████████████ 100% (5/5)
 | ||
| Refactoring :       █████████████░░░░░░░  68% (232/341)
 | ||
| Tests :             ░░░░░░░░░░░░░░░░░░░░   0% (0/14)
 | ||
| Documentation :     ████████████████████ 100% (2/2)
 | ||
| ---
 | ||
| TOTAL :             ████████████░░░░░░░░  67%
 | ||
| ```
 | ||
| 
 | ||
| ### Détails refactoring
 | ||
| 
 | ||
| | Catégorie          | Avant | Après | Restant |
 | ||
| |--------------------|-------|-------|---------|
 | ||
| | Couleurs hardcodées| 341   | 109   | 109     |
 | ||
| | Fichiers touchés   | 0     | 66    | ~32     |
 | ||
| | Tokens créés       | 0     | 40+   | -       |
 | ||
| | Thèmes complets    | 2     | 14    | -       |
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| ## 🚀 Commandes rapides
 | ||
| 
 | ||
| ```bash
 | ||
| # Refactoring automatique (réexécuter si besoin)
 | ||
| node scripts/refactor-colors.mjs
 | ||
| 
 | ||
| # Rechercher couleurs hardcodées
 | ||
| grep -rn "bg-slate-\|bg-gray-\|text-slate-\|text-gray-" src/
 | ||
| 
 | ||
| # Lancer l'application
 | ||
| npm run dev
 | ||
| 
 | ||
| # Tests E2E
 | ||
| npm run test:e2e
 | ||
| 
 | ||
| # Build production
 | ||
| npm run build
 | ||
| ```
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| ## 🎯 Objectif final
 | ||
| 
 | ||
| **Application entièrement thémable** :
 | ||
| - ✅ 7 thèmes × 2 modes = 14 combinaisons
 | ||
| - ✅ Aucune couleur hardcodée
 | ||
| - ✅ Cohérence visuelle totale
 | ||
| - ✅ Accessibilité WCAG AA
 | ||
| - ✅ Performance optimale (CSS variables)
 | ||
| - ✅ Expérience utilisateur fluide (anti-FOUC)
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| ## 📝 Notes
 | ||
| 
 | ||
| ### Points d'attention
 | ||
| 
 | ||
| 1. **CodeMirror 6** : Les thèmes sont appliqués dynamiquement via `ThemeService.getCodeMirrorExtensions()`
 | ||
| 2. **Persistance** : Clé localStorage `obsiviewer.preferences.v1`
 | ||
| 3. **Réactivité** : Tous les composants doivent s'abonner à `ThemeService.onPrefs$` si nécessaire
 | ||
| 4. **Mobile** : Vérifier les overlays et bottom sheets dans chaque thème
 | ||
| 5. **Graphes** : Les visualisations D3/Canvas peuvent nécessiter un traitement spécial
 | ||
| 
 | ||
| ### Améliorations futures
 | ||
| 
 | ||
| - [ ] Thème personnalisé (éditeur de couleurs)
 | ||
| - [ ] Import/export de thèmes
 | ||
| - [ ] Prévisualisation live dans Parameters
 | ||
| - [ ] Thèmes communautaires
 | ||
| - [ ] Mode haute contraste dédié
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| **Dernière mise à jour** : 20 octobre 2025, 17:05 UTC-04:00
 |