// components/admin/auth/SignIn.tsx - Notion Style Design 'use client'; import { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { useAuth } from '@/hooks/use-auth'; import { Loader2, Package, Mail, Lock } from 'lucide-react'; export default function LoginForm() { const { isLoading, handleAuth } = useAuth(); const [formData, setFormData] = useState({ email: '', password: '' }); const [errors, setErrors] = useState({ email: '', password: '' }); const validateForm = () => { let isValid = true; const newErrors = { email: '', password: '' }; // Validar email if (!formData.email) { newErrors.email = 'El email es requerido'; isValid = false; } else if (!/\S+@\S+\.\S+/.test(formData.email)) { newErrors.email = 'El email no es válido'; isValid = false; } // Validar contraseña if (!formData.password) { newErrors.password = 'La contraseña es requerida'; isValid = false; } else if (formData.password.length < 6) { newErrors.password = 'La contraseña debe tener al menos 6 caracteres'; isValid = false; } setErrors(newErrors); return isValid; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (validateForm()) { await handleAuth(formData); } }; const handleChange = (e: React.ChangeEvent) => { const { id, value } = e.target; setFormData(prev => ({ ...prev, [id]: value })); // Limpiar error al cambiar el valor if (errors[id as keyof typeof errors]) { setErrors(prev => ({ ...prev, [id]: '' })); } }; return (
{/* Clean editorial background */}
{/* Subtle floating elements */}
{/* Header */}

Nova CMS

Panel de Administración

Ingresa tus credenciales para continuar

{/* Form Card */}
{/* Email Field */}
{errors.email && (

{errors.email}

)}
{/* Password Field */}
{errors.password && (

{errors.password}

)}
{/* Submit Button */}
{/* Footer */}

Acceso exclusivo para administradores

); }