// Product modal + Cart drawer const { useState: useStateM, useEffect: useEffectM } = React; function ProductModal({ product, onClose, onAddToCart }) { const [ribbon, setRibbon] = useStateM(''); const [qty, setQty] = useStateM(1); useEffectM(() => { if (product) { document.body.style.overflow = 'hidden'; setRibbon(''); setQty(1); } else { document.body.style.overflow = ''; } return () => { document.body.style.overflow = ''; }; }, [product]); if (!product) return null; return (
{product.name}

{product.category}

{product.name}

{product.description}

Coloris {product.colors.join(' · ')}
Occasion {product.occasion}
Livraison Grand Lyon en 4h
setRibbon(e.target.value)} maxLength={60} placeholder="À notre cher Papa, avec toute notre tendresse" className="w-full px-4 py-3 text-sm focus:outline-none transition-colors" style={{ background: 'var(--surface-container-low)', color: 'var(--on-surface)', borderBottom: '1px solid transparent' }} onFocus={e => e.target.style.borderBottom = '1px solid var(--primary)'} onBlur={e => e.target.style.borderBottom = '1px solid transparent'} />

{ribbon.length}/60

{qty}
{(product.price * qty).toFixed(2).replace('.', ',')} €

Paiement sécurisé · Livraison discrète

); } function CartDrawer({ open, onClose, cart, removeItem, updateQty }) { useEffectM(() => { document.body.style.overflow = open ? 'hidden' : ''; return () => { document.body.style.overflow = ''; }; }, [open]); const total = cart.reduce((s, i) => s + i.product.price * i.qty, 0); return (
); } Object.assign(window, { ProductModal, CartDrawer });