"use client"; import Image from "next/image"; import { useSearchParams } from "next/navigation"; import { useState, Suspense } from "react"; function LoginForm() { const searchParams = useSearchParams(); const from = searchParams.get("from") || "/"; const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(""); setLoading(true); try { const res = await fetch("/api/auth/login", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username, password }), }); if (res.ok) { window.location.href = from; } else { const data = await res.json().catch(() => ({})); setError(data.error || "Identifiants invalides"); } } catch { setError("Erreur réseau"); } finally { setLoading(false); } } return (
{/* Background logo */} {/* Hero */}

StripStream{" "} : Librarian

Administration

{/* Form card */}
setUsername(e.target.value)} autoComplete="username" autoFocus required disabled={loading} placeholder="admin" className=" flex w-full h-11 px-4 rounded-xl border border-input bg-background/60 text-sm text-foreground placeholder:text-muted-foreground/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring disabled:opacity-50 transition-all duration-200 " />
setPassword(e.target.value)} autoComplete="current-password" required disabled={loading} placeholder="••••••••" className=" flex w-full h-11 px-4 rounded-xl border border-input bg-background/60 text-sm text-foreground placeholder:text-muted-foreground/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring disabled:opacity-50 transition-all duration-200 " />
{error && (
{error}
)}
); } export default function LoginPage() { return ( ); }