├── .babelrc
├── example
├── index.html
└── main.js
├── README.md
├── lib
├── utils.js
├── types
│ ├── Basic.less
│ ├── Circle.less
│ ├── Point.js
│ ├── Circle.js
│ ├── Basic.js
│ └── Point.less
└── index.js
├── .gitignore
├── webpack.config.example.js
├── LICENSE
├── webpack.config.js
├── package.json
└── dist
├── react-steps.js
└── react-steps.js.map
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | "es2015",
4 | "react",
5 | "stage-0"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/example/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | React-steps example
6 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # react-steps
2 | Steps component for react
3 |
4 | Demo : http://jakubzloczewski.github.io/react-steps/
5 |
6 | ## Instructions
7 |
8 | To install this module run:
9 | ```sh
10 | npm install react-steps
11 | ```
12 |
13 | require it inside of your app
14 | ```js
15 | var Steps = require('react-steps');
16 | ```
17 |
18 | to compile example with webpack
19 |
20 | ```sh
21 | npm run build && npm run buildExample
22 | ```
23 |
24 | Tu run example localy just open ./example/index.html in browser
25 |
--------------------------------------------------------------------------------
/lib/utils.js:
--------------------------------------------------------------------------------
1 | import classNames from 'classnames';
2 |
3 | function mergeStyles(styleClassNames, propStyles = {}, stylesObj = {}, otherStyle = {}) {
4 | const classNamesObj = Object.keys(stylesObj)
5 | .map(key => stylesObj[key] ? styleClassNames[key] : null);
6 | const style = Object.keys(stylesObj)
7 | .reduce((acc, key) => stylesObj[key] ? {...acc, ...propStyles[key]} : acc, {});
8 |
9 | return {
10 | style: {...style, ...otherStyle},
11 | className: classNames(classNamesObj),
12 | };
13 | }
14 |
15 | export {mergeStyles}
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 |
5 | # Runtime data
6 | pids
7 | *.pid
8 | *.seed
9 |
10 | # Directory for instrumented libs generated by jscoverage/JSCover
11 | lib-cov
12 |
13 | # Coverage directory used by tools like istanbul
14 | coverage
15 |
16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
17 | .grunt
18 |
19 | # node-waf configuration
20 | .lock-wscript
21 |
22 | # Compiled binary addons (http://nodejs.org/api/addons.html)
23 | build/Release
24 |
25 | # Dependency directory
26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
27 | node_modules
28 |
29 | .idea
30 | /example/dist/bundle.js.map
31 | /example/dist/bundle.js
32 |
--------------------------------------------------------------------------------
/webpack.config.example.js:
--------------------------------------------------------------------------------
1 | /*global module, process*/
2 | "use strict";
3 | var webpack = require('webpack');
4 | var path = require('path');
5 |
6 | module.exports = {
7 | entry: './example/main.js',
8 | output: {
9 | path: './example/dist/',
10 | filename: 'bundle.js',
11 | },
12 | resolve: {
13 | alias: {
14 | 'react-steps': path.resolve(__dirname, 'dist/react-steps.js')
15 | }
16 | },
17 | plugins: [
18 | new webpack.DefinePlugin({
19 | 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'dev')
20 | }),
21 | new webpack.optimize.UglifyJsPlugin({
22 | compress: {warnings: false},
23 | sourceMap: false,
24 | mangle: true
25 | })
26 | ],
27 | module: {
28 | loaders: [
29 | {
30 | test: /\.js$/,
31 | exclude: /(node_modules|dist)/,
32 | loader: 'babel'
33 | }
34 | ]
35 | }
36 | };
37 |
--------------------------------------------------------------------------------
/lib/types/Basic.less:
--------------------------------------------------------------------------------
1 | .item {
2 | display: inline-block;
3 | margin: 0.5em;
4 | height: 30px;
5 | line-height: 30px;
6 | border-radius: 0.4em;
7 | background: linear-gradient(to bottom, #7d7e7d 20%, #565656 100%);
8 | box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2);
9 | text-shadow: rgba(0, 0, 0, 0.3) 1px 1px 0px;
10 | white-space: nowrap;
11 | }
12 |
13 | .itemFlat {
14 | background: #7d7e7d;
15 | }
16 |
17 | .activeItem {
18 | background: linear-gradient(to bottom, #f9c667 0%, #f79621 100%)
19 | }
20 |
21 | .activeFlatItem {
22 | background: #F8A50A;
23 | }
24 |
25 | .doneItem {
26 | background: linear-gradient(to bottom, #a4b357 0%, #75890c 100%)
27 | }
28 |
29 | .doneFlatItem {
30 | background: #81941F;
31 | }
32 |
33 | .arrow {
34 | display: inline-block;
35 | position: relative;
36 | margin-bottom: -18px;
37 | bottom: 9px;
38 | }
39 |
40 | .number {
41 | display: inline-block;
42 | padding: 0 0.5em 0 0.85em;
43 | }
44 |
45 | .text {
46 | display: inline-block;
47 | font-size: 0.8em;
48 | padding: 0 1em;
49 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Jakub Złoczewski
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 |
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | /*global module, process*/
2 | "use strict";
3 | var webpack = require('webpack');
4 |
5 | var dev = process.env.NODE_ENV === 'development';
6 |
7 | module.exports = {
8 | devtool: dev ? '#eval-cheap-module-source-map' : null,
9 | entry: './lib/index.js',
10 | output: {
11 | path: './dist/',
12 | filename: 'react-steps.js',
13 | libraryTarget: 'umd'
14 | },
15 | externals: {
16 | 'react': 'react'
17 | },
18 | plugins: [
19 | new webpack.SourceMapDevToolPlugin({
20 | filename: 'react-steps.js.map'
21 | }),
22 | new webpack.optimize.UglifyJsPlugin({
23 | exclude: /node_modules/,
24 | compress: {warnings: false},
25 | sourceMap: true,
26 | mangle: false
27 | })
28 | ],
29 | module: {
30 | loaders: [
31 | {
32 | test: /\.less$/,
33 | loader: 'style!css?modules&localIdentName=' + ( dev ? '[name]__[local]___[hash:base64:5]' : '[hash:base64:5]' ) + '!less'
34 | },
35 | {
36 | test: /\.js$/,
37 | loader: 'babel'
38 | }
39 | ]
40 | }
41 | };
42 |
--------------------------------------------------------------------------------
/lib/types/Circle.less:
--------------------------------------------------------------------------------
1 | @size: 45px;
2 |
3 | .item {
4 | display: inline-block;
5 | margin: 0.5em;
6 | }
7 |
8 | .number {
9 | display: inline-block;
10 | height: @size;
11 | width: @size;
12 | border-radius: @size;
13 | line-height: @size;
14 | text-align: center;
15 | background: linear-gradient(to bottom, #7d7e7d 20%, #565656 100%);
16 | text-shadow: rgba(0, 0, 0, 0.3) 1px 1px 0;
17 | box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2);
18 | margin-right: 0.5em;
19 | }
20 |
21 | .itemFlatNumber {
22 | background: #7d7e7d;
23 | }
24 |
25 | .activeItemNumber {
26 | background: linear-gradient(to bottom, #f9c667 0%, #f79621 100%);
27 | }
28 |
29 | .activeFlatItemNumber {
30 | background: #F8A50A;
31 | }
32 |
33 | .doneItemNumber {
34 | background: linear-gradient(to bottom, #a4b357 0%, #75890c 100%);
35 | }
36 |
37 | .doneFlatItemNumber {
38 | background: #81941F;
39 | }
40 |
41 | .arrow {
42 | margin-bottom: -5px
43 | }
44 |
45 | .text {
46 | color: #706D6D;
47 | font-weight: 300;
48 | font-size: 0.8em;
49 | padding: 0.1em;
50 | }
51 |
52 | .status {
53 | color: #706D6D;
54 | font-weight: 700;
55 | font-size: 0.8em;
56 | padding: 0.1em;
57 | }
58 |
59 | .labels {
60 | display: inline-block;
61 | }
62 |
--------------------------------------------------------------------------------
/lib/types/Point.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import classNames from 'classnames';
3 |
4 | import styles from './Point.less';
5 | import {mergeStyles} from '../utils';
6 |
7 | export default class Point extends React.Component {
8 | render() {
9 | const {item, flat, idx, isFirst, isLast, style} = this.props;
10 |
11 | return (
12 |
13 |
18 |
19 |
29 |
30 |
{item.text}
31 |
32 | );
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/lib/types/Circle.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import classNames from 'classnames';
3 |
4 | import styles from './Circle.less';
5 | import {mergeStyles} from '../utils';
6 |
7 | const size = 45;
8 |
9 | export default class Circle extends React.Component {
10 | render() {
11 | const {item, flat, idx} = this.props;
12 |
13 | var status = 'This Step is Undone.';
14 |
15 | if (item.isActive) {
16 | status = 'This Step is Active.';
17 | } else if (item.isDone) {
18 | status = 'This Step is Done.';
19 | }
20 |
21 | return (
22 |
23 |
{idx + 1}
31 |
32 |
{item.text}
33 |
{status}
34 |
35 |
36 | );
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | import React from 'react'
3 |
4 | import {mergeStyles} from './utils';
5 | import Circle from './types/Circle.js';
6 | import Basic from './types/Basic.js';
7 | import Point from './types/Point.js';
8 |
9 | var style = {
10 | main: {
11 | display: 'block',
12 | flexWrap: 'wrap',
13 | fontFamily: '"Helvetica Neue", Helvetica, Arial',
14 | fontWeight: 800,
15 | color: '#f3f3f3'
16 | }
17 | };
18 |
19 | class Steps extends React.Component {
20 | render() {
21 | const {flat, type} = this.props;
22 | const propStyles = this.props.styles || {};
23 | const items = this.props.items.map((item, idx, list) => {
24 | if (type === 'circle') {
25 | return ;
26 | } else if (type === 'point') {
27 | return ;
32 | } else {
33 | return ;
34 | }
35 | });
36 |
37 | return (
38 |
39 | {items}
40 |
41 | );
42 | }
43 | }
44 |
45 | export default Steps;
46 |
--------------------------------------------------------------------------------
/lib/types/Basic.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import classNames from 'classnames';
3 | import styles from './Basic.less';
4 | import {mergeStyles} from '../utils';
5 |
6 | class Arrow extends React.Component {
7 | render() {
8 | var {width, height} = this.props;
9 | return (
10 |
18 | );
19 | }
20 | }
21 |
22 | export default class Basic extends React.Component {
23 | render() {
24 | const {item, flat, idx} = this.props;
25 |
26 | return (
27 |
35 |
{idx + 1}
36 |
37 | {item.text}
38 |
39 | );
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-steps",
3 | "version": "0.0.6",
4 | "description": "Steps component for react",
5 | "main": "dist/react-steps.js",
6 | "scripts": {
7 | "prepublish": "npm build",
8 | "build": "webpack",
9 | "buildExample": "NODE_ENV=production webpack --config webpack.config.example.js"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/jakubzloczewski/react-steps.git"
14 | },
15 | "author": {
16 | "name": "Jakub Złoczewski",
17 | "email": "jzlocz@gmail.com",
18 | "url": "https://github.com/jakubzloczewski"
19 | },
20 | "license": "MIT",
21 | "bugs": {
22 | "url": "https://github.com/jakubzloczewski/react-steps/issues"
23 | },
24 | "homepage": "https://github.com/jakubzloczewski/react-steps#readlsme",
25 | "devDependencies": {
26 | "babel-core": "6.17.0",
27 | "babel-loader": "6.2.5",
28 | "babel-preset-es2015": "6.16.0",
29 | "babel-preset-react": "6.16.0",
30 | "babel-preset-stage-0": "6.16.0",
31 | "classnames": "2.2.5",
32 | "css-loader": "0.25.0",
33 | "less": "2.7.1",
34 | "less-loader": "2.2.3",
35 | "react": "15.3.2",
36 | "react-dom": "15.3.2",
37 | "style-loader": "0.13.1",
38 | "webpack": "1.13.2"
39 | },
40 | "readme": "# react-steps\r\nSteps component for react\r\n\r\nDemo : http://jakubzloczewski.github.io/react-steps/\r\n\r\n## Instructions\r\n\r\nTo install this module run:\r\n```sh\r\nnpm install react-steps\r\n```\r\n\r\nrequire it inside of your app\r\n```js\r\nvar Steps = require('react-steps');\r\n```\r\n\r\nto compile example with webpack\r\n\r\n```sh\r\nwebpack\r\n```\r\n\r\nTu run example localy just open ./example/index.html in browser\r\n",
41 | "readmeFilename": "README.md",
42 | "gitHead": "58a0c759fc030f1e5bcf58a1b908931a81b9766e",
43 | "_id": "react-steps@0.0.3-c",
44 | "_shasum": "8da54945d1c952cab273d0d663f6970c7f26b7e4",
45 | "_from": "react-steps@0.0.3-c"
46 | }
47 |
--------------------------------------------------------------------------------
/lib/types/Point.less:
--------------------------------------------------------------------------------
1 | @size: 30px;
2 | @border: 1px solid rgba(100, 100, 100, 0.2);
3 | @outlineSize: 8px;
4 |
5 | .item {
6 | position: relative;
7 | text-align: center;
8 | display: inline-block;
9 | margin: 0.5em 0;
10 | }
11 |
12 | .number {
13 | position: relative;
14 | display: inline-block;
15 | top: @outlineSize / 2;
16 | height: @size;
17 | width: @size;
18 | border-radius: @size;
19 | line-height: @size;
20 | text-align: center;
21 | background: linear-gradient(to bottom, #7d7e7d 20%, #565656 100%);
22 | text-shadow: rgba(0, 0, 0, 0.3) 1px 1px 0;
23 | box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2);
24 | }
25 |
26 | .itemFlatNumber {
27 | background: #7d7e7d;
28 | }
29 |
30 | .activeItemNumber {
31 | background: linear-gradient(to bottom, #f9c667 0%, #f79621 100%);
32 | }
33 |
34 | .activeFlatItemNumber {
35 | background: #F8A50A;
36 | }
37 |
38 | .doneItemNumber {
39 | background: linear-gradient(to bottom, #a4b357 0%, #75890c 100%);
40 | }
41 |
42 | .doneFlatItemNumber {
43 | background: #81941F;
44 | }
45 |
46 | .arrow {
47 | margin-bottom: -5px;
48 | }
49 |
50 | .text {
51 | color: #706D6D;
52 | font-weight: 700;
53 | font-size: 0.7em;
54 | padding: 0.5em;
55 | }
56 |
57 | .status {
58 | color: #706D6D;
59 | font-weight: 700;
60 | font-size: 0.8em;
61 | padding: 0.1em;
62 | }
63 |
64 | .outline {
65 | box-shadow: inset 0 1px 0 0 rgba(200, 200, 200, 0.2), inset 0 2px 0 0 rgba(200, 200, 200, 0.1);
66 | display: block;
67 | position: absolute;
68 | z-index: 1;
69 | width: 100%;
70 | top: 10px;
71 | height: 9px;
72 | border-top: @border;
73 | border-bottom: @border;
74 | }
75 |
76 | .numberOutline {
77 | position: relative;
78 | z-index: 2;
79 | box-shadow: inset 0 1px 0 0 rgba(200, 200, 200, 0.3), inset 0 2px 0 0 rgba(200, 200, 200, 0.2), inset 0 -1px 0 0 rgba(200, 200, 200, 0.3), inset 0 -2px 0 0 rgba(200, 200, 200, 0.2);
80 | background: #fff;
81 | display: inline-block;
82 | text-align: center;
83 | height: @size + @outlineSize;
84 | width: @size + @outlineSize;
85 | left: auto;
86 | right: auto;
87 | margin-left: -(@outlineSize / 2);
88 | margin-top: -(@outlineSize / 2);
89 | border-radius: @size + @outlineSize;
90 | }
91 |
92 | .outlineFirst {
93 | border-left: @border;
94 | border-bottom-left-radius: 9px;
95 | border-top-left-radius: 9px;
96 | }
97 |
98 | .outlineLast {
99 | border-right: @border;
100 | border-bottom-right-radius: 9px;
101 | border-top-right-radius: 9px;
102 | }
103 |
--------------------------------------------------------------------------------
/example/main.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | import React from 'react';
4 | import {render} from 'react-dom';
5 | import Steps from 'react-steps';
6 |
7 | var json = [
8 | {
9 | "text": "First finished step",
10 | "isActive": false,
11 | "isDone": true
12 | },
13 | {
14 | "text": "Second finished step",
15 | "isActive": false,
16 | "isDone": true
17 | },
18 | {
19 | "text": "Active step",
20 | "isActive": true,
21 | "isDone": false
22 | },
23 | {
24 | "text": "Unfinished step",
25 | "isActive": false,
26 | "isDone": false
27 | }
28 | ];
29 |
30 | class Example extends React.Component {
31 | render() {
32 | return (
33 |
39 | {this.props.children}
40 |
41 | );
42 | }
43 | }
44 |
45 | class Code extends React.Component {
46 | render() {
47 | return (
48 |
51 |
52 | {this.props.children}
53 |
54 |
55 | );
56 | }
57 | }
58 |
59 | class App extends React.Component {
60 | render() {
61 | const {data} = this.props;
62 |
63 | return (
64 |
65 |
66 | {""}
67 |
68 |
69 |
70 |
71 | {''}
72 |
74 |
75 |
76 |
77 | {""}
78 |
79 |
80 |
81 |
82 | {""}
83 |
84 |
85 |
86 |
87 | {""}
88 |
89 |
90 |
91 |
92 | {""}
93 |
94 |
95 |
96 |
97 | {""}
98 |
99 |
100 |
101 | );
102 | }
103 | }
104 |
105 | render(, document.getElementById("app"));
106 |
--------------------------------------------------------------------------------
/dist/react-steps.js:
--------------------------------------------------------------------------------
1 | !function(root,factory){if("object"==typeof exports&&"object"==typeof module)module.exports=factory(require("react"));else if("function"==typeof define&&define.amd)define(["react"],factory);else{var a=factory("object"==typeof exports?require("react"):root.react);for(var i in a)("object"==typeof exports?exports:root)[i]=a[i]}}(this,function(__WEBPACK_EXTERNAL_MODULE_1__){return function(modules){function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:!1};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.loaded=!0,module.exports}var installedModules={};return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.p="",__webpack_require__(0)}([function(module,exports,__webpack_require__){"use strict";function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}Object.defineProperty(exports,"__esModule",{value:!0});var _extends=Object.assign||function(target){for(var i=1;i1&&void 0!==arguments[1]?arguments[1]:{},stylesObj=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},otherStyle=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},classNamesObj=Object.keys(stylesObj).map(function(key){return stylesObj[key]?styleClassNames[key]:null}),style=Object.keys(stylesObj).reduce(function(acc,key){return stylesObj[key]?_extends({},acc,propStyles[key]):acc},{});return{style:_extends({},style,otherStyle),className:(0,_classnames2["default"])(classNamesObj)}}Object.defineProperty(exports,"__esModule",{value:!0}),exports.mergeStyles=void 0;var _extends=Object.assign||function(target){for(var i=1;i=0&&styleElementsInsertedAtTop.splice(idx,1)}function createStyleElement(options){var styleElement=document.createElement("style");return styleElement.type="text/css",insertStyleElement(options,styleElement),styleElement}function createLinkElement(options){var linkElement=document.createElement("link");return linkElement.rel="stylesheet",insertStyleElement(options,linkElement),linkElement}function addStyle(obj,options){var styleElement,update,remove;if(options.singleton){var styleIndex=singletonCounter++;styleElement=singletonElement||(singletonElement=createStyleElement(options)),update=applyToSingletonTag.bind(null,styleElement,styleIndex,!1),remove=applyToSingletonTag.bind(null,styleElement,styleIndex,!0)}else obj.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(styleElement=createLinkElement(options),update=updateLink.bind(null,styleElement),remove=function(){removeStyleElement(styleElement),styleElement.href&&URL.revokeObjectURL(styleElement.href)}):(styleElement=createStyleElement(options),update=applyToTag.bind(null,styleElement),remove=function(){removeStyleElement(styleElement)});return update(obj),function(newObj){if(newObj){if(newObj.css===obj.css&&newObj.media===obj.media&&newObj.sourceMap===obj.sourceMap)return;update(obj=newObj)}else remove()}}function applyToSingletonTag(styleElement,index,remove,obj){var css=remove?"":obj.css;if(styleElement.styleSheet)styleElement.styleSheet.cssText=replaceText(index,css);else{var cssNode=document.createTextNode(css),childNodes=styleElement.childNodes;childNodes[index]&&styleElement.removeChild(childNodes[index]),childNodes.length?styleElement.insertBefore(cssNode,childNodes[index]):styleElement.appendChild(cssNode)}}function applyToTag(styleElement,obj){var css=obj.css,media=obj.media;if(media&&styleElement.setAttribute("media",media),styleElement.styleSheet)styleElement.styleSheet.cssText=css;else{for(;styleElement.firstChild;)styleElement.removeChild(styleElement.firstChild);styleElement.appendChild(document.createTextNode(css))}}function updateLink(linkElement,obj){var css=obj.css,sourceMap=obj.sourceMap;sourceMap&&(css+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))))+" */");var blob=new Blob([css],{type:"text/css"}),oldSrc=linkElement.href;linkElement.href=URL.createObjectURL(blob),oldSrc&&URL.revokeObjectURL(oldSrc)}var stylesInDom={},memoize=function(fn){var memo;return function(){return"undefined"==typeof memo&&(memo=fn.apply(this,arguments)),memo}},isOldIE=memoize(function(){return/msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())}),getHeadElement=memoize(function(){return document.head||document.getElementsByTagName("head")[0]}),singletonElement=null,singletonCounter=0,styleElementsInsertedAtTop=[];module.exports=function(list,options){options=options||{},"undefined"==typeof options.singleton&&(options.singleton=isOldIE()),"undefined"==typeof options.insertAt&&(options.insertAt="bottom");var styles=listToStyles(list);return addStylesToDom(styles,options),function(newList){for(var mayRemove=[],i=0;i 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t var stylesObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t var otherStyle = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\t\n\t var classNamesObj = Object.keys(stylesObj).map(function (key) {\n\t return stylesObj[key] ? styleClassNames[key] : null;\n\t });\n\t var style = Object.keys(stylesObj).reduce(function (acc, key) {\n\t return stylesObj[key] ? _extends({}, acc, propStyles[key]) : acc;\n\t }, {});\n\t\n\t return {\n\t style: _extends({}, style, otherStyle),\n\t className: (0, _classnames2.default)(classNamesObj)\n\t };\n\t}\n\t\n\texports.mergeStyles = mergeStyles;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/*!\n\t Copyright (c) 2016 Jed Watson.\n\t Licensed under the MIT License (MIT), see\n\t http://jedwatson.github.io/classnames\n\t*/\n\t/* global define */\n\t\n\t(function () {\n\t\t'use strict';\n\t\n\t\tvar hasOwn = {}.hasOwnProperty;\n\t\n\t\tfunction classNames() {\n\t\t\tvar classes = [];\n\t\n\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\tvar arg = arguments[i];\n\t\t\t\tif (!arg) continue;\n\t\n\t\t\t\tvar argType = typeof arg === 'undefined' ? 'undefined' : _typeof(arg);\n\t\n\t\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\t\tclasses.push(arg);\n\t\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn classes.join(' ');\n\t\t}\n\t\n\t\tif (typeof module !== 'undefined' && module.exports) {\n\t\t\tmodule.exports = classNames;\n\t\t} else if (\"function\" === 'function' && _typeof(__webpack_require__(4)) === 'object' && __webpack_require__(4)) {\n\t\t\t// register as 'classnames', consistent with npm package name\n\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n\t\t\t\treturn classNames;\n\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\t} else {\n\t\t\twindow.classNames = classNames;\n\t\t}\n\t})();\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;\r\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, {}))\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _classnames = __webpack_require__(3);\n\t\n\tvar _classnames2 = _interopRequireDefault(_classnames);\n\t\n\tvar _Circle = __webpack_require__(6);\n\t\n\tvar _Circle2 = _interopRequireDefault(_Circle);\n\t\n\tvar _utils = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar size = 45;\n\t\n\tvar Circle = function (_React$Component) {\n\t _inherits(Circle, _React$Component);\n\t\n\t function Circle() {\n\t _classCallCheck(this, Circle);\n\t\n\t return _possibleConstructorReturn(this, (Circle.__proto__ || Object.getPrototypeOf(Circle)).apply(this, arguments));\n\t }\n\t\n\t _createClass(Circle, [{\n\t key: 'render',\n\t value: function render() {\n\t var _props = this.props,\n\t item = _props.item,\n\t flat = _props.flat,\n\t idx = _props.idx;\n\t\n\t\n\t var status = 'This Step is Undone.';\n\t\n\t if (item.isActive) {\n\t status = 'This Step is Active.';\n\t } else if (item.isDone) {\n\t status = 'This Step is Done.';\n\t }\n\t\n\t return _react2.default.createElement(\n\t 'div',\n\t (0, _utils.mergeStyles)(_Circle2.default, this.props.styles, { item: true }),\n\t _react2.default.createElement(\n\t 'div',\n\t (0, _utils.mergeStyles)(_Circle2.default, this.props.styles, {\n\t number: true,\n\t itemFlatNumber: flat,\n\t activeFlatItemNumber: flat && item.isActive,\n\t activeItemNumber: !flat && item.isActive,\n\t doneFlatItemNumber: flat && item.isDone,\n\t doneItemNumber: !flat && item.isDone\n\t }),\n\t idx + 1\n\t ),\n\t _react2.default.createElement(\n\t 'div',\n\t (0, _utils.mergeStyles)(_Circle2.default, this.props.styles, { labels: true }),\n\t _react2.default.createElement(\n\t 'div',\n\t (0, _utils.mergeStyles)(_Circle2.default, this.props.styles, { text: true }),\n\t item.text\n\t ),\n\t _react2.default.createElement(\n\t 'div',\n\t (0, _utils.mergeStyles)(_Circle2.default, this.props.styles, { status: true }),\n\t status\n\t )\n\t )\n\t );\n\t }\n\t }]);\n\t\n\t return Circle;\n\t}(_react2.default.Component);\n\t\n\texports.default = Circle;\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// style-loader: Adds some css to the DOM by adding a