'use client'; import { useState } from 'react'; import { Link } from '@/core/lib/navigation'; import { useTranslations } from '@/core/lib/translations'; import { cn } from '@/core/lib/utils'; import { LoadingSpinner } from '@/ui/shared/loading-spinner'; interface LoginFormProps { onSubmit: (email: string, password: string) => Promise; error?: string | null; className?: string; } export function LoginForm({ onSubmit, error, className }: LoginFormProps) { const t = useTranslations('auth'); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [loading, setLoading] = useState(false); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (loading) return; try { setLoading(true); await onSubmit(email, password); } finally { setLoading(false); } } return (
{error && (
{error}
)}
setEmail(e.target.value)} placeholder={t('emailPlaceholder')} autoComplete="email" className="border-border bg-background text-foreground placeholder:text-muted-foreground focus:ring-primary/20 focus:border-primary h-10 w-full rounded border px-3 text-sm focus:outline-none focus:ring-2" />
setPassword(e.target.value)} placeholder={t('passwordPlaceholder')} autoComplete="current-password" className="border-border bg-background text-foreground placeholder:text-muted-foreground focus:ring-primary/20 focus:border-primary h-10 w-full rounded border px-3 text-sm focus:outline-none focus:ring-2" />
{t('forgotPassword')}
); }