// Shared components: Nav, Footer, Icon, Button, TweaksPanel
const { useState, useEffect, useRef, useMemo } = React;
function Icon({ name, className = '', style }) {
return {name};
}
function NavBar({ route, setRoute, cartCount, onOpenCart, onOpenTweaks }) {
const items = [
{ key: 'boutique', label: 'Fleuriste' },
{ key: 'tanatorios', label: 'Funérariums' },
{ key: 'contact', label: 'Contact' },
{ key: 'apropos', label: 'À propos' },
];
return (
);
}
function Footer({ setRoute }) {
return (
);
}
function TrustBar() {
const items = [
{ icon: 'local_shipping', label: 'Logistique', value: 'Livraison le jour même' },
{ icon: 'visibility_off', label: 'Engagement', value: 'Service discret' },
{ icon: 'schedule', label: 'Disponibilité', value: 'Disponible 24h/24' },
{ icon: 'location_on', label: 'Périmètre', value: 'Livraison Grand Lyon' },
];
return (
);
}
function TweaksPanel({ open, onClose, primaryColor, setPrimaryColor }) {
const palette = [
{ key: '#000e77', label: 'Bleu Sanctuaire', sub: 'Original' },
{ key: '#0f22a5', label: 'Bleu Cobalt', sub: 'Plus saturé' },
{ key: '#1e3a5f', label: 'Bleu Ardoise', sub: 'Feutré' },
{ key: '#2d4a3e', label: 'Vert Sauge', sub: 'Organique' },
{ key: '#4a1e3a', label: 'Prune', sub: 'Mémoriel' },
{ key: '#3a2d1e', label: 'Terre Brûlée', sub: 'Chaleureux' },
{ key: '#1c1c1c', label: 'Noir Encre', sub: 'Minimaliste' },
];
if (!open) return null;
return (
{palette.map(p => {
const active = p.key.toLowerCase() === primaryColor.toLowerCase();
return (
);
})}
Le changement s'applique à toute l'interface. Activable aussi depuis la barre d'édition.
);
}
Object.assign(window, { Icon, NavBar, Footer, TrustBar, TweaksPanel });