1 | 'use strict';
|
2 |
|
3 | exports.__esModule = true;
|
4 |
|
5 | var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
6 |
|
7 | var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
8 |
|
9 | var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
|
10 |
|
11 | var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
|
12 |
|
13 | var _inherits2 = require('babel-runtime/helpers/inherits');
|
14 |
|
15 | var _inherits3 = _interopRequireDefault(_inherits2);
|
16 |
|
17 | var _extends2 = require('babel-runtime/helpers/extends');
|
18 |
|
19 | var _extends3 = _interopRequireDefault(_extends2);
|
20 |
|
21 | var _typeof2 = require('babel-runtime/helpers/typeof');
|
22 |
|
23 | var _typeof3 = _interopRequireDefault(_typeof2);
|
24 |
|
25 | var _class, _temp;
|
26 |
|
27 | var _react = require('react');
|
28 |
|
29 | var _react2 = _interopRequireDefault(_react);
|
30 |
|
31 | var _propTypes = require('prop-types');
|
32 |
|
33 | var _propTypes2 = _interopRequireDefault(_propTypes);
|
34 |
|
35 | var _classnames = require('classnames');
|
36 |
|
37 | var _classnames2 = _interopRequireDefault(_classnames);
|
38 |
|
39 | var _configProvider = require('../config-provider');
|
40 |
|
41 | var _configProvider2 = _interopRequireDefault(_configProvider);
|
42 |
|
43 | var _util = require('../util');
|
44 |
|
45 | var _createStyle = require('../responsive-grid/create-style');
|
46 |
|
47 | var _createStyle2 = _interopRequireDefault(_createStyle);
|
48 |
|
49 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
50 |
|
51 | var pickOthers = _util.obj.pickOthers;
|
52 |
|
53 |
|
54 | var createChildren = function createChildren(children, _ref) {
|
55 | var spacing = _ref.spacing,
|
56 | direction = _ref.direction,
|
57 | wrap = _ref.wrap,
|
58 | device = _ref.device;
|
59 |
|
60 | var array = _react2.default.Children.toArray(children);
|
61 | if (!children) {
|
62 | return null;
|
63 | }
|
64 |
|
65 | return array.map(function (child, index) {
|
66 | var spacingMargin = {};
|
67 |
|
68 | spacingMargin = (0, _createStyle.getChildMargin)(spacing);
|
69 |
|
70 | if (!wrap) {
|
71 |
|
72 | var isNone = [index === 0, index === array.length - 1];
|
73 | var props = direction === 'row' ? ['marginLeft', 'marginRight'] : ['marginTop', 'marginBottom'];
|
74 |
|
75 | ['marginTop', 'marginRight', 'marginBottom', 'marginLeft'].forEach(function (prop) {
|
76 | if (prop in spacingMargin && props.indexOf(prop) === -1) {
|
77 | spacingMargin[prop] = 0;
|
78 | }
|
79 |
|
80 | props.forEach(function (key, i) {
|
81 | if (key in spacingMargin && isNone[i]) {
|
82 | spacingMargin[key] = 0;
|
83 | }
|
84 | });
|
85 | });
|
86 | }
|
87 |
|
88 | if (_react2.default.isValidElement(child)) {
|
89 | var propsMargin = child.props.margin;
|
90 |
|
91 | var childPropsMargin = (0, _createStyle.getMargin)(propsMargin);
|
92 | var gridProps = {};
|
93 |
|
94 | if (['function', 'object'].indexOf((0, _typeof3.default)(child.type)) > -1 && child.type._typeMark === 'responsive_grid') {
|
95 | gridProps = (0, _createStyle2.default)((0, _extends3.default)({ display: 'grid' }, child.props));
|
96 | }
|
97 |
|
98 | return _react2.default.cloneElement(child, {
|
99 | style: (0, _extends3.default)({}, spacingMargin, childPropsMargin, gridProps, child.props.style || {})
|
100 | });
|
101 | }
|
102 |
|
103 | return child;
|
104 | });
|
105 | };
|
106 |
|
107 | var getStyle = function getStyle() {
|
108 | var style = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
109 | var props = arguments[1];
|
110 |
|
111 | return (0, _extends3.default)({}, (0, _createStyle2.default)((0, _extends3.default)({ display: 'flex' }, props)), style);
|
112 | };
|
113 |
|
114 | var getOuterStyle = function getOuterStyle(style, styleProps) {
|
115 | var sheet = getStyle(style, styleProps);
|
116 |
|
117 | return (0, _createStyle.filterOuterStyle)(sheet);
|
118 | };
|
119 |
|
120 | var getHelperStyle = function getHelperStyle(style, styleProps) {
|
121 | var sheet = getStyle(style, styleProps);
|
122 |
|
123 | return (0, _createStyle.filterHelperStyle)((0, _extends3.default)({}, sheet, (0, _createStyle.getSpacingHelperMargin)(styleProps.spacing)));
|
124 | };
|
125 |
|
126 | var getInnerStyle = function getInnerStyle(style, styleProps) {
|
127 | var sheet = getStyle(style, styleProps);
|
128 |
|
129 | return (0, _createStyle.filterInnerStyle)(sheet);
|
130 | };
|
131 |
|
132 |
|
133 |
|
134 |
|
135 | var Box = (_temp = _class = function (_Component) {
|
136 | (0, _inherits3.default)(Box, _Component);
|
137 |
|
138 | function Box() {
|
139 | (0, _classCallCheck3.default)(this, Box);
|
140 | return (0, _possibleConstructorReturn3.default)(this, _Component.apply(this, arguments));
|
141 | }
|
142 |
|
143 | Box.prototype.render = function render() {
|
144 | var _cx;
|
145 |
|
146 | var _props = this.props,
|
147 | prefix = _props.prefix,
|
148 | direction = _props.direction,
|
149 | justify = _props.justify,
|
150 | align = _props.align,
|
151 | wrap = _props.wrap,
|
152 | flex = _props.flex,
|
153 | spacing = _props.spacing,
|
154 | padding = _props.padding,
|
155 | margin = _props.margin,
|
156 | style = _props.style,
|
157 | className = _props.className,
|
158 | children = _props.children,
|
159 | device = _props.device,
|
160 | component = _props.component;
|
161 |
|
162 |
|
163 | var styleProps = {
|
164 | direction: direction,
|
165 | justify: justify,
|
166 | align: align,
|
167 | wrap: wrap,
|
168 | flex: flex,
|
169 | spacing: spacing,
|
170 | padding: padding,
|
171 | margin: margin
|
172 | };
|
173 | var View = component;
|
174 | var others = pickOthers(Object.keys(Box.propTypes), this.props);
|
175 | var styleSheet = getStyle(style, styleProps);
|
176 |
|
177 | var boxs = createChildren(children, {
|
178 | spacing: spacing,
|
179 | direction: direction,
|
180 | wrap: wrap,
|
181 | device: device
|
182 | });
|
183 |
|
184 | var cls = (0, _classnames2.default)((_cx = {}, _cx[prefix + 'box'] = true, _cx), className);
|
185 | if (wrap && spacing) {
|
186 | var outerStyle = getOuterStyle(style, styleProps);
|
187 | var helperStyle = getHelperStyle(style, styleProps);
|
188 | var innerStyle = getInnerStyle(style, styleProps);
|
189 |
|
190 | return _react2.default.createElement(
|
191 | View,
|
192 | (0, _extends3.default)({ style: outerStyle, className: cls }, others),
|
193 | _react2.default.createElement(
|
194 | 'div',
|
195 | { style: helperStyle },
|
196 | _react2.default.createElement(
|
197 | 'div',
|
198 | { style: innerStyle, className: prefix + 'box' },
|
199 | boxs
|
200 | )
|
201 | )
|
202 | );
|
203 | }
|
204 |
|
205 | return _react2.default.createElement(
|
206 | View,
|
207 | (0, _extends3.default)({ style: styleSheet, className: cls }, others),
|
208 | boxs
|
209 | );
|
210 | };
|
211 |
|
212 | return Box;
|
213 | }(_react.Component), _class.propTypes = {
|
214 | prefix: _propTypes2.default.string,
|
215 | style: _propTypes2.default.object,
|
216 | className: _propTypes2.default.any,
|
217 | |
218 |
|
219 |
|
220 | flex: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string])), _propTypes2.default.number]),
|
221 | |
222 |
|
223 |
|
224 |
|
225 | direction: _propTypes2.default.oneOf(['row', 'column', 'row-reverse']),
|
226 | |
227 |
|
228 |
|
229 | wrap: _propTypes2.default.bool,
|
230 | |
231 |
|
232 |
|
233 | spacing: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.number), _propTypes2.default.number]),
|
234 | |
235 |
|
236 |
|
237 | margin: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.number), _propTypes2.default.number]),
|
238 | |
239 |
|
240 |
|
241 | padding: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.number), _propTypes2.default.number]),
|
242 | |
243 |
|
244 |
|
245 | justify: _propTypes2.default.oneOf(['flex-start', 'center', 'flex-end', 'space-between', 'space-around']),
|
246 | |
247 |
|
248 |
|
249 | align: _propTypes2.default.oneOf(['flex-start', 'center', 'flex-end', 'baseline', 'stretch']),
|
250 | device: _propTypes2.default.oneOf(['phone', 'tablet', 'desktop']),
|
251 | |
252 |
|
253 |
|
254 | component: _propTypes2.default.string
|
255 | }, _class.defaultProps = {
|
256 | prefix: 'next-',
|
257 | direction: 'column',
|
258 | wrap: false,
|
259 | component: 'div'
|
260 | }, _temp);
|
261 | Box.displayName = 'Box';
|
262 | exports.default = _configProvider2.default.config(Box);
|
263 | module.exports = exports['default']; |
\ | No newline at end of file |