npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-flexa

v0.9.3

Published

React flexbox grid system using styled components

Downloads

323

Readme

react-flexa

Build Status npm version codecov

Responsive React Flexbox (CSS Flexible Box Layout Module) grid system based heavily on the standard CSS API.

react-flexa demo

Features

  • Simple API is based off CSS Flexbox API, no need to learn a new syntax.
  • Uses styled-components to customize generated components styles
  • Easily change grid settings based on responsive breakpoints

Installation

yarn add react-flexa

Usage

Basic usage

import React from 'react';
import { Row, Col } from 'react-flexa';

class Component extends React.Component {
  render() {
    return (
      <Row justifyContent="center">
        <Col xs={3}>25% width</Col>
        <Col xs={3}>25% width</Col>
      </Row>
    );
  }
};

Advance responsive usage

View Responsive API using objects for more information on how to responsively set flexbox properties based on breakpoint.

import React from 'react';
import { Row, Col } from 'react-flexa';

class Component extends React.Component {
  render() {
    return (
      <Row justifyContent={{ sm: "center", lg: "flex-end" }} gutter="16px">
        <Col xs={3} md={6}>25% width on extra small displays, 50% width on medium displays and up</Col>
        <Col xs={3} md={6}>25% width on extra small displays, 50% width on medium displays and up</Col>
      </Row>
    );
  }
};

API

Row Props

These are the available and reserved props that can be used on the Row component. All other props such as className will be automatically be passed down to the generated element.

| Prop | Valid types | Valid values | Default value | Description | |:-----------------|:---------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------|:---------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | gutter | integer,string,object | '1rem''12px'4(etc) | '1rem' | Sets the width of the gutter to be used between columns. For correct positioning you must set the same value (if custom) on children Col's. | | display | string,object | 'flex''inline-flex' | 'flex' | This defines a flex container; inline or block depending on the given value. Read more about display. | | flexDirection | string,object | 'row''row-reverse''column''column‑reverse' | 'row' | This establishes the main-axisthus defining the direction flex items are placed in the flex container. Read more about flex-direction. | | flexWrap | stringobject | 'nowrap''wrap''wrap‑reverse' | 'wrap' | By defaultflex items will wrap to new lines as needed. You can change it to allow all items try to fit onto one line with this property. Read more about flex-wrap. | | justifyContent | string,object | 'flex‑start''flex‑end''center''space‑between''space‑around' | 'flex‑start' | This defines the alignment along the main axis. It helps distribute extra free space left over. Read more about justify-content. | | alignItems | string,object | 'flex‑start''flex‑end''center''baseline''stretch' | 'stretch' | This defines the default behavior for how flex items are laid out along the cross axis on the current line. Read more about align-items. | | alignContent | string,object | 'flex‑start''flex‑end''center''space‑between''space-around''stretch' | 'stretch' | This aligns a flex container's lines within when there is extra space in the cross-axis. Read more about align-content. | | elementType | string,object | 'div''span' | 'div' | This enables you to change the HTML element type generated. |

Flexbox descriptions sourced from CSS-Tricks

Col Props

These are the available and reserved props that can be used on the Col component. All other props such as className will be automatically be passed down to the generated element.

