import { useState, useEffect, useRef } from "react"; import { Trash2, Copy, Check } from "lucide-react"; import { Button } from "@/components/ui/button"; import { logger, type LogEntry } from "@/lib/logger"; const levelColors: Record = { info: "text-blue-500", success: "text-green-500", warning: "text-yellow-500", error: "text-red-500", debug: "text-gray-500", }; function formatTime(date: Date): string { return date.toLocaleTimeString("en-US", { hour12: false, hour: "2-digit", minute: "2-digit", second: "2-digit", }); } export function DebugLoggerPage() { const [logs, setLogs] = useState([]); const [copied, setCopied] = useState(false); const scrollRef = useRef(null); useEffect(() => { const unsubscribe = logger.subscribe(() => { setLogs(logger.getLogs()); }); setLogs(logger.getLogs()); return () => { unsubscribe(); }; }, []); useEffect(() => { if (scrollRef.current) { scrollRef.current.scrollTop = scrollRef.current.scrollHeight; } }, [logs]); const handleClear = () => { logger.clear(); }; const handleCopy = async () => { const logText = logs .map((log) => `[${formatTime(log.timestamp)}] [${log.level}] ${log.message}`) .join("\n"); try { await navigator.clipboard.writeText(logText); setCopied(true); setTimeout(() => setCopied(false), 500); } catch (err) { console.error("Failed to copy logs:", err); } }; return (

Debug Logs

{logs.length === 0 ? (

no logs yet...

) : (logs.map((log, i) => (
[{formatTime(log.timestamp)}] [{log.level}] {log.message}
)))}
); }