UNPKG

@react-ui-org/react-ui

Version:

React UI is a themeable UI library for React apps.

89 lines (81 loc) 2.2 kB
import PropTypes from 'prop-types'; import React from 'react'; import { withGlobalProps } from '../../providers/globalProps'; import { transferProps } from '../../helpers/transferProps'; import { isChildrenEmpty } from '../../helpers/isChildrenEmpty/isChildrenEmpty'; import { generateResponsiveCustomProperties } from './_helpers/generateResponsiveCustomProperties'; import styles from './Grid.module.scss'; export const GridSpan = ({ children, columns, rows, tag: Tag, ...restProps }) => { if (isChildrenEmpty(children)) { return null; } return ( <Tag {...transferProps(restProps)} className={styles.span} style={{ ...generateResponsiveCustomProperties(columns, 'column-span'), ...generateResponsiveCustomProperties(rows, 'row-span'), }} > {children} </Tag> ); }; /* Breakpoints are easier to work with when ordered according to their value, not name. */ /* eslint-disable sort-keys */ GridSpan.defaultProps = { children: undefined, columns: 1, rows: 1, tag: 'div', }; GridSpan.propTypes = { /** * Items to be aligned in the grid. If none are provided nothing is rendered. */ children: PropTypes.node, /** * Number of columns to span. */ columns: PropTypes.oneOfType([ PropTypes.number, PropTypes.shape({ xs: PropTypes.number, sm: PropTypes.number, md: PropTypes.number, lg: PropTypes.number, xl: PropTypes.number, x2l: PropTypes.number, x3l: PropTypes.number, }), ]), /** * Number of rows to span. */ rows: PropTypes.oneOfType([ PropTypes.number, PropTypes.shape({ xs: PropTypes.number, sm: PropTypes.number, md: PropTypes.number, lg: PropTypes.number, xl: PropTypes.number, x2l: PropTypes.number, x3l: PropTypes.number, }), ]), /** * HTML tag to render. Can be any valid HTML tag of your choice, usually a * [block-level element](https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements). */ tag: PropTypes.string, }; export const GridSpanWithGlobalProps = withGlobalProps(GridSpan, 'GridSpan'); export default GridSpanWithGlobalProps;