UNPKG

@lote-design-system/marketing-blocks

Version:
248 lines (201 loc) 9.99 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.Banner2 = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _styledComponents = _interopRequireWildcard(require("styled-components")); var _reactTransitionGroup = require("react-transition-group"); var _icons = require("@lote-design-system/icons"); var _core = require("@lote-design-system/core"); var _lodash = require("lodash"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } // => Dependent styled-components // Our main component depends upon the following styled-components var BannerWrapper = _styledComponents["default"].div.withConfig({ displayName: "Banner2__BannerWrapper", componentId: "va9z18-0" })(["", " ", ";position:fixed;z-index:1030;opacity:0;transition:opacity ", "s linear;"], function (_ref) { var status = _ref.status; if (status === 'entered') { return (0, _styledComponents.css)(["&{opacity:1;}"]); } else if (status === 'exited') { return (0, _styledComponents.css)(["&{display:none;}"]); } }, function (_ref2) { var fixed = _ref2.fixed; if (fixed === 'top') { return (0, _styledComponents.css)(["position:fixed;top:0;right:0;left:0;"]); } else if (fixed === 'bottom') { return (0, _styledComponents.css)(["right:0;bottom:0;left:0;"]); } else { return (0, _styledComponents.css)([""]); } }, function (_ref3) { var timeout = _ref3.timeout; return timeout / 1000; }); var Banner = _styledComponents["default"].div.withConfig({ displayName: "Banner2__Banner", componentId: "va9z18-1" })(["background-color:", ";padding:16px 24px;"], function (_ref4) { var colors = _ref4.theme.colors; return colors.primary; }); var BannerContent = _styledComponents["default"].div.withConfig({ displayName: "Banner2__BannerContent", componentId: "va9z18-2" })(["", "{display:flex;align-items:center;justify-content:space-between;}"], function (_ref5) { var theme = _ref5.theme; return theme.mediaQueries.lg; }); var BannerSide1 = _styledComponents["default"].div.withConfig({ displayName: "Banner2__BannerSide1", componentId: "va9z18-3" })(["display:flex;align-items:center;margin-bottom:16px;", "{justify-content:center;}", "{justify-content:flex-start;margin-bottom:0;}"], function (_ref6) { var theme = _ref6.theme; return theme.mediaQueries.md; }, function (_ref7) { var theme = _ref7.theme; return theme.mediaQueries.lg; }); var BannerIconWrapper = _styledComponents["default"].div.withConfig({ displayName: "Banner2__BannerIconWrapper", componentId: "va9z18-4" })(["margin-right:16px;"]); var BannerSvgWrapper = _styledComponents["default"].div.withConfig({ displayName: "Banner2__BannerSvgWrapper", componentId: "va9z18-5" })(["width:42px;height:42px;background-color:", ";color:#fff;border-radius:0.25rem;display:inline-flex;justify-content:center;align-items:center;> svg{width:24px;height:24px;}"], function (_ref8) { var theme = _ref8.theme; return theme.palettes.primary[6]; }); var BannerText = _styledComponents["default"].p.withConfig({ displayName: "Banner2__BannerText", componentId: "va9z18-6" })(["font-size:16px;margin-bottom:0;color:#fff;"]); // Side 2 var BannerSide2 = _styledComponents["default"].div.withConfig({ displayName: "Banner2__BannerSide2", componentId: "va9z18-7" })(["", "{text-align:center;}", "{display:flex;align-items:center;}"], function (_ref9) { var theme = _ref9.theme; return theme.mediaQueries.md; }, function (_ref10) { var theme = _ref10.theme; return theme.mediaQueries.lg; }); var BannerLearnLink = (0, _styledComponents["default"])(_core.Button).withConfig({ displayName: "Banner2__BannerLearnLink", componentId: "va9z18-8" })(["font-weight:500;margin-right:16px;"]); var BannerCloseButton = (0, _styledComponents["default"])(_core.Button).withConfig({ displayName: "Banner2__BannerCloseButton", componentId: "va9z18-9" })(["width:46px;height:46px;padding:4px;border-radius:50%;font-size:18px;"]); // <= End Dependent styled-components var TransitionPropTypeKeys = ['in', 'mountOnEnter', 'unmountOnExit', 'appear', 'enter', 'exit', 'timeout', 'onEnter', 'onEntering', 'onEntered', 'onExit', 'onExiting', 'onExited']; var propTypes = { /** If the banner is currently showing or not (default: true) */ "in": _propTypes["default"].bool.isRequired, /** The icon will appear on the left side of the Banner. */ icon: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].node]), /** The link for the Banner. */ link: _propTypes["default"].shape({ href: _propTypes["default"].string.isRequired, text: _propTypes["default"].string.isRequired, variation: _propTypes["default"].string.isRequired, color: _propTypes["default"].string }), /** The text for the Banner. */ text: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].node]).isRequired, /** Position the banner at the top/bottom of the viewport. The Banner will use position: fixed, meaning they’re pulled from the normal flow of the DOM. */ fixed: _propTypes["default"].oneOf(['top', 'bottom']) }; var defaultProps = _objectSpread(_objectSpread({}, _reactTransitionGroup.Transition.defaultProps), {}, { /* Transition on the first mount set appear to true. */ appear: true, /* Enable enter transitions. */ enter: true, /* Enable exit transitions. */ exit: true, /** Controls if the banner is currently showing or not (default: true) */ "in": true, /* The duration of the transition, in milliseconds. */ timeout: 900, icon: /*#__PURE__*/_react["default"].createElement(_icons.Icon, { name: "download" }), link: { href: '/', text: 'Learn more', variation: 'white' }, text: 'Big news! We’ re excited to announce a brand new product.', fixed: 'bottom' }); /** * Returns the JSX or null for the icon. * @param icon {*} - The icon will React.element or a string * @return {null|*} - Returns the JSX or null */ var renderIcon = function renderIcon(icon) { if (_react["default"].isValidElement(icon)) { return icon; } else if (typeof icon === 'string' && icon.length > 0) { return /*#__PURE__*/_react["default"].createElement(_icons.Icon, { name: icon }); } else { return null; } }; var Banner2 = function Banner2(props) { var show = props["in"], icon = props.icon, link = props.link, text = props.text, fixed = props.fixed, timeout = props.timeout, attributes = (0, _objectWithoutProperties2["default"])(props, ["in", "icon", "link", "text", "fixed", "timeout"]); var _useState = (0, _react.useState)(show), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), fadeIn = _useState2[0], setFadeIn = _useState2[1]; var closeBanner = function closeBanner() { return setFadeIn(false); }; // pick Transition props var transitionProps = (0, _lodash.pick)(attributes, TransitionPropTypeKeys); // Remove Transition props var attr = (0, _lodash.omit)(attributes, TransitionPropTypeKeys); return /*#__PURE__*/_react["default"].createElement(_reactTransitionGroup.Transition, (0, _extends2["default"])({}, transitionProps, { "in": fadeIn, timeout: timeout }), function (status) { return /*#__PURE__*/_react["default"].createElement(BannerWrapper, (0, _extends2["default"])({ status: status, fixed: fixed, timeout: timeout }, attr), /*#__PURE__*/_react["default"].createElement(Banner, null, /*#__PURE__*/_react["default"].createElement(BannerContent, null, /*#__PURE__*/_react["default"].createElement(BannerSide1, null, icon && /*#__PURE__*/_react["default"].createElement(BannerIconWrapper, null, /*#__PURE__*/_react["default"].createElement(BannerSvgWrapper, null, renderIcon(icon))), /*#__PURE__*/_react["default"].createElement(BannerText, null, text)), /*#__PURE__*/_react["default"].createElement(BannerSide2, null, link && /*#__PURE__*/_react["default"].createElement(BannerLearnLink, { href: link.href, color: link.color, variation: link.variation }, link.text), /*#__PURE__*/_react["default"].createElement(BannerCloseButton, { color: "primary", variation: "fill", type: "button", onClick: closeBanner }, /*#__PURE__*/_react["default"].createElement(_icons.Icon, { name: "x" })))))); }); }; exports.Banner2 = Banner2; Banner2.propTypes = propTypes; Banner2.defaultProps = defaultProps;