UNPKG

2.75 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5exports.__esModule = true;
6exports["default"] = void 0;
7
8var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
12var _react = require("react");
13
14var _core = require("@emotion/core");
15
16var _Flex = _interopRequireDefault(require("../Flex"));
17
18var _Box = _interopRequireDefault(require("../Box"));
19
20/** @jsx jsx */
21// TODO: Reduce complexity by deprecating isInline and isReversed prop
22var Stack = (0, _react.forwardRef)(function (_ref, ref) {
23 var direction = _ref.direction,
24 _ref$isInline = _ref.isInline,
25 isInline = _ref$isInline === void 0 ? false : _ref$isInline,
26 _ref$isReversed = _ref.isReversed,
27 isReversed = _ref$isReversed === void 0 ? false : _ref$isReversed,
28 children = _ref.children,
29 align = _ref.align,
30 justify = _ref.justify,
31 _ref$spacing = _ref.spacing,
32 spacing = _ref$spacing === void 0 ? 2 : _ref$spacing,
33 shouldWrapChildren = _ref.shouldWrapChildren,
34 rest = (0, _objectWithoutPropertiesLoose2["default"])(_ref, ["direction", "isInline", "isReversed", "children", "align", "justify", "spacing", "shouldWrapChildren"]);
35
36 var _isReversed = isReversed || direction && direction.endsWith("reverse");
37
38 var _isInline = isInline || direction && direction.startsWith("row");
39
40 var _direction;
41
42 if (_isInline) {
43 _direction = "row";
44 }
45
46 if (_isReversed) {
47 _direction = isInline ? "row-reverse" : "column-reverse";
48 }
49
50 if (direction) {
51 _direction = direction;
52 }
53
54 if (!_isInline && !_isReversed && !direction) {
55 _direction = "column";
56 }
57
58 var validChildrenArray = _react.Children.toArray(children).filter(_react.isValidElement);
59
60 return (0, _core.jsx)(_Flex["default"], (0, _extends2["default"])({
61 align: align,
62 justify: justify,
63 direction: _direction
64 }, rest, {
65 ref: ref
66 }), validChildrenArray.map(function (child, index) {
67 var _ref2, _ref3;
68
69 var isLastChild = validChildrenArray.length === index + 1;
70 var spacingProps = _isInline ? (_ref2 = {}, _ref2[_isReversed ? "ml" : "mr"] = isLastChild ? null : spacing, _ref2) : (_ref3 = {}, _ref3[_isReversed ? "mt" : "mb"] = isLastChild ? null : spacing, _ref3);
71
72 if (shouldWrapChildren) {
73 return (0, _core.jsx)(_Box["default"], (0, _extends2["default"])({
74 d: "inline-block"
75 }, spacingProps, {
76 key: "stack-box-wrapper-" + index
77 }), child);
78 }
79
80 return (0, _react.cloneElement)(child, spacingProps);
81 }));
82});
83var _default = Stack;
84exports["default"] = _default;
\No newline at end of file