react-grid-system
Version:
A powerful Bootstrap-like responsive grid system for React.
78 lines (77 loc) • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _utils = require("../../utils");
const hasWidth = widths => Object.keys(widths).reduce((acc, cur) => acc || widths[cur], false);
const getWidth = (width, gridColumns) => {
if (typeof width !== 'number') return undefined;
const normalizedWidth = Math.max(0, Math.min(gridColumns, width));
return `${100 / gridColumns * normalizedWidth}%`;
};
var _default = _ref => {
let {
forceWidth = null,
width = {},
offset = {},
pull = {},
push = {},
order = {},
debug,
screenClass,
gutterWidth,
moreStyle,
gridColumns
} = _ref;
const styles = {
boxSizing: 'border-box',
minHeight: 1,
position: 'relative',
paddingLeft: gutterWidth / 2,
paddingRight: gutterWidth / 2,
width: '100%'
};
if (debug) {
styles.outline = '1px solid silver';
styles.background = 'rgba(0,0,0,.05)';
styles.lineHeight = '32px';
}
styles.flexBasis = '100%';
styles.flexGrow = 0;
styles.flexShrink = 0;
styles.maxWidth = '100%';
styles.marginLeft = '0%';
styles.right = 'auto';
styles.left = 'auto';
_utils.screenClasses.forEach((size, index) => {
if (_utils.screenClasses.indexOf(screenClass) >= index) {
const currentWidth = getWidth(width[size], gridColumns);
const isSizedToContent = width[size] === 'content';
styles.flexBasis = isSizedToContent ? 'auto' : currentWidth || styles.flexBasis;
styles.width = styles.flexBasis;
styles.maxWidth = currentWidth || styles.maxWidth;
styles.marginLeft = getWidth(offset[size], gridColumns) || styles.marginLeft;
styles.right = getWidth(pull[size], gridColumns) || styles.right;
styles.left = getWidth(push[size], gridColumns) || styles.left;
if (order[size]) {
styles.order = order[size];
}
}
});
if (!hasWidth(width)) {
styles.flexBasis = 0;
styles.flexGrow = 1;
}
if (forceWidth) {
styles.flexBasis = 'unset';
styles.flexGrow = 'unset';
styles.flexShrink = 'unset';
styles.width = forceWidth;
}
return {
...styles,
...moreStyle
};
};
exports.default = _default;