├── .flowconfig
├── .travis.yml
├── src
├── hocs
│ ├── index.js
│ └── updateWithQuery.jsx
├── ui
│ ├── Icon
│ │ ├── icon.scss
│ │ ├── index.js
│ │ ├── glyphs.js
│ │ ├── icons
│ │ │ ├── tick.svg
│ │ │ ├── add.svg
│ │ │ ├── heart.svg
│ │ │ ├── copy.svg
│ │ │ └── view.svg
│ │ └── Icon.jsx
│ ├── Checkbox
│ │ ├── index.js
│ │ ├── Checkbox.jsx
│ │ └── checkbox.scss
│ ├── Button
│ │ ├── index.js
│ │ ├── Button.story.jsx
│ │ ├── ButtonWithIcon.jsx
│ │ ├── Button.jsx
│ │ └── button.scss
│ ├── Layout
│ │ ├── styles
│ │ │ ├── container.scss
│ │ │ └── layout.scss
│ │ ├── index.js
│ │ ├── Layout.jsx
│ │ ├── Container.jsx
│ │ ├── Main.jsx
│ │ └── Sidebar.jsx
│ ├── index.js
│ └── Burger
│ │ ├── Burger.jsx
│ │ └── burger.scss
├── styles
│ ├── index.js
│ ├── resources
│ │ ├── mixins.scss
│ │ └── variables.scss
│ └── main.scss
├── modules
│ ├── color
│ │ ├── types.js
│ │ ├── actions.js
│ │ └── reducer.js
│ ├── selection
│ │ ├── types.js
│ │ ├── actions.js
│ │ └── reducer.js
│ ├── explore
│ │ ├── types.js
│ │ ├── actions.js
│ │ └── reducer.js
│ └── index.js
├── pages
│ ├── index.js
│ ├── ExportPage
│ │ └── ExportPage.jsx
│ ├── ExplorePage
│ │ └── ExplorePage.jsx
│ └── IndexPage
│ │ ├── index-page.scss
│ │ └── IndexPage.jsx
├── containers
│ ├── index.js
│ ├── LuminosityGroup.jsx
│ ├── Presets.jsx
│ ├── ColorPicker.jsx
│ └── MixedGroup.jsx
├── components
│ ├── Paginator
│ │ ├── paginator.scss
│ │ └── Paginator.jsx
│ ├── Logo
│ │ ├── Logo.story.jsx
│ │ ├── logo.scss
│ │ └── Logo.jsx
│ ├── index.js
│ ├── Navbar
│ │ ├── NavbarLink.jsx
│ │ ├── Navbar.jsx
│ │ └── navbar.scss
│ ├── Presets
│ │ ├── presets.scss
│ │ └── Presets.jsx
│ ├── Footer
│ │ ├── footer.scss
│ │ └── Footer.jsx
│ ├── ColorSelection
│ │ ├── color-selection.scss
│ │ └── ColorSelection.jsx
│ ├── ColorPicker
│ │ ├── ColorPicker.test.jsx
│ │ ├── ColorPicker.jsx
│ │ └── color-picker.scss
│ ├── ColorDisplayGroup
│ │ ├── ColorSelectionControl.jsx
│ │ ├── ColorDisplayGroup.test.jsx
│ │ ├── color-display-group.scss
│ │ └── ColorDisplayGroup.jsx
│ ├── AppContainer
│ │ └── AppContainer.jsx
│ └── ColorDisplay
│ │ ├── ColorDisplay.test.jsx
│ │ ├── ColorDisplay.jsx
│ │ └── color-display.scss
├── lib
│ ├── index.js
│ ├── colors
│ │ ├── gradient.js
│ │ ├── groups.js
│ │ ├── Colorizr.js
│ │ ├── splitted.js
│ │ └── hex.js
│ └── utils
│ │ ├── StoriesWrapper.jsx
│ │ └── HotRouter.jsx
├── routes.jsx
├── tests
│ └── lib
│ │ ├── Colorizr.test.js
│ │ ├── splitted-module.test.js
│ │ └── hex-module.test.js
├── index.jsx
└── store.js
├── favicon.png
├── repo-header.png
├── .stylelintrc
├── storybook
├── webpack.config.js
└── config.js
├── .editorconfig
├── template.ejs
├── scripts
├── start.js
└── generate.js
├── .gitignore
├── .eslintrc
├── README.md
├── .babelrc
├── webpack.config.js
└── package.json
/.flowconfig:
--------------------------------------------------------------------------------
1 | [ignore]
2 | */src/\(test\|spec\)/.*
3 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 |
3 | node_js:
4 | - "stable"
5 |
--------------------------------------------------------------------------------
/src/hocs/index.js:
--------------------------------------------------------------------------------
1 | export updateWithQuery from './updateWithQuery';
2 |
--------------------------------------------------------------------------------
/src/ui/Icon/icon.scss:
--------------------------------------------------------------------------------
1 | .icon {
2 | @include color-switch(fill);
3 | }
4 |
--------------------------------------------------------------------------------
/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rtivital/react-challenge-colorizr/HEAD/favicon.png
--------------------------------------------------------------------------------
/src/ui/Icon/index.js:
--------------------------------------------------------------------------------
1 | export Icon from './Icon';
2 | export * as glyphs from './glyphs';
3 |
--------------------------------------------------------------------------------
/src/ui/Checkbox/index.js:
--------------------------------------------------------------------------------
1 | import './checkbox.scss';
2 |
3 | export Checkbox from './Checkbox';
4 |
--------------------------------------------------------------------------------
/repo-header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rtivital/react-challenge-colorizr/HEAD/repo-header.png
--------------------------------------------------------------------------------
/src/styles/index.js:
--------------------------------------------------------------------------------
1 | import 'node_modules/normalize.css/normalize.css';
2 | import 'react-color-picker/index.css';
3 | import './main.scss';
4 |
--------------------------------------------------------------------------------
/src/ui/Button/index.js:
--------------------------------------------------------------------------------
1 | import './button.scss';
2 |
3 | export Button from './Button';
4 | export ButtonWithIcon from './ButtonWithIcon';
5 |
--------------------------------------------------------------------------------
/src/modules/color/types.js:
--------------------------------------------------------------------------------
1 | export default {
2 | SET_LEAD_COLOR: 'COLOR/SET_LEAD_COLOR',
3 | SET_MIXED_COLOR: 'COLOR/SET_MIXED_COLOR',
4 | };
5 |
--------------------------------------------------------------------------------
/src/pages/index.js:
--------------------------------------------------------------------------------
1 | export IndexPage from './IndexPage/IndexPage';
2 | export ExplorePage from './ExplorePage/ExplorePage';
3 | export ExportPage from './ExportPage/ExportPage';
4 |
--------------------------------------------------------------------------------
/src/modules/selection/types.js:
--------------------------------------------------------------------------------
1 | export default {
2 | ADD_SELECTION_COLOR: 'SELECTION/ADD_SELECTION_COLOR',
3 | REMOVE_SELECTION_COLOR: 'SELECTION/REMOVE_SELECTION_COLOR',
4 | };
5 |
--------------------------------------------------------------------------------
/src/modules/explore/types.js:
--------------------------------------------------------------------------------
1 | export default {
2 | REQUEST_START: 'PRESETS/REQUEST_START',
3 | REQUEST_SUCCESS: 'PRESETS/REQUEST_SUCCESS',
4 | REQUEST_ERROR: 'PRESETS/REQUEST_ERROR',
5 | };
6 |
--------------------------------------------------------------------------------
/src/ui/Layout/styles/container.scss:
--------------------------------------------------------------------------------
1 | $site-width: 1400px;
2 | $container-spacing: 2rem;
3 |
4 | .container {
5 | @include center($site-width);
6 |
7 | padding: 0 $container-spacing;
8 | }
9 |
--------------------------------------------------------------------------------
/src/containers/index.js:
--------------------------------------------------------------------------------
1 | export ColorPicker from './ColorPicker';
2 | export LuminosityGroup from './LuminosityGroup';
3 | export MixedGroup from './MixedGroup';
4 | export Presets from './Presets';
5 |
--------------------------------------------------------------------------------
/.stylelintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "stylelint-config-standard",
3 | "plugins": ["stylelint-scss"],
4 | "rules": {
5 | "number-leading-zero": "never",
6 | "color-hex-case": "upper"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/pages/ExportPage/ExportPage.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const ExportPage = () => (
4 |
5 | Export
6 |
7 | );
8 |
9 | export default ExportPage;
10 |
--------------------------------------------------------------------------------
/src/components/Paginator/paginator.scss:
--------------------------------------------------------------------------------
1 | .paginator__controls {
2 | display: flex;
3 | justify-content: center;
4 | padding: 2.5rem;
5 | }
6 |
7 | .paginator__button {
8 | margin: 0 .75rem;
9 | }
10 |
--------------------------------------------------------------------------------
/src/ui/Icon/glyphs.js:
--------------------------------------------------------------------------------
1 | export view from './icons/view.svg';
2 | export copy from './icons/copy.svg';
3 | export tick from './icons/tick.svg';
4 | export add from './icons/add.svg';
5 | export heart from './icons/heart.svg';
6 |
--------------------------------------------------------------------------------
/src/ui/Layout/index.js:
--------------------------------------------------------------------------------
1 | import './styles/container.scss';
2 | import './styles/layout.scss';
3 |
4 | export Container from './Container';
5 | export Layout from './Layout';
6 | export Main from './Main';
7 | export Sidebar from './Sidebar';
8 |
--------------------------------------------------------------------------------
/src/modules/color/actions.js:
--------------------------------------------------------------------------------
1 | import { createAction } from 'redux-actions';
2 | import types from './types';
3 |
4 | export default {
5 | setLeadColor: createAction(types.SET_LEAD_COLOR),
6 | setMixedColor: createAction(types.SET_MIXED_COLOR),
7 | };
8 |
--------------------------------------------------------------------------------
/src/ui/index.js:
--------------------------------------------------------------------------------
1 | export { Container, Main, Sidebar, Layout } from './Layout';
2 | export { Button, ButtonWithIcon } from './Button';
3 | export { Icon, glyphs } from './Icon';
4 | export { Checkbox } from './Checkbox';
5 | export Burger from './Burger/Burger';
6 |
--------------------------------------------------------------------------------
/src/modules/selection/actions.js:
--------------------------------------------------------------------------------
1 | import { createAction } from 'redux-actions';
2 | import types from './types';
3 |
4 | export default {
5 | addSelectionColor: createAction(types.ADD_SELECTION_COLOR),
6 | removeSelectionColor: createAction(types.REMOVE_SELECTION_COLOR),
7 | };
8 |
--------------------------------------------------------------------------------
/src/ui/Layout/Layout.jsx:
--------------------------------------------------------------------------------
1 | import React, { PropTypes } from 'react';
2 |
3 | const Layout = ({ children }) => (
4 |
5 | {children}
6 |
7 | );
8 |
9 | Layout.propTypes = {
10 | children: PropTypes.any.isRequired,
11 | };
12 |
13 | export default Layout;
14 |
--------------------------------------------------------------------------------
/storybook/webpack.config.js:
--------------------------------------------------------------------------------
1 | const config = require('../webpack.config');
2 |
3 | module.exports = {
4 | module: { loaders: config.module.loaders },
5 | plugins: process.env.NODE_ENV === 'production' ? config.plugins : [],
6 | sassResources: config.sassResources,
7 | postcss: config.postcss,
8 | };
9 |
--------------------------------------------------------------------------------
/src/components/Logo/Logo.story.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { storiesOf } from '@kadira/storybook';
3 | import { StoriesWrapper } from 'lib';
4 | import Logo from './Logo';
5 |
6 | storiesOf('Logo', module)
7 | .add('Basic example', () => (
8 |
9 | ));
10 |
--------------------------------------------------------------------------------
/src/pages/ExplorePage/ExplorePage.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { Presets } from 'containers';
3 | import { Container } from 'ui';
4 |
5 | export default class ExplorePage extends Component {
6 | render() {
7 | return (
8 |
9 | );
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/storybook/config.js:
--------------------------------------------------------------------------------
1 | import { configure } from '@kadira/storybook';
2 | import 'styles';
3 |
4 | const requireContext = require.context('../src', true, /.story.jsx/);
5 |
6 | function loadStories() {
7 | requireContext.keys().forEach((filename) => requireContext(filename));
8 | }
9 |
10 | configure(loadStories, module);
11 |
--------------------------------------------------------------------------------
/src/styles/resources/mixins.scss:
--------------------------------------------------------------------------------
1 | @import '~breakpoint-sass/stylesheets/breakpoint';
2 |
3 | @mixin center($width) {
4 | margin-left: auto;
5 | margin-right: auto;
6 | max-width: $width;
7 | }
8 |
9 | @mixin color-switch($prop) {
10 | &--light { #{$prop}: $color-white; }
11 | &--dark { #{$prop}: $color-true-black; }
12 | }
13 |
--------------------------------------------------------------------------------
/src/lib/index.js:
--------------------------------------------------------------------------------
1 | export HotRouter from './utils/HotRouter';
2 | export StoriesWrapper from './utils/StoriesWrapper';
3 |
4 | export * as hex from './colors/hex';
5 | export * as gradient from './colors/gradient';
6 | export * as groups from './colors/groups';
7 | export * as splitted from './colors/splitted';
8 | export Colorizr from './colors/Colorizr';
9 |
--------------------------------------------------------------------------------
/src/ui/Layout/Container.jsx:
--------------------------------------------------------------------------------
1 | import React, { PropTypes } from 'react';
2 | import cx from 'classnames';
3 |
4 | const Container = ({ children, className }) => (
5 |
6 | {children}
7 |
8 | );
9 |
10 | Container.propTypes = {
11 | children: PropTypes.any.isRequired,
12 | className: PropTypes.string,
13 | };
14 |
15 | export default Container;
16 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # http://editorconfig.org/
2 | # Atom – https://github.com/sindresorhus/atom-editorconfig
3 | # Sublime Text – https://github.com/sindresorhus/editorconfig-sublime
4 | # Visual Studio Code – https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig
5 | root = true
6 |
7 | [*]
8 | end_of_line = lf
9 | insert_final_newline = false
10 | indent_style = space
11 | indent_size = 2
12 |
--------------------------------------------------------------------------------
/src/ui/Icon/icons/tick.svg:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/src/ui/Button/Button.story.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { storiesOf, action } from '@kadira/storybook';
3 | import { Button } from './index';
4 |
5 | storiesOf('Button', module)
6 | .add('with text', () => (
7 |
8 | ))
9 | .add('with some emoji', () => (
10 |
11 | ));
12 |
--------------------------------------------------------------------------------
/src/styles/main.scss:
--------------------------------------------------------------------------------
1 | html {
2 | box-sizing: border-box;
3 | font-size: 62.5%;
4 | -webkit-font-smoothing: antialiased;
5 | -webkit-tap-highlight-color: transparent;
6 | }
7 |
8 | *,
9 | *::before,
10 | *::after {
11 | box-sizing: inherit;
12 | }
13 |
14 | body {
15 | font-size: 1.6em;
16 | line-height: 1.6;
17 | font-family: $font-face-base;
18 | color: $color-black;
19 | }
20 |
21 | .page {
22 | min-height: 100vh;
23 | }
24 |
--------------------------------------------------------------------------------
/src/lib/colors/gradient.js:
--------------------------------------------------------------------------------
1 | export function createGradient(colors, direction = 'right') {
2 | let gradient = `linear-gradient(to ${direction},`;
3 | const { length } = colors;
4 |
5 | colors.forEach((color, index) => {
6 | const percent = 100 * (index + 1) / length;
7 | gradient += `${color} ${percent}%,`;
8 | });
9 |
10 | gradient = gradient.slice(0, gradient.length - 1);
11 | gradient += ')';
12 |
13 | return gradient;
14 | }
15 |
--------------------------------------------------------------------------------
/src/lib/utils/StoriesWrapper.jsx:
--------------------------------------------------------------------------------
1 | import React, { PropTypes } from 'react';
2 |
3 | const styles = {
4 | minHeight: '50vh',
5 | display: 'flex',
6 | alignItems: 'center',
7 | justifyContent: 'center',
8 | };
9 |
10 | const StoriesWrapper = ({ children }) => (
11 | {children}
12 | );
13 |
14 | StoriesWrapper.propTypes = {
15 | children: PropTypes.any.isRequired,
16 | };
17 |
18 | export default StoriesWrapper;
19 |
--------------------------------------------------------------------------------
/src/ui/Icon/icons/add.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/template.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | <%= htmlWebpackPlugin.options.title %>
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/ui/Layout/Main.jsx:
--------------------------------------------------------------------------------
1 | import React, { PropTypes } from 'react';
2 | import cx from 'classnames';
3 |
4 | const Main = ({ children, sidebarOpened }) => {
5 | const className = cx('main', {
6 | 'main--sidebar-opened': sidebarOpened,
7 | });
8 |
9 | return (
10 |
11 | {children}
12 |
13 | );
14 | };
15 |
16 | Main.propTypes = {
17 | sidebarOpened: PropTypes.bool.isRequired,
18 | children: PropTypes.any.isRequired,
19 | };
20 |
21 | export default Main;
22 |
--------------------------------------------------------------------------------
/src/components/index.js:
--------------------------------------------------------------------------------
1 | export AppContainer from './AppContainer/AppContainer';
2 | export ColorDisplay from './ColorDisplay/ColorDisplay';
3 | export ColorDisplayGroup from './ColorDisplayGroup/ColorDisplayGroup';
4 | export ColorPicker from './ColorPicker/ColorPicker';
5 | export ColorSelection from './ColorSelection/ColorSelection';
6 | export Logo from './Logo/Logo';
7 | export Navbar from './Navbar/Navbar';
8 | export Footer from './Footer/Footer';
9 | export Paginator from './Paginator/Paginator';
10 | export Presets from './Presets/Presets';
11 |
--------------------------------------------------------------------------------
/src/modules/index.js:
--------------------------------------------------------------------------------
1 | import { combineReducers } from 'redux';
2 | import { routerReducer as routing } from 'react-router-redux';
3 |
4 | // Reducers
5 | import explore from './explore/reducer';
6 | import selection from './selection/reducer';
7 | import color from './color/reducer';
8 |
9 | // Actions
10 | export colorActions from './color/actions';
11 | export selectionActions from './selection/actions';
12 | export exploreActions from './explore/actions';
13 |
14 | // Root Reducer
15 | export default combineReducers({ routing, color, selection, explore });
16 |
--------------------------------------------------------------------------------
/src/modules/selection/reducer.js:
--------------------------------------------------------------------------------
1 | import { handleActions } from 'redux-actions';
2 | import { hex } from 'lib';
3 | import types from './types';
4 |
5 | const initialState = [];
6 |
7 | export default handleActions({
8 | [types.ADD_SELECTION_COLOR](state, { payload }) {
9 | return state.concat(hex.toLongHex(payload, true));
10 | },
11 |
12 | [types.REMOVE_SELECTION_COLOR](state, { payload }) {
13 | const colorToRemove = hex.toLongHex(payload, true);
14 | return state.filter((color) => color === !colorToRemove);
15 | },
16 | }, initialState);
17 |
--------------------------------------------------------------------------------
/src/containers/LuminosityGroup.jsx:
--------------------------------------------------------------------------------
1 | import React, { PureComponent, PropTypes } from 'react';
2 | import { connect } from 'react-redux';
3 | import { ColorDisplayGroup } from 'components';
4 |
5 | @connect(state => ({ colors: state.color.luminosityGroup }))
6 | export default class LuminosityGroupContainer extends PureComponent {
7 | static propTypes = {
8 | colors: PropTypes.array.isRequired,
9 | }
10 |
11 | render() {
12 | return (
13 |
17 | );
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/modules/explore/actions.js:
--------------------------------------------------------------------------------
1 | import { createAction } from 'redux-actions';
2 | import axios from 'axios';
3 | import types from './types';
4 |
5 | const start = createAction(types.REQUEST_START);
6 | const success = createAction(types.REQUEST_SUCCESS);
7 | const error = createAction(types.REQUEST_ERROR);
8 |
9 | export default {
10 | fetchPresets() {
11 | return (dispatch) => {
12 | dispatch(start());
13 |
14 | axios
15 | .get('./presets.json')
16 | .then(response => dispatch(success(response.data)))
17 | .catch(requestError => dispatch(error(requestError)));
18 | };
19 | },
20 | };
21 |
--------------------------------------------------------------------------------
/src/modules/explore/reducer.js:
--------------------------------------------------------------------------------
1 | import { handleActions } from 'redux-actions';
2 | import types from './types';
3 |
4 | const initialState = {
5 | error: false,
6 | loading: false,
7 | data: [],
8 | };
9 |
10 | export default handleActions({
11 | [types.REQUEST_START](state) {
12 | return { ...state, loading: true, error: false };
13 | },
14 |
15 | [types.REQUEST_SUCCESS](state, { payload }) {
16 | return { loading: false, error: false, data: payload };
17 | },
18 |
19 | [types.REQUEST_ERROR](state, { payload }) {
20 | return { ...state, loading: false, error: payload };
21 | },
22 | }, initialState);
23 |
--------------------------------------------------------------------------------
/scripts/start.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-console */
2 | const webpack = require('webpack');
3 | const WebpackDevServer = require('webpack-dev-server');
4 | const webpackConfig = require('../webpack.config');
5 | const chalk = require('chalk');
6 |
7 |
8 | const PORT = 3002;
9 |
10 | const serverConfig = {
11 | contentBase: './public',
12 | publicPath: '/',
13 | hot: true,
14 | historyApiFallback: true,
15 | };
16 |
17 | new WebpackDevServer(webpack(webpackConfig), serverConfig)
18 | .listen(PORT, 'localhost', err => {
19 | err && console.error(err);
20 | console.log(`Listening at ${chalk.bold.cyan(`http://localhost:${PORT}/`)}`);
21 | });
22 |
--------------------------------------------------------------------------------
/src/components/Navbar/NavbarLink.jsx:
--------------------------------------------------------------------------------
1 | import React, { PropTypes } from 'react';
2 | import { Link, IndexLink } from 'react-router';
3 |
4 | const NavbarLink = ({ index, to, children }) => {
5 | const LinkComponent = index ? IndexLink : Link;
6 |
7 | return (
8 |
13 | {children}
14 |
15 | );
16 | };
17 |
18 | NavbarLink.propTypes = {
19 | index: PropTypes.bool,
20 | to: PropTypes.string.isRequired,
21 | children: PropTypes.string.isRequired,
22 | };
23 |
24 | export default NavbarLink;
25 |
--------------------------------------------------------------------------------
/src/components/Presets/presets.scss:
--------------------------------------------------------------------------------
1 | .presets__paginator {
2 | display: flex;
3 | flex-wrap: wrap;
4 | justify-content: space-around;
5 | margin-top: 3rem;
6 | }
7 |
8 | .preset {
9 | display: flex;
10 | margin: 1.5rem 1rem;
11 | padding: 1.5rem;
12 | border: .1rem solid $color-white-gray;
13 | box-shadow: 0 0 .3rem rgba(0, 0, 0, .1);
14 | border-radius: $radius;
15 | transition: background-color 200ms;
16 | cursor: pointer;
17 |
18 | &:hover {
19 | background-color: $color-white-gray;
20 | }
21 | }
22 |
23 | .preset__item {
24 | border: 0;
25 | outline: 0;
26 | height: 5rem;
27 | width: 5rem;
28 | cursor: pointer;
29 | }
30 |
--------------------------------------------------------------------------------
/src/ui/Icon/Icon.jsx:
--------------------------------------------------------------------------------
1 | import React, { PropTypes } from 'react';
2 | import cx from 'classnames';
3 | import './icon.scss';
4 |
5 | const Icon = ({ glyph, theme, className }) => (
6 |