| Prop | Valid types | Valid values | Default value | Description | |:--------------|:------------------------------------------------------------|:----------------------------------------------------------------------------------------|:--------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | xs | integer/ string | 0-12(based on default columns)hiddenauto '390px' - 'calc=(100% - 390px)' | nill | Number: Sets the width of the col based the column configuration (12 by default) for the XS breakpoint and up. String: Set a width like string xs="390px" to fixed have a fixed colum, or create a calc xs="calc(100% - 390px)" base on sibling to have a responsive column. | | sm | integer/ string | 0-12(based on default columns)hiddenauto '390px' - 'calc=(100% - 390px)' | nill | Number: Sets the width of the col based the column configuration (12 by default) for the SM breakpoint and up. String: Set a width like string sm="390px" to fixed have a fixed colum, or create a calc sm="calc(100% - 390px)" base on sibling to have a responsive column. | | md | integer/ string | 0-12(based on default columns)hiddenauto '390px' - 'calc=(100% - 390px)' | nill | Number: Sets the width of the col based the column configuration (12 by default) for the MD breakpoint and up. String: Set a width like string md="390px" to fixed have a fixed colum, or create a calc md="calc(100% - 390px)" base on sibling to have a responsive column. | | lg | integer/ string | 0-12(based on default columns)hiddenauto '390px' - 'calc=(100% - 390px)' | nill | Number: Sets the width of the col based the column configuration (12 by default) for the LG breakpoint and up. String: Set a width like string lg="390px" to fixed have a fixed colum, or create a calc lg="calc(100% - 390px)" base on sibling to have a responsive column. | | gutter | integer, string,object | '1rem''12px'4 | '1rem' | Sets the width of the gutter to be used between columns. For correct positioning you must set the same value (if custom) on the parent Row | | order | string,object | -101(etc) | 0 | By default, flex items are laid out in the source order. However, the order property controls the order in which they appear in the flex container. Read more about order. | | alignSelf | string,object | 'auto''flex‑start''flex‑end''center''baseline''stretch' | 'auto' | This allows the default alignment (or the one specified by align‑items) to be overridden for individual flex items. Read more about align-self. | | elementType | string,object | 'div''span' | 'div' | This enables you to change the HTML element type generated. | | flex | string, integer,object | 1'1 1 auto''1 0 auto'(etc). | 0 0 auto | This allow to grow automatically (flex: 1) | | display | string,object | 'flex''block''inline'(etc) | block | This defines the display property of the col, inline, block, flex etc. |

Flexbox descriptions sourced from CSS-Tricks

Responsive API using objects

Props with a valid type of "object" enable you to set the value corresponding to a breakpoint. Including an object with keys matching that of the breakpoints will set the desired value on that particular breakpoint.

For example, the object for setting a Row component setting justifyContent to "flex-start" on sm breakpoint, "center" on md breakpoint, and finally "flex-end" on lg breakpoint would look like:

{
  xs: "flex-start",
  md: "center",
  lg: "flex-end",
}

Note: we have chosen to not change anything on the sm breakpoint.

Using this object in the example of the Row component:

import React from 'react';
import { Row, Col } from 'react-flexa';

class Component extends React.Component {
  render() {
    return (
      <Row justifyContent={{ xs: "flex-start", md: "center", lg: "flex-end" }}>
        ...
      </Row>
    );
  }
};

This will now generate CSS with min-width media queries for the responsive values. Note: a media query is not set for any value assigned to xs due to mobile first min-width media query structure.

Default values when using responsive objects

Props such as gutter by will use the default value from the ThemeProvider if not set within the object. For example:

<Row gutter={{ xs: 1, lg: 2 }} />

Will take the sm and md gutter values set by default in the ThemeProvider. To remove these simple set them as 0 to these within the responsive object.

Theming

Default Theme

By default the configuration for react-flex is:

{
  columns: 12,
  gutter: {
    xs: 1, // rem
    sm: 1, // rem
    md: 2, // rem
    lg: 2, // rem
  },
  breakpoints: {
    xs: 0, // rem
    sm: 30, // rem
    md: 48, // rem
    lg: 60, // rem
  },
};

Custom Theme

You can customize these values using the <ThemeProvider /> component from styled-components and wrap your App with the modified values. Note: You don't need to include all values in the the new theme if you don't wish to overwrite them.

Its important you use the key of flexa when applying the theme (as shown below).

import React from 'react';
import { ThemeProvider } from 'styled-components';

const customTheme = {
  flexa: {
    columns: 24,
    gutter: {
      xs: 2,
      sm: 2,
      md: 4,
      lg: 4,
    },
    breakpoints: {
      xs: 0,
      sm: 50,
      md: 60,
      lg: 70,
    },
  }
};

class App extends React.Component {
  render() {
    return (
      <ThemeProvider theme={customTheme}>
        ...
      </ThemeProvider>
    );
  }
};

Development

Requirements

Setup

  1. Install the version of Node specified in .nvmrc (optional):
$ nvm install && nvm use
  1. Install Yarn:
$ npm i -g yarn
  1. Install the project's dependencies:
$ yarn

Usage

Develop with Storybook:

$ yarn storybook

Run unit tests with Jest:

$ yarn jest

# Watch for changes
$ yarn jest:watch

Lint code with ESLint:

$ yarn lint

License

MIT License