6.8 KiB
6.8 KiB
🎨 É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
- Fonction
-
✅ 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.mjscréé - ✅ 66 fichiers mis à jour automatiquement
- ✅ 232 occurrences de couleurs hardcodées remplacées
bg-slate-*→bg-surface1/2text-gray-*→text-main/mutedborder-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) :
app-sidebar-drawer.component.ts(14 matches)graph-options-panel.component.ts(11 matches)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 :
- Traiter les 3 fichiers prioritaires (34 matches)
- Traiter les 7 fichiers moyens (47 matches)
- Traiter les 23 fichiers mineurs (28 matches)
Commande pour identifier :
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
- 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
# 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
- CodeMirror 6 : Les thèmes sont appliqués dynamiquement via
ThemeService.getCodeMirrorExtensions() - Persistance : Clé localStorage
obsiviewer.preferences.v1 - Réactivité : Tous les composants doivent s'abonner à
ThemeService.onPrefs$si nécessaire - Mobile : Vérifier les overlays et bottom sheets dans chaque thème
- 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