├── client ├── stylus │ ├── sutairu │ │ ├── index.styl │ │ └── base │ │ │ ├── _Divider.styl │ │ │ ├── _Grid.styl │ │ │ ├── _Link.styl │ │ │ ├── _Blockquote.styl │ │ │ ├── _List.styl │ │ │ ├── _Table.styl │ │ │ ├── index.styl │ │ │ ├── _Code.styl │ │ │ ├── _Base.styl │ │ │ ├── _Button.styl │ │ │ ├── _Form.styl │ │ │ ├── _Typography.styl │ │ │ └── _defaultVars.styl │ ├── atomiku │ │ ├── _visibility.styl │ │ ├── _opacity.styl │ │ ├── _display.styl │ │ ├── _misc.styl │ │ ├── _dimensions.styl │ │ ├── index.styl │ │ ├── _text.styl │ │ ├── _defaultVars.styl │ │ ├── _shadows.styl │ │ ├── _borders.styl │ │ ├── _positioning.styl │ │ ├── _colors.styl │ │ ├── _flex.styl │ │ └── _spacing.styl │ └── style.styl ├── reducers │ ├── index.js │ ├── userReducer.js │ └── userReducer.test.js ├── actions │ ├── userActions.js │ └── userActions.test.js ├── components │ ├── App │ │ ├── App.test.jsx │ │ ├── Footer │ │ │ ├── Footer.test.jsx │ │ │ ├── Footer.jsx │ │ │ └── Footer.test.jsx.snap │ │ ├── Header │ │ │ ├── Header.test.jsx │ │ │ ├── Header.jsx │ │ │ └── Header.test.jsx.snap │ │ ├── App.jsx │ │ └── App.test.jsx.snap │ ├── About │ │ ├── About.test.jsx │ │ ├── About.jsx │ │ └── About.test.jsx.snap │ ├── Styleguide │ │ ├── Styleguide.test.jsx │ │ ├── Styleguide.jsx │ │ └── Styleguide.test.jsx.snap │ ├── NotFound404 │ │ ├── NotFound404.test.jsx │ │ ├── NotFound404.test.jsx.snap │ │ └── NotFound404.jsx │ └── Home │ │ ├── Home.test.jsx.snap │ │ ├── Home.jsx │ │ └── Home.test.jsx ├── index.js ├── routes.js └── store.js ├── public ├── favicon.ico └── fistbump.jpg ├── .travis.yml ├── server ├── api.js ├── server.js ├── app.js ├── app.test.js └── serverSideRendering.jsx ├── setupTests.js ├── jsconfig.json ├── jest.config.js ├── postcss.config.js ├── .babelrc ├── resolveSnapshots.js ├── .eslintrc ├── .gitignore ├── LICENSE.md ├── webpack.dev.js ├── webpack.common.js ├── webpack.prod.js ├── webpack.server.js ├── package.json ├── CHANGELOG.md └── README.md /client/stylus/sutairu/index.styl: -------------------------------------------------------------------------------- 1 | @import './base' 2 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kimkwanka/niru/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/fistbump.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kimkwanka/niru/HEAD/public/fistbump.jpg -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "node" 4 | cache: 5 | yarn: true 6 | script: 7 | - yarn lint 8 | - yarn test -------------------------------------------------------------------------------- /client/stylus/sutairu/base/_Divider.styl: -------------------------------------------------------------------------------- 1 | hr 2 | border: 0 3 | border-top: $borderWidth solid $hrColor 4 | margin: 3.0rem 0 5 | -------------------------------------------------------------------------------- /server/api.js: -------------------------------------------------------------------------------- 1 | const api = (req, res) => { 2 | res.json({ 3 | data: 'Some data!', 4 | }); 5 | }; 6 | 7 | export default api; 8 | -------------------------------------------------------------------------------- /client/stylus/atomiku/_visibility.styl: -------------------------------------------------------------------------------- 1 | .hidden 2 | visibility: hidden !important 3 | 4 | .visible 5 | visibility: visible !important 6 | -------------------------------------------------------------------------------- /client/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import user from './userReducer'; 3 | 4 | export default combineReducers({ user }); 5 | -------------------------------------------------------------------------------- /setupTests.js: -------------------------------------------------------------------------------- 1 | import { configure } from 'enzyme'; 2 | import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; 3 | 4 | configure({ adapter: new Adapter() }); 5 | -------------------------------------------------------------------------------- /client/stylus/sutairu/base/_Grid.styl: -------------------------------------------------------------------------------- 1 | .container 2 | margin: 0 auto 3 | max-width: $containerWidth 4 | padding: 0 $containerGap 5 | position: relative 6 | width: 100% 7 | -------------------------------------------------------------------------------- /client/stylus/atomiku/_opacity.styl: -------------------------------------------------------------------------------- 1 | createOpacities(steps) 2 | for step in steps 3 | .opacity-{step} 4 | opacity: (step / 100) !important 5 | 6 | createOpacities($opacitySteps) -------------------------------------------------------------------------------- /client/stylus/sutairu/base/_Link.styl: -------------------------------------------------------------------------------- 1 | a 2 | color: $linkColor 3 | text-decoration: none 4 | font-size: $linkFontSize 5 | &:hover:not(.button) 6 | color: $linkColorHover 7 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": "./", 4 | "paths": { 5 | "Client/*": ["client/*"], 6 | } 7 | }, 8 | "exclude": ["node_modules", "dist"] 9 | } -------------------------------------------------------------------------------- /client/stylus/sutairu/base/_Blockquote.styl: -------------------------------------------------------------------------------- 1 | blockquote 2 | border-left: .3rem solid $blockquoteBorderColor 3 | margin-left: 0 4 | margin-right: 0 5 | padding: 1rem 1.5rem 6 | 7 | *:last-child 8 | margin-bottom: 0 9 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | setupFiles: ['/setupTests.js'], 3 | snapshotResolver: '/resolveSnapshots.js', 4 | coveragePathIgnorePatterns: ['/dist/', '/node_modules/'], 5 | }; 6 | -------------------------------------------------------------------------------- /client/actions/userActions.js: -------------------------------------------------------------------------------- 1 | export function renameUser(name) { 2 | return { 3 | type: 'RENAME_USER', 4 | name, 5 | }; 6 | } 7 | 8 | export function toggleAuthenticated() { 9 | return { 10 | type: 'TOGGLE_AUTHENTICATED', 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /client/stylus/atomiku/_display.styl: -------------------------------------------------------------------------------- 1 | .display-none 2 | display: none 3 | 4 | .display-inline-block 5 | display: inline-block 6 | 7 | .display-block 8 | display: block 9 | 10 | .display-inline 11 | display: inline 12 | 13 | .display-table 14 | display: table -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable global-require */ 2 | module.exports = { 3 | plugins: [ 4 | require('autoprefixer'), 5 | require('cssnano')({ 6 | preset: ['default', { 7 | discardComments: { 8 | removeAll: true, 9 | }, 10 | }], 11 | }), 12 | ], 13 | }; 14 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/preset-env", "@babel/preset-react"], 3 | "plugins": [ 4 | "react-hot-loader/babel", 5 | [ 6 | "module-resolver", 7 | { 8 | "root": ["./"], 9 | "alias": { 10 | "Client": "./client", 11 | } 12 | } 13 | ] 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /client/stylus/atomiku/_misc.styl: -------------------------------------------------------------------------------- 1 | .cursor-pointer 2 | cursor pointer 3 | 4 | .pointer-events-none 5 | pointer-events: none 6 | 7 | .list-style-none 8 | list-style: none 9 | 10 | .bg-cover 11 | background-size: cover 12 | 13 | .overflow-hidden 14 | overflow: hidden 15 | 16 | .transition-fast 17 | transition: all 0.3s -------------------------------------------------------------------------------- /client/stylus/atomiku/_dimensions.styl: -------------------------------------------------------------------------------- 1 | createDimensions(steps) 2 | for step in steps 3 | .width-{step} 4 | width: step + '%' !important 5 | .height-{step} 6 | height: step + '%' !important 7 | 8 | createDimensions($dimensionSteps) 9 | 10 | .width-auto 11 | width: auto 12 | 13 | .height-auto 14 | height: auto -------------------------------------------------------------------------------- /client/stylus/sutairu/base/_List.styl: -------------------------------------------------------------------------------- 1 | dl, 2 | ol, 3 | ul 4 | list-style: none 5 | margin-top: 0 6 | padding-left: 0 7 | font-size: $listFontSize 8 | dl, 9 | ol, 10 | ul 11 | font-size: 90% 12 | margin: 1.5rem 0 1.5rem 3.0rem 13 | 14 | ol 15 | list-style: decimal inside 16 | 17 | ul 18 | list-style: circle inside 19 | -------------------------------------------------------------------------------- /client/stylus/sutairu/base/_Table.styl: -------------------------------------------------------------------------------- 1 | table 2 | border-spacing: 0 3 | width: 100% 4 | 5 | td, 6 | th 7 | border-bottom: $tableBorderWidth solid $tableBorderColor 8 | padding: 1.2rem 1.5rem 9 | text-align: left 10 | font-size: $tableFontSize 11 | &:first-child 12 | padding-left: 0 13 | 14 | &:last-child 15 | padding-right: 0 16 | -------------------------------------------------------------------------------- /client/stylus/atomiku/index.styl: -------------------------------------------------------------------------------- 1 | @import './_defaultVars' 2 | @import './_spacing' 3 | @import './_dimensions' 4 | @import './_opacity' 5 | @import './_positioning' 6 | @import './_visibility' 7 | @import './_display' 8 | @import './_flex' 9 | @import './_colors' 10 | @import './_text' 11 | @import './_borders' 12 | @import './_shadows' 13 | @import './_misc' -------------------------------------------------------------------------------- /client/components/App/App.test.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | import toJson from 'enzyme-to-json'; 4 | import App from './App'; 5 | 6 | describe(' - Snapshot', () => { 7 | it('matches its snapshot', () => { 8 | const wrapper = shallow(); 9 | expect(toJson(wrapper)).toMatchSnapshot(); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /client/components/About/About.test.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | import toJson from 'enzyme-to-json'; 4 | import About from './About'; 5 | 6 | describe(' - Snapshot', () => { 7 | it('matches its snapshot', () => { 8 | const wrapper = shallow(); 9 | expect(toJson(wrapper)).toMatchSnapshot(); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /client/stylus/sutairu/base/index.styl: -------------------------------------------------------------------------------- 1 | @import './base/_defaultVars' 2 | @import './base/_Base' 3 | @import './base/_Blockquote' 4 | @import './base/_Button' 5 | @import './base/_Code' 6 | @import './base/_Divider' 7 | @import './base/_Form' 8 | @import './base/_Grid' 9 | @import './base/_Link' 10 | @import './base/_List' 11 | @import './base/_Table' 12 | @import './base/_Typography' 13 | -------------------------------------------------------------------------------- /client/components/App/Footer/Footer.test.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | import toJson from 'enzyme-to-json'; 4 | import Footer from './Footer'; 5 | 6 | describe('