- 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
6.7 KiB
6.7 KiB
✅ 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
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
-
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
-
docs/MIGRATION_INLINE_TOOLBAR.md- Guide de migration étape par étape
- Checklist pour migrer d'autres blocs
- Comparaison avant/après
- Points d'attention
-
INLINE_TOOLBAR_SUMMARY.md(ce fichier)- Résumé exécutif
🔧 Fichiers modifiés
Composants mis à jour
-
src/app/editor/components/editor-shell/editor-shell.component.ts- ❌ Suppression de la toolbar fixe
- ✅ Simplification du template
-
src/app/editor/components/block/blocks/paragraph-block.component.ts- ✅ Intégration
BlockInlineToolbarComponent - ✅ Ajout signals
isFocusedetisHovered - ✅ Détection "/" pour ouvrir le menu
- ✅ Gestion des actions toolbar
- ✅ Intégration
-
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)
- Caractère "/" → Frappe au début du bloc ou après espace
- Bouton "More" (⬇) → Clic sur dernière icône toolbar
- 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
- Importer
BlockInlineToolbarComponent - Ajouter
isFocusedetisHoveredsignals - Wrapper le contenu avec
<app-block-inline-toolbar> - Implémenter
onToolbarAction(action: string) - 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