import React, { useState } from 'react'; import { Alert, AlertTitle, IconButton, Collapse } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import WarningIcon from '@mui/icons-material/Warning'; import { useCopilotKitHealth } from '../../hooks/useCopilotKitHealth'; interface CopilotKitDegradedBannerProps { /** * Position of the banner * @default 'top' */ position?: 'top' | 'bottom'; /** * Whether the banner is dismissible * @default true */ dismissible?: boolean; } /** * Banner component that displays when CopilotKit is unavailable * Non-intrusive notification that chat is unavailable but app continues to work */ export const CopilotKitDegradedBanner: React.FC = ({ position = 'top', dismissible = true, }) => { const { isAvailable, errorMessage, isChecking } = useCopilotKitHealth(); const [dismissed, setDismissed] = useState(false); // Don't show if CopilotKit is available, checking, or dismissed if (isAvailable || isChecking || dismissed) { return null; } const handleDismiss = () => { setDismissed(true); }; return ( } action={ dismissible ? ( ) : null } sx={{ position: 'fixed', [position]: 0, left: 0, right: 0, zIndex: 1300, // Above most content but below modals borderRadius: 0, // Full width banner boxShadow: 2, }} > Chat Unavailable {errorMessage || 'CopilotKit service is currently unavailable. You can still use all features with manual controls.'} ); }; export default CopilotKitDegradedBanner;