UNPKG

wix-style-react

Version:
276 lines (224 loc) • 12.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _context = require("../WixStyleReactProvider/context"); var _Content = _interopRequireDefault(require("./components/Content")); var _Layout = require("../Layout"); var _Proportion = _interopRequireDefault(require("../Proportion")); var _constants = require("./constants"); var _MarketingLayoutSt = require("./MarketingLayout.st.css"); var _colorsSt = require("../Foundation/stylable/colors.st.css"); var _deprecationLog = _interopRequireDefault(require("../utils/deprecationLog")); var _cellSpansBySize, _imagePlaceholderAspe; function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var cellSpansBySize = (_cellSpansBySize = {}, (0, _defineProperty2["default"])(_cellSpansBySize, _constants.SIZES.tiny, { image: 4, content: 8 }), (0, _defineProperty2["default"])(_cellSpansBySize, _constants.SIZES.small, { image: 3, spacer: 1, content: 8 }), (0, _defineProperty2["default"])(_cellSpansBySize, _constants.SIZES.medium, { image: 4, spacer: 1, content: 7 }), (0, _defineProperty2["default"])(_cellSpansBySize, _constants.SIZES.large, { image: 5, spacer: 1, content: 6 }), _cellSpansBySize); var imagePlaceholderAspectRatioBySize = (_imagePlaceholderAspe = {}, (0, _defineProperty2["default"])(_imagePlaceholderAspe, _constants.SIZES.tiny, 1), (0, _defineProperty2["default"])(_imagePlaceholderAspe, _constants.SIZES.small, 1), (0, _defineProperty2["default"])(_imagePlaceholderAspe, _constants.SIZES.medium, 282 / 188), (0, _defineProperty2["default"])(_imagePlaceholderAspe, _constants.SIZES.large, 360 / 240), _imagePlaceholderAspe); /** Marketing layout is a layout designed to promote new features or display first time visit. * Component has title, description, action and illustration areas. */ var MarketingLayout = /*#__PURE__*/function (_React$PureComponent) { (0, _inherits2["default"])(MarketingLayout, _React$PureComponent); var _super = _createSuper(MarketingLayout); function MarketingLayout() { var _this; (0, _classCallCheck2["default"])(this, MarketingLayout); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderSpacerCell", function (span) { return /*#__PURE__*/_react["default"].createElement(_Layout.Cell, { key: "spacer", span: span }); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderImagePlaceholder", function () { var size = _this.props.size; return /*#__PURE__*/_react["default"].createElement(_Proportion["default"], { aspectRatio: imagePlaceholderAspectRatioBySize[size] }, /*#__PURE__*/_react["default"].createElement("div", { className: _MarketingLayoutSt.classes.imagePlaceholder })); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderImageCell", function (span) { var _this$props = _this.props, image = _this$props.image, imageBackgroundColor = _this$props.imageBackgroundColor; return /*#__PURE__*/_react["default"].createElement(_Layout.Cell, { key: "image", span: span }, /*#__PURE__*/_react["default"].createElement("div", { className: _MarketingLayoutSt.classes.imageWrapper }, imageBackgroundColor && /*#__PURE__*/_react["default"].createElement("div", { className: _MarketingLayoutSt.classes.imageBackground, style: { backgroundColor: _colorsSt.stVars[imageBackgroundColor] || imageBackgroundColor } }), /*#__PURE__*/_react["default"].createElement("div", { className: _MarketingLayoutSt.classes.imageContainer }, typeof image === 'string' ? /*#__PURE__*/_react["default"].createElement("img", { src: image, width: "100%" }) : image || _this._renderImagePlaceholder()))); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderContentCell", function (span) { var _this$props2 = _this.props, size = _this$props2.size, actions = _this$props2.actions, title = _this$props2.title, description = _this$props2.description, badge = _this$props2.badge, hiddenBadge = _this$props2.hiddenBadge; return /*#__PURE__*/_react["default"].createElement(_Layout.Cell, { key: "content", span: span }, badge && !hiddenBadge && /*#__PURE__*/_react["default"].createElement("div", { className: _MarketingLayoutSt.classes.badge }, badge), /*#__PURE__*/_react["default"].createElement(_Content["default"], { size: size, actions: actions, title: title, description: description, badge: badge })); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderContent", function () { var _this$props3 = _this.props, direction = _this$props3.direction, size = _this$props3.size; var isVertical = direction === _constants.DIRECTIONS.vertical; return /*#__PURE__*/_react["default"].createElement(_Layout.Layout, { gap: size === _constants.SIZES.tiny ? '24px' : '30px' }, isVertical ? _this._renderVerticalCells() : _this._renderHorizontalCells()); }); return _this; } (0, _createClass2["default"])(MarketingLayout, [{ key: "_renderHorizontalCells", value: function _renderHorizontalCells() { var _this$props4 = this.props, inverted = _this$props4.inverted, size = _this$props4.size; var _cellSpansBySize$size = cellSpansBySize[size], image = _cellSpansBySize$size.image, spacer = _cellSpansBySize$size.spacer, content = _cellSpansBySize$size.content; var contentCell = this._renderContentCell(content); var spacerCell = size !== _constants.SIZES.tiny && this._renderSpacerCell(spacer); var imageCell = this._renderImageCell(image); return inverted ? [imageCell, contentCell, spacerCell] : [contentCell, spacerCell, imageCell]; } }, { key: "_renderVerticalCells", value: function _renderVerticalCells() { var _this$props5 = this.props, inverted = _this$props5.inverted, image = _this$props5.image; var imageCell = image && this._renderImageCell(12); var contentCell = this._renderContentCell(12); return inverted ? [contentCell, imageCell] : [imageCell, contentCell]; } }, { key: "render", value: function render() { var _this2 = this; var _this$props6 = this.props, size = _this$props6.size, badge = _this$props6.badge, hiddenBadge = _this$props6.hiddenBadge, alignItems = _this$props6.alignItems, inverted = _this$props6.inverted, actions = _this$props6.actions, dataHook = _this$props6.dataHook, imageBackgroundColor = _this$props6.imageBackgroundColor, direction = _this$props6.direction; if (size === _constants.SIZES.large) { (0, _deprecationLog["default"])("<MarketingLayout/> size large wil be deprecated in the next major version"); } return /*#__PURE__*/_react["default"].createElement(_context.WixStyleReactContext.Consumer, null, function (_ref) { var reducedSpacingAndImprovedLayout = _ref.reducedSpacingAndImprovedLayout; return /*#__PURE__*/_react["default"].createElement("div", { className: (0, _MarketingLayoutSt.st)(_MarketingLayoutSt.classes.root, { size: size, badge: !!badge, hiddenBadge: hiddenBadge, alignItems: alignItems, inverted: inverted, withActions: !!actions, withImageBackground: !!imageBackgroundColor, reducedSpacingAndImprovedLayout: reducedSpacingAndImprovedLayout, direction: direction }), "data-hook": dataHook }, _this2._renderContent()); }); } }]); return MarketingLayout; }(_react["default"].PureComponent); (0, _defineProperty2["default"])(MarketingLayout, "displayName", 'MarketingLayout'); (0, _defineProperty2["default"])(MarketingLayout, "propTypes", { /** Applies a data-hook HTML attribute that can be used in the tests. */ dataHook: _propTypes["default"].string, /** Accepts image URL or a custom element to be displayed on the side of content. */ image: _propTypes["default"].node, /** Specifies image area background color. Can be a keyword from color palette or any supported CSS color value (HEX, RGB, etc.). */ imageBackgroundColor: _propTypes["default"].string, /** * Controls the size of the marketing layout.<br/> * Large size will be deprecated in the next major version. */ size: _propTypes["default"].oneOf(['tiny', 'small', 'medium', 'large']), /** Controls content direction. */ direction: _propTypes["default"].oneOf(['horizontal', 'vertical']), /** Controls the vertical alignment of the content. */ alignItems: _propTypes["default"].oneOf(['center', 'stretch']), /** Flips content layout. If true, image will be displayed on the left side of the content. */ inverted: _propTypes["default"].bool, /** Sets marketing layout actions. Accepts single or multiple interactive components. Most commonly contain `<Button/>` or `<TextButton/>`. */ actions: _propTypes["default"].node, /** Sets the marketing layout title. Accepts text string or a custom element. */ title: _propTypes["default"].node, /** Sets the marketing layout description. Accepts text string or a custom element. */ description: _propTypes["default"].node, /** Adds a container for a `<Badge/>` component at the top left corner. Affect component height. */ badge: _propTypes["default"].node, /** Specifies whether the badge is hidden. Can be used to add additional vertical spacing, if no badge is given. */ hiddenBadge: _propTypes["default"].bool }); (0, _defineProperty2["default"])(MarketingLayout, "defaultProps", { size: 'small', alignItems: 'center', inverted: false, direction: 'horizontal', hiddenBadge: false }); var _default = MarketingLayout; exports["default"] = _default;