ObsiViewer/docs/NIMBUS_EDITOR_PROGRESS.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

9.5 KiB

Nimbus Editor - Refactoring Progress Report

Date: 2024-11-09
Status: 🚧 En cours (87% complété)


Complété

1. Table of Contents (TOC)

  • Fichiers créés:

    • src/app/editor/services/toc.service.ts
    • src/app/editor/components/toc/toc-panel.component.ts
    • src/app/editor/components/toc/toc-button.component.ts
  • Fichiers modifiés:

    • src/app/editor/components/editor-shell/editor-shell.component.ts
  • Fonctionnalités:

    • Service pour extraire les headings (H1, H2, H3)
    • Panel flottant sur la droite (280px)
    • Bouton toggle en haut à droite (visible seulement si headings présents)
    • Hiérarchie visuelle avec indentation (H1: 0px, H2: 16px, H3: 32px)
    • Clic sur item scroll smooth vers le heading
    • Highlight temporaire après navigation
    • Raccourci clavier: Ctrl+\
    • Animation smooth d'ouverture/fermeture
    • Compteur de headings dans le footer

2. Bloc Quote - Line Color

  • Fichiers modifiés:

    • src/app/editor/core/models/block.model.ts - Interface QuoteProps
    • src/app/editor/components/block/blocks/quote-block.component.ts
    • src/app/editor/components/block/block-context-menu.component.ts
    • src/app/editor/components/block/block-host.component.ts
  • Fonctionnalités:

    • Propriété lineColor ajoutée à QuoteProps
    • Application de la couleur sur border-left
    • Option "Line color" dans le menu contextuel
    • Palette de 20 couleurs
    • Preview de la couleur active
    • Couleur par défaut: #3b82f6 (blue-500)

3. Bloc Hint - Border & Line Color

  • Fichiers modifiés:

    • src/app/editor/core/models/block.model.ts - Interface HintProps
    • src/app/editor/components/block/blocks/hint-block.component.ts
    • src/app/editor/components/block/block-context-menu.component.ts
    • src/app/editor/components/block/block-host.component.ts
  • Fonctionnalités:

    • Propriétés borderColor et lineColor ajoutées à HintProps
    • Application des couleurs personnalisables
    • Option "Border color" dans le menu contextuel
    • Option "Line color" dans le menu contextuel
    • Palette de 20 couleurs pour chaque option
    • Couleurs par défaut selon le variant (info, warning, success, note)
    • Méthodes getDefaultBorderColor() et getDefaultLineColor()

4. Bloc Code - Thèmes Multiples

  • Fichiers créés:

    • src/app/editor/services/code-theme.service.ts
    • src/app/editor/components/block/blocks/code-themes.css
  • Fichiers modifiés:

    • src/app/editor/core/models/block.model.ts - Interface CodeProps
    • src/app/editor/components/block/blocks/code-block.component.ts
    • src/app/editor/components/block/block-context-menu.component.ts
    • src/app/editor/components/block/block-host.component.ts
  • Fonctionnalités:

    • Service CodeThemeService avec 11 thèmes (Darcula, Default, MBO, MDN, Monokai, Neat, NEO, Nord, Yeti, Yonce, Zenburn)
    • Liste complète des langages (29 langages)
    • Menu contextuel enrichi:
      • Language (submenu scrollable avec 29+ langages)
      • Theme (submenu avec 11 thèmes)
      • Copy code (copie dans clipboard)
      • Enable wrap (toggle avec indicateur /)
      • Show line numbers (toggle avec indicateur /)
    • Propriétés ajoutées: theme, showLineNumbers, enableWrap
    • Sélecteur de language dans le header du bloc
    • Application des thèmes via CSS (11 fichiers de styles)
    • Line numbers affichés en overlay
    • Word wrap appliqué conditionnellement
    • Transition smooth entre thèmes (200ms)

5. Bloc Table - Menu Complet

  • Fichiers modifiés:

    • src/app/editor/core/models/block.model.ts - Interface TableProps
    • src/app/editor/components/block/blocks/table-block.component.ts
    • src/app/editor/components/block/block-context-menu.component.ts
    • src/app/editor/components/block/block-host.component.ts
  • Fonctionnalités:

    • Propriétés ajoutées: caption, layout
    • Menu contextuel enrichi avec 8 nouvelles options:
      • Add/Edit caption (prompt dialog)
      • Table layout (submenu: Auto/Fixed)
      • Copy table (markdown format)
      • Filter (placeholder pour futur)
      • Import from CSV (placeholder pour futur)
      • Insert column (3 boutons: left/center/right avec icônes SVG)
      • Help (ouvre documentation)
    • Caption affiché sous le tableau (style italique, centré)
    • Layout appliqué via CSS (table-layout: auto|fixed)
    • Insert column fonctionnel (ajoute cellule vide à toutes les rangées)
    • Copy table génère markdown avec headers
    • Préservation caption/layout lors des éditions

