// 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 === '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 });