# URL Paste Menu & Button Configuration - Documentation ## 📋 Vue d'ensemble Cette fonctionnalitĂ© ajoute deux nouvelles capacitĂ©s Ă  l'Ă©diteur Nimbus : 1. **Menu de collage d'URL** : Lorsqu'un utilisateur colle une URL dans un bloc paragraphe, un menu contextuel apparaĂźt avec plusieurs options de transformation 2. **Configuration avancĂ©e des boutons** : Un modal de configuration complet pour personnaliser les blocs boutons ## 🎯 FonctionnalitĂ©s implĂ©mentĂ©es ### 1. Menu de collage d'URL (UrlPasteMenu) Lorsqu'une URL est collĂ©e dans un bloc paragraphe en mode prompt, un menu s'affiche avec 5 options : #### Options disponibles : - **URL** : Affiche l'URL brute dans le bloc paragraphe - **Titre** : RĂ©cupĂšre le titre du site web et l'affiche dans le paragraphe - **IntĂ©grer** : Convertit le bloc en `embed-block` pour afficher la page dans une iframe ajustable - **Marque-page** : Convertit le bloc en `bookmark-block` avec preview de la page - **Bouton** : Convertit le bloc en `button-block` avec l'URL configurĂ©e #### Comportement : - DĂ©tection automatique des URLs (regex `https?://...`) - Menu positionnĂ© prĂšs du curseur - RĂ©cupĂ©ration asynchrone du titre via `UrlPreviewService` - Fermeture automatique aprĂšs sĂ©lection ### 2. Configuration avancĂ©e des boutons (ButtonConfigModal) Un modal complet pour configurer tous les aspects d'un bouton : #### ParamĂštres configurables : **Texte et URL** - Titre du bouton (label) - URL ou Email de destination - ID unique du bouton (affichĂ©, non modifiable) **Comportement** - ☑ Ouvrir dans un nouvel onglet **Forme du bouton** - đŸ”” Pill (arrondi complet) - ⬜ Rounded (coins arrondis) **Couleur d'arriĂšre-plan** - Palette de 7 couleurs prĂ©dĂ©finies : - Bleu (#3b82f6) - Rouge (#ef4444) - Orange (#f59e0b) - Vert (#10b981) - Violet (#8b5cf6) - Rose (#ec4899) - Gris (#6b7280) **Taille** - Petit (small) - Moyen (medium) - par dĂ©faut - Grand (large) **Type de bouton** - âšȘ Bouton 3D (effet de profondeur avec border-bottom) - âšȘ Bouton avec ombre (shadow + hover effect) - âšȘ Par dĂ©faut (style simple) #### Comportement du modal : - Ouverture automatique lors de la crĂ©ation d'un nouveau bouton - Bouton d'Ă©dition (crayon) visible au survol du bouton - Boutons "Annuler" et "TerminĂ©" - Validation en temps rĂ©el ## 📁 Fichiers créés ### Composants 1. **`src/app/editor/components/block/url-paste-menu.component.ts`** - Composant standalone Angular - Affiche le menu contextuel lors du collage d'URL - RĂ©cupĂšre le titre du site via `UrlPreviewService` - Émet l'action sĂ©lectionnĂ©e vers le parent 2. **`src/app/editor/components/block/blocks/button-config-modal.component.ts`** - Modal de configuration des boutons - Interface complĂšte avec tous les paramĂštres - Utilise Angular Signals pour la rĂ©activitĂ© - Design cohĂ©rent avec le reste de l'application ### Modifications 3. **`src/app/editor/components/block/blocks/paragraph-block.component.ts`** - Ajout de l'import `UrlPasteMenuComponent` - Ajout de la mĂ©thode `onPaste()` pour intercepter le collage - Ajout de la mĂ©thode `onPasteMenuAction()` pour gĂ©rer les actions - Ajout des signaux : `pasteMenuVisible`, `pastedUrl`, `pasteMenuPosition` - DĂ©tection d'URL via regex - Conversion de blocs selon l'action choisie 4. **`src/app/editor/components/block/blocks/button-block.component.ts`** - Refonte complĂšte du composant - Ajout de l'import `ButtonConfigModalComponent` - Rendu visuel du bouton avec tous les styles - Ouverture automatique du modal si le bouton est vide - Bouton d'Ă©dition au survol - MĂ©thodes : `getButtonClasses()`, `getBgColor()`, `getTextColor()` 5. **`src/app/editor/core/models/block.model.ts`** - Extension de l'interface `ButtonProps` : ```typescript export interface ButtonProps { label: string; url: string; variant?: 'primary' | 'secondary' | 'outline' | '3d' | 'shadow' | 'default'; openInNewTab?: boolean; shape?: 'pill' | 'rounded' | 'square'; backgroundColor?: string; size?: 'small' | 'medium' | 'large'; } ``` ## 🔄 Flux d'utilisation ### ScĂ©nario 1 : Collage d'URL ``` 1. Utilisateur colle une URL (Ctrl+V) dans un paragraphe vide ↓ 2. ParagraphBlockComponent.onPaste() dĂ©tecte l'URL ↓ 3. UrlPasteMenu s'affiche avec 5 options ↓ 4. Utilisateur clique sur une option (ex: "Bouton") ↓ 5. ParagraphBlockComponent.onPasteMenuAction() convertit le bloc ↓ 6. Le bloc devient un ButtonBlock ↓ 7. ButtonConfigModal s'ouvre automatiquement (label vide) ↓ 8. Utilisateur configure le bouton ↓ 9. Clic sur "TerminĂ©" → bouton créé et stylisĂ© ``` ### ScĂ©nario 2 : CrĂ©ation directe de bouton ``` 1. Utilisateur crĂ©e un bloc bouton via le menu "/" ↓ 2. ButtonBlock créé avec props par dĂ©faut ↓ 3. ButtonConfigModal s'ouvre automatiquement ↓ 4. Utilisateur configure tous les paramĂštres ↓ 5. Clic sur "TerminĂ©" → bouton créé ``` ### ScĂ©nario 3 : Édition d'un bouton existant ``` 1. Utilisateur survole un bouton existant ↓ 2. IcĂŽne crayon apparaĂźt en haut Ă  droite ↓ 3. Clic sur l'icĂŽne ↓ 4. ButtonConfigModal s'ouvre avec les valeurs actuelles ↓ 5. Modifications et "TerminĂ©" ↓ 6. Bouton mis Ă  jour ``` ## 🎹 Styles CSS appliquĂ©s ### Classes dynamiques du bouton **Taille** : - `small` : `px-3 py-1.5 text-xs` - `medium` : `px-4 py-2 text-sm` - `large` : `px-6 py-3 text-base` **Forme** : - `pill` : `rounded-full` - `rounded` : `rounded-lg` - `square` : `rounded-md` **Variant** : - `3d` : `border-b-4 border-black/20 active:border-b-0 active:translate-y-1` - `shadow` : `shadow-lg hover:shadow-xl hover:-translate-y-0.5` - `outline` : `border-2` (fond transparent, texte colorĂ©) ## 🔧 IntĂ©gration technique ### DĂ©pendances - `UrlPreviewService` : Pour rĂ©cupĂ©rer les mĂ©tadonnĂ©es des URLs - `DocumentService` : Pour convertir les blocs - `Angular Signals` : Pour la rĂ©activitĂ© - `CommonModule`, `FormsModule` : Modules Angular standard ### DĂ©tection d'URL Regex utilisĂ©e : ```typescript /^https?:\/\/[^\s/$.?#].[^\s]*$/i ``` Cette regex dĂ©tecte : - Protocole `http://` ou `https://` - Domaine valide - Chemin optionnel - Pas d'espaces ### Conversion de blocs Utilise `DocumentService.updateBlock()` pour transformer le bloc paragraphe en : - `embed` : `{ url, provider: 'generic' }` - `bookmark` : `{ url, title, viewMode: 'card' }` - `button` : `{ label, url, variant: 'primary' }` ## ✅ Tests recommandĂ©s ### Test 1 : Menu URL 1. Ouvrir l'Ă©diteur Nimbus 2. CrĂ©er un nouveau paragraphe 3. Coller `https://example.com` 4. VĂ©rifier que le menu apparaĂźt 5. Tester chaque option ### Test 2 : Configuration bouton 1. CrĂ©er un bouton via "/" 2. VĂ©rifier l'ouverture du modal 3. Modifier tous les paramĂštres 4. VĂ©rifier le rendu visuel ### Test 3 : Édition bouton 1. CrĂ©er un bouton 2. Survoler le bouton 3. Cliquer sur l'icĂŽne crayon 4. Modifier et sauvegarder ### Test 4 : URLs complexes - URL avec paramĂštres : `https://example.com?param=value` - URL avec ancre : `https://example.com#section` - URL avec port : `http://localhost:3000` ## 🐛 Gestion des erreurs - Si `UrlPreviewService` Ă©choue, le titre reste vide (pas de blocage) - Si l'URL est invalide, le menu ne s'affiche pas - Si le modal est annulĂ©, aucune modification n'est appliquĂ©e - PrĂ©vention de navigation dans l'Ă©diteur (click interceptĂ©) ## 🚀 AmĂ©liorations futures possibles 1. **Menu URL** : - Support des URLs sans protocole (auto-ajout de `https://`) - PrĂ©visualisation de l'embed avant conversion - Historique des URLs rĂ©centes 2. **Configuration bouton** : - SĂ©lecteur de couleur personnalisĂ© (color picker) - PrĂ©visualisation en temps rĂ©el dans le modal - Templates de boutons prĂ©dĂ©finis - Support des icĂŽnes (Lucide, FontAwesome) 3. **GĂ©nĂ©ral** : - Raccourcis clavier pour le menu URL - Drag & drop d'URLs depuis le navigateur - Support des emails (mailto:) - Support des numĂ©ros de tĂ©lĂ©phone (tel:) ## 📝 Notes de dĂ©veloppement - Tous les composants sont **standalone** (pas de module requis) - Utilisation de **Angular Signals** pour la rĂ©activitĂ© moderne - **TailwindCSS** pour tous les styles - **z-index: 12000** pour le modal (au-dessus de tout) - **z-index: 11000** pour le menu URL - Pas de dĂ©pendances externes supplĂ©mentaires ## ✹ RĂ©sumĂ© Cette implĂ©mentation ajoute une expĂ©rience utilisateur fluide et moderne pour : - Transformer rapidement des URLs collĂ©es en diffĂ©rents types de blocs - Configurer finement l'apparence et le comportement des boutons - Maintenir la cohĂ©rence visuelle avec le reste de l'Ă©diteur Nimbus Tous les fichiers sont prĂȘts et fonctionnels. La fonctionnalitĂ© est complĂšte et prĂȘte pour les tests.