sc-react-ions
Version:
An open source set of React components that implement Ambassador's Design and UX patterns.
87 lines (75 loc) • 3.08 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _colors = require('../../styles/common/colors.css');
var _colors2 = _interopRequireDefault(_colors);
var _functions = require('../../styles/common/functions.css');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var styles = function styles(_ref) {
var showing = _ref.showing,
_ref$position = _ref.position,
position = _ref$position === undefined ? 'bottom' : _ref$position,
_ref$parent = _ref.parent,
parent = _ref$parent === undefined ? { width: 0, height: 0 } : _ref$parent,
_ref$width = _ref.width,
width = _ref$width === undefined ? '300px' : _ref$width;
var caretOffset = '-10px';
var caretCenter = 'calc(50% - 10px)';
var popoverOffset = Math.ceil(position === 'left' || position === 'right' ? parent.width : parent.height) + 20 + 'px';
var popoverTransform = position === 'left' || position === 'right' ? 'translateY(calc(-50% + ' + parent.height / 2 + 'px))' : 'translateX(calc(-50% + ' + parent.width / 2 + 'px))';
var caretPos = {
left: { right: caretOffset, bottom: caretCenter },
right: { left: caretOffset, bottom: caretCenter },
top: { left: caretCenter, bottom: caretOffset },
bottom: { left: caretCenter, top: caretOffset }
};
var popoverPos = {
left: { right: popoverOffset, transform: popoverTransform },
right: { left: popoverOffset, transform: popoverTransform },
top: { bottom: popoverOffset, transform: popoverTransform },
bottom: { top: popoverOffset, transform: popoverTransform }
};
return {
position: 'relative',
'> *': {
margin: 0
},
'.popoverInner': _extends({
backgroundColor: _colors2.default.white,
borderRadius: '3px',
boxShadow: '0 8px 24px 0 rgba(27,37,47,0.5)',
width: width,
boxSizing: 'border-box',
padding: '20px',
position: 'absolute'
}, popoverPos[position], {
transition: 'opacity .25s ease',
visibility: showing ? 'visible' : 'hidden',
opacity: showing ? 1 : 0,
zIndex: _functions.zLayers.alert,
'&:before': _extends({
backgroundColor: _colors2.default.white,
borderRadius: '3px',
content: '" "',
height: '20px',
position: 'absolute',
transform: 'rotate(45deg)',
width: '20px'
}, caretPos[position])
}),
'.popoverContent': {
overflowWrap: 'break-word',
wordWrap: 'break-word',
zIndex: 1,
// Center the text on the popover-content buttons,
// since we can't easily apply the `fill` class to each one
// eg: buttons are implemented in a child component
'button em': {
display: 'block'
}
}
};
};
exports.default = styles;