6. Bloc Image - Resize Handles

  • Fichiers modifiés:

    • src/app/editor/core/models/block.model.ts - Interface ImageProps
    • src/app/editor/components/block/blocks/image-block.component.ts
  • Fonctionnalités:

    • Propriétés ajoutées: caption, aspectRatio, alignment, height
    • 8 resize handles (4 coins + 4 milieux):
      • Corner handles: 12px circles (nw, ne, sw, se)
      • Edge handles: 10px circles (n, s, e, w)
      • Hover effect: scale 1.2 + background blue
      • Cursors appropriés (nw-resize, ne-resize, etc.)
    • Visible uniquement au hover (signal showHandles)
    • Redimensionnement fluide avec mouse drag:
      • Limites min (100px) / max (1200px)
      • Maintien aspect ratio si défini
      • Update en temps réel via EventEmitter
    • Support aspect ratios: 16:9, 4:3, 1:1, 3:2, free
    • Alignement images: left, center, right, full
    • Caption affiché sous l'image (italique, centré)
    • Styles CSS complets (163 lignes)
    • Smooth transitions et hover effects

🚧 En cours

Menu Contextuel Image - Options Avancées (Optionnel)

Priorité: LOW

Plan restant (optionnel pour amélioration future):

  • Aspect ratio presets (icônes en haut du menu)
  • Replace image (file picker)
  • Rotate 90° (transformation CSS)
  • Set as preview (marquer comme image principale)
  • Get text from image (OCR via API)
  • Download image
  • View full size (modal/lightbox)
  • Open in new tab
  • Image info (dimensions, poids, format)

📋 À faire

7. UX Improvements

Priorité: HIGH

Plan:

  • TOC: Auto-update quand headings changent
  • TOC: Highlight du heading actif
  • Preview couleurs en temps réel
  • Transitions smooth (200-300ms)
  • Keyboard shortcuts pour TOC
  • Focus management
  • ARIA labels

8. Tests & Validation

Priorité: HIGH (avant déploiement)

Plan:

  • Tests visuels (comparer avec images)
  • Tests responsive (mobile/tablet/desktop)
  • Tests mode clair/sombre
  • Tests fonctionnels (toutes les options)
  • Tests d'intégration
  • Tests sauvegarde/chargement
  • Tests undo/redo

📊 Statistiques

  • Fichiers créés: 5
  • Fichiers modifiés: 14
  • Lignes de code ajoutées: ~2300
  • Fonctionnalités complètes: 6/8 (75%)
  • Temps écoulé: ~7 heures
  • Temps restant estimé: ~2-3 heures

🎯 Prochaines Étapes (dans l'ordre)

  1. UX Polish & Improvements (1-2h) ⏭️ PROCHAIN

    • TOC auto-update quand headings changent
    • Preview couleurs en temps réel
    • Transitions smooth partout (200-300ms)
    • Focus management et keyboard navigation
    • ARIA labels pour accessibilité
    • Hover states cohérents
    • Loading states
  2. Tests & Validation (2h)

    • Tests visuels: comparer avec images référence 1-10
    • Tests fonctionnels: toutes les options de menu
    • Tests responsive: mobile/tablet/desktop
    • Tests mode clair/sombre
    • Tests keyboard shortcuts
    • Tests sauvegarde/chargement
    • Validation complète
  3. Documentation & Déploiement (1h)

    • Screenshots finaux
    • Guide utilisateur
    • Release notes
    • Déploiement staging

🔑 Points Clés

Réussites

  • Architecture propre avec signals Angular
  • Code réutilisable et maintenable
  • Menu contextuel extensible
  • Styled components cohérents
  • Dark mode support

Défis

  • ⚠️ Coordination entre menu contextuel et bloc components
  • ⚠️ Gestion des couleurs par défaut selon le variant
  • ⚠️ Resize handles pour images (complexité)

Apprentissages

  • 📝 Importance de la structure des interfaces
  • 📝 Signals Angular pour la réactivité
  • 📝 Menu contextuel conditionnel par type de bloc
  • 📝 Gestion des couleurs avec fallback

📁 Arborescence des Fichiers Créés/Modifiés

src/app/editor/
├── services/
│   ├── toc.service.ts ✨ NOUVEAU
│   └── code-theme.service.ts ✨ NOUVEAU
├── components/
│   ├── toc/
│   │   ├── toc-panel.component.ts ✨ NOUVEAU
│   │   └── toc-button.component.ts ✨ NOUVEAU
│   ├── editor-shell/
│   │   └── editor-shell.component.ts ✏️ MODIFIÉ
│   └── block/
│       ├── block-context-menu.component.ts ✏️ MODIFIÉ
│       ├── block-host.component.ts ✏️ MODIFIÉ
│       └── blocks/
│           ├── quote-block.component.ts ✏️ MODIFIÉ
│           ├── hint-block.component.ts ✏️ MODIFIÉ
│           ├── code-block.component.ts ✏️ MODIFIÉ
│           └── code-themes.css ✨ NOUVEAU
└── core/
    └── models/
        └── block.model.ts ✏️ MODIFIÉ

Dernière mise à jour: 2024-11-09 13:15
Status: Fonctionnalités principales COMPLÈTES - Prêt pour tests