'use client'; import React, { useState } from 'react'; import { Copy, ChevronDown, ChevronUp } from 'lucide-react'; import { Box } from '@/ui/Box'; import { Surface } from '@/ui/Surface'; import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; import { Stack } from '@/ui/Stack'; interface ErrorDetailsBlockProps { error: Error & { digest?: string }; } /** * ErrorDetailsBlock * * Semantic component for technical error details. * Follows "Precision Racing Minimal" theme. */ export function ErrorDetailsBlock({ error }: ErrorDetailsBlockProps) { const [showDetails, setShowDetails] = useState(false); const [copied, setCopied] = useState(false); const copyError = async () => { const details = { message: error.message, digest: error.digest, stack: error.stack, url: typeof window !== 'undefined' ? window.location.href : 'unknown', timestamp: new Date().toISOString(), }; try { await navigator.clipboard.writeText(JSON.stringify(details, null, 2)); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (err) { // Silent fail } }; return ( setShowDetails(!showDetails)} display="flex" alignItems="center" justifyContent="center" gap={2} transition > {showDetails ? : } {showDetails ? 'Hide Technical Logs' : 'Show Technical Logs'} {showDetails && ( {error.stack || 'No stack trace available'} {error.digest && `\n\nDigest: ${error.digest}`} )} ); }