import { useEffect, useState } from 'react' import { IconBug, IconCopy, IconCheck } from '@tabler/icons-react' import StyledModal from './StyledModal' import api from '~/lib/api' interface DebugInfoModalProps { open: boolean onClose: () => void } export default function DebugInfoModal({ open, onClose }: DebugInfoModalProps) { const [debugText, setDebugText] = useState('') const [loading, setLoading] = useState(false) const [copied, setCopied] = useState(false) useEffect(() => { if (!open) return setLoading(true) setCopied(false) api.getDebugInfo().then((text) => { if (text) { const browserLine = `Browser: ${navigator.userAgent}` setDebugText(text + '\n' + browserLine) } else { setDebugText('Failed to load debug info. Please try again.') } setLoading(false) }).catch(() => { setDebugText('Failed to load debug info. Please try again.') setLoading(false) }) }, [open]) const handleCopy = async () => { try { await navigator.clipboard.writeText(debugText) } catch { // Fallback for older browsers const textarea = document.querySelector('#debug-info-text') if (textarea) { textarea.select() document.execCommand('copy') } } setCopied(true) setTimeout(() => setCopied(false), 2000) } return ( } cancelText="Close" onCancel={onClose} >

This is non-sensitive system info you can share when reporting issues. No passwords, IPs, or API keys are included.