import { useMemo, useState } from "react"; import * as sync from "../syncEngine"; /* ═══════ AUTH SCREEN ═══════ */ export function AuthScreen({ onLogin, dark }) { const [isLogin, setIsLogin] = useState(true); const [username, setUsername] = useState(""); const [pass, setPass] = useState(""); const [name, setName] = useState(""); const [err, setErr] = useState(""); const [loading, setLoading] = useState(false); const T = useMemo( () => ({ bg: dark ? "#0d1117" : "#f6f8fa", card: dark ? "#161b22" : "#fff", border: dark ? "#30363d" : "#d0d7de", text: dark ? "#e6edf3" : "#1f2328", muted: dark ? "#8b949e" : "#656d76", accent: dark ? "#388bfd" : "#0969da", danger: dark ? "#f85149" : "#cf222e", }), [dark] ); const submit = async () => { const u = username.trim(); if (!u || !pass) { setErr("Username and password required"); return; } if (!isLogin && !/^[a-zA-Z0-9._-]{3,32}$/.test(u)) { setErr("Username must be 3-32 chars: letters, digits, . _ -"); return; } setLoading(true); setErr(""); try { const user = isLogin ? await sync.login(u, pass) : await sync.register(u, pass, name || undefined); onLogin(user); } catch (e) { setErr(e.message === "AUTH" ? "Invalid credentials" : e.message); } finally { setLoading(false); } }; return (