@lote-design-system/marketing-blocks
Version:
248 lines (201 loc) • 9.99 kB
JavaScript
"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;