Version

Grid

Implements a flexbox-like grid system for components placement.
Inspired by react-flexbox-grid, see http://roylee0704.github.io/react-flexbox-grid/ and http://flexboxgrid.com/ for additional information.

Responsive grid

Example
<div>
  <div id="grid"></div>
</div>
:global(.cell) {
  background-color: silver;
}
import {render} from 'react-dom';
import React from 'react';
import {Grid, Row, Col} from '@jetbrains/ring-ui/components/grid/grid';

class GridDemo extends React.Component {
  render() {
    return (
      <Grid>
        <Row start="xs">
          <Col xs={12} sm={4} md={6} lg={3}>
            <div className="cell">Cell 1</div>
          </Col>
          <Col xs={12} sm={8} md={6} lg={3}>
            <div className="cell">Cell 2</div>
          </Col>
          <Col xs={12} smOffset={4} sm={8} md={12} lg={6}>
            <div className="cell">Cell 3</div>
          </Col>
        </Row>
      </Grid>
    );
  }
}

render(<GridDemo />, document.getElementById('grid'));

Grid offset

Example
<div>
  <div id="grid"></div>
</div>
:global(.cell) {
  background-color: silver;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
import {render} from 'react-dom';
import React from 'react';
import {Grid, Row, Col} from '@jetbrains/ring-ui/components/grid/grid';

class GridDemo extends React.Component {
  render() {
    return (
      <div>
        <h4>Offset a column.</h4>
        <Grid data-test="offset">
          <Row>
            <Col xsOffset={11} xs={1}>
              <div className="cell">xsOffset={11} xs={1}</div>
            </Col>
            <Col xsOffset={10} xs={2}>
              <div className="cell">xsOffset={10} xs={2}</div>
            </Col>
            <Col xsOffset={9} xs={3}>
              <div className="cell">xsOffset={9} xs={3}</div>
            </Col>
            <Col xsOffset={8} xs={4}>
              <div className="cell">xsOffset={8} xs={4}</div>
            </Col>
            <Col xsOffset={7} xs={5}>
              <div className="cell">xsOffset={7} xs={5}</div>
            </Col>
            <Col xsOffset={6} xs={6}>
              <div className="cell">xsOffset={6} xs={6}</div>
            </Col>
            <Col xsOffset={5} xs={7}>
              <div className="cell">xsOffset={5} xs={7}</div>
            </Col>
            <Col xsOffset={4} xs={8}>
              <div className="cell">xsOffset={4} xs={8}</div>
            </Col>
            <Col xsOffset={3} xs={9}>
              <div className="cell">xsOffset={3} xs={9}</div>
            </Col>
            <Col xsOffset={2} xs={10}>
              <div className="cell">xsOffset={2} xs={10}</div>
            </Col>
            <Col xsOffset={1} xs={11}>
              <div className="cell">xsOffset={1} xs={11}</div>
            </Col>
          </Row>
        </Grid>
      </div>
    );
  }
}

render(<GridDemo />, document.getElementById('grid'));

Grid auto size

Example
<div>
  <div id="grid"></div>
</div>
:global(.cell) {
  background-color: silver;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
import {render} from 'react-dom';
import React from 'react';
import {Grid, Row, Col} from '@jetbrains/ring-ui/components/grid/grid';

class GridDemo extends React.Component {
  render() {
    return (
      <div>
        <h4>Auto Width: add any number of auto sizing columns to a row. Let the grid figure it out.</h4>
        <Grid data-test="auto-size">
          <Row>
            <Col xs>
            <div className="cell">Autosize</div>
            </Col>
            <Col xs>
            <div className="cell">Autosize column with larger text</div>
            </Col>
          </Row>
          <Row>
            <Col xs>
            <div className="cell">Autosize</div>
            </Col>
            <Col xs>
            <div className="cell">Autosize column with much much much larger text</div>
            </Col>
            <Col xs>
            <div className="cell">Autosize</div>
            </Col>
          </Row>
        </Grid>
      </div>
    );
  }
}

render(<GridDemo />, document.getElementById('grid'));

Grid alignment

Example
<div>
  <div id="grid"></div>
</div>
:global(.cell) {
  background-color: silver;
}
:global(.cell_tall) {
  height: 64px;
}
import {render} from 'react-dom';
import React from 'react';
import {Grid, Row, Col} from '@jetbrains/ring-ui/components/grid/grid';

class GridDemo extends React.Component {
  render() {
    return (
      <div>
        <h4>
          Add classes to align elements to the start or end of row as well as the top, bottom, or center of a column
        </h4>
        <Grid data-test="alignment">
          <Row>
            <Col xs={12}>
              <Row start="xs">
                <Col xs={6} className="cell">start</Col>
              </Row>
            </Col>
          </Row>
          <Row>
            <Col xs={12}>
              <Row center="xs">
                <Col xs={6} className="cell">center</Col>
              </Row>
            </Col>
          </Row>
          <Row>
            <Col xs={12}>
              <Row end="xs">
                <Col xs={6} className="cell">end</Col>
              </Row>
            </Col>
          </Row>
          <Row>
              <Col xs={12}>
                <Row top="xs">
                  <Col xs={6}><div className="cell">top</div></Col>
                  <Col xs={6}><div className="cell cell_tall"></div></Col>
                </Row>
              </Col>
            </Row>
            <Row>
              <Col xs={12}>
                <Row middle="xs">
                  <Col xs={6}><div className="cell">middle</div></Col>
                  <Col xs={6}><div className="cell cell_tall"></div></Col>
                </Row>
              </Col>
            </Row>
            <Row>
              <Col xs={12}>
                <Row bottom="xs">
                  <Col xs={6}><div className="cell">bottom</div></Col>
                  <Col xs={6}><div className="cell cell_tall"></div></Col>
                </Row>
              </Col>
            </Row>
        </Grid>
      </div>
    );
  }
}

render(<GridDemo />, document.getElementById('grid'));

Grid columns distribution

Example
<div>
  <div id="grid"></div>
</div>
:global(.cell) {
  background-color: silver;
}
import {render} from 'react-dom';
import React from 'react';
import {Grid, Row, Col} from '@jetbrains/ring-ui/components/grid/grid';

class GridDemo extends React.Component {
  render() {
    return (
      <div>
        <h4>Distribution: add classes to distribute the contents of a row or column.</h4>
        <Grid data-test="distribution">
          <Row around="xs">
            <Col xs={2}><div className="cell">around</div></Col>
            <Col xs={2}><div className="cell">around</div></Col>
            <Col xs={2}><div className="cell">around</div></Col>
          </Row>
          <Row between="xs">
            <Col xs={2}><div className="cell">between</div></Col>
            <Col xs={2}><div className="cell">between</div></Col>
            <Col xs={2}><div className="cell">between</div></Col>
          </Row>
        </Grid>
      </div>
    );
  }
}

render(<GridDemo />, document.getElementById('grid'));