'use client'; import { Box, Button, Typography, Paper } from '@mui/material'; import { BrokenImage, CloudOff, BugReport, DataObject } from '@mui/icons-material'; import { ReactNode } from 'react'; interface FallbackProps { error?: Error; resetError?: () => void; } /** * Generic minimal error fallback */ export function MinimalErrorFallback({ error, resetError }: FallbackProps) { return ( Something went wrong {resetError && ( )} ); } /** * Fallback for image loading errors */ export function ImageErrorFallback() { return ( ); } /** * Fallback for API/data fetching errors */ export function DataErrorFallback({ error, resetError }: FallbackProps) { return ( Failed to Load Data {error?.message || 'Unable to fetch the requested data. Please try again.'} {resetError && ( )} ); } /** * Fallback for rendering errors in components */ export function ComponentErrorFallback({ error, resetError }: FallbackProps) { return ( Component Error This component failed to render. The rest of the page should still work. {process.env.NODE_ENV === 'development' && error && ( {error.message} )} {resetError && ( )} ); } /** * Fallback for form errors */ export function FormErrorFallback({ error, resetError }: FallbackProps) { return ( Form Submission Error {error?.message || 'Unable to process your form. Please try again.'} {resetError && ( )} ); } /** * Fallback for data visualization/chart errors */ export function ChartErrorFallback({ resetError }: FallbackProps) { return ( Unable to display chart {resetError && ( )} ); } /** * Wrapper component to easily apply error boundary with custom fallback */ interface ErrorBoundaryWrapperProps { children: ReactNode; fallbackType?: 'minimal' | 'component' | 'data' | 'form' | 'chart'; customFallback?: ReactNode; } export function withErrorBoundary

( Component: React.ComponentType

, fallbackType: ErrorBoundaryWrapperProps['fallbackType'] = 'component' ) { return function WithErrorBoundaryWrapper(props: P) { const { ErrorBoundary } = require('./ErrorBoundary'); const getFallback = (error: Error, resetError: () => void) => { switch (fallbackType) { case 'minimal': return ; case 'data': return ; case 'form': return ; case 'chart': return ; case 'component': default: return ; } }; return ( void) => getFallback(error, reset)}> ); }; }