|
import React from "react"; |
|
import { Box, Tooltip, Portal, Backdrop } from "@mui/material"; |
|
import InfoOutlinedIcon from "@mui/icons-material/InfoOutlined"; |
|
|
|
const InfoIconWithTooltip = ({ tooltip, iconProps = {}, sx = {} }) => { |
|
const [open, setOpen] = React.useState(false); |
|
|
|
return ( |
|
<> |
|
<Tooltip |
|
title={tooltip} |
|
arrow |
|
placement="top" |
|
open={open} |
|
onOpen={() => setOpen(true)} |
|
onClose={() => setOpen(false)} |
|
componentsProps={{ |
|
tooltip: { |
|
sx: { |
|
bgcolor: "rgba(33, 33, 33, 0.95)", |
|
padding: "12px 16px", |
|
maxWidth: "none !important", |
|
width: "auto", |
|
minWidth: "200px", |
|
fontSize: "0.875rem", |
|
lineHeight: 1.5, |
|
position: "relative", |
|
zIndex: 1501, |
|
"& .MuiTooltip-arrow": { |
|
color: "rgba(33, 33, 33, 0.95)", |
|
}, |
|
}, |
|
}, |
|
popper: { |
|
sx: { |
|
zIndex: 1501, |
|
maxWidth: "min(600px, 90vw) !important", |
|
'&[data-popper-placement*="bottom"] .MuiTooltip-tooltip': { |
|
marginTop: "10px", |
|
}, |
|
'&[data-popper-placement*="top"] .MuiTooltip-tooltip': { |
|
marginBottom: "10px", |
|
}, |
|
}, |
|
}, |
|
}} |
|
> |
|
<Box |
|
component="span" |
|
sx={{ |
|
opacity: 0.5, |
|
display: "flex", |
|
alignItems: "center", |
|
cursor: "help", |
|
"&:hover": { opacity: 0.8 }, |
|
position: "relative", |
|
zIndex: open ? 1502 : "auto", |
|
...sx, |
|
}} |
|
> |
|
<InfoOutlinedIcon |
|
sx={{ |
|
fontSize: "1rem", |
|
...iconProps.sx, |
|
}} |
|
{...iconProps} |
|
/> |
|
</Box> |
|
</Tooltip> |
|
{open && ( |
|
<Portal> |
|
<Backdrop |
|
open={true} |
|
sx={{ |
|
zIndex: 1500, |
|
backgroundColor: "rgba(0, 0, 0, 0.5)", |
|
transition: "opacity 0.2s ease", |
|
pointerEvents: "none", |
|
}} |
|
/> |
|
</Portal> |
|
)} |
|
</> |
|
); |
|
}; |
|
|
|
export default InfoIconWithTooltip; |
|
|