@age/quantum
Version:
Catho react components
188 lines (150 loc) • 9.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _reactDom = _interopRequireDefault(require("react-dom"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _theme = require("../../shared/theme");
var _arrowProperties = _interopRequireDefault(require("../arrowProperties"));
var _Button = _interopRequireDefault(require("../../Button"));
var _shared = require("../../shared");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _extends() { _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; }; return _extends.apply(this, arguments); }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var _getColors = function _getColors(_ref) {
var skin = _ref.skin,
_ref$theme$components = _ref.theme.components.popover.skins[skin],
text = _ref$theme$components.text,
background = _ref$theme$components.background,
inverted = _ref.inverted;
return "\n background-color: ".concat(inverted ? text : background, "\n color: ").concat(inverted ? background : text, "\n");
};
var _getTextColor = function _getTextColor(_ref2) {
var skin = _ref2.skin,
_ref2$theme$component = _ref2.theme.components.popover.skins[skin],
background = _ref2$theme$component.background,
text = _ref2$theme$component.text,
inverted = _ref2.inverted;
return "color: ".concat(inverted ? background : text, ";");
};
var PopoverContent = _styledComponents.default.div.withConfig({
displayName: "Content__PopoverContent",
componentId: "sc-4xwr0n-0"
})(["", ";align-items:center;display:flex;border-radius:4px;font-size:16px;", " position:absolute;line-height:0;transition:opacity 0.2s ease-in-out,visibility 0.2s ease-in-out;z-index:100;&:before{", ";}", ""], (0, _shared.shadow)(5), function (_ref3) {
var xsmall = _ref3.theme.spacing.xsmall;
return "padding: ".concat(xsmall, "px;");
}, _arrowProperties.default, _getColors);
var CloseButton = (0, _styledComponents.default)(_Button.default.Icon).attrs({
icon: 'close'
}).withConfig({
displayName: "Content__CloseButton",
componentId: "sc-4xwr0n-1"
})(["", " display:inherit;height:auto;", " min-height:auto;opacity:0.8;padding:0;transition:opacity 0.4s ease;width:auto;:hover{background:none;opacity:1;", "}"], _getTextColor, function (_ref4) {
var medium = _ref4.theme.spacing.medium;
return "margin-left: ".concat(medium, "px;");
}, _getTextColor);
var PopoverChildren = _styledComponents.default.div.withConfig({
displayName: "Content__PopoverChildren",
componentId: "sc-4xwr0n-2"
})([""]);
var Content =
/*#__PURE__*/
function (_Component) {
_inherits(Content, _Component);
function Content(props) {
var _this;
_classCallCheck(this, Content);
_this = _possibleConstructorReturn(this, _getPrototypeOf(Content).call(this, props));
_this.wrapper = document.createElement('section');
return _this;
}
_createClass(Content, [{
key: "componentDidMount",
value: function componentDidMount() {
document.body.appendChild(this.wrapper);
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
document.body.removeChild(this.wrapper);
}
}, {
key: "render",
value: function render() {
var _this2 = this;
var _this$props = this.props,
placement = _this$props.placement,
children = _this$props.children,
onPopoverClose = _this$props.onPopoverClose,
theme = _this$props.theme,
skin = _this$props.skin,
inverted = _this$props.inverted,
rest = _objectWithoutProperties(_this$props, ["placement", "children", "onPopoverClose", "theme", "skin", "inverted"]);
return _reactDom.default.createPortal(_react.default.createElement(PopoverContent, _extends({
theme: theme,
inverted: inverted,
placement: placement,
skin: skin,
ref: function ref(element) {
_this2.innerContentRef = element;
}
}, rest), _react.default.createElement(PopoverChildren, null, children), _react.default.createElement(CloseButton, {
skin: skin,
theme: theme,
inverted: inverted,
onClick: onPopoverClose
})), this.wrapper);
}
}]);
return Content;
}(_react.Component);
CloseButton.displayName = 'CloseButton';
PopoverChildren.displayName = 'PopoverChildren';
Content.propTypes = {
children: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.node), _propTypes.default.node]).isRequired,
inverted: _propTypes.default.bool,
placement: _propTypes.default.oneOf(['top', 'right', 'bottom', 'left']),
onPopoverClose: _propTypes.default.func,
skin: _propTypes.default.oneOf(['neutral', 'primary', 'success', 'warning', 'error']),
theme: _propTypes.default.shape({
colors: _propTypes.default.object,
spacing: _propTypes.default.object,
breakpoints: _propTypes.default.object,
components: _propTypes.default.shape({
popover: _propTypes.default.object,
button: _propTypes.default.object
})
})
};
Content.defaultProps = {
inverted: false,
placement: 'top',
onPopoverClose: function onPopoverClose() {},
skin: 'neutral',
theme: {
colors: _theme.colors,
spacing: _theme.spacing,
breakpoints: _theme.breakpoints,
components: {
popover: _theme.components.popover,
button: _theme.components.button
}
}
};
var _default = Content;
exports.default = _default;