├── es-css-modules
├── .babelrc
├── index.html
├── button.js
├── button.css
├── package.json
└── gulpfile.babel.js
├── stylable
├── .babelrc
├── index.html
├── button.js
├── button.st.css
├── webpack.config.js
├── package.json
└── main.css
├── .gitignore
├── pre-style
├── _vars.scss
├── app.scss
├── .babelrc
├── PreStyleConfig.js
├── index.html
├── webpack.config.js
├── button.js
└── package.json
├── linaria
├── .babelrc
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── webpage
├── public
│ ├── favicon.ico
│ ├── manifest.json
│ └── index.html
├── src
│ ├── App.test.js
│ ├── index.js
│ ├── components
│ │ ├── Navbar.js
│ │ ├── Filter.js
│ │ ├── Seo.js
│ │ └── Table.js
│ ├── App.js
│ ├── registerServiceWorker.js
│ └── data.json
├── .gitignore
├── package.json
└── scripts
│ └── parse_readme.js
├── react-css-components
├── .babelrc
├── index.html
├── webpack.config.js
├── button.js
├── styles.react.css
└── package.json
├── babel-plugin-pre-style
├── PreStyleConfig.js
├── atomic.css
├── index.html
├── webpack.config.js
├── atomic.css.classNames.js
├── package.json
└── button.js
├── babel-plugin-css-in-js
├── .babelrc
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── stilr
├── makefile
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── react-cxs
├── .babelrc
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── aphrodite
├── bootstrap.js
├── webpack.config.js
├── index.html
├── other
│ └── generate-css-file.js
├── package.json
└── button.js
├── style-it
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── j2c
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── css-ns
├── css-ns.js
├── webpack.config.js
├── index.html
├── button.js
├── package.json
└── button.css
├── cssobj
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── react-jss
├── webpack.config.js
├── index.html
├── jss.js
├── package.json
└── button.js
├── smart-css
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── classy
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── csjs
├── webpack.config.js
├── index.html
├── button.js
├── package.json
└── styles.js
├── freestyler
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── radium
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── css-light
├── index.html
├── webpack.config.js
├── base.js
├── package.json
└── button.js
├── react-css-builder
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── react-inline-css
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── react-inline-style
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── react-look
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── react-statics-styles
├── webpack.config.js
├── index.html
├── gulpfile.js
├── package.json
└── button.jsx
├── react-theme
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── glamor
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── react-free-style
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── react-native-web
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── react-stylematic
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── scope-styles
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── emotion
├── index.html
├── button.emotion.css
├── webpack.config.js
├── package.json
└── button.js
├── glamorous
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── jsxstyle
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── reactcss
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── restyles
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── typestyle
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── uranium
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── cssx-loader
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── react-styl
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── styled-jsx
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── superstyle
├── index.html
├── webpack.config.js
├── button.js
└── package.json
├── css-constructor
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── i-css
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── bloody-react-styled
├── index.html
├── webpack.config.js
├── button.css
├── button.js
└── package.json
├── styled-components
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── stile-react-media-queries
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── react-fela
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── react-vstyle
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── styling
├── index.html
├── button.js
├── button.styling.js
├── webpack.config.js
└── package.json
├── css-loader
├── index.html
├── button.js
├── button.css
├── webpack.config.js
└── package.json
├── hyperstyles
├── index.html
├── button.css
├── webpack.config.js
├── button.js
└── package.json
├── react-style
├── index.html
├── webpack.config.js
├── package.json
└── button.js
├── react-inline
├── index.html
├── package.json
└── button.js
├── styletron-react
├── webpack.config.js
├── index.html
├── package.json
└── button.js
├── react-styleable
├── index.html
├── button.css
├── button.js
├── webpack.config.js
└── package.json
├── react-css-modules
├── index.html
├── button.css
├── button.js
├── webpack.config.js
└── package.json
├── react-cssom
├── index.html
├── webpack.config.js
├── button.css
├── package.json
└── button.js
├── .travis.yml
├── LICENSE
└── README.md
/es-css-modules/.babelrc:
--------------------------------------------------------------------------------
1 | { "presets": ["es2015", "react"] }
2 |
--------------------------------------------------------------------------------
/stylable/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["env", "react"]
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | lib/
2 | node_modules/
3 | bundle.css
4 | bundle.js
5 | .idea
--------------------------------------------------------------------------------
/pre-style/_vars.scss:
--------------------------------------------------------------------------------
1 | //Sass Variables
2 | $bgc: #ff0000;
3 | $hoverBgc: #fff;
4 |
--------------------------------------------------------------------------------
/linaria/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | "env",
4 | "react"
5 | ]
6 | }
7 |
--------------------------------------------------------------------------------
/webpage/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stereobooster/css-in-js/master/webpage/public/favicon.ico
--------------------------------------------------------------------------------
/react-css-components/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | presets: ['es2015', 'react'],
3 | plugins: ['transform-object-rest-spread']
4 | }
5 |
--------------------------------------------------------------------------------
/pre-style/app.scss:
--------------------------------------------------------------------------------
1 | @import 'vars'; // Can be used in Pre-Style with "prependedFiles" option
2 | @import 'atomic'; // <- Generated by Pre-Style
3 |
--------------------------------------------------------------------------------
/pre-style/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015", "react"],
3 | "plugins": [
4 | ["pre-style", { "config": "PreStyleConfig.js" }]
5 | ]
6 | }
7 |
--------------------------------------------------------------------------------
/babel-plugin-pre-style/PreStyleConfig.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | destination: './',
3 | outputFile: 'atomic.css',
4 | nameSpaces: ['styled'],
5 | };
6 |
--------------------------------------------------------------------------------
/babel-plugin-css-in-js/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | "es2015",
4 | "react"
5 | ],
6 | "plugins": [
7 | "css-in-js"
8 | ]
9 | }
10 |
--------------------------------------------------------------------------------
/stilr/makefile:
--------------------------------------------------------------------------------
1 | extract-styles:
2 | @node -p "require('babel/register')({ignore: false});; var s = require('stilr'); require('./button.js'); s.render()" > ./bundle.css
3 |
--------------------------------------------------------------------------------
/pre-style/PreStyleConfig.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | destination: './',
3 | outputFile: '_atomic.scss',
4 | prependedFiles: ['_vars.scss'],
5 | nameSpaces: ['styled'],
6 | };
7 |
--------------------------------------------------------------------------------
/react-cxs/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | "es2015",
4 | "react"
5 | ],
6 |
7 | "plugins": [
8 | ["transform-react-jsx", { "pragma": "reactCxs" }]
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/aphrodite/bootstrap.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom'
3 | import Button from './button';
4 |
5 | ReactDOM.render( , document.getElementById('content'));
6 |
--------------------------------------------------------------------------------
/aphrodite/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.js$/,
5 | exclude: /node_modules/,
6 | loader: 'babel'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/style-it/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | loader: 'babel',
6 | exclude: /node_modules/
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/babel-plugin-css-in-js/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.js$/,
5 | exclude: /node_modules/,
6 | loader: 'babel'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/j2c/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/css-ns/css-ns.js:
--------------------------------------------------------------------------------
1 | var createCssNs = require('css-ns');
2 | var React = require('react');
3 |
4 | module.exports = function(namespace) {
5 | return createCssNs({
6 | namespace,
7 | React
8 | });
9 | };
10 |
--------------------------------------------------------------------------------
/cssobj/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/react-jss/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/smart-css/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/stilr/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/classy/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/csjs/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/css-ns/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/freestyler/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | css-light - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/radium/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/csjs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | csjs - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/css-light/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | css-light - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/css-light/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | };
10 |
--------------------------------------------------------------------------------
/j2c/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | j2c - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-css-builder/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/react-inline-css/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/react-inline-style/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/react-look/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/react-statics-styles/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/react-theme/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/classy/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | classy - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/glamor/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | glamor - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/radium/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | radium - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-free-style/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/react-native-web/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/react-stylematic/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/scope-styles/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/aphrodite/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | aphrodite - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/emotion/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | emotion - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/glamorous/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | glamorous - CSS in JS
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/jsxstyle/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | jsxstyle - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/pre-style/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Pre-Style - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-cxs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-cxs - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-jss/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-jss - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/reactcss/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | reactcss - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/restyles/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | restyles - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/smart-css/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | smart-css - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/typestyle/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | TypeStyle - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/uranium/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | uranium - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/cssx-loader/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | cssx-loader - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-look/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-look - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-styl/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-styl - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-theme/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-theme - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/reactcss/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loaders: ['babel', 'react-map-styles']
7 | }]
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/styled-jsx/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | styled-jsx - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/superstyle/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | superstyle - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/scope-styles/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | scope-styles - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/css-constructor/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | css-constructor - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/i-css/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | i-css - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/react-free-style/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-free-style - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-inline-css/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-inline-css - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-stylematic/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-stylematic - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/webpage/src/App.test.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 | import App from "./App";
4 |
5 | it("renders without crashing", () => {
6 | const div = document.createElement("div");
7 | ReactDOM.render( , div);
8 | });
9 |
--------------------------------------------------------------------------------
/babel-plugin-pre-style/atomic.css:
--------------------------------------------------------------------------------
1 | .A{text-align:center}.B{background-color:red}.C{width:320px}.D{padding:20px}.E{border-radius:5px}.F{border:none}.G{outline:none}.H:hover{color:#fff}.I:active{position:relative}.J:active{top:2px}@media (max-width:480px){.K{width:160px}}
--------------------------------------------------------------------------------
/bloody-react-styled/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | bloody-react-styled - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-css-builder/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-css-builder - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-inline-style/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-inline-style - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/styled-components/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | styled-components - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/react-css-components/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-css-components - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/cssobj/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | cssobj - CSS in JS
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/react-styl/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel'
7 | }]
8 | },
9 | node: {
10 | fs: 'empty'
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/style-it/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Style It - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/stile-react-media-queries/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | stile + react-media-queries - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/css-ns/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | css-ns - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/react-fela/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-fela - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/react-vstyle/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-vstyle - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/stilr/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | stilr - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/linaria/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | linaria - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/stylable/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | stylable - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/styling/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | styling - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/css-loader/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | css-loader - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/hyperstyles/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | hyperstyles - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/i-css/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /(\.jsx|\.js)$/,
5 | loader: 'babel',
6 | exclude: /(node_modules|bower_components)/,
7 | query: {
8 | presets: ['es2015', 'react']
9 | }
10 | }]
11 | }
12 | };
--------------------------------------------------------------------------------
/react-fela/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.js$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel',
7 | query: {
8 | presets: ['es2015', 'react']
9 | }
10 | }]
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/react-style/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-style - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/typestyle/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.js$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel',
7 | query: {
8 | presets: ['es2015', 'react']
9 | }
10 | }]
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/uranium/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.js$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel',
7 | query: {
8 | presets: ['es2015', 'react']
9 | }
10 | }]
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/react-inline/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-inline - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/react-vstyle/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel',
7 | query: {
8 | presets: ['es2015', 'react']
9 | }
10 | }]
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/styletron-react/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.js$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel',
7 | query: {
8 | presets: ['es2015', 'react']
9 | }
10 | }]
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/babel-plugin-pre-style/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | pre-style - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/glamorous/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [
4 | {
5 | test: /\.js$/,
6 | exclude: /node_modules/,
7 | loader: 'babel',
8 | query: {
9 | presets: ['env', 'react']
10 | }
11 | }
12 | ]
13 | }
14 | }
--------------------------------------------------------------------------------
/react-native-web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | React Native Web - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/react-styleable/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-styleable - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/styled-components/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.js$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel',
7 | query: {
8 | presets: ['es2015', 'react']
9 | }
10 | }]
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/styletron-react/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | styletron-react - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/react-css-modules/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-css-modules - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/es-css-modules/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | es-css-modules - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/react-statics-styles/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | react-statics-styles - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/babel-plugin-css-in-js/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | babel-plugin-css-in-js - CSS in JS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/glamor/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [
4 | {
5 | test: /\.js$/,
6 | exclude: /(node_modules|bower_components)/,
7 | loader: 'babel',
8 | query: {
9 | presets: ['es2015', 'react']
10 | }
11 | }
12 | ]
13 | }
14 | }
--------------------------------------------------------------------------------
/jsxstyle/webpack.config.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 |
3 | module.exports = {
4 | module: {
5 | loaders: [{
6 | test: /\.jsx?$/,
7 | exclude: /(node_modules|bower_components)/,
8 | loader: 'babel!' + path.join(__dirname, 'node_modules/jsxstyle/lib/webpackLoader.js')
9 | }]
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/react-cssom/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | react-cssom - CSS in JS
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/react-css-components/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel',
7 | }, {
8 | test: /\.react.css$/,
9 | loader: 'babel!react-css-components/webpack',
10 | }]
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/styled-jsx/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.js$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel',
7 | query: {
8 | presets: ['es2015', 'react'],
9 | plugins: ['styled-jsx/babel']
10 | }
11 | }]
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/css-light/base.js:
--------------------------------------------------------------------------------
1 | import {Component} from 'react';
2 | import {css, inject} from 'css-light';
3 |
4 | export class Comp extends Component {
5 | componentWillMount() {
6 | if (this.css) {
7 | if (!this.css['@@once']) {
8 | this.css['@@once'] = 1;
9 | inject(css(this.css()));
10 | }
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/css-constructor/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.js$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel',
7 | query: {
8 | presets: ['es2015', 'react'],
9 | plugins: ['transform-decorators-legacy']
10 | }
11 | }]
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/react-css-components/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import { Container, Button } from './styles.react.css';
4 |
5 | const Component = () => (
6 |
7 | Click me!
8 |
9 | );
10 |
11 | ReactDOM.render( , document.getElementById('content'));
12 |
--------------------------------------------------------------------------------
/stile-react-media-queries/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /node_modules/,
6 | loader: "babel",
7 | query: {
8 | presets: ["es2015", "react"],
9 | plugins: ["transform-object-rest-spread"],
10 | },
11 | }]
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/bloody-react-styled/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel?stage=0'
7 | }, {
8 | test: /\.css$/,
9 | loaders: [
10 | 'style/useable',
11 | 'css'
12 | ]
13 | }]
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/css-ns/button.js:
--------------------------------------------------------------------------------
1 | const {React} = require('./css-ns')('Button');
2 |
3 | const Button = React.createClass({
4 | render() {
5 | return (
6 |
7 | Click me!
8 |
9 | );
10 | }
11 | });
12 |
13 | React.render( , document.getElementById('content'));
14 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "8"
4 | cache: yarn
5 | install:
6 | - cd webpage
7 | - yarn install
8 | script:
9 | - yarn build-data
10 | - yarn build
11 | deploy:
12 | provider: pages
13 | skip_cleanup: true
14 | github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard
15 | on:
16 | branch: master
17 | local_dir: build
18 |
--------------------------------------------------------------------------------
/react-cssom/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | rules: [
4 | {
5 | test: /\.js$/,
6 | exclude: /(node_modules|bower_components)/,
7 | use: {
8 | loader: 'babel-loader',
9 | options: {
10 | presets: ['env', 'react']
11 | }
12 | }
13 | }
14 | ]
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/restyles/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | rules: [
4 | {
5 | test: /\.js$/,
6 | exclude: /(node_modules|bower_components)/,
7 | use: {
8 | loader: 'babel-loader',
9 | options: {
10 | presets: ['env', 'react']
11 | }
12 | }
13 | }
14 | ]
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/superstyle/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | rules: [
4 | {
5 | test: /\.js$/,
6 | exclude: /(node_modules|bower_components)/,
7 | use: {
8 | loader: 'babel-loader',
9 | options: {
10 | presets: ['env', 'react']
11 | }
12 | }
13 | }
14 | ]
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/react-cxs/webpack.config.js:
--------------------------------------------------------------------------------
1 | const webpack = require('webpack');
2 |
3 | module.exports = {
4 |
5 | module: {
6 | loaders: [{
7 | test: /\.jsx?$/,
8 | exclude: /(node_modules|bower_components)/,
9 | loader: 'babel'
10 | }]
11 | },
12 |
13 | plugins: [
14 | new webpack.ProvidePlugin({
15 | reactCxs: 'react-cxs'
16 | })
17 | ]
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/react-jss/jss.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Setup optional plugins.
3 | */
4 |
5 | import jss from 'jss';
6 | import nested from 'jss-nested';
7 | import camelCase from 'jss-camel-case';
8 | import defaultUnit from 'jss-default-unit';
9 | import vendorPrefixer from 'jss-vendor-prefixer';
10 |
11 | jss.use(
12 | nested(),
13 | camelCase(),
14 | defaultUnit(),
15 | vendorPrefixer()
16 | );
17 |
--------------------------------------------------------------------------------
/css-loader/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import styles from './button.css';
3 |
4 | const Button = React.createClass({
5 | render() {
6 | return (
7 |
8 | Click me!
9 |
10 | );
11 | }
12 | });
13 |
14 | React.render( , document.getElementById('content'));
15 |
--------------------------------------------------------------------------------
/csjs/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import styles from './styles';
3 |
4 | const Button = React.createClass({
5 | render() {
6 | return (
7 |
8 | Click me!
9 |
10 | );
11 | }
12 | });
13 |
14 | React.render( , document.getElementById('content'));
15 |
--------------------------------------------------------------------------------
/styling/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import styles from './button.styling';
3 |
4 | const Button = React.createClass({
5 | render() {
6 | return (
7 |
8 | Click me!
9 |
10 | );
11 | }
12 | });
13 |
14 | React.render( , document.getElementById('content'));
15 |
--------------------------------------------------------------------------------
/webpage/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 |
6 | # testing
7 | /coverage
8 |
9 | # production
10 | /build
11 |
12 | # misc
13 | .DS_Store
14 | .env.local
15 | .env.development.local
16 | .env.test.local
17 | .env.production.local
18 |
19 | npm-debug.log*
20 | yarn-debug.log*
21 | yarn-error.log*
22 |
--------------------------------------------------------------------------------
/webpage/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "css-in-js",
3 | "name": "Comparison of css-in-js solutions",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | }
10 | ],
11 | "start_url": "./index.html",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/cssx-loader/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /(\.jsx|\.js)$/,
5 | loader: 'babel',
6 | exclude: /(node_modules|bower_components)/,
7 | query: {
8 | presets: ['es2015', 'react']
9 | }
10 | }, {
11 | test: /(\.jsx|\.js)$/,
12 | loader: 'cssx',
13 | exclude: /node_modules/
14 | }]
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/freestyler/webpack.config.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var webpack = require('webpack');
3 |
4 | module.exports = {
5 | module: {
6 | loaders: [
7 | {
8 | test: /\.js$/,
9 | loader: 'babel-loader',
10 | query: {
11 | presets: ['es2015', 'react'],
12 | plugins: ["transform-decorators-legacy"]
13 | }
14 | }
15 | ]
16 | }
17 | };
18 |
--------------------------------------------------------------------------------
/pre-style/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | loaders: [{
4 | test: /\.jsx?$/,
5 | exclude: /(node_modules|bower_components)/,
6 | loader: 'babel',
7 | }, {
8 | test: /\.scss$/,
9 | loader: 'style-loader!css-loader?-minimize&-import&-modules!postcss-loader!sass-loader',
10 | exclude: /(node_modules|bower_components)/,
11 | }]
12 | }
13 | };
14 |
--------------------------------------------------------------------------------
/stylable/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render } from 'react-dom';
3 | import style from './button.st.css';
4 |
5 | const App = () => (
6 |
7 |
8 |
9 | Click me!
10 |
11 |
12 |
13 | );
14 |
15 | render( , document.getElementById('content'));
16 |
--------------------------------------------------------------------------------
/emotion/button.emotion.css:
--------------------------------------------------------------------------------
1 | .css-Container-10pov3x { text-align: center; }
2 | .css-Button-1wslxb2 { background-color: #ff0000;
3 | width: 320px;
4 | padding: 20px;
5 | border-radius: 5px;
6 | border: none;
7 | outline: none; }
8 | .css-Button-1wslxb2:hover { color: #fff; }
9 | .css-Button-1wslxb2:active { position: relative; top: 2px; }
10 | @media (max-width: 480px) {
11 | .css-Button-1wslxb2 { width: 160px; } }
--------------------------------------------------------------------------------
/webpage/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { hydrate, render } from "react-dom";
3 | import App from "./App";
4 | import registerServiceWorker from "./registerServiceWorker";
5 |
6 | const rootElement = document.getElementById("root");
7 | if (rootElement.hasChildNodes()) {
8 | hydrate( , rootElement);
9 | } else {
10 | render( , rootElement);
11 | }
12 |
13 | registerServiceWorker();
14 |
--------------------------------------------------------------------------------
/es-css-modules/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {render} from 'react-dom';
3 | import {container, button} from './button.m.css';
4 |
5 | const Button = React.createClass({
6 | render() {
7 | return (
8 |
9 | Click me!
10 |
11 | );
12 | }
13 | });
14 |
15 | render( , document.getElementById('content'));
16 |
--------------------------------------------------------------------------------
/react-style/webpack.config.js:
--------------------------------------------------------------------------------
1 | var ReactStylePlugin = require('react-style-webpack-plugin');
2 |
3 | module.exports = {
4 | module: {
5 | loaders: [{
6 | test: /\.jsx?$/,
7 | exclude: /(node_modules|bower_components)/,
8 | loaders: [
9 | ReactStylePlugin.loader(),
10 | 'babel'
11 | ]
12 | }]
13 | },
14 | plugins: [
15 | new ReactStylePlugin('bundle.css')
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/j2c/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "j2c-css-in-js",
3 | "version": "1.0.0",
4 | "description": "j2c - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "j2c": "^0.10.0",
12 | "react": "^0.13.3"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/styling/button.styling.js:
--------------------------------------------------------------------------------
1 | import styling from 'styling';
2 |
3 | export const container = styling({
4 | textAlign: 'center'
5 | });
6 |
7 | export const button = styling({
8 | backgroundColor: '#ff0000',
9 | width: 320,
10 | padding: 20,
11 | borderRadius: 5,
12 | border: 'none',
13 | outline: 'none',
14 | 'hover': {
15 | color: '#fff',
16 | },
17 | 'active': {
18 | position: 'relative',
19 | top: 2
20 | }
21 | });
22 |
--------------------------------------------------------------------------------
/csjs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "csjs-css-in-js",
3 | "version": "1.0.0",
4 | "description": "csjs - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "csjs-inject": "^1.0.0-beta",
12 | "react": "^0.13.3"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/css-ns/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "css-ns-css-in-js",
3 | "version": "1.0.0",
4 | "description": "css-ns - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "css-ns": "^1.0.0",
12 | "react": "^0.13.3"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/radium/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "radium-css-in-js",
3 | "version": "1.0.0",
4 | "description": "radium - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "radium": "^0.13.5",
12 | "react": "^0.13.3"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/stylable/button.st.css:
--------------------------------------------------------------------------------
1 | .container {
2 | text-align: center;
3 | }
4 |
5 | .button {
6 | background-color: #ff0000;
7 | width: 320px;
8 | padding: 20px;
9 | border-radius: 5px;
10 | border: none;
11 | outline: none;
12 | }
13 |
14 | .button:hover {
15 | color: #fff;
16 | }
17 |
18 | .button:active {
19 | position: relative;
20 | top: 2px;
21 | }
22 |
23 | @media (max-width: 480px) {
24 | .button {
25 | width: 160px
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/stylable/webpack.config.js:
--------------------------------------------------------------------------------
1 | const StylablePlugin = require('stylable-integration/webpack-plugin');
2 |
3 | module.exports = {
4 | module: {
5 | rules: [
6 | StylablePlugin.rule(),
7 | {
8 | test: /\.js$/,
9 | exclude: /(node_modules|bower_components)/,
10 | use: {
11 | loader: 'babel-loader',
12 | },
13 | },
14 | ],
15 | },
16 | plugins: [
17 | new StylablePlugin(),
18 | ],
19 | }
20 |
--------------------------------------------------------------------------------
/classy/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "classy-css-in-js",
3 | "version": "1.0.0",
4 | "description": "classy - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "react-classy": "^0.3.0"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/css-loader/button.css:
--------------------------------------------------------------------------------
1 | .container {
2 | text-align: center;
3 | }
4 |
5 | .button {
6 | background-color: #ff0000;
7 | width: 320px;
8 | padding: 20px;
9 | border-radius: 5px;
10 | border: none;
11 | outline: none;
12 | }
13 |
14 | .button:hover {
15 | color: #fff;
16 | }
17 |
18 | .button:active {
19 | position: relative;
20 | top: 2px;
21 | }
22 |
23 | @media (max-width: 480px) {
24 | .button {
25 | width: 160px
26 | }
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/es-css-modules/button.css:
--------------------------------------------------------------------------------
1 | .container {
2 | text-align: center;
3 | }
4 |
5 | .button {
6 | background-color: #ff0000;
7 | width: 320px;
8 | padding: 20px;
9 | border-radius: 5px;
10 | border: none;
11 | outline: none;
12 | }
13 |
14 | .button:hover {
15 | color: #fff;
16 | }
17 |
18 | .button:active {
19 | position: relative;
20 | top: 2px;
21 | }
22 |
23 | @media (max-width: 480px) {
24 | .button {
25 | width: 160px
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/hyperstyles/button.css:
--------------------------------------------------------------------------------
1 | .container {
2 | text-align: center;
3 | }
4 |
5 | .button {
6 | background-color: #ff0000;
7 | width: 320px;
8 | padding: 20px;
9 | border-radius: 5px;
10 | border: none;
11 | outline: none;
12 | }
13 |
14 | .button:hover {
15 | color: #fff;
16 | }
17 |
18 | .button:active {
19 | position: relative;
20 | top: 2px;
21 | }
22 |
23 | @media (max-width: 480px) {
24 | .button {
25 | width: 160px
26 | }
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/jsxstyle/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jsxstyle-css-in-js",
3 | "version": "1.0.0",
4 | "description": "jsxstyle - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "jsxstyle": "0.0.14",
12 | "react": "^0.13.3"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/css-loader/webpack.config.js:
--------------------------------------------------------------------------------
1 | var ExtractTextPlugin = require('extract-text-webpack-plugin');
2 |
3 | module.exports = {
4 | module: {
5 | loaders: [{
6 | test: /\.jsx?$/,
7 | exclude: /(node_modules|bower_components)/,
8 | loader: 'babel'
9 | }, {
10 | test: /\.css$/,
11 | loader: ExtractTextPlugin.extract('style', 'css?modules')
12 | }]
13 | },
14 | plugins: [
15 | new ExtractTextPlugin('bundle.css')
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/react-cssom/button.css:
--------------------------------------------------------------------------------
1 | .⚛Container {
2 | text-align: center;
3 | }
4 |
5 | .⚛Button {
6 | background-color: #ff0000;
7 | width: 320px;
8 | padding: 20px;
9 | border-radius: 5px;
10 | border: none;
11 | outline: none;
12 | }
13 |
14 | .⚛Button:hover {
15 | color: #fff;
16 | }
17 |
18 | .⚛Button:active {
19 | position: relative;
20 | top: 2px;
21 | }
22 |
23 | @media (max-width: 480px) {
24 | .⚛Button {
25 | width: 160px
26 | }
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/react-styleable/button.css:
--------------------------------------------------------------------------------
1 | .container {
2 | text-align: center;
3 | }
4 |
5 | .button {
6 | background-color: #ff0000;
7 | width: 320px;
8 | padding: 20px;
9 | border-radius: 5px;
10 | border: none;
11 | outline: none;
12 | }
13 |
14 | .button:hover {
15 | color: #fff;
16 | }
17 |
18 | .button:active {
19 | position: relative;
20 | top: 2px;
21 | }
22 |
23 | @media (max-width: 480px) {
24 | .button {
25 | width: 160px
26 | }
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/smart-css/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "smart-css-css-in-js",
3 | "version": "1.0.0",
4 | "description": "smart-css - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "smart-css": "^1.1.1"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/react-css-modules/button.css:
--------------------------------------------------------------------------------
1 | .container {
2 | text-align: center;
3 | }
4 |
5 | .button {
6 | background-color: #ff0000;
7 | width: 320px;
8 | padding: 20px;
9 | border-radius: 5px;
10 | border: none;
11 | outline: none;
12 | }
13 |
14 | .button:hover {
15 | color: #fff;
16 | }
17 |
18 | .button:active {
19 | position: relative;
20 | top: 2px;
21 | }
22 |
23 | @media (max-width: 480px) {
24 | .button {
25 | width: 160px
26 | }
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/react-css-modules/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import CSSModules from 'react-css-modules';
3 |
4 | import styles from './button.css';
5 |
6 | @CSSModules(styles)
7 | class Button extends Component {
8 | render() {
9 | return (
10 |
11 | Click me!
12 |
13 | );
14 | }
15 | };
16 |
17 | React.render( , document.getElementById('content'));
18 |
--------------------------------------------------------------------------------
/react-look/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-look-css-in-js",
3 | "version": "1.0.1",
4 | "description": "react-look - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.14.3",
12 | "react-look": "^0.6.1"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/react-theme/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-theme-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-theme - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Polgár András",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react-theme": "^0.1.4",
12 | "react": "^0.13.3"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/hyperstyles/webpack.config.js:
--------------------------------------------------------------------------------
1 | var ExtractTextPlugin = require('extract-text-webpack-plugin');
2 |
3 | module.exports = {
4 | module: {
5 | loaders: [{
6 | test: /\.jsx?$/,
7 | exclude: /(node_modules|bower_components)/,
8 | loader: 'babel?stage=0'
9 | }, {
10 | test: /\.css$/,
11 | loader: ExtractTextPlugin.extract('style', 'css?modules')
12 | }]
13 | },
14 | plugins: [
15 | new ExtractTextPlugin('bundle.css')
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/react-styleable/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import styleable from 'react-styleable'
3 |
4 | @styleable(require('./button.css'))
5 | class Button extends Component {
6 | render() {
7 | const {css} = this.props;
8 | return (
9 |
10 | Click me!
11 |
12 | );
13 | }
14 | };
15 |
16 | React.render( , document.getElementById('content'));
17 |
--------------------------------------------------------------------------------
/styling/webpack.config.js:
--------------------------------------------------------------------------------
1 | var ExtractTextPlugin = require('extract-text-webpack-plugin');
2 |
3 | module.exports = {
4 | module: {
5 | loaders: [{
6 | test: /\.jsx?$/,
7 | exclude: /(node_modules|bower_components)/,
8 | loader: 'babel'
9 | }, {
10 | test: /\.styling\.js/,
11 | loader: ExtractTextPlugin.extract('style', 'css!styling!babel')
12 | }]
13 | },
14 | plugins: [
15 | new ExtractTextPlugin('bundle.css')
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/react-css-modules/webpack.config.js:
--------------------------------------------------------------------------------
1 | var ExtractTextPlugin = require('extract-text-webpack-plugin');
2 |
3 | module.exports = {
4 | module: {
5 | loaders: [{
6 | test: /\.jsx?$/,
7 | exclude: /(node_modules|bower_components)/,
8 | loader: 'babel?stage=0'
9 | }, {
10 | test: /\.css$/,
11 | loader: ExtractTextPlugin.extract('style', 'css?modules')
12 | }]
13 | },
14 | plugins: [
15 | new ExtractTextPlugin('bundle.css')
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/react-styleable/webpack.config.js:
--------------------------------------------------------------------------------
1 | var ExtractTextPlugin = require('extract-text-webpack-plugin');
2 |
3 | module.exports = {
4 | module: {
5 | loaders: [{
6 | test: /\.jsx?$/,
7 | exclude: /(node_modules|bower_components)/,
8 | loader: 'babel?stage=0'
9 | }, {
10 | test: /\.css$/,
11 | loader: ExtractTextPlugin.extract('style', 'css?modules')
12 | }]
13 | },
14 | plugins: [
15 | new ExtractTextPlugin('bundle.css')
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/scope-styles/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "scope-styles-css-in-js",
3 | "version": "1.0.0",
4 | "description": "radium - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "scope-styles-inject": "^0.6.0-beta",
12 | "react": "^0.13.3"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/css-ns/button.css:
--------------------------------------------------------------------------------
1 | .Button-container {
2 | text-align: center;
3 | }
4 |
5 | .Button-button {
6 | background-color: #ff0000;
7 | width: 320px;
8 | padding: 20px;
9 | border-radius: 5px;
10 | border: none;
11 | outline: none;
12 | }
13 |
14 | .Button-button:hover {
15 | color: #fff;
16 | }
17 |
18 | .Button-button:active {
19 | position: relative;
20 | top: 2px;
21 | }
22 |
23 | @media (max-width: 480px) {
24 | .Button-button {
25 | width: 160px
26 | }
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/babel-plugin-pre-style/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | rules: [
4 | {
5 | test: /\.js$/,
6 | exclude: /(node_modules|bower_components)/,
7 | use: {
8 | loader: 'babel-loader',
9 | options: {
10 | presets: ['env', 'react'],
11 | plugins: [
12 | ['pre-style', { 'config': './PreStyleConfig.js' }]
13 | ]
14 | }
15 | }
16 | },
17 | ]
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/css-light/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "css-light-css-in-js",
3 | "version": "1.0.0",
4 | "description": "css-light - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Vadim Dalecky",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^16.0.0",
12 | "react-dom": "^16.0.0",
13 | "css-light": "1.1.0"
14 | },
15 | "devDependencies": {
16 | "babel-loader": "^5.1.3",
17 | "webpack": "^1.9.9"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/react-css-builder/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-css-builder-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-css-builder - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "react-css-builder": "^0.2.0"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/react-css-components/styles.react.css:
--------------------------------------------------------------------------------
1 | Container {
2 | text-align: center;
3 | }
4 |
5 | Button {
6 | base: button;
7 | background-color: #ff0000;
8 | width: 320px;
9 | padding: 20px;
10 | border-radius: 5px;
11 | border: none;
12 | outline: none;
13 | }
14 |
15 | Button:hover {
16 | color: #fff;
17 | }
18 |
19 | Button:active {
20 | position: relative;
21 | top: 2px;
22 | }
23 |
24 | @media (max-width: 480px) {
25 | Button {
26 | width: 160px
27 | }
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/react-free-style/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-free-style-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-free-style - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "react-free-style": "^0.6.0"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/react-inline-css/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-inline-css-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-inline-css - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "react-inline-css": "^1.2.0"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/react-stylematic/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-stylematic-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-stylematic - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react-stylematic": "^1.0.0",
12 | "react": "^0.13.3"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/react-inline-style/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-inline-style-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-inline-style - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "react-inline-style": "^0.1.0"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "webpack": "^1.9.9"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/react-styl/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-styl-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-styl - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "radium": "^0.12.2",
12 | "react": "^0.13.3",
13 | "react-styl": "0.0.1"
14 | },
15 | "devDependencies": {
16 | "babel-loader": "^5.1.3",
17 | "webpack": "^1.9.9"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/reactcss/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "reactcss-css-in-js",
3 | "version": "1.0.0",
4 | "description": "reactcss - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "reactcss": "^0.3.2"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "react-map-styles": "^0.2.0",
17 | "webpack": "^1.9.9"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/stilr/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "stilr-css-in-js",
3 | "version": "1.0.0",
4 | "description": "stilr - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js && make extract-styles"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "stilr": "^1.1.0"
13 | },
14 | "devDependencies": {
15 | "babel": "^5.4.7",
16 | "babel-loader": "^5.1.3",
17 | "webpack": "^1.9.9"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/bloody-react-styled/button.css:
--------------------------------------------------------------------------------
1 | :local .container {
2 | text-align: center;
3 | }
4 |
5 | :local .button {
6 | background-color: #ff0000;
7 | width: 320px;
8 | padding: 20px;
9 | border-radius: 5px;
10 | border: none;
11 | outline: none;
12 | }
13 |
14 | :local .button:hover {
15 | color: #fff;
16 | }
17 |
18 | :local .button:active {
19 | position: relative;
20 | top: 2px;
21 | }
22 |
23 | @media (max-width: 480px) {
24 | :local .button {
25 | width: 160px
26 | }
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/bloody-react-styled/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import styled from 'bloody-react-styled';
3 |
4 | import styles from './button.css';
5 |
6 | @styled(styles)
7 | class Button extends Component {
8 | render() {
9 | const {locals} = styles;
10 | return (
11 |
12 | Click me!
13 |
14 | );
15 | }
16 | };
17 |
18 | React.render( , document.getElementById('content'));
19 |
--------------------------------------------------------------------------------
/emotion/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | module: {
3 | rules: [
4 | {
5 | test: /\.js$/,
6 | exclude: /(node_modules|bower_components)/,
7 | use: {
8 | loader: 'babel-loader',
9 | options: {
10 | presets: ['env', 'react'],
11 | plugins: ['emotion/babel']
12 | }
13 | }
14 | },
15 | {
16 | test: /\.css$/,
17 | use: [ 'style-loader', 'css-loader' ]
18 | }
19 | ]
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/hyperstyles/button.js:
--------------------------------------------------------------------------------
1 | /** @jsx h */
2 |
3 | import React, {Component} from 'react';
4 | import hyperstyles from 'hyperstyles';
5 |
6 | import styles from './button.css';
7 |
8 | const h = hyperstyles(React.createElement, styles);
9 |
10 | class Button extends Component {
11 | render() {
12 | return (
13 |
14 | Click me!
15 |
16 | );
17 | }
18 | };
19 |
20 | React.render( , document.getElementById('content'));
21 |
--------------------------------------------------------------------------------
/react-native-web/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-native-web-css-in-js",
3 | "version": "1.0.0",
4 | "description": "React Native for Web - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Nicolas Gallagher",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.14.3",
12 | "react-dom": "^0.14.3",
13 | "react-native-web": "^0.0.11"
14 | },
15 | "devDependencies": {
16 | "babel-loader": "^5.1.3",
17 | "webpack": "^1.9.9"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/cssobj/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "cssobj-css-in-js",
3 | "version": "1.0.0",
4 | "description": "cssobj - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "cssobj": "github:cssobj/cssobj",
12 | "cssobj-plugin-post-csstext": "^1.0.6",
13 | "react": "^0.13.3"
14 | },
15 | "devDependencies": {
16 | "babel": "^5.4.7",
17 | "babel-loader": "^5.1.3",
18 | "webpack": "^1.9.9"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/css-loader/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "css-loader-css-in-js",
3 | "version": "1.0.0",
4 | "description": "css-loader - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3"
12 | },
13 | "devDependencies": {
14 | "babel-loader": "^5.1.3",
15 | "css-loader": "^0.15.6",
16 | "extract-text-webpack-plugin": "^0.8.0",
17 | "style-loader": "^0.12.3",
18 | "webpack": "^1.9.9"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/superstyle/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import superstyle from 'superstyle/react';
4 |
5 | const Container = superstyle({
6 | textAlign: 'center'
7 | })('div');
8 |
9 | const Button = superstyle({
10 | backgroundColor: '#ff0000',
11 | width: 320,
12 | padding: 20,
13 | borderRadius: 5,
14 | border: 'none',
15 | outline: 'none',
16 | })('button');
17 |
18 | ReactDOM.render(
19 |
20 | Click me!
21 | ,
22 | document.getElementById('content')
23 | );
24 |
--------------------------------------------------------------------------------
/react-style/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-style-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-style - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "react-style": "^0.5.5"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "extract-text-webpack-plugin": "0.3.1",
17 | "react-style-webpack-plugin": "^0.4.0",
18 | "webpack": "^1.9.9"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/bloody-react-styled/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bloody-react-styled-css-in-js",
3 | "version": "1.0.0",
4 | "description": "bloody-react-styled - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "bloody-react-styled": "^3.0.0",
12 | "react": "^0.13.3"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "css-loader": "^0.14.4",
17 | "style-loader": "^0.12.3",
18 | "webpack": "^1.9.9"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/csjs/styles.js:
--------------------------------------------------------------------------------
1 | import csjs from 'csjs-inject';
2 |
3 | export default csjs`
4 |
5 | .container {
6 | text-align: center;
7 | }
8 |
9 | .button {
10 | background-color: #ff0000;
11 | width: 320px;
12 | padding: 20px;
13 | border-radius: 5px;
14 | border: none;
15 | outline: none;
16 | }
17 |
18 | .button:hover {
19 | color: #fff;
20 | }
21 |
22 | .button:active {
23 | position: relative;
24 | top: 2px;
25 | }
26 |
27 | @media (max-width: 480px) {
28 | .button {
29 | width: 160px
30 | }
31 | }
32 |
33 | `;
--------------------------------------------------------------------------------
/styling/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "styling-css-in-js",
3 | "version": "1.0.0",
4 | "description": "styling - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3"
12 | },
13 | "devDependencies": {
14 | "babel-loader": "^5.1.3",
15 | "css-loader": "^0.15.6",
16 | "extract-text-webpack-plugin": "^0.8.0",
17 | "style-loader": "^0.12.3",
18 | "styling": "^0.2.0",
19 | "webpack": "^1.9.9"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/hyperstyles/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hyperstyles-css-in-js",
3 | "version": "1.0.0",
4 | "description": "hyperstyles - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Colin Gourlay",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "hyperstyles": "^3.3.0"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "css-loader": "^0.15.6",
17 | "extract-text-webpack-plugin": "^0.8.0",
18 | "style-loader": "^0.12.3",
19 | "webpack": "^1.9.9"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/react-cxs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-cxs-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-cxs - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.2.1",
12 | "react-cxs": "^1.0.0-beta.4",
13 | "react-dom": "^15.2.1"
14 | },
15 | "devDependencies": {
16 | "babel-loader": "^6.2.4",
17 | "babel-preset-es2015": "^6.9.0",
18 | "babel-preset-react": "^6.11.1",
19 | "webpack": "^1.13.1"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/babel-plugin-pre-style/atomic.css.classNames.js:
--------------------------------------------------------------------------------
1 | module.exports = { '.✨PLACEHOLDER✨{text-align:center;}': 'A',
2 | '.✨PLACEHOLDER✨{background-color:red;}': 'B',
3 | '.✨PLACEHOLDER✨{width:320px;}': 'C',
4 | '.✨PLACEHOLDER✨{padding:20px;}': 'D',
5 | '.✨PLACEHOLDER✨{border-radius:5px;}': 'E',
6 | '.✨PLACEHOLDER✨{border:none;}': 'F',
7 | '.✨PLACEHOLDER✨{outline:none;}': 'G',
8 | '.✨PLACEHOLDER✨:hover{color:#fff;}': 'H',
9 | '.✨PLACEHOLDER✨:active{position:relative;}': 'I',
10 | '.✨PLACEHOLDER✨:active{top:2px;}': 'J',
11 | '@media (max-width:480px){.✨PLACEHOLDER✨{width:160px;}}': 'K' };
--------------------------------------------------------------------------------
/i-css/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "i-css-css-in-js",
3 | "version": "1.0.0",
4 | "description": "i-css - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "i-css": "^1.0.4",
12 | "react": "^15.0.1",
13 | "react-dom": "^15.0.1"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.18.2",
17 | "babel-loader": "^6.2.4",
18 | "babel-preset-es2015": "^6.6.0",
19 | "babel-preset-react": "^6.5.0",
20 | "webpack": "^1.13.0"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/jsxstyle/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {Block} from 'jsxstyle';
3 |
4 | const styles = {
5 | button: {
6 | backgroundColor: '#ff0000',
7 | width: '320px',
8 | padding: '20px',
9 | borderRadius: '5px',
10 | border: 'none',
11 | outline: 'none'
12 | }
13 | };
14 |
15 | const Button = React.createClass({
16 | render() {
17 | return (
18 |
19 | Click me!
20 |
21 | );
22 | }
23 | });
24 |
25 | React.render( , document.getElementById('content'));
26 |
--------------------------------------------------------------------------------
/linaria/webpack.config.js:
--------------------------------------------------------------------------------
1 | const ExtractTextPlugin = require('extract-text-webpack-plugin');
2 |
3 | module.exports = {
4 | module: {
5 | rules: [
6 | {
7 | test: /\.js$/,
8 | exclude: /(node_modules|bower_components)/,
9 | use: ['babel-loader', 'linaria/loader']
10 | },
11 | {
12 | test: /\.css$/,
13 | use: ExtractTextPlugin.extract({
14 | fallback: "style-loader",
15 | use: "css-loader"
16 | }),
17 | },
18 | ]
19 | },
20 | plugins: [
21 | new ExtractTextPlugin("styles.css"),
22 | ],
23 | }
24 |
--------------------------------------------------------------------------------
/glamor/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "glamor-css-css-in-js",
3 | "version": "1.0.0",
4 | "description": "glamor - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "glamor": "^2.1.0",
12 | "react": "^15.2.1",
13 | "react-dom": "^15.2.1"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.18.2",
17 | "babel-loader": "^6.2.4",
18 | "babel-preset-es2015": "^6.9.0",
19 | "babel-preset-react": "^6.11.1",
20 | "webpack": "^1.13.1"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/react-styleable/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-styleable-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-styleable - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "react-styleable": "^1.4.0"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "css-loader": "^0.15.6",
17 | "extract-text-webpack-plugin": "^0.8.0",
18 | "style-loader": "^0.12.3",
19 | "webpack": "^1.9.9"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/restyles/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "restyles-css-in-js",
3 | "version": "1.0.0",
4 | "description": "restyles - css-in-js",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.6.1",
12 | "react-dom": "^15.6.1",
13 | "restyles": "^2.0.1"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.25.0",
17 | "babel-loader": "^7.1.1",
18 | "babel-preset-env": "^1.6.0",
19 | "babel-preset-react": "^6.24.1",
20 | "webpack": "^3.3.0"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/react-css-modules/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-css-modules-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-css-modules - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "react-css-modules": "^3.0.2"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^5.1.3",
16 | "css-loader": "^0.15.6",
17 | "extract-text-webpack-plugin": "^0.8.0",
18 | "style-loader": "^0.12.3",
19 | "webpack": "^1.9.9"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/react-statics-styles/gulpfile.js:
--------------------------------------------------------------------------------
1 | require('babel/register')({
2 | only: /\.jsx$/,
3 | optional: [
4 | 'runtime',
5 | 'es7.classProperties',
6 | 'es7.decorators',
7 | ],
8 | });
9 |
10 | var gulp = require('gulp');
11 | var babel = require("gulp-babel");
12 | var revertPath = require('gulp-revert-path');
13 | var styles = require('gulp-react-statics-styles');
14 |
15 | gulp.task('componentsCSS', function() {
16 | return gulp.src('./button.jsx')
17 | .pipe(babel({
18 | stage: 0
19 | }))
20 | .pipe(revertPath())
21 | .pipe(styles())
22 | .pipe(gulp.dest('./'));
23 | });
24 |
--------------------------------------------------------------------------------
/typestyle/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "typestyle-css-in-js",
3 | "version": "1.0.0",
4 | "description": "typestyle - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Bradley Ayers",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.3.0",
12 | "react-dom": "^15.3.0",
13 | "typestyle": "^0.22.3"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.11.4",
17 | "babel-loader": "^6.2.4",
18 | "babel-preset-es2015": "^6.9.0",
19 | "babel-preset-react": "^6.11.1",
20 | "webpack": "^1.13.1"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/react-cssom/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-cssom-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-cssom - css-in-js",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.6.1",
12 | "react-cssom": "^1.0.0",
13 | "react-dom": "^15.6.1"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.25.0",
17 | "babel-loader": "^7.1.1",
18 | "babel-preset-env": "^1.6.0",
19 | "babel-preset-react": "^6.24.1",
20 | "webpack": "^3.3.0"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/styled-jsx/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "styled-jsx-css-in-js",
3 | "version": "1.0.0",
4 | "description": "styled-jsx - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.3.0",
12 | "react-dom": "^15.3.0",
13 | "styled-jsx": "0.0.7"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.11.4",
17 | "babel-loader": "^6.2.4",
18 | "babel-preset-es2015": "^6.9.0",
19 | "babel-preset-react": "^6.11.1",
20 | "webpack": "^1.13.1"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/superstyle/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "superstyle-css-in-js",
3 | "version": "1.0.0",
4 | "description": "superstyle - css-in-js",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.6.1",
12 | "react-dom": "^15.6.1",
13 | "superstyle": "^1.0.0-1"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.25.0",
17 | "babel-loader": "^7.1.1",
18 | "babel-preset-env": "^1.6.0",
19 | "babel-preset-react": "^6.24.1",
20 | "webpack": "^3.3.0"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/react-vstyle/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-vstyle-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-vstyle - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.1.0",
12 | "react-dom": "^15.1.0",
13 | "react-vstyle": "^0.1.0",
14 | "vstyle": "^0.1.2"
15 | },
16 | "devDependencies": {
17 | "babel-loader": "^6.2.4",
18 | "babel-preset-es2015": "^6.9.0",
19 | "babel-preset-react": "^6.5.0",
20 | "webpack": "^1.13.1"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/react-inline/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-inline-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-inline - CSS in JS",
5 | "scripts": {
6 | "build": "react-inline-extract --follow-requires --ignore-dependencies --ignore-node-core --vendor-prefixes --bundle ../bundle.css --babelize . lib/ button && webpack ./lib/button.js bundle.js"
7 | },
8 | "author": "Martin Andert",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "react-inline": "^0.6.3"
13 | },
14 | "devDependencies": {
15 | "babel-runtime": "^5.4.7",
16 | "webpack": "^1.9.10"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/uranium/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "uranium-css-in-js",
3 | "version": "1.0.0",
4 | "description": "uranium - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "15.3.2",
12 | "react-dom": "15.3.2",
13 | "uranium": "github:tuckerconnelly/uranium"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.18.2",
17 | "babel-loader": "^6.2.8",
18 | "babel-preset-es2015": "^6.18.0",
19 | "babel-preset-react": "^6.16.0",
20 | "webpack": "^1.13.3"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/react-cssom/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import ReactCSSOM from 'react-cssom';
4 |
5 | class Container extends React.Component {
6 | render() {
7 | return {this.props.children}
;
8 | }
9 | }
10 |
11 | Container.displayName = 'Container';
12 |
13 | class Button extends React.Component {
14 | render() {
15 | return {this.props.children} ;
16 | }
17 | }
18 |
19 | Button.displayName = 'Button';
20 |
21 | ReactDOM.render(
22 |
23 | Click me!
24 | ,
25 | document.getElementById('content')
26 | );
27 |
--------------------------------------------------------------------------------
/glamorous/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "glamor-css-css-in-js",
3 | "version": "1.0.0",
4 | "description": "glamorous - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "glamor": "^2.1.0",
12 | "glamorous": "^1.0.1",
13 | "react": "^15.2.1",
14 | "react-dom": "^15.2.1"
15 | },
16 | "devDependencies": {
17 | "babel-core": "^6.18.2",
18 | "babel-loader": "^6.2.4",
19 | "babel-preset-env": "^1.3.2",
20 | "babel-preset-react": "^6.11.1",
21 | "webpack": "^1.13.1"
22 | }
23 | }
--------------------------------------------------------------------------------
/react-jss/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-jss-css-in-js",
3 | "version": "2.0.0",
4 | "description": "react-jss - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "jss": "^3.6.0",
12 | "jss-vendor-prefixer": "^2.0.0",
13 | "jss-camel-case": "^1.0.2",
14 | "jss-default-unit": "^2.1.1",
15 | "jss-nested": "^1.0.3",
16 | "react": "^0.13.3",
17 | "react-jss": "^2.0.5"
18 | },
19 | "devDependencies": {
20 | "babel-loader": "^5.1.3",
21 | "webpack": "^1.9.9"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/cssx-loader/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "cssx-loader-css-in-js",
3 | "version": "1.0.0",
4 | "description": "cssx-loader - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "cssx": "^3.8.0",
12 | "react": "^15.0.1",
13 | "react-dom": "^15.0.1"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.18.2",
17 | "babel-loader": "^6.2.4",
18 | "babel-preset-es2015": "^6.6.0",
19 | "babel-preset-react": "^6.5.0",
20 | "cssx-loader": "^3.8.0",
21 | "webpack": "^1.13.0"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/react-fela/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-fela-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-fela - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "fela": "^1.1.0",
12 | "react": "^15.3.0",
13 | "react-dom": "^15.3.0",
14 | "react-fela": "^2.1.0"
15 | },
16 | "devDependencies": {
17 | "babel-core": "^6.11.4",
18 | "babel-loader": "^6.2.4",
19 | "babel-preset-es2015": "^6.9.0",
20 | "babel-preset-react": "^6.11.1",
21 | "webpack": "^1.13.1"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/styled-components/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "styled-components-css-in-js",
3 | "version": "1.0.0",
4 | "description": "styled-components - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.3.0",
12 | "react-dom": "^15.3.0",
13 | "styled-components": "^1.0.3"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.11.4",
17 | "babel-loader": "^6.2.4",
18 | "babel-preset-es2015": "^6.9.0",
19 | "babel-preset-react": "^6.11.1",
20 | "webpack": "^1.13.1"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/stylable/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "stylable-css-in-js",
3 | "version": "1.0.0",
4 | "description": "stylable - css-in-js",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^16.2.0",
12 | "react-dom": "^16.2.0",
13 | "stylable": "^5.0.2",
14 | "stylable-integration": "^6.0.1"
15 | },
16 | "devDependencies": {
17 | "babel-core": "^6.26.0",
18 | "babel-loader": "^7.1.2",
19 | "babel-preset-env": "^1.6.1",
20 | "babel-preset-react": "^6.24.1",
21 | "webpack": "^3.10.0"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/babel-plugin-css-in-js/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "babel-plugin-css-in-js",
3 | "version": "1.0.0",
4 | "description": "babel-plugin-css-in-js - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Martin Andert",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.14.2",
12 | "react-dom": "^0.14.2"
13 | },
14 | "devDependencies": {
15 | "babel-core": "^6.1.21",
16 | "babel-loader": "^6.1.0",
17 | "babel-plugin-css-in-js": "^1.2.2",
18 | "babel-preset-es2015": "^6.1.18",
19 | "babel-preset-react": "^6.1.18",
20 | "webpack": "^1.12.6"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/stylable/main.css:
--------------------------------------------------------------------------------
1 | .button1977411557💠root .button1977411557💠container {
2 | text-align: center;
3 | }
4 |
5 | .button1977411557💠root .button1977411557💠button {
6 | background-color: #ff0000;
7 | width: 320px;
8 | padding: 20px;
9 | border-radius: 5px;
10 | border: none;
11 | outline: none;
12 | }
13 |
14 | .button1977411557💠root .button1977411557💠button:hover {
15 | color: #fff;
16 | }
17 |
18 | .button1977411557💠root .button1977411557💠button:active {
19 | position: relative;
20 | top: 2px;
21 | }
22 |
23 | @media (max-width: 480px) {
24 | .button1977411557💠root .button1977411557💠button {
25 | width: 160px
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/stile-react-media-queries/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "stile-react-media-queries",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "button.js",
6 | "scripts": {
7 | "build": "webpack button.js bundle.js"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "devDependencies": {
12 | "babel-loader": "^6.2.1",
13 | "babel-plugin-transform-object-rest-spread": "^6.3.13",
14 | "babel-preset-es2015": "^6.3.13",
15 | "babel-preset-react": "^6.3.13",
16 | "react": "^0.14.6",
17 | "react-dom": "^0.14.6",
18 | "react-media-queries": "^2.0.1",
19 | "stile": "^2.0.0",
20 | "webpack": "^1.12.11"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/emotion/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "emotion-css-in-js",
3 | "version": "1.0.0",
4 | "description": "emotion - css-in-js",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "emotion": "^6.0.3",
12 | "react": "^15.6.1",
13 | "react-dom": "^15.6.1"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.25.0",
17 | "babel-loader": "^7.1.1",
18 | "babel-preset-env": "^1.6.0",
19 | "babel-preset-react": "^6.24.1",
20 | "css-loader": "^0.28.4",
21 | "style-loader": "^0.18.2",
22 | "webpack": "^3.3.0"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/styletron-react/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "styletron-react-css-in-js",
3 | "version": "1.0.0",
4 | "description": "styletron-react - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.3.0",
12 | "react-dom": "^15.3.0",
13 | "styletron-client": "^2.1.2",
14 | "styletron-react": "^2.1.2"
15 | },
16 | "devDependencies": {
17 | "babel-core": "^6.11.4",
18 | "babel-loader": "^6.2.4",
19 | "babel-preset-es2015": "^6.9.0",
20 | "babel-preset-react": "^6.11.1",
21 | "webpack": "^1.13.1"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/aphrodite/other/generate-css-file.js:
--------------------------------------------------------------------------------
1 | import {writeFileSync} from 'fs'
2 | import {resolve} from 'path'
3 | import React from 'react'
4 | import ReactDOMServer from 'react-dom/server'
5 | import {StyleSheetServer} from 'aphrodite'
6 | import Button from '../button'
7 |
8 | generateCSSFile(
9 | ,
10 | resolve(__dirname, '../bundle.css')
11 | );
12 |
13 | function generateCSSFile(comp, destination) {
14 | const {html, css} = StyleSheetServer.renderStatic(() => {
15 | return ReactDOMServer.renderToStaticMarkup(comp);
16 | });
17 | // in a universal React App, you'll probably want to do something with the `html` too.
18 | writeFileSync(destination, css.content);
19 | }
20 |
--------------------------------------------------------------------------------
/css-constructor/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "css-constructor-css-in-js",
3 | "version": "1.0.0",
4 | "description": "css-constructor - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "css-constructor": "0.1.1",
12 | "react": "^15.3.0",
13 | "react-dom": "^15.3.0"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.11.4",
17 | "babel-loader": "^6.2.4",
18 | "babel-plugin-transform-decorators-legacy": "^1.3.4",
19 | "babel-preset-es2015": "^6.9.0",
20 | "babel-preset-react": "^6.11.1",
21 | "webpack": "^1.13.1"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/uranium/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render } from 'react-dom';
3 | import Uranium from 'uranium';
4 |
5 | const styles = {
6 | container: {
7 | textAlign: 'center'
8 | },
9 | button: {
10 | backgroundColor: '#ff0000',
11 | width: 320,
12 | padding: 20,
13 | borderRadius: 5,
14 | border: 'none',
15 | outline: 'none',
16 | '@media (max-width: 480px)': {
17 | width: 160
18 | }
19 | }
20 | };
21 |
22 | const Button = Uranium(() => (
23 |
24 |
25 | Click me!
26 |
27 |
28 | ));
29 |
30 | render( , document.getElementById('content'));
31 |
--------------------------------------------------------------------------------
/babel-plugin-pre-style/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pre-style-css-in-js",
3 | "version": "1.0.0",
4 | "description": "pre-style - css-in-js",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.6.1",
12 | "react-dom": "^15.6.1"
13 | },
14 | "devDependencies": {
15 | "babel-core": "^6.25.0",
16 | "babel-loader": "^7.1.1",
17 | "babel-plugin-pre-style": "^1.0.9-alpha",
18 | "babel-preset-env": "^1.6.0",
19 | "babel-preset-react": "^6.24.1",
20 | "css-loader": "^0.28.4",
21 | "style-loader": "^0.18.2",
22 | "webpack": "^3.3.0"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/freestyler/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "freestyler-css-in-js",
3 | "version": "1.0.0",
4 | "description": "freestyler - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Vadim Dalecky",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^16.0.0",
12 | "react-dom": "^16.0.0",
13 | "freestyler": "1.0.2"
14 | },
15 | "devDependencies": {
16 | "webpack": "^3.6.0",
17 | "http-server": "^0.10.0",
18 | "babel-core": "^6.26.0",
19 | "babel-loader": "^7.1.2",
20 | "babel-preset-es2015": "^6.24.1",
21 | "babel-preset-react": "^6.24.1",
22 | "babel-plugin-transform-decorators-legacy": "^1.3.4"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/linaria/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "linaria-css-in-js",
3 | "version": "1.0.0",
4 | "description": "linaria - css-in-js",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "linaria": "0.5.0",
12 | "react": "^16.2.0",
13 | "react-dom": "^16.2.0"
14 | },
15 | "devDependencies": {
16 | "babel-core": "^6.26.0",
17 | "babel-loader": "^7.1.2",
18 | "babel-preset-env": "^1.6.1",
19 | "babel-preset-react": "^6.24.1",
20 | "css-loader": "^0.28.7",
21 | "extract-text-webpack-plugin": "^3.0.2",
22 | "style-loader": "^0.19.1",
23 | "webpack": "^3.10.0"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/react-css-builder/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactCSSBuilder from 'react-css-builder';
3 |
4 | const styles = ReactCSSBuilder.create({
5 | container: {
6 | textAlign: 'center'
7 | },
8 | button: {
9 | backgroundColor: '#ff0000',
10 | width: '320px',
11 | padding: '20px',
12 | borderRadius: '5px',
13 | border: 'none',
14 | outline: 'none'
15 | }
16 | });
17 |
18 | const Button = React.createClass({
19 | render() {
20 | return (
21 |
22 | Click me!
23 |
24 | );
25 | }
26 | });
27 |
28 | React.render( , document.getElementById('content'));
29 |
--------------------------------------------------------------------------------
/glamor/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import { style, hover, active, media } from 'glamor';
4 |
5 | const button = {
6 | backgroundColor: '#ff0000',
7 | width: 320,
8 | padding: 20,
9 | borderRadius: 5,
10 | border: 'none',
11 | outline: 'none'
12 | };
13 |
14 | const Button = () => (
15 |
16 |
22 | Click me!
23 |
24 |
25 | );
26 |
27 | ReactDOM.render( , document.getElementById('content'));
28 |
--------------------------------------------------------------------------------
/react-statics-styles/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-statics-styles-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-statics-styles - CSS in JS",
5 | "scripts": {
6 | "build": "gulp componentsCSS && webpack ./button.jsx bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^0.13.3",
12 | "react-statics-styles": "^3.0.2"
13 | },
14 | "devDependencies": {
15 | "babel": "^5.6.14",
16 | "babel-loader": "^5.1.3",
17 | "babel-runtime": "^5.6.15",
18 | "gulp": "^3.8.11",
19 | "gulp-babel": "^5.1.0",
20 | "gulp-react-statics-styles": "^4.0.2",
21 | "gulp-revert-path": "^1.0.0",
22 | "webpack": "^1.9.9"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/webpage/src/components/Navbar.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Navbar = () => {
4 | return (
5 |
6 |
10 | CSS in JS
11 |
12 |
24 |
25 | );
26 | };
27 |
28 | export default Navbar;
29 |
--------------------------------------------------------------------------------
/emotion/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render } from 'react-dom';
3 | import styled from 'emotion/react'
4 |
5 | const Container = styled('div')`
6 | textAlign: center;
7 | `;
8 |
9 | const Button = styled('button')`
10 | backgroundColor: #ff0000;
11 | width: 320px;
12 | padding: 20px;
13 | borderRadius: 5px;
14 | border: none;
15 | outline: none;
16 | &:hover {
17 | color: #fff;
18 | }
19 | &:active {
20 | position: relative;
21 | top: 2px;
22 | }
23 | @media (max-width: 480px) {
24 | width: 160px;
25 | }
26 | `;
27 |
28 | const App = () => (
29 |
30 | Click me!
31 |
32 | );
33 |
34 | render( , document.getElementById('content'));
35 |
--------------------------------------------------------------------------------
/style-it/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "style-it-css-in-js",
3 | "version": "1.0.0",
4 | "description": "Reactive Style - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.3.0",
12 | "react-dom": "^15.3.0",
13 | "style-it": "^1.2.9"
14 | },
15 | "babel": {
16 | "presets": [
17 | "es2015",
18 | "stage-1",
19 | "react"
20 | ]
21 | },
22 | "devDependencies": {
23 | "babel-loader": "^6.2.4",
24 | "babel-preset-es2015": "^6.13.2",
25 | "babel-preset-react": "^6.11.1",
26 | "babel-preset-stage-1": "^6.13.0",
27 | "webpack": "^1.13.1"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/react-css-components/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-css-components-css-in-js",
3 | "version": "1.0.0",
4 | "description": "react-css-components - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Michele Bertoli",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.1.0",
12 | "react-dom": "^15.1.0"
13 | },
14 | "devDependencies": {
15 | "babel-loader": "^6.2.4",
16 | "babel-plugin-transform-object-rest-spread": "^6.8.0",
17 | "babel-preset-es2015": "^6.9.0",
18 | "babel-preset-react": "^6.5.0",
19 | "css-loader": "^0.23.1",
20 | "react-css-components": "^0.6.9",
21 | "style-loader": "^0.13.1",
22 | "webpack": "^1.13.1"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/styled-components/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render } from 'react-dom';
3 | import styled from 'styled-components';
4 |
5 | const Container = styled.div`
6 | textAlign: center;
7 | `;
8 |
9 | const Button = styled.button`
10 | backgroundColor: #ff0000;
11 | width: 320px;
12 | padding: 20px;
13 | borderRadius: 5px;
14 | border: none;
15 | outline: none;
16 | &:hover {
17 | color: #fff;
18 | }
19 | &:active {
20 | position: relative;
21 | top: 2px;
22 | }
23 | @media (max-width: 480px) {
24 | width: 160px;
25 | }
26 | `;
27 |
28 | const App = () => (
29 |
30 | Click me!
31 |
32 | );
33 |
34 | render( , document.getElementById('content'));
35 |
--------------------------------------------------------------------------------
/react-theme/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react'
2 | import Theme from 'react-theme'
3 |
4 | const theme = new Theme()
5 |
6 | theme.setSource('container', () => ({
7 | textAlign: 'center'
8 | }))
9 |
10 | theme.setSource('button', () => ({
11 | backgroundColor: '#ff0000',
12 | width: '320px',
13 | padding: '20px',
14 | borderRadius: '5px',
15 | border: 'none',
16 | outline: 'none'
17 | }))
18 |
19 | class Button extends Component {
20 | render() {
21 | return (
22 |
23 |
24 | Click me!
25 |
26 |
27 | )
28 | }
29 | }
30 |
31 | React.render( , document.getElementById('content'))
32 |
--------------------------------------------------------------------------------
/reactcss/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {Component} from 'reactcss';
3 |
4 | class Button extends Component {
5 | classes() {
6 | return {
7 | 'default': {
8 | container: {
9 | textAlign: 'center'
10 | },
11 | button: {
12 | backgroundColor: '#ff0000',
13 | width: '320px',
14 | padding: '20px',
15 | borderRadius: '5px',
16 | border: 'none',
17 | outline: 'none',
18 | }
19 | }
20 | }
21 | }
22 | render() {
23 | return (
24 |
25 | Click me!
26 |
27 | );
28 | }
29 | }
30 |
31 | React.render( , document.getElementById('content'));
32 |
--------------------------------------------------------------------------------
/linaria/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render } from 'react-dom';
3 | import { css, include, styles } from 'linaria';
4 |
5 | const container = css`
6 | text-align: center;
7 | `;
8 |
9 | const button = css`
10 | background-color: #ff0000;
11 | width: 320px;
12 | padding: 20px;
13 | border-radius: 5px;
14 | border: none;
15 | outline: none;
16 | &:hover {
17 | color: #fff;
18 | }
19 | &:active {
20 | position: relative;
21 | top: 2px;
22 | }
23 | @media (max-width: 480px) {
24 | width: 160px;
25 | }
26 | `;
27 |
28 | const App = () => (
29 |
30 |
31 | Click me!
32 |
33 |
34 | );
35 |
36 | render( , document.getElementById('content'));
37 |
--------------------------------------------------------------------------------
/webpage/src/components/Filter.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Filter = props => {
4 | return (
5 |
6 | {props.filters.map((x, index) => {
7 | return (
8 |
9 |
10 |
16 | {` ${x.name}`}
17 |
18 |
19 | );
20 | })}
21 |
22 | );
23 | };
24 |
25 | export default Filter;
26 |
--------------------------------------------------------------------------------
/aphrodite/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "aphrodite-css-in-js",
3 | "version": "1.0.0",
4 | "description": "aphrodite - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./bootstrap.js bundle.js",
7 | "generate-css-file": "babel-node ./other/generate-css-file"
8 | },
9 | "author": "Michele Bertoli",
10 | "license": "MIT",
11 | "dependencies": {
12 | "aphrodite": "1.2.3",
13 | "react": "15.1.0"
14 | },
15 | "devDependencies": {
16 | "babel-cli": "6.9.0",
17 | "babel-core": "6.9.1",
18 | "babel-loader": "6.2.4",
19 | "babel-preset-es2015": "6.9.0",
20 | "babel-preset-react": "6.5.0",
21 | "react-dom": "15.1.0",
22 | "webpack": "^1.9.9"
23 | },
24 | "babel": {
25 | "presets": [
26 | "es2015",
27 | "react"
28 | ]
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/react-styl/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactStyl from 'react-styl';
3 |
4 | ReactStyl(`
5 |
6 | .container
7 | text-align: center
8 |
9 | .button
10 | background-color: #ff0000
11 | width: 320px
12 | padding: 20px
13 | border-radius: 5px
14 | border: none
15 | outline: none
16 | &:hover
17 | color: #fff
18 | &:active
19 | position: relative
20 | top: 2px
21 |
22 | @media (max-width: 480px)
23 | .button
24 | width: 160px
25 |
26 | `);
27 |
28 | const Button = React.createClass({
29 | render() {
30 | return (
31 |
32 | Click me!
33 |
34 | );
35 | }
36 | });
37 |
38 | ReactStyl.addStylesheet();
39 |
40 | React.render( , document.getElementById('content'));
41 |
--------------------------------------------------------------------------------
/glamorous/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import glamorous from 'glamorous';
4 | const { Div } = glamorous;
5 |
6 | const MyStyledButton = glamorous.button({
7 | backgroundColor: '#ff0000',
8 | width: 320,
9 | padding: 20,
10 | borderRadius: 5,
11 | border: 'none',
12 | outline: 'none',
13 | ':hover': {
14 | color: '#fff',
15 | },
16 | ':active': {
17 | position: 'relative',
18 | top: 2,
19 | },
20 | '@media(max-width: 480px)': {
21 | width: 160,
22 | },
23 | });
24 |
25 | const Button = () => (
26 | // Div could also be used like:
27 |
28 |
29 | Click me!
30 |
31 |
32 | );
33 |
34 | ReactDOM.render( , document.getElementById('content'));
35 |
--------------------------------------------------------------------------------
/es-css-modules/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gulp-es-css-modules-demo",
3 | "version": "0.0.1",
4 | "main": "index.js",
5 | "scripts": {
6 | "build": "gulp",
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "devDependencies": {
13 | "babel": "^6.5.2",
14 | "babel-loader": "^6.2.4",
15 | "babel-preset-es2015": "^6.6.0",
16 | "babel-preset-react": "^6.5.0",
17 | "del": "^2.2.0",
18 | "es-css-modules": "^1.2.1",
19 | "eslint": "^2.7.0",
20 | "eslint-config-airbnb": "^6.2.0",
21 | "eslint-plugin-react": "^4.3.0",
22 | "gulp": "^3.9.1",
23 | "gulp-postcss": "^6.1.1",
24 | "webpack": "^1.13.1"
25 | },
26 | "dependencies": {
27 | "react": "^0.14.8",
28 | "react-dom": "^0.14.8"
29 | },
30 | "description": ""
31 | }
32 |
--------------------------------------------------------------------------------
/aphrodite/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import {StyleSheet, css} from 'aphrodite';
3 |
4 | const styles = StyleSheet.create({
5 | container: {
6 | textAlign: 'center'
7 | },
8 | button: {
9 | backgroundColor: '#ff0000',
10 | width: '320px',
11 | padding: '20px',
12 | borderRadius: '5px',
13 | border: 'none',
14 | outline: 'none',
15 | ':hover': {
16 | color: '#fff',
17 | },
18 | ':active': {
19 | position: 'relative',
20 | top: '2px'
21 | },
22 | '@media (max-width: 480px)': {
23 | width: '160px'
24 | }
25 | }
26 | });
27 |
28 | export default class Button extends Component {
29 | render() {
30 | return (
31 |
32 | Click me!
33 |
34 | );
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/pre-style/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './app.scss';
4 |
5 | const styles = {
6 | container: PreStyle`
7 | text-align: center;
8 | `,
9 | button: PreStyle`
10 | background-color: $bgc; //<- Look Sass in my JS :D
11 | border: none;
12 | border-radius: 5px;
13 | outline: none;
14 | padding: 20px;
15 | width: 320px;
16 |
17 | &:hover {
18 | color: $hoverBgc;
19 | }
20 |
21 | &:active {
22 | position: relative;
23 | top: 2px;
24 | }
25 |
26 | @media (max-width: 480px) {
27 | width: 160px;
28 | }
29 | `
30 | };
31 |
32 | const Component = () => (
33 |
34 | Click me!
35 |
36 | );
37 |
38 | ReactDOM.render( , document.getElementById('content'));
39 |
--------------------------------------------------------------------------------
/babel-plugin-css-in-js/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render } from 'react-dom';
3 |
4 | const styles = cssInJS({
5 | container: {
6 | textAlign: 'center'
7 | },
8 | button: {
9 | backgroundColor: '#ff0000',
10 | width: 320,
11 | padding: 20,
12 | borderRadius: 5,
13 | border: 'none',
14 | outline: 'none',
15 | ':hover': {
16 | color: '#fff'
17 | },
18 | ':active': {
19 | position: 'relative',
20 | top: 2
21 | },
22 | '@media (max-width: 480px)': {
23 | width: 160
24 | }
25 | }
26 | });
27 |
28 | class Button extends React.Component {
29 | render() {
30 | return (
31 |
32 | Click me!
33 |
34 | );
35 | }
36 | }
37 |
38 | render( , document.getElementById('content'));
39 |
--------------------------------------------------------------------------------
/es-css-modules/gulpfile.babel.js:
--------------------------------------------------------------------------------
1 | import gulp from 'gulp';
2 | import del from 'del';
3 | import postcss from 'gulp-postcss';
4 | import webpack from 'webpack';
5 | import esCssModules from 'es-css-modules';
6 |
7 | gulp.task('clean-css', () => (
8 | del([
9 | 'dist',
10 | ])
11 | ));
12 |
13 | gulp.task('css', ['clean-css'], () => (
14 | gulp.src('*.css')
15 | .pipe(postcss([
16 | esCssModules({
17 | jsFiles: './button.js',
18 | }),
19 | ]))
20 | .pipe(gulp.dest('dist'))
21 | ));
22 |
23 | gulp.task('js', ['css'], (cb) => {
24 | webpack({
25 | entry: './button.js',
26 | output: {
27 | filename: './dist/bundle.js'
28 | },
29 | module: {
30 | loaders: [
31 | { test: /\.js$/, exclude: /node_modules/, loader: 'babel' },
32 | ],
33 | },
34 | }, cb);
35 | })
36 |
37 | gulp.task('default', ['css', 'js']);
38 |
--------------------------------------------------------------------------------
/pre-style/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Pre-Style-css-in-js",
3 | "version": "1.0.0",
4 | "description": "Pre-Style - CSS in JS",
5 | "scripts": {
6 | "build": "webpack ./button.js bundle.js"
7 | },
8 | "author": "Benjamin Solum",
9 | "license": "MIT",
10 | "dependencies": {
11 | "react": "^15.4.2",
12 | "react-dom": "^15.4.2"
13 | },
14 | "devDependencies": {
15 | "autoprefixer": "6.5.0",
16 | "babel-core": "6.16.0",
17 | "babel-eslint": "7.0.0",
18 | "babel-loader": "6.2.5",
19 | "babel-plugin-pre-style": "^1.0.9-alpha",
20 | "babel-preset-es2015": "6.16.0",
21 | "babel-preset-react": "6.16.0",
22 | "css-loader": "0.25.0",
23 | "cssnano": "3.7.5",
24 | "node-sass": "3.10.0",
25 | "postcss-loader": "0.13.0",
26 | "sass-loader": "4.0.2",
27 | "style-loader": "^0.13.1",
28 | "webpack": "1.13.2"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/radium/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import Radium from 'radium';
3 |
4 | const styles = {
5 | container: {
6 | textAlign: 'center'
7 | },
8 | button: {
9 | backgroundColor: '#ff0000',
10 | width: '320px',
11 | padding: '20px',
12 | borderRadius: '5px',
13 | border: 'none',
14 | outline: 'none',
15 | ':hover': {
16 | color: '#fff',
17 | },
18 | ':active': {
19 | position: 'relative',
20 | top: '2px'
21 | },
22 | '@media (max-width: 480px)': {
23 | width: '160px'
24 | }
25 | }
26 | };
27 |
28 | @Radium
29 | class Button extends Component {
30 | render() {
31 | return (
32 |
33 | Click me!
34 |
35 | );
36 | }
37 | }
38 |
39 | React.render( , document.getElementById('content'));
40 |
--------------------------------------------------------------------------------
/react-inline/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import StyleSheet from 'react-inline';
3 |
4 | const styles = StyleSheet.create({
5 | container: {
6 | textAlign: 'center'
7 | },
8 | button: {
9 | backgroundColor: '#ff0000',
10 | width: 320,
11 | padding: 20,
12 | borderRadius: 5,
13 | border: 'none',
14 | outline: 'none',
15 | ':hover': {
16 | color: '#fff'
17 | },
18 | ':active': {
19 | position: 'relative',
20 | top: 2
21 | },
22 | '@media (max-width: 480px)': {
23 | width: 160
24 | }
25 | }
26 | });
27 |
28 | class Button extends React.Component {
29 | render() {
30 | return (
31 |
32 | Click me!
33 |
34 | );
35 | }
36 | }
37 |
38 | React.render( , document.getElementById('content'));
39 |
--------------------------------------------------------------------------------
/react-cxs/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 |
4 | const Component = () => {
5 | const classNames = {
6 | container: {
7 | textAlign: 'center'
8 | },
9 | button: {
10 | backgroundColor: '#ff0000',
11 | width: '320px',
12 | padding: '20px',
13 | borderRadius: '5px',
14 | border: 'none',
15 | outline: 'none',
16 | ':hover': {
17 | color: '#fff',
18 | },
19 | ':active': {
20 | position: 'relative',
21 | top: '2px'
22 | },
23 | '@media (max-width: 480px)': {
24 | width: '160px'
25 | }
26 | }
27 | };
28 |
29 | return (
30 |
31 | Click me!
32 |
33 | );
34 | };
35 |
36 | ReactDOM.render( , document.getElementById('content'));
37 |
--------------------------------------------------------------------------------
/freestyler/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import {render} from 'react-dom';
3 | import {createFreestyler} from 'freestyler';
4 |
5 | const css = createFreestyler(React);
6 |
7 | const Button = css.styled('button')({
8 | bg: 'red',
9 | w: '320px',
10 | pad: '20px',
11 | bdrad: '5px',
12 | bd: 'none',
13 | outline: 'none',
14 | '&:hover': {
15 | col: '#fff',
16 | },
17 | '&:active': {
18 | pos: 'relative',
19 | top: '2px',
20 | },
21 | '@media (max-width: 480px)': {
22 | '.container &': {
23 | w: '160px',
24 | },
25 | },
26 | });
27 |
28 | class Container extends Component {
29 | @css({
30 | ta: 'center',
31 | })
32 | render() {
33 | return (
34 |
35 | Click me!
36 |
37 | );
38 | }
39 | }
40 |
41 | render( , document.getElementById('content'));
42 |
--------------------------------------------------------------------------------
/react-style/button.js:
--------------------------------------------------------------------------------
1 | // https://github.com/js-next/react-style-webpack-plugin/issues/14
2 | const React = require('react');
3 | const StyleSheet = require('react-style');
4 |
5 | const styles = StyleSheet.create({
6 | container: {
7 | textAlign: 'center'
8 | },
9 | button: {
10 | backgroundColor: '#ff0000',
11 | width: '320px',
12 | padding: '20px',
13 | borderRadius: '5px',
14 | border: 'none',
15 | outline: 'none'
16 | },
17 | '@media (max-width: 480px)': {
18 | button: {
19 | width: '160px'
20 | }
21 | }
22 | });
23 |
24 | const Button = React.createClass({
25 | render() {
26 | return (
27 |
28 | Click me!
29 |
30 | );
31 | }
32 | });
33 |
34 | if (typeof window !== 'undefined') {
35 | React.render( , document.getElementById('content'));
36 | }
37 |
--------------------------------------------------------------------------------
/react-native-web/button.js:
--------------------------------------------------------------------------------
1 | import React, { StyleSheet, Text, View } from 'react-native-web';
2 | import ReactDOM from 'react-dom';
3 |
4 | const styles = StyleSheet.create({
5 | container: {
6 | alignItems: 'center'
7 | },
8 | button: {
9 | backgroundColor: '#ff0000',
10 | width: 320,
11 | padding: 20,
12 | borderRadius: 5,
13 | borderWidth: 0
14 | },
15 | text: {
16 | textAlign: 'center'
17 | }
18 | });
19 |
20 | class Button extends React.Component {
21 | render() {
22 | return (
23 |
24 |
25 | Click me!
26 |
27 |
28 | );
29 | }
30 | }
31 |
32 | document.getElementById('react-stylesheet').textContent = StyleSheet.renderToString();
33 | ReactDOM.render( , document.getElementById('content'));
34 |
--------------------------------------------------------------------------------
/react-statics-styles/button.jsx:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import {styles} from 'react-statics-styles';
3 |
4 | @styles({
5 | '.container': {
6 | textAlign: 'center'
7 | },
8 | '.button': {
9 | backgroundColor: '#ff0000',
10 | width: '320px',
11 | padding: '20px',
12 | borderRadius: '5px',
13 | border: 'none',
14 | outline: 'none'
15 | },
16 | '.button:hover': {
17 | color: '#fff'
18 | },
19 | '.button:active': {
20 | position: 'relative',
21 | top: '2px'
22 | }
23 | })
24 | class Button extends Component {
25 | static displayName = 'Button';
26 | render() {
27 | return (
28 |
29 | Click me!
30 |
31 | );
32 | }
33 | }
34 |
35 | if (typeof window !== 'undefined') {
36 | React.render( , document.getElementById('content'));
37 | }
38 |
39 | export default Button;
40 |
--------------------------------------------------------------------------------
/react-stylematic/button.js:
--------------------------------------------------------------------------------
1 | /** @jsx createElement */
2 |
3 | import React, {Component} from 'react';
4 | import createElement from 'react-stylematic';
5 |
6 | const styles = {
7 | container: {
8 | textAlign: 'center'
9 | },
10 | button: {
11 | backgroundColor: '#ff0000',
12 | width: '320px',
13 | padding: '20px',
14 | borderRadius: '5px',
15 | border: 'none',
16 | outline: 'none',
17 | ':hover': {
18 | color: '#fff',
19 | },
20 | ':active': {
21 | position: 'relative',
22 | top: '2px'
23 | },
24 | '@media (max-width: 480px)': {
25 | width: '160px'
26 | }
27 | }
28 | };
29 |
30 | class Button extends Component {
31 | render() {
32 | return (
33 |
34 | Click me!
35 |
36 | );
37 | }
38 | }
39 |
40 | React.render( , document.getElementById('content'));
41 |
--------------------------------------------------------------------------------
/restyles/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import Style from 'restyles';
4 |
5 | const App = () => (
6 |
33 |
34 | Click me!
35 |
36 |
37 | );
38 | }
39 | });
40 |
41 | React.render( , document.getElementById('content'));
42 |
--------------------------------------------------------------------------------
/css-light/button.js:
--------------------------------------------------------------------------------
1 | import {createElement as h} from 'react';
2 | import {render} from 'react-dom';
3 | import {Comp} from "./base";
4 |
5 | class Button extends Comp {
6 | css = () => ({
7 | '.container': {
8 | ta: 'center',
9 | '.button': {
10 | bg: 'red',
11 | w: '320px',
12 | pad: '20px',
13 | bdrad: '5px',
14 | bd: 'none',
15 | outline: 'none',
16 | '&:hover': {
17 | col: '#fff',
18 | },
19 | '&:active': {
20 | pos: 'relative',
21 | top: '2px',
22 | },
23 | },
24 | },
25 | '@media (max-width: 480px)': {
26 | '.container .button': {
27 | w: '160px',
28 | },
29 | },
30 | });
31 |
32 | render() {
33 | return (
34 | h('div', {className: 'container'},
35 | h('button', {className: 'button'}, 'Click me!')
36 | )
37 | );
38 | }
39 | }
40 |
41 | render(h(Button), document.getElementById('content'));
42 |
--------------------------------------------------------------------------------
/style-it/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import ReactDOM from 'react-dom';
3 |
4 | import Style from 'style-it';
5 |
6 | class Button extends Component {
7 | render() {
8 | return Style.it(`
9 | .container {
10 | text-align: center;
11 | }
12 | .button {
13 | background-color: #ff0000;
14 | width: 320px;
15 | padding: 20px;
16 | border-radius: 5px;
17 | border: none;
18 | outline: none;
19 | }
20 | .button:hover {
21 | color: #fff;
22 | }
23 | .button:active {
24 | position: relative;
25 | top: 2px;
26 | }
27 | @media (max-width: 480px) {
28 | .button {
29 | width: 160px;
30 | }
31 | }
32 | `,
33 |
34 | Click me!
35 |
36 | );
37 | }
38 | }
39 |
40 | ReactDOM.render( , document.getElementById('content'));
41 |
--------------------------------------------------------------------------------
/react-jss/button.js:
--------------------------------------------------------------------------------
1 | import './jss';
2 | import React from 'react';
3 | import useSheet from 'react-jss';
4 |
5 | const styles = {
6 | container: {
7 | textAlign: 'center'
8 | },
9 | button: {
10 | backgroundColor: '#ff0000',
11 | width: 320,
12 | padding: 20,
13 | borderRadius: 5,
14 | border: 'none',
15 | outline: 'none',
16 | '&:hover': {
17 | color: '#fff'
18 | },
19 | '&:active': {
20 | position: 'relative',
21 | top: 2
22 | }
23 | },
24 | '@media (max-width: 480px)': {
25 | button: {
26 | width: 160
27 | }
28 | }
29 | };
30 |
31 | let Button = React.createClass({
32 | render() {
33 | const {classes} = this.props.sheet
34 | return (
35 |
36 | Click me!
37 |
38 | );
39 | }
40 | });
41 |
42 | Button = useSheet(Button, styles);
43 |
44 | React.render( , document.getElementById('content'));
45 |
--------------------------------------------------------------------------------
/smart-css/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import SmartCSS from 'smart-css';
3 |
4 | const css = new SmartCSS();
5 |
6 | css.setClass('.container', {
7 | textAlign: 'center'
8 | });
9 |
10 | css.setClass('.button', {
11 | backgroundColor: '#ff0000',
12 | width: '320px',
13 | padding: '20px',
14 | borderRadius: '5px',
15 | border: 'none',
16 | outline: 'none'
17 | });
18 |
19 | css.setClass('.button:hover', {
20 | color: '#fff'
21 | });
22 |
23 | css.setClass('.button:active', {
24 | position: 'relative',
25 | top: '2px'
26 | });
27 |
28 | css.setClass('.button', {
29 | width: '160px'
30 | }, {
31 | media: '(max-width: 480px)'
32 | });
33 |
34 | const Button = React.createClass({
35 | render() {
36 | return (
37 |
38 | Click me!
39 |
40 | );
41 | }
42 | });
43 |
44 | SmartCSS.injectStyles();
45 |
46 | React.render( , document.getElementById('content'));
47 |
--------------------------------------------------------------------------------
/cssx-loader/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import ReactDOM from 'react-dom';
3 | import 'cssx';
4 |
5 | class Button extends Component {
6 | componentWillMount() {
7 | ;
32 | }
33 | render() {
34 | return (
35 |
36 | Click me!
37 |
38 | );
39 | }
40 | }
41 |
42 | ReactDOM.render( , document.getElementById('content'));
43 |
--------------------------------------------------------------------------------
/react-free-style/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import {create, injectStyle} from 'react-free-style';
3 |
4 | const Style = create();
5 |
6 | const CONTAINER_STYLE = Style.registerStyle({
7 | textAlign: 'center'
8 | });
9 |
10 | const BUTTON_STYLE = Style.registerStyle({
11 | backgroundColor: '#ff0000',
12 | width: '320px',
13 | padding: '20px',
14 | borderRadius: '5px',
15 | border: 'none',
16 | outline: 'none',
17 | '&:hover': {
18 | color: '#fff',
19 | },
20 | '&:active': {
21 | position: 'relative',
22 | top: '2px'
23 | },
24 | '@media (max-width: 480px)': {
25 | width: '160px'
26 | }
27 | });
28 |
29 | @injectStyle(Style)
30 | class Button extends Component {
31 | render() {
32 | return (
33 |
34 | Click me!
35 |
36 |
37 | );
38 | }
39 | };
40 |
41 | React.render( , document.getElementById('content'));
42 |
--------------------------------------------------------------------------------
/webpage/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "name": "css-in-js",
4 | "version": "1.0.0",
5 | "description": "Comparison of css-in-js solutions",
6 | "license": "MIT",
7 | "homepage": "https://michelebertoli.github.io/css-in-js/",
8 | "dependencies": {
9 | "react": "^16.1.1",
10 | "react-dom": "^16.1.1",
11 | "react-helmet": "^5.2.0"
12 | },
13 | "devDependencies": {
14 | "gh-pages": "^1.0.0",
15 | "marked": "^0.3.6",
16 | "react-scripts": "^1.0.17",
17 | "react-snap": "^1.1.1"
18 | },
19 | "scripts": {
20 | "start": "react-scripts start",
21 | "build-data": "./scripts/parse_readme.js",
22 | "build": "react-scripts build && react-snap",
23 | "test": "react-scripts test --env=jsdom",
24 | "eject": "react-scripts eject",
25 | "prettier": "prettier --write '{src/*,src/**/*,*,scripts/*}.{js,json,css}'",
26 | "predeploy": "npm run build-data && npm run build",
27 | "deploy": "gh-pages -d build"
28 | },
29 | "reactSnap": {
30 | "puppeteerArgs": ["--no-sandbox"]
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/typestyle/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render } from 'react-dom';
3 | import { style, media } from 'typestyle';
4 |
5 | const container = style({
6 | textAlign: 'center'
7 | });
8 |
9 | const Container = ({ children }) => (
10 |
13 | )
14 |
15 | const button = style({
16 | backgroundColor: '#ff0000',
17 | width: '320px',
18 | padding: '20px',
19 | borderRadius: '5px',
20 | border: 'none',
21 | outline: 'none',
22 |
23 | $nest: {
24 | '&:hover': {
25 | color: '#fff'
26 | },
27 |
28 | '&:active': {
29 | position: 'relative',
30 | top: '2px'
31 | }
32 | },
33 | }, media({ maxWidth: 480 }, {
34 | width: '160px'
35 | }));
36 |
37 | const Button = () => (
38 |
39 | Click me!
40 |
41 | );
42 |
43 | const App = () => (
44 |
45 | Click me!
46 |
47 | );
48 |
49 | render( , document.getElementById('content'));
50 |
--------------------------------------------------------------------------------
/styletron-react/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render } from 'react-dom';
3 | import { styled, StyletronProvider } from 'styletron-react';
4 | import Styletron from 'styletron-client';
5 |
6 | const Container = styled('div', {
7 | textAlign: 'center',
8 | });
9 |
10 | const Button = styled('button', {
11 | backgroundColor: '#ff0000',
12 | width: '320px',
13 | padding: '20px',
14 | borderRadius: '5px',
15 | border: 'none',
16 | outline: 'none',
17 | ':hover': {
18 | color: '#fff',
19 | },
20 | ':active': {
21 | position: 'relative',
22 | top: '2px',
23 | },
24 | '@media (max-width: 480px)': {
25 | width: '160px',
26 | },
27 | });
28 |
29 | const App = () => (
30 |
31 | Click me!
32 |
33 | );
34 |
35 | const styleElements = document.getElementsByClassName('_styletron_hydrate_');
36 |
37 | render(
38 |
39 |
40 | ,
41 | document.getElementById('content')
42 | );
43 |
--------------------------------------------------------------------------------
/css-constructor/button.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { render } from 'react-dom';
3 | import css from 'css-constructor';
4 |
5 | class Container extends Component {
6 |
7 | @css`
8 | text-align: center;
9 | `;
10 |
11 | render() {
12 | return {this.props.children}
;
13 | }
14 |
15 | }
16 |
17 | class Button extends Component {
18 |
19 | @css`
20 | background-color: #ff0000;
21 | width: 320px;
22 | padding: 20px;
23 | border-radius: 5px;
24 | border: none;
25 | outline: none;
26 | &:hover {
27 | color: #fff;
28 | }
29 | &:active {
30 | position: relative;
31 | top: 2px;
32 | }
33 | @media (max-width: 480px) {
34 | & {
35 | width: 160px;
36 | }
37 | }
38 | `;
39 |
40 | render() {
41 | return {this.props.children} ;
42 | }
43 |
44 | }
45 |
46 | const App = () => (
47 |
48 | Click me!
49 |
50 | );
51 |
52 | render( , document.getElementById('content'));
53 |
--------------------------------------------------------------------------------
/react-inline-css/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import InlineCss from 'react-inline-css';
3 |
4 | const Button = React.createClass({
5 | render() {
6 | return (
7 |
32 |
33 | Click me!
34 |
35 |
36 | );
37 | }
38 | });
39 |
40 | React.render( , document.getElementById('content'));
41 |
--------------------------------------------------------------------------------
/babel-plugin-pre-style/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render } from 'react-dom';
3 |
4 | class App extends React.Component {
5 | render() {
6 | const attrs = {
7 | container: {
8 | className: PreStyle`
9 | text-align: center;
10 | `
11 | },
12 | button: {
13 | className: PreStyle`
14 | background-color: #ff0000;
15 | width: 320px;
16 | padding: 20px;
17 | border-radius: 5px;
18 | border: none;
19 | outline: none;
20 |
21 | &:hover {
22 | color: #fff;
23 | }
24 |
25 | &:active {
26 | position: relative;
27 | top: 2px;
28 | }
29 |
30 | @media (max-width: 480px) {
31 | width: 160px;
32 | }
33 | `
34 | },
35 | };
36 | return (
37 |
38 | Click me!
39 |
40 | );
41 | }
42 | }
43 |
44 | render( , document.getElementById('content'));
45 |
--------------------------------------------------------------------------------
/react-inline-style/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Style from 'react-inline-style';
3 |
4 | let styles = Style.define({
5 | container: {
6 | textAlign: 'center'
7 | },
8 | button: {
9 | backgroundColor: '#ff0000',
10 | width: '320px',
11 | padding: '20px',
12 | borderRadius: '5px',
13 | border: 'none',
14 | outline: 'none',
15 | hover: {
16 | color: '#fff'
17 | },
18 | pressed: {
19 | position: 'relative',
20 | top: '2px'
21 | }
22 | }
23 | });
24 |
25 | styles = styles.global({
26 | '@media (max-width: 480px)': {
27 | 'button': {
28 | width: '160px !important'
29 | }
30 | }
31 | })
32 |
33 | const Button = React.createClass({
34 | mixins: [styles()],
35 | render() {
36 | return (
37 |
38 |
39 | Click me!
40 |
41 |
42 | );
43 | }
44 | });
45 |
46 | React.render( , document.getElementById('content'));
47 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Michele Bertoli
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/styled-jsx/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render } from 'react-dom';
3 |
4 | const Container = ({ children }) => (
5 |
13 | )
14 |
15 | const Button = () => (
16 |
17 | Click me!
18 |
43 |
44 | );
45 |
46 | const App = () => (
47 |
48 | Click me!
49 |
50 | );
51 |
52 | render( , document.getElementById('content'));
53 |
--------------------------------------------------------------------------------
/i-css/button.js:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import ReactDOM from 'react-dom';
3 | import {renderCss, addStyles} from 'i-css';
4 |
5 | const button = addStyles({
6 | container: {
7 | textAlign: 'center'
8 | },
9 | item: {
10 | backgroundColor: '#ff0000',
11 | width: 320,
12 | padding: 20,
13 | borderRadius: 5,
14 | border: 'none',
15 | outline: 'none',
16 | '&:hover': {
17 | color: '#fff'
18 | },
19 | '&:active': {
20 | position: 'relative',
21 | top: 2
22 | },
23 | '@media (min-width: 480px)': {
24 | width: 160
25 | }
26 | },
27 | _global: {
28 | 'html, body, #root': {
29 | padding: 0,
30 | margin: 0
31 | }
32 | },
33 | });
34 |
35 | class Button extends Component {
36 | render() {
37 | return (
38 |
39 | Click me!
40 |
41 | );
42 | }
43 | }
44 |
45 | renderCss(document.getElementById('rootCss')); //call it once in root component
46 | ReactDOM.render( , document.getElementById('content'));
--------------------------------------------------------------------------------
/cssobj/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import cssobj from 'cssobj'
3 |
4 | const obj = {
5 | '.container':{
6 | textAlign: 'center'
7 | },
8 | '.button':{
9 | // auto vendor prefix below
10 | appearance: 'none',
11 | backgroundColor: '#ff0000',
12 | width: '320px',
13 | padding: '20px',
14 | borderRadius: '5px',
15 | border: 'none',
16 | outline: 'none',
17 | '&:hover': {
18 | color: '#fff',
19 | },
20 | '&:active': {
21 | position: 'relative',
22 | top: '2px'
23 | },
24 | '@media (max-width: 480px)': {
25 | width: '160px'
26 | }
27 | }
28 | }
29 |
30 | class Button extends React.Component {
31 | constructor (props) {
32 | super(props)
33 |
34 | this.state = {
35 | result: cssobj(obj, {
36 | local: true
37 | })
38 | }
39 | }
40 |
41 | mapClass(list) {
42 | return this.state.result.mapClass(list)
43 | }
44 |
45 | render() {
46 | return (
47 |
48 |
49 | Click me!
50 |
51 |
52 | )
53 | }
54 | }
55 |
56 | React.render( , document.getElementById('content'))
57 |
58 |
59 |
--------------------------------------------------------------------------------
/react-fela/button.js:
--------------------------------------------------------------------------------
1 | import { createRenderer } from 'fela';
2 | import { Provider, connect } from 'react-fela';
3 | import { render } from 'react-dom';
4 | import React from 'react';
5 |
6 | const container = () => ({
7 | textAlign: 'center'
8 | });
9 |
10 | const button = () => ({
11 | backgroundColor: '#ff0000',
12 | width: '320px',
13 | padding: '20px',
14 | borderRadius: '5px',
15 | border: 'none',
16 | outline: 'none',
17 | ':hover': {
18 | color: '#fff'
19 | },
20 | ':active': {
21 | position: 'relative',
22 | top: '2px'
23 | },
24 | '@media (max-width: 480px)': {
25 | width: '160px'
26 | }
27 | });
28 |
29 | const mapStylesToProps = props => renderer => ({
30 | container: renderer.renderRule(container),
31 | button: renderer.renderRule(button)
32 | })
33 |
34 | const Button = connect(mapStylesToProps)(({ styles }) => (
35 |
36 | Click me!
37 |
38 | ));
39 |
40 | const renderer = createRenderer();
41 | const mountNode = document.getElementById('stylesheet');
42 |
43 | render(
44 |
45 |
46 | ,
47 | document.getElementById('content')
48 | );
49 |
--------------------------------------------------------------------------------
/webpage/scripts/parse_readme.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const marked = require("marked");
4 | const fs = require("fs");
5 | const text = fs.readFileSync("../README.md", "utf8");
6 |
7 | const tokens = marked.lexer(text, {
8 | gfm: true,
9 | tables: true
10 | });
11 |
12 | const table = tokens.filter(x => x.type == "table")[0];
13 | const { header, cells } = table;
14 |
15 | const linkPattern = /\s?\[([^\]]+)\]\(([^\)]+)\)\s?/gi;
16 | const parseLinks = linkText => {
17 | let result = [],
18 | match;
19 | do {
20 | match = linkPattern.exec(linkText);
21 | if (match) {
22 | result.push({ text: match[1], href: match[2] });
23 | }
24 | } while (match);
25 | return result;
26 | };
27 |
28 | const parseSymbol = value => value === "✓";
29 |
30 | const defaultFallback = (options, field) => options[field] || options.default;
31 |
32 | const tdParser = {
33 | Package: parseLinks,
34 | Version: value => value,
35 | default: parseSymbol
36 | };
37 |
38 | const rows = cells.map(x => {
39 | return header.reduce((result, key, i) => {
40 | const parser = defaultFallback(tdParser, key);
41 | result[key] = parser(x[i]);
42 | return result;
43 | }, {});
44 | });
45 |
46 | const json = {
47 | headers: header,
48 | rows: rows
49 | };
50 |
51 | fs.writeFileSync("src/data.json", JSON.stringify(json, null, 2), "utf8");
52 |
--------------------------------------------------------------------------------
/stile-react-media-queries/button.js:
--------------------------------------------------------------------------------
1 | import React from "react"
2 | import ReactDOM from "react-dom"
3 | import { createStyleSheet } from "stile"
4 |
5 | import { MediaProvider, matchMedia } from "react-media-queries"
6 | import createMediaQueryGetter from "react-media-queries/lib/createMediaQueryGetter"
7 | import createMediaQueryListener from "react-media-queries/lib/createMediaQueryListener"
8 |
9 | const Button = ({ mediaQuery }) => (
10 |
11 |
17 | Click me!
18 |
19 |
20 | )
21 |
22 | const styles = createStyleSheet({
23 | container: {
24 | textAlign: "center",
25 | },
26 | button: {
27 | backgroundColor: "#ff0000",
28 | width: 320,
29 | padding: 20,
30 | borderRadius: 5,
31 | border: "none",
32 | outline: "none",
33 | },
34 | smallButton: {
35 | width: 160,
36 | },
37 | })
38 |
39 | const WrappedButton = matchMedia()(Button)
40 |
41 | const mediaQueries = {
42 | small: "(max-width:480px)",
43 | }
44 |
45 | const mediaQueryGetter = createMediaQueryGetter(mediaQueries)
46 | const mediaQueryListener = createMediaQueryListener(mediaQueries)
47 |
48 | ReactDOM.render(
49 |
53 |
54 | ,
55 | document.getElementById('content')
56 | )
57 |
--------------------------------------------------------------------------------
/react-vstyle/button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import { createStylesRenderer, StyleSheet, registerPlugin } from 'vstyle';
4 | import { StylesRendererProvider, withRenderStyles } from 'react-vstyle';
5 | import nestedSelectorPlugin from 'vstyle/lib/plugins/nested-selector';
6 | import mediaQueryPlugin from 'vstyle/lib/plugins/media-query';
7 | import prefixer from 'vstyle/lib/plugins/prefixer';
8 |
9 | registerPlugin(nestedSelectorPlugin);
10 | registerPlugin(mediaQueryPlugin);
11 | registerPlugin(prefixer);
12 |
13 | const styles = StyleSheet.create({
14 | container: {
15 | textAlign: 'center'
16 | },
17 | button: {
18 | backgroundColor: '#ff0000',
19 | width: '320px',
20 | padding: '20px',
21 | borderRadius: '5px',
22 | border: 'none',
23 | outline: 'none',
24 | '&:hover': {
25 | color: '#fff'
26 | },
27 | '&:active': {
28 | position: 'relative',
29 | top: '2px'
30 | },
31 | '@media (max-width: 480px)': {
32 | width: '160px'
33 | }
34 | }
35 | });
36 |
37 | const Button = withRenderStyles(({ renderStyles }) => (
38 |
39 | Click me!
40 |
41 | ))
42 |
43 | const stylesRenderer = createStylesRenderer();
44 | stylesRenderer.attach(document.getElementById('style'));
45 |
46 | ReactDOM.render(
47 |
48 |
49 | ,
50 | document.getElementById('content')
51 | );
52 |
--------------------------------------------------------------------------------
/webpage/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import Navbar from "./components/Navbar";
3 | import Table from "./components/Table";
4 | import Filter from "./components/Filter";
5 | import Seo from "./components/Seo";
6 | import { default as data } from "./data.json";
7 |
8 | class App extends Component {
9 | constructor(props) {
10 | super(props);
11 | this.state = {
12 | ...data,
13 | filters: data.headers.slice(2).map(x => ({
14 | name: x,
15 | checked: false
16 | }))
17 | };
18 | this.onFilterChange = this.onFilterChange.bind(this);
19 | }
20 |
21 | onFilterChange(index) {
22 | this.setState({
23 | ...this.state,
24 | filters: [
25 | ...this.state.filters.slice(0, index),
26 | {
27 | ...this.state.filters[index],
28 | checked: !this.state.filters[index].checked
29 | },
30 | ...this.state.filters.slice(index + 1)
31 | ]
32 | });
33 | }
34 |
35 | render() {
36 | return (
37 |
61 | );
62 | }
63 | }
64 |
65 | export default App;
66 |
--------------------------------------------------------------------------------
/webpage/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 |
13 |
22 |
23 | React App
24 |
25 |
26 |
27 | You need to enable JavaScript to run this app.
28 |
29 |
30 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/webpage/src/components/Seo.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import PropTypes from "prop-types";
3 | import Helmet from "react-helmet";
4 |
5 | const absoluteUrl = path => `https://michelebertoli.github.io/css-in-js${path}`;
6 | const seoImageURL = path => `https://michelebertoli.github.io${path}`;
7 |
8 | const getMetaTags = ({ title, description, url, twitter, image }) => {
9 | const metaTags = [
10 | { itemprop: "name", content: title },
11 | { itemprop: "description", content: description },
12 | { name: "description", content: description },
13 | { name: "twitter:title", content: title },
14 | { name: "twitter:description", content: description },
15 | { name: "twitter:creator", content: twitter },
16 | { name: "og:title", content: title },
17 | { name: "og:type", content: "website" },
18 | { name: "og:url", content: url },
19 | { name: "og:description", content: description },
20 | { name: "og:site_name", content: "CSS-in-JS" },
21 | { name: "og:locale", content: "en_EN" }
22 | ];
23 |
24 | if (image) {
25 | metaTags.push({ itemprop: "image", content: seoImageURL(image) });
26 | metaTags.push({ name: "twitter:image:src", content: seoImageURL(image) });
27 | metaTags.push({ name: "og:image", content: seoImageURL(image) });
28 | metaTags.push({ name: "twitter:card", content: "summary_large_image" });
29 | } else {
30 | metaTags.push({ name: "twitter:card", content: "summary" });
31 | }
32 |
33 | return metaTags;
34 | };
35 |
36 | const getHtmlAttributes = () => {
37 | let result = {
38 | lang: "en"
39 | };
40 | return result;
41 | };
42 |
43 | const Seo = ({ title, description, path, twitter, image }) => (
44 |
56 | );
57 |
58 | Seo.propTypes = {
59 | title: PropTypes.string,
60 | description: PropTypes.string,
61 | path: PropTypes.string,
62 | twitter: PropTypes.string,
63 | image: PropTypes.string
64 | };
65 |
66 | export default Seo;
67 |
--------------------------------------------------------------------------------
/webpage/src/components/Table.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const join = (array, separator) =>
4 | array.reduce((result, child, index) => {
5 | if (index < array.length - 1) {
6 | return result.concat(child, separator);
7 | } else {
8 | return result.concat(child);
9 | }
10 | }, []);
11 |
12 | const links = value => {
13 | const linkTags = value.map(link => (
14 |
15 | {link.text}
16 |
17 | ));
18 | return join(linkTags, " + ");
19 | };
20 |
21 | const symbol = value => {
22 | if (value === true) {
23 | return "✓";
24 | } else if (value === false) {
25 | return "";
26 | } else {
27 | return "?";
28 | }
29 | };
30 |
31 | const defaultFallback = (options, field) => options[field] || options.default;
32 |
33 | const tdValue = {
34 | Package: links,
35 | Version: value => value,
36 | default: symbol
37 | };
38 |
39 | const thStyles = {
40 | Package: { width: 180 },
41 | Version: { width: 90 },
42 | default: {}
43 | };
44 |
45 | const CellTd = options => {
46 | const { header, value } = options;
47 | const cellFormatter = defaultFallback(tdValue, header);
48 | return {cellFormatter(value)} ;
49 | };
50 |
51 | const CellTh = options => {
52 | const { header } = options;
53 | const additionalOptions = defaultFallback(thStyles, header);
54 | return {header} ;
55 | };
56 |
57 | const Row = options => {
58 | const { row, headers } = options;
59 | return (
60 | {headers.map(x => )}
61 | );
62 | };
63 |
64 | const Table = options => {
65 | const { headers, rows, filters } = options;
66 | let filteredRows = rows.filter(row => {
67 | return filters.reduce((flag, filter) => {
68 | return flag && (filter.checked ? !!row[filter.name] : true);
69 | }, true);
70 | });
71 |
72 | return (
73 |
74 |
75 | {headers.map(x => )}
76 |
77 |
78 | {filteredRows.map((row, index) => (
79 |
80 | ))}
81 |
82 |
83 | );
84 | };
85 |
86 | export default Table;
87 |
--------------------------------------------------------------------------------
/webpage/src/registerServiceWorker.js:
--------------------------------------------------------------------------------
1 | // In production, we register a service worker to serve assets from local cache.
2 |
3 | // This lets the app load faster on subsequent visits in production, and gives
4 | // it offline capabilities. However, it also means that developers (and users)
5 | // will only see deployed updates on the "N+1" visit to a page, since previously
6 | // cached resources are updated in the background.
7 |
8 | // To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
9 | // This link also includes instructions on opting out of this behavior.
10 |
11 | export default function register() {
12 | if (process.env.NODE_ENV === "production" && "serviceWorker" in navigator) {
13 | window.addEventListener("load", () => {
14 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
15 | navigator.serviceWorker
16 | .register(swUrl)
17 | .then(registration => {
18 | registration.onupdatefound = () => {
19 | const installingWorker = registration.installing;
20 | installingWorker.onstatechange = () => {
21 | if (installingWorker.state === "installed") {
22 | if (navigator.serviceWorker.controller) {
23 | // At this point, the old content will have been purged and
24 | // the fresh content will have been added to the cache.
25 | // It's the perfect time to display a "New content is
26 | // available; please refresh." message in your web app.
27 | console.log("New content is available; please refresh.");
28 | } else {
29 | // At this point, everything has been precached.
30 | // It's the perfect time to display a
31 | // "Content is cached for offline use." message.
32 | console.log("Content is cached for offline use.");
33 | }
34 | }
35 | };
36 | };
37 | })
38 | .catch(error => {
39 | console.error("Error during service worker registration:", error);
40 | });
41 | });
42 | }
43 | }
44 |
45 | export function unregister() {
46 | if ("serviceWorker" in navigator) {
47 | navigator.serviceWorker.ready.then(registration => {
48 | registration.unregister();
49 | });
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://travis-ci.org/MicheleBertoli/css-in-js)
2 |
3 | # CSS in JS
4 | React: [CSS in JS](https://speakerdeck.com/vjeux/react-css-in-js) techniques comparison.
5 |
6 | ## Usage
7 | Inside each package folder, run:
8 |
9 | ```bash
10 | npm i
11 | npm run build && open index.html
12 | ```
13 |
14 | ## Features
15 |
16 | **How to read the table**
17 |
18 | More ticks doesn't mean "better", it depends on your needs.
19 | For example, if a package supports the css file extraction you can run the autoprefixing at build time.
20 |
21 | | Package | Version | Automatic Vendor Prefixing | Pseudo Classes | Media Queries | Styles As Object Literals | Extract CSS File |
22 | |---------|:-------:|:--------------------------:|:--------------:|:-------------:|:-------------------------:|:----------------:|
23 | | [aphrodite](https://github.com/Khan/aphrodite) | 1.2.3 | ✓ | ✓ | ✓ | ✓ | ✓ |
24 | | [babel-plugin-css-in-js](https://github.com/martinandert/babel-plugin-css-in-js) | 1.2.2 | ✓ | ✓ | ✓ | ✓ | ✓ |
25 | | [babel-plugin-pre-style](https://github.com/soluml/babel-plugin-pre-style) | 1.0.9-alpha | | ✓ | ✓ | ✓ | ✓ |
26 | | [bloody-react-styled](https://github.com/bloodyowl/react-styled) | 3.0.0 | | ✓ | ✓ | | |
27 | | [classy](https://github.com/inturn/classy) | 0.3.0 | | ✓ | ✓ | ✓ | |
28 | | [csjs](https://github.com/rtsao/csjs) | 1.0.0 | | ✓ | ✓ | | |
29 | | [css-constructor](https://github.com/siddharthkp/css-constructor) | 0.1.1 | ✓ | ✓ | ✓ | | |
30 | | [css-light](https://github.com/streamich/css-light) | 1.1.0 | | ✓ | ✓ | ✓ | ✓ |
31 | | [css-loader](https://github.com/webpack/css-loader) | 0.15.6 | | ✓ | ✓ | | ✓ |
32 | | [css-ns](https://github.com/jareware/css-ns) | 1.0.0 | | ✓ | ✓ | | ✓ |
33 | | [cssobj](https://github.com/cssobj/cssobj) | 0.2.21 | ✓ | ✓ | ✓ | ✓ | |
34 | | [cssx-loader](https://github.com/krasimir/cssx) | 3.8.0 | ✓ | ✓ | ✓ | | ✓ |
35 | | [emotion](https://github.com/tkh44/emotion) | 6.0.3 | ✓ | ✓ | ✓ | ✓ | ✓ |
36 | | [es-css-modules](https://github.com/jacobp100/es-css-modules) | 1.2.3 | | ✓ | ✓ | | ✓ |
37 | | [freestyler](https://github.com/streamich/freestyler) | 1.0.2 | ✓ | ✓ | ✓ | ✓ | ✓ |
38 | | [glamor](https://github.com/threepointone/glamor) | 2.1.0 | ✓ | ✓ | ✓ | ✓ | ✓ |
39 | | [glamorous](https://github.com/paypal/glamorous) | 1.0.1 | ✓ | ✓ | ✓ | ✓ | ✓ |
40 | | [hyperstyles](https://github.com/colingourlay/hyperstyles) | 3.3.0 | | ✓ | ✓ | | ✓ |
41 | | [i-css](https://github.com/irom-io/i-css) | 1.0.4 | ✓ | ✓ | ✓ | ✓ | |
42 | | [j2c](https://github.com/j2css/j2c) | 0.10.0 | | ✓ | ✓ | ✓ | ✓ |
43 | | [jsxstyle](https://github.com/petehunt/jsxstyle) | 0.0.14 | ✓ | | | ✓ | |
44 | | [linaria](https://github.com/callstack-io/linaria) | 0.5.0 | ✓ | ✓ | ✓ | ✓ | ✓ |
45 | | [pre-style](https://github.com/soluml/pre-style) | 1.0.9-alpha | | ✓ | ✓ | | ✓ |
46 | | [radium](https://github.com/FormidableLabs/radium) | 0.13.5 | ✓ | ✓ | ✓ | ✓ | |
47 | | [react-css-builder](https://github.com/jhudson8/react-css-builder) | 0.2.0 | | | | ✓ | |
48 | | [react-css-components](https://github.com/andreypopp/react-css-components) | 0.6.9 | | ✓ | ✓ | | ✓ |
49 | | [react-css-modules](https://github.com/gajus/react-css-modules) | 3.0.2 | | ✓ | ✓ | | ✓ |
50 | | [react-cssom](https://github.com/mbasso/react-cssom) | 1.0.0 | | ✓ | ✓ | | ✓ |
51 | | [react-cxs](https://github.com/jxnblk/react-cxs) | 1.0.0-beta.4 | | ✓ | ✓ | ✓ | ✓ |
52 | | [react-fela](https://github.com/rofrischmann/fela/tree/master/packages/react-fela) | 2.1.0 | ✓ | ✓ | ✓ | ✓ | ✓ |
53 | | [react-free-style](https://github.com/blakeembrey/react-free-style) | 0.6.0 | | ✓ | ✓ | ✓ | ✓ |
54 | | [react-inline-css](https://github.com/RickWong/react-inline-css) | 1.2.0 | | ✓ | ✓ | | |
55 | | [react-inline-style](https://github.com/dowjones/react-inline-style) | 0.1.0 | ✓ | ✓ | ✓ | ✓ | |
56 | | [react-inline](https://github.com/martinandert/react-inline) | 0.6.3 | ✓ | ✓ | ✓ | ✓ | ✓ |
57 | | [react-jss](https://github.com/jsstyles/react-jss) | 2.0.5 | ✓ | ✓ | ✓ | ✓ | ✓ |
58 | | [react-look](https://github.com/rofrischmann/react-look) | 0.6.1 | ✓ | ✓ | ✓ | ✓ | |
59 | | [react-native-web](https://github.com/necolas/react-native-web) | 0.0.11 | ✓ | | | ✓ | ✓ |
60 | | [react-statics-styles](https://github.com/elierotenberg/react-statics-styles) | 3.0.2 | | ✓ | | ✓ | ✓ |
61 | | [react-styl](https://github.com/nick/react-styl) | 0.0.1 | | ✓ | ✓ | | |
62 | | [react-style](https://github.com/js-next/react-style) | 0.5.5 | | | ✓ | ✓ | ✓ |
63 | | [react-styleable](https://github.com/pluralsight/react-styleable) | 1.4.0 | | ✓ | ✓ | | ✓ |
64 | | [react-stylematic](https://github.com/rtsao/react-stylematic) | 1.0.1 | ✓ | ✓ | ✓ | ✓ | ✓ |
65 | | [react-theme](https://github.com/azazdeaz/react-theme) | 0.1.4 | | | | ✓ | |
66 | | [react-vstyle](https://github.com/fdecampredon/react-vstyle) | 0.1.0 | ✓ | ✓ | ✓ | ✓ | ✓ |
67 | | [reactcss](https://github.com/casesandberg/reactcss) | 0.3.2 | ✓ | | | ✓ | |
68 | | [restyles](https://github.com/tkh44/restyles) | 2.0.1 | ✓ | ✓ | ✓ | ✓ | |
69 | | [scope-styles](https://github.com/rtsao/scope-styles) | 0.6.0 | | ✓ | ✓ | ✓ | ✓ |
70 | | [smart-css](https://github.com/hackhat/smart-css) | 1.1.1 | | ✓ | ✓ | ✓ | |
71 | | [stile](https://github.com/bloodyowl/stile) + [react-media-queries](https://github.com/bloodyowl/react-media-queries) | 2.0.0 | ✓ | | ✓ | ✓ | | |
72 | | [stilr](https://github.com/kodyl/stilr) | 1.1.0 | | ✓ | ✓ | ✓ | ✓ |
73 | | [stylable](https://github.com/wix/stylable) | 5.0.2 | | ✓ | ✓ | | ✓ |
74 | | [style-it](https://github.com/buildbreakdo/style-it) | 1.2.9 | | ✓ | ✓ | | |
75 | | [styled-components](https://github.com/styled-components/styled-components) | 1.0.3 | ✓ | ✓ | ✓ | | |
76 | | [styled-jsx](https://github.com/zeit/styled-jsx) | 0.0.7 | ✓ | ✓ | ✓ | | ✓ |
77 | | [styletron-react](https://github.com/rtsao/styletron) | 2.1.2 | ✓ | ✓ | ✓ | ✓ | ✓ |
78 | | [styling](https://github.com/andreypopp/styling) | 0.2.0 | | ✓ | | ✓ | ✓ |
79 | | [superstyle](https://github.com/jxnblk/superstyle) | 1.0.0-1 | | | | ✓ | |
80 | | [typestyle](https://github.com/typestyle/typestyle) | 0.22.3 | | ✓ | ✓ | ✓ | ✓ |
81 | | [uranium](https://github.com/tuckerconnelly/uranium) | 0.1.2 | | | ✓ | ✓ | |
82 |
83 | ## Testimonials
84 |
85 | > ["Wow, this totally makes my week!"](https://twitter.com/dan_abramov/status/604260877622202368) - Dan Abramov
86 |
87 | > ["nice compilation of css-in-js techniques"](https://twitter.com/tjholowaychuk/status/739812614239195136) - TJ Holowaychuk
88 |
89 | [SurviveJS / Styling React](http://survivejs.com/webpack_react/styling_react/) by Juho Vepsäläinen
90 |
91 | [The Case for CSS Modules](http://markdalgleish.github.io/presentation-the-case-for-css-modules) by Mark Dalgleish
92 |
93 | [First Class Styles](https://markdalgleish.github.io/presentation-first-class-styles) by Mark Dalgleish
94 |
95 | [Styling React.JS applications](https://www.youtube.com/watch?v=19gqsBc_Cx0) by Max Stoiber
96 |
97 | ## Contributing
98 |
99 | If your package is not listed here, feel free to add it.
100 |
--------------------------------------------------------------------------------
/webpage/src/data.json:
--------------------------------------------------------------------------------
1 | {
2 | "headers": [
3 | "Package",
4 | "Version",
5 | "Automatic Vendor Prefixing",
6 | "Pseudo Classes",
7 | "Media Queries",
8 | "Styles As Object Literals",
9 | "Extract CSS File"
10 | ],
11 | "rows": [
12 | {
13 | "Package": [
14 | {
15 | "text": "aphrodite",
16 | "href": "https://github.com/Khan/aphrodite"
17 | }
18 | ],
19 | "Version": "1.2.3",
20 | "Automatic Vendor Prefixing": true,
21 | "Pseudo Classes": true,
22 | "Media Queries": true,
23 | "Styles As Object Literals": true,
24 | "Extract CSS File": true
25 | },
26 | {
27 | "Package": [
28 | {
29 | "text": "babel-plugin-css-in-js",
30 | "href": "https://github.com/martinandert/babel-plugin-css-in-js"
31 | }
32 | ],
33 | "Version": "1.2.2",
34 | "Automatic Vendor Prefixing": true,
35 | "Pseudo Classes": true,
36 | "Media Queries": true,
37 | "Styles As Object Literals": true,
38 | "Extract CSS File": true
39 | },
40 | {
41 | "Package": [
42 | {
43 | "text": "babel-plugin-pre-style",
44 | "href": "https://github.com/soluml/babel-plugin-pre-style"
45 | }
46 | ],
47 | "Version": "1.0.9-alpha",
48 | "Automatic Vendor Prefixing": false,
49 | "Pseudo Classes": true,
50 | "Media Queries": true,
51 | "Styles As Object Literals": true,
52 | "Extract CSS File": true
53 | },
54 | {
55 | "Package": [
56 | {
57 | "text": "bloody-react-styled",
58 | "href": "https://github.com/bloodyowl/react-styled"
59 | }
60 | ],
61 | "Version": "3.0.0",
62 | "Automatic Vendor Prefixing": false,
63 | "Pseudo Classes": true,
64 | "Media Queries": true,
65 | "Styles As Object Literals": false,
66 | "Extract CSS File": false
67 | },
68 | {
69 | "Package": [
70 | {
71 | "text": "classy",
72 | "href": "https://github.com/inturn/classy"
73 | }
74 | ],
75 | "Version": "0.3.0",
76 | "Automatic Vendor Prefixing": false,
77 | "Pseudo Classes": true,
78 | "Media Queries": true,
79 | "Styles As Object Literals": true,
80 | "Extract CSS File": false
81 | },
82 | {
83 | "Package": [
84 | {
85 | "text": "csjs",
86 | "href": "https://github.com/rtsao/csjs"
87 | }
88 | ],
89 | "Version": "1.0.0",
90 | "Automatic Vendor Prefixing": false,
91 | "Pseudo Classes": true,
92 | "Media Queries": true,
93 | "Styles As Object Literals": false,
94 | "Extract CSS File": false
95 | },
96 | {
97 | "Package": [
98 | {
99 | "text": "css-constructor",
100 | "href": "https://github.com/siddharthkp/css-constructor"
101 | }
102 | ],
103 | "Version": "0.1.1",
104 | "Automatic Vendor Prefixing": true,
105 | "Pseudo Classes": true,
106 | "Media Queries": true,
107 | "Styles As Object Literals": false,
108 | "Extract CSS File": false
109 | },
110 | {
111 | "Package": [
112 | {
113 | "text": "css-light",
114 | "href": "https://github.com/streamich/css-light"
115 | }
116 | ],
117 | "Version": "1.1.0",
118 | "Automatic Vendor Prefixing": false,
119 | "Pseudo Classes": true,
120 | "Media Queries": true,
121 | "Styles As Object Literals": true,
122 | "Extract CSS File": true
123 | },
124 | {
125 | "Package": [
126 | {
127 | "text": "css-loader",
128 | "href": "https://github.com/webpack/css-loader"
129 | }
130 | ],
131 | "Version": "0.15.6",
132 | "Automatic Vendor Prefixing": false,
133 | "Pseudo Classes": true,
134 | "Media Queries": true,
135 | "Styles As Object Literals": false,
136 | "Extract CSS File": true
137 | },
138 | {
139 | "Package": [
140 | {
141 | "text": "css-ns",
142 | "href": "https://github.com/jareware/css-ns"
143 | }
144 | ],
145 | "Version": "1.0.0",
146 | "Automatic Vendor Prefixing": false,
147 | "Pseudo Classes": true,
148 | "Media Queries": true,
149 | "Styles As Object Literals": false,
150 | "Extract CSS File": true
151 | },
152 | {
153 | "Package": [
154 | {
155 | "text": "cssobj",
156 | "href": "https://github.com/cssobj/cssobj"
157 | }
158 | ],
159 | "Version": "0.2.21",
160 | "Automatic Vendor Prefixing": true,
161 | "Pseudo Classes": true,
162 | "Media Queries": true,
163 | "Styles As Object Literals": true,
164 | "Extract CSS File": false
165 | },
166 | {
167 | "Package": [
168 | {
169 | "text": "cssx-loader",
170 | "href": "https://github.com/krasimir/cssx"
171 | }
172 | ],
173 | "Version": "3.8.0",
174 | "Automatic Vendor Prefixing": true,
175 | "Pseudo Classes": true,
176 | "Media Queries": true,
177 | "Styles As Object Literals": false,
178 | "Extract CSS File": true
179 | },
180 | {
181 | "Package": [
182 | {
183 | "text": "emotion",
184 | "href": "https://github.com/tkh44/emotion"
185 | }
186 | ],
187 | "Version": "6.0.3",
188 | "Automatic Vendor Prefixing": true,
189 | "Pseudo Classes": true,
190 | "Media Queries": true,
191 | "Styles As Object Literals": true,
192 | "Extract CSS File": true
193 | },
194 | {
195 | "Package": [
196 | {
197 | "text": "es-css-modules",
198 | "href": "https://github.com/jacobp100/es-css-modules"
199 | }
200 | ],
201 | "Version": "1.2.3",
202 | "Automatic Vendor Prefixing": false,
203 | "Pseudo Classes": true,
204 | "Media Queries": true,
205 | "Styles As Object Literals": false,
206 | "Extract CSS File": true
207 | },
208 | {
209 | "Package": [
210 | {
211 | "text": "freestyler",
212 | "href": "https://github.com/streamich/freestyler"
213 | }
214 | ],
215 | "Version": "1.0.2",
216 | "Automatic Vendor Prefixing": true,
217 | "Pseudo Classes": true,
218 | "Media Queries": true,
219 | "Styles As Object Literals": true,
220 | "Extract CSS File": true
221 | },
222 | {
223 | "Package": [
224 | {
225 | "text": "glamor",
226 | "href": "https://github.com/threepointone/glamor"
227 | }
228 | ],
229 | "Version": "2.1.0",
230 | "Automatic Vendor Prefixing": true,
231 | "Pseudo Classes": true,
232 | "Media Queries": true,
233 | "Styles As Object Literals": true,
234 | "Extract CSS File": true
235 | },
236 | {
237 | "Package": [
238 | {
239 | "text": "glamorous",
240 | "href": "https://github.com/paypal/glamorous"
241 | }
242 | ],
243 | "Version": "1.0.1",
244 | "Automatic Vendor Prefixing": true,
245 | "Pseudo Classes": true,
246 | "Media Queries": true,
247 | "Styles As Object Literals": true,
248 | "Extract CSS File": true
249 | },
250 | {
251 | "Package": [
252 | {
253 | "text": "hyperstyles",
254 | "href": "https://github.com/colingourlay/hyperstyles"
255 | }
256 | ],
257 | "Version": "3.3.0",
258 | "Automatic Vendor Prefixing": false,
259 | "Pseudo Classes": true,
260 | "Media Queries": true,
261 | "Styles As Object Literals": false,
262 | "Extract CSS File": true
263 | },
264 | {
265 | "Package": [
266 | {
267 | "text": "i-css",
268 | "href": "https://github.com/irom-io/i-css"
269 | }
270 | ],
271 | "Version": "1.0.4",
272 | "Automatic Vendor Prefixing": true,
273 | "Pseudo Classes": true,
274 | "Media Queries": true,
275 | "Styles As Object Literals": true,
276 | "Extract CSS File": false
277 | },
278 | {
279 | "Package": [
280 | {
281 | "text": "j2c",
282 | "href": "https://github.com/j2css/j2c"
283 | }
284 | ],
285 | "Version": "0.10.0",
286 | "Automatic Vendor Prefixing": false,
287 | "Pseudo Classes": true,
288 | "Media Queries": true,
289 | "Styles As Object Literals": true,
290 | "Extract CSS File": true
291 | },
292 | {
293 | "Package": [
294 | {
295 | "text": "jsxstyle",
296 | "href": "https://github.com/petehunt/jsxstyle"
297 | }
298 | ],
299 | "Version": "0.0.14",
300 | "Automatic Vendor Prefixing": true,
301 | "Pseudo Classes": false,
302 | "Media Queries": false,
303 | "Styles As Object Literals": true,
304 | "Extract CSS File": false
305 | },
306 | {
307 | "Package": [
308 | {
309 | "text": "linaria",
310 | "href": "https://github.com/callstack-io/linaria"
311 | }
312 | ],
313 | "Version": "0.5.0",
314 | "Automatic Vendor Prefixing": true,
315 | "Pseudo Classes": true,
316 | "Media Queries": true,
317 | "Styles As Object Literals": true,
318 | "Extract CSS File": true
319 | },
320 | {
321 | "Package": [
322 | {
323 | "text": "pre-style",
324 | "href": "https://github.com/soluml/pre-style"
325 | }
326 | ],
327 | "Version": "1.0.9-alpha",
328 | "Automatic Vendor Prefixing": false,
329 | "Pseudo Classes": true,
330 | "Media Queries": true,
331 | "Styles As Object Literals": false,
332 | "Extract CSS File": true
333 | },
334 | {
335 | "Package": [
336 | {
337 | "text": "radium",
338 | "href": "https://github.com/FormidableLabs/radium"
339 | }
340 | ],
341 | "Version": "0.13.5",
342 | "Automatic Vendor Prefixing": true,
343 | "Pseudo Classes": true,
344 | "Media Queries": true,
345 | "Styles As Object Literals": true,
346 | "Extract CSS File": false
347 | },
348 | {
349 | "Package": [
350 | {
351 | "text": "react-css-builder",
352 | "href": "https://github.com/jhudson8/react-css-builder"
353 | }
354 | ],
355 | "Version": "0.2.0",
356 | "Automatic Vendor Prefixing": false,
357 | "Pseudo Classes": false,
358 | "Media Queries": false,
359 | "Styles As Object Literals": true,
360 | "Extract CSS File": false
361 | },
362 | {
363 | "Package": [
364 | {
365 | "text": "react-css-components",
366 | "href": "https://github.com/andreypopp/react-css-components"
367 | }
368 | ],
369 | "Version": "0.6.9",
370 | "Automatic Vendor Prefixing": false,
371 | "Pseudo Classes": true,
372 | "Media Queries": true,
373 | "Styles As Object Literals": false,
374 | "Extract CSS File": true
375 | },
376 | {
377 | "Package": [
378 | {
379 | "text": "react-css-modules",
380 | "href": "https://github.com/gajus/react-css-modules"
381 | }
382 | ],
383 | "Version": "3.0.2",
384 | "Automatic Vendor Prefixing": false,
385 | "Pseudo Classes": true,
386 | "Media Queries": true,
387 | "Styles As Object Literals": false,
388 | "Extract CSS File": true
389 | },
390 | {
391 | "Package": [
392 | {
393 | "text": "react-cssom",
394 | "href": "https://github.com/mbasso/react-cssom"
395 | }
396 | ],
397 | "Version": "1.0.0",
398 | "Automatic Vendor Prefixing": false,
399 | "Pseudo Classes": true,
400 | "Media Queries": true,
401 | "Styles As Object Literals": false,
402 | "Extract CSS File": true
403 | },
404 | {
405 | "Package": [
406 | {
407 | "text": "react-cxs",
408 | "href": "https://github.com/jxnblk/react-cxs"
409 | }
410 | ],
411 | "Version": "1.0.0-beta.4",
412 | "Automatic Vendor Prefixing": false,
413 | "Pseudo Classes": true,
414 | "Media Queries": true,
415 | "Styles As Object Literals": true,
416 | "Extract CSS File": true
417 | },
418 | {
419 | "Package": [
420 | {
421 | "text": "react-fela",
422 | "href":
423 | "https://github.com/rofrischmann/fela/tree/master/packages/react-fela"
424 | }
425 | ],
426 | "Version": "2.1.0",
427 | "Automatic Vendor Prefixing": true,
428 | "Pseudo Classes": true,
429 | "Media Queries": true,
430 | "Styles As Object Literals": true,
431 | "Extract CSS File": true
432 | },
433 | {
434 | "Package": [
435 | {
436 | "text": "react-free-style",
437 | "href": "https://github.com/blakeembrey/react-free-style"
438 | }
439 | ],
440 | "Version": "0.6.0",
441 | "Automatic Vendor Prefixing": false,
442 | "Pseudo Classes": true,
443 | "Media Queries": true,
444 | "Styles As Object Literals": true,
445 | "Extract CSS File": true
446 | },
447 | {
448 | "Package": [
449 | {
450 | "text": "react-inline-css",
451 | "href": "https://github.com/RickWong/react-inline-css"
452 | }
453 | ],
454 | "Version": "1.2.0",
455 | "Automatic Vendor Prefixing": false,
456 | "Pseudo Classes": true,
457 | "Media Queries": true,
458 | "Styles As Object Literals": false,
459 | "Extract CSS File": false
460 | },
461 | {
462 | "Package": [
463 | {
464 | "text": "react-inline-style",
465 | "href": "https://github.com/dowjones/react-inline-style"
466 | }
467 | ],
468 | "Version": "0.1.0",
469 | "Automatic Vendor Prefixing": true,
470 | "Pseudo Classes": true,
471 | "Media Queries": true,
472 | "Styles As Object Literals": true,
473 | "Extract CSS File": false
474 | },
475 | {
476 | "Package": [
477 | {
478 | "text": "react-inline",
479 | "href": "https://github.com/martinandert/react-inline"
480 | }
481 | ],
482 | "Version": "0.6.3",
483 | "Automatic Vendor Prefixing": true,
484 | "Pseudo Classes": true,
485 | "Media Queries": true,
486 | "Styles As Object Literals": true,
487 | "Extract CSS File": true
488 | },
489 | {
490 | "Package": [
491 | {
492 | "text": "react-jss",
493 | "href": "https://github.com/jsstyles/react-jss"
494 | }
495 | ],
496 | "Version": "2.0.5",
497 | "Automatic Vendor Prefixing": true,
498 | "Pseudo Classes": true,
499 | "Media Queries": true,
500 | "Styles As Object Literals": true,
501 | "Extract CSS File": true
502 | },
503 | {
504 | "Package": [
505 | {
506 | "text": "react-look",
507 | "href": "https://github.com/rofrischmann/react-look"
508 | }
509 | ],
510 | "Version": "0.6.1",
511 | "Automatic Vendor Prefixing": true,
512 | "Pseudo Classes": true,
513 | "Media Queries": true,
514 | "Styles As Object Literals": true,
515 | "Extract CSS File": false
516 | },
517 | {
518 | "Package": [
519 | {
520 | "text": "react-native-web",
521 | "href": "https://github.com/necolas/react-native-web"
522 | }
523 | ],
524 | "Version": "0.0.11",
525 | "Automatic Vendor Prefixing": true,
526 | "Pseudo Classes": false,
527 | "Media Queries": false,
528 | "Styles As Object Literals": true,
529 | "Extract CSS File": true
530 | },
531 | {
532 | "Package": [
533 | {
534 | "text": "react-statics-styles",
535 | "href": "https://github.com/elierotenberg/react-statics-styles"
536 | }
537 | ],
538 | "Version": "3.0.2",
539 | "Automatic Vendor Prefixing": false,
540 | "Pseudo Classes": true,
541 | "Media Queries": false,
542 | "Styles As Object Literals": true,
543 | "Extract CSS File": true
544 | },
545 | {
546 | "Package": [
547 | {
548 | "text": "react-styl",
549 | "href": "https://github.com/nick/react-styl"
550 | }
551 | ],
552 | "Version": "0.0.1",
553 | "Automatic Vendor Prefixing": false,
554 | "Pseudo Classes": true,
555 | "Media Queries": true,
556 | "Styles As Object Literals": false,
557 | "Extract CSS File": false
558 | },
559 | {
560 | "Package": [
561 | {
562 | "text": "react-style",
563 | "href": "https://github.com/js-next/react-style"
564 | }
565 | ],
566 | "Version": "0.5.5",
567 | "Automatic Vendor Prefixing": false,
568 | "Pseudo Classes": false,
569 | "Media Queries": true,
570 | "Styles As Object Literals": true,
571 | "Extract CSS File": true
572 | },
573 | {
574 | "Package": [
575 | {
576 | "text": "react-styleable",
577 | "href": "https://github.com/pluralsight/react-styleable"
578 | }
579 | ],
580 | "Version": "1.4.0",
581 | "Automatic Vendor Prefixing": false,
582 | "Pseudo Classes": true,
583 | "Media Queries": true,
584 | "Styles As Object Literals": false,
585 | "Extract CSS File": true
586 | },
587 | {
588 | "Package": [
589 | {
590 | "text": "react-stylematic",
591 | "href": "https://github.com/rtsao/react-stylematic"
592 | }
593 | ],
594 | "Version": "1.0.1",
595 | "Automatic Vendor Prefixing": true,
596 | "Pseudo Classes": true,
597 | "Media Queries": true,
598 | "Styles As Object Literals": true,
599 | "Extract CSS File": true
600 | },
601 | {
602 | "Package": [
603 | {
604 | "text": "react-theme",
605 | "href": "https://github.com/azazdeaz/react-theme"
606 | }
607 | ],
608 | "Version": "0.1.4",
609 | "Automatic Vendor Prefixing": false,
610 | "Pseudo Classes": false,
611 | "Media Queries": false,
612 | "Styles As Object Literals": true,
613 | "Extract CSS File": false
614 | },
615 | {
616 | "Package": [
617 | {
618 | "text": "react-vstyle",
619 | "href": "https://github.com/fdecampredon/react-vstyle"
620 | }
621 | ],
622 | "Version": "0.1.0",
623 | "Automatic Vendor Prefixing": true,
624 | "Pseudo Classes": true,
625 | "Media Queries": true,
626 | "Styles As Object Literals": true,
627 | "Extract CSS File": true
628 | },
629 | {
630 | "Package": [
631 | {
632 | "text": "reactcss",
633 | "href": "https://github.com/casesandberg/reactcss"
634 | }
635 | ],
636 | "Version": "0.3.2",
637 | "Automatic Vendor Prefixing": true,
638 | "Pseudo Classes": false,
639 | "Media Queries": false,
640 | "Styles As Object Literals": true,
641 | "Extract CSS File": false
642 | },
643 | {
644 | "Package": [
645 | {
646 | "text": "restyles",
647 | "href": "https://github.com/tkh44/restyles"
648 | }
649 | ],
650 | "Version": "2.0.1",
651 | "Automatic Vendor Prefixing": true,
652 | "Pseudo Classes": true,
653 | "Media Queries": true,
654 | "Styles As Object Literals": true,
655 | "Extract CSS File": false
656 | },
657 | {
658 | "Package": [
659 | {
660 | "text": "scope-styles",
661 | "href": "https://github.com/rtsao/scope-styles"
662 | }
663 | ],
664 | "Version": "0.6.0",
665 | "Automatic Vendor Prefixing": false,
666 | "Pseudo Classes": true,
667 | "Media Queries": true,
668 | "Styles As Object Literals": true,
669 | "Extract CSS File": true
670 | },
671 | {
672 | "Package": [
673 | {
674 | "text": "smart-css",
675 | "href": "https://github.com/hackhat/smart-css"
676 | }
677 | ],
678 | "Version": "1.1.1",
679 | "Automatic Vendor Prefixing": false,
680 | "Pseudo Classes": true,
681 | "Media Queries": true,
682 | "Styles As Object Literals": true,
683 | "Extract CSS File": false
684 | },
685 | {
686 | "Package": [
687 | {
688 | "text": "stile",
689 | "href": "https://github.com/bloodyowl/stile"
690 | },
691 | {
692 | "text": "react-media-queries",
693 | "href": "https://github.com/bloodyowl/react-media-queries"
694 | }
695 | ],
696 | "Version": "2.0.0",
697 | "Automatic Vendor Prefixing": true,
698 | "Pseudo Classes": false,
699 | "Media Queries": true,
700 | "Styles As Object Literals": true,
701 | "Extract CSS File": false
702 | },
703 | {
704 | "Package": [
705 | {
706 | "text": "stilr",
707 | "href": "https://github.com/kodyl/stilr"
708 | }
709 | ],
710 | "Version": "1.1.0",
711 | "Automatic Vendor Prefixing": false,
712 | "Pseudo Classes": true,
713 | "Media Queries": true,
714 | "Styles As Object Literals": true,
715 | "Extract CSS File": true
716 | },
717 | {
718 | "Package": [
719 | {
720 | "text": "stylable",
721 | "href": "https://github.com/wix/stylable"
722 | }
723 | ],
724 | "Version": "5.0.2",
725 | "Automatic Vendor Prefixing": false,
726 | "Pseudo Classes": true,
727 | "Media Queries": true,
728 | "Styles As Object Literals": false,
729 | "Extract CSS File": true
730 | },
731 | {
732 | "Package": [
733 | {
734 | "text": "style-it",
735 | "href": "https://github.com/buildbreakdo/style-it"
736 | }
737 | ],
738 | "Version": "1.2.9",
739 | "Automatic Vendor Prefixing": false,
740 | "Pseudo Classes": true,
741 | "Media Queries": true,
742 | "Styles As Object Literals": false,
743 | "Extract CSS File": false
744 | },
745 | {
746 | "Package": [
747 | {
748 | "text": "styled-components",
749 | "href": "https://github.com/styled-components/styled-components"
750 | }
751 | ],
752 | "Version": "1.0.3",
753 | "Automatic Vendor Prefixing": true,
754 | "Pseudo Classes": true,
755 | "Media Queries": true,
756 | "Styles As Object Literals": false,
757 | "Extract CSS File": false
758 | },
759 | {
760 | "Package": [
761 | {
762 | "text": "styled-jsx",
763 | "href": "https://github.com/zeit/styled-jsx"
764 | }
765 | ],
766 | "Version": "0.0.7",
767 | "Automatic Vendor Prefixing": true,
768 | "Pseudo Classes": true,
769 | "Media Queries": true,
770 | "Styles As Object Literals": false,
771 | "Extract CSS File": true
772 | },
773 | {
774 | "Package": [
775 | {
776 | "text": "styletron-react",
777 | "href": "https://github.com/rtsao/styletron"
778 | }
779 | ],
780 | "Version": "2.1.2",
781 | "Automatic Vendor Prefixing": true,
782 | "Pseudo Classes": true,
783 | "Media Queries": true,
784 | "Styles As Object Literals": true,
785 | "Extract CSS File": true
786 | },
787 | {
788 | "Package": [
789 | {
790 | "text": "styling",
791 | "href": "https://github.com/andreypopp/styling"
792 | }
793 | ],
794 | "Version": "0.2.0",
795 | "Automatic Vendor Prefixing": false,
796 | "Pseudo Classes": true,
797 | "Media Queries": false,
798 | "Styles As Object Literals": true,
799 | "Extract CSS File": true
800 | },
801 | {
802 | "Package": [
803 | {
804 | "text": "superstyle",
805 | "href": "https://github.com/jxnblk/superstyle"
806 | }
807 | ],
808 | "Version": "1.0.0-1",
809 | "Automatic Vendor Prefixing": false,
810 | "Pseudo Classes": false,
811 | "Media Queries": false,
812 | "Styles As Object Literals": true,
813 | "Extract CSS File": false
814 | },
815 | {
816 | "Package": [
817 | {
818 | "text": "typestyle",
819 | "href": "https://github.com/typestyle/typestyle"
820 | }
821 | ],
822 | "Version": "0.22.3",
823 | "Automatic Vendor Prefixing": false,
824 | "Pseudo Classes": true,
825 | "Media Queries": true,
826 | "Styles As Object Literals": true,
827 | "Extract CSS File": true
828 | },
829 | {
830 | "Package": [
831 | {
832 | "text": "uranium",
833 | "href": "https://github.com/tuckerconnelly/uranium"
834 | }
835 | ],
836 | "Version": "0.1.2",
837 | "Automatic Vendor Prefixing": false,
838 | "Pseudo Classes": false,
839 | "Media Queries": true,
840 | "Styles As Object Literals": true,
841 | "Extract CSS File": false
842 | }
843 | ]
844 | }
845 |
--------------------------------------------------------------------------------