// fp-auth.jsx — Login / Sign-up screen // Exports: AuthScreen function AuthScreen() { const [mode, setMode] = useState('login'); // 'login' | 'signup' | 'reset' const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [name, setName] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(''); const submit = async e => { e.preventDefault(); setError(''); setSuccess(''); setLoading(true); if (mode === 'login') { const { error } = await sbClient.auth.signInWithPassword({ email, password }); if (error) setError(error.message); } else if (mode === 'signup') { const { error } = await sbClient.auth.signUp({ email, password, options: { data: { name } }, }); if (error) setError(error.message); else setSuccess('Revisa tu email para confirmar tu cuenta.'); } else if (mode === 'reset') { const { error } = await sbClient.auth.resetPasswordForEmail(email, { redirectTo: window.location.origin, }); if (error) setError(error.message); else setSuccess('Te enviamos un enlace para restablecer tu contraseña. Revisa tu email.'); } setLoading(false); }; const switchMode = (m) => { setMode(m); setError(''); setSuccess(''); }; return (
Feed Planner

{mode === 'login' ? 'Ingresa a tu cuenta' : mode === 'signup' ? 'Crea tu cuenta' : 'Recuperar contraseña'}

{error &&
{error}
} {success &&
{success}
}
{mode === 'signup' && (
setName(e.target.value)} required />
)}
setEmail(e.target.value)} required />
{mode !== 'reset' && (
setPassword(e.target.value)} required minLength={6} />
)} {mode === 'login' && (
)}
{mode === 'login' ? ( <>¿Sin cuenta?{' '} ) : ( <>¿Ya tienes cuenta?{' '} )}
); } const authStyles = { page: { minHeight:'100vh', background:'var(--cream)', display:'flex', alignItems:'center', justifyContent:'center', padding:24 }, card: { background:'#fff', borderRadius:20, padding:'40px 36px', width:'100%', maxWidth:400, boxShadow:'0 8px 40px rgba(28,25,23,0.12)', display:'flex', flexDirection:'column', gap:20 }, logo: { fontFamily:"'Playfair Display',serif", fontSize:24, fontWeight:600, letterSpacing:'-0.3px', display:'flex', alignItems:'center', gap:8 }, dot: { width:9, height:9, borderRadius:'50%', background:'var(--accent)', display:'inline-block', flexShrink:0 }, sub: { fontSize:14, color:'var(--ink-soft)', marginTop:-12 }, field:{ display:'flex', flexDirection:'column', gap:6 }, label:{ fontSize:11.5, fontWeight:600, color:'var(--ink-soft)', letterSpacing:'0.06em', textTransform:'uppercase' }, input:{ background:'var(--cream)', border:'1px solid var(--cream-dark)', borderRadius:9, padding:'11px 13px', fontFamily:"'DM Sans',sans-serif", fontSize:14, color:'var(--ink)', outline:'none', width:'100%' }, btn: { background:'var(--accent)', color:'#fff', border:'none', borderRadius:10, padding:'13px', fontFamily:"'DM Sans',sans-serif", fontSize:14, fontWeight:600, cursor:'pointer', display:'flex', alignItems:'center', justifyContent:'center', gap:8, transition:'opacity 0.15s' }, alert:{ background:'var(--accent-light)', color:'var(--accent)', border:'1px solid var(--accent-mid)', borderRadius:9, padding:'10px 13px', fontSize:13, lineHeight:1.4 }, toggle:{ textAlign:'center', fontSize:13 }, link: { background:'none', border:'none', color:'var(--accent)', fontWeight:600, cursor:'pointer', fontFamily:'inherit', fontSize:13, padding:0 }, }; Object.assign(window, { AuthScreen });