From a6c295413bae4d963cf7408310c4b9e1bf150727 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Mon, 23 Feb 2026 16:31:39 +0100 Subject: [PATCH] feat: implement and refine the AI explanation modal, ensuring correct portal rendering and UI polish. --- .../components/ai-explanation-modal.tsx | 24 +++++++++---------- task.md | 6 ++++- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/features/ai-copilot/components/ai-explanation-modal.tsx b/src/features/ai-copilot/components/ai-explanation-modal.tsx index 303659d..7577eb1 100644 --- a/src/features/ai-copilot/components/ai-explanation-modal.tsx +++ b/src/features/ai-copilot/components/ai-explanation-modal.tsx @@ -1,6 +1,7 @@ "use client"; import { useEffect, useState } from "react"; +import { createPortal } from "react-dom"; import { X, Bot, Sparkles, TrendingUp, ShieldAlert, History } from "lucide-react"; interface AiExplanationModalProps { @@ -21,8 +22,10 @@ export function AiExplanationModal({ recommandation }: AiExplanationModalProps) { const [isVisible, setIsVisible] = useState(false); + const [mounted, setMounted] = useState(false); useEffect(() => { + setMounted(true); if (isOpen) { setIsVisible(true); } else { @@ -36,6 +39,7 @@ export function AiExplanationModal({ }; if (!isOpen && !isVisible) return null; + if (!mounted) return null; const getGammeColor = (g?: string | null) => { switch (g) { @@ -46,24 +50,23 @@ export function AiExplanationModal({ } }; - return ( + const modalContent = (
{/* Backdrop */}
{/* Panel */}
{/* Header with Mary Icon */} @@ -133,12 +136,7 @@ export function AiExplanationModal({
@@ -153,4 +151,6 @@ export function AiExplanationModal({ `}
); + + return createPortal(modalContent, document.body); } diff --git a/task.md b/task.md index 8eefec7..41a5e1a 100644 --- a/task.md +++ b/task.md @@ -19,7 +19,8 @@ Activation et initialisation de l'Agent Master BMAD. - [x] Étape 11 : Intégration de l'analyse critique systématique (même score > 50) - [x] Étape 12 : Validation finale et correction TS - [x] Étape 13 : Implémentation du modal pour les explications IA détaillées -- [/] Étape 14 : Polissage de l'UI (Sally/UX) +- [x] Étape 14 : Correction du design et du positionnement du modal (z-index/Portal) +- [x] Étape 15 : Polissage final et validation Michael # Progress Log @@ -44,3 +45,6 @@ Activation et initialisation de l'Agent Master BMAD. - Recherche du composant de la grille en cours. - Nouveau composant `AiExplanationModal` créé. - Intégration dans `AiInsightBlock` terminée (icône + déclenchement). +- Correction du modal : utilisation de `createPortal` et `z-index: 9999` pour passer au-dessus de tout. +- Opacité du fond renforcée (0.85). +- Validation Michael reçue (LGTM).