/* ============================================================ mobile-sheets.jsx Types de fenêtres mobiles + composants spécifiques. Chaque type a un nom système ET un cas d'usage préconisé. ============================================================ */ const { useState: uS, useRef: rS, useEffect: eS } = React; /* ============================================================ BottomSheet — feuille modale qui monte du bas Nom système : BottomSheet Cas d'usage : action contextuelle, formulaire court, choix dans une liste. À privilégier sur mobile à la place d'une popup centrée (plus accessible au pouce). Gestes : swipe down pour fermer. ============================================================ */ function BottomSheet({ open, onClose, title, children, footer, height = 'auto' }) { const [dragY, setDragY] = uS(0); const [closing, setClosing] = uS(false); const startY = rS(0); eS(() => { if (open) { setDragY(0); setClosing(false); } }, [open]); if (!open && !closing) return null; const onStart = (e) => { startY.current = (e.touches ? e.touches[0].clientY : e.clientY); }; const onMove = (e) => { const y = (e.touches ? e.touches[0].clientY : e.clientY); const d = Math.max(0, y - startY.current); setDragY(d); }; const onEnd = () => { if (dragY > 80) { setClosing(true); setTimeout(() => { setClosing(false); setDragY(0); onClose(); }, 200); } else { setDragY(0); } }; return (