'use client'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { Icon } from '@/ui/Icon'; import { Text } from '@/ui/Text'; import { Box } from '@/ui/Box'; import { Stack } from '@/ui/Stack'; import { Accordion } from '@/ui/Accordion'; import { Copy } from 'lucide-react'; import React, { useState } from 'react'; interface ErrorDetailsBlockProps { error: Error & { digest?: string }; } /** * ErrorDetailsBlock * * Semantic component for technical error details. * Follows "Precision Racing Minimal" theme. */ export function ErrorDetailsBlock({ error }: ErrorDetailsBlockProps) { 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 ( {error.stack || 'No stack trace available'} {error.digest && `\n\nDigest: ${error.digest}`} ); }