ObsiViewer/INLINE_TOOLBAR_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

6.7 KiB
Raw Permalink Blame History

Mode édition inline - Implémentation complète

🎯 Objectif atteint

Conversion de la barre d'outils fixe en barre d'outils inline par bloc, conforme aux images de référence fournies.

📦 Fichiers créés

Nouveaux composants

  1. src/app/editor/components/block/block-inline-toolbar.component.ts
    • Toolbar inline avec drag handle ⋮⋮
    • 10 icônes rapides (AI, checkbox, lists, table, image, file, link, heading, more)
    • Gestion des états hover/focus
    • Tooltip sur drag handle

Documentation

  1. docs/NIMBUS_INLINE_EDITING_MODE.md

    • Documentation technique complète
    • Architecture des composants
    • Design tokens et styles
    • Guide d'intégration
    • Schémas de flux
  2. docs/MIGRATION_INLINE_TOOLBAR.md

    • Guide de migration étape par étape
    • Checklist pour migrer d'autres blocs
    • Comparaison avant/après
    • Points d'attention
  3. INLINE_TOOLBAR_SUMMARY.md (ce fichier)

    • Résumé exécutif

🔧 Fichiers modifiés

Composants mis à jour

  1. src/app/editor/components/editor-shell/editor-shell.component.ts

    • Suppression de la toolbar fixe
    • Simplification du template
  2. src/app/editor/components/block/blocks/paragraph-block.component.ts

    • Intégration BlockInlineToolbarComponent
    • Ajout signals isFocused et isHovered
    • Détection "/" pour ouvrir le menu
    • Gestion des actions toolbar
  3. src/app/editor/components/palette/block-menu.component.ts

    • Taille réduite: 420×500px (vs 680×600)
    • Position contextuelle près du curseur
    • Design compact avec spacing réduit
    • Fonction menuPosition() calculée dynamiquement

🎨 Design patterns appliqués

1. Toolbar inline

[⋮⋮] Start writing... [🤖] [☑] [1.] [•] [⊞] [🖼] [📎] [🔗] [H_M] [⬇]
└─┬─┘                  └──────────────────────────────────────────┬──┘
  │                                                                 │
Drag handle                                            Icônes rapides
(hover only)                                      (hover/focus only)

2. États visuels

État Drag handle Icônes Background
🔘 Défaut opacity: 0 opacity: 0 transparent
🖱️ Hover opacity: 100 opacity: 70 bg-neutral-800/30
✏️ Focus opacity: 100 opacity: 100 transparent

3. Menu contextuel

Position dynamique basée sur:
  - Bloc actif ([contenteditable]:focus)
  - Position: top = bloc.top + 30px
  - Position: left = bloc.left
  - Fallback: top: 100px, left: 50px

🚀 Fonctionnalités implémentées

Déclenchement du menu (3 façons)

  1. Caractère "/" → Frappe au début du bloc ou après espace
  2. Bouton "More" (⬇) → Clic sur dernière icône toolbar
  3. Drag handle (⋮⋮) → Clic pour menu contextuel (futur)

Icônes rapides

  • 🤖 Use AI
  • ☑️ Checkbox list
  • 1 Numbered list
  • • Bullet list
  • ⊞ Table
  • 🖼️ Image
  • 📎 File
  • 🔗 Link/New page
  • HM Heading 2
  • ⬇️ More items

Menu avec sections sticky

  • BASIC (Heading, Paragraph, Lists, Table, etc.)
  • ADVANCED (Code, Task list, Steps, Kanban, etc.)
  • MEDIA (Image, Audio, Video, Bookmark, Unsplash)
  • INTEGRATIONS (Embed: Link, iFrame, JS Code)
  • VIEW (2 columns, Database)
  • TEMPLATES (Marketing, Planning, Content)
  • HELPFUL LINKS (Feedback)

📊 Comparaison avant/après

Aspect Avant (Toolbar fixe) Après (Toolbar inline)
Position Fixe au dessus des blocs Inline dans chaque bloc
Visibilité Toujours visible Hover/Focus seulement
Déclenchement menu Bouton "+ Add block" ou "/" "/" ou icône "⬇" ou "⋮⋮"
Menu - Taille 680×600px 420×500px
Menu - Position Centré écran Contextuel (près curseur)
Drag handle Absent Présent (⋮⋮)
UX Séparée du contenu Intégrée au flux

🧪 Tests à effectuer

Fonctionnels

  • Hover sur bloc → toolbar apparaît
  • Focus sur bloc → toolbar reste visible
  • Clic sur icône → action correcte
  • "/" au début → menu s'ouvre
  • Menu se positionne près du curseur
  • Sections sticky fonctionnent au scroll
  • Recherche filtre correctement
  • Sélection item → bloc inséré

Visuels

  • Drag handle aligné à -32px gauche
  • Icônes espacées uniformément
  • Transitions fluides (opacity, background)
  • Menu rounded corners + shadow
  • Headers sticky avec blur effect

Responsive

  • Tablet: menu adapté à la largeur
  • Mobile: drag handle accessible
  • Touch: hover states fonctionnent

🔮 Améliorations futures

Phase 2 - Drag & Drop

  • Implémenter déplacement blocs via drag handle
  • Visual feedback pendant le drag
  • Drop zones entre blocs

Phase 3 - Menu bloc contextuel

  • Clic sur ⋮⋮ → menu d'options
  • Dupliquer, Supprimer, Transformer
  • Copier lien, Commentaires

Phase 4 - Formatage texte

  • Toolbar flottante sur sélection texte
  • Bold, Italic, Strikethrough, Code
  • Couleur texte, Couleur fond
  • Liens hypertexte

Phase 5 - Collaboration

  • Curseurs multiples
  • Édition temps réel
  • Commentaires inline

🎓 Pour les développeurs

Intégrer la toolbar dans un nouveau bloc

  1. Importer BlockInlineToolbarComponent
  2. Ajouter isFocused et isHovered signals
  3. Wrapper le contenu avec <app-block-inline-toolbar>
  4. Implémenter onToolbarAction(action: string)
  5. Gérer focus/blur events

Voir: docs/MIGRATION_INLINE_TOOLBAR.md section "Checklist de migration"

Architecture recommandée

Block Component
  └─ BlockInlineToolbarComponent
       ├─ Drag handle (absolute left)
       ├─ Content wrapper (flex)
       │    ├─ <ng-content /> (votre contenu)
       │    └─ Quick icons (conditional)
       └─ Tooltip (on drag handle hover)

📚 Références

  • Design inspiré de: Notion, Coda, Craft
  • Patterns utilisés: WYSIWYG, Block-based editor, Inline toolbars
  • Technologies: Angular 20, TailwindCSS 3.4, Signals

Résultat final

Le mode édition Nimbus offre maintenant:

  • UX fluide - Toolbar intégrée au flux de contenu
  • Design épuré - Pas de barre fixe intrusive
  • Productivité - Icônes rapides à portée de main
  • Discoverability - Menu "/" accessible partout
  • Modernité - Conforme aux standards 2025

Statut: Implémentation complète
Date: 7 novembre 2025
Version: 2.0
Équipe: Nimbus Development Team