| import { Box, Typography, Button } from "@mui/material"; | |
| import ErrorOutlineIcon from "@mui/icons-material/ErrorOutline"; | |
| export function ErrorDisplay({ message, onRetry }) { | |
| return ( | |
| <Box | |
| sx={{ | |
| position: "absolute", | |
| top: 0, | |
| left: 0, | |
| right: 0, | |
| bottom: 0, | |
| display: "flex", | |
| flexDirection: "column", | |
| alignItems: "center", | |
| justifyContent: "center", | |
| backgroundColor: "rgba(0, 0, 0, 0.9)", | |
| color: "white", | |
| zIndex: 1000, | |
| gap: 3, | |
| p: 4, | |
| textAlign: "center", | |
| }} | |
| > | |
| <ErrorOutlineIcon sx={{ fontSize: 64, color: "error.main" }} /> | |
| <Typography variant="h5" component="h2"> | |
| An error occurred | |
| </Typography> | |
| <Typography variant="body1" color="text.secondary" sx={{ maxWidth: 600 }}> | |
| {message || | |
| "The storyteller is temporarily unavailable. Please try again in a few moments..."} | |
| </Typography> | |
| <Button | |
| variant="contained" | |
| color="primary" | |
| onClick={onRetry} | |
| sx={{ mt: 2 }} | |
| > | |
| Retry | |
| </Button> | |
| </Box> | |
| ); | |
| } | |