/** * Turnstile React Component * * Uses @marsidev/react-turnstile (Cloudflare recommended) * npm install @marsidev/react-turnstile */ import { Turnstile, type TurnstileInstance } from '@marsidev/react-turnstile' import { useRef, useState } from 'react' /** * Basic Example: Contact Form with Turnstile */ export function ContactForm() { const [token, setToken] = useState() const [error, setError] = useState() const [isSubmitting, setIsSubmitting] = useState(false) async function handleSubmit(e: React.FormEvent) { e.preventDefault() if (!token) { setError('Please complete the verification') return } setIsSubmitting(true) setError(undefined) const formData = new FormData(e.currentTarget) formData.append('cf-turnstile-response', token) try { const response = await fetch('/api/contact', { method: 'POST', body: formData, }) if (!response.ok) { const errorText = await response.text() setError(`Submission failed: ${errorText}`) return } // Success alert('Message sent successfully!') e.currentTarget.reset() setToken(undefined) } catch (err) { setError(`Network error: ${err.message}`) } finally { setIsSubmitting(false) } } return (