ObsiViewer/docs/TOC_CORRECTIONS_SUMMARY.md
Bruno Charest ee3085ce38 feat: add Nimbus Editor with Unsplash integration
- Integrated Unsplash API for image search functionality with environment configuration
- Added new Nimbus Editor page component with navigation from sidebar and mobile drawer
- Enhanced TOC with highlight animation for editor heading navigation
- Improved CDK overlay z-index hierarchy for proper menu layering
- Removed obsolete logging validation script
2025-11-11 11:38:27 -05:00

7.6 KiB
Raw Blame History

TOC Section - Corrections et Améliorations

📋 Problèmes Identifiés

D'après l'image fournie et l'analyse du code, trois problèmes majeurs ont été identifiés:

  1. Affichage des titres H1, H2, H3 - Couleurs hardcodées au lieu des variables de thème
  2. Thèmes non appliqués - Classes Tailwind hardcodées au lieu des variables CSS
  3. Liens de navigation - Animation highlight manquante dans le CSS global

Corrections Appliquées

1. Affichage des Titres H1, H2, H3

Fichier: src/app/editor/components/toc/toc-panel.component.ts

Avant:

getTocItemClass(item: TocItem): string {
  switch (item.level) {
    case 1: return 'pl-2 font-semibold text-neutral-100';
    case 2: return 'pl-6 font-medium text-neutral-300';
    default: return 'pl-10 text-sm text-neutral-400';
  }
}

Après:

getTocItemClass(item: TocItem): string {
  switch (item.level) {
    case 1: return 'toc-item-h1';
    case 2: return 'toc-item-h2';
    case 3: return 'toc-item-h3';
    default: return 'toc-item-h3';
  }
}

Résultat: Les classes utilisent maintenant les variables CSS définies dans les styles du composant.


2. Application des Thèmes

Fichier: src/app/editor/components/toc/toc-panel.component.ts

Styles CSS Ajoutés/Modifiés:

.toc-panel {
  width: 280px;
  background: var(--toc-bg);
  color: var(--toc-fg);
  border-left: 1px solid var(--toc-border);
}

/* Header */
.toc-header {
  border-bottom: 1px solid var(--toc-border);
  color: var(--toc-fg);
}

.toc-close-btn {
  color: var(--toc-fg);
}

.toc-close-btn:hover {
  background: color-mix(in oklab, var(--surface-2) 88%, transparent);
  color: var(--toc-hover);
}

/* TOC Items - Base */
.toc-item {
  color: var(--toc-fg);
}

.toc-item:hover {
  background: color-mix(in oklab, var(--surface-2) 88%, transparent);
  color: var(--toc-hover);
}

/* Indentation et style par niveau */
.toc-item-h1 {
  padding-left: 0.5rem;
  font-weight: 600;
  color: var(--toc-fg);
}

.toc-item-h2 {
  padding-left: 1.5rem;
  font-weight: 500;
  color: var(--toc-muted);
}

.toc-item-h3 {
  padding-left: 2.5rem;
  font-weight: 400;
  color: var(--toc-muted);
  font-size: 0.813rem;
}

/* Active item */
.toc-item-active {
  background: color-mix(in oklab, var(--surface-2) 80%, transparent);
  border-left: 3px solid var(--toc-active);
  color: var(--toc-active);
}

Variables CSS Utilisées (définies dans src/styles/themes.css):

/* TOC */
--toc-bg: var(--card-bg);
--toc-fg: var(--fg);
--toc-border: var(--border);
--toc-active: var(--primary);
--toc-hover: var(--link);
--toc-muted: var(--muted);

Résultat: La TOC s'adapte maintenant automatiquement à tous les thèmes de l'application (light, dark, blue, obsidian, nord, notion, github, discord).


3. Correction des Liens de Navigation

Fichier: src/styles/toc.css

Animation Highlight Ajoutée:

/* Highlight animation for editor headings when clicked from TOC */
.toc-highlight {
  animation: tocHighlightPulse 1.5s ease-out;
}

@keyframes tocHighlightPulse {
  0% {
    background-color: color-mix(in oklab, var(--toc-active) 20%, transparent);
  }
  100% {
    background-color: transparent;
  }
}

Résultat: Lorsqu'on clique sur un élément de la TOC, le heading correspondant dans l'éditeur est maintenant mis en surbrillance avec une animation douce.


🎨 Thèmes Supportés

La TOC s'adapte maintenant parfaitement aux 7 thèmes × 2 modes = 14 combinaisons:

