// Composants partagés : NavBar (avec mega-menu), Footer, Icon, TrustBar, TweaksPanel const { useState, useEffect, useRef } = React; function Icon({ name, className = '', style }) { return {name}; } // Contenu du mega-menu const MEGA_MENU_DATA = { services: [ { key: 'fleuriste-marseille', label: 'Fleuriste funéraire Marseille' }, { key: 'livraison-marseille', label: 'Livraison fleurs funéraires' }, ], communes: [ { key: 'commune-aix-en-provence', label: 'Aix-en-Provence' }, { key: 'commune-arles', label: 'Arles' }, { key: 'commune-salon-de-provence', label: 'Salon-de-Provence' }, { key: 'commune-cassis', label: 'Cassis' }, { key: 'commune-la-ciotat', label: 'La Ciotat' }, { key: 'commune-martigues', label: 'Martigues' }, { key: 'commune-les-baux-de-provence', label: 'Les Baux-de-Provence' }, { key: 'commune-aubagne', label: 'Aubagne' }, ], }; function MegaMenu({ setRoute, onClose }) { return (

SERVICES

    {MEGA_MENU_DATA.services.map(item => (
  • ))}

COMMUNES DESSERVIES

    {MEGA_MENU_DATA.communes.map(item => (
  • ))}

Livraison le jour même dans tout le Grand Marseille — service disponible 7j/7

); } function NavBar({ route, setRoute, cartCount, onOpenCart, onOpenTweaks }) { const [megaOpen, setMegaOpen] = useState(false); const [mobileOpen, setMobileOpen] = useState(false); const [mobileCommunes, setMobileCommunes] = useState(false); const [allMenuOpen, setAllMenuOpen] = useState(false); const [allMenuCommunes, setAllMenuCommunes] = useState(false); const megaRef = useRef(null); const allMenuRef = useRef(null); useEffect(() => { function handler(e) { if (allMenuRef.current && !allMenuRef.current.contains(e.target)) setAllMenuOpen(false); } document.addEventListener('mousedown', handler); return () => document.removeEventListener('mousedown', handler); }, []); const leftItems = [ { key: 'boutique', label: 'Fleuriste' }, { key: 'funerariums', label: 'Funérariums' }, ]; const rightItems = [ { key: 'guide', label: 'Guide et protocole' }, { key: 'contact', label: 'Contact' }, { key: 'apropos', label: 'À propos' }, ]; const isMarseilleRoute = route === 'fleuriste-marseille' || route === 'livraison-marseille' || route.startsWith('commune-'); useEffect(() => { setMobileOpen(false); setMobileCommunes(false); setAllMenuOpen(false); setAllMenuCommunes(false); }, [route]); useEffect(() => { function handler(e) { if (megaRef.current && !megaRef.current.contains(e.target)) setMegaOpen(false); } document.addEventListener('mousedown', handler); return () => document.removeEventListener('mousedown', handler); }, []); function NavItem({ item }) { const active = route === item.key; return ( ); } return ( <>
{/* Trigger panneau latéral */}
{mobileOpen && (
)}
{/* Overlay panneau latéral */}
setAllMenuOpen(false)} /> {/* Panneau latéral */}
{/* En-tête panneau */}
{/* Navigation */}

Navigation

{[ { key: 'boutique', label: 'Fleuriste' }, { key: 'funerariums', label: 'Funérariums' }, { key: 'fleuriste-marseille', label: 'Fleuriste funéraire Marseille' }, { key: 'livraison-marseille', label: 'Livraison fleurs funéraires' }, { key: 'guide', label: 'Guide et protocole' }, { key: 'contact', label: 'Contact' }, { key: 'apropos', label: 'À propos' }, ].map((item, idx, arr) => ( {idx < arr.length - 1 &&
} ))}
{/* Marseille & Communes */}

Marseille & Communes

{[...MEGA_MENU_DATA.services, ...MEGA_MENU_DATA.communes].map((item, idx, arr) => ( {idx < arr.length - 1 &&
} ))}
); } function Footer({ setRoute }) { return (
{/* Colonne 1 — Identité */}
Fleurs de Deuil Marseille { e.target.style.display = 'none'; }} />

Artisan fleuriste spécialisé dans les compositions funéraires à Marseille et en Provence. Nous mettons notre savoir-faire au service de votre hommage avec discrétion et élégance.

Atelier ouvert 7 jours sur 7
{/* Colonne 2 — Informations (miroir du menu) */}
Informations
{/* Colonne 3 — Informations légales */}
Informations légales
{/* Colonne 4 — Nous contacter */}
Nous contacter

contact@fleursdeuilmarseille.fr

Quartier du Panier, 13002 Marseille

© Fleurs de Deuil Marseille — Artisan Fleuriste Funéraire

); } function TrustBar() { const items = [ { icon: 'local_shipping', label: 'Fleurs obsèques', value: 'Livraison express le jour même' }, { icon: 'visibility_off', label: 'Engagement', value: 'Service discret' }, { icon: 'schedule', label: 'Urgences', value: 'Livraison gerbe deuil 24h/24' }, { icon: 'location_on', label: 'Périmètre', value: 'Grand Marseille & PACA' }, ]; return (
{items.map(it => (

{it.label}

{it.value}

))}
); } function TweaksPanel({ open, onClose, primaryColor, setPrimaryColor }) { const palette = [ { key: '#39a3d5', label: 'Bleu Marseille', sub: 'Original' }, { key: '#2282b3', label: 'Bleu Profond', sub: 'Plus intense' }, { key: '#1a6491', label: 'Bleu Marine', sub: 'Sobre' }, { key: '#57b8d8', label: 'Bleu Ciel', sub: 'Plus clair' }, { key: '#2d7a8a', label: 'Bleu Pétrole', sub: 'Méditerranéen' }, { key: '#3a6ea5', label: 'Bleu Indigo', sub: 'Élégant' }, { key: '#1c3a4a', label: 'Bleu Nuit', sub: 'Minimaliste' }, ]; if (!open) return null; return (

Personnalisation

Couleur principale

{palette.map(p => { const active = p.key.toLowerCase() === primaryColor.toLowerCase(); return ( ); })}
Le changement s'applique à toute l'interface.
); } function CookieBanner({ setRoute }) { const [visible, setVisible] = useState(() => { try { return !localStorage.getItem('fdm.cookies'); } catch { return true; } }); const [leaving, setLeaving] = useState(false); function dismiss(choice) { setLeaving(true); setTimeout(() => { try { localStorage.setItem('fdm.cookies', choice); } catch {} setVisible(false); }, 320); } if (!visible) return null; return (
{/* Icono + texto */}

Cookies & confidentialité

Nous utilisons des cookies pour améliorer votre expérience et analyser l'audience de notre site, conformément au RGPD.{' '}

{/* Boutons */}
); } Object.assign(window, { Icon, NavBar, Footer, TrustBar, TweaksPanel, CookieBanner, MEGA_MENU_DATA });