"use client" import { useState, useRef } from "react" import { Loader2 } from "lucide-react" import { authClient } from "@/lib/auth-client" import { signupSchema } from "@/lib/auth/validation" import SocialButtons from "./social-buttons" import PasswordStrengthMeter from "./password-strength" import TurnstileWidget, { type TurnstileWidgetHandle } from "./turnstile-widget" import Link from "next/link" interface SignupFormStepProps { onSuccess: (email: string) => void } export default function SignupFormStep({ onSuccess }: SignupFormStepProps) { const [name, setName] = useState("") const [email, setEmail] = useState("") const [password, setPassword] = useState("") const [errors, setErrors] = useState>({}) const [serverError, setServerError] = useState("") const [isLoading, setIsLoading] = useState(false) const [turnstileToken, setTurnstileToken] = useState("") const turnstileRef = useRef(null) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setErrors({}) setServerError("") const result = signupSchema.safeParse({ name, email, password }) if (!result.success) { const fieldErrors: Record = {} result.error.issues.forEach((issue) => { const field = issue.path[0] as string fieldErrors[field] = issue.message }) setErrors(fieldErrors) return } setIsLoading(true) const { error } = await authClient.signUp.email({ name, email, password, fetchOptions: { headers: { "x-captcha-response": turnstileToken, }, }, }) setIsLoading(false) if (error) { setServerError( error.message || "Something went wrong. Please try again.", ) turnstileRef.current?.reset() setTurnstileToken("") return } onSuccess(email) } return (

Create your account

Join DeckyVault and start exploring

or use email
{serverError && (
{serverError}
)}
setName(e.target.value)} placeholder="Your name" className="w-full px-4 py-3 rounded-lg border border-border bg-text/5 text-text text-sm placeholder:text-text/40 outline-none focus:border-primary focus:ring-2 focus:ring-primary/50 transition-colors" /> {errors.name && (

{errors.name}

)}
setEmail(e.target.value)} placeholder="you@deckyvault.xyz" className="w-full px-4 py-3 rounded-lg border border-border bg-text/5 text-text text-sm placeholder:text-text/40 outline-none focus:border-primary focus:ring-2 focus:ring-primary/50 transition-colors" /> {errors.email && (

{errors.email}

)}
setPassword(e.target.value)} placeholder="Min. 10 characters" className="w-full px-4 py-3 rounded-lg border border-border bg-text/5 text-text text-sm placeholder:text-text/40 outline-none focus:border-primary focus:ring-2 focus:ring-primary/50 transition-colors" /> {errors.password && (

{errors.password}

)}
setTurnstileToken("")} />

Already have an account?{" "} Sign in

) }