@wix/design-system
Version:
@wix/design-system
101 lines • 3.57 kB
JavaScript
import React, { forwardRef } from 'react';
import PropTypes from 'prop-types';
import { st, classes, vars } from './Box.st.css.js';
import { stVars as colorsStVars } from '../Foundation/stylable/colors.st.css.js';
import { filterObject } from '../utils/filterObject';
import { formatSpacingValue, getSpacingValues, } from './utils/formatSpacingValues';
import { getSizeValues } from './utils/formatSizeValues';
import { DIRECTION } from './Box.constants';
const getColorStyles = (props) => {
const styles = {};
for (const propName in props) {
const propValue = props[propName];
if (propValue) {
styles[propName] = colorsStVars[propValue] || propValue;
}
}
return styles;
};
const Box = forwardRef(({ inline = false, direction = DIRECTION.horizontal, children, className, align, verticalAlign, dataHook, gap, padding, paddingTop, paddingRight, paddingBottom, paddingLeft, margin, marginTop, marginRight, marginBottom, marginLeft, minWidth, maxWidth, width, minHeight, maxHeight, height, color, backgroundColor, border, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, style, 'data-hook': dataHookByKebabCase, ...nativeStyles }, ref) => {
const rootClassNames = st(classes.root, {
inline,
direction,
alignItems: align,
justifyContent: verticalAlign,
}, className);
const rootStyles = {
...style,
...getSpacingValues({
padding,
paddingTop,
paddingRight,
paddingBottom,
paddingLeft,
margin,
marginTop,
marginRight,
marginBottom,
marginLeft,
}),
...getSizeValues({
minWidth,
maxWidth,
width,
minHeight,
maxHeight,
height,
}),
border,
...getColorStyles({
color,
backgroundColor,
borderColor,
borderTopColor,
borderRightColor,
borderBottomColor,
borderLeftColor,
}),
[vars['gap']]: formatSpacingValue(gap) || 0,
...nativeStyles,
};
const rootStylesFiltered = filterObject(rootStyles, (_key, value) => typeof value !== 'undefined');
return (React.createElement("div", { "data-hook": dataHook, className: rootClassNames, style: rootStylesFiltered, ref: ref }, children));
});
Box.displayName = 'Box';
Box.propTypes = {
children: PropTypes.any,
className: PropTypes.any,
inline: PropTypes.any,
direction: PropTypes.any,
align: PropTypes.any,
verticalAlign: PropTypes.any,
gap: PropTypes.any,
padding: PropTypes.any,
paddingTop: PropTypes.any,
paddingRight: PropTypes.any,
paddingBottom: PropTypes.any,
paddingLeft: PropTypes.any,
margin: PropTypes.any,
marginTop: PropTypes.any,
marginRight: PropTypes.any,
marginBottom: PropTypes.any,
marginLeft: PropTypes.any,
minWidth: PropTypes.any,
maxWidth: PropTypes.any,
width: PropTypes.any,
minHeight: PropTypes.any,
maxHeight: PropTypes.any,
height: PropTypes.any,
color: PropTypes.any,
backgroundColor: PropTypes.any,
border: PropTypes.any,
borderColor: PropTypes.any,
borderTopColor: PropTypes.any,
borderRightColor: PropTypes.any,
borderBottomColor: PropTypes.any,
borderLeftColor: PropTypes.any,
dataHook: PropTypes.any,
style: PropTypes.any,
};
export default Box;
//# sourceMappingURL=Box.js.map