2019-12-04 10:53:52 +00:00
|
|
|
import styled from 'styled-components';
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
2019-12-11 09:50:08 +00:00
|
|
|
const alignContentStyle = alignContent => `align-content: ${alignContent};`;
|
|
|
|
const alignItemsStyle = alignItems => `align-items: ${alignItems};`;
|
|
|
|
const alignSelfStyle = alignSelf => `align-self: ${alignSelf};`;
|
|
|
|
const backgroundStyle = backgroundProp => `background: ${backgroundProp};`;
|
|
|
|
|
|
|
|
const borderStyle = borderProp => {
|
|
|
|
const styles = [];
|
|
|
|
|
|
|
|
if (typeof borderProp === 'string') {
|
|
|
|
return `border: ${borderProp};`;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (borderProp.style)
|
|
|
|
styles.push(`border-style: ${borderProp.style};`);
|
|
|
|
|
|
|
|
if (borderProp.width)
|
|
|
|
styles.push(`border-width: ${borderProp.width};`);
|
|
|
|
|
|
|
|
if (borderProp.color)
|
|
|
|
styles.push(`border-color: ${borderProp.color};`);
|
|
|
|
|
|
|
|
if (borderProp.radius)
|
|
|
|
styles.push(`border-radius: ${borderProp.radius};`);
|
|
|
|
|
|
|
|
return styles.join('\n');
|
|
|
|
}
|
|
|
|
|
2019-12-04 10:53:52 +00:00
|
|
|
const displayStyle = displayProp => `display: ${displayProp};`;
|
|
|
|
const flexBasisStyle = flexBasis => `flex-basis: ${flexBasis};`;
|
|
|
|
const flexDirectionStyle = flexDirection => `flex-direction: ${flexDirection};`;
|
2019-12-11 09:50:08 +00:00
|
|
|
const flexStyle = flexProp => `flex: ${flexProp};`;
|
|
|
|
const flexWrapStyle = flexWrap => `flex-wrap: ${flexWrap};`;
|
|
|
|
const gridAreaStyle = gridArea => `grid-area: ${gridArea};`;
|
|
|
|
const heightStyle = heightProp => `height: ${heightProp};`;
|
2019-12-04 10:53:52 +00:00
|
|
|
const justifyContentStyle = justifyContent => `justify-content: ${justifyContent};`;
|
2019-12-11 09:50:08 +00:00
|
|
|
const justifyItemsStyle = justifyItems => `justify-items: ${justifyItems};`;
|
|
|
|
const justifySelfStyle = justifySelf => `justify-self: ${justifySelf};`;
|
|
|
|
const marginStyle = marginProp => `margin: ${marginProp};`;
|
2019-12-04 10:53:52 +00:00
|
|
|
const overflowStyle = overflowProp => `overflow: ${overflowProp};`;
|
2019-12-11 09:50:08 +00:00
|
|
|
const paddingStyle = paddingProp => `padding: ${paddingProp};`;
|
|
|
|
const textAlignStyle = textAlign => `text-align: ${textAlign};`;
|
2019-12-04 10:53:52 +00:00
|
|
|
const widthStyle = widthProp => `width: ${widthProp};`;
|
|
|
|
|
|
|
|
const Box = styled.div`
|
2019-12-11 09:50:08 +00:00
|
|
|
${props => props.alignContent && alignContentStyle(props.alignContent)}
|
|
|
|
${props => props.alignItems && alignItemsStyle(props.alignItems)}
|
|
|
|
${props => props.alignSelf && alignSelfStyle(props.alignSelf)}
|
|
|
|
${props => props.backgroundProp && backgroundStyle(props.backgroundProp)}
|
|
|
|
${props => props.borderProp && borderStyle(props.borderProp)}
|
2019-12-04 10:53:52 +00:00
|
|
|
box-sizing: border-box;
|
|
|
|
${props => props.displayProp && displayStyle(props.displayProp)}
|
|
|
|
${props => props.flexBasis && flexBasisStyle(props.flexBasis)}
|
|
|
|
${props => props.flexDirection && flexDirectionStyle(props.flexDirection)}
|
2019-12-11 09:50:08 +00:00
|
|
|
${props => props.flexProp && flexStyle(props.flexProp)}
|
|
|
|
${props => props.flexWrap && flexWrapStyle(props.flexWrap)}
|
|
|
|
${props => props.gridArea && gridAreaStyle(props.gridArea)}
|
|
|
|
${props => props.heightProp && heightStyle(props.heightProp)}
|
2019-12-04 10:53:52 +00:00
|
|
|
${props => props.justifyContent && justifyContentStyle(props.justifyContent)}
|
2019-12-11 09:50:08 +00:00
|
|
|
${props => props.justifyItems && justifyItemsStyle(props.justifyItems)}
|
|
|
|
${props => props.justifySelf && justifySelfStyle(props.justifySelf)}
|
|
|
|
${props => props.marginProp && marginStyle(props.marginProp)}
|
|
|
|
outline: none;
|
2019-12-04 10:53:52 +00:00
|
|
|
${props => props.overflowProp && overflowStyle(props.overflowProp)}
|
2019-12-11 09:50:08 +00:00
|
|
|
${props => props.paddingProp && paddingStyle(props.paddingProp)}
|
|
|
|
${props => props.textAlign && textAlignStyle(props.textAlign)}
|
2019-12-04 10:53:52 +00:00
|
|
|
${props => props.widthProp && widthStyle(props.widthProp)}
|
|
|
|
`;
|
|
|
|
|
|
|
|
Box.propTypes = {
|
2019-12-11 09:50:08 +00:00
|
|
|
alignContent: PropTypes.string,
|
|
|
|
alignItems: PropTypes.string,
|
|
|
|
alignSelf: PropTypes.string,
|
|
|
|
backgroundProp: PropTypes.string,
|
|
|
|
borderProp: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
|
2019-12-04 10:53:52 +00:00
|
|
|
displayProp: PropTypes.string,
|
|
|
|
flexBasis: PropTypes.string,
|
|
|
|
flexDirection: PropTypes.string,
|
2019-12-11 09:50:08 +00:00
|
|
|
flexProp: PropTypes.string,
|
|
|
|
flexWrap: PropTypes.string,
|
|
|
|
gridArea: PropTypes.string,
|
|
|
|
heightProp: PropTypes.string,
|
2019-12-04 10:53:52 +00:00
|
|
|
justifyContent: PropTypes.string,
|
2019-12-11 09:50:08 +00:00
|
|
|
justifyItems: PropTypes.string,
|
|
|
|
justifySelf: PropTypes.string,
|
|
|
|
marginProp: PropTypes.string,
|
2019-12-04 10:53:52 +00:00
|
|
|
overflowProp: PropTypes.string,
|
2019-12-11 09:50:08 +00:00
|
|
|
paddingProp: PropTypes.string,
|
|
|
|
textAlign: PropTypes.string,
|
|
|
|
widthProp: PropTypes.string
|
2019-12-04 10:53:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Box.defaultProps = {
|
|
|
|
displayProp: 'block'
|
|
|
|
};
|
|
|
|
|
|
|
|
export default Box;
|