@krowdy-ui/views
Version:
React components that implement Google's Material Design.
130 lines (124 loc) • 3.99 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import clsx from 'clsx';
import { Card, makeStyles, Popper } from '@krowdy-ui/core';
var arrowGenerator = function arrowGenerator(spacing) {
return {
'&[x-placement*="bottom"] $arrow': {
left: 0,
marginLeft: spacing(1.5),
marginRight: spacing(1.5),
marginTop: spacing(-1),
top: 0
},
'&[x-placement*="left"] $arrow': {
marginBottom: spacing(1.5),
marginRight: spacing(-1),
marginTop: spacing(1.5),
right: 0
},
'&[x-placement*="right"] $arrow': {
left: 0,
marginBottom: spacing(1.5),
marginLeft: spacing(-1),
marginTop: spacing(1.5)
},
'&[x-placement*="top"] $arrow': {
bottom: 0,
left: 0,
marginBottom: spacing(-1),
marginLeft: spacing(1.5),
marginRight: spacing(1.5)
}
};
};
var useStyles = makeStyles(function (_ref) {
var palette = _ref.palette,
spacing = _ref.spacing;
return {
arrow: {
background: function background(_ref2) {
var _background = _ref2.background;
return _background && palette[_background] && palette[_background].main ? palette[_background].main : palette.primary.main;
},
height: 20,
position: 'absolute',
transform: 'rotate(45deg)',
width: 20
},
backgroundCard: {
background: function background(_ref3) {
var _background2 = _ref3.background;
return _background2 && palette[_background2] && palette[_background2].main ? palette[_background2].main : palette.primary.main;
}
},
poperArrow: arrowGenerator(spacing),
textColor: {
color: palette.secondary[10]
},
'tooltipPlacement-bottom': {
marginTop: spacing(1),
transformOrigin: 'center top'
},
'tooltipPlacement-left': {
marginRight: spacing(1),
transformOrigin: 'right center'
},
'tooltipPlacement-right': {
marginLeft: spacing(1),
transformOrigin: 'left center'
},
'tooltipPlacement-top': {
marginBottom: spacing(1),
transformOrigin: 'center bottom'
}
};
}, {
name: 'BackgroundAlert'
});
var BackgroundAlert = function BackgroundAlert(_ref4) {
var children = _ref4.children,
_ref4$color = _ref4.color,
color = _ref4$color === void 0 ? 'primary' : _ref4$color,
anchorEl = _ref4.anchorEl,
_ref4$placement = _ref4.placement,
placement = _ref4$placement === void 0 ? 'bottom' : _ref4$placement,
_ref4$arrow = _ref4.arrow,
arrow = _ref4$arrow === void 0 ? false : _ref4$arrow,
className = _ref4.className;
var classes = useStyles({
background: color
});
var _useState = useState(null),
_useState2 = _slicedToArray(_useState, 2),
arrowRef = _useState2[0],
setArrowRef = _useState2[1];
return /*#__PURE__*/React.createElement(Popper, {
anchorEl: anchorEl,
className: clsx(className, classes.poperArrow, classes["tooltipPlacement-".concat(placement.split('-')[0])]),
open: Boolean(anchorEl),
placement: placement,
popperOptions: {
modifiers: {
arrow: {
element: arrowRef,
enabled: Boolean(arrowRef)
}
}
}
}, /*#__PURE__*/React.createElement(Card, {
className: clsx(classes.backgroundCard, classes.textColor)
}, arrow ? /*#__PURE__*/React.createElement("span", {
className: classes.arrow,
ref: setArrowRef
}) : null, children));
};
process.env.NODE_ENV !== "production" ? BackgroundAlert.propTypes = {
anchorEl: PropTypes.oneOfType([PropTypes.element, PropTypes.any, PropTypes.func]),
arrow: PropTypes.bool,
className: PropTypes.oneOfType([PropTypes.string, PropTypes.any]),
color: PropTypes.oneOf(['default', 'inherit', 'primary', 'secondary', 'krowdy', 'error']),
placement: PropTypes.string
} : void 0;
export default BackgroundAlert;