From cd2d225e910e8a52678f0507fdab21756154e154 Mon Sep 17 00:00:00 2001 From: Jules Neny Date: Tue, 12 May 2026 00:06:51 +0200 Subject: [PATCH] feat(media): split layout 2/3 carte + 1/3 chatbot + toggle plein ecran - Chatbot passe d'overlay flottant a inline (1/3 hauteur permanent) - Bouton [Carte plein ecran] / [Chatbot plein ecran] / [Vue partagee] - Transition CSS douce 0.3s ease sur height/flex-basis/opacity - Restart D3 simulation alpha(0.3) apres transition (350ms delay) - localStorage persistance du mode (cle media-layout-mode) - Responsive mobile <768px : stack vertical carte 60vh + chatbot 40vh - CartePensees expose triggerResize() via defineExpose - ChatbotPensees : prop inline booleen, 2 modes rendu (overlay/inline) V2 Phase 4 Co-Authored-By: Claude Sonnet 4.6 --- components/CartePensees.vue | 10 ++ components/ChatbotPensees.vue | 289 +++++++++++++++++++++------------ pages/media.vue | 294 +++++++++++++++++++++++++++++++--- 3 files changed, 465 insertions(+), 128 deletions(-) diff --git a/components/CartePensees.vue b/components/CartePensees.vue index 50a87de..374f0ac 100644 --- a/components/CartePensees.vue +++ b/components/CartePensees.vue @@ -128,6 +128,16 @@ watch(() => props.active, (val) => { if (val && import.meta.client && props.data watch(() => props.data, (val) => { if (val && props.active && import.meta.client) requestAnimationFrame(() => requestAnimationFrame(() => initGraph())) }) onMounted(async () => { if (import.meta.client && props.data && props.active) { await nextTick(); initGraph() } }) onUnmounted(() => { if (simulation) simulation.stop() }) + +// Expose pour reset D3 apres resize du conteneur +function triggerResize() { + if (simulation) { + simulation.alpha(0.3).restart() + } else if (import.meta.client && props.data && props.active) { + initGraph() + } +} +defineExpose({ triggerResize })