import { forwardRef } from 'react'; import { ExclamationTriangleIcon, InformationCircleIcon } from '@heroicons/react/24/solid'; import { getErrorDetails } from '../utils/errorCodeHelpers'; interface ErrorPopoverProps { machineError?: number; isPairingError: boolean; errorMessage?: string | null; pyodideError?: string | null; } export const ErrorPopover = forwardRef( ({ machineError, isPairingError, errorMessage, pyodideError }, ref) => { const errorDetails = getErrorDetails(machineError); const isPairingErr = isPairingError; const errorMsg = pyodideError || errorMessage || ''; const isInfo = isPairingErr || errorDetails?.isInformational; const bgColor = isInfo ? 'bg-info-50 dark:bg-info-900/95 border-info-600 dark:border-info-500' : 'bg-danger-50 dark:bg-danger-900/95 border-danger-600 dark:border-danger-500'; const iconColor = isInfo ? 'text-info-600 dark:text-info-400' : 'text-danger-600 dark:text-danger-400'; const textColor = isInfo ? 'text-info-900 dark:text-info-200' : 'text-danger-900 dark:text-danger-200'; const descColor = isInfo ? 'text-info-800 dark:text-info-300' : 'text-danger-800 dark:text-danger-300'; const listColor = isInfo ? 'text-info-700 dark:text-info-300' : 'text-danger-700 dark:text-danger-300'; const Icon = isInfo ? InformationCircleIcon : ExclamationTriangleIcon; const title = errorDetails?.title || (isPairingErr ? 'Pairing Required' : 'Error'); return (

{title}

{errorDetails?.description || errorMsg}

{errorDetails?.solutions && errorDetails.solutions.length > 0 && ( <>

{isInfo ? 'Steps:' : 'How to Fix:'}

    {errorDetails.solutions.map((solution, index) => (
  1. {solution}
  2. ))}
)} {machineError !== undefined && !errorDetails?.isInformational && (

Error Code: 0x{machineError.toString(16).toUpperCase().padStart(2, '0')}

)}
); } ); ErrorPopover.displayName = 'ErrorPopover';