react-flexbox-layout
Version:
Simple flexible layouts for IE9+
262 lines (217 loc) • 8.85 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true
});
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _lodashKeys = require('lodash/keys');
var _lodashKeys2 = _interopRequireDefault(_lodashKeys);
var _lodashAssign = require('lodash/assign');
var _lodashAssign2 = _interopRequireDefault(_lodashAssign);
var _lodashOmit = require('lodash/omit');
var _lodashOmit2 = _interopRequireDefault(_lodashOmit);
function layoutItemChildrenChecker(props, propName, componentName) {
if (_react2['default'].Children.count(props[propName]) > 1) {
return new Error('Can\'t provide more than one child to ' + componentName + '.');
}
}
function shouldNotExist(props, propName, componentName) {
if (props.hasOwnProperty(propName)) {
return new Error('Invalid prop ' + propName + ' supplied to ' + componentName + '.');
}
}
//
// Horizontal Layout
//
var HLayoutPropTypes = {
justifyItems: _propTypes2['default'].oneOf(['left', 'center', 'right']),
alignItems: _propTypes2['default'].oneOf(['top', 'middle', 'baseline', 'bottom', 'stretch']),
gutter: _propTypes2['default'].number,
gutterUnit: _propTypes2['default'].string,
width: _propTypes2['default'].any,
height: _propTypes2['default'].any,
style: function style(props, propName, componentName) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = layoutDangerousStyles[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var property = _step.value;
if (props[propName] && props[propName].hasOwnProperty(property)) {
return new Error(componentName + ' ' + propName + ' can\'t have ' + property + '.');
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator['return']) {
_iterator['return']();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
},
onLayout: _propTypes2['default'].func
};
exports.HLayoutPropTypes = HLayoutPropTypes;
var HLayoutDefaultPropTypes = {
justifyItems: 'left',
alignItems: 'top',
gutter: 0,
gutterUnit: 'px'
};
exports.HLayoutDefaultPropTypes = HLayoutDefaultPropTypes;
var HLayoutItemPropTypes = {
width: _propTypes2['default'].any,
height: _propTypes2['default'].any,
flexGrow: _propTypes2['default'].oneOfType([_propTypes2['default'].bool, _propTypes2['default'].number]),
align: _propTypes2['default'].oneOf(['top', 'middle', 'baseline', 'bottom', 'stretch']),
justify: shouldNotExist,
gutterLeft: _propTypes2['default'].number,
gutterRight: _propTypes2['default'].number,
children: layoutItemChildrenChecker,
// Used internally by HLayout
_gutterLeft: _propTypes2['default'].string,
_gutterRight: _propTypes2['default'].string,
style: function style(props, propName, componentName) {
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = layoutItemDangerousStyles[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var property = _step2.value;
if (props[propName] && props[propName].hasOwnProperty(property)) {
return new Error(componentName + ' ' + propName + ' can\'t have ' + property + '.');
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2['return']) {
_iterator2['return']();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
if (props.flexGrow && (props[propName] && props[propName].hasOwnProperty('width') || props.hasOwnProperty('width'))) {
return new Error(componentName + ' can\'t define width when flexGrow is set.');
}
if (props.align === 'stretch' && (props[propName] && props[propName].hasOwnProperty('height') || props.hasOwnProperty('height'))) {
return new Error(componentName + ' can\'t define height when align=stretch.');
}
}
};
exports.HLayoutItemPropTypes = HLayoutItemPropTypes;
//
// Vertical Layout
//
var VLayoutPropTypes = {
justifyItems: _propTypes2['default'].oneOf(['left', 'center', 'right', 'stretch']),
alignItems: _propTypes2['default'].oneOf(['top', 'middle', 'bottom']),
gutter: _propTypes2['default'].number,
gutterUnit: _propTypes2['default'].string,
width: _propTypes2['default'].any,
height: _propTypes2['default'].any,
style: function style(props, propName, componentName) {
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = layoutDangerousStyles[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var property = _step3.value;
if (props[propName] && props[propName].hasOwnProperty(property)) {
return new Error(componentName + ' ' + propName + ' can\'t have ' + property + '.');
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3['return']) {
_iterator3['return']();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
},
onLayout: _propTypes2['default'].func
};
exports.VLayoutPropTypes = VLayoutPropTypes;
var VLayoutDefaultPropTypes = {
justifyItems: 'stretch',
alignItems: 'top',
gutter: 0,
gutterUnit: 'px'
};
exports.VLayoutDefaultPropTypes = VLayoutDefaultPropTypes;
var VLayoutItemPropTypes = {
width: _propTypes2['default'].any,
height: _propTypes2['default'].any,
flexGrow: _propTypes2['default'].oneOfType([_propTypes2['default'].bool, _propTypes2['default'].number]),
align: shouldNotExist,
justify: _propTypes2['default'].oneOf(['left', 'center', 'right', 'stretch']),
gutterTop: _propTypes2['default'].number,
gutterBottom: _propTypes2['default'].number,
children: layoutItemChildrenChecker,
// Used internally by VLayout
_gutterTop: _propTypes2['default'].string,
_gutterBottom: _propTypes2['default'].string,
style: function style(props, propName, componentName) {
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
try {
for (var _iterator4 = layoutItemDangerousStyles[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var property = _step4.value;
if (props[propName] && props[propName].hasOwnProperty(property)) {
return new Error(componentName + ' ' + propName + ' can\'t have ' + property);
}
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4['return']) {
_iterator4['return']();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
if (props.flexGrow && (props[propName] && props[propName].hasOwnProperty('height') || props.hasOwnProperty('height'))) {
return new Error(componentName + ' can\'t define height when flexGrow is set');
}
if (props.justify === 'stretch' && (props[propName] && props[propName].hasOwnProperty('width') || props.hasOwnProperty('width'))) {
return new Error(componentName + ' can\'t define width when justify=stretch');
}
}
};
exports.VLayoutItemPropTypes = VLayoutItemPropTypes;
var everythingDangerousStyles = ["display", "float"];
var layoutDangerousStyles = everythingDangerousStyles;
var layoutItemDangerousStyles = everythingDangerousStyles.concat(["position", "margin", "marginTop", "marginBottom", "marginLeft", "marginRight"]);
var proprietaryProps = (0, _lodashKeys2['default'])((0, _lodashAssign2['default'])({}, HLayoutPropTypes, HLayoutDefaultPropTypes, HLayoutItemPropTypes, VLayoutPropTypes, VLayoutDefaultPropTypes, VLayoutItemPropTypes));
var cleanProps = function cleanProps(props) {
return (0, _lodashOmit2['default'])(props, proprietaryProps);
};
exports.cleanProps = cleanProps;