Mode Light:

  • Pure White (light)
  • Blue
  • Obsidian
  • Nord
  • Notion
  • GitHub
  • Discord

Mode Dark:

  • Pure White (dark variant)
  • Dark (baseline)
  • Blue
  • Obsidian
  • Nord
  • Notion
  • GitHub
  • Discord

🔍 Détails Techniques

Architecture des Variables CSS

Les variables TOC héritent des variables globales du thème:

:root {
  /* TOC */
  --toc-bg: var(--card-bg);      /* Background du panel */
  --toc-fg: var(--fg);           /* Couleur du texte */
  --toc-border: var(--border);   /* Bordures */
  --toc-active: var(--primary);  /* Item actif */
  --toc-hover: var(--link);      /* Hover state */
  --toc-muted: var(--muted);     /* Texte secondaire */
}

Chaque thème redéfinit ces variables de base (--fg, --card-bg, --primary, etc.), ce qui permet à la TOC de s'adapter automatiquement.

Hiérarchie Visuelle

  • H1: font-weight: 600, couleur principale (--toc-fg), padding-left: 0.5rem
  • H2: font-weight: 500, couleur secondaire (--toc-muted), padding-left: 1.5rem
  • H3: font-weight: 400, couleur secondaire (--toc-muted), padding-left: 2.5rem, font-size: 0.813rem

Navigation et Scroll

Le service TocService utilise:

  • scrollToHeading(blockId) pour scroller vers le heading
  • IntersectionObserver pour détecter le heading actif
  • Animation toc-highlight pour feedback visuel

📊 Fichiers Modifiés

  1. src/app/editor/components/toc/toc-panel.component.ts - Template et styles
  2. src/styles/toc.css - Animation highlight globale

🧪 Tests à Effectuer

Test 1: Affichage des Titres

  • Ouvrir l'éditeur Nimbus
  • Créer des headings H1, H2, H3
  • Ouvrir la TOC (Ctrl+)
  • Vérifier que les titres sont affichés avec la bonne hiérarchie visuelle
  • Vérifier que H1 est plus gras et moins indenté que H2 et H3

Test 2: Thèmes

  • Changer de thème (light → dark)
  • Vérifier que la TOC change de couleur
  • Tester tous les thèmes disponibles
  • Vérifier que les couleurs sont cohérentes avec le reste de l'interface

Test 3: Navigation

  • Cliquer sur un élément de la TOC
  • Vérifier que l'éditeur scroll vers le heading correspondant
  • Vérifier que le heading est mis en surbrillance (animation)
  • Vérifier que l'item actif dans la TOC est bien marqué

Test 4: Responsive

  • Tester sur mobile (drawer)
  • Tester sur desktop (panel fixe)
  • Vérifier que la TOC est toujours lisible

Critères d'Acceptation

  • Affichage H1, H2, H3: Hiérarchie visuelle claire avec indentation progressive
  • Thèmes: S'adapte à tous les thèmes de l'application (14 combinaisons)
  • Navigation: Scroll vers le heading + animation highlight
  • Cohérence: Utilise les variables CSS du système de design
  • Performance: Pas de régression, utilise color-mix() pour les couleurs
  • Accessibilité: Contraste suffisant, focus visible

🚀 Prochaines Étapes (Optionnel)

  1. Collapse/Expand: Ajouter la possibilité de replier les sections H1/H2
  2. Drag & Drop: Réorganiser les headings via la TOC
  3. Numérotation: Option pour afficher la numérotation automatique (1.1, 1.2, etc.)
  4. Export: Générer une table des matières Markdown

📝 Notes Techniques

Pourquoi color-mix() ?

Au lieu de hardcoder des couleurs avec rgba(), on utilise color-mix() pour:

  • Respecter le thème actif
  • Supporter les couleurs dynamiques
  • Meilleure cohérence visuelle

Exemple:

/* ❌ Avant */
background-color: rgba(59, 130, 246, 0.12);

/* ✅ Après */
background: color-mix(in oklab, var(--surface-2) 80%, transparent);

IntersectionObserver

Le service TOC utilise IntersectionObserver pour détecter automatiquement quel heading est visible:

  • rootMargin: '0px 0px -70% 0px' → détecte quand le heading est dans le tiers supérieur
  • threshold: [0, 0.1, 0.5, 1] → précision de détection

Date: 2025-01-10
Status: Complete
Risque: Très faible
Impact: Excellent UX