// Login — Pantalla de inicio de sesión (UI) para usuarios que ya tienen cuenta. // A juego con SignUp.jsx. Métodos: Google · iCloud (Apple) · Correo + contraseña. // Al iniciar sesión, entra directo a la app (sin volver a la pantalla de libros). const { useState: liS } = React; // Glifos de proveedores (idénticos a SignUp para consistencia visual) const GoogleGlyphL = () => ( ); const AppleGlyphL = () => ( ); const MailGlyphL = () => ( ); const LOGIN_POINTS = [ { t: 'Retoma donde lo dejaste', d: 'Tus casos, planes y diagnósticos siguen justo como los guardaste.' }, { t: 'Tu suscripción, siempre lista', d: 'Tu plan de CynamonSup te reconoce al entrar — sin volver a configurar nada.' }, { t: 'En todos tus dispositivos', d: 'Inicia sesión desde la web, Android o iOS con la misma cuenta.' }, ]; const Login = ({ setView, onLogin }) => { const [method, setMethod] = liS('email'); // 'google' | 'apple' | 'email' const [form, setForm] = liS({ email: '', pass: '' }); const [error, setError] = liS(''); const [loading, setLoading] = liS(false); const [mode, setMode] = liS('login'); // 'login' | 'recover' const [sent, setSent] = liS(false); const recover = () => { if (!/\S+@\S+\.\S+/.test(form.email)) { setError('Escribe tu correo para enviarte el enlace.'); return; } setError(''); setSent(true); }; const emailOk = /\S+@\S+\.\S+/.test(form.email); const ready = method === 'google' || method === 'apple' || (method === 'email' && emailOk && form.pass.length >= 6); const handleLogin = () => { if (!ready) { setError('Escribe tu correo y contraseña para entrar.'); return; } setError(''); setLoading(true); // UI: simula la validación de la cuenta. Aquí, más adelante, irá Supabase Auth. setTimeout(() => { setLoading(false); onLogin?.({ method, email: method === 'email' ? form.email : (method === 'google' ? 'cuenta de Google' : 'cuenta de iCloud'), }); }, 650); }; return (
{/* Panel de bienvenida */} {/* Tarjeta de inicio de sesión */}
{mode === 'recover' ? (

Recuperar contraseña

Te enviaremos un enlace a tu correo para crear una nueva contraseña.

{sent ? (
Revisa tu correo. Si {form.email} tiene una cuenta, te llegará un enlace para restablecer tu contraseña en unos minutos. Recuerda revisar tu carpeta de spam.
) : (
setForm(f => ({ ...f, email: e.target.value }))} onKeyDown={e => { if (e.key === 'Enter') recover(); }}/>
)} {error &&
{error}
} {!sent && ( )}
) : ( <>

Iniciar sesión

Bienvenida de nuevo. Entra con tu cuenta para continuar.

{/* Métodos sociales */}
{/* Separador */}
o con tu correo
{/* Formulario de correo + contraseña */}
{ setForm(f => ({ ...f, email: e.target.value })); setMethod('email'); }} onFocus={() => setMethod('email')} />
{ setForm(f => ({ ...f, pass: e.target.value })); setMethod('email'); }} onFocus={() => setMethod('email')} onKeyDown={e => { if (e.key === 'Enter') handleLogin(); }} />
{error &&
{error}
}
¿Aún no tienes cuenta?
)}
); }; Object.assign(window, { Login });