import { useState } from 'react' export default function AuthModal({ mode, onModeChange, onLogin, onRegister, onClose }) { const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [err, setErr] = useState('') const [loading, setLoading] = useState(false) const handleSubmit = async (e) => { e.preventDefault() setErr('') if (!username || !password) return setErr('Please fill in all fields.') if (password.length < 6) return setErr('Password must be at least 6 characters.') if (mode === 'register') { if (username.length < 3) return setErr('Username must be at least 3 characters.') if (!/^[a-zA-Z0-9_]+$/.test(username)) { return setErr('Username can only contain letters, numbers, and underscores. No spaces or special characters (e.g. no @, ., -).') } } setLoading(true) try { if (mode === 'login') await onLogin(username, password) else await onRegister(username, password) } catch (e) { setErr(e.message || 'Something went wrong. Please try again.') } finally { setLoading(false) } } const handleGoogle = () => { window.location.href = '/auth/google/login' } return (
e.target === e.currentTarget && onClose()}>
Welcome to OwnGPT v2
setUsername(e.target.value)} placeholder={mode === 'register' ? "Letters, numbers, underscores only" : "Your username"} autoFocus /> setPassword(e.target.value)} placeholder="••••••••" /> {mode === 'register' && password.length > 0 && (
{[1, 2, 3].map(i => (
i * 3 ? (password.length > 8 ? 'var(--em)' : 'var(--am)') : 'var(--b2)', transition: 'all 0.3s' }} /> ))}
)} {err &&
{err}
}
or continue with
) }