TypeScript 98.3%
CSS 0.9%
Shell 0.7%
1"use client";2// Bouton de connexion au compte de démonstration (un clic, aucun mot de passe).3import { useRouter } from "next/navigation";4import { useState } from "react";5import { PlayCircle } from "lucide-react";6import { Spinner } from "@/components/ui";78export function DemoButton({ className }: { className?: string }) {9 const router = useRouter();10 const [loading, setLoading] = useState(false);11 const [error, setError] = useState<string | null>(null);1213 async function go() {14 setLoading(true);15 setError(null);16 try {17 const res = await fetch("/api/auth/demo", { method: "POST" });18 const d = await res.json();19 if (!res.ok) return setError(d.error ?? "Démo indisponible.");20 router.push("/chat");21 router.refresh();22 } catch {23 setError("Impossible de joindre le serveur.");24 } finally {25 setLoading(false);26 }27 }2829 return (30 <span className={className}>31 <button32 onClick={go}33 disabled={loading}34 className="inline-flex items-center justify-center gap-2 px-5 py-2.5 rounded-xl border border-dashed border-brand-400 text-brand-700 dark:text-brand-300 font-semibold text-[13.5px] hover:bg-brand-50 dark:hover:bg-brand-900/30 transition-colors disabled:opacity-60 w-full sm:w-auto"35 >36 {loading ? <Spinner /> : <PlayCircle size={16} />}37 Essayer le compte démo (deux cours)38 </button>39 {error && <span className="block text-[12px] text-red-600 dark:text-red-400 mt-1.5">{error}</span>}40 </span>41 );42}43