From 392cbe93887c5d0ac99f39a24009e4057a7b93f4 Mon Sep 17 00:00:00 2001 From: NGPixel Date: Sat, 17 Mar 2018 22:41:16 -0400 Subject: [PATCH] refactor: dev optimizations + improvements --- .eslintignore | 1 + client/app.js | 1 - client/components/admin-dev.vue | 163 +++----- client/components/admin-editor.vue | 45 ++ client/components/admin-groups.vue | 108 +++++ client/components/admin-rendering.vue | 19 + client/components/admin-stats.vue | 19 + client/components/admin.vue | 4 + client/components/login.vue | 110 ++--- client/components/toggle.vue | 21 - client/scss/app.scss | 7 +- client/scss/base/base.scss | 9 - client/scss/base/material.scss | 24 -- client/scss/components/button.scss | 136 ------ client/scss/components/panel.scss | 118 ------ client/scss/components/toggle.scss | 67 --- client/scss/components/typography.scss | 16 - client/scss/error.scss | 18 - dev/config/postcss.config.js | 14 - dev/config/pug-lintrc.json | 16 - dev/webpack/webpack.common.js | 262 ------------ dev/webpack/webpack.dev.js | 233 ++++++++++- dev/webpack/webpack.prod.js | 244 ++++++++++- package.json | 40 +- server/graph/schemas/system.graphql | 45 ++ server/views/main/login.pug | 6 +- server/views/main/welcome.pug | 15 +- server/views/master.pug | 6 +- test/lint.js | 77 ---- wiki.js | 5 +- yarn.lock | 547 ++++++++++++++++++++++++- 31 files changed, 1388 insertions(+), 1008 deletions(-) create mode 100644 client/components/admin-editor.vue create mode 100644 client/components/admin-groups.vue create mode 100644 client/components/admin-rendering.vue create mode 100644 client/components/admin-stats.vue delete mode 100644 client/components/toggle.vue delete mode 100644 client/scss/components/button.scss delete mode 100644 client/scss/components/panel.scss delete mode 100644 client/scss/components/toggle.scss delete mode 100644 client/scss/components/typography.scss delete mode 100644 client/scss/error.scss delete mode 100644 dev/config/postcss.config.js delete mode 100644 dev/config/pug-lintrc.json delete mode 100644 dev/webpack/webpack.common.js create mode 100644 server/graph/schemas/system.graphql delete mode 100644 test/lint.js diff --git a/.eslintignore b/.eslintignore index d064525a..471806d0 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,7 @@ **/node_modules/** **/*.min.js assets/** +client/libs/** coverage/** repo/** data/** diff --git a/client/app.js b/client/app.js index 74d9d523..1f5914e2 100644 --- a/client/app.js +++ b/client/app.js @@ -80,7 +80,6 @@ Vue.component('login', () => import(/* webpackMode: "eager" */ './components/log Vue.component('nav-header', () => import(/* webpackMode: "eager" */ './components/nav-header.vue')) Vue.component('navigator', () => import(/* webpackMode: "eager" */ './components/navigator.vue')) Vue.component('setup', () => import(/* webpackChunkName: "setup" */ './components/setup.vue')) -Vue.component('toggle', () => import(/* webpackMode: "eager" */ './components/toggle.vue')) let bootstrap = () => { // ==================================== diff --git a/client/components/admin-dev.vue b/client/components/admin-dev.vue index 30afef06..43458664 100644 --- a/client/components/admin-dev.vue +++ b/client/components/admin-dev.vue @@ -4,49 +4,71 @@ .pa-3.pt-4 .headline.primary--text Developer Tools .subheading.grey--text ¯\_(ツ)_/¯ - v-tabs(color='grey lighten-4', fixed-tabs, slider-color='primary', show-arrows) - v-tab Graph API Playground - v-tab Graph API Map - - v-tab-item(:transition='false', :reverse-transition='false') + v-tabs(v-model='selectedTab', color='grey lighten-4', fixed-tabs, slider-color='primary', show-arrows, @input='tabChanged') + v-tab(key='0') Graph API Playground + v-tab(key='1') Graph API Map + v-tabs-items(v-model='selectedTab') + v-tab-item(key='0', :transition='false', :reverse-transition='false') #graphiql + + v-tab-item(key='1', :transition='false', :reverse-transition='false') + #voyager + + + diff --git a/client/components/admin-groups.vue b/client/components/admin-groups.vue new file mode 100644 index 00000000..dbab6f95 --- /dev/null +++ b/client/components/admin-groups.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/client/components/admin-rendering.vue b/client/components/admin-rendering.vue new file mode 100644 index 00000000..dc4514af --- /dev/null +++ b/client/components/admin-rendering.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/client/components/admin-stats.vue b/client/components/admin-stats.vue new file mode 100644 index 00000000..ea40e640 --- /dev/null +++ b/client/components/admin-stats.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/client/components/admin.vue b/client/components/admin.vue index f7ad6fe6..9a542997 100644 --- a/client/components/admin.vue +++ b/client/components/admin.vue @@ -82,9 +82,13 @@ const router = new VueRouter({ { path: '/dashboard', component: () => import(/* webpackChunkName: "admin" */ './admin-dashboard.vue') }, { path: '/general', component: () => import(/* webpackChunkName: "admin" */ './admin-general.vue') }, { path: '/locale', component: () => import(/* webpackChunkName: "admin" */ './admin-locale.vue') }, + { path: '/stats', component: () => import(/* webpackChunkName: "admin" */ './admin-stats.vue') }, { path: '/theme', component: () => import(/* webpackChunkName: "admin" */ './admin-theme.vue') }, + { path: '/groups', component: () => import(/* webpackChunkName: "admin" */ './admin-groups.vue') }, { path: '/users', component: () => import(/* webpackChunkName: "admin" */ './admin-users.vue') }, { path: '/auth', component: () => import(/* webpackChunkName: "admin" */ './admin-auth.vue') }, + { path: '/rendering', component: () => import(/* webpackChunkName: "admin" */ './admin-rendering.vue') }, + { path: '/editor', component: () => import(/* webpackChunkName: "admin" */ './admin-editor.vue') }, { path: '/logging', component: () => import(/* webpackChunkName: "admin" */ './admin-logging.vue') }, { path: '/search', component: () => import(/* webpackChunkName: "admin" */ './admin-search.vue') }, { path: '/storage', component: () => import(/* webpackChunkName: "admin" */ './admin-storage.vue') }, diff --git a/client/components/login.vue b/client/components/login.vue index 56295f7b..50bf3d37 100644 --- a/client/components/login.vue +++ b/client/components/login.vue @@ -1,30 +1,39 @@ diff --git a/client/scss/app.scss b/client/scss/app.scss index b9a798b9..48607c48 100644 --- a/client/scss/app.scss +++ b/client/scss/app.scss @@ -4,20 +4,15 @@ @import "base/base"; @import 'base/icons'; -@import "../libs/animate/animate"; +// @import "../libs/animate/animate"; -@import 'components/button'; @import 'components/markdown-content'; @import 'components/navigator'; -@import 'components/toggle'; -@import 'components/typography'; // @import '../libs/twemoji/twemoji-awesome'; @import '../libs/prism/prism.css'; // @import 'node_modules/diff2html/dist/diff2html.min'; -@import 'node_modules/graphiql/graphiql'; - @import 'pages/welcome'; @import 'layout/_rtl'; diff --git a/client/scss/base/base.scss b/client/scss/base/base.scss index c52060b0..0ad2d6a0 100644 --- a/client/scss/base/base.scss +++ b/client/scss/base/base.scss @@ -42,15 +42,6 @@ html { display: none !important; } -.is-hidden-until-scroll { - max-height: 0; - overflow: hidden; - transition: all .6s ease; -} -.is-sticky .is-hidden-until-scroll { - max-height: 30px; -} - .is-hidden-mobile { @include mobile { display: none !important; diff --git a/client/scss/base/material.scss b/client/scss/base/material.scss index 47927928..b7ebf23a 100644 --- a/client/scss/base/material.scss +++ b/client/scss/base/material.scss @@ -325,27 +325,3 @@ $material-colors: ( @function mc($color-name, $color-variant: '500') { @return material-color($color-name, $color-variant); } - -@mixin md-elevation-0 { - box-shadow: none !important; -} - -@mixin md-elevation-1 { - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); -} - -@mixin md-elevation-2 { - box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3); -} - -@mixin md-elevation-3 { - box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.3); -} - -@mixin md-elevation-4 { - box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.3); -} - -@mixin md-elevation-5 { - box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.3); -} \ No newline at end of file diff --git a/client/scss/components/button.scss b/client/scss/components/button.scss deleted file mode 100644 index 0f5c9a09..00000000 --- a/client/scss/components/button.scss +++ /dev/null @@ -1,136 +0,0 @@ -.button { - background-color: mc('orange','600'); - color: #FFF; - border: 1px solid mc('orange','700'); - border-radius: 3px; - display: inline-flex; - height: 40px; - align-items: center; - padding: 0 15px; - font-size: 13px; - font-weight: 600; - font-family: $core-font-standard; - margin: 0; - transition: all .4s ease; - cursor: pointer; - text-decoration: none; - text-transform: uppercase; - - span { - font-weight: 600; - display: inline-flex; - align-items: center; - line-height: 14px; - height: 14px; - } - - i { - margin-right: 8px; - font-size: 14px; - line-height: 14px; - height: 14px; - } - - &:focus { - outline: none; - border-color: #FFF; - } - - &:hover { - background-color: mc('orange','800'); - text-decoration: none; - } - - @each $color, $colorvalue in $material-colors { - &.is-#{$color} { - background-color: mc($color, '600'); - border-color: mc($color,'700'); - color: #FFF; - - &.is-outlined { - background-color: #FFF; - color: mc($color,'700'); - } - - &.is-inverted { - background-color: rgba(mc($color, '800'), 0); - border-color: mc($color, '500'); - } - - &:hover { - background-color: mc($color,'800'); - color: #FFF; - animation: none; - } - - &:focus { - box-shadow: inset 0 0 0 3px rgba(255,255,255, .4); - } - } - - } - - &.is-icon-only { - i { - margin-right: 0; - } - } - - &.is-featured { - animation: btnInvertedPulse .6s ease alternate infinite; - } - - &.is-fullwidth { - width: 100%; - text-align: center; - justify-content: center; - } - - &.is-disabled, &:disabled { - background-color: mc('grey', '300'); - border: 1px solid mc('grey','400'); - color: mc('grey', '500'); - cursor: default; - transition: none; - - &:hover { - background-color: mc('grey', '300') !important; - color: mc('grey', '500') !important; - } - } - - &.is-small { - height: 30px; - } - -} - -.button-group { - - .button { - border-radius: 0; - margin-left: 1px; - - &:first-child { - margin-left: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; - } - - &:last-child { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; - } - - } - -} - -@include keyframes(btnInvertedPulse) { - 0% { - background-color: rgba(mc('grey', '500'), 0); - } - 100% { - background-color: rgba(mc('grey', '500'), 0.25); - } -} diff --git a/client/scss/components/panel.scss b/client/scss/components/panel.scss deleted file mode 100644 index 3ea6fa60..00000000 --- a/client/scss/components/panel.scss +++ /dev/null @@ -1,118 +0,0 @@ - -.panel-aside { - background-color: mc('blue-grey', '800'); - border: 1px solid mc('blue-grey', '800'); - border-bottom-left-radius: 8px; - padding: 20px; - color: mc('blue-grey','100'); - - label { - color: #FFF; - } - -} - -.panel { - background-color: #FFF; - box-shadow: 0 0 12px 0 rgba(mc('grey','800'), .10), 1px 6px 8px 0 rgba(mc('grey','800'), .10); - padding: 0 0 1px 0; - border-radius: 4px; - - .panel-title { - border-bottom: 1px solid darken($color-bg, 5%); - padding: 0 15px; - color: $color-text; - font-size: 16px; - font-weight: 500; - display: flex; - align-items: center; - justify-content: space-between; - height: 40px; - - &.is-featured { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - background-color: mc('blue', '700'); - background-image: linear-gradient(to bottom, mc('blue', '700') 0%, mc('blue', '800') 100%); - border-bottom-color: mc('blue', '900'); - box-shadow: inset 0 0 0 1px mc('blue', '600'), inset 0 0 0px 2px rgba(mc('blue', '800'), .5); - color: #FFF; - - > i::before { - @include spinner(#FFF, 0.4s, 18px); - } - - } - - & + .panel-content { - box-shadow: inset 0 0 0 1px #FFF, inset 0 30px 80px -25px mc('blue', '100'); - } - - > span { - font-weight: 500; - } - - > i { - display: flex; - width: 18px; - align-items: center; - - &::before { - content: " "; - @include spinner(mc($primary,'500'), 0.4s, 18px); - } - } - - } - - .panel-content { - padding: 0 15px; - - &.is-text { - padding: 25px; - - p + p, p + h3 { - margin-top: 25px; - } - - h3 { - margin-bottom: 15px; - font-weight: 500; - } - - ul li { - color: mc('grey', '700'); - } - - strong { - font-weight: 500; - color: mc($primary,'800'); - } - - } - - } - - .panel-footer { - display: flex; - align-items: center; - justify-content: flex-end; - height: 50px; - background-color: $color-bg; - padding: 0 15px; - margin: 0 1px; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - position: relative; - - .button + .button { - margin-left: 10px; - } - - } - - + .panel { - margin-top: 25px; - } - -} diff --git a/client/scss/components/toggle.scss b/client/scss/components/toggle.scss deleted file mode 100644 index 6b3bda11..00000000 --- a/client/scss/components/toggle.scss +++ /dev/null @@ -1,67 +0,0 @@ -.toggle { - display: inline-flex; - align-items: center; - height: 24px; - cursor: pointer; - margin: 5px 5px 5px 0; - - & + & { - margin-left: 15px; - } - - &-container { - display: inline-flex; - align-items: center; - height: 24px; - width: 50px; - background-color: mc('blue-grey', '200'); - border-radius: 12px; - padding: 2px; - transition: background-color .5s ease; - } - - &-pin { - display: flex; - background-color: #FFF; - border-radius:10px; - height: 20px; - width: 20px; - transition: all .5s ease; - } - - &-text { - padding-left: 10px; - color: mc('grey', '700'); - font-size: 12px; - } - - &:hover { - .toggle-container { - background-color: mc('grey', '400'); - } - } - - &.is-active { - .toggle-container { - background-color: mc('indigo', '500'); - } - .toggle-pin { - margin-left: 28px; - } - } - -} - -/* THEME OVERRIDE - START */ - -@each $color, $colorvalue in $material-colors { - .is-primary-#{$color} .toggle { - &.is-active { - .toggle-container { - background-color: mc($color, '500'); - } - } - } -} - -/* THEME OVERRIDE - END */ diff --git a/client/scss/components/typography.scss b/client/scss/components/typography.scss deleted file mode 100644 index 53be5755..00000000 --- a/client/scss/components/typography.scss +++ /dev/null @@ -1,16 +0,0 @@ - -h1 { - font-size: 28px; -} -h2 { - font-size: 18px; -} -h3 { - font-size: 16px; -} - -@each $color, $colorvalue in $material-colors { - i.is-#{$color} { - color: mc($color, '600'); - } -} \ No newline at end of file diff --git a/client/scss/error.scss b/client/scss/error.scss deleted file mode 100644 index 7398e367..00000000 --- a/client/scss/error.scss +++ /dev/null @@ -1,18 +0,0 @@ -@charset "utf-8"; - -$primary: 'indigo'; - -@import "base/variables"; -@import "base/colors"; -@import "base/reset"; -@import "base/mixins"; -@import "base/fonts"; -@import "base/base"; - -@import "libs/animate"; - -@import 'components/button'; -@import 'components/grid'; -@import 'components/typography'; - -@import 'pages/error'; diff --git a/dev/config/postcss.config.js b/dev/config/postcss.config.js deleted file mode 100644 index 1ea3d6f3..00000000 --- a/dev/config/postcss.config.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - plugins: { - 'autoprefixer': {}, - 'cssnano': { - preset: ['default', { - discardComments: { - removeAll: true - } - }] - }, - 'postcss-flexbugs-fixes': {}, - 'postcss-flexibility': {} - } -} diff --git a/dev/config/pug-lintrc.json b/dev/config/pug-lintrc.json deleted file mode 100644 index df564a8e..00000000 --- a/dev/config/pug-lintrc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "disallowDuplicateAttributes": true, - "disallowIdAttributeWithStaticValue": true, - "disallowMultipleLineBreaks": true, - "requireClassLiteralsBeforeAttributes": true, - "requireIdLiteralsBeforeAttributes": true, - "requireLineFeedAtFileEnd": true, - "requireLowerCaseAttributes": true, - "requireLowerCaseTags": true, - "requireSpaceAfterCodeOperator": true, - "requireStrictEqualityOperators": true, - "validateAttributeQuoteMarks": "'", - "validateAttributeSeparator": ", ", - "validateDivTags": true, - "validateIndentation": 2 -} diff --git a/dev/webpack/webpack.common.js b/dev/webpack/webpack.common.js deleted file mode 100644 index 3e2029d4..00000000 --- a/dev/webpack/webpack.common.js +++ /dev/null @@ -1,262 +0,0 @@ -const path = require('path') -const fs = require('fs-extra') -const webpack = require('webpack') - -const CopyWebpackPlugin = require('copy-webpack-plugin') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const HtmlWebpackPugPlugin = require('html-webpack-pug-plugin') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin') - -const babelConfig = fs.readJsonSync(path.join(process.cwd(), '.babelrc')) -const postCSSConfig = { - config: { - path: path.join(process.cwd(), 'dev/config/postcss.config.js') - } -} -const cacheDir = '.webpack-cache/cache' -const babelDir = path.join(process.cwd(), '.webpack-cache/babel') - -process.noDeprecation = true - -module.exports = { - entry: { - client: './client/index.js' - }, - output: { - path: path.join(process.cwd(), 'assets'), - publicPath: '/', - filename: 'js/[name].js', - chunkFilename: 'js/[name].js', - globalObject: 'this' - }, - module: { - rules: [ - { - test: /\.js$/, - exclude: /node_modules/, - use: [ - { - loader: 'cache-loader', - options: { - cacheDirectory: cacheDir - } - }, - { - loader: 'babel-loader', - options: { - ...babelConfig, - cacheDirectory: babelDir - } - } - ] - }, - { - test: /\.css$/, - use: [ - MiniCssExtractPlugin.loader, - 'css-loader', - { - loader: 'postcss-loader', - options: postCSSConfig - } - ] - }, - { - test: /\.scss$/, - use: [ - 'style-loader', - MiniCssExtractPlugin.loader, - 'css-loader', - { - loader: 'postcss-loader', - options: postCSSConfig - }, - { - loader: 'sass-loader', - options: { - sourceMap: false - } - } - ] - }, - { - test: /\.styl$/, - use: [ - 'style-loader', - MiniCssExtractPlugin.loader, - 'css-loader', - { - loader: 'postcss-loader', - options: postCSSConfig - }, - 'stylus-loader' - ] - }, - { - test: /\.vue$/, - loader: 'vue-loader', - options: { - loaders: { - css: [ - 'vue-style-loader', - MiniCssExtractPlugin.loader, - 'css-loader', - { - loader: 'postcss-loader', - options: postCSSConfig - } - ], - scss: [ - 'vue-style-loader', - MiniCssExtractPlugin.loader, - 'css-loader', - { - loader: 'postcss-loader', - options: postCSSConfig - }, - { - loader: 'sass-loader', - options: { - sourceMap: false - } - }, - { - loader: 'sass-resources-loader', - options: { - resources: path.join(process.cwd(), '/client/scss/global.scss') - } - } - ], - js: [ - { - loader: 'cache-loader', - options: { - cacheDirectory: cacheDir - } - }, - { - loader: 'babel-loader', - options: { - babelrc: path.join(process.cwd(), '.babelrc'), - cacheDirectory: babelDir - } - } - ] - } - } - }, - { - test: /\.(png|jpg|gif)$/, - use: [ - { - loader: 'url-loader', - options: { - limit: 8192 - } - } - ] - }, - { - test: /\.svg$/, - exclude: [ - path.join(process.cwd(), 'client/svg') - ], - use: [ - { - loader: 'file-loader', - options: { - name: '[name].[ext]', - outputPath: 'svg/' - } - } - ] - }, - { - test: /\.svg$/, - include: [ - path.join(process.cwd(), 'client/svg') - ], - use: [ - { - loader: 'raw-loader' - } - ] - }, - { - test: /\.flow$/, - loader: 'ignore-loader' - } - ] - }, - plugins: [ - new webpack.BannerPlugin('Wiki.js - wiki.js.org - Licensed under AGPL'), - new CopyWebpackPlugin([ - { from: 'client/static' } - ], { - - }), - new MiniCssExtractPlugin({ - filename: 'css/bundle.css', - chunkFilename: 'css/[name].css' - }), - new HtmlWebpackPlugin({ - template: 'dev/templates/master.pug', - filename: '../server/views/master.pug', - hash: true, - inject: 'head' - }), - new HtmlWebpackPugPlugin(), - new ScriptExtHtmlWebpackPlugin({ - sync: 'runtime.js', - defaultAttribute: 'async' - }) - ], - optimization: { - namedModules: true, - namedChunks: true, - splitChunks: { - cacheGroups: { - default: { - minChunks: 2, - priority: -20, - reuseExistingChunk: true - }, - vendor: { - test: /[\\/]node_modules[\\/]/, - priority: -10 - } - } - }, - runtimeChunk: 'single' - }, - resolve: { - mainFields: ['browser', 'main', 'module'], - symlinks: true, - alias: { - '@': path.join(process.cwd(), 'client'), - 'vue$': 'vue/dist/vue.esm.js', - 'mdi': path.resolve(process.cwd(), 'node_modules/vue-material-design-icons'), - // Duplicates fixes: - 'apollo-link': path.join(process.cwd(), 'node_modules/apollo-link'), - 'apollo-utilities': path.join(process.cwd(), 'node_modules/apollo-utilities'), - 'uc.micro': path.join(process.cwd(), 'node_modules/uc.micro') - }, - extensions: [ - '.js', - '.json', - '.vue' - ], - modules: [ - 'node_modules' - ] - }, - node: { - fs: 'empty' - }, - stats: { - children: false, - entrypoints: false - }, - target: 'web' -} diff --git a/dev/webpack/webpack.dev.js b/dev/webpack/webpack.dev.js index ced930c1..6e9ed5d7 100644 --- a/dev/webpack/webpack.dev.js +++ b/dev/webpack/webpack.dev.js @@ -1,24 +1,198 @@ const webpack = require('webpack') -const merge = require('webpack-merge') +const path = require('path') +const fs = require('fs-extra') -const WriteFilePlugin = require('write-file-webpack-plugin') +const CopyWebpackPlugin = require('copy-webpack-plugin') +const HtmlWebpackPlugin = require('html-webpack-plugin') +const HtmlWebpackPugPlugin = require('html-webpack-pug-plugin') const SimpleProgressWebpackPlugin = require('simple-progress-webpack-plugin') +const WriteFilePlugin = require('write-file-webpack-plugin') -const common = require('./webpack.common.js') +const babelConfig = fs.readJsonSync(path.join(process.cwd(), '.babelrc')) +const cacheDir = '.webpack-cache/cache' +const babelDir = path.join(process.cwd(), '.webpack-cache/babel') -module.exports = merge(common, { +process.noDeprecation = true + +module.exports = { mode: 'development', entry: { client: ['./client/index.js', 'webpack-hot-middleware/client'] }, output: { + path: path.join(process.cwd(), 'assets'), + publicPath: '/', + filename: 'js/[name].js', + chunkFilename: 'js/[name].js', + globalObject: 'this', pathinfo: true }, + module: { + rules: [ + { + test: /\.js$/, + exclude: /node_modules/, + use: [ + { + loader: 'cache-loader', + options: { + cacheDirectory: cacheDir + } + }, + { + loader: 'babel-loader', + options: { + ...babelConfig, + cacheDirectory: babelDir + } + } + ] + }, + { + test: /\.css$/, + use: [ + 'style-loader', + 'css-loader', + 'postcss-loader' + ] + }, + { + test: /\.scss$/, + use: [ + { + loader: 'cache-loader', + options: { + cacheDirectory: cacheDir + } + }, + 'style-loader', + 'css-loader', + 'postcss-loader', + { + loader: 'sass-loader', + options: { + sourceMap: false + } + } + ] + }, + { + test: /\.styl$/, + use: [ + 'style-loader', + 'css-loader', + 'postcss-loader', + 'stylus-loader' + ] + }, + { + test: /\.vue$/, + loader: 'vue-loader', + options: { + loaders: { + scss: [ + 'vue-style-loader', + 'css-loader', + 'postcss-loader', + { + loader: 'sass-loader', + options: { + sourceMap: false + } + }, + { + loader: 'sass-resources-loader', + options: { + resources: path.join(process.cwd(), '/client/scss/global.scss') + } + } + ], + js: [ + { + loader: 'cache-loader', + options: { + cacheDirectory: cacheDir + } + }, + { + loader: 'babel-loader', + options: { + babelrc: path.join(process.cwd(), '.babelrc'), + cacheDirectory: babelDir + } + } + ] + } + } + }, + { + test: /\.(png|jpg|gif)$/, + use: [ + { + loader: 'url-loader', + options: { + limit: 8192 + } + } + ] + }, + { + test: /\.svg$/, + exclude: [ + path.join(process.cwd(), 'client/svg') + ], + use: [ + { + loader: 'file-loader', + options: { + name: '[name].[ext]', + outputPath: 'svg/' + } + } + ] + }, + { + test: /\.svg$/, + include: [ + path.join(process.cwd(), 'client/svg') + ], + use: [ + { + loader: 'raw-loader' + } + ] + }, + { + test: /.jsx$/, + loader: 'babel-loader', + exclude: /node_modules/, + options: { + presets: ['es2015', 'react'] + } + }, + { + test: /\.flow$/, + loader: 'ignore-loader' + } + ] + }, plugins: [ + new CopyWebpackPlugin([ + { from: 'client/static' }, + { from: './node_modules/graphql-voyager/dist/voyager.worker.js', to: 'js/' } + ], {}), + new HtmlWebpackPlugin({ + template: 'dev/templates/master.pug', + filename: '../server/views/master.pug', + hash: false, + inject: 'head' + }), + new HtmlWebpackPugPlugin(), new SimpleProgressWebpackPlugin({ format: 'compact' }), new webpack.DefinePlugin({ + 'process.env': { NODE_ENV: '"development"' }, '__REACT_DEVTOOLS_GLOBAL_HOOK__': '({ isDisabled: true })' }), new WriteFilePlugin(), @@ -27,5 +201,54 @@ module.exports = merge(common, { /node_modules/ ]) ], + optimization: { + namedModules: true, + namedChunks: true, + splitChunks: { + cacheGroups: { + default: { + minChunks: 2, + priority: -20, + reuseExistingChunk: true + }, + vendor: { + test: /[\\/]node_modules[\\/]/, + minChunks: 2, + priority: -10 + } + } + }, + runtimeChunk: 'single' + }, + resolve: { + mainFields: ['browser', 'main', 'module'], + symlinks: true, + alias: { + '@': path.join(process.cwd(), 'client'), + 'vue$': 'vue/dist/vue.esm.js', + 'mdi': path.resolve(process.cwd(), 'node_modules/vue-material-design-icons'), + // Duplicates fixes: + 'apollo-link': path.join(process.cwd(), 'node_modules/apollo-link'), + 'apollo-utilities': path.join(process.cwd(), 'node_modules/apollo-utilities'), + 'uc.micro': path.join(process.cwd(), 'node_modules/uc.micro') + }, + extensions: [ + '.js', + '.json', + '.jsx', + '.vue' + ], + modules: [ + 'node_modules' + ] + }, + node: { + fs: 'empty' + }, + stats: { + children: false, + entrypoints: false + }, + target: 'web', watch: true -}) +} diff --git a/dev/webpack/webpack.prod.js b/dev/webpack/webpack.prod.js index 4dd7d38d..c8183d47 100644 --- a/dev/webpack/webpack.prod.js +++ b/dev/webpack/webpack.prod.js @@ -1,18 +1,209 @@ -const merge = require('webpack-merge') +const webpack = require('webpack') +const path = require('path') +const fs = require('fs-extra') const CleanWebpackPlugin = require('clean-webpack-plugin') +const CopyWebpackPlugin = require('copy-webpack-plugin') +const HtmlWebpackPlugin = require('html-webpack-plugin') +const HtmlWebpackPugPlugin = require('html-webpack-pug-plugin') +const MiniCssExtractPlugin = require('mini-css-extract-plugin') const OfflinePlugin = require('offline-plugin') -const SimpleProgressWebpackPlugin = require('simple-progress-webpack-plugin') const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin') +const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin') +const SimpleProgressWebpackPlugin = require('simple-progress-webpack-plugin') -const common = require('./webpack.common.js') +const babelConfig = fs.readJsonSync(path.join(process.cwd(), '.babelrc')) +const cacheDir = '.webpack-cache/cache' +const babelDir = path.join(process.cwd(), '.webpack-cache/babel') -module.exports = merge(common, { +process.noDeprecation = true + +module.exports = { mode: 'production', + entry: { + client: './client/index.js' + }, + output: { + path: path.join(process.cwd(), 'assets'), + publicPath: '/', + filename: 'js/[name].js', + chunkFilename: 'js/[name].js', + globalObject: 'this' + }, module: { - rules: [] + rules: [ + { + test: /\.js$/, + exclude: /node_modules/, + use: [ + { + loader: 'cache-loader', + options: { + cacheDirectory: cacheDir + } + }, + { + loader: 'babel-loader', + options: { + ...babelConfig, + cacheDirectory: babelDir + } + } + ] + }, + { + test: /\.css$/, + use: [ + 'style-loader', + MiniCssExtractPlugin.loader, + 'css-loader', + 'postcss-loader' + ] + }, + { + test: /\.scss$/, + use: [ + { + loader: 'cache-loader', + options: { + cacheDirectory: cacheDir + } + }, + 'style-loader', + MiniCssExtractPlugin.loader, + 'css-loader', + 'postcss-loader', + { + loader: 'sass-loader', + options: { + sourceMap: false + } + } + ] + }, + { + test: /\.styl$/, + use: [ + 'style-loader', + MiniCssExtractPlugin.loader, + 'css-loader', + 'postcss-loader', + 'stylus-loader' + ] + }, + { + test: /\.vue$/, + loader: 'vue-loader', + options: { + loaders: { + scss: [ + 'vue-style-loader', + MiniCssExtractPlugin.loader, + 'css-loader', + 'postcss-loader', + { + loader: 'sass-loader', + options: { + sourceMap: false + } + }, + { + loader: 'sass-resources-loader', + options: { + resources: path.join(process.cwd(), '/client/scss/global.scss') + } + } + ], + js: [ + { + loader: 'cache-loader', + options: { + cacheDirectory: cacheDir + } + }, + { + loader: 'babel-loader', + options: { + babelrc: path.join(process.cwd(), '.babelrc'), + cacheDirectory: babelDir + } + } + ] + } + } + }, + { + test: /\.(png|jpg|gif)$/, + use: [ + { + loader: 'url-loader', + options: { + limit: 8192 + } + } + ] + }, + { + test: /\.svg$/, + exclude: [ + path.join(process.cwd(), 'client/svg') + ], + use: [ + { + loader: 'file-loader', + options: { + name: '[name].[ext]', + outputPath: 'svg/' + } + } + ] + }, + { + test: /\.svg$/, + include: [ + path.join(process.cwd(), 'client/svg') + ], + use: [ + { + loader: 'raw-loader' + } + ] + }, + { + test: /.jsx$/, + loader: 'babel-loader', + exclude: /node_modules/, + options: { + presets: ['es2015', 'react'] + } + }, + { + test: /\.flow$/, + loader: 'ignore-loader' + } + ] }, plugins: [ + new webpack.BannerPlugin('Wiki.js - wiki.js.org - Licensed under AGPL'), + new CopyWebpackPlugin([ + { from: 'client/static' }, + { from: './node_modules/graphql-voyager/dist/voyager.worker.js', to: 'js/' } + ], {}), + new MiniCssExtractPlugin({ + filename: 'css/bundle.css', + chunkFilename: 'css/[name].css' + }), + new HtmlWebpackPlugin({ + template: 'dev/templates/master.pug', + filename: '../server/views/master.pug', + hash: true, + inject: 'head' + }), + new HtmlWebpackPugPlugin(), + new ScriptExtHtmlWebpackPlugin({ + sync: 'runtime.js', + defaultAttribute: 'async' + }), new SimpleProgressWebpackPlugin({ format: 'expanded' }), @@ -48,5 +239,44 @@ module.exports = merge(common, { }, safeToUseOptionalCaches: true }) - ] -}) + ], + optimization: { + namedModules: true, + namedChunks: true, + splitChunks: { + name: 'vendor', + minChunks: 2 + }, + runtimeChunk: 'single' + }, + resolve: { + mainFields: ['browser', 'main', 'module'], + symlinks: true, + alias: { + '@': path.join(process.cwd(), 'client'), + 'vue$': 'vue/dist/vue.esm.js', + 'mdi': path.resolve(process.cwd(), 'node_modules/vue-material-design-icons'), + // Duplicates fixes: + 'apollo-link': path.join(process.cwd(), 'node_modules/apollo-link'), + 'apollo-utilities': path.join(process.cwd(), 'node_modules/apollo-utilities'), + 'uc.micro': path.join(process.cwd(), 'node_modules/uc.micro') + }, + extensions: [ + '.js', + '.json', + 'jsx', + '.vue' + ], + modules: [ + 'node_modules' + ] + }, + node: { + fs: 'empty' + }, + stats: { + children: false, + entrypoints: false + }, + target: 'web' +} diff --git a/package.json b/package.json index 8cca5e06..24565e7e 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "build": "webpack --profile --config dev/webpack/webpack.prod.js", "build:locales": "node dev/tasks/localization", "watch": "webpack --config dev/webpack/webpack.dev.js", - "test": "eslint --ext .js,.vue . && jest" + "test": "eslint --format codeframe --ext .js,.vue . && pug-lint server/views && jest" }, "bin": { "wiki": "wiki.js" @@ -174,6 +174,7 @@ "file-loader": "1.1.11", "graphiql": "0.11.11", "graphql-tag": "^2.8.0", + "graphql-voyager": "1.0.0-rc.15", "hammerjs": "2.0.8", "html-webpack-plugin": "3.0.6", "html-webpack-pug-plugin": "0.3.0", @@ -187,9 +188,11 @@ "node-sass": "4.7.2", "offline-plugin": "4.9.0", "optimize-css-assets-webpack-plugin": "4.0.0", + "postcss-cssnext": "3.1.0", "postcss-flexbugs-fixes": "3.3.0", "postcss-flexibility": "2.0.0", - "postcss-loader": "2.1.1", + "postcss-import": "11.1.0", + "postcss-loader": "2.1.2", "postcss-selector-parser": "3.1.1", "pug-lint": "2.5.0", "pug-loader": "2.3.0", @@ -249,6 +252,39 @@ "classNameTemplate": "{classname}-{title}", "titleTemplate": "{classname}-{title}" }, + "postcss": { + "plugins": { + "autoprefixer": {}, + "cssnano": { + "preset": [ + "default", + { + "discardComments": { + "removeAll": true + } + } + ] + }, + "postcss-flexbugs-fixes": {}, + "postcss-flexibility": {} + } + }, + "pugLintConfig": { + "disallowDuplicateAttributes": true, + "disallowIdAttributeWithStaticValue": true, + "disallowMultipleLineBreaks": true, + "requireClassLiteralsBeforeAttributes": true, + "requireIdLiteralsBeforeAttributes": true, + "requireLineFeedAtFileEnd": true, + "requireLowerCaseAttributes": true, + "requireLowerCaseTags": true, + "requireSpaceAfterCodeOperator": true, + "requireStrictEqualityOperators": true, + "validateAttributeQuoteMarks": "'", + "validateAttributeSeparator": ", ", + "validateDivTags": true, + "validateIndentation": 2 + }, "nodemonConfig": { "exec": "node server --dev", "ignore": [ diff --git a/server/graph/schemas/system.graphql b/server/graph/schemas/system.graphql new file mode 100644 index 00000000..f7b03635 --- /dev/null +++ b/server/graph/schemas/system.graphql @@ -0,0 +1,45 @@ +# =============================================== +# SYSTEM +# =============================================== + +extend type Query { + system: SystemQuery +} + +extend type Mutation { + system: SystemMutation +} + +# ----------------------------------------------- +# QUERIES +# ----------------------------------------------- + +type SystemQuery { + info: SystemInfo +} + +# ----------------------------------------------- +# MUTATIONS +# ----------------------------------------------- + +type SystemMutation { + todo: String +} + +# ----------------------------------------------- +# TYPES +# ----------------------------------------------- + +type SystemInfo { + currentVersion: String + latestVersion: String + latestVersionReleaseDate: Date + operatingSystem: String + hostname: String + cpuCores: Int + ramTotal: Int + workingDirectory: String + nodeVersion: String + redisVersion: String + postgreVersion: String +} diff --git a/server/views/main/login.pug b/server/views/main/login.pug index ed023c9d..fb37bced 100644 --- a/server/views/main/login.pug +++ b/server/views/main/login.pug @@ -1,7 +1,5 @@ extends ../master.pug block body - body - #app.is-fullscreen - login - navigator + #app.is-fullscreen + login diff --git a/server/views/main/welcome.pug b/server/views/main/welcome.pug index ddb4ccff..e82a1f7a 100644 --- a/server/views/main/welcome.pug +++ b/server/views/main/welcome.pug @@ -1,11 +1,10 @@ extends ../master.pug block body - body - #app.is-fullscreen - v-app - .onboarding - img(src='/svg/logo-wikijs.svg', alt='Wiki.js') - h1= t('welcome.title') - h2= t('welcome.subtitle') - v-btn(color='primary', href='/e/home')= t('welcome.createhome') + #app.is-fullscreen + v-app + .onboarding + img(src='/svg/logo-wikijs.svg', alt='Wiki.js') + h1= t('welcome.title') + h2= t('welcome.subtitle') + v-btn(color='primary', href='/e/home')= t('welcome.createhome') diff --git a/server/views/master.pug b/server/views/master.pug index be49145b..ac9f39dc 100644 --- a/server/views/master.pug +++ b/server/views/master.pug @@ -27,8 +27,8 @@ html block head - link(href="/css/client.css?89183d15bb0e30aac49f" rel="stylesheet") - script(type="text/javascript" src="/js/runtime.js?89183d15bb0e30aac49f") - script(type="text/javascript" src="/js/client.js?89183d15bb0e30aac49f" async) + link(href="/css/client.css?c473342a20546c545ebc" rel="stylesheet") + script(type="text/javascript" src="/js/runtime.js?c473342a20546c545ebc") + script(type="text/javascript" src="/js/client.js?c473342a20546c545ebc" async) body block body diff --git a/test/lint.js b/test/lint.js deleted file mode 100644 index b6fea94b..00000000 --- a/test/lint.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict' - -const fs = require('fs-extra') -const colors = require('colors') - -expect.extend({ - /** - * Expect ESLint results to have no errors - * @param {*} received ESLint results - * @param {*} argument Arguments - * @returns {object} Matcher result - */ - toESLint (received, argument) { - if (received && received.errorCount > 0) { - let errorMsgBuf = [] - for (let i = 0; i < received.results.length; i++) { - const result = received.results[i] - if (result.errorCount <= 0) { - continue - } - - for (let x = 0; x < result.messages.length; x++) { - const m = result.messages[x] - errorMsgBuf.push(colors.grey(`└── ${result.filePath}\t${m.line}:${m.column}\t${m.message}`)) - } - } - if (errorMsgBuf.length > 0) { - return { - message: () => (errorMsgBuf.join(`\n`)), - pass: false - } - } - } - return { - pass: true - } - }, - /** - * Expect PugLint results to have no errors - * @param {*} received PugLint results - * @param {*} argument Arguments - * @returns {object} Matcher result - */ - toPugLint (received, argument) { - if (received && received.length > 0) { - let errorMsgBuf = [] - for (let i = 0; i < received.length; i++) { - errorMsgBuf.push(colors.grey(`└── ${received[i].message}`)) - } - return { - message: () => (errorMsgBuf.join(`\n`)), - pass: false - } - } - return { - pass: true - } - } -}) - -describe('Code Linting', () => { - // it('should pass ESLint validation', () => { - // const CLIEngine = require('eslint').CLIEngine - // const cli = new CLIEngine() - // let report = cli.executeOnFiles(['**/*.js', '**/*.vue']) - // expect(report).toESLint() - // }) - - it('should pass PugLint validation', () => { - const PugLint = require('pug-lint') - const lint = new PugLint() - const pugConfig = fs.readJsonSync('tools/pug-lintrc.json') - lint.configure(pugConfig) - let report = lint.checkPath('./server/views') - expect(report).toPugLint() - }) -}) diff --git a/wiki.js b/wiki.js index e902bf22..78d54f29 100644 --- a/wiki.js +++ b/wiki.js @@ -84,7 +84,10 @@ const init = { console.info('>>> Starting Wiki.js in DEVELOPER mode...') require('./server') - const devWatcher = chokidar.watch('./server') + const devWatcher = chokidar.watch([ + './server', + '!./server/views/master.pug' + ]) devWatcher.on('ready', () => { devWatcher.on('all', () => { console.warn('--- >>>>>>>>>>>>>>>>>>>>>>>>>>>> ---') diff --git a/yarn.lock b/yarn.lock index fc001a93..95a886a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -79,6 +79,38 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" +"@f/animate@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@f/animate/-/animate-1.0.1.tgz#a031398adadf9a0bd3a56398cec931f877d88485" + dependencies: + "@f/elapsed-time" "^1.0.0" + "@f/raf" "^1.0.0" + "@f/tween" "^1.0.0" + +"@f/elapsed-time@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@f/elapsed-time/-/elapsed-time-1.0.0.tgz#6a079a6104a87278bf5b4080444ef02d1b595449" + dependencies: + "@f/timestamp" "^1.0.0" + +"@f/map-obj@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@f/map-obj/-/map-obj-1.2.2.tgz#d9a9f8bd76caa2ae11b633dda24d9c6cccc1e60d" + +"@f/raf@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@f/raf/-/raf-1.0.3.tgz#32ddca37de345b20c8c3843018cc51b8f897914d" + +"@f/timestamp@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@f/timestamp/-/timestamp-1.0.0.tgz#32a9166e2516e5ccb9b0fcfdc89223819710e88c" + +"@f/tween@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@f/tween/-/tween-1.0.1.tgz#18aef79c4975e54415adf326e4b5e0d053d207f0" + dependencies: + "@f/map-obj" "^1.2.2" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -779,6 +811,17 @@ autoprefixer@^6.3.1: postcss "^5.2.16" postcss-value-parser "^3.2.3" +autoprefixer@^7.1.1: + version "7.2.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.6.tgz#256672f86f7c735da849c4f07d008abb056067dc" + dependencies: + browserslist "^2.11.3" + caniuse-lite "^1.0.30000805" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.17" + postcss-value-parser "^3.2.3" + aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" @@ -1599,7 +1642,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-runtime@^6.26.0: +babel-runtime@^6.23.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -1706,6 +1749,10 @@ backoff@^2.5.0: dependencies: precond "0.2" +balanced-match@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a" + balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -1973,7 +2020,7 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^2.0.0: +browserslist@^2.0.0, browserslist@^2.11.3: version "2.11.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" dependencies: @@ -2218,6 +2265,10 @@ caniuse-lite@^1.0.30000744: version "1.0.30000744" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000744.tgz#860fa5c83ba34fe619397d607f30bb474821671b" +caniuse-lite@^1.0.30000805: + version "1.0.30000815" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000815.tgz#3a4258e6850362185adb11b0d754a48402d35bf6" + caniuse-lite@^1.0.30000809, caniuse-lite@^1.0.30000810: version "1.0.30000812" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000812.tgz#d173b686b49bc941fa18ff2e7e533048e20ed92c" @@ -2250,6 +2301,10 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +chain-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" + chalk@2.3.x, chalk@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" @@ -2420,6 +2475,10 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classnames@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" + clean-css@4.1.x: version "4.1.11" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" @@ -2621,7 +2680,7 @@ color-convert@^1.0.0, color-convert@^1.9.0: dependencies: color-name "^1.1.1" -color-convert@^1.3.0, color-convert@^1.8.2: +color-convert@^1.3.0, color-convert@^1.8.2, color-convert@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" dependencies: @@ -2637,7 +2696,7 @@ color-string@^0.3.0: dependencies: color-name "^1.0.0" -color-string@^1.4.0: +color-string@^1.4.0, color-string@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.2.tgz#26e45814bc3c9a7cbd6751648a41434514a773a9" dependencies: @@ -2659,13 +2718,20 @@ color@^0.11.0: color-convert "^1.3.0" color-string "^0.3.0" -color@^1.0.0: +color@^1.0.0, color@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/color/-/color-1.0.3.tgz#e48e832d85f14ef694fb468811c2d5cfe729b55d" dependencies: color-convert "^1.8.2" color-string "^1.4.0" +color@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color/-/color-2.0.1.tgz#e4ed78a3c4603d0891eba5430b04b86314f4c839" + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + colormin@^1.0.5: version "1.1.2" resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" @@ -2737,6 +2803,15 @@ commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" +commonmark@^0.28.1: + version "0.28.1" + resolved "https://registry.yarnpkg.com/commonmark/-/commonmark-0.28.1.tgz#06eab8d52338b839fa1a2d75af0085eed1b1beae" + dependencies: + entities "~ 1.1.1" + mdurl "~ 1.0.1" + minimist "~ 1.2.0" + string.prototype.repeat "^0.2.0" + component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" @@ -3060,6 +3135,15 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +css-color-function@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/css-color-function/-/css-color-function-1.3.3.tgz#8ed24c2c0205073339fafa004bc8c141fccb282e" + dependencies: + balanced-match "0.1.0" + color "^0.11.0" + debug "^3.1.0" + rgb "~0.1.0" + css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -3589,6 +3673,10 @@ dom-converter@~0.1: dependencies: utila "~0.3" +dom-helpers@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" + dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" @@ -3817,7 +3905,7 @@ enhanced-resolve@^4.0.0: memory-fs "^0.4.0" tapable "^1.0.0" -entities@^1.1.1, entities@~1.1.1: +entities@^1.1.1, "entities@~ 1.1.1", entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" @@ -4138,6 +4226,10 @@ execa@^0.9.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +exenv@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" + exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -5130,7 +5222,7 @@ graphql-list-fields@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/graphql-list-fields/-/graphql-list-fields-2.0.1.tgz#06d921eddfbadafa66970e21ff0acdab3cf039db" -graphql-request@^1.4.0: +graphql-request@^1.3.6, graphql-request@^1.4.0: version "1.5.1" resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-1.5.1.tgz#cccdf5cce6432ca062b90f7b63793c77c821ff9a" dependencies: @@ -5154,6 +5246,25 @@ graphql-tools@2.23.1: iterall "^1.1.3" uuid "^3.1.0" +graphql-voyager@1.0.0-rc.15: + version "1.0.0-rc.15" + resolved "https://registry.yarnpkg.com/graphql-voyager/-/graphql-voyager-1.0.0-rc.15.tgz#1ece08f2ec0606dbf7ecec234fb4bd1466c05f0c" + dependencies: + "@f/animate" "^1.0.1" + classnames "^2.2.5" + clipboard "^1.7.1" + commonmark "^0.28.1" + graphql-request "^1.3.6" + lodash "^4.17.2" + prop-types "^15.6.0" + react-modal "^2.3.3" + react-redux "^5.0.6" + react-toolbox "^2.0.0-beta.11" + redux "^3.7.1" + redux-thunk "^2.1.0" + reselect "^3.0.1" + svg-pan-zoom "^3.5.2" + graphql@0.13.2: version "0.13.2" resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.13.2.tgz#4c740ae3c222823e7004096f832e7b93b2108270" @@ -5377,6 +5488,14 @@ hogan.js@^3.0.2: mkdirp "0.3.0" nopt "1.0.10" +hoist-non-react-statics@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" + +hoist-non-react-statics@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -5725,6 +5844,12 @@ into-stream@^3.1.0: from2 "^2.1.1" p-is-promise "^1.1.0" +invariant@^2.0.0, invariant@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + dependencies: + loose-envify "^1.0.0" + invariant@^2.2.0, invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" @@ -6181,6 +6306,10 @@ isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" +isnumeric@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/isnumeric/-/isnumeric-0.2.0.tgz#a2347ba360de19e33d0ffd590fddf7755cbf2e64" + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -7100,12 +7229,20 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +lodash-es@^4.17.5, lodash-es@^4.2.1: + version "4.17.7" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.7.tgz#db240a3252c3dd8360201ac9feef91ac977ea856" + lodash-webpack-plugin@0.11.4: version "0.11.4" resolved "https://registry.yarnpkg.com/lodash-webpack-plugin/-/lodash-webpack-plugin-0.11.4.tgz#6c3ecba3d4b8d24b53940b63542715c5ed3c4ac5" dependencies: lodash "^4.17.4" +lodash._reinterpolate@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" @@ -7262,6 +7399,19 @@ lodash.tail@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" +lodash.template@^4.2.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + dependencies: + lodash._reinterpolate "~3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + dependencies: + lodash._reinterpolate "~3.0.0" + lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" @@ -7274,7 +7424,7 @@ lodash.values@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" -lodash@4.17.5, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.5: +lodash@4.17.5, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.5, lodash@^4.2.1: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -7493,7 +7643,7 @@ md5@^2.2.1: crypt "~0.0.1" is-buffer "~1.1.1" -mdurl@^1.0.1: +mdurl@^1.0.1, "mdurl@~ 1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -7727,7 +7877,7 @@ minimist@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, "minimist@~ 1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -8285,6 +8435,10 @@ one-time@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/one-time/-/one-time-0.0.4.tgz#f8cdf77884826fe4dff93e3a9cc37b1e4480742e" +onecolor@^3.0.4: + version "3.0.5" + resolved "https://registry.yarnpkg.com/onecolor/-/onecolor-3.0.5.tgz#36eff32201379efdf1180fb445e51a8e2425f9f6" + onetime@^1.0.0: version "1.1.0" resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" @@ -8873,6 +9027,14 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pixrem@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pixrem/-/pixrem-4.0.1.tgz#2da4a1de6ec4423c5fc3794e930b81d4490ec686" + dependencies: + browserslist "^2.0.0" + postcss "^6.0.0" + reduce-css-calc "^1.2.7" + pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" @@ -8889,6 +9051,13 @@ pkginfo@0.2.x, pkginfo@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.2.3.tgz#7239c42a5ef6c30b8f328439d9b9ff71042490f8" +pleeease-filters@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pleeease-filters/-/pleeease-filters-4.0.0.tgz#6632b2fb05648d2758d865384fbced79e1ccaec7" + dependencies: + onecolor "^3.0.4" + postcss "^6.0.1" + pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" @@ -8975,6 +9144,21 @@ posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" +postcss-apply@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/postcss-apply/-/postcss-apply-0.8.0.tgz#14e544bbb5cb6f1c1e048857965d79ae066b1343" + dependencies: + babel-runtime "^6.23.0" + balanced-match "^0.4.2" + postcss "^6.0.0" + +postcss-attribute-case-insensitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-2.0.0.tgz#94dc422c8f90997f16bd33a3654bbbec084963b4" + dependencies: + postcss "^6.0.0" + postcss-selector-parser "^2.2.3" + postcss-calc@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" @@ -8992,6 +9176,71 @@ postcss-calc@^6.0.0: postcss-selector-parser "^2.2.2" reduce-css-calc "^2.0.0" +postcss-color-function@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-function/-/postcss-color-function-4.0.1.tgz#402b3f2cebc3f6947e618fb6be3654fbecef6444" + dependencies: + css-color-function "~1.3.3" + postcss "^6.0.1" + postcss-message-helpers "^2.0.0" + postcss-value-parser "^3.3.0" + +postcss-color-gray@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-4.1.0.tgz#e5581ed57eaa826fb652ca11b1e2b7b136a9f9df" + dependencies: + color "^2.0.1" + postcss "^6.0.14" + postcss-message-helpers "^2.0.0" + reduce-function-call "^1.0.2" + +postcss-color-hex-alpha@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-3.0.0.tgz#1e53e6c8acb237955e8fd08b7ecdb1b8b8309f95" + dependencies: + color "^1.0.3" + postcss "^6.0.1" + postcss-message-helpers "^2.0.0" + +postcss-color-hsl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-hsl/-/postcss-color-hsl-2.0.0.tgz#12703666fa310430e3f30a454dac1386317d5844" + dependencies: + postcss "^6.0.1" + postcss-value-parser "^3.3.0" + units-css "^0.4.0" + +postcss-color-hwb@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-hwb/-/postcss-color-hwb-3.0.0.tgz#3402b19ef4d8497540c1fb5072be9863ca95571e" + dependencies: + color "^1.0.3" + postcss "^6.0.1" + postcss-message-helpers "^2.0.0" + reduce-function-call "^1.0.2" + +postcss-color-rebeccapurple@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-3.0.0.tgz#eebaf03d363b4300b96792bd3081c19ed66513d3" + dependencies: + postcss "^6.0.1" + postcss-value-parser "^3.3.0" + +postcss-color-rgb@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-rgb/-/postcss-color-rgb-2.0.0.tgz#14539c8a7131494b482e0dd1cc265ff6514b5263" + dependencies: + postcss "^6.0.1" + postcss-value-parser "^3.3.0" + +postcss-color-rgba-fallback@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz#37d5c9353a07a09270912a82606bb42a0d702c04" + dependencies: + postcss "^6.0.6" + postcss-value-parser "^3.3.0" + rgb-hex "^2.1.0" + postcss-colormin@^2.1.8: version "2.2.2" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" @@ -9024,6 +9273,62 @@ postcss-convert-values@^4.0.0-rc.2: postcss "^6.0.0" postcss-value-parser "^3.0.0" +postcss-cssnext@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-cssnext/-/postcss-cssnext-3.1.0.tgz#927dc29341a938254cde38ea60a923b9dfedead9" + dependencies: + autoprefixer "^7.1.1" + caniuse-api "^2.0.0" + chalk "^2.0.1" + pixrem "^4.0.0" + pleeease-filters "^4.0.0" + postcss "^6.0.5" + postcss-apply "^0.8.0" + postcss-attribute-case-insensitive "^2.0.0" + postcss-calc "^6.0.0" + postcss-color-function "^4.0.0" + postcss-color-gray "^4.0.0" + postcss-color-hex-alpha "^3.0.0" + postcss-color-hsl "^2.0.0" + postcss-color-hwb "^3.0.0" + postcss-color-rebeccapurple "^3.0.0" + postcss-color-rgb "^2.0.0" + postcss-color-rgba-fallback "^3.0.0" + postcss-custom-media "^6.0.0" + postcss-custom-properties "^6.1.0" + postcss-custom-selectors "^4.0.1" + postcss-font-family-system-ui "^3.0.0" + postcss-font-variant "^3.0.0" + postcss-image-set-polyfill "^0.3.5" + postcss-initial "^2.0.0" + postcss-media-minmax "^3.0.0" + postcss-nesting "^4.0.1" + postcss-pseudo-class-any-link "^4.0.0" + postcss-pseudoelements "^5.0.0" + postcss-replace-overflow-wrap "^2.0.0" + postcss-selector-matches "^3.0.1" + postcss-selector-not "^3.0.1" + +postcss-custom-media@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-6.0.0.tgz#be532784110ecb295044fb5395a18006eb21a737" + dependencies: + postcss "^6.0.1" + +postcss-custom-properties@^6.1.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-6.3.1.tgz#5c52abde313d7ec9368c4abf67d27a656cba8b39" + dependencies: + balanced-match "^1.0.0" + postcss "^6.0.18" + +postcss-custom-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-4.0.1.tgz#781382f94c52e727ef5ca4776ea2adf49a611382" + dependencies: + postcss "^6.0.1" + postcss-selector-matches "^3.0.0" + postcss-discard-comments@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" @@ -9098,6 +9403,41 @@ postcss-flexibility@2.0.0: dependencies: postcss "^6.0.1" +postcss-font-family-system-ui@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-family-system-ui/-/postcss-font-family-system-ui-3.0.0.tgz#675fe7a9e029669f05f8dba2e44c2225ede80623" + dependencies: + postcss "^6.0" + +postcss-font-variant@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-3.0.0.tgz#08ccc88f6050ba82ed8ef2cc76c0c6a6b41f183e" + dependencies: + postcss "^6.0.1" + +postcss-image-set-polyfill@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/postcss-image-set-polyfill/-/postcss-image-set-polyfill-0.3.5.tgz#0f193413700cf1f82bd39066ef016d65a4a18181" + dependencies: + postcss "^6.0.1" + postcss-media-query-parser "^0.2.3" + +postcss-import@11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-11.1.0.tgz#55c9362c9192994ec68865d224419df1db2981f0" + dependencies: + postcss "^6.0.1" + postcss-value-parser "^3.2.3" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-initial@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-2.0.0.tgz#72715f7336e0bb79351d99ee65c4a253a8441ba4" + dependencies: + lodash.template "^4.2.4" + postcss "^6.0.1" + postcss-load-config@^1.1.0, postcss-load-config@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" @@ -9121,15 +9461,25 @@ postcss-load-plugins@^2.3.0: cosmiconfig "^2.1.1" object-assign "^4.1.0" -postcss-loader@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.1.tgz#208935af3b1d65e1abb1a870a912dd12e7b36895" +postcss-loader@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.2.tgz#03f54e23be736c9ea4f610e17d2a299254c05130" dependencies: loader-utils "^1.1.0" postcss "^6.0.0" postcss-load-config "^1.2.0" schema-utils "^0.4.0" +postcss-media-minmax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-3.0.0.tgz#675256037a43ef40bc4f0760bfd06d4dc69d48d2" + dependencies: + postcss "^6.0.1" + +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + postcss-merge-idents@^2.1.5: version "2.1.7" resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" @@ -9272,6 +9622,12 @@ postcss-modules-values@^1.3.0: icss-replace-symbols "^1.1.0" postcss "^6.0.1" +postcss-nesting@^4.0.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-4.2.1.tgz#0483bce338b3f0828ced90ff530b29b98b00300d" + dependencies: + postcss "^6.0.11" + postcss-normalize-charset@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" @@ -9373,6 +9729,19 @@ postcss-ordered-values@^4.0.0-rc.2: postcss "^6.0.0" postcss-value-parser "^3.0.0" +postcss-pseudo-class-any-link@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-4.0.0.tgz#9152a0613d3450720513e8892854bae42d0ee68e" + dependencies: + postcss "^6.0.1" + postcss-selector-parser "^2.2.3" + +postcss-pseudoelements@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz#eef194e8d524645ca520a949e95e518e812402cb" + dependencies: + postcss "^6.0.0" + postcss-reduce-idents@^2.2.2: version "2.4.0" resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" @@ -9412,6 +9781,26 @@ postcss-reduce-transforms@^4.0.0-rc.2: postcss "^6.0.0" postcss-value-parser "^3.0.0" +postcss-replace-overflow-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-2.0.0.tgz#794db6faa54f8db100854392a93af45768b4e25b" + dependencies: + postcss "^6.0.1" + +postcss-selector-matches@^3.0.0, postcss-selector-matches@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-3.0.1.tgz#e5634011e13950881861bbdd58c2d0111ffc96ab" + dependencies: + balanced-match "^0.4.2" + postcss "^6.0.1" + +postcss-selector-not@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-3.0.1.tgz#2e4db2f0965336c01e7cec7db6c60dff767335d9" + dependencies: + balanced-match "^0.4.2" + postcss "^6.0.1" + postcss-selector-parser@3.1.1, postcss-selector-parser@^3.0.0-rc.0: version "3.1.1" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" @@ -9420,7 +9809,7 @@ postcss-selector-parser@3.1.1, postcss-selector-parser@^3.0.0-rc.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2, postcss-selector-parser@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" dependencies: @@ -9483,6 +9872,14 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 source-map "^0.5.6" supports-color "^3.2.3" +postcss@^6.0, postcss@^6.0.11, postcss@^6.0.14, postcss@^6.0.17, postcss@^6.0.18, postcss@^6.0.5, postcss@^6.0.6: + version "6.0.20" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.20.tgz#686107e743a12d5530cb68438c590d5b2bf72c3c" + dependencies: + chalk "^2.3.2" + source-map "^0.6.1" + supports-color "^5.3.0" + postcss@^6.0.0, postcss@^6.0.8: version "6.0.16" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.16.tgz#112e2fe2a6d2109be0957687243170ea5589e146" @@ -9615,7 +10012,7 @@ promptly@2.2.0: dependencies: read "^1.0.4" -prop-types@^15.6.0: +prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.6.0: version "15.6.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" dependencies: @@ -9875,6 +10272,10 @@ querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" +ramda@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.23.0.tgz#ccd13fff73497a93974e3e86327bfd87bd6e8e2b" + random-bytes@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" @@ -9935,6 +10336,13 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-css-themr@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/react-css-themr/-/react-css-themr-2.1.2.tgz#e017514e471c232f43a754a55b49d81faf5dafb8" + dependencies: + hoist-non-react-statics "^1.2.0" + invariant "^2.2.1" + react-dom@16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" @@ -9944,6 +10352,51 @@ react-dom@16.2.0: object-assign "^4.1.1" prop-types "^15.6.0" +react-modal@^2.3.3: + version "2.4.1" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-2.4.1.tgz#cb09b26711b148eb9f59cb180e1b7d82980ded05" + dependencies: + exenv "^1.2.0" + prop-types "^15.5.10" + +react-redux@^5.0.6: + version "5.0.7" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8" + dependencies: + hoist-non-react-statics "^2.5.0" + invariant "^2.0.0" + lodash "^4.17.5" + lodash-es "^4.17.5" + loose-envify "^1.1.0" + prop-types "^15.6.0" + +react-style-proptype@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/react-style-proptype/-/react-style-proptype-3.2.1.tgz#7cfeb9b87ec7ab9dcbde9715170ed10c11fb86aa" + dependencies: + prop-types "^15.5.4" + +react-toolbox@^2.0.0-beta.11: + version "2.0.0-beta.12" + resolved "https://registry.yarnpkg.com/react-toolbox/-/react-toolbox-2.0.0-beta.12.tgz#1d9dd7cc41e3b35dabdce5eb100a8068eee88c45" + dependencies: + classnames "^2.2.5" + core-js "^2.4.0" + ramda "^0.23.0" + react-css-themr "^2.1.2" + react-style-proptype "^3.0.0" + react-transition-group "^1.1.3" + +react-transition-group@^1.1.3: + version "1.2.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6" + dependencies: + chain-function "^1.0.0" + dom-helpers "^3.2.0" + loose-envify "^1.3.1" + prop-types "^15.5.6" + warning "^3.0.0" + react@16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" @@ -9953,6 +10406,12 @@ react@16.2.0: object-assign "^4.1.1" prop-types "^15.6.0" +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + dependencies: + pify "^2.3.0" + read-chunk@2.1.0, read-chunk@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.1.0.tgz#6a04c0928005ed9d42e1a6ac5600e19cbc7ff655" @@ -10135,7 +10594,7 @@ redis@~0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/redis/-/redis-0.10.3.tgz#8927fe2110ee39617bcf3fd37b89d8e123911bb6" -reduce-css-calc@^1.2.6: +reduce-css-calc@^1.2.6, reduce-css-calc@^1.2.7: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" dependencies: @@ -10150,12 +10609,25 @@ reduce-css-calc@^2.0.0: css-unit-converter "^1.1.1" postcss-value-parser "^3.3.0" -reduce-function-call@^1.0.1: +reduce-function-call@^1.0.1, reduce-function-call@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" dependencies: balanced-match "^0.4.2" +redux-thunk@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5" + +redux@^3.7.1: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.3" + regenerate@^1.2.1: version "1.3.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" @@ -10430,6 +10902,10 @@ require_optional@^1.0.1: resolve-from "^2.0.0" semver "^5.1.0" +reselect@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -10506,10 +10982,18 @@ retry@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.6.0.tgz#1c010713279a6fd1e8def28af0c3ff1871caa537" +rgb-hex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-2.1.0.tgz#c773c5fe2268a25578d92539a82a7a5ce53beda6" + rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" +rgb@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/rgb/-/rgb-0.1.0.tgz#be27b291e8feffeac1bd99729721bfa40fc037b5" + rgba-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" @@ -11213,6 +11697,10 @@ string.prototype.padstart@^3.0.0: es-abstract "^1.4.3" function-bind "^1.0.2" +string.prototype.repeat@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" + string@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/string/-/string-3.3.3.tgz#5ea211cd92d228e184294990a6cc97b366a77cb0" @@ -11358,6 +11846,10 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +svg-pan-zoom@^3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/svg-pan-zoom/-/svg-pan-zoom-3.5.3.tgz#e6b52a1b349716c78e7b5f92d0ed1cc1b860f5d8" + svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -11382,6 +11874,10 @@ symbol-observable@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" +symbol-observable@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -11804,6 +12300,13 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +units-css@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/units-css/-/units-css-0.4.0.tgz#d6228653a51983d7c16ff28f8b9dc3b1ffed3a07" + dependencies: + isnumeric "^0.2.0" + viewport-dimensions "^0.2.0" + universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" @@ -12010,6 +12513,10 @@ verror@^1.8.1: core-util-is "1.0.2" extsprintf "^1.2.0" +viewport-dimensions@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz#de740747db5387fd1725f5175e91bac76afdf36c" + vinyl-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a" @@ -12187,6 +12694,12 @@ walker@~1.0.5: dependencies: makeerror "1.0.x" +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + dependencies: + loose-envify "^1.0.0" + watch@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"