import { useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Sparkles, Loader2, Eye, EyeOff } from "lucide-react"; import { useAuth } from "@/contexts/AuthContext"; import { useLang } from "@/contexts/LanguageContext"; interface AuthModalProps { open: boolean; onOpenChange: (open: boolean) => void; defaultTab?: "signin" | "signup"; } export function AuthModal({ open, onOpenChange, defaultTab = "signin" }: AuthModalProps) { const { t } = useLang(); const { signIn, signUp } = useAuth(); const [tab, setTab] = useState<"signin" | "signup">(defaultTab); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [displayName, setDisplayName] = useState(""); const [showPassword, setShowPassword] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const reset = () => { setEmail(""); setPassword(""); setDisplayName(""); setError(""); setShowPassword(false); }; const switchTab = (next: "signin" | "signup") => { setTab(next); setError(""); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); setLoading(true); try { if (tab === "signin") { await signIn(email, password); } else { await signUp(email, password, displayName); } reset(); onOpenChange(false); } catch (err: unknown) { setError(err instanceof Error ? err.message : t.authError); } finally { setLoading(false); } }; const handleOpenChange = (next: boolean) => { if (!next) reset(); onOpenChange(next); }; return (
{t.appName}
{(["signin", "signup"] as const).map((t_) => ( ))}
{tab === "signup" && (
setDisplayName(e.target.value)} placeholder={t.authDisplayNamePlaceholder} className="bg-background/50" maxLength={50} />
)}
setEmail(e.target.value)} placeholder={t.authEmailPlaceholder} className="bg-background/50" required autoFocus />
setPassword(e.target.value)} placeholder={tab === "signup" ? t.authPasswordMinHint : t.authPasswordPlaceholder} className="bg-background/50 pr-10" required minLength={tab === "signup" ? 6 : undefined} />
{error && (

{error}

)}

{tab === "signin" ? ( <>{t.authNoAccount}{" "} ) : ( <>{t.authHasAccount}{" "} )}

); }