UNPKG

@toolz/material-ui

Version:

A few simple (borderline-silly, they're so simple) wrapper components for Material UI Grid components

168 lines (150 loc) 4.97 kB
# material-ui `material-ui` is just a few simple (borderline-silly, they're so _simple_) wrapper components for Material UI. Specifically, the package provides `<Row>` and `<Column>`, which are meant to provide a more intuitive interface to Material UI's `<Grid>` component. Most paradigms for responsive design work off a concept of having _rows_, with each of those rows containing _columns_. But for some reason, the folks who designed Material UI decided that rows and columns should both be controlled by a single component - `<Grid>`. This can lead to React code that looks like this: ```jsx export const SomeComponent = () => { return <> <Grid container={true}> <Grid item={true} xs={12}> <Grid container={true}> <Grid item={true} xs={6}> Some content </Grid> <Grid item={true} xs={6}> Some more content </Grid> </Grid> </Grid> </Grid>> </> } ``` In the example above, there is one _row_, that contains a _column_, that spans the entire _row_. Inside that _column_, there's another _row_. The inner _row_ contains two _columns_, each spanning half the length of the _row_. Despite this, the code contains no references to "rows" or "columns". _Every_ component is a "Grid". The _rows_ are grids - with the `container` attribute set to `true`. The _columns_ are grids - with the `item` attribute set to `true`. This is very counterintuitive for anyone who's accustomed to dealing with "traditional" responsive design systems. It's difficult to mentally parse the successive layers of nested `<Grid>`s. It's also difficult to quickly peruse the code and determine which `<Grid>`s represent _rows_, and which ones represent _columns_. It just looks like a big pile of `<Grid>` components (which... it _is_). This package provides two simple wrapper components that will transform the above code as such: ```jsx export const SomeComponent = () => { return <> <Row> <Column xs={12}> <Row> <Column xs={6}> Some content </Column> <Column xs={6}> Some more content </Column> </Row> </Column> </Row> </> } ``` ## Usage After installation, import the components: ```jsx import { Row } from '@toolz/material-ui/dist/Row'; import { Column } from '@toolz/material-ui/dist/Column'; ``` ## Components ### `<Row>` A `<Row>` is a responsive container designed to hold `<Column>` components. ```javascript const props = { alignContent: { optional, format: oneOf[ 'center', 'flex-end', 'flex-start', 'space-around', 'space-between', 'stretch', ], defaultValue: 'stretch', }, alignItems: { optional, format: oneOf[ 'baseline', 'center', 'flex-end', 'flex-start', 'stretch', ], defaultValue: 'stretch', }, direction: { optional, format: oneOf[ 'column', 'column-reverse', 'row', 'row-reverse', ], defaultValue: 'row', }, justify: { optional, format: oneOf[ 'center', 'flex-end', 'flex-start', 'space-around', 'space-between', 'space-evenly', ], defaultValue: 'flex-start', }, spacing: { optional, format: oneOf[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], defaultValue: 0, }, wrap: { optional, format: oneOf[ 'nowrap', 'wrap', 'wrap-reverse', ], defaultValue: 'wrap', }, } ``` ### `<Column>` A `<Column>` is a wrapper component that denotes a responsive column of content, residing inside a `<Row>` component. ```javascript const props = { lg: { optional, format: oneOf[false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], defaultValue: false, }, md: { optional, format: oneOf[false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], defaultValue: false, }, sm: { optional, format: oneOf[false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], defaultValue: false, }, xl: { optional, format: oneOf[false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], defaultValue: false, }, xs: { optional, format: oneOf[false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], defaultValue: false, }, zeroMinWidth: { optional, format: Boolean, defaultValue: false, }, } ```