"use client"; import { Suspense, useState } from "react"; import { useSearchParams, useRouter } from "next/navigation"; import { AuthCard, AuthFooterLink } from "@/components/auth/auth-card"; import { auth, AuthError } from "@/lib/auth"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; function ResetPasswordForm() { const params = useSearchParams(); const router = useRouter(); const token = params.get("token") ?? ""; const [password, setPassword] = useState(""); const [confirm, setConfirm] = useState(""); const [error, setError] = useState(null); const [submitting, setSubmitting] = useState(false); const [done, setDone] = useState(false); if (!token) { return ( ); } async function onSubmit(e: React.SyntheticEvent) { e.preventDefault(); setError(null); if (password !== confirm) { setError("Passwords do not match."); return; } setSubmitting(true); try { await auth.resetPassword(token, password); setDone(true); setTimeout(() => router.push("/login"), 1500); } catch (err) { setError(err instanceof AuthError ? err.message : "Reset failed."); } finally { setSubmitting(false); } } if (done) { return ( ); } return (
setPassword(e.target.value)} />
setConfirm(e.target.value)} />

{error ?

{error}

: null}
); } export default function ResetPasswordPage() { // useSearchParams must be inside Suspense for Next.js streaming. return ( ); }