import { Backdrop, IconButton, Modal as MuiModal } from "@mui/material";
import { styled } from "@mui/material/styles";
import { ReactElement, useState } from "react";
import GhostStyledIcon from "../Icon/GhostIcon";
import Paper from "../Paper/Paper";
import CloseIcon from '@mui/icons-material/Close';
const PREFIX = "Modal";
const classes = {
paper: `${PREFIX}-paper`,
backdrop: `${PREFIX}-backdrop`,
};
const StyledMuiModal = styled(MuiModal, {
shouldForwardProp: prop => prop !== "minHeight" && prop !== "maxWidth",
})(({ theme, minHeight, maxWidth }) => ({
[`& .${classes.paper}.Paper-root`]: {
"& .MuiIconButton-sizeSmall": {
padding: "0px",
marginRight: "-9px",
},
"& .modalDismiss": {
marginLeft: "auto",
display: "flex",
},
position: "absolute",
minHeight: minHeight ? minHeight : "auto",
[theme.breakpoints.down("md")]: {
maxWidth: "none",
},
[theme.breakpoints.up("sm")]: {
maxWidth: maxWidth ? maxWidth : "auto",
},
},
[`& .${classes.backdrop}`]: {
"&::before": {
"@supports not ((-webkit-backdrop-filter: none) or (backdrop-filter: none))": {
content: '""',
background:
theme.palette.mode === "light"
? `linear-gradient(180deg, #AFCDE9 1%, #F7FBE7 100%)`
: `linear-gradient(180deg, rgba(8, 15, 53, 0), rgba(0, 0, 10, 0.9)), linear-gradient(333deg, rgba(153, 207, 255, 0.2), rgba(180, 255, 217, 0.08)), radial-gradient(circle at 77% 89%, rgba(125, 163, 169, 0.8), rgba(125, 163, 169, 0) 50%), radial-gradient(circle at 15% 95%, rgba(125, 163, 169, 0.8), rgba(125, 163, 169, 0) 43%), radial-gradient(circle at 65% 23%, rgba(137, 151, 119, 0.4), rgba(137, 151, 119, 0) 70%), radial-gradient(circle at 10% 0%, rgba(187, 211, 204, 0.33), rgba(187,211,204,0) 35%), radial-gradient(circle at 11% 100%, rgba(131, 165, 203, 0.3), rgba(131, 165, 203, 0) 30%)`,
opacity: "1",
filter: "blur(333px)",
height: "100%",
width: "100%",
backgroundColor: theme.palette.background.default,
},
},
"@supports not ((-webkit-backdrop-filter: none) or (backdrop-filter: none))": {
background: "hsla(0,0%,39.2%,.9)",
},
background: "hsla(0,0%,39.2%,.1)",
backdropFilter: "blur(33px)",
"--webkitBackdropFilter": "blur(33px)",
},
}));
function getModalStyle() {
const top = 50;
const left = 50;
return {
top: `${top}%`,
left: `${left}%`,
transform: `translate(-${top}%, -${left}%)`,
};
}
const Modal = ({
open = false,
minHeight = "605px",
maxWidth = "750px",
closePosition = "right",
headerText,
headerContent,
topRight,
topLeft,
...props
}) => {
// getModalStyle is not a pure function, we roll the style only on the first render
const [modalStyle] = useState(getModalStyle);
const closeButton = (
{
if (props.onClose) {
props.onClose(e, "escapeKeyDown");
}
}}
>
);
//modal must have a close position. Close position and topLeft or topRight cant be used for the same position.
const topRightPos = closePosition === "right" ? closeButton : topRight;
const topLeftPos = closePosition === "left" ? closeButton : topLeft;
return (
{props.children}
);
};
export default Modal;