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 <noreply@anthropic.com>
This commit is contained in:
Jules Neny
2026-05-12 00:06:51 +02:00
parent 11732a6a4b
commit cd2d225e91
3 changed files with 465 additions and 128 deletions

View File

@@ -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 })
</script>
<style>