Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| 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